Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Помогите, плз

7.8K
13 августа 2006 года
Monarhia
105 / / 26.06.2006
у меня короч проблема с ниписанием обычного калькулятора...
Код:
program calc;
var c, stroka: real;
a, b:integer;
const
a1=a+b;
begin
writeln ('Samii primitivnii kalkulator!!!');
write ('>>>');
read (stroka);
if stroka=a1 then
BEGIN
C:=a+b;
writeln ('>>>',C,'');
readln (C);
end;
if stroka=a-b then
BEGIN
C:=a-b;
writeln ('>>>',C,'');
readln (C);
end;
if stroka=a/b then
BEGIN
C:=a/b;
writeln ('>>>',C,'');
readln (C);
end;
if stroka=a*b then
BEGIN
C:=a*b;
writeln ('>>>',C,'');
readln (C);
end;
end.

и я не понимаю чё он не хочет выбирать так, иль как его вообше написать?
6.7K
13 августа 2006 года
Ginza9
96 / / 30.06.2006
Что-то ты напутал:
1. В разделе Const должны быть определены константы.
Const
pi=3.14;
dx=10;
...
У тебя же мы видим какие-то переменные: a1,a,b
2. Лучше все же для начала написать парсер выражений, строящий деревья, а потом уже от узла к узлу выполнять арифметические действия.
3. Переменные a,b нигде не объявлены.

Если я где-то не прав, то не пинайте.
273
13 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
Мда уж, компилятор Pascal даже ЭТО не скомпилит, не то что выполнять не захочет. Я логику твоей программы уловить не могу. Вот тебе простейший калькулятор:
Код:
[FONT=Courier New]program z1;
uses crt;[/FONT]
[FONT=Courier New]var op1, op2, result : real;
    chOp : char;[/FONT]
[FONT=Courier New]begin
     clrscr;
     write([COLOR=blue]'Enter, please, first operand: '[/COLOR]);
     readln(op1);
     write([COLOR=blue]'Enter, please, second operand: '[/COLOR]);
     readln(op2);
     write([COLOR=blue]'Enter, please, operation (+, -, *, /): '[/COLOR]);
     readln(chOp);
     case chOp of
          [COLOR=blue]'+'[/COLOR]: result := op1 + op2;
          [COLOR=blue]'-'[/COLOR]: result := op1 - op2;
          [COLOR=blue]'/'[/COLOR]: result := op1 / op2;
          [COLOR=blue]'*'[/COLOR]: result := op1 * op2;
          else writeln([COLOR=blue]'Invalid operator'[/COLOR]);
     end;
     writeln([COLOR=blue]'Result = '[/COLOR], result:[COLOR=blue]5[/COLOR]:[COLOR=blue]2[/COLOR]);
     repeat[/FONT] [FONT=Courier New]until keypressed;
end.[/FONT]
1.9K
13 августа 2006 года
[*]Frosty
278 / / 17.06.2006
Советую почитать какаю-нибуть книгу по Pascal с компилятором в руках. Например Фролова, вроде так. Обрати внимание на понятие тип данных, преобразования типов данных. И удачи в познаниях)
6.7K
13 августа 2006 года
Ginza9
96 / / 30.06.2006
Классный у вас калькулятор получается))Все же надо строить деревья,ИМХО. Хотя это же все-таки простейший))
7.8K
13 августа 2006 года
Monarhia
105 / / 26.06.2006
[quote=3A3-968M]Мда уж, компилятор Pascal даже ЭТО не скомпилит, не то что выполнять не захочет. Я логику твоей программы уловить не могу. Вот тебе простейший калькулятор:
Код:
[FONT=Courier New]program z1;
uses crt;[/FONT]
[FONT=Courier New]var op1, op2, result : real;
    chOp : char;[/FONT]
