Страница 1 из 2

процедуры

Добавлено: 13 апр 2008, 09:52
котопек
Помгоите пожадлуйста решить 2 задачи
1)Определить сколько различных чисел содержиться в массиве из К элементов
2)Заполнить двумерный массив числами 1,2,3,4... по спирали,начиная с левого верхнего угла и двигаясь по часовой стрелке

или подскажите откуда их можно скачать
заранее благодарен

Re: процедуры

Добавлено: 13 апр 2008, 10:05
BHy4ok
1) Последний номер массива = кол - во элементов. Допустим это 'i'. (j := i)
Пробегаешь цикл, если встречаются похожие элементы тогда j := j - 1;
Это и будет твое количество не повторяющихся значений.

Re: процедуры

Добавлено: 13 апр 2008, 14:48
Serge_Bliznykov
BHy4ok, мне кажется, что в 1-е задаче не так всё просто... ;-(

а вот вторую задачу когда-то делал. вот и ещё раз пригодилась ;-)
Размер массива можно менять изменяя константу MaxArray

Код: Выделить всё

const
  MaxArray = 7;
type 
  MyArrayType = array [1..MaxArray, 1..MaxArray] of integer; 
  
procedure Spiral(var M : MyArrayType); 
var 
  k, MaxStep, PosX, PosY : integer;
  i: integer;
BEGIN
  i := 1;
  PosX := 1;
  PosY := 0;
  MaxStep := MaxArray;

  while i <= MaxArray*MaxArray do
  begin
    {движение вправо}
    for k:=1 to MaxStep do
    begin
      Inc(PosY);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    Dec(MaxStep);
    {движение вниз по спирали}
    for k:=1 to MaxStep do 
    begin     
      Inc(PosX);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    {движение влево по спирали}
    for k:=1 to MaxStep do 
    begin     
      Dec(PosY);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    Dec(MaxStep);
    {движение вверх по спирали}
    for k:=1 to MaxStep do 
    begin     
      Dec(PosX);
      M[PosX, PosY] := i;
      Inc(i);
    end;      
  end;
end;

var
  Matrix : MyArrayType;
  i, j   : integer;

BEGIN
  Spiral(Matrix);
  for i:=1 to MaxArray do
    begin
      for j:=1 to MaxArray do
        Write(Matrix[i,j]:4);
      WriteLn;
    end;
END.

Re: процедуры

Добавлено: 13 апр 2008, 21:07
Medved
&quot писал(а):мне кажется, что в 1-е задаче не так всё просто... ;-(
Почему?Q=N Идти с i=1 до i=N по массиву, и если есть такое A[j]=A где j<i то уменьшить Q , вывести Q.

Re: процедуры

Добавлено: 13 апр 2008, 21:12
Medved
[syntax='delphi']
Program Lalala;
Const MaxN=100;
Type Arr=Array[1..MaxN] Of Integer;
Var A:Arr; I,J,Q,N:Integer;

Function WasBefore(S,Number:Integer):Boolean;
Var K:Integer;
Begin
K:=1 ;
While (K<S)And(A[K]<>Number) Do Inc(K);
WasBefore:=K>=S;
End;

Begin
Read(N);
For i:=1 to N Do Read(A);
Q:=N;
For i:=2 to N do
If WasBefore(I,A) Then Dec(Q);
Writeln(Q)
End.
[/syntax]
=)

Re: процедуры

Добавлено: 14 апр 2008, 08:44
котопек
Serge_Bliznykov писал(а):BHy4ok, мне кажется, что в 1-е задаче не так всё просто... ;-(

а вот вторую задачу когда-то делал. вот и ещё раз пригодилась ;-)
Размер массива можно менять изменяя константу MaxArray

Код: Выделить всё

const
  MaxArray = 7;
type 
  MyArrayType = array [1..MaxArray, 1..MaxArray] of integer; 
  
procedure Spiral(var M : MyArrayType); 
var 
  k, MaxStep, PosX, PosY : integer;
  i: integer;
BEGIN
  i := 1;
  PosX := 1;
  PosY := 0;
  MaxStep := MaxArray;

  while i <= MaxArray*MaxArray do
  begin
    {движение вправо}
    for k:=1 to MaxStep do
    begin
      Inc(PosY);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    Dec(MaxStep);
    {движение вниз по спирали}
    for k:=1 to MaxStep do 
    begin     
      Inc(PosX);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    {движение влево по спирали}
    for k:=1 to MaxStep do 
    begin     
      Dec(PosY);
      M[PosX, PosY] := i;
      Inc(i);
    end;
    Dec(MaxStep);
    {движение вверх по спирали}
    for k:=1 to MaxStep do 
    begin     
      Dec(PosX);
      M[PosX, PosY] := i;
      Inc(i);
    end;      
  end;
end;

var
  Matrix : MyArrayType;
  i, j   : integer;

BEGIN
  Spiral(Matrix);
  for i:=1 to MaxArray do
    begin
      for j:=1 to MaxArray do
        Write(Matrix[i,j]:4);
      WriteLn;
    end;
END.
спасибо за программу со спиралью
оч выручили

Re: процедуры

Добавлено: 14 апр 2008, 10:50
Serge_Bliznykov
Medved, прогнал я Вашу программку...
Как и ожидал, она немного неверно работает...
для тестового массива 9 элементов: 1 2 3 1 2 3 1 2 3
результат выдаётся 7.
насколько я понимаю, результат должен быть 3 ?...

Re: процедуры

Добавлено: 14 апр 2008, 19:38
Medved
Я писал без компилятора=) Я тоже знал, что там ошибка, но шаблон есть=)

Re: процедуры

Добавлено: 14 апр 2008, 19:44
Medved
Исправил!!!
[syntax='delphi']
Program Lalala;
Const MaxN=100;
Type Arr=Array[1..MaxN] Of Integer;
Var A:Arr; I,J,Q,N:Integer;

Function WasBefore(S,Number:Integer):Boolean;
Var K:Integer;
Begin
K:=1 ;
While (K<S)And(A[K]<>Number) Do Inc(K);
WasBefore:=K<S;
End;

Begin
Read(N);
For i:=1 to N Do Read(A);
Q:=N;
For i:=2 to N do
If WasBefore(I,A) Then Dec(Q);
Writeln(Q)
End.
[/syntax]
=) Ошибка в одном символе=) Ну ладно, в двух=)

Re: процедуры

Добавлено: 14 апр 2008, 22:37
Serge_Bliznykov
Medved, угу. молоток!! проверил. подверждаю: всё работает!