Помощь - Поиск - Пользователи - Календарь
Полная версия: расчета элементов.
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Konsuela
Задание такое:
Составить подпрограмму для определения числа элементов одномерного массива, предшествующих его первому отрицательному элементу.
Пишу программу, а после набора массива она зависает... может проблема в самой функции?

function kol (A: mass;  n: integer ):integer;
var
i, j:integer;
k:integer;
begin
k:=0;
for i:= 1 to n do
begin
repeat
k:=k+1;
until A[i]<0;
end;

kol:=k;

end;
мисс_граффити
у тебя конструкция из циклов странная. она и зацикливается.
сначала должен отработать внутренний цикл, и только потом произойдет смена i.
то есть на первом же положительном элементе цикл
repeat
k:=k+1;
until A[i]<0;

превратится в вечный.
смотри: если у тебя отрицательный на пятой позиции - можешь сказать, сколько перед ним положительных?
а если на восьмой?

то есть тебе достаточно найти его индекс - отдельно считать не нужно.
убери цикл for, а в repeat работай с i

а вообще - не забывай пользоваться тэгами.
Konsuela
begin



repeat
z:=i;
until A[i]<0;


kol:=z;

end;


Вот так??? а у меня всё равно виснет.... я что-то недопонимаю видно...
Bokul

const
n=5;
mas:array[1..n] of integer=(1,2,3,-4,2);
var i:byte; b:boolean;
begin
i:=0;
b:=false;
repeat
inc(i);
if mas[i]<0 then
b:=true;
until (i=n) or (b=true);
if b then
writeln(i-1)
else
writeln('All elements are positive');
readln;
end.

Гость
или так
Код
i:=1;
while (i<=n) and (A[i]>=0) do
   inc(i);
Konsuela
Я искренне благодарна за помощь, но я пока новичок и нам даже не давали программки с True и False...
Bokul
Цитата
Я искренне благодарна за помощь, но я пока новичок и нам даже не давали программки с True и False...


const
n=5;
mas:array[1..n] of integer=(1,2,3,4,2);
var i:byte; b:byte;
begin
i:=0;
b:=0;
repeat
inc(i);
if mas[i]<0 then
b:=1;
until (i=n) or (b=1);
if b=1 then
writeln(i-1)
else
writeln('All elements are positive');
readln;
end.



Цитата
или так

i:=1;
while (i<=n) and (A[i]>=0) do
inc(i);



А если отрицательных элементов в массиве не будет?
Konsuela
Цитата(Гость @ 1.12.2006 22:09) *

или так
Код
i:=1;
while (i<=n) and (A[i]>=0) do
   inc(i);




Ой, спасибо большое! Заработало наконец-то.
И последний (наверное глупый) вопрос- что значит inc(i)?

Цитата(Bokul @ 1.12.2006 22:14) *


const
n=5;
mas:array[1..n] of integer=(1,2,3,4,2);
var i:byte; b:byte;
begin
i:=0;
b:=0;
repeat
inc(i);
if mas[i]<0 then
b:=1;
until (i=n) or (b=1);
if b=1 then
writeln(i-1)
else
writeln('All elements are positive');
readln;
end.




А если отрицательных элементов в массиве не будет?


И ВАМ Спасибо огромное за отзывчивость yes2.gif
Bokul
Цитата
И последний (наверное глупый) вопрос- что значит inc(i)?

Глупых вопросов не бывает, но зато бывает лень заглянуть в справку. Набери в Паскале inc, выдели его и нажми Ctrl+F1.

Ой, спасибо большое! Заработало наконец-то. 

Выделенной код (не мой) не обрабатывает всех ситуаций...
Konsuela
Цитата(Bokul @ 1.12.2006 22:22) *

Глупых вопросов не бывает, но зато бывает лень заглянуть в справку. Набери в Паскале inc, выдели его и нажми Ctrl+F1.

Ой, спасибо большое! Заработало наконец-то. 

Выделенной код (не мой) не обрабатывает всех ситуаций...


Это приняла во внимание... А всё-таки вот эта inc(i)- перебирает мой массив?
Bokul
Цитата
А всё-таки вот эта inc(i)- перебирает мой массив?

Это равнозначно i:=i+1. Т.е. мы увеличиваем i на единицу.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.