• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о проекте, чтобы узнать больше. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Дан одномерный массив X(N)

  • Автор темы Автор темы Dextel
  • Дата начала Дата начала

Dextel

Ученик
Регистрация
19 Дек 2011
Сообщения
6
Реакции
0
Баллы
0
Дан одномерный массив 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:=random(101)-50;
write(x:3);
if (x>=max) then max:=x;
end;
writeln;
writeln('Новый массив');
for i:=1 to n do
begin
if (abs(x)=max) and (x<>max) then x:=1;
if (x<>max) and (abs(x)<>max) then x:=0;
write(x:3);
end;
readln
end.
 
Мне кажется, Вы тут чего-то накрутили лишнего:

if (abs(x)=max) and (x<>max) then x:=1;
if (x<>max) and (abs(x)<>max) then x:=0;

Попробуйте вместо этого так:

if abs(x)=max then x:=1 else x:=0;

И потом - раз речь идет о модулях, то лучше позволить элементам массива принимать не только положительные, но и отрицательные значения, для чего строку

x:=random(101)-50;

заменить, например, на

x:=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.
 
Назад
Сверху