Задан упорядоченный по невозрастанию одномерный массив.
1) Найти произведение отрицательных элементов массива; 2) Найти сумму положительных элементов массива; 3) Упорядоченный по невозрастанию массив преобразовать в упорядоченный по возрастанию, оставив по одному в каждой группе совпадающих элементов.
volvo
5.12.2005 21:41
Используй Поиск + FAQ ... Уже десятки раз решалось.
Merlin
6.12.2005 2:24
Насчёт пунктов 1 и 2 я почти разобрался, а вот как с 3). ? а именно :
Как сделать вот это : "оставив по одному в каждой группе совпадающих элементов."
volvo
6.12.2005 2:34
Цитата
Как сделать вот это : "оставив по одному в каждой группе совпадающих элементов."
2. Или надо сначала задать массив, а потом упорядочить по невозрастанию ?
volvo
10.12.2005 19:23
Ну, во-первых, у тебя в задании записано, что он уже задан как упорядоченный, значит ничего дополнительно с ним делать для этого не надо...
А во вторых, то что ты привел в предыдущем посте - ошибка, т.к. у тебя получается не массив чисел, а массив строк. Паскаль это не пропустит... Посмотри как у меня написано...
Merlin
10.12.2005 19:40
Program z;
const a: array [1..10] of integer = (5, 4, 3, 2, 2, 1, -1, -2, -3, -4); Var i , j , P, S :integer;
Begin n:10; P:=1; for i:=1 to n do if a[i] < 0 then begin { произведение отриц. элем. } P:= P* a[i]; end;
S:=0; for i:=1 to n do if a[i] > 0 then begin { Сумма положит. элементов } S:= S + a[i]; end;
i := 2; while i <= n do if a[i] = a[i - 1] then begin for j := i to n - 1 do a[j] := a[j + 1]; dec(n); end else inc(i);
for i := 1 to n do write(a[i]:4); writeln; writeln( ' Сумма положительных элементов S=', S:3:7); writeln( ' Произведение отрицательных элементов P=' ,P:3:7); end.
Volvo, подскажи есть ли тут ошибки ?
GoodWind
10.12.2005 21:48
такой вариант в ТМТ отработал на "ура", в ТП тоже все должно работать:
Program z;
const a: array [1..10] of integer = (5, 4, 3, 2, 2, 1, -1, -2, -3, -4); Var i , j , P, S,n :integer; {n ты забыл описАть}
Begin n:=10; P:=1; {было n:10;} for i:=1 to n do if a[i] < 0 then begin { произведение отриц. элем. } P:= P* a[i]; end;
S:=0; for i:=1 to n do if a[i] > 0 then begin { Сумма положит. элементов } S:= S + a[i]; end;
i := 2; while i <= n do if a[i] = a[i - 1] then begin for j := i to n - 1 do a[j] := a[j + 1]; dec(n); end else inc(i);
for i := 1 to n do write(a[i]:4); writeln; writeln( ' Сумма положительных элементов S=', S:3); writeln( ' Произведение отрицательных элементов P=' ,P:3);{на форматирование вывода ругался} end.
так вот
Merlin
10.12.2005 23:28
Всё работает, спасибо , вот только
Цитата
) Упорядоченный по невозрастанию массив преобразовать в упорядоченный по возрастанию
Как вы думаете пойдёт такой способ из FAQ'а ?
for i:=1 to size-1 do begin nmin:=i; for j:=i+1 to size do if mass[j] > mass[Nmin] then Nmin:=j;
for i := 1 to n div 2 do begin temp := x[i]; x[i] := x[n-i+1]; x[n-i+1] := temp; end;
Merlin
12.12.2005 0:53
Код
Program z;
const a: array [1..10] of integer = (5, 4, 3, 2, 2, 1, -1, -2, -3, -4); Var i , j , P, S, n :integer; temp: array [1..10] of integer;
Begin n:=10; P:=1; for i:=1 to n do if a[i] < 0 then begin { произведение отриц. элем. } P:= P* a[i]; end;
S:=0; for i:=1 to n do if a[i] > 0 then begin { Сумма положит. элементов } S:= S + a[i]; end;
i := 2; while i <= n do if a[i] = a[i - 1] then begin for j := i to n - 1 do a[j] := a[j + 1]; dec(n); end else inc(i);
for i:= 1 to n div 2 do begin temp: = a[i]; { Выдаёт ошибку type mismatch } a[i]:= x[n-i +1]; a[n-i+1]:=temp; end;
for i := 1 to n do write(a[i]:4); writeln; writeln( ' Сумма положительных элементов S=', S:3); writeln( ' Произведение отрицательных элементов P=' ,P:3); end.
Что с этой инверсией не так, что я сделал неправильно ?
klem4
12.12.2005 1:14
посмотри как у тебя описана temp ... она должна быть не тип массива, а тип элемента массива
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.