1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
Задание такое: Составить подпрограмму для определения числа элементов одномерного массива, предшествующих его первому отрицательному элементу. Пишу программу, а после набора массива она зависает... может проблема в самой функции?
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;
у тебя конструкция из циклов странная. она и зацикливается. сначала должен отработать внутренний цикл, и только потом произойдет смена i. то есть на первом же положительном элементе цикл
repeat k:=k+1; until A[i]<0;
превратится в вечный. смотри: если у тебя отрицательный на пятой позиции - можешь сказать, сколько перед ним положительных? а если на восьмой?
то есть тебе достаточно найти его индекс - отдельно считать не нужно. убери цикл for, а в repeat работай с i
а вообще - не забывай пользоваться тэгами.
--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует. На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
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.
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Я искренне благодарна за помощь, но я пока новичок и нам даже не давали программки с 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);
А если отрицательных элементов в массиве не будет?
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Ой, спасибо большое! Заработало наконец-то. И последний (наверное глупый) вопрос- что значит 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.
А если отрицательных элементов в массиве не будет?
И последний (наверное глупый) вопрос- что значит inc(i)?
Глупых вопросов не бывает, но зато бывает лень заглянуть в справку. Набери в Паскале inc, выдели его и нажми Ctrl+F1.
Ой, спасибо большое! Заработало наконец-то.
Выделенной код (не мой) не обрабатывает всех ситуаций...
Сообщение отредактировано: Bokul -
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
Это равнозначно i:=i+1. Т.е. мы увеличиваем i на единицу.
--------------------
Лао-Цзы : Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.