Другие языки программирования и технологии
как доделать программу?
задание:В одномерном массиве, состоящем из 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.не могу сообразить как заставить соображать где последний нуль.
Введи две переменные: первая - номер первого нуля, друга - номер последнего нуля. Прогоняй цикл. Как только встретится нуль, присваивай обеим переменным его номер (т. к. ноль может оказаться единственным) . Это в первый раз. А дальше номер нулевого элемента присваивай только второй переменной.
например так:
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 и вычисляешь сумму
например так:
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 и вычисляешь сумму
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];
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];
не так.
последний нулевой элемент - это первый с конца. Ты вначале прогоняешь цикл вперед, ищешь первый элемент, потом в обратном направлении - ищешь последний (первый с конца) . А потом просто пускаешь цикл между этими элементами, который будет считать сумму.
последний нулевой элемент - это первый с конца. Ты вначале прогоняешь цикл вперед, ищешь первый элемент, потом в обратном направлении - ищешь последний (первый с конца) . А потом просто пускаешь цикл между этими элементами, который будет считать сумму.
Павел Баденин
goto вообще не рекомендуется использовать, кстати
Сергей Кутузов
Мысли сходятся...
не смотре что у вас там две переменные начало конец - целые
цикл от начала (to) в конец до 0 потом перываешь запоминаешь
цикл от конца (downto) в начало до 0 потом перываешь запоминаешь
потом цик от пер начало до пер конец с суммой
цикл от начала (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; // вычисляем сумму элементов (не количество а сумму) :)
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 :)) ступил сам :)
Илья Гребеньков
блин :)) квадратные скобки вырезает....:((((
Похожие вопросы
- Как доделать программу в Си?
- Помогите доделать программу
- Помогите доделать программу пожалуйста ) На языке Си
- Помогите пожайлуста доделать программу в паскале! Не получается ((
- помогите доделать программу по паскалю пожалуйста
- Помогите доделать программу перевод из морзе на Паскале.
- Обманул фри-лансер. Оплатили всю работу по сайту, а он взял и пропал не доделав сайт, не отвечает на звонки. Как бы ему
- помогите доделать код на паскале
- Создание программ.
- Продаю программу с исходниками на Visual Basic 2008 за 50 руб.