Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ Получить отрицательную сумму

Автор: Орхидея 1.10.2006 1:02

Сегодня мне была дана задачка:
Написать программу получения из N чисел (N=10) вводимых с клавиатуры получить отрицательную сумму.
Знакома я с паскалем всего два часа мне он понравился, не судите строго меня за мою примитивность просто я его очень мало знаю и написала как знаю. Скажите верна ли такая программка при данном условии.

Код

uses crt;
var
n,n1,n2,n3,n4,n5,n6,n7,n8,n9,x,x1;longint;
begin
write('n,n1,n2,n3,n4,n5,n6,n7,n8,n9=');
readln(n,n1,n2,n3,n4,n5,n6,n7,n8,n9);
x:= n+n1+n2+n3+n4+n5+n6+n7+n8+n9;
writeln('n+n1+n2+n3+n4+n5+n6+n7+n8+n9=',x)
x1:= x*-1;
writeln('x*-1=',x1);
end.


Я раньше нигде не програмировала, так что тут все мои знания за два часа по Фаронову.
Правильно ли решена задача?

Автор: volvo 1.10.2006 1:17

А нужно будет 20 чисел? Еще 10 переменных добавишь? smile.gif

Между тем, достаточно всего одной:

var
i: integer;
X, sum: integer;
begin
sum := 0;
for i := 1 to 10 do begin
readln(X);

{ Я, например, понимаю так, что тебе нужна сумма отрицательных элементов }
if X < 0 then sum := sum + X;
end;

writeln('sum = ', sum);
end.


если мое предположение относительно отрицательной суммы неправильно - говори, переделаем smile.gif ...

Автор: Орхидея 1.10.2006 2:04

Как я поняла - i - у тебя выступает в роли колл-ва переменных, это верно, но я не пойму где у тебя написано значение икса выходит я сразу ввожу значение икса вроли уже известной мне сумму и если число отрицательное, программа складывает его с числом 0 что выводит его в виде отрицательного значение, но мне нужно еще и вводить значения самих чисел из которых выйдет эта сумма. или я может чего то не понимаю wacko.gif

Поняла всё)))) легче было бы сделать не: если бы икс был меньше 0, а оставить любое значение, а просто
обозначить

Код
sum:= (sum+X)*-1


так было бы намного легче думаю

не не так
Вот так
Код

readln(x);
sum: sum+x;
writeln('sum=',sum*-1)


Так точно верно выдаст)

Автор: Орхидея 1.10.2006 2:42

Я совсем запуталась)))
написала так:

Код

uses crt;
var
i:integer;
x,sum:integer;
begin
sum:=0;
for i:= 1 to 10 do begin
readln(x);
if x<0 then
sum:= sum+x;
writeln('sum=',sum);
if x>0 then
sum:= sum+x*-1;
end;
writeln('sum=',sum);
end.


Получается всё то что я хотела но совсем каким то другим мне не понятным путем. Вводя любые числа будь то 50+(-40)+90+(-120) и т.д. выходит отрицательное число и все положительные цифры что я ввожу записываются как отрицательные.
Точно я где то допустила ошибку, но я паскаль то знаю всего ничего один день.
Вольво если не трудно поясни в чём проблема((

Автор: volvo 1.10.2006 2:46

Теперь ты и меня запутала... Вот при таком вводе:

Цитата
50+(-40)+90+(-120)
что ты хочешь получить в результате?

Автор: Орхидея 1.10.2006 2:52

странно но получается -300, т.е. что ни вводи получится их модульное сложение и в итоге сумма с минусом


lol.gif

Автор: volvo 1.10.2006 3:00

Я не спрашиваю, что получается. Я спрашиваю, что ДОЛЖНО получиться в соответствии с твоим заданием.

Автор: Орхидея 1.10.2006 3:04

Из вводимых чисел должна получится сумма выраженая отрицательным числом.

Автор: volvo 1.10.2006 3:15

Ты САМО число напечатать можешь, или это военная тайна?

Тогда извини...

nea.gif

Автор: Орхидея 1.10.2006 3:18

А ты про это, извини не поняла))
там нет ответа, просто из вводимых чисел должна получаться сумма выраженая отрицательным числом.
Вся задача в том что надо написать программку было.

Автор: мисс_граффити 1.10.2006 15:31

нельзя же писать программу, не зная, что хочешь от нее получить smile.gif
как ты сможешь проверить, правильно ли она работает?
можешь привести пример вводимых чисел и результата, который ДОЛЖЕН получиться на этих числах?
а то формулировка задания не совсем ясна.