![]() |
|
#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. Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!.. |