12.03.2012, 18:00 | #1 (permalink) |
Новичок
Регистрация: 19.12.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Дан одномерный массив X(N)
Дан одномерный массив X(N) .Найти наибольший элемент (MAX), Преобразовать исходный массив таким образом ,чтобы все элементы по модулю не равные (MAX) заменились нулями,остальные единицами. Решение через randomize почему-то оказалось не верным. Программа написанная ниже тоже оказалась не верной. Помогите сделать пытаюсь сдать задачу не первый раз и всё время не принимают. program p1; var x:array[1..100] of integer; max,i,n:integer; begin write('Введите количество элементов='); readln(n); writeln('Исходный массив'); randomize; for i:=1 to n do begin x[i]:=random(101)-50; write(x[i]:3); if (x[i]>=max) then max:=x[i]; end; writeln; writeln('Новый массив'); for i:=1 to n do begin if (abs(x[i])=max) and (x[i]<>max) then x[i]:=1; if (x[i]<>max) and (abs(x[i])<>max) then x[i]:=0; write(x[i]:3); end; readln end. |
12.03.2012, 18:00 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Ранее созданные темы скорее всего помогут вам решить эту проблему Одномерный массив в Паскале Одномерный массив Одномерный массив в Delphi Одномерный массив Одномерный массив Одномерный массив. Рассчитать сопротивление сложного соединения. |
12.03.2012, 20:09 | #2 (permalink) |
Специалист
Регистрация: 27.08.2008
Адрес: Санкт-Петербург
Сообщений: 27,807
Сказал(а) спасибо: 340
Поблагодарили 583 раз(а) в 208 сообщениях
Репутация: 113184
|
Мне кажется, Вы тут чего-то накрутили лишнего:
if (abs(x[i])=max) and (x[i]<>max) then x[i]:=1; if (x[i]<>max) and (abs(x[i])<>max) then x[i]:=0; Попробуйте вместо этого так: if abs(x[i])=max then x[i]:=1 else x[i]:=0; И потом - раз речь идет о модулях, то лучше позволить элементам массива принимать не только положительные, но и отрицательные значения, для чего строку x[i]:=random(101)-50; заменить, например, на x[i]:=50-random(101); и изменить формат вывода чисел с 3 на 4. Но, правда, в этом случае придется явно задать исходное значение max, поставив после randomize; строку max:=-60; Впрочем, сейчас проверю. Ну да, всё правильно, проверено. Правда, не на АВС (этой дряни я у себя на компе не потерплю), а на Free, но работает: Код:
program p1; var x:array[1..100] of integer; max,i,n:integer; begin write('Введите количество элементов= '); readln(n); writeln('Исходный массив'); randomize; max:=-60; for i:=1 to n do begin x[i]:=50-random(101); write(x[i]:4); if (x[i]>=max) then max:=x[i]; end; writeln; writeln('Новый массив'); for i:=1 to n do begin if abs(x[i])=max then x[i]:=1 else x[i]:=0; write(x[i]:4); end; readln end. |
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|