Помощь - Поиск - Пользователи - Календарь
Полная версия: цикл for i:=1 to n do
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
warning777
возможно ли этот цикл запустить в обратном порядке,то есть
for i:=n to 1 do ?
интересуюсь,потому что не знаю как найти первый отрицательный элемент в массиве...
если использовать
for i:=1 to n do
begin
if a[i]<0 fhen
n1:=i
end.
он найдет первое и продолжит искать...как остановить поиск после нахождения первого отрицательного ?
kvadrat
for i:=n downto 1 do
Вроде бы она делает то что ты хочеш
sintanial
Цитата
он найдет первое и продолжит искать...как остановить поиск после нахождения первого отрицательного ?


Ну нас в универе заставляли не пользоваться этой функцией однако мне она очень нравится. Функция break оканчивает цикл =)
Да и вообще тута много вариаций как остановить цикл после того как ты нашел что тебе надо =)

Ну не знаю можно ли так или нет, но мне кажется что можно
for i:=1 to n do
begin
if a[i]<0 fhen
begin
n1:=i
n:=i-1; <- вроде бы так тоже остановится =)
end
end.
warning777
а если так попробовать ? или масло маслянjе ?
l=0
for i:= to n do
begin
if a[i]<0 theh begin
l:=l+1
if l=1 then n1:=i
end;
end.
volvo
Цитата
Вроде бы она делает то что ты хочеш
Только зачем проходить по всем элементам массива, если можно просто остановиться вовремя?
i := 1;
while (i <= n) and (a[i] >= 0) do i := i + 1;
{ если мы здесь, значит или i > n (если отрицательных нет вообще), или a[i] < 0 }


P.S.
Цитата
Функция exit оканчивает цикл =)
Паскалевский Exit немедленно оканчивает текущую подпрограмму (если вызван в основной программе - то заканчивает программу) вообще-то... Цикл заканчивает Break...
warning777
класс !!! спасибо огромное smile.gif
значит чтобы найти первый отрицаельный элемент массива и присвоить ему номер n1 запишу следующее
i := 1;
while (i <= n) and (a[i] >= 0) do i := i + 1;
n1:=i

что бы найти последнее равное нулю и присвоить ему номер n2 сделаю так
for i:=1 to n do
begin
if a[i]=0 then n2:=i
end

все верно ? спасибо огромное за помощь
Айра
Цитата
что бы найти последнее равное нулю и присвоить ему номер n2 сделаю так

ты здесь тоже можешь while'ом обойтись, только у тебя i будет изначально равно n, а потом будет уменьшаться..

Добавлено через 7 мин.
и еще
i := 1;
while (i <= n) and (a[i] >= 0) do i := i + 1;
n1:=i // так не правильно, потому что если в массиве не будет отрицательных
// ты все равно присвоишь какой-то номер, тебе нужно еще проверку сделать

warning777
у меня еще один вопрос.
если мне дан массив,записанный в файл, как мне выдрать из него массив,находящийся, допустим, между третим и десятым элементом в основном массиве
k=0
for i:=3 to 10 do
begin
k:=k+1;
b[k]:=a[i];
end
так будет работать ?
я просто пока начинающий в паскале,прошу изивинить за такие вопросы
sintanial
Цитата
Паскалевский Exit немедленно оканчивает текущую подпрограмму (если вызван в основной программе - то заканчивает программу) вообще-то... Цикл заканчивает Break...


Извиняюсь , перепутал
warning777
если мне дан массив,записанный в файл, как мне выдрать из него массив,находящийся, допустим, между третим и десятым элементом в основном массиве
k=0
for i:=3 to 10 do
begin
k:=k+1;
b[k]:=a[i];
end
так будет работать ?
sintanial
Ммм смотря в какой файл записан, я так думаю =). В типизированном наверно так нельзя( но это я так только предполагаю !!! )
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.