PDA

Просмотр полной версии : Типа калькулятор


Fire3d
20.06.2007, 14:00
Внимание это Turbo pascal:-)
Воть думаю как сделать к примерру в воде 4+4.
Программа понимал + и складовала.
Может быть так
uses crt;
var a,b,c:integer;
begin
write('vedi 4enit>'); readln(a,+,b);
c:=a+b;
writeln('=',c);
end.
?
Подскажите пожалуйста как это реализовать.

Fire3d
20.06.2007, 14:11
Может быть не правильно мысль оформил ?))

NetMan
20.06.2007, 14:19
uses crt;
var a,b,c:integer;
begin
write('a='); readln(a);
write('b='); readln(b);
c:=a+b;
writeln('c=',c);
readln;
end.

Piflit
20.06.2007, 14:19
в целом все правильно. можно покрасивее:

program calc;

uses crt;
var a,b,c:integer;
d:char; // (1)
begin
write('введите первое число');
readln(a);
write('введите второе число');
readln(b);
write('введите операцию');
readln(d);
c:=a StrToChar(d) b; // по поводу StrToChar() не уверен, но думаю, что-то похожее сделать можно
writeln(a,d,b,'=',c);
end.


NetMan, я так понял, что ему калькулятор нужен, а не только сложение))

Fire3d
20.06.2007, 14:24
uses crt;
var a,b,c:integer;
begin
write('a='); readln(a);
write('b='); readln(b);
c:=a+b;
writeln('c=',c);
readln;
end.
Не netman это не то.
Надо при вводе 4+4 программа сочитала и вывила ответ 4+4=8.

NetMan
20.06.2007, 14:31
var
a,b,c:real;
action:char;
begin
write('a='); readln(a);
write('b='); readln(b);
write('action='); readln(action);
case action of
'+':c:=a+b;
'-':c:=a-b;
'/':c:=a/b;
'*':c:=a*b;
end;
writeln(a:1:3,action,b:1:3,'=',c:1:3);
readln;
end.

Exile1985
20.06.2007, 14:55
uses crt;
var a,b,c:integer;
begin
write('vedi 4enit>'); readln(a,+,b);
c:=a+b;
writeln('=',c); // а тут должно быть так: writeln('= 4enit');
end.


круто, молодца развеселил, поржал отдуши :D

Если серьезно то нужно так:


uses crt;
var a,b,c:integer;
begin
write('Vvedite 4+4'); readln;
a:=4;
b:=4;
c:=a+b;
writeln('c=',c);
readln;
end.

:D :D

Exile1985
20.06.2007, 15:18
Не netman это не то.
Надо при вводе 4+4 программа сочитала и вывила ответ 4+4=8.

ну а если вообще серьезно то вот:

uses
SysUtils;

var
b,c,r,y:integer;
a:string;
begin
write('4to xotite slozhit?');
readln(a);
y:=Length(a);
b:=strtoint(copy(a,pos('+',a)+1,y));
c:=strtoint(copy(a,1,pos('+',a)-1));
r:=c+b;
writeln('Otvet=',r);
readln;
end.

как заказывали, если ввести 4+4 одной строкой то выдаст ответ.

Fire3d
20.06.2007, 15:23
круто, молодца развеселил, поржал отдуши :D

Если серьезно то нужно так:


uses crt;
var a,b,c:integer;
begin
write('Vvedite 4+4'); readln;
a:=4;
b:=4;
c:=a+b;
writeln('c=',c);
readln;
end.

:D :D
То что ты мне накалякал я могу сделать ^_^ Но ты меня наверноене понил что надо к примеру чел вводит. x+y жмет ентер ему выходит экран решение в таком формате x+y=n

Exile1985
20.06.2007, 15:24
То что ты мне накалякал я могу сделать ^_^ Но ты меня наверноене понил что надо к примеру чел вводит. x+y жмет ентер ему выходит экран решение в таком формате x+y=n

ну ты следующий пост посмотри :D :D
а вообще спасибо, настроение офигенно поднял :D
особенно этим:

То что ты мне накалякал
:D :D

Fire3d
20.06.2007, 15:28
ну ты следующий пост посмотри :D :D
а вообще спасибо, настроение офигенно поднял :D
особенно этим:


