процедуры

За вознаграждение или нахаляву (если повезёт)

Модераторы: Хыиуду, MOTOCoder, Medved, dr.Jekill

котопек
Сообщения: 4
Зарегистрирован: 13 апр 2008, 09:45

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

или подскажите откуда их можно скачать
заранее благодарен
BHy4ok
Сообщения: 237
Зарегистрирован: 01 май 2007, 09:03
Откуда: г.Находка
Контактная информация:

1) Последний номер массива = кол - во элементов. Допустим это 'i'. (j := i)
Пробегаешь цикл, если встречаются похожие элементы тогда j := j - 1;
Это и будет твое количество не повторяющихся значений.
< L3X. (ICQ: 8721378, Mail - l3x@list.ru)
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

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.
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

&quot писал(а):мне кажется, что в 1-е задаче не так всё просто... ;-(
Почему?Q=N Идти с i=1 до i=N по массиву, и если есть такое A[j]=A где j<i то уменьшить Q , вывести Q.
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

[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]
=)
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
котопек
Сообщения: 4
Зарегистрирован: 13 апр 2008, 09:45

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.
спасибо за программу со спиралью
оч выручили
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Medved, прогнал я Вашу программку...
Как и ожидал, она немного неверно работает...
для тестового массива 9 элементов: 1 2 3 1 2 3 1 2 3
результат выдаётся 7.
насколько я понимаю, результат должен быть 3 ?...
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Я писал без компилятора=) Я тоже знал, что там ошибка, но шаблон есть=)
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
Medved
Сообщения: 256
Зарегистрирован: 14 фев 2008, 20:51
Контактная информация:

Исправил!!!
[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]
=) Ошибка в одном символе=) Ну ладно, в двух=)
Ваши руки совершили идиотскую ошибку и будут оторваны!
[OK]
Serge_Bliznykov
Сообщения: 375
Зарегистрирован: 31 авг 2007, 03:06

Medved, угу. молоток!! проверил. подверждаю: всё работает!
Ответить