Помощь - Поиск - Пользователи - Календарь
Полная версия: Задача с массивом
Форум «Всё о Паскале» > 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, спасибо, вроде все получилось
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.