:D :D
Рад старатся ))))
Твой вариант не работает (
uses
SysUtils;

var
b,c,r,y:integer;
a:string;
begin
write('4to xotite slozhit?');
readln(a);
y:=Length(a);
b:=strtoint(copy(a,pos('+',a)+1,y));
c:=strtoint(copy(a,1,pos('+',a)-1));
r:=c+b;
writeln('Otvet=',r);
readln;
end.

пишет типа отсутвует файл SysUtils.TPU

Exile1985
20.06.2007, 15:31
Рад старатся ))))
Твой вариант не работает (

пишет типа отсутвует библиотека SysUtils.

ааа чел, тода сори, попробуй за место SysUtils поставить другой модуль свой crt, я на делфе писал, все пашет замечательно, можно воодить не только 4+4 но вообще любые числа т.е. и 44 и 6532+5563 ей вообще пофиг, а так все работает сам проверял

NetMan
20.06.2007, 15:50
Я же дал новый рабочий код!

uses crt;
var
a,b,c:real;
action:char;
begin
write('a='); readln(a);
write('b='); readln(b);
write('action='); readln(action);
case action of
'+':c:=a+b;
'-':c:=a-b;
'/':c:=a/b;
'*':c:=a*b;
end;
writeln(a:1:3,action,b:1:3,'=',c:1:3);
readln;
end.

Exile1985
20.06.2007, 15:54
Я же дал новый рабочий код!

uses crt;
var
a,b,c:real;
action:char;
begin
write('a='); readln(a);
write('b='); readln(b);
write('action='); readln(action);
case action of
'+':c:=a+b;
'-':c:=a-b;
'/':c:=a/b;
'*':c:=a*b;
end;
writeln(a:1:3,action,b:1:3,'=',c:1:3);
readln;
end.



да нет чел, в твоем коде получается так:
a= //вводим первое число
b= //вводим второе число
жмем Enter и получаем
c:= //ответ

а нужно так

a:= 4+4 //т.е. вводим не по одному числу, а сразу все вместе с знаком +,-,/,*, все одной строкой, чтоб получилосьтак
a:= 25+26
жмем Enter получаем
c:=51

NetMan
20.06.2007, 15:55
Exile1985 в выражении могут присутствовать скобки?

Exile1985
20.06.2007, 15:59
Exile1985 в выражении могут присутствовать скобки?

честно сказать не понял вопроса.
стесняюсь спросить, эт ты щас про что спросил? :D

NetMan
20.06.2007, 16:15
Такое может быть (2+2)/4 ? Или у тебя только сложение и только 2 операнда? :d

Fire3d
20.06.2007, 16:19
Только сложение.

NetMan
20.06.2007, 16:38
Ну тогда вот так:

uses crt;
var s:string;
a,b,c,posit:integer;

function Str2Int(Str:String):Integer;
var Res,code:integer;
begin
val(Str,Res,code);
Str2Int:=Res;
end;

begin
read(s);
posit:=pos('+',s);
a:=Str2Int(copy(s,1,posit-1));
b:=Str2Int(copy(s,posit+1,length(s)-posit+1));
c:=a+b;
write('=',c);
readln;
end.

Fire3d
20.06.2007, 16:51
Спасибо netman. Все пашет!

Fire3d
20.06.2007, 16:54
Вот мой способ
uses crt;
var
a,b,s,c:integer;
begin
write('>'); readln(a,c,b);
write(a);
case c of
'+':write('+');
end;
write(b);
s:=a+b;
writeln('=',s);
end.
Почему он не работает ?

Exile1985
20.06.2007, 17:10
Ну тогда вот так:

uses crt;
var s:string;
a,b,c,posit:integer;

function Str2Int(Str:String):Integer;
var Res,code:integer;
begin
val(Str,Res,code);
Str2Int:=Res;
end;

begin
read(s);
posit:=pos('+',s);
a:=Str2Int(copy(s,1,posit-1));
b:=Str2Int(copy(s,posit+1,length(s)-posit+1));
c:=a+b;
write('=',c);
readln;
end.



:)) ну задача стояла насколько я помню чтоб сложить введенное одной строкой: 4+4 и выдать ответ, я эт и сделал, а про другое разгавора небыло :D
да это и не так и сложно сделать.

Fire3d
20.06.2007, 17:24
Просто тем способом каторый netman написал.... Я не проходил ))) Т.е. не учили )))

Piflit
20.06.2007, 17:35
Вот мой способ

Почему он не работает ?

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.

переменная, в которой может быть '+' должна быть типа char. еще было бы неплохо указать, что сложение вводить надо с пробелами (например, написать пример :) ). но ваще можно и так написать:

writeln('>');
writeln('4+4=8'); или writeln('FATAL ERROR!');

Fire3d
20.06.2007, 17:42
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.

переменная, в которой может быть '+' должна быть типа char. еще было бы неплохо указать, что сложение вводить надо с пробелами (например, написать пример :) ). но ваще можно и так написать:

writeln('>');
writeln('4+4=8'); или writeln('FATAL ERROR!');
Твой код тоже не работает изначально твой код был похож на мой кроме названия ячек хз почему я решил в integer запихнуть ячейку c.... щас не об этом при тесте программы ..... пишет типа invalid

Exile1985
20.06.2007, 17:57
Просто тем способом каторый netman написал.... Я не проходил ))) Т.е. не учили )))

в чистом паскале я не особо но насколько я заню проще было бы сделать так:


var s:string;
a,b,c,posit:integer;
begin
read(s);
posit:=pos('+',s);
a:=val(copy(s,1,posit-1));
b:=val(copy(s,posit+1,Length(s)));
c:=a+b;
write('=',c);
readln;
end.

val - преобразует строку вчисло
copy - копирует заданную часть строки, формат записи такой copy(строка из которой копируем, символ с которого начинаем копировать, символ по который копируем)

но у NetMen ошибка в коде, в этой строке:

b:=Str2Int(copy(s,posit+1,length(s)-posit+1));

а именно тут length(s)-posit+1 он от общей длинны строки отнимает высчитанную позицию знака +, это не верно а вдруг будет такая запись 15+4
тогда получится 4-3 т.е. такая запись b:=Str2Int(copy(s,posit+1,1);
где 4 - длинна строки, а 3 - позиция знака +.

провильно буит так: b:=Str2Int(copy(s,posit+1,Length(s)));

Piflit
20.06.2007, 18:01
Твой код тоже не работает изначально твой код был похож на мой кроме названия ячек хз почему я решил в integer запихнуть ячейку c.... щас не об этом при тесте программы ..... пишет типа invalid

у меня работает о0

NetMan
20.06.2007, 18:16
Exile1985 LOL! RTFM about Copy function.
Delphi syntax:

function Copy(S; Index, Count: Integer): string;

Fire3d
20.06.2007, 18:22
Спасибо всем ребят разобрался я сам.
Воть как должно быть !
только обезательно надо ставить пробелы после каждего символа к примеру 4 + 4 воть
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.

Piflit
20.06.2007, 18:27
ты в последнем коде чето намудрил. много лишнего=\

Fire3d
20.06.2007, 18:35
2piflit Помоймо он как раз работает а твой не компилит одни ошибки .... воть .... попробуй.

Piflit
20.06.2007, 18:46
гг а у меня твой не пашет=) ты чем компилишь?) у меня Pascal ABC

Fire3d
20.06.2007, 19:00
Я же программирую в turbo pascal. ))) Воть и вся разница. В начале топика я предупредил.

Exile1985
20.06.2007, 22:45
Exile1985 LOL! RTFM about Copy function.
Delphi syntax:

function Copy(S; Index, Count: Integer): string;

мда, натупил чет я :)

Fire3d
21.06.2007, 13:43
=)
Я так и не понил к чему этот смайлик ))) Попробуй скачай турбо паскаль весит 1 мб и скомпиль свой код
ггг посмотрим что выйдет :D

Piflit
21.06.2007, 15:58
Я так и не понил к чему этот смайлик ))) Попробуй скачай турбо паскаль весит 1 мб и скомпиль свой код
ггг посмотрим что выйдет :D

мы в школе год кодили на TP7. этот синий экран меня уже достал=\ терь кодю на дельфях. чего и тебе желаю))