X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

2 страниц V   1 2 >
Открыть тему
Тема закрыта
> Pascal
Banderas
Banderas
Topic Starter сообщение 8.11.2009, 20:38; Ответить: Banderas
Сообщение #1


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

Задание 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
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 8.11.2009, 23:44; Ответить: ZiTosS
Сообщение #2


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_* Гость_0_*
сообщение 9.11.2009, 1:06; Ответить: Гость_0_*
Сообщение #3


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

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.


У меня работает. Можно конечно же и по-другому, но так проще всего ИМХО :)
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 9.11.2009, 2:39; Ответить: Banderas
Сообщение #4


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

Дима, а если например использывать не + и -, а ещё и другие знаки, да и вообще если не я введу вот такое :*:% ??? Здесь надо case... Может надо применять ещё и readkey?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Гость_0_* Гость_0_*
сообщение 9.11.2009, 2:50; Ответить: Гость_0_*
Сообщение #5


Banderas, нет, больше ничего не нужно. В условии не написано ничего, программа правильно работает и подходит под условие. Оператор выбора не нужен
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 9.11.2009, 12:35; Ответить: Banderas
Сообщение #6


А как это с case прокрутить?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
ZiTosS
ZiTosS
сообщение 9.11.2009, 15:14; Ответить: ZiTosS
Сообщение #7


admin, ужас, я введу билиберду и получу билиберду... Это называется правильно...
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Гость_0_* Гость_0_*
сообщение 9.11.2009, 16:05; Ответить: Гость_0_*
Сообщение #8


Banderas, тебе нужно с case делать?
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Banderas
Banderas
Topic Starter сообщение 9.11.2009, 16:26; Ответить: Banderas
Сообщение #9


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

Вот так все работает
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_* Гость_0_*
сообщение 9.11.2009, 16:33; Ответить: Гость_0_*
Сообщение #10


Banderas, я тебя не понимаю. Я написал код под твоё условие, если что-то не так или ещё что-то нужно, то напиши условие новое
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
2 страниц V   1 2 >
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


 



RSS Текстовая версия Сейчас: 19.4.2024, 16:34
Дизайн