Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   С/С++, C#, Delphi, .NET, Asm (https://forum.antichat.xyz/forumdisplay.php?f=24)
-   -   Типа калькулятор (https://forum.antichat.xyz/showthread.php?t=42674)

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

Цитата:

Сообщение от NetMan
Код:

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

Цитата:

Сообщение от Fire3d
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

Цитата:

Сообщение от Fire3d
Не 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

Цитата:

Сообщение от Exile1985
круто, молодца развеселил, поржал отдуши :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

Цитата:

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

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

Цитата:

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

Fire3d 20.06.2007 15:28

Цитата:

Сообщение от Exile1985
ну ты следующий пост посмотри :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

Цитата:

Сообщение от Fire3d
Рад старатся ))))
Твой вариант не работает (

пишет типа отсутвует библиотека 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

Цитата:

Сообщение от NetMan
Я же дал новый рабочий код!
Код:

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

Цитата:

Сообщение от NetMan
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

Цитата:

Сообщение от NetMan
Ну тогда вот так:
Код:

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

Цитата:

Сообщение от Fire3d
Вот мой способ

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

Код:

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

Цитата:

Сообщение от Piflit
Код:

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

Цитата:

Сообщение от Fire3d
Просто тем способом каторый 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

Цитата:

Сообщение от Fire3d
Твой код тоже не работает изначально твой код был похож на мой кроме названия ячек хз почему я решил в 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

Цитата:

Сообщение от NetMan
Exile1985 LOL! RTFM about Copy function.
Код:

Delphi syntax:

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


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

Fire3d 21.06.2007 13:43

Цитата:

Сообщение от Piflit
=)

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

Piflit 21.06.2007 15:58

Цитата:

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

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


Время: 07:57