IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> написание своего модуля
SeRGuSii
сообщение 29.05.2005 10:54
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


Забыл как описывать свои модули, помню, что вроде надо так

Код

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


а дальше то как ? напишите пожалуйста, в faq, статьях и уроках вроде нету если пропустил ткните носом
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 29.05.2005 11:02
Сообщение #2


Гость






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

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


{ инициализирующая часть модуля:
выполняется при подключении модуля к программе }
begin { begin может отсутствовать, если модулю не нужна инициализация }
end.
 К началу страницы 
+ Ответить 
klem4
сообщение 29.05.2005 11:11
Сообщение #3


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


И еще не забудь, что имя файла, в котором находится модуль, должно совпадать с именем в программе(то что после слова
unit <тут>;
)

Сообщение отредактировано: klem4 - 29.05.2005 11:12


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SeRGuSii
сообщение 29.05.2005 11:21
Сообщение #4


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


примного благодарен smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
SeRGuSii
сообщение 31.05.2005 20:08
Сообщение #5


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


Что нужно сделать, чтобы заработал модуль GRAPH, а то паскаль выдает ошибку:
 
ERROR 15: file not found (graph.tpu)



Хотя в папке units он присутствует.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
klem4
сообщение 31.05.2005 20:17
Сообщение #6


Perl. Just code it!
******

Группа: Модераторы
Сообщений: 4 100
Пол: Мужской
Реальное имя: Андрей

Репутация: -  44  +


try:
зайди в Option->Directories-> и пропиши пути к папке units в там где unit directories

Сообщение отредактировано: klem4 - 31.05.2005 20:18


--------------------
perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.05.2005 20:19
Сообщение #7


Гость






:yes: Или брось Graph.TPU в текущую папку (я всегда так делаю...)
 К началу страницы 
+ Ответить 
SeRGuSii
сообщение 31.05.2005 22:19
Сообщение #8


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


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.


и какбы по красивее её вывести в графическом режиме
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 31.05.2005 23:37
Сообщение #9


Гость






Смотри, что происходит:
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
сообщение 1.06.2005 0:37
Сообщение #10


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


volvo, не всеравно не стартует, а graph был нужен чтобы красиво вывести массив
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.06.2005 0:45
Сообщение #11


Гость






Распакуй архив, открой main.pas и в меню компилятора выбери НЕ Compile (Alt+F9) а Make (F9)... Я программы без проверки не выкладываю... Раз я сказал, что компилируется, значит она компилируется и запускается... (По крайней мере первый шаг в пошаговом режиме делается)...


Прикрепленные файлы
Прикрепленный файл  main.rar ( 596 байт ) Кол-во скачиваний: 105
 К началу страницы 
+ Ответить 
SeRGuSii
сообщение 1.06.2005 11:59
Сообщение #12


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


Да ты прав она запускается, это я с путями намудрил. Правда еще проблемы остались массив вводит, но элементы не запоминает, выводит нулевой массив
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 1.06.2005 12:10
Сообщение #13


Гость






Цитата(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
сообщение 1.06.2005 12:29
Сообщение #14


Новичок
*

Группа: Пользователи
Сообщений: 14
Пол: Мужской

Репутация: -  0  +


ок, еще раз СПАСИБО !
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 18.07.2025 17:48
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"