Массив, Одномерный массив |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
Массив, Одномерный массив |
Wizzy |
4.11.2010 11:47
Сообщение
#1
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Павел Репутация: 0 |
Здравствуйте, появились проблемы, при решении данной задачи:
Дан массив х вещественных чисел. Получить упорядоченный по невозрастанию массив, состоящий из чисел данного массива, находящихся между предпоследним и последним отрицательным членом. (Проверить массив на наличие элементов между ними) program mass; Прошу помощи с поиском предпоследнего и поледнего отрицательного числа и как можно организовать вывод конечного массива, просто если я записываю отрицательные числа в другой массив, на месте положительных получаются нули. |
Client |
4.11.2010 12:15
Сообщение
#2
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
ищи с конца массива первые 2 отрицательные числа, запомни их индексы, перенеси элементы в другой массив и отсортируй. выведи второй массив.
|
sheka |
4.11.2010 12:34
Сообщение
#3
|
Я. Группа: Пользователи Сообщений: 809 Пол: Мужской Реальное имя: Саша Репутация: 11 |
Э, не)
А если в массиве 1 отрицательное число? А если их вообще нет? Есть 2 способа решения этой задачи: проход с начала массива и до конца с перезаписью позиций последнего-предпоследнего элементов, и другой, проход с конца массива и в сторону начала массива и с помощью Break. 2й более предпочтительный. И только потом, анализируя присутствие, как минимум последнего-предпоследнего отрицательных элементов, можно заполнять новый массив. (хотя можно поизвращаться и попытаться это сделать все сразу, но это уже как сказать что лучше..). |
Unconnected |
4.11.2010 13:03
Сообщение
#4
|
mea culpa Группа: Пользователи Сообщений: 1 372 Пол: Мужской Реальное имя: Николай Репутация: 24 |
Наверное, надо идти с конца и после нахождения первого отрицательного переносить все числа в другой массив, бОльшие добавляя в начало, а меньшие дописывая в конец. В одном цикле (с одним вложенным) должно получиться.
Сообщение отредактировано: Unconnected - 4.11.2010 13:03 -------------------- "Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
|
TarasBer |
4.11.2010 13:09
Сообщение
#5
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
> переносить все числа в другой массив, бОльшие добавляя в начало, а меньшие дописывая в конец
бОльшие чего? Вот идём мы, и получаем сначала 1, потом 3, потом 2. Куда эту двойку? -------------------- |
Client |
4.11.2010 13:10
Сообщение
#6
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
Цитата Э, не) А если в массиве 1 отрицательное число? А если их вообще нет? const Потестируй, может найдешь баг |
Wizzy |
4.11.2010 13:31
Сообщение
#7
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Павел Репутация: 0 |
Ну примерно так, массив развернул, нашёл последний и предпоследний элементы
Код program mass; const max = 10; var i, j, k, n, d: integer; x, z: real; a, s, obrat: array [1..max] of real; begin writeln('Программа выводит элементы массива, расположенные между предпоследним и последним отрицательными числами'); writeln('Введите количество элементов массива'); read(n); k := 0; j := 0; writeln('Введите элементы массива'); for i := 1 to n do {Ввод массива} read(s[i]); for i := 1 to max do obrat[max - i + 1] := s[i]; begin for i := 1 to max do {Проверяем массив} begin if obrat[i] < 0 {Если элемент массива отрицателен} then begin a[i] := obrat[i]; {присваиваем отрицательные числа массива s массива a} k := k + 1; {счётчит отрицательных элементов массива} if k = 2 then break; end; end; end; for i := 1 to max - 1 do {упорядочивание массива по убыванию} for j := i + 1 to max do if a[i] < a[j] then begin x := a[i]; a[i] := a[j]; a[j] := x; end; for i := 1 to max do write(a[i], ' '); {Вывод массива} writeln; end. подскажите, как дальше поступать? |
volvo |
4.11.2010 13:35
Сообщение
#8
|
Гость |
Цитата подскажите, как дальше поступать? То есть, вопрос "что делать если НЕТ двух отрицательных чисел" проигнорирован? |
Wizzy |
4.11.2010 13:48
Сообщение
#9
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Павел Репутация: 0 |
Ну вроде как написано указание "(Проверить массив на наличие элементов между ними(отрицательными числами))", мне кажется, что их наличие обязательно...
|
Client |
4.11.2010 13:57
Сообщение
#10
|
Профи Группа: Пользователи Сообщений: 865 Пол: Мужской Реальное имя: Вячеслав Репутация: 20 |
Цитата Проверить массив на наличие о чем говорит? Что надо проверить, а не что они там обязательныя выложил код, который считает сумму элементов между последними отрицательными (сам не знаю почему), а тебе надо отсортировать. Пару строк изменить и все. Сообщение отредактировано: Client - 4.11.2010 13:58 |
Wizzy |
4.11.2010 13:57
Сообщение
#11
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Павел Репутация: 0 |
Код const n = 10; var mas : array [1..n] of integer; a : array [1..2] of byte; i, k : byte; s : integer; begin writeln('Vvedite massiv'); for i := 1 to n do read (mas[i]); a[1] := n; a[2] := n; k := 2; i := n; s := 0; while (i > 0) and (k > 0) do begin if mas[i] < 0 then begin a[k] := i; dec(k); end; dec(i); end; for i := a[1] + 1 to a[2] - 1 do s := s + mas[i]; writeln(s); end. ну тут, как я понял записыфваются индексы этих чисел, только вот как их можно испльзовать? Добавлено через 1 мин. я понял, спасибо, сейчас попробую |
TarasBer |
4.11.2010 14:00
Сообщение
#12
|
Злостный любитель Группа: Пользователи Сообщений: 1 755 Пол: Мужской Репутация: 62 |
Зачем массив разворачивать?!
Убери переменную obrat, пока меня кондратий не хватил! Для обхода массива с конца существует оператор downto, если что. -------------------- |
Wizzy |
4.11.2010 14:05
Сообщение
#13
|
Группа: Пользователи Сообщений: 5 Пол: Мужской Реальное имя: Павел Репутация: 0 |
Код const n = 10; var mas, m: array [1..n] of integer; a: array [1..2] of byte; i, k: byte; j, x: integer; begin writeln('Программа выводит элементы массива, расположенные между предпоследним и последним отрицательными числами'); writeln('Введите массив'); for i := 1 to n do read(mas[i]); a[1] := n; a[2] := n; k := 2; i := n; while (i > 0) and (k > 0) do begin if mas[i] < 0 then begin a[k] := i; dec(k); end; dec(i); end; for i := a[1] + 1 to a[2] - 1 do m[i] := mas[i]; for i := 1 to n - 1 do {упорядочивание массива по убыванию} for j := i + 1 to n do if m[i] < m[j] then begin x := m[i]; m[i] := m[j]; m[j] := x; end; for i:=1 to n do write (' ', m[i]); end. спасибо огромное ) Сообщение отредактировано: Wizzy - 4.11.2010 14:25 |
Аленка |
4.10.2013 18:56
Сообщение
#14
|
Гость |
так какое окончательное решение задачи то? я запуталась честно говоря уже))
|
Текстовая версия | 27.04.2024 13:11 |