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

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

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

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


Новичок
*

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

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


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

Код

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


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


Гость






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

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


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


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

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

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


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

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


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


Новичок
*

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

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


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


Новичок
*

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

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


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



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


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

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

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


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

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


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


Гость






:yes: Или брось Graph.TPU в текущую папку (я всегда так делаю...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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
 К началу страницы 
+ Ответить 
сообщение
Сообщение #10


Новичок
*

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

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


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


Гость






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


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


Новичок
*

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

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


Да ты прав она запускается, это я с путями намудрил. Правда еще проблемы остались массив вводит, но элементы не запоминает, выводит нулевой массив
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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...
 К началу страницы 
+ Ответить 
сообщение
Сообщение #14


Новичок
*

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

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


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

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

 





- Текстовая версия 16.05.2024 12:10
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name