[FONT=Courier New]begin
     clrscr;
     write([COLOR=blue]'Enter, please, first operand: '[/COLOR]);
     readln(op1);
     write([COLOR=blue]'Enter, please, second operand: '[/COLOR]);
     readln(op2);
     write([COLOR=blue]'Enter, please, operation (+, -, *, /): '[/COLOR]);
     readln(chOp);
     case chOp of
          [COLOR=blue]'+'[/COLOR]: result := op1 + op2;
          [COLOR=blue]'-'[/COLOR]: result := op1 - op2;
          [COLOR=blue]'/'[/COLOR]: result := op1 / op2;
          [COLOR=blue]'*'[/COLOR]: result := op1 * op2;
          else writeln([COLOR=blue]'Invalid operator'[/COLOR]);
     end;
     writeln([COLOR=blue]'Result = '[/COLOR], result:[COLOR=blue]5[/COLOR]:[COLOR=blue]2[/COLOR]);
     repeat[/FONT] [FONT=Courier New]until keypressed;
end.[/FONT]
[/quote]

Мне надо не такой, такой я и сам напишу, мне надо что бы вводить в одной строке, тип-2*3-а в ледуюшей строке выводитса ответ...
а:
Цитата:

Классный у вас калькулятор получается))Все же надо строить деревья,ИМХО. Хотя это же все-таки простейший))


что означают Деревья??? Вы могли бы мне помочь?
Кто-то может не коментировать типа:

Цитата:

Советую почитать какаю-нибуть книгу по Pascal с компилятором в руках. Например Фролова, вроде так. Обрати внимание на понятие тип данных, преобразования типов данных. И удачи в познаниях)


а реально помочь??? Спасибо заранее...;)

6.7K
13 августа 2006 года
Ginza9
96 / / 30.06.2006
Ну вот, товарищи!!Я был прав насчет деревьев. Для реализации этой цели вам понадобится разработать разборщик(парсер) выражений, строящий деревья налету. Лучше всего продумать алгоритм на бумаге, расставить приоритеты, продумать вид деревьев. Вообще-то это уже реализовано и не раз))Так что google.com вам в руки. Хороший сайт: http://algolist.manual.ru Кури раздел "Разбор выражений"

Либо надо почитать литературу, связанную с бинарными деревьями. В узлах таких деревьев(в вашем случае) будут арифметические операции
7.8K
13 августа 2006 года
Monarhia
105 / / 26.06.2006
Ты прав, а вот ответ был странный, ты можешь подсказать какойто нормальный ответ? Прямой, иль прямую ссылку дать можешь?
6.7K
13 августа 2006 года
Ginza9
96 / / 30.06.2006
http://algolist.manual.ru/syntax/revpn.php
20K
13 августа 2006 года
Neopen
1 / / 07.08.2006
Ты ваще понял сам что написал?
В константу ты вставил выражение. :eek:
Почитай литературку перед тем как будеш ещо чтото писать.
Но не парься, со всеми бывает...:D
7.8K
13 августа 2006 года
Monarhia
105 / / 26.06.2006
[quote=Neopen]Ты ваще понял сам что написал?
В константу ты вставил выражение. :eek:
Почитай литературку перед тем как будеш ещо чтото писать.
Но не парься, со всеми бывает...:D[/quote]
Хм... сор, я просто забыл поменять, у меня его небыло, а я попробовал и забросил, а сюда скинул исходник с ошибкой, сор:o , но не вано, главное что понятно что я хотел, что так-что так, серовно не пашет:-(
7.8K
14 августа 2006 года
Monarhia
105 / / 26.06.2006
[quote=Ginza9]http://algolist.manual.ru/syntax/revpn.php[/quote]
Вообшето спасибо, но в первых: Это на С/С++, а во вторых там 1 ошибка, он сейровно не пашет...
Можешь дать без ошибки, иль на ТР...?
1.9K
14 августа 2006 года
[*]Frosty
278 / / 17.06.2006
Выкладывай суда или в личку мыло. Поишу что смогу наскезти твоё)
Поишу материал.
P.S.
Как начинающему тебе лучше пока остановиться на TP и книгу найди обязательно.

P.P.S
Попробуй если будешь выкладывать мыло еще раз и во всех деталях рассказать о задаче(возможно помогут причины подталкнувшие тя на это).
6.7K
14 августа 2006 года
Ginza9
96 / / 30.06.2006
Тебе нужна прямо реализация? Чем тебя не устраивает голый алгоритм? По-моему, его не так и сложно реализовать на Паскале.
Читай структуры данных в любой книге по TP.
7.8K
14 августа 2006 года
Monarhia
105 / / 26.06.2006
[quote=Ginza9]Тебе нужна прямо реализация? Чем тебя не устраивает голый алгоритм? По-моему, его не так и сложно реализовать на Паскале.
Читай структуры данных в любой книге по TP.[/quote]
Хм... у меня в книге такого вообше нет...
6.7K
14 августа 2006 года
Ginza9
96 / / 30.06.2006
Тогда проделайте следующий алгоритм:
1. Откройте окно
2. Как следует размахнитесь
3. Выбросьте эту книгу в окно

