калькулятор на си
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]
что-то очень страшное у тебя получилось :D,по коду ты не учел что числа могут быть больше 9, приоритетность (умножение/деление выполняются перед вычитанием,сложением, возможность пользовательской приоритетности "()"). Простым циклом тут не обойдешься, необходимо писать функции, если бы делал я то наверное начал бы с написания функции разбиения выражения на лексемы.
Для написания калькулятора почитай: Обратная польская нотация
Реализацию стека можно найти, я думаю, в любой нормальной книге по Си, как минимум возьми книгу Дейтела & Дейтела "Как программировать на Си", там точно есть.
преподом был задан пример 2+3-4/2*3-1! - значит он имел ввиду, что числа не будут более 10... поэтому не учитывал это....
Для написания калькулятора почитай: Обратная польская нотация[/URL]
Реализацию стека можно найти, я думаю, в любой нормальной книге по Си, как минимум возьми книгу Дейтела & Дейтела "Как программировать на Си", там точно есть.
Олюш, спасибки, сейчас почитаю....
У нас просто 2 урок по Си, а уже такое задают....
Большая просьба обратить внимание как правильно ко мне обращаться, неужели надо в правилах написать просьбу не коверкать ники/логины других пользователей ...
Так наверно это не первый язык, который вы учите, так что нормально.
Написать его - самый простой способ, и полезный ... тем более что алгоритм очень простой, нам мой взгляд конечно. Но если уж запутаетесь, с кем не бывает, тогда можно задать конкретный вопрос на форуме в данной теме, а еще можно поиском по форуму воспользоваться, возможно найдете пример, также у нас есть раздел исходники - можно и там поискать.
Таки первый, Ольга ))) Просто препод молодчинка, жесткий )))
Для написания калькулятора почитай: Обратная польская нотация
Реализацию стека можно найти, я думаю, в любой нормальной книге по Си, как минимум возьми книгу Дейтела & Дейтела "Как программировать на Си", там точно есть.
а, все таки postfix + stack :) это я и написал в ответе но меня проигнорировали. видимо требовалось ссылки кинуть :)
Разбираюсь сейчас со стеком... пока до postfix не дошел и пока не нашел )))
Можеш шитать даже ((((((56*7)+(98-87))*98)/14)*47)/2)+1 :cool:
Разбираюсь сейчас со стеком... пока до postfix не дошел и пока не нашел )))
вообще странно, что на втором уроке такое дают. сам по себе постфикс не сложен, но для стека нужно пройти другие вещи...
Schreiben Sie ein Programm, das einen ganz simplen Taschenrechner simuliert. Eingegeben wird ein mathematischer Ausdruck, der Zahlen und die binären Operatoren +,-,* und / enthä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ühren sind. (Das heißt, es gilt nicht Punkt- vor Strichrechnung!)
.................................................................
z.B. Eingabe: 2+3-4/2*3-1! Ausgabe: 0.5
...............................................................
Вот она задачка, что бы ее....Сори, на немецком....
Слабо верится, что за 2 урока вы уже и массивы и операторы, и циклы и свитч .... малость до стэка не дотянули :) не понятно, при ваших то темпах наверно язык учите за недельку другую =) Начинаю думать, что сфера из области втирания очков :) ггг как говориться в народе)
0.5 это ответ? если да, то интересно конечно, а знак восклицания в конце выражения к чему? речь о факториале? вообще, если речь о примитивном калькуляторе плюс/минус/умножить/поделить и без скобок, то можно и без стэка и без польской нотации обойтись, главное подумать немного и написать, но польская удобней и без изврата.
И конечно желательно уточнение, в выражении арифметические действия производятся только между цифрами: 1,2, 7 ... или числа тоже могут быть?
ЗЫ не надо пожалуйста немецким увлекаться, хотя может вам и повезет и вы найдете собеседника)
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ür beliebige reelle Zahlen.
.....
Eingabe 17.23
Ausgabe: eins-sieben-komma-zwei-drei.
...я как понимаю тут без массива не обойтись. Я их решил уже с массивом...
может, что бы показать программе, что дальше считать-работать не нужно?
??????
#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...