Перейти к содержимому

Реферальная программа Мегаплана

Партнерская программа Kredov

Pascal

#1 Banderas

Banderas
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1
0

Отправлено 08 Ноябрь 2009 - 19:38

Хотел задать парочку вопросов, но не хотел покидать МВ, поэтому решил создать тему на форуме ВЕБ местеров =)

Задание 29: «Калькулятор». Ученик вводит с клавиатуры число(a), символ арифметического действия(z) (+, -) и еще одно число(:). Компьютер должен напечатать результат. Указание: Используйте три оператора ReadLn.


program calc;

uses  CRT;

var
a, b : integer;
z : char;

begin
ClrScr;
readln (a);
readln (z);
readln (b);

case z of
	+ : writeln (a+b);
	- : writeln (a-b);
	else writeln ('unknow z');
end

end.

Надеюсь мне помогут...)))

пс. я вообще нуб в паскале, только начал его учить, по программе коледжа надо :)

 

 

  • 0


#2 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 08 Ноябрь 2009 - 22:44

Banderas, поскольку паскаль не изучал, попробую написать интуитивно...

program calc;

uses CRT;

{секция объявления переменных}
var
   a, b , isError : integer;
   z : char;

begin
   ClrScr; {очищаем экран}
   isError := 0; {обнуляем переменную ошибок}
   writeln ('Считает [+/-]  чисел A и B');

   { цикл с постусловием }
   repeat
	  writeln ('Введите целое число A: ');
	  readln(a);
	  val(a, a, isError);
   until isError > 0;

   { цикл с постусловием }
   repeat
	  writeln ('Введите целое число B: ');
	  val(readln(a), b, isError);
   until isError > 0;

   { цикл с постусловием }
   repeat
	  writeln ('Введите знак [ + / - ] : ');
	  readln(z);
	  val(z, z, isError);
   until isError > 0 and (z <> '+' or z <> '-');

   case z of
	  '+' : writeln (a+b);
	  '-' : writeln (a-b);
	  else writeln ('unknow z');
   end

end.

Сейчас понял что работать код не будет, так как в переменные с клавиатуры не всегда изначально будут считываться те символы что нужно, а проверка уже идёт затем. Даже не знаю что и предложить, языка я не знаю.
  • 0

#3 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 09 Ноябрь 2009 - 00:06

Блин вы что издеваетесь))))
Всё проще на много :)

Program CALC;
uses CRT;
var a,b:integer;
	  z:char;
begin clrscr;
write('a='); readln(a);
write('b='); readln(B);
write('vvedite znak +/-...'); readln(z);
IF z='+' THEN writeln('a+b=', a+B);
IF z='-' THEN writeln('a-b=', a-B);
end.

У меня работает. Можно конечно же и по-другому, но так проще всего ИМХО :)
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



#4 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 01:39

Лёха, я пацтулом :)

Дима, а если например использывать не + и -, а ещё и другие знаки, да и вообще если не я введу вот такое :*:% ??? Здесь надо case... Может надо применять ещё и readkey?
  • 0


#5 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 09 Ноябрь 2009 - 01:50

Banderas, нет, больше ничего не нужно. В условии не написано ничего, программа правильно работает и подходит под условие. Оператор выбора не нужен
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



#6 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 11:35

А как это с case прокрутить?
  • 0


#7 ZiTosS

ZiTosS
  • Пользователь
  • 5 148 сообщений
  • Репутация: 8

Отправлено 09 Ноябрь 2009 - 14:14

admin, ужас, я введу билиберду и получу билиберду... Это называется правильно...
  • 0

#8 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 09 Ноябрь 2009 - 15:05

Banderas, тебе нужно с case делать?
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



#9 Banderas

Banderas
    Topic Starter
  • Пользователь
  • 1 168 сообщений
  • Репутация: 1

Отправлено 09 Ноябрь 2009 - 15:26

Та я уже понял, только новая проблема :)

Вот так все работает
program calc;

uses CRT;

var
a, b, s : integer;
z : char;

begin
ClrScr;
readln (a);
readln (z);
readln (b);

case z of
	'+' : begin s:=a+b; writeln (s) end;
	'-' : begin s:=a-b; writeln (s) end;
	'*' : begin s:=a*b; writeln (s) end;	
	else writeln ('unknow z');
end
end.

Но если я добавляю
'/' : begin s:=a/b; writeln (s) end;
то пишет ошибку: Error 26: Type mismatch.
  • 0


#10 admin

admin
  • Пользователь PRO
  • 5 272 сообщений
  • Репутация: 54

Отправлено 09 Ноябрь 2009 - 15:33

Banderas, я тебя не понимаю. Я написал код под твоё условие, если что-то не так или ещё что-то нужно, то напиши условие новое
  • 0

Сколько лет прошло, а ссылки всё ещё лучше покупать тут



robot

robot
  • Пользователь PRO
  • 2 652 сообщений
  • Репутация: 85


Оформление форума – IPBSkins.ru