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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.01.2012, 20:44   #1
Женька Good
Форумчанин
 
Регистрация: 15.03.2011
Сообщений: 126
По умолчанию Процедуры в Паскале. конвертер единиц.

Необходимо написать программу, в которой будут преобразовываться одни единицы в другие. Написал программу, всё считает, но есть одна загвоздка,
хотелось бы, чтобы если при вводе номера конвертирования который больше 9 и меньше 1, чтобы писало, мол неправильно введено число.
Сейчас, просто ничего не выводится.(остается процедура с меню и введенные числа на экране).

Вот моя программа: она не полная, несколько процедур, сократил...
Помогите разобраться, плз!

Код:
Program pt;
Uses crt;
Var x:real;
    r:real;
    n:integer;


Procedure menu;
Begin
Writeln('|-|---------------------|');
Writeln('| |        Menu         |');
Writeln('|-|---------------------|');
writeln('|#| Napravleniya obmena |');
Writeln('|-|---------------------|');
Writeln('|1|   strayk => stopki  |');
Writeln('|2|   strayk => litry   |');
Writeln('|3|    litry => stopki  |');
Writeln('|4| cheldron => litry   |');
Writeln('|5|    litry => pek     |');
Writeln('|6| cheldron => pek     |');
writeln('|7|      sak => litry   |');
Writeln('|8|      sak => strayk  |');
Writeln('|9|    litry => strayk  |');
Writeln('|-|---------------------|');
end;

{procedura1: Preobrazovanie strayk v stopki}
Procedure s_s(x:real; r:real; n:integer);
begin
If n=1 then
r:=(1280.46*x)/1;
If r>0 then
Writeln('Rezultat ==> ',r:5:2);
end;

{Procedura2: Preobrazovanie strayk v litry}
Procedure s_l(x:real; r:real; n:integer);
begin
  If n=2 then
  r:=(72.46*x)/1;
  If r>0 then
Writeln('Rezultat ==> ',r:5:2);
end;

begin
clrscr;
menu;
Write('Vvedite # napravleniya neobhodimogo konvertirovaniya ==> ');Readln(n);
Writeln;
Write('Vvedite kol-vo neobhodimoe perevesti ==> ');readln(x);
Writeln;
s_s(x,r,n);
s_l(x,r,n);
readln;
end.
Женька Good вне форума Ответить с цитированием
Старый 13.01.2012, 21:32   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, например, попробуйте примерно так:
Код:
  clrscr;
  menu;
  repeat
     Write('Vvedite # napravleniya neobhodimogo konvertirovaniya ==> ');Readln(n);
      if (n<1) or (n>9) then WriteLn('Ошибка! Попробуйте ещё раз!');
  until (n>=1) or (n<=9);
Serge_Bliznykov вне форума Ответить с цитированием
Старый 13.01.2012, 21:34   #3
whatever
a.k.a. Skull
Форумчанин
 
Регистрация: 17.11.2009
Сообщений: 963
По умолчанию

Код:
begin
clrscr;
menu;
Write('Vvedite # napravleniya neobhodimogo konvertirovaniya ==> ');Readln(n);
Writeln;
Write('Vvedite kol-vo neobhodimoe perevesti ==> ');readln(x);
Writeln;
s_s(x,r,n);
s_l(x,r,n);
readln;
end.
Производишь конвертацию, независимо от пункта меню? Ладно, будем считать, что это из-за сокращения.

Цитата:
хотелось бы, чтобы если при вводе номера конвертирования который больше 9 и меньше 1, чтобы писало, мол неправильно введено число.
Код:
{Var x:real;
    r:real;
    n:integer;
                   }

Procedure menu;
Begin
Writeln('|-|---------------------|');
Writeln('| |        Menu         |');
Writeln('|-|---------------------|');
writeln('|#| Napravleniya obmena |');
Writeln('|-|---------------------|');
Writeln('|1|   strayk => stopki  |');
Writeln('|2|   strayk => litry   |');
Writeln('|3|    litry => stopki  |');
Writeln('|4| cheldron => litry   |');
Writeln('|5|    litry => pek     |');
Writeln('|6| cheldron => pek     |');
writeln('|7|      sak => litry   |');
Writeln('|8|      sak => strayk  |');
Writeln('|9|    litry => strayk  |');
Writeln('|-|---------------------|');
end;

{procedura1: Preobrazovanie strayk v stopki}
Procedure s_s(x:real; r:real; n:integer);
begin
If n=1 then
r:=(1280.46*x)/1;
If r>0 then
Writeln('Rezultat ==> ',r:5:2);
end;

{Procedura2: Preobrazovanie strayk v litry}
Procedure s_l(x:real; r:real; n:integer);
begin
  If n=2 then
  r:=(72.46*x)/1;
  If r>0 then
Writeln('Rezultat ==> ',r:5:2);
end;

procedure start;
var
  x,r:real;
  n:integer;
begin
//clrscr;
  Write('Vvedite # napravleniya neobhodimogo konvertirovaniya ==> ');Readln(n);
  Writeln;
  Write('Vvedite kol-vo neobhodimoe perevesti ==> ');readln(x);
  Writeln;
  if n in [1..9] then
    case n of
      1:s_s(x,r,n);
      2:s_l(x,r,n);
      //и так далее
    end
  else
    begin
      writeln('wrong number');
      start
    end;
end;

begin
  clrscr;
  menu;
  START;
  readln;
end.
P.S. упс, опоздал...
Все тривиальное просто
whatever вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Процедуры в паскале sys*.12 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 27.11.2011 14:45
Найти байтс наибольшим числом единиц и найти байт с наибольшим чилом нулей. Найти разность число единиц м Beren42 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 14.12.2010 17:44
Процедуры в Паскале bwitcher Помощь студентам 12 04.12.2010 12:19
Конвертер денежных единиц vmilyoshin Помощь студентам 6 16.04.2010 11:07
Процедуры на паскале tanek Помощь студентам 0 03.05.2009 00:26