При в воде на экрна 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 20.06.2007 20:29
Цитата(Rossi @ 20.06.2007 17:14)
Правильно ли я реализовал эту программу ?
Так и быть поработаю debug'ером: ERROR 74: Constant and CASE types do not match.
Автор: Rossi 20.06.2007 20:37
Цитата(Urnix @ 20.06.2007 17:29)
Так и быть поработаю debug'ером: ERROR 74: Constant and CASE types do not match.
???
Автор: compiler 20.06.2007 20:39
Цитата(Rossi @ 20.06.2007 16:37)
???
добавь еще варианты или используй if ... then...
Автор: Rossi 20.06.2007 20:43
Ошибку нашел... забыл 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
Автор: compiler 20.06.2007 20:55
вводится всегда буде с однозначные числа?
Автор: Rossi 20.06.2007 20:56
Да.
Автор: compiler 20.06.2007 20:58
и всегда использываться операция сложения?
Автор: volvo 20.06.2007 21:01
Цитата
всеравно почемута не работает
Потому, что ты наверняка вводишь так: Число+Число, т.е., между числом и знаком пробела нет... Так не пойдет, компилятор читает число до первого символа табуляции (пробел или #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 20.06.2007 21:06
Цитата(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 20.06.2007 21:09
А я бы сделал так
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 20.06.2007 21:14
Спасибо огромнишое всем!!! Теперь у меня появился вопрос что такое read? хз мне преподователь про него нечего не говорил хммм(((
Автор: volvo 20.06.2007 21:16
Цитата
это моя идея
Я и не присваивал... А вот реализовал ты свою идею из рук вон плохо: зачем лишил пользователя возможности редактировать строку при ее вводе? Что, нельзя было сделать так:
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 20.06.2007 21:16
Цитата(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 20.06.2007 21:30
Цитата
как то программка твоя не коректно работает...
Ты еще не научился? Я больше повторять не буду - я голословные заявления НЕ принимаю! Как значения вводишь, то и получаешь. Больше мне сказать нечего (пока нет примеров ввода вывода)... А как будет пример - я ЕГО же протестирую на ТВОЕЙ программе, договорились? А потом приведу СВОЙ пример некорректной работы ТВОЕЙ программы (заметь, начал ТЫ. )
Автор: Urnix 20.06.2007 21:35
Цитата(compiler @ 20.06.2007 18:16)
как то программка твоя не коректно работает...
Цитата(volvo @ 20.06.2007 18:30)
Ты еще не научился? Я больше повторять не буду - я голословные заявления НЕ принимаю! Как значения вводишь, то и получаешь. Больше мне сказать нечего (пока нет примеров ввода вывода)... А как будет пример - я ЕГО же протестирую на ТВОЕЙ программе, договорились? А потом приведу СВОЙ пример некорректной работы ТВОЕЙ программы (заметь, начал ТЫ. )
Ребята вы загнались, и я тоже.
Вот такая фигня вполне будет работать...
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
Автор: compiler 20.06.2007 21:41
Цитата(volvo @ 20.06.2007 17:30)
Как значения вводишь, то и получаешь. Больше мне сказать нечего (пока нет примеров ввода вывода)...
пример в названии темы(только с пробелами иначе не работает) ввожу 4 + 4 получаю 4+=-1(не выводится второе число+ неправильный результат (чесно говоря сам не зная почему))
Цитата(volvo @ 20.06.2007 17:30)
А как будет пример - я ЕГО же протестирую на ТВОЕЙ программе, договорились?
договорились только без пробелов
Цитата(volvo @ 20.06.2007 17:30)
А потом приведу СВОЙ пример некорректной работы ТВОЕЙ программы
жду...
Цитата(volvo @ 20.06.2007 17:30)
(заметь, начал ТЫ. )
что начал?
Автор: Rossi 20.06.2007 21:45
Воть подумал можно ли модефицировть нашу программку от volva с помощью if и then ?
Автор: compiler 20.06.2007 21:46
Цитата(Urnix @ 20.06.2007 17:35)
Ребята вы загнались, и я тоже.
я пока не нашел число что б получить не верный результат(если использовать сложение и положительные числа да десяти) жду...
Цитата(Urnix @ 20.06.2007 17:35)
А ведь забавно: завести тему и устроить в ней дисскуссию на предмет "как решить в Паскале 4+4", хорошо, хоть не 2+2
Добавлено через 2 мин.
Цитата(Rossi @ 20.06.2007 17:45)
Воть подумал можно ли модефицировть нашу программку от volva с помощью if и then ?
пишеш
if c='+' then write('+');
Автор: volvo 20.06.2007 21:50
Цитата
только с пробелами иначе не работает
Очень интересно... Тогда смотри сюда:
А в своем примере набери 3, потом подними глаза выше, посмотри на название темы, и попробуй сделать так, чтобы посчиталось 4+4 ...
P.S.
Цитата
договорились только без пробелов
То есть, МОЮ программу, которая выполняет ТО ЖЕ самое, что и твоя (и это написано в посте №13), только с сохранением возможности редактирования, ты гоняешь с пробелами, и когда она не работает, ты меня в это тыкаешь носом, а когда ТВОЯ программа не работает по той же (да и не только, см. выше) причине - то это ее несомненный плюс?
Автор: compiler 20.06.2007 22:15
я тестировал твою программу с пробелами(как было сказано в 9 посте)...
Цитата(volvo @ 20.06.2007 17:50)
не работает... да и не только
вторая причина не есть причина по которой она не работает... возможность редактирования может и хорошо, но необезательна(см. заданее)...
думаю тема закрыта... четыре сложили с четырьмя
Автор: Malice 21.06.2007 12:28
Вот так я думаю вернее будет
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.
Автор: Fanat 21.06.2007 22:45
Извините,не удержался... Malice,тогда проверить ещё не мешало бы, что 4+4=8... ...
Автор: Rossi 22.06.2007 17:55
Народ воть я и доработал калькулятор терь он умнажает че хош кароче делает ))) Мне не много помог преподовтель мой ^_^. Как вам реализация ???
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.