ребята прошу вас помочь с задачей:
1)вычислить произведение элементов разположенных между первыми и последнями положительными элементами. Вот задача составляная мною:
[syntax=pascal]
program 1;
const n=10;
Var a:array[1..n] of integer;
i,p,min,max,nom,x,j:integer;
label 1;
begin
writeln('Vvedite elementu massiva');
for i:=1 to n do read(a);
writeln('Vuvod massiva');
for i:=1 to n do write (a:5);
writeln;
p:=1;
max:=0;
for i:=1 to n do
if a>max then goto 1;
1: nom:=i;
for i:=nom+1 to n do
if a>max then begin nom:=i;
end;
writeln;
for i:=1 to n do
if a>0 then break else min:=i;
writeln('min=',min);
for i:=min+1 to nom do begin
p:=p*a;
end;
writeln('proizvedenie ravno ',p);
end.
[/syntax]
Проблема в том что ответ при любом вводе получается отрицательным. Как можно исправить чтобы ответ всегда был положительным?
Откликнувшимся заранее спасибо
произведение элементов между первым и последним положительными элементами
-
- Сообщения: 526
- Зарегистрирован: 03 янв 2009, 23:17
- Откуда: Voronezh
- Контактная информация:
[syntax=pascal]
program proizvel;
uses crt;
Var a:array[1..50] of integer;
i,proizv,nom0,nom1,n:integer;
begin
clrscr;
write('Zadaite kol-vo elementov massiva: ');
readln(n);
clrscr;
writeln('Vvodite elementu massiva: ');
for i:=1 to n do
begin
write('#',i,': ');
readln(a);
end;
clrscr;
write('Massiv: ');
nom0:=-1;
for i:=1 to n do
begin
if (nom0=-1) and (a>0) then nom0:=i;
write(a:5,' ');
end;
writeln;
if nom0=-1 then
begin
writeln('ERROR! Ne naideno ne odnogo polozhitelnogo elementa!');
write('Press any key to EXIT... ');
readkey;
halt;
end;
for i:=n downto 1 do
if a>0 then
begin
nom1:=i;
break;
end;
proizv:=1;
if nom0=nom1 then writeln('ERROR! Naiden tolko odin polozhitelnyi element!')
else
if (nom0>-1) then
begin
for i:=nom0+1 to nom1-1 do proizv:=proizv*a;
writeln('Proizvedenie elementov: ',proizv);
end;
write('Press any key to EXIT... ');
readkey;
end.
[/syntax]
program proizvel;
uses crt;
Var a:array[1..50] of integer;
i,proizv,nom0,nom1,n:integer;
begin
clrscr;
write('Zadaite kol-vo elementov massiva: ');
readln(n);
clrscr;
writeln('Vvodite elementu massiva: ');
for i:=1 to n do
begin
write('#',i,': ');
readln(a);
end;
clrscr;
write('Massiv: ');
nom0:=-1;
for i:=1 to n do
begin
if (nom0=-1) and (a>0) then nom0:=i;
write(a:5,' ');
end;
writeln;
if nom0=-1 then
begin
writeln('ERROR! Ne naideno ne odnogo polozhitelnogo elementa!');
write('Press any key to EXIT... ');
readkey;
halt;
end;
for i:=n downto 1 do
if a>0 then
begin
nom1:=i;
break;
end;
proizv:=1;
if nom0=nom1 then writeln('ERROR! Naiden tolko odin polozhitelnyi element!')
else
if (nom0>-1) then
begin
for i:=nom0+1 to nom1-1 do proizv:=proizv*a;
writeln('Proizvedenie elementov: ',proizv);
end;
write('Press any key to EXIT... ');
readkey;
end.
[/syntax]
Нет религии выше истины
спасибо большое что отклинулись. но только задачка с другим условием
Так это, вы посмотрите, можт у вас там отрицательные числа в этом промежутке есть. Если их там нечетное количество - произведение отрицательно 
Чтобы ответ всегда был положительным - возьмите модуль
В код не вчитывался, но по-моему там наворочено слишком много лишнего. Вам надо:
1) Пробежать массив от начала к концу и сохранить номер первого же положительного элемента - i.
2) Пробежать массив от конца к началу и тоже сохранить номер положительного элемента - j.
3) Пробежать массив от i+1 до j-1, перемножая там все числа.
Все дела, зачем огород городить.

Чтобы ответ всегда был положительным - возьмите модуль

В код не вчитывался, но по-моему там наворочено слишком много лишнего. Вам надо:
1) Пробежать массив от начала к концу и сохранить номер первого же положительного элемента - i.
2) Пробежать массив от конца к началу и тоже сохранить номер положительного элемента - j.
3) Пробежать массив от i+1 до j-1, перемножая там все числа.
Все дела, зачем огород городить.
- Oleg_Rus
- Сообщения: 335
- Зарегистрирован: 16 окт 2006, 09:56
- Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
- Контактная информация:
azrael, обязательно ли бегать по всему массиву? Можно же через repeat дойти до первого положительного справа и слева...
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
А вы присмотритесь, я не то же самое написал?Oleg_Rus писал(а):azrael, обязательно ли бегать по всему массиву? Можно же через repeat дойти до первого положительного справа и слева...

- Oleg_Rus
- Сообщения: 335
- Зарегистрирован: 16 окт 2006, 09:56
- Откуда: г.Улан-Удэ, респ.Бурятия, Российская Федерация
- Контактная информация:
var first, last: boolean;
n, i, FirstInt, LastInt: integer;
a: array [1..100] of integer;
begin
read(n);
for i:=1 to n do read(a);
i:=1;
repeat
if a>0 then
begin
FirstInt:=a;
First:= not First;
end;
inc(i);
until First;
i:=n;
repeat
if a>0 then
begin
LastInt:=a;
Last:= not Last;
end;
dec(i);
until Last;
Writeln(FirstInt*LastInt);
end.
В прынцыпе задача дееспособна. если нужны комменты стучи в асю 574153777
n, i, FirstInt, LastInt: integer;
a: array [1..100] of integer;
begin
read(n);
for i:=1 to n do read(a);
i:=1;
repeat
if a>0 then
begin
FirstInt:=a;
First:= not First;
end;
inc(i);
until First;
i:=n;
repeat
if a>0 then
begin
LastInt:=a;
Last:= not Last;
end;
dec(i);
until Last;
Writeln(FirstInt*LastInt);
end.
В прынцыпе задача дееспособна. если нужны комменты стучи в асю 574153777
e-mail: garmayev@yandex.ru
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>
---------------------------------------------------------------------------
<a href="http://nick-name.ru/sertificates/711965/"><img src="http://nick-name.ru/img.php?nick=Garmay ... =2&text=t5" alt="Никнейм Garmayev зарегистрирован!" /></a>