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

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

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

 
 Ответить  Открыть новую тему 
> расчета элементов., зависает программка
сообщение
Сообщение #1





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

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


Задание такое:
Составить подпрограмму для определения числа элементов одномерного массива, предшествующих его первому отрицательному элементу.
Пишу программу, а после набора массива она зависает... может проблема в самой функции?

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;
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


просто человек
******

Группа: Пользователи
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


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

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

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

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


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


begin



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


kol:=z;

end;


Вот так??? а у меня всё равно виснет.... я что-то недопонимаю видно...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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



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.



--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Гость






или так
Код
i:=1;
while (i<=n) and (A[i]>=0) do
   inc(i);
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6





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

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


Я искренне благодарна за помощь, но я пока новичок и нам даже не давали программки с True и False...

Сообщение отредактировано: Konsuela -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #7


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
Я искренне благодарна за помощь, но я пока новичок и нам даже не давали программки с 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);



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


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8





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

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


Цитата(Гость @ 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
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #9


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
И последний (наверное глупый) вопрос- что значит inc(i)?

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

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

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

Сообщение отредактировано: Bokul -


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10





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

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


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

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

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

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


Это приняла во внимание... А всё-таки вот эта inc(i)- перебирает мой массив?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #11


Гуру
*****

Группа: Пользователи
Сообщений: 1 117
Пол: Мужской
Реальное имя: Богдан

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


Цитата
А всё-таки вот эта inc(i)- перебирает мой массив?

Это равнозначно i:=i+1. Т.е. мы увеличиваем i на единицу.


--------------------
Лао-Цзы :
Знать много и не выставлять себя знающим есть нравственная высота. Знать мало и выставлять себя знающим есть болезнь. Только понимая эту болезнь, мы можем избавиться от нее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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