IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Сочетание массивов и условия
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 31
Пол: Мужской

Репутация: -  0  +


Ребята, привет! Писал я задачу вот по такому условию:
Даны натуральное число 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'ы - безрезультатно.
Подскажите, что делать?
При чем, программу я писал сам, и при написании даже не думал, почему НЕ нужно менять букву счетчика. А препод заставил задуматься. Поможете?

Заранее спасибо.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.05.2024 6:43
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name