Помощь - Поиск - Пользователи - Календарь
Полная версия: 4+4=8
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Rossi
При в воде на экрна 4+4 после нажатия на ентер все должно посщитатся и вывести в таком формате 4+4=8.
Правильно ли я реализовал эту программу ?
uses crt;
var a,b,s,c:integer;
begin
write('>'); readln(a,c,b);
write(a);
s:=a+b;
case c of
'+':write('+');
end;
write(b);
writeln('=',s);
end.
Urnix
Цитата(Rossi @ 20.06.2007 17:14) *

Правильно ли я реализовал эту программу ?

Так и быть поработаю debug'ером: ERROR 74: Constant and CASE types do not match.
Rossi
Цитата(Urnix @ 20.06.2007 17:29) *

Так и быть поработаю debug'ером: ERROR 74: Constant and CASE types do not match.

???
compiler
Цитата(Rossi @ 20.06.2007 16:37) *
???
добавь еще варианты или используй if ... then...
Rossi
Ошибку нашел... забыл c:char;
program pas;
uses crt;
var
a,b,s:integer;
c:char;
begin
write('>'); readln(a,c,b);
write(a);
case c of
'+':write('+');
end;
write(b);
s:=a+b;
writeln('=',s);
end.
всеравно почемута не работает пишет invalid mega_chok.gif
compiler
вводится всегда буде с однозначные числа?
Rossi
Да.
compiler
и всегда использываться операция сложения?
volvo
Цитата
всеравно почемута не работает
Потому, что ты наверняка вводишь так: Число+Число, т.е., между числом и знаком пробела нет... Так не пойдет, компилятор читает число до первого символа табуляции (пробел или #9 или #13). То есть, единственный вариант для тебя -

program pas;
uses crt;
var
a,b,s:integer;
c, ch:char;
begin
write('>');
read(a); { <-- Читаешь первое число }
read(ch, c); { <-- пробел между первым числом и знаком, и сам знак }
readln(ch, b); { <-- пробел между знаком и вторым числом и второе число }

write(a);
case c of
'+':write('+');
end;
write(b);
s:=a+b;
writeln('=',s);
end.


Вводить надо, соответственно, с пробелами:
2 + 3

P.S. Если с учетом последнего поста, то читать введенные числа в виде символов, и обрабатывать их через Ord(a) - Ord('0') ...
compiler
Цитата(volvo @ 20.06.2007 17:01) *

P.S. Если с учетом последнего поста, то читать введенные числа в виде символов, и обрабатывать их через Ord(a) - Ord('0') ...

Э, это моя идея :lol:
вот код
uses crt;
var s:integer;
c,a,b:char;
begin
write('>');
a:=readkey; write(a);
c:=readkey;write( с ); //что с ним делать незнаю :)
b:=readkey;write(b);
s:=ord(a) + ord(b)-(48*2); //до Ord('0') не додумался :(
writeln('=',s);
readln;
read;
end.

Urnix
А я бы сделал так

uses crt;
const
GoodChars = ['0'..'9','+','-','*','/','.'];
ActionChars = ['+','-','*','/'];
var
s:string;
error:boolean;
i,ActionNum,val_err:integer;
ActionChar:char;
a,b:real;
begin
clrscr;
writeln('vvedite arifmeticheskoe virazhenie:');
readln(s);
clrscr;
error:=false;
for i:=1 to length(s) do
if not (s[i] in GoodChars)
then error:=true;
ActionNum:=0;
for i:=1 to length(s) do
if s[i] in ActionChars
then
begin
ActionChar:=s[i];
inc(ActionNum);
end;
if (ActionNum<>1) or (pos(ActionChar,s)=1) or (pos(ActionChar,s)=length(s))
then error:=true;
if not error
then
begin
val(copy(s,1,pos(ActionChar,s)-1),a,val_err);
val(copy(s,pos(ActionChar,s)+1,length(s)-pos(ActionChar,s)),b,val_err);
case ActionChar of
'+': writeln(s,'=',a+b:1:2);
'-': writeln(s,'=',a-b:1:2);
'*': writeln(s,'=',a*b:1:2);
'/': if b=0
then writeln('na nol delit'' nel''za')
else writeln(s,'=',a/b:5:2);
end;
end
else writeln('Vvedenniy tekst ne yavlaetsa arifmeticheskim virazheniem');
readln;
end.

//это для общего случая
Rossi
Спасибо огромнишое всем!!!
Теперь у меня появился вопрос что такое read? lol.gif
хз мне преподователь про него нечего не говорил хммм(((
volvo
Цитата
это моя идея
Я и не присваивал... А вот реализовал ты свою идею из рук вон плохо: зачем лишил пользователя возможности редактировать строку при ее вводе? Что, нельзя было сделать так:

program pas;
uses crt;
var
s:integer;
a, b, c:char;
begin
write('>');
readln(a, c, b);
write(a);
case c of
'+':write('+');
end;
write(b);
s:=ord(a)+ord(b) - 2*ord('0');
writeln('=',s);
end.



?
compiler
Цитата(Rossi @ 20.06.2007 17:14) *
Теперь у меня появился вопрос что такое read
справка в помощ... вообще это readln без перевода каретки...


Добавлено через 7 мин.
Цитата(volvo @ 20.06.2007 17:16) *
Я и не присваивал...
там же был смайлик
Цитата(volvo @ 20.06.2007 17:16) *
зачем лишил пользователя возможности редактировать строку при ее вводе?

зато не надо вводить с пробелами...
Цитата(volvo @ 20.06.2007 17:16) *
Что, нельзя было сделать так:
как то программка твоя не коректно работает...
volvo
Цитата
как то программка твоя не коректно работает...
Ты еще не научился? Я больше повторять не буду - я голословные заявления НЕ принимаю! Как значения вводишь, то и получаешь. Больше мне сказать нечего (пока нет примеров ввода вывода)... А как будет пример - я ЕГО же протестирую на ТВОЕЙ программе, договорились? А потом приведу СВОЙ пример некорректной работы ТВОЕЙ программы (заметь, начал ТЫ. dry.gif )
Urnix
Цитата(compiler @ 20.06.2007 18:16) *

как то программка твоя не коректно работает...


Цитата(volvo @ 20.06.2007 18:30) *

Ты еще не научился? Я больше повторять не буду - я голословные заявления НЕ принимаю! Как значения вводишь, то и получаешь. Больше мне сказать нечего (пока нет примеров ввода вывода)... А как будет пример - я ЕГО же протестирую на ТВОЕЙ программе, договорились? А потом приведу СВОЙ пример некорректной работы ТВОЕЙ программы (заметь, начал ТЫ. dry.gif )


Ребята вы загнались, и я тоже.

Вот такая фигня вполне будет работать...

var
s:string;
val_err:integer;
a,b:byte;
begin
write('>');
readln(s);
val(s[1],a,val_err);
val(s[3],b,val_err);
writeln(s,'=',a+b);
readln;
end.



А ведь забавно: завести тему и устроить в ней дисскуссию на предмет "как решить в Паскале 4+4", хорошо, хоть не 2+2 lol.gif
compiler
Цитата(volvo @ 20.06.2007 17:30) *
Как значения вводишь, то и получаешь. Больше мне сказать нечего (пока нет примеров ввода вывода)...
пример в названии темы(только с пробелами иначе не работает) ввожу 4 + 4 получаю 4+=-1(не выводится второе число+ неправильный результат (чесно говоря сам не зная почему))
Цитата(volvo @ 20.06.2007 17:30) *
А как будет пример - я ЕГО же протестирую на ТВОЕЙ программе, договорились?
договорились smile.gif только без пробелов
Цитата(volvo @ 20.06.2007 17:30) *
А потом приведу СВОЙ пример некорректной работы ТВОЕЙ программы
жду...
Цитата(volvo @ 20.06.2007 17:30) *
(заметь, начал ТЫ. dry.gif )
что начал?
Rossi
Воть подумал можно ли модефицировть нашу программку от volva с помощью if и then ?
compiler
Цитата(Urnix @ 20.06.2007 17:35) *
Ребята вы загнались, и я тоже.
я пока не нашел число что б получить не верный результат(если использовать сложение и положительные числа да десяти) жду...
Цитата(Urnix @ 20.06.2007 17:35) *
А ведь забавно: завести тему и устроить в ней дисскуссию на предмет "как решить в Паскале 4+4", хорошо, хоть не 2+2 lol.gif
smile.gif


Добавлено через 2 мин.
Цитата(Rossi @ 20.06.2007 17:45) *
Воть подумал можно ли модефицировть нашу программку от volva с помощью if и then ?
пишеш
if c='+' then write('+');

volvo
Цитата
только с пробелами иначе не работает
Очень интересно... Тогда смотри сюда:
Нажмите для просмотра прикрепленного файла

А в своем примере набери 3, потом подними глаза выше, посмотри на название темы, и попробуй сделать так, чтобы посчиталось 4+4 ...

P.S.
Цитата
договорились только без пробелов
То есть, МОЮ программу, которая выполняет ТО ЖЕ самое, что и твоя (и это написано в посте №13), только с сохранением возможности редактирования, ты гоняешь с пробелами, и когда она не работает, ты меня в это тыкаешь носом, а когда ТВОЯ программа не работает по той же (да и не только, см. выше) причине - то это ее несомненный плюс?
compiler
я тестировал твою программу с пробелами(как было сказано в 9 посте)...
Цитата(volvo @ 20.06.2007 17:50) *
не работает... да и не только
вторая причина не есть причина по которой она не работает... возможность редактирования может и хорошо, но необезательна(см. заданее)...

думаю тема закрыта... четыре сложили с четырьмя smile.gif
Malice
Вот так я думаю вернее будет yes2.gif
var s:string;
begin
write ('>');
readln (s);
while pos (' ',s)>0 do delete (s,pos(' ',s),1);
if s='4+4' then writeln ('4 + 4 = ', 4+4) else
writeln ('Введенные данные не соответствуют заданию..');
end.

lol.gif
Fanat
Извините,не удержался...
Malice,тогда проверить ещё не мешало бы, что 4+4=8... respect2.gif ...
Rossi
Народ воть я и доработал калькулятор терь он умнажает че хош кароче делает )))
Мне не много помог преподовтель мой ^_^.
Как вам реализация ???
program cal;
uses crt;
var
code:integer;
sa,sb,s:string;
f,a,b:real;
c:byte;
begin
textcolor(2);
clrscr;

write('>');
readln(s);
if pos('+',s)<>0 then c:=pos('+',s);
if pos('-',s)<>0 then c:=pos('-',s);
if pos('*',s)<>0 then c:=pos('*',s);
if pos('/',s)<>0 then c:=pos('/',s);

sa:=copy(s,1,c-1);
sb:=copy(s,c+1,length(s)-c);

val(sa,a,code);
val(sb,b,code);

write(sa);

case s[c] of
'+':f:=a+b;
'-':f:=a-b;
'*':f:=a*b;
'/':f:=a/b;
end;
writeln(s[c],sb,'=',f:1:2);
readkey;
end.

Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.