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

Ваш аккаунт

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

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

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

калькулятор на си

27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
помогите написать калькулятор.... только начал учить Си...нужно задавать строку к примеру 3+4-3/4+2 и получиТь ответ... Какой оператор может считывать строку а потом ее обрабатывать? Спасибо
27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
char a[n] ?
11K
22 октября 2007 года
Free Thinker
118 / / 16.03.2007
если выражение вводится все сразу, то наверно стоит использовать postfix. но для этого тебе нужно сначала выучить stack, а это не для самого начала... или есть более простой способ? :)
27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
выучить ето не проблема с моей стороны, главное знать, где копать ))) а если делаем
Код:
...................................
 char a[30]  //-к примеру
 float n1=50   //-к примеру
................................

[COLOR=Green]/* потом задаем цикл */[/COLOR]

..................................
for (int i=0; i<=30; i++) {

switch a{

case '1':
n=1;
if (n1-d==1) RESULTAT=d+n;
if (d-n1==1) RESULTAT=d-n;
if (n1/d==100) RESULTAT=d*n;
if (d/n1==10) RESULTAT=d/n;
else;
d=1;
break;
...............
case '9':
n=9;
if (n1-d==1) RESULTAT=d+n;
if (d-n1==1) RESULTAT=d-n;
if (n1/d==100) RESULTAT=d*n;
if (d/n1==10) RESULTAT=d/n;
else;
d=9;
break;
.............
case '-':
n1=n-1;
break;
case '+':
n1=n+1;
break;
case '*':
n1=n*100;
break;
case '/':
n1=n/10;
break;
}
}


[COLOR=Red]Для оформления кода используй тэги code. Модератор.[/COLOR]
14K
22 октября 2007 года
stimpi
100 / / 04.09.2007
Цитата: petr_zheltoff
выучить ето не проблема с моей стороны, главное знать, где копать ))) а если делаем


что-то очень страшное у тебя получилось :D,по коду ты не учел что числа могут быть больше 9, приоритетность (умножение/деление выполняются перед вычитанием,сложением, возможность пользовательской приоритетности "()"). Простым циклом тут не обойдешься, необходимо писать функции, если бы делал я то наверное начал бы с написания функции разбиения выражения на лексемы.

242
22 октября 2007 года
Оlga
2.2K / / 04.02.2006
petr_zheltoff
Для написания калькулятора почитай: Обратная польская нотация
Реализацию стека можно найти, я думаю, в любой нормальной книге по Си, как минимум возьми книгу Дейтела & Дейтела "Как программировать на Си", там точно есть.
27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
Цитата: stimpi
что-то очень страшное у тебя получилось :D,по коду ты не учел что числа могут быть больше 9, приоритетность (умножение/деление выполняются перед вычитанием,сложением, возможность пользовательской приоритетности "()"). Простым циклом тут не обойдешься, необходимо писать функции, если бы делал я то наверное начал бы с написания функции разбиения выражения на лексемы.



преподом был задан пример 2+3-4/2*3-1! - значит он имел ввиду, что числа не будут более 10... поэтому не учитывал это....

27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
Цитата: Оlga
petr_zheltoff
Для написания калькулятора почитай: Обратная польская нотация[/URL]
Реализацию стека можно найти, я думаю, в любой нормальной книге по Си, как минимум возьми книгу Дейтела & Дейтела "Как программировать на Си", там точно есть.



Олюш, спасибки, сейчас почитаю....
У нас просто 2 урок по Си, а уже такое задают....

27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
а где бы получить один пример на Си /Обратная польская нотация/
242
22 октября 2007 года
Оlga
2.2K / / 04.02.2006
Цитата:
Олюш, спасибки, сейчас почитаю....

Большая просьба обратить внимание как правильно ко мне обращаться, неужели надо в правилах написать просьбу не коверкать ники/логины других пользователей ...

Цитата:
У нас просто 2 урок по Си, а уже такое задают....

Так наверно это не первый язык, который вы учите, так что нормально.

Цитата:
а где бы получить один пример на Си /Обратная польская нотация/

Написать его - самый простой способ, и полезный ... тем более что алгоритм очень простой, нам мой взгляд конечно. Но если уж запутаетесь, с кем не бывает, тогда можно задать конкретный вопрос на форуме в данной теме, а еще можно поиском по форуму воспользоваться, возможно найдете пример, также у нас есть раздел исходники - можно и там поискать.

27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
Цитата:
Так наверно это не первый язык, который вы учите, так что нормально.



Таки первый, Ольга ))) Просто препод молодчинка, жесткий )))

11K
22 октября 2007 года
Free Thinker
118 / / 16.03.2007
Цитата: Оlga
petr_zheltoff
Для написания калькулятора почитай: Обратная польская нотация
Реализацию стека можно найти, я думаю, в любой нормальной книге по Си, как минимум возьми книгу Дейтела & Дейтела "Как программировать на Си", там точно есть.



а, все таки postfix + stack :) это я и написал в ответе но меня проигнорировали. видимо требовалось ссылки кинуть :)

27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
Игнорировать не в моих правилах, особенно если человек помогает. Здесь минимум нужно быть благодарным.
Разбираюсь сейчас со стеком... пока до postfix не дошел и пока не нашел )))
14K
22 октября 2007 года
A.Victor
52 / / 07.10.2007
Вот написанный мной calc [ATTACH]2308[/ATTACH]
Можеш шитать даже ((((((56*7)+(98-87))*98)/14)*47)/2)+1 :cool:
27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
ой, посмотрел, для меня это еще сложно, я же только учусь )))
11K
22 октября 2007 года
Free Thinker
118 / / 16.03.2007
Цитата: petr_zheltoff
Игнорировать не в моих правилах, особенно если человек помогает. Здесь минимум нужно быть благодарным.
Разбираюсь сейчас со стеком... пока до postfix не дошел и пока не нашел )))



