Даны натуральное число n и целые числа q, a1,…,an, где n≤1000. Если в последовательности a1,…,an есть хотя бы один член, равный q, то получить сумму всех членов, следующих за первым таким членом; в противном случае ответом должно служить количество отрицательных элементов.
Написал программулину, вроде все верно считает, даже не вроде, а точно верно! Но сегодня при защите получилось вот как интересно.
Преподаватель взглянув на эту программу:
program antipov;
var a: array [1..1000] of integer;
var q,n,k,i,b,s:integer;
begin
writeln('vvedi kolvo elementov posledovatelnosty');
readln(n);
writeln('vvedi chislo Q');
readln(q);
k:=0;
s:=0;
writeln('vvode elementy posledovatelnosty');
for i:=1 to n do begin
read(a[i]);
end;
for i:=1 to n do begin
if a[i]=q then begin b:=i+1; for i:=b to n do begin s:=s+a[i];
end;
writeln('summa elementov posle chisla Q=',s);
end;
end;
for i:=1 to n do
begin if a[i]<0 then k:=k+1;
end;
if s=0 then
writeln('kolvo otric.chisel=',k);
end.
Сказал, чтобы я изменил БУКВУ СЧЕТЧИКА ЦИКЛА. Что я и сделал, изменив программу до такого вида, естественно добавив в блок описаний новую переменную J(в строке, где заменена буква счетчика я поставил стрелки справа):
program antipov;
var a: array [1..1000] of integer;
var q,n,k,i,b,j,s:integer;
begin
writeln('vvedi kolvo elementov posledovatelnosty');
readln(n);
writeln('vvedi chislo Q');
readln(q);
k:=0;
s:=0;
writeln('vvode elementy posledovatelnosty');
for i:=1 to n do begin
read(a[i]);
end;
for i:=1 to n do begin
if a[i]=q then begin b:=i+1; for j:=b to n do begin s:=s+a[j]; <===============
end;
writeln('summa elementov posle chisla Q=',s);
end;
end;
for i:=1 to n do
begin if a[i]<0 then k:=k+1;
end;
if s=0 then
writeln('kolvo otric.chisel=',k);
end.
Казалось бы, что изменилось? А изменилось. Вот последовательность, которую дал преподаватель:
Кол-во элементов : 7.
Число q, с которым сравниваем = 15
а вот сама последовательность:
a[1]=8
a[2]=12
a[3]=15
a[4]=4
a[5]=15
a[6]=2
a[7]=1
и вместо положенных 22, программа выдала 2 ответа: 22 и 25. При чем в первом варианте программы ответ был один и верный - 22!!!!!
Я начал подробно смотреть решение. Разбивал эти циклы на два отдельных цикла - выдает ошибку.
Перемещал end'ы - безрезультатно.
Подскажите, что делать?
При чем, программу я писал сам, и при написании даже не думал, почему НЕ нужно менять букву счетчика. А препод заставил задуматься. Поможете?
Заранее спасибо.