Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Дан одномерный массив X(N) (http://www.tehnari.ru/f43/t70465/)

Dextel 12.03.2012 18:00

Дан одномерный массив X(N)
 
Помогите пожалуйста решить задачу в Pascal ABC!
Дан одномерный массив 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.

Vladimir_S 12.03.2012 20:09

Мне кажется, Вы тут чего-то накрутили лишнего:

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.



Часовой пояс GMT +4, время: 00:28.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.