Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум «Всё о Паскале» _ Задачи _ цикл for i:=1 to n do

Автор: warning777 23.05.2008 1:25

возможно ли этот цикл запустить в обратном порядке,то есть
for i:=n to 1 do ?
интересуюсь,потому что не знаю как найти первый отрицательный элемент в массиве...
если использовать
for i:=1 to n do
begin
if a[i]<0 fhen
n1:=i
end.
он найдет первое и продолжит искать...как остановить поиск после нахождения первого отрицательного ?

Автор: kvadrat 23.05.2008 1:33

for i:=n downto 1 do
Вроде бы она делает то что ты хочеш

Автор: sintanial 23.05.2008 1:35

Цитата
он найдет первое и продолжит искать...как остановить поиск после нахождения первого отрицательного ?


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

Ну не знаю можно ли так или нет, но мне кажется что можно
for i:=1 to n do
begin
if a[i]<0 fhen
begin
n1:=i
n:=i-1; <- вроде бы так тоже остановится =)
end
end.

Автор: warning777 23.05.2008 1:36

а если так попробовать ? или масло маслян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 23.05.2008 1:37

Цитата
Вроде бы она делает то что ты хочеш
Только зачем проходить по всем элементам массива, если можно просто остановиться вовремя?
i := 1;
while (i <= n) and (a[i] >= 0) do i := i + 1;
{ если мы здесь, значит или i > n (если отрицательных нет вообще), или a[i] < 0 }


P.S.
Цитата
Функция exit оканчивает цикл =)
Паскалевский Exit немедленно оканчивает текущую подпрограмму (если вызван в основной программе - то заканчивает программу) вообще-то... Цикл заканчивает Break...

Автор: warning777 23.05.2008 1:44

класс !!! спасибо огромное 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

все верно ? спасибо огромное за помощь

Автор: Айра 23.05.2008 1:48

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

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

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


Автор: warning777 23.05.2008 1:56

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

Автор: sintanial 23.05.2008 1:58

Цитата
Паскалевский Exit немедленно оканчивает текущую подпрограмму (если вызван в основной программе - то заканчивает программу) вообще-то... Цикл заканчивает Break...


Извиняюсь , перепутал

Автор: warning777 23.05.2008 2:26

если мне дан массив,записанный в файл, как мне выдрать из него массив,находящийся, допустим, между третим и десятым элементом в основном массиве
k=0
for i:=3 to 10 do
begin
k:=k+1;
b[k]:=a[i];
end
так будет работать ?

Автор: sintanial 23.05.2008 4:36

Ммм смотря в какой файл записан, я так думаю =). В типизированном наверно так нельзя( но это я так только предполагаю !!! )