Нет, так нет. Читайте здесь: http://www.pascaler.ru/dynamics/
7.8K
16 августа 2006 года
Monarhia
105 / / 26.06.2006
Хм... сенкс, а почему бы ишё и полный кон не дать?
6.7K
16 августа 2006 года
Ginza9
96 / / 30.06.2006
Не принято на таких форумах давать полное решение...
7.8K
16 августа 2006 года
Monarhia
105 / / 26.06.2006
Хм... А ты в личку скинь плз... Я те буду очень признателен...
18K
19 августа 2006 года
fareko
6 / / 19.08.2006
Люди, не парьтесь!
Самый простой вариант это:
1. Считываешь 1 строку, допустим, это будет "23+7".
2. Пускаешь цикл, определяющий позицию оператора.
Пример:
for i:=0 to (length(str)-1) step 1 do begin
if (str='+') or (str='-') then pos=i;
end;
Я написал for, потому, что не помню, как пишуться остальные циклы, но можно как угодно. Главное, чтобы работало!
3. В итоге, получишь цифру 2(нумерация с нуля).
Теперь создаешь пустую стринговую переменную str1 и конкатишь в нее по-очереди все символы строки str, идущие до оператора.
4. Таким же образом, создаешь строковые переменные, в которые загоняешь значение второго значения и, естественно, знак действия.
5. Конвертишь два строковых значения в челочисленные(есть такая функция, как точно зовется - не помню).
6. А дальше используешь уже описанный наверху метод с case'ом!
Конечно, у этого способа есть проблема: он выполняет только одно действие, но если это - не важно, то проблем нет!:D
339
23 августа 2006 года
verybadbug
619 / / 12.09.2005
а вот его реализация....
Код:
var
  S: String;
  sA, sB: String;
  I: Integer;
  A, B, C: Real;
  Code: Integer;
begin
  Write('>'); Readln(S);
  I := Pos('+', S);
  if I = 0 then I := Pos('-', S);
  if I = 0 then I := Pos('*', S);
  if I = 0 then I := Pos('/', S);
  if I > 0 then begin
    sA := Copy(S, 1, I - 1);
    sB := S;
    Delete(sB, 1, I);
    Val(sA, A, Code);
    Val(sB, B, Code);
    case S of
      '+': C := A + B;
      '-': C := A - B;
      '*': C := A * B;
      '/': C := A / B;
    end;
    Writeln(C);
  end;
end.
7.8K
23 августа 2006 года
Monarhia
105 / / 26.06.2006
спосибо большое, но он тоже не полноценно работает... он после отсчёта выкидывает, тойсть в откомпилированом виде ответа не увидешь, а во вторых почемуто считает так:
5*5=2,5
а 10*10=1,00
269
23 августа 2006 года
Greenering
892 / / 04.02.2003
перед последним end-ом, поставить readln; и не будет "выкидывать"
А насчет второго:
В-первых: программа работает правильно и отображает ответ правильно
Во-вторых: потрудитесь хоть чуть чуть напрячся и что-то почитать по Паскалю.
7.8K
23 августа 2006 года
Monarhia
105 / / 26.06.2006
ну допустим прочиталь (не первый раз, но вспомнил забытое) и всёже я не могу понять, вроде прога должна выводить точный ответ как в первых примерах любой книги... Я не могу понять смысл неправельного вывода ответа... Можете пожайлуста открыть секрет(желательно в приват иль асе 327-812-180
269
24 августа 2006 года
Greenering
892 / / 04.02.2003
[QUOTE=Monarhia]ну допустим прочиталь (не первый раз, но вспомнил забытое) и всёже я не могу понять, вроде прога должна выводить точный ответ как в первых примерах любой книги... Я не могу понять смысл неправельного вывода ответа... Можете пожайлуста открыть секрет(желательно в приват иль асе 327-812-180[/QUOTE]
для вещественных чисел используется представление числа с плавающей запятой в виде #.#############Е*##
Что понимать надо примерно так:
если 5*5
ответ 2,50000000000000Е*01
это надо понимать так : 2,5(умножить на)10(в степени)01
получим 25.
ДЛя того чтобы представить числа в удобоваримом свете, надо использовать форматы вывода.
PS если в строке
 
Код:
A, B, C: Real;
поменять
тип переменных на integer;
и заремить строчку
 
Код:
'/': C := A / B;

то будет все как вы хотите, за исключением операции деление
7.8K
24 августа 2006 года
Monarhia
105 / / 26.06.2006
как по мне что бы выводило всё как я хочу легче добавит в строчке
 
Код:
Writeln(C);

Writeln(C:0:2);

b и ё вопрос, как сделать что бы выводило не так:
5*5
25, а 5*5=25, тойсть в дной строке...
273
25 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=Monarhia]b и ё вопрос, как сделать что бы выводило не так:
5*5
25, а 5*5=25, тойсть в дной строке...[/quote]
Измени кода на:
Код:
[FONT=Courier New]var[/FONT][FONT=Courier New]
[LEFT]S: String;
sA, sB: String;
I: Integer;
A, B, C: Real;
Code: Integer;
begin
Write('>'); Read(S);
I := Pos('+', S);

if I = 0 then I := Pos('-', S);
[LEFT]if I = 0 then I := Pos('*', S);
if I = 0 then I := Pos('/', S);
if I > 0 then begin
sA := Copy(S, 1, I - 1);
sB := S;
Delete(sB, 1, I);
Val(sA, A, Code);
Val(sB, B, Code);
case S of
'+': C := A + B;
'-': C := A - B;
'*': C := A * B;
'/': C := A / B;
end;[/LEFT]

ClrScr; [LEFT]Write(S,'=', C:2:5);[/LEFT]
[/LEFT]

[/FONT][LEFT][LEFT][FONT=Courier New]repeat until keypressed;[/FONT] [LEFT][FONT=Courier New]end;[/FONT][FONT=Courier New]end.[/FONT][/LEFT]
[/LEFT]
[/LEFT]
1.6K
25 августа 2006 года
Shtirlitz
145 / / 31.07.2006
Вот еще калькулятор до кучи:
Program calc;
label
exit;
var
oper: char;
a,b,c: real;
begin
writeln(' Calculator');
write('Vvedite Perviy operand:');
readln(a);
write('Vvedite vtoroy operand:');
readln(b);
Write('Vvedite nugnoe deystvie ("+","-","*","/"):');
read(oper);
case oper of
'+' :c:=a+b;
'-' :c:=a-b;
'*' :c:=a*b;
If b=0 then begin
write(' Oshibka deleniya na noll');
Goto exit;
'/' :c:=a/b;
write(' Rezultat= ',c:8:4);
exit:
write(' Dlya vihoda nagmite lubuu klavishu ');
readln;
readln; {?}
end.
Если еще нужно что-нибудь посложнее пишите [email]artysokolov@yandex.ru[/email]! Отвечу!!!
273
25 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=Shtirlitz]Вот еще калькулятор до кучи:
Program calc;
label
exit;
var
oper: char;
a,b,c: real;
begin
writeln(' Calculator');
write('Vvedite Perviy operand:');
readln(a);
write('Vvedite vtoroy operand:');
readln(b);
Write('Vvedite nugnoe deystvie ("+","-","*","/"):');
read(oper);
case oper of
'+' :c:=a+b;
'-' :c:=a-b;
'*' :c:=a*b;
If b=0 then begin
write(' Oshibka deleniya na noll');
Goto exit;
'/' :c:=a/b;
write(' Rezultat= ',c:8:4);
exit:
write(' Dlya vihoda nagmite lubuu klavishu ');
readln;
readln; {?}
end.
Если еще нужно что-нибудь посложнее пишите [EMAIL="artysokolov@yandex.ru"]artysokolov@yandex.ru[/EMAIL]! Отвечу!!![/quote]
По-большому счёту от предложенного варианта в №3 посте он ничем не отличается (да ещё и с меткой и goto....брррр).
Думаю, что вопрос уже разжёван до однородной субстанции и поэтому тему закрываю.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог