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

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

Форум «Всё о Паскале» _ Задачи _ Программирование алгоритмов с массивами

Автор: GORBUNKI 13.04.2004 15:49

Помогите решить две задачи Пожалуйста:
1.Найти номер последнего отрицательного элемента в массиве.
2.Заполнить N элементов массива А числами Фибоначчи (первые два элемента равны 1, а каждое следующее - сумме двух предыдущих).
И Пожалуйста Обе

Автор: APAL 13.04.2004 15:59

1.
...
for i:=1 to Mmax do If m[i]<0 then k:=i;
Writeln('Последний отрицательный элемент под номером ',k,' и равен ',m[k]);
...

Автор: APAL 13.04.2004 16:01

2.
...
A[1]:=1; A[2]:=1;
For i:=3 to N do A[i]:=A[i-1]+A[i-2];
...

Автор: GORBUNKI 13.04.2004 16:43

Цитата
Помогите решить две задачи Пожалуйста:
1.Найти номер последнего отрицательного элемента в массиве.
2.Заполнить N элементов массива А числами Фибоначчи (первые два элемента равны 1, а каждое следующее - сумме двух предыдущих).
И Пожалуйста Обе

Только полностью решёные задачи, а то я в этом ничего не соображаю!

Автор: APAL 13.04.2004 18:01

Цитата(GORBUNKI @ 13.04.04 13:43)
Только полностью решёные задачи, а то я в этом ничего не соображаю!

1.
Код
Const
 Mmax:=20;
Var
 i,k : Word;
 m : array [1..Mmax] of Integer;
Begin
 {Заполняем массив случ. числами от -200 до +200}
 For i:=1 to Mmax do m[i]:=Round(Random(400)-200);

 For i:=1 to Mmax do If m[i]<0 then k:=i;
 Writeln('Последний отрицательный элемент под номером ',k,' и равен ',m[k]);
End.


P.S.: Программу писал прямо здесь. Т.е. я ее не проверял в работе...

Автор: APAL 13.04.2004 18:22

2.

Код
Const
 N:=100;
Var
 A : Array [1..N] of LongInt;
Begin
 A[1]:=1; A[2]:=1;
 For i:=3 to N do
 Begin
   A[i]:=A[i-1]+A[i-2];
   Writeln(A[i]);
 End;
End.

Автор: fms 14.04.2004 7:02

в первой задаче можно просто задом наперед массив просмотреть и до 1-ого отрицательного.. тогда немного быстрее.. smile.gif

Автор: AlaRic 14.04.2004 17:06

Оптимизация и устранение неточностей:

Код
Const
Mmax=20;
Var
i,k : Word;
m : array [1..Mmax] of Integer;
Begin
Randomize;
Clrscr;
{Заполняем массив случ. числами от -200 до +200}
For i:=1 to Mmax do m[i]:=Round(Random(400)-200);
For i:=Mmax downto 1 do If m[i]<0 then begin k:=i; break; end;
Writeln('Последний отрицательный элемент под номером ',k,' и равен ',m[k]);
End.

Автор: fms 15.04.2004 3:14

лучше вместо for'a while или repeat использовать.. из них лучше выходить в нужный момент.. rolleyes.gif

Автор: APAL 16.04.2004 13:26

Да, оптимизация на лишняя... smile.gif