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