Другие языки программирования и технологии

как доделать программу?

задание:В одномерном массиве, состоящем из n целочисленных элементов, вычислить:сумму элементов массива, расположенных между первым и последним нулевыми элементами.то что придумал:program reshenie2;uses crt;const n=10;type mas=array[1..n] of integer;var i,s,q,k,m,O:integer; A:mas;beginclrscr;randomize;s:=0;for i:= 1 to n do a:=random(10);for i:= 1 to n do write(a:4);writeln;writeln('_________________________');for i:=1 to n doif (a=0) thenbeginq:=i;for i:=q+1 to n do while a<>0 do s:=s+a;end;O:=s-k;writeln;writeln('otvet ',O);goto;readkey;end.не могу сообразить как заставить соображать где последний нуль.
Чп (Ex Prokaznik)
Чп (Ex Prokaznik)
1 736
Введи две переменные: первая - номер первого нуля, друга - номер последнего нуля. Прогоняй цикл. Как только встретится нуль, присваивай обеим переменным его номер (т. к. ноль может оказаться единственным) . Это в первый раз. А дальше номер нулевого элемента присваивай только второй переменной.

например так:
for i:=1 to ...do
begin
if A> = 0
then
begin
if flag=false // нуль встретился первый раз
then
begin
n1:=i;
n2:=i;
flag:=true
end
else n2:=i
end;
end;

а потом пускаешь цикл от n1+1 до n2-1 и вычисляешь сумму
Слава Шахонин
Слава Шахонин
1 768
Лучший ответ
for k:=1 to n do if a[k] = 0 then begin f:=k; break; end; { нашли первый нуль }
for k:=n downto 1 do if if a[k] = 0 then begin s:=k; break; end; { нашли последний нуль }
{ если в массиве всего один нуль, то f=s}
sum:=0;
for k:=f+1 to s-1 do sum:=sum+a[k];
Сергей Кутузов
Сергей Кутузов
23 519
не так.
последний нулевой элемент - это первый с конца. Ты вначале прогоняешь цикл вперед, ищешь первый элемент, потом в обратном направлении - ищешь последний (первый с конца) . А потом просто пускаешь цикл между этими элементами, который будет считать сумму.
Павел Баденин
Павел Баденин
5 502
Павел Баденин goto вообще не рекомендуется использовать, кстати
Сергей Кутузов Мысли сходятся...
не смотре что у вас там две переменные начало конец - целые
цикл от начала (to) в конец до 0 потом перываешь запоминаешь
цикл от конца (downto) в начало до 0 потом перываешь запоминаешь
потом цик от пер начало до пер конец с суммой
Во-первых:
for i:= 1 to n do a:=random(10);
заменить на
for i:= 1 to n do a:=random(10);

for i:= 1 to n do write(a:4);
заменить на
for i:= 1 to n do write(a:4);

удивительно что так компилировалось (а компилировалось ли? )
Вариантjd решения много. предложу один из:

writeln('_________________________');
q:=0; s:=0; k:=0;
for i:=1 to n do
begin
if (q=0) and (a=0) then begin s:=i; q:=1; end; // отмечаем первый 0. Вообще q: boolean можно сделать
if a=0 then k:=i; // отмечаем все нули по очереди.. . последний и будет последним :)
end;
o:=0;
for i:=s to k do o:=o+a; // вычисляем сумму элементов (не количество а сумму) :)
Илья Гребеньков блин :)) там где заменить к a нужно подписать индекс a :)) ступил сам :)
Илья Гребеньков блин :)) квадратные скобки вырезает....:((((