Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.05.2009, 15:44   #1
andreww
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 20
Вопрос посмотрите найдите недочеты!

скопипастил программу из Делфи в Паскаль.вроде запускается, работает неплохо. но часто выходит с каким либо exitcodом. как это устранить?(если вообще реально).
вот текст программы,кому не трудно протестируйте на паскале и отпишитесь. заранее благодарен.


program kurs;
uses crt, graph;
var
s:string;
M:array[1..10] of string;
i:integer;
ch:char;

procedure M1(var M:array of string; var i:integer);
var
s,pr:string;
ff:text;
begin
writeln('Введите путь к файлу MENU.DAT');
readln(s);
assign(ff,s);
reset(ff);
i:=1;
while not eof(ff) do
begin
readln(ff,pr);
M[i]:=pr;
i:=i+1;
end;
i:=i-1;
writeln('Всего пунктов меню ',i);
close(ff);
end;

procedure M2(M:array of string; i:integer);
var
n,x,y,j,gd,gm:integer;
a:real;
s:string;
begin
gd:=detect;
initgraph(gd,gm,'');
if graphresult <>grok then halt(1);
cleardevice;
setbkcolor(15);//устанавливает цвет фона(сам написал)
repeat
n:=0;
repeat
clearviewport;
settextstyle(1,0,1);
setcolor(4); //красный цвет
outtextxy(20,20,'VIXOD-ESC');
for i:=1 to j do
begin
setcolor(1); //синий цвет
rectangle(0,getmaxy-50*j, 200,getmaxy-50*(j-1));
settextstyle(4,0,2);
setcolor(2); //зеленый цвет
if length(M[j]) > 11 then M[j]:=copy(M[j],1,11);
outtextxy(10,getmaxy-50*j+10, M[j]);
end;
setcolor(4); // красный цвет
Line(210,940-n, 225,925-n); //рисуют
Line(225,925-n, 225,955-n); //стрелку
Line(225,955-n, 210,940-n); //состоящую из
Line(215,940-n, 225,930-n); //шести
Line(215,940-n, 225,950-n); //линий
Line(220,940-n, 225,940-n);
ch:=readkey;
if ch=#72 then n:=n+50; //движение стрелки
if ch=#80 then n:=n-50; //вверх и вниз
if n=i*50 then n:=0;
if n=-50 then n:=(i-1)*50;
//if ch=#27 then closegraph;//если нажат esc,закрывает граф.режим
until ch=#13;
a:=n/50+1;
a:=int(a); //возвращает число равное целой части а
str(a,s);
setcolor(5); //сиреневый цвет
outtextxy(300,300, 'Funktsia nomer');
outtextxy(540,300,s[2]);
ch:=readkey;
until ch=#27;
closegraph;// выключение графического режима
end;

begin
clrscr;
M1(M,i);
M2(M,i);
end.



задание:


Написать функцию формирования и функцию работы с меню (в графическом режиме). Пункты меню должны храниться в файле MENU.DAT. Функция формирования читает пункты меню из файла и заносит их в массив. Необходимо запомнить количество пунктов меню. Вторая функция обеспечивает вывод на экран и перемещение по меню с помощью клавиш «» и «». Нажатие клавиши ENTER завершает работу функции (но не программы, выход из программы вы¬пол¬няется только при нажатии ESC). При этом в главную функцию возвращается номер выбранного пункта. Написать программу, демонстрирующую применение данных функций

Последний раз редактировалось andreww; 27.05.2009 в 18:04.
andreww вне форума Ответить с цитированием
Старый 27.05.2009, 16:02   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Посмотрел в FPC. Вроде, все работает.
Только вот эта строчка:
Код:
int(a); //возвращает число равное целой части а
бессмысленна. Видимо, имелось в виду:
Код:
a := int(a);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.05.2009, 16:08   #3
andreww
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 20
По умолчанию

а почему когда нажимаешь esc(для выхода) выдается exitcod 216. не подскажите что он означает?
andreww вне форума Ответить с цитированием
Старый 27.05.2009, 16:20   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от andreww
а почему когда нажимаешь esc(для выхода) выдается exitcod 216. не подскажите что он означает?
Потому что вы выходите из граф. режима и пытаетесь в нем что-то вывести:
Код:
if ch=#27 then closegraph;//если нажат esc,закрывает граф.режим
until ch=#13;
a:=n/50+1;
int(a); //возвращает число равное целой части а
str(a,s);
setcolor(5); //сиреневый цвет
outtextxy(300,300, 'Funktsia nomer');
outtextxy(540,300,s[2]);
ch:=readkey;
until ch=#27;
closegraph;// выключение графического режима
end;
Уберите обработку из первого цикла и добавьте в условие выхода
Код:
 until (ch=#13) or (ch=#27);
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.05.2009, 16:58   #5
andreww
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 20
По умолчанию

until (ch=#13) or (ch=#27)
прописывая так программа начинает работать некорректно.(нажимая esc выводит сначала номер функции, а затем уже выходит);

//f ch=#27 then closegraph;//если нажат esc,закрывает граф.режим
until ch=#13;
a:=n/50+1;
int(a); //возвращает число равное целой части а
str(a,s);
setcolor(5); //сиреневый цвет
outtextxy(300,300, 'Funktsia nomer');
outtextxy(540,300,s[2]);
ch:=readkey;
until ch=#27;
closegraph;// выключение графического режима
end;

а вот так программа выходит только когда нажат enter(выведен на экран номер функции);
andreww вне форума Ответить с цитированием
Старый 27.05.2009, 17:02   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Так а как надо-то?
Я особо не разбирался, просто сказал в чем проблема.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 27.05.2009, 17:06   #7
andreww
Пользователь
 
Регистрация: 26.05.2009
Сообщений: 20
По умолчанию

да проблема по сути устранилась, что уже не может не радовать =)

вообще текст задания такой:Написать функцию формирования и функцию работы с меню (в графическом режиме). Пункты меню должны храниться в файле MENU.DAT. Функция формирования читает пункты меню из файла и заносит их в массив. Необходимо запомнить количество пунктов меню. Вторая функция обеспечивает вывод на экран и перемещение по меню с помощью клавиш «» и «». Нажатие клавиши ENTER завершает работу функции (но не программы, выход из программы выполняется только при нажатии ESC). При этом в главную функцию возвращается номер выбранного пункта. Написать программу, демонстрирующую применение данных функций.
andreww вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Подскажите пожалуйста какую функцию необходимо использовать... Андрю)(@ Паскаль, Turbo Pascal, PascalABC.NET 1 10.12.2008 00:03
Подскажите пожалуйста какую функцию необходимо использовать... Андрю)(@ Помощь студентам 1 09.12.2008 23:53
Какую программу можно написать на делфи чтобы она пользовалась большим спросом Xander Свободное общение 8 03.07.2008 16:11
Нужно сцепить базу написанную на MySQL с Делфи 7 Solovei_MC БД в Delphi 0 13.06.2008 20:15
автоматическое создание элементов подскажите пожалуйста. можно ли в Делфи организовать следующее: по зад AniMEshKa Помощь студентам 4 19.04.2008 15:45