Технический форум
Вернуться   Технический форум > Программирование > Форум программистов > Delphi, Kylix and Pascal


Ответ
 
Опции темы Опции просмотра
Старый 12.03.2012, 18:00   #1 (permalink)
Dextel
Новичок
 
Регистрация: 19.12.2011
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
Post Дан одномерный массив 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.
Dextel вне форума   Ответить с цитированием

Старый 12.03.2012, 18:00
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Ранее созданные темы скорее всего помогут вам решить эту проблему

Одномерный массив в Паскале
Одномерный массив
Одномерный массив в Delphi
Одномерный массив
Одномерный массив
Одномерный массив. Рассчитать сопротивление сложного соединения.

Старый 12.03.2012, 20:09   #2 (permalink)
Vladimir_S
Специалист
 
Регистрация: 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.
Vladimir_S вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




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

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.