Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.04.2016, 20:05   #1
skr121
Новичок
Джуниор
 
Регистрация: 20.04.2016
Сообщений: 1
По умолчанию программа паскаль: найти сумму всех отрицательных элементов одномерного массива и заменить на это значение первый отрицательный

найти сумму всех отрицательных элементов одномерного массива и заменить на это значение первый отрицательный элемент
skr121 вне форума Ответить с цитированием
Старый 20.04.2016, 20:37   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Код:
uses crt;
const n =10;
var a:array[1..n]of integer;
i,f:integer;
begin
clrscr;randomize;
for i:=1 to n do begin a[i]:=random(20); a[і]:=a[i]-10; write(a[i]:4) end;
writeln;
f:=n+1;
for і:=1 to n do
begin
     if (a[i]<0) then
       begin
            іf f=n+1 then f:=i
            else a[f]:=a[f]+a[i]

       end;
end;
writeln;
for і:=1 to n do write(a[i]:4);
readln;
end.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.04.2016, 10:31   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию


я бы суммировал в отдельной переменной и потом явно присваивал нужном элементу.

потому что, если, вдруг, условие задачи преподаватель изменит (ну, скажем, на "заменить первый элемент массива на сумму всех отрицательных элементов"),
боюсь, что от вашего хитрого трюка с накоплением суммы в самом элементе, придётся отказаться!

p.s.
два вопроса.
1) зачем
a[i]:=-10+random(20);
разделять на два оператора?

2) чем f:=n+1 лучше, чем f:=0 ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2016, 10:48   #4
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

p.s.
два вопроса.
1) зачем
a[i]:=-10+random(20);
разделять на два оператора?

2) чем f:=n+1 лучше, чем f:=0 ?
1) хм, закон перестановки слагаемых не работает? Я всегда пользовался A[i]:=random(20)-10;, но с недавнего часа получаю ошибкуATT.jpg
2) имхо, ничем, "я художник, я так вижу"
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 21.04.2016, 11:37   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

А Вы, вероятно, плохо посмотрели на мой пост.
Посмотрите, пожалуйста, ещё раз.
там написано:
Код:
a[i]:=-10+random(20);
никакой разницы не видите?!


Цитата:
закон перестановки слагаемых не работает?
такая ошибка возникает только в TurboPascale, проблема в ошибочной попытке (предсказать и) сделать результат беззнаковым, что и приводит к данной ошибке.
В других компиляторах я такого косяка не встречал.
Но "лечится" это просто - достаточно первым поместить отрицательное число, как ошибка уйдёт...


Цитата:
2) имхо, ничем, "я художник, я так вижу"

Последний раз редактировалось Serge_Bliznykov; 21.04.2016 в 11:40.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 21.04.2016, 11:52   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Цитата:
a[i]:=random(20)-10;
Компилятор паскаля (не все компиляторы) считает, что тип всего выражения справа беззнаковый (Word) по 1-му операнду. Как только минус в результате вычислений то приходит каюк.
Цитата:
a[i]:=-10+random(20);
позволяет избавится от этого чудо-юдо-глюка

PS

у-у, пока сбегал покурить, Серж уже сообщил эту "новость"
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 21.04.2016 в 11:54.
Аватар вне форума Ответить с цитированием
Старый 21.04.2016, 13:25   #7
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
А Вы, вероятно, плохо посмотрели на мой пост.
Посмотрите, пожалуйста, ещё раз.
там написано:
Код:
a[i]:=-10+random(20);
никакой разницы не видите?!
разницу вижу, поэтому и написал глупость
Цитата:
закон перестановки слагаемых не работает?
Serge_Bliznykov,Аватар, спасибо за подсказку.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
FASM: Среди элементов одномерного массива (в сегменте данных) найти наибольший отрицательный и наименьший положительный элементы. 1234568654321 Помощь студентам 1 30.04.2015 20:30
Дан массив X(N).Найти среднеквадратичное всех элементов массива и заменить этим значение нулевые элементы массива. sev48fire Паскаль, Turbo Pascal, PascalABC.NET 3 21.06.2012 23:44
Вычислить сумму отрицательных элементов массива. Программа паскаль. dukkill Помощь студентам 3 20.11.2011 13:56
паскаль - Заменить каждый третий элемент массива на значение суммы всех его элементов. tanyalove Помощь студентам 4 26.05.2010 09:55
Pascal - Найти сумму всех ее отрицательных элементов и заменить ею все диагональные элементы этой матрицы NewBi Паскаль, Turbo Pascal, PascalABC.NET 2 24.04.2010 09:15