![]() |
|
|
#1
|
||||
|
||||
|
С самой системой delpi работаю недавно, и возник следующий вопрос.
Есть программа и есть модуль к ней, в котором лежат все процедуры. Вопрос в том, что когда процедуры в теле программы, то оно работает, а когда в модуле, отдельно -- то не работает. Код прилагается. Программа: Код:
program Project2;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.SysUtils,
Unit1 in 'Unit1.pas';
var
n,i:integer;
a:array[1..100] of real;
k:real;
begin
writeln('Input n ');
readln(n);
writeln('Input Array');
for i := 1 to n do readln(a[i]);
Array_out(n,a);
Sort_array(n,a);
Array_out(n,a);
readln;
end.Код:
unit Unit1;
interface
type
Real_array=array[1..100] of real;
int=integer;
procedure Sort_array(n:integer;var a:Real_array);
procedure Array_out(n:integer;a:Real_array);
implementation
procedure Sort_array;
var
i,j:int;
t:real;
begin
begin
for j:=1 to n-1 do
for i:=1 to n-j do
if a[i] > a[i+1] then
begin
t := a[i];
a[i] := a[i+1];
a[i+1] := t
end;
end;
end;
procedure Array_out;
var
i:int;
begin
writeln('Array_out');
for i := 1 to n do
begin
writeln(a[i]:2:4);
end;
end;
end.Заранее спасибо за ответ! |
|
#2
|
||||
|
||||
|
Подозреваю, что у Вас не работало по такой причине: Вы в самой программе массив объявили так:
Код:
a:array[1..100] of real; А, поскольку в модуле уже есть объявление нового типа для массива, который Вы используете для передачи в процедуры, то нужно было написать так: Код:
a: Real_array; Дело всё в том, что Паскаль имеет такую особенность: Real_array и array[1..100] of real для него разные типы данных, хоть и физически представлены одинаково. Можно, конечно, привести массив a, имеющий тип array[1..100] of real, с помощью конструкции: Код:
Real_array(a) и попробовать передать процедуре (я не проверял). Ниже поправленный код программы (поправлял на Delphi 7). Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1; // положил его в каталог с программой
var
n,i: integer;
a: Real_array; // так объявил массив
k: real;
begin
writeln('Input n ');
readln(n);
writeln('Input Array');
for i := 1 to n do readln(a[i]);
Array_out(n,a);
Sort_array(n,a);
Array_out(n,a);
readln;
end.Последний раз редактировалось DelphiM0ZG, 10.02.2012 в 13:19. |
|
#3
|
||||
|
||||
|
Как я раньше сказал, типы данных можно приводить. Вот другой вариант кода (тоже работает).
Код:
program Project1;
{$APPTYPE CONSOLE}
uses
SysUtils,
Unit1;
var
n,i: integer;
a: array[1..100] of real;
k: real;
begin
writeln('Input n ');
readln(n);
writeln('Input Array');
for i := 1 to n do readln(a[i]);
Array_out(n, Real_array(a));
Sort_array(n, Real_array(a));
Array_out(n, Real_array(a));
readln;
end. |