Помощь - Поиск - Пользователи - Календарь
Полная версия: написание своего модуля
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
SeRGuSii
Забыл как описывать свои модули, помню, что вроде надо так

Код

user <назв модуля>;


а дальше то как ? напишите пожалуйста, в faq, статьях и уроках вроде нету если пропустил ткните носом
volvo
unit <имя_модуля>;
interface
...
{ описание процедур, функций и объектов, которые
должны быть доступны в вызывающем модуле/программе }

implementation
...
{ реализация процедур, функций и объектов }


{ инициализирующая часть модуля:
выполняется при подключении модуля к программе }
begin { begin может отсутствовать, если модулю не нужна инициализация }
end.
klem4
И еще не забудь, что имя файла, в котором находится модуль, должно совпадать с именем в программе(то что после слова
unit <тут>;
)
SeRGuSii
примного благодарен smile.gif
SeRGuSii
Что нужно сделать, чтобы заработал модуль GRAPH, а то паскаль выдает ошибку:
 
ERROR 15: file not found (graph.tpu)



Хотя в папке units он присутствует.
klem4
try:
зайди в Option->Directories-> и пропиши пути к папке units в там где unit directories
volvo
:yes: Или брось Graph.TPU в текущую папку (я всегда так делаю...)
SeRGuSii
to klem4, делал не помогло.
volvo спасибо, теперь работает.
----------
Посмотрите задачку что-то упустил в создании модуля, не инициализируется.
Модуль включает подпрограмму обработки массива: ввод массива, вывод массива в графическом режиме, проверка упоряд на возрастание, на убывание, сортировка массива, поиск заданного элемента.
 
unit obrmasiv;
interface
const
n=5;

type
TElem = integer;
mass = array[1..n] of TElem;


implementation
uses crt,Graph;
procedure inputmas (a:mass);
var i:integer;
begin
for i:=1 to n do begin
write('a[',i,']= ');
read(a[i]);
end;
end;
procedure outputmas (a:mass);
var i:integer;
begin
for i:=1 to n do begin
write(a[i],' ')
end;
end;
function yp(a:mass): boolean;
var i:integer;
p:boolean; p1:boolean;
begin
p:=true;
p1:=true;
for i:=1 to n-1 do
begin
p:=p and (a[i] > a[i+1]);
p1:=p1 and (a[i] < a[i+1]);
end;
yp:=p or p1;
end;
end.
procedure sort(a:mass);
var c:integer;
begin
for i:=2 to n do
begin
c:=a[i-1];a[i-1]:=a[i];a[i]:=c;
end
end;
uses obrmasiv;
const n=5;
var a: array [1..n] of integer;
i:integer;
begin
inputmas(a);
if yp then writeln('yp') else writeln('neyp');
sort(a);
outputmas(a);
end.


и какбы по красивее её вывести в графическом режиме
volvo
Смотри, что происходит:
1. Ты определил реализацию функций и процедур в модуле, но не описАл их как внешние, то есть вызывающая программа о них не знает...

2. Процедура sort описана после завершающей точки - это запрещено. Компилятор просто не знает о ее существовании... ( плюс к этому в sort была небольшая ошибка - не описана переменная i )

3. Более опасное:
в модуле у тебя определен тип
Type
TElem = integer;
mass = array[1..n] of TElem;
{ и затем : }
procedure inputmas (a:mass);

ты попытался описАть переменную такого же типа в основной программе и передать ее как параметр в процедуру... Нет !!! Нельзя этого делать. По правилу совместимости типов эти 2 типа будут считаться разными, и естественно вылетит ошибка. Нужно использовать ранее определенный в модуле тип...

Вот правильный вариант 2-х файлов (работоспособность не проверял, но компиляцию проходят smile.gif )

obrmasiv.pas
unit obrmasiv;
interface
const
n=5;

type
TElem = integer;
mass = array[1..n] of TElem;

procedure inputmas (a:mass);
procedure outputmas (a:mass);
function yp(a:mass): boolean;
procedure sort(a:mass);

implementation
uses crt,Graph;

procedure inputmas (a:mass);
var i:integer;
begin
for i:=1 to n do begin
write('a[',i,']= ');
read(a[i]);
end;
end;

procedure outputmas (a:mass);
var i:integer;
begin
for i:=1 to n do begin
write(a[i],' ')
end;
end;

function yp(a:mass): boolean;
var
i:integer;
p:boolean; p1:boolean;
begin
p:=true;
p1:=true;
for i:=1 to n-1 do begin
p:=p and (a[i] > a[i+1]);
p1:=p1 and (a[i] < a[i+1]);
end;
yp:=p or p1;
end;

procedure sort(a:mass);
var
c:integer;
i:integer;
begin
for i:=2 to n do begin
c:=a[i-1];a[i-1]:=a[i];a[i]:=c;
end
end;

end.


Файл main.pas
uses obrmasiv;
var
a: mass;
i:integer;
begin
inputmas(a);
if yp(a) then writeln('yp') else writeln('neyp');
sort(a);
outputmas(a);
end.


Кстати, зачем тебе Graph, он же нигде не используется? Или ты хочешь перенести это в графику? Я бы не советовал, смысл какой? Разными цветами можно и в текстовом режиме вывести... rolleyes.gif
SeRGuSii
volvo, не всеравно не стартует, а graph был нужен чтобы красиво вывести массив
volvo
Распакуй архив, открой main.pas и в меню компилятора выбери НЕ Compile (Alt+F9) а Make (F9)... Я программы без проверки не выкладываю... Раз я сказал, что компилируется, значит она компилируется и запускается... (По крайней мере первый шаг в пошаговом режиме делается)...
SeRGuSii
Да ты прав она запускается, это я с путями намудрил. Правда еще проблемы остались массив вводит, но элементы не запоминает, выводит нулевой массив
volvo
Цитата(SeRGuSii @ 1.06.05 11:59)
еще проблемы остались массив вводит, но элементы не запоминает, выводит нулевой массив

Правильно... У тебя в модуле процедура ввода массива как определена? Вот так:
procedure inputmas (a:mass);

а это значит что результаты работы процедуры в вызывающую программу не вернутся... Поменяй на
procedure inputmas (var a:mass);

(только не забудь, и в секции Interface и в Implementation)

То же самое - в сортировке (ты там вообще чего-то намудрил, я поменял то что было на простейший алгоритм "пузырька"):
procedure sort(var a:mass);
var
T:integer;
i, j:integer;
begin
For i := 1 To n Do
For j := n DownTo i+1 Do
If a[j - 1] > a[j] Then Begin
T := a[j - 1]; a[j - 1] := a[j]; a[j] := T
End
end;

не забудь про Var...
SeRGuSii
ок, еще раз СПАСИБО !
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.