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

> Правила раздела!

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

 
 Ответить  Открыть новую тему 
> Вызов процедуры через case
сообщение
Сообщение #1





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

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


Здраствуйте, форумчани!
Я недавно занимаюсь Паскалем и у меня появилась одна проблема.
Есть две процедуры. При создании программы проверялась работа при одной процедуре. ПРограмма работала. После создания второй процедуры я ввел конструкцию case такого типа:
Код
Program ...
var x:char; a,b,c,d,f:real;
Procedure1(a,b:real; var c:real);
begin
...
end;
Procedure2(c,d:real; var f:real);
begin
...
end;
begin
readln(x);
case x of
'Y':procedure1(a,b,c);
'Z':procedure2(c,d,f);
end;
readln
end.


При отсутсвии case и использования одной процедуры программа работает отлично.
При использовании программы, приведенной выше программа считывает Х и после етого должна запускаться процедура 1 (или 2). Но после ввода каких либо данных окно программы закрываеться.
Помогите пожалуйста решить ету проблему.
Надеюсь на понимание.

P.S Процедура 2 аналогична Процедуре 1, но только с другими данными.

Сообщение отредактировано: KIngSpades -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Во-первых, так быть не должно. То есть, программа должна нормально работать. Почему она вылетает - это тебе предстоит выяснить. Пройди по программе пошагово (через F7), отладчиком, и выясни, где именно она валится, на какой строке (подробнее об отладке можно почитать здесь)... Я надеюсь, все возможные проверки в Options -> Compiler -> Runtime Errors включены? Это тоже может помочь обнаружить проблему...

А во-вторых, не совсем понятно. Если процедуры одинаковые, и только данные разные, то зачем их две? Передавай в том же Case в одну и ту же процедуру разные данные. Для этого подпрограммы и существуют. Какой смысл делать несколько версий, отличающихся только названиями параметров?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





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

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


Спасибо за ответ.
Попробую сделать как ты сказал.
Если надо я мог бы выложить код программы, чтоб понять суть приминения двух процедур.

Добавлено через 8 мин.
К сожалению, отладака не сработала так как программа хоть и не работает правильно но все же запускаеться, и Turbo Pacal не видит никаких ошибок.
Код
program pokerdraw;
uses crt;
var F,T,E,G:integer; st,sk,r:real; v:char;
procedure Flush(st,sk:real; var r:real);
begin
readln(st);
readln(sk);
st:= st / 100;
r:= sk/st;
writeln('текст­');
writeln('37 %');
writeln('текст');
if (r <= 37) then  writeln('Да');
if (r > 37) then writeln('Нет');
end;
Procedure OESD(st,sk:real; var r:real);
begin
readln(st);
readln(sk);
st:= st / 100;
r:= sk/st;
writeln('Текст');
writeln(' 33 %');
writeln('Текст ');
if (r <= 33) then  writeln('Да');
if (r > 33) then writeln('Нет');
end;
begin
clrscr;
readln(v);
case v of
'F':flush(st,sk,r);
'E':OESD(st,sk,r);
end;
readln
end.

Надеюсь ето поможет.
Я новичок поетому не судите строго если наидете банальние ошибки.

Сообщение отредактировано: KIngSpades -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гуру
*****

Группа: Пользователи
Сообщений: 1 013
Пол: Мужской
Ада: Разработчик
Embarcadero Delphi: Сторонник
Free Pascal: Разработчик

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


Все работает совершенно нормально. Запускается программа:
F
10
20
текст­
37 %
текст­
нет

, или
E
150
200
Текст
33 %
Текст
Нет

(FPC 2.4.4, если что, но причин не работать под Турбо Паскалем не видно. Будет точно то же самое).

Уж не знаю, что ты там вводишь, чтоб оно не работало. Буквы точно в верхнем регистре? Нулевых значений нет?

Цитата
К сожалению, отладака не сработала
А ты проходил пошагово? Что значит не сработала? Строка за строкой жмешь F7, и говоришь, на какой именно строке программа ведет себя не так, как ожидалось. Ты что, хотел, чтоб тебе сразу появилось сообщение, что у тебя в такой-то строке ошибка? Этого не будет...

Пойми, я не телепат, я не знаю, что именно ты вводишь, как именно реагирует твоя программа.

Сообщение отредактировано: IUnknown -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


Спасибо большое за помощь. Ошибка оказалась самая банальная.
При запуске программы я использовал "е" а не "Е", думал что ето не важно)
IUnkown, большое спасибо за помощь!

Сообщение отредактировано: KIngSpades -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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