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

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

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

Автор: Dark Vova 14.03.2007 2:59

Не получается подключить модули... Может кто поможет?
Условие задачи: Отсортировать одномерный массив линейным и пузырьковым способами. Каждый способ в отдельном модуле.

Вот что у меня получилось:
sort_1

Unit sort_1;
interface
Type
mas=array [1..10] of real;
var
m,k:integer;
b,d:mas;
procedure vvod_k (n:integer; var a:mas);
procedure obr_l (n:integer; a:mas; var c:mas);
procedure viv (n:integer; c:mas);

implementation
Uses Crt;

procedure vvod_k (n:integer; var a:mas);
var
i:integer;
begin
ClrScr;
For i:=1 to n do
ReadLn(a[i]);
end;

procedure obr_l (n:integer; a:mas; var c:mas);
var
i,j:integer;
x:real;
begin
ClrScr;
For i:=1 to n-1 do
For j:=i+1 to n do begin
If A[i]<A[j] then
begin
x:=a[i];
a[i]:=a[j];
a[j]:=x;
end;
c[i]:=a[i];
end;
end;

procedure viv (n:integer; c:mas);
var
i:integer;
begin
ClrScr;
For i:=1 to n do
WriteLn(c[i]);
end;

end.


sort_2
Unit sort_2;
interface
Type
mas=array [1..10] of real;
var
m,k:integer;
b,d:mas;
procedure vvod_r (n:integer; var a:mas);
procedure obr_p (n:integer; a:mas; var c:mas);
implementation
Uses Crt;

procedure vvod_r (n:integer; var a:mas);
var
i:integer;
begin
ClrScr;
Randomize;
For i:=1 to n do
begin
A[i]:=Random(100);
A[i]:=A[i]-Random(50);
A[i]:=A[i]/(Random(5)+1);
WriteLn(A[i]);
end;
end;

procedure obr_p (n:integer; a:mas; var c:mas);
var
i,j:integer;
x:real;
begin
For i:=2 to n do
For j:=n to i do begin
If A[j]>A[j-1] then
begin
x:=a[j-1];
a[j-1]:=a[j];
a[j]:=x;
end;
c[i]:=a[i];
end;
end;

end.


Сама программа:
Uses Crt, sort_1, sort_2;
begin
ClrScr;
Write('razmernost =');
ReadLn(m);
ClrScr;
Repeat
WriteLn('1 - vvod s klavi');
WriteLn('2 - vvod randomom');
WriteLn('3 - sort line');
WriteLn('4 - sort puz');
WriteLn('5 - vivod');
WriteLn('6 - vihod');
Write('Vash vibor... ');
ReadLn(k);
Case k of
1:vvod_k(m,b);
2:vvod_r(m,b);
3:obr_l(m,B,D);
4:orb_p(m,b,d);
5:viv(m,D);
6:halt;
end;
Until k>6;
ReadKey;
end.


Мне выдает ошибку на строчке
1:vvod_k(m,b);

Курсор на массиве b. Type mismatch.
Не понммаю в чем дело... Надеюсь на помощь.

Автор: volvo 14.03.2007 3:02

Тип

Цитата
mas=array [1..10] of real;
описан в двух модулях - формально эти 2 типа считаются разными и НЕсовместимыми... Вынеси это описание в третий модуль, и подключи его как к sort_1, так и к sort_2, тогда несовместимости типов не будет...

Автор: Dark Vova 14.03.2007 3:18

Цитата
Вынеси это описание в третий модуль, и подключи его как к sort_1, так и к sort_2, тогда несовместимости типов не будет..

Сделал как ты сказал, всё равно то же самое...
Я правильно понял, что надо создать модуль modnew
Unit modnew;
interface
Type
mas=Array [1..10] of real;
implementation
end.

и просто подключить его в
implementation
Uses Crt, modnew;

?

Автор: volvo 14.03.2007 3:20

Почему в Implementation? ты же пользуешься уже в Interface описанием этого типа..

А описание

mas=Array [1..10] of real;
из обоих модулей sort_1, sort_2 убрал? Или оставил? Надо убрать...

Добавлено через 4 мин.
То есть, модули будут выглядеть так:
Unit sort_1;
interface
uses newmod;
var
m,k:integer;
b,d:mas;

procedure vvod_k (n:integer; var a:mas);
procedure obr_l (n:integer; a:mas; var c:mas);
procedure viv (n:integer; c:mas);

Implementation
...
sort_2 по аналогии...

Автор: Dark Vova 14.03.2007 3:45

Спасибо за помощь!! Разобрался wink.gif