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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2010, 18:13   #1
yaxx
 
Регистрация: 06.10.2010
Сообщений: 9
По умолчанию Калькулятор на pascal.

Вобщем полазил по инету и нашел код простого калькулятора (+, -, *, /):
Цитата:
program calc;
uses crt;
label metka;

var a,b,sum:real;
symbol1,symbol2,symbol3:char;

begin
clrscr;
writeln;
writeln('vvedite deystvie 4ere3 probel naprimer 4 - 2');

writeln;
writeln;
metka: readln(a,symbol1,symbol2,symbol3,b) ;

writeln;

case symbol2 of
'+':sum:=a+b;
'-':sum:=a-b;
'*':sum:=a*b;
'/':sum:=a/b;
else
begin
writeln('nekorrektno vvedeno deystvie, vvedite pravilno');
goto metka;
end;
end;
writeln('otvet:',sum:6:2,'.');
writeln;
writeln('************************** ********** ****************************');
readln;
end.
..и никак не могу понять почему если поменять местами symbol1 и symbol 2
Цитата:
metka: readln(a,symbol1,symbol2,symbol3,b) ;
то после ввода действия все время будет писать некорректное действие..
плз помогите в коде разобраться...что такое label, case и т.д....пжл...
и еще вопрос: можно ли в паскале написать программу с визуальным интерфейсом, т.е чтобы не нужно было мышкой работать, и не в ДОСовском окне...
yaxx вне форума Ответить с цитированием
Старый 07.10.2010, 18:35   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
почему если поменять местами symbol1 и symbol 2
Да потому что обычное математическое выражение подразумевает что оператор стоит между своими операндами.
в твоем случае :
a - первый операнд,
symbol1 - пробел,
symbol2 - оператор,
symbol3 - второй пробел,
b - второй операнд.
И именно в такой последовательности они должны быть введены. На symbol2 завязано все, если поменяешь его следование в readln - то ввод в него будет другой.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 07.10.2010, 18:41   #3
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Чесно говоря не понял зачем нужны symbol2 и symbol3.
Использование меток(label) и операторов перехода(goto) нежелательно, т.к. усложняет понимание кода.

Код:
program calc;
uses crt;

var a,b,sum:real;
symbol:char;

begin
  clrscr;
  while True do
  begin
    writeln;
    write('vvedite deystvie 4ere3 probel (naprimer 4 - 2): ');
    readln(a, symbol, b);
    if symbol in ['+','-','/','*'] then 
      Break
    else
      writeln('nekorrektno vvedeno deystvie!');
  end;
  writeln;

  case symbol of
    '+': sum:=a+b;
    '-': sum:=a-b;
    '*': sum:=a*b;
    '/': sum:=a/b;
    else
    begin
      writeln('neizvestnyi operator', symbol, '. Programma budet zakryta!');
      readln;
    end;
  end;
  writeln('otvet:',sum:6:2,'.');
  writeln;
  writeln('************************** ********** ****************************');
  readln;
end.
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 07.10.2010, 18:47   #4
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
...
symbol1 - пробел,
symbol2 - оператор,
symbol3 - второй пробел,
...
А разве read пробелы не игнорирует? Всегда думал что таким способом идет отделение переменных друг от друга.

А нет. Все правильно. Там ведь char. =)
Тогда в мой код надо добавить symbol1 и symbol3 как было в исходном коде.
Правильно заданный вопрос - половина ответа!

Последний раз редактировалось XeruH; 07.10.2010 в 18:57.
XeruH вне форума Ответить с цитированием
Старый 07.10.2010, 22:21   #5
yaxx
 
Регистрация: 06.10.2010
Сообщений: 9
По умолчанию

Цитата:
begin
clrscr;
while True do
begin
writeln;
write('vvedite deystvie 4ere3 probel (naprimer 4 - 2): ');
readln(a, symbol, b);
if symbol in ['+','-','/','*'] then
Break
else
writeln('nekorrektno vvedeno deystvie!');
end;
writeln;
ок ) теперь объясните мне тупоголовому, что означает while true do ну while ето вродь цикл, обязательное true - если да то что он дает? прост училка не поверит что я это сделал :-D она спрашивать будет...а break я так понял ето выход из цикла?
yaxx вне форума Ответить с цитированием
Старый 07.10.2010, 22:26   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
что означает while true do
Это бесконечный цикл. Именно Break дает из него выход, а сработает он только если операция одна из ['+','-','/','*'], иначе опять придется вводить выражение.

Вообще мое мнение - этот код - дезинформация, и скорее опасен для изучения чем проясняет область изучения... Если он написан в методичке - фтопку ее, пусть горит поярче, хоть какая то польза.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2010, 00:34   #7
XeruH
Форумчанин
 
Регистрация: 17.09.2010
Сообщений: 229
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
этот код - дезинформация, и скорее опасен для изучения чем проясняет область изучения...
Это вы про какой код? =)
Правильно заданный вопрос - половина ответа!
XeruH вне форума Ответить с цитированием
Старый 08.10.2010, 18:35   #8
yaxx
 
Регистрация: 06.10.2010
Сообщений: 9
По умолчанию

А как сюда можно добавить возведение числа в степень (sqr) и выведение корня(sqrt)? я чет пытался но не получается :-D, и почему когда перечисляешь (if symbol in [...]) стоят квадратные скобки? что они дают? уж извините что достаю, но в нете про них ниче не написано((

Последний раз редактировалось yaxx; 08.10.2010 в 18:43.
yaxx вне форума Ответить с цитированием
Старый 08.10.2010, 20:17   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
Это вы про какой код? =)
В посте #5
Что в нем хорошего?
Цитата:
чет пытался но не получается
Конечно не получается, у тебя ошибка в 13-й строке )
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.10.2010, 21:03   #10
yaxx
 
Регистрация: 06.10.2010
Сообщений: 9
По умолчанию

и все таки что для чего именно квадратные скобки?

Последний раз редактировалось yaxx; 08.10.2010 в 21:07.
yaxx вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
калькулятор Екатерина1995 Общие вопросы по Java, Java SE, Kotlin 4 29.05.2010 22:06
Калькулятор SPQR10000 Помощь студентам 11 25.02.2010 22:01
Калькулятор Nixtone Помощь студентам 7 03.07.2008 23:17
Калькулятор =) noxer Microsoft Office Excel 1 29.04.2008 05:14