Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 09.02.2012, 17:45
Аватар для Wirdfire
Wirdfire Wirdfire вне форума
Прохожий
 
Регистрация: 09.02.2012
Сообщения: 1
Репутация: 10
Вопрос Создание модулей

С самой системой 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  
Старый 10.02.2012, 11:25
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

Подозреваю, что у Вас не работало по такой причине: Вы в самой программе массив объявили так:

Код:
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  
Старый 10.02.2012, 11:30
Аватар для DelphiM0ZG
DelphiM0ZG DelphiM0ZG вне форума
Новичок
 
Регистрация: 22.10.2011
Сообщения: 62
Репутация: 666
По умолчанию

Как я раньше сказал, типы данных можно приводить. Вот другой вариант кода (тоже работает).

Код:
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.
Но зачем использовать эти все приведения типов, когда проще и лучше объявить всё, что нужно имеющегося типа. Поэтому первый вариант мне нравиться больше.
__________________
Чем больше знаешь, тем сильнее осознаёшь, что знаешь гораздо меньше, чем не знаешь!..
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:46.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025