Показать сообщение отдельно
  #4  
Старый 19.03.2009, 19:07
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,096
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Первая задача:
В цикле собираем число (в строку, потом из строки в Integer) и проверяем его на то, что оно не делится ни на что, кроме 1 и самого себя).

Где-то так:
Код:
function IsNatural(A : Integer) : Boolean;
begin
  Result := True;
  For I := 2 To A-1 Do
    Begin
      Result := A mod I <> 0;
      If Not Result Then Break;
    End;
end;

function GetNatural(MaxNatural : Integer) : Integer;
var
  N : Integer;
  K : Integer;
begin
  Result := 0;
  N := 0;
  K := 0;
  While N < MaxNatural Do
    Begin
      Inc(K);
      If K > 9 Then Break;
      Buf := '';
      For I := 1 To K Do
        Buf := Buf + Inttostr(I);
      N := StrToInt(Buf);
      If IsNatural(N) Then Result := N;
    End;
end;

Код не проверял, просто сама логика.

Вторая задача

Код:
var
  A : Array [1..20,1..20] Of Integer;

procedure CheckMatrix;
var
  I, J : Integer;
begin
  // По столбцам
  For I := 1 To 20 Do
    For J := 1 To 20 Do
      If A[I,J] = 0 Then
         Begin
            A[I,I] := 0;
            Break;
         End;

  // По строкам
  For I := 1 To 20 Do
    For J := 1 To 20 Do
      If A[J,I] = 0 Then
         Begin
            A[J,J] := 0;
            Break;
         End;
end;

Третья задача

Фибоначчи
Код:
function GetFib(K : Integer) : Boolean;
begin
  If K < 3
    Then Result := 1
    Else Result := GetFib(K-1) + GetFib(k-2);
end;

Натуральные (тут придется работать с памятью).

Код:
var
  NaturalArray : Array Of Integer;

function IsNatural(A : Integer) : Boolean;
begin
  Result := True;
  For I := 2 To A-1 Do
    Begin
      Result := A mod I <> 0;
      If Not Result Then Break;
    End;
end;

function GetNatural(K : Integer) : Integer;
var
  N : Integer;
begin
   If K < Length(NaturalArray) 
     Then Result := NaturalArray[K-1] // Динамичский масив начинается с 0
     Else
       Begin
         N := NaturalArray[High(NaturalArray)];
         While Length(NaturalArray) < K Do
           Begin
             Inc(N);
             If IsNatural(N) Then
               Begin
                 SetLength(NaturalArray,Length(NaturalArray)+1);
                 NaturalArray[High(NaturalArray)] := N;
               End;
          Result := NaturalArray[High(NaturalArray)];
       End;
end;
Ответить с цитированием