Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача с массивом
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Ekaterina
Пожалуйста помогите решить задачу!
Вычислить сумму положительнх элементов до первого отрицательного и произведение отрицательных элементов до первого положительного элемента в массиве A(n), n<=20.Вывести массив, сумму и прозведение.
sheka
Вот что-то похожее. в теги кода это взять не насмелюсь lol.gif
Код
s = 0
i = 1
wile i<=20 and 0<a(i) do s = s + a(i)
d = 1
i = 1
wile i<=20 and a(i)<0 do d = d / a(i)
for i = 1 to 20 do writln[a(i)]
write{s;" ";d}

Берем книжку и учимся.
Lapp
Цитата(sheka @ 19.05.2011 23:54) *
Вот что-то похожее. в теги кода это взять не насмелюсь lol.gif
Шека, вообще-то это раздел по Паскалю.. Но даже если пишешь на "псевдокоде", используй неспециальные теги.

Цитата(Ekaterina @ 19.05.2011 22:42) *
Пожалуйста помогите решить задачу!
Вычислить сумму положительнх элементов до первого отрицательного и произведение отрицательных элементов до первого положительного элемента в массиве A(n), n<=20.Вывести массив, сумму и прозведение.
Показывай, что самой удалось сделать, и говори, с чем затык. Поможем.
TarasBer
Фу, в твоём псевдокоде для присваивания используется еретичное = вместо единственно верного :=
sheka
Это Я его псевдокодом назвал?
Это хуже _._._кода! lol.gif
Ekaterina
program z2;                                                                   
label M1, M2;
const
t=20;
var
A:array [1..t] of integer;
N,i,s,p:integer;
begin
writeln ('N=');
readln(N);
writeln('vvod massiva A');
for i:=1 to N do
readln(A[i]);
S:=0;
P:=1;
for i:=1 to N do
if A[i]>0 then S:=S+A[i]
else
begin
writeln('s=',s);
goto M1;
end;
M1: for i:=1 to N do
if A[i]<0 then P:=P*A[i]
else
begin
writeln('P=', P);
goto M2
end;
M2:end.

Программа не считает сумму и произведение(

М
Теги!!
- Lapp

sheka
Попробуй, пожалуйста, написать без goto - и все получится. Если не получится - выкладывай.

Добавлено через 2 мин.
И обрати внимание какие я циклы написал. Не проще ли?

ЗЫ:
Для выхода из цикла используется break. О goto - забудь.
Гость
Сейчас попробую, спасибо)
Krjuger
Цитата

goto M2
end;
M2:end.

Вот это убило мой мозг совсем.
А еще не понятно,а если первая серия состоит из отрицательных элементов,то надо считать серию из положительных или уже нет?
Кстати посмотри на свой код,пускай у тебя серия 2 3 4 -10 -4 ты считаеш в цикле и проверяеш первые 3 элемента все ок, они положительны сумма накапливается ты идеш на 4 элемент,он отрицателен и тут отрабатывает кусок else,но что в нем? В нем печать суммы и переход на проверку отрицательности в цикле,но ты опять начинает с первого элемента,а он у нас 2 и он положительный, как мы уже выяснили, и вполне логично, что строчка P:=P*A[i] никогда не отработает и ты сразу переходиш на еlse который печатает неверный p и тд,еще я лично не понял почему у каждой строчки кроме begin, else, for есть ";",а у
S:=S+A[i]
P:=P*A[i]
их как не странно нету.
Ekaterina
sheka, спасибо, вроде все получилось
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.