Страница 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
" писал(а):мне кажется, что в 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, угу. молоток!! проверил. подверждаю: всё работает!