вообще странно, что на втором уроке такое дают. сам по себе постфикс не сложен, но для стека нужно пройти другие вещи...

27K
22 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
Aufgabe 3.11

Schreiben Sie ein Programm, das einen ganz simplen Taschenrechner simuliert. Eingegeben wird ein mathematischer Ausdruck, der Zahlen und die bin&#228;ren Operatoren +,-,* und / enth&#228;lt. Der Ausdruck wird durch ein Rufzeichen abgeschlossen. Das Programm soll das Ergebnis des Ausdrucks berechnen, wobei die Operationen strikt von links nach rechts durchzuf&#252;hren sind. (Das hei&#223;t, es gilt nicht Punkt- vor Strichrechnung!)
.................................................................

z.B. Eingabe: 2+3-4/2*3-1! Ausgabe: 0.5
...............................................................

Вот она задачка, что бы ее....Сори, на немецком....
242
22 октября 2007 года
Оlga
2.2K / / 04.02.2006
[quote=petr_zheltoff]Таки первый, Ольга ))) Просто препод молодчинка, жесткий )))[/quote]
Слабо верится, что за 2 урока вы уже и массивы и операторы, и циклы и свитч .... малость до стэка не дотянули :) не понятно, при ваших то темпах наверно язык учите за недельку другую =) Начинаю думать, что сфера из области втирания очков :) ггг как говориться в народе)
Цитата:
z.B. Eingabe: 2+3-4/2*3-1! Ausgabe: 0.5

0.5 это ответ? если да, то интересно конечно, а знак восклицания в конце выражения к чему? речь о факториале? вообще, если речь о примитивном калькуляторе плюс/минус/умножить/поделить и без скобок, то можно и без стэка и без польской нотации обойтись, главное подумать немного и написать, но польская удобней и без изврата.
И конечно желательно уточнение, в выражении арифметические действия производятся только между цифрами: 1,2, 7 ... или числа тоже могут быть?
ЗЫ не надо пожалуйста немецким увлекаться, хотя может вам и повезет и вы найдете собеседника)

27K
23 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
так, Ольга, университет же Венский, я же в Вене учусь. Поетому и задачи на немецком, так что здесь никакой увлекаловки... А то, что вам не верится, что так скоро учим, так не я же делаю программу. Правда ведь ? ))))

http://www.pri.univie.ac.at/~itep/ws0708/VOSkriptum/siframes.html

в этот понедельник /3 урок/ прошли 3 Einweisungen. Программа по ссылке. Поэтому и задача 3.11 - их всего 15 ))) Каждую неделю решuть 15 задачек до пятници )))
Так это только 1 предмет... Задачи по SQL висят еще....

Вот задача 3.10 -

Aufgabe 3.10
Lesen Sie beliebig viele Zahlen (Abschluss mit 0) ein, und geben Sie das Maximum, das Minimum und den Mittelwert der eingegebenen Werte aus.

Вот задача 3.15 -
Aufgabe 3.15
Wie Beispiel 2 allerdings f&#252;r beliebige reelle Zahlen.
.....
Eingabe 17.23
Ausgabe: eins-sieben-komma-zwei-drei.

...я как понимаю тут без массива не обойтись. Я их решил уже с массивом...

Цитата: Оlga
а знак восклицания в конце выражения к чему? речь о факториале?



может, что бы показать программе, что дальше считать-работать не нужно?

Цитата:
if (a=='!') break;
??????

27K
26 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
Код:
#include <iostream>
#include <stdio.h>
#include <conio.h>

using namespace std;

int main()
{
 float R=0,d=1,n;
 int i;  
 char v[100];
cout<<"Geben Sie ein mathematischer Ausdruck, z.B. 2+3-4/2*3-1!"<<endl;
cin>>v;
cout<<endl;
switch (v[0]){
case '1':R=1;break;
case '2':R=2;break;
case '3':R=3;break;
case '4':R=4;break;
case '5':R=5;break;
case '6':R=6;break;
case '7':R=7;break;
case '8':R=8;break;
case '9':R=9;break;
}
for (i=0; i<=100; i++) {
switch (v){
case '1':
n=1;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '2':
n=2;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '3':
n=3;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '4':
n=4;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '5':
n=5;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '6':
n=6;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '7':
n=7;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '8':
n=8;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '9':
n=9;
if (d=='+') R=R+n;
if (d=='-') R=R-n;
if (d=='*') R=R*n;
if (d=='/') R=R/n;
else;
break;
case '-':d='-';break;
case '+':d='+';break;
case '*':d='*';break;
case '/':d='/';break;
}
if (v=='!')break;
}
cout<<"Die Antwort ist:  "<<R<<endl;

  getch(); //es ist wie ein Pause
    return 0;
}

tak rabotaet...
19K
28 октября 2007 года
Erick
16 / / 30.04.2007
якшо ще треба то є калькулятор.який все рахує!
27K
28 октября 2007 года
petr_zheltoff
22 / / 22.10.2007
спасибки, у меня просто была задачка, мне кажется я уже справился )) Хотя, если не жалко, покажу код, интерестно почитать его. Спасибо.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог