Taschenrechner programmieren mit C (Double und Nachkommastellen)
Ich hab angefangen einen Taschenrechner mit C zu programmieren und so sieht es bis jetzt aus
#include "stdlib.h"
#include "math.h"
#include "string.h"
#include "stdio.h"
int main(int argc, char *argv[])
{
int Zahl1;
int Zahl2;
int Gesamt;
int Merker;
int Laenge;
int Stelle;
char Eingabe_Zahl1[100];
char Eingabe_Zahl2[100];
char Rechenzeichen[100];
ANFANG:
gets(Rechenzeichen);
Merker = 0;
if (Rechenzeichen[0]=='+') Merker = 1;
if (Rechenzeichen[0]=='-') Merker = 1;
if (Rechenzeichen[0]=='*') Merker = 1;
if (Rechenzeichen[0]=='/') Merker = 1;
if (Merker == 0) printf("Hier duerfen nur Rechenzeichen stehen!\n");
if (Merker == 0) printf("\n");
if (Merker == 0) goto ANFANG;
gets(Eingabe_Zahl1);
Laenge=strlen(Eingabe_Zahl1);
//printf("%d Zeichen\n", Laenge);
Stelle = 0 ;
PRUEF_ZAHL1:
Merker = 0 ;
if (Eingabe_Zahl1[Stelle]== '0') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '1') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '2') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '3') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '4') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '5') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '6') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '7') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '8') Merker = 1;
if (Eingabe_Zahl1[Stelle]== '9') Merker = 1;
if (Merker == 0) printf("Hier duerfen nur Zahlen stehen!\n");
if (Merker == 0) printf("\n");
if (Merker == 0) goto ANFANG;
Stelle=Stelle +1;
if (Laenge != Stelle) goto PRUEF_ZAHL1;
printf("Bitte geben Sie die zweite Zahl ein : ");
gets(Eingabe_Zahl2);
Laenge=strlen(Eingabe_Zahl2);
//printf("%d Zeichen\n", Laenge);
Stelle = 0 ;
PRUEF_ZAHL2:
Merker = 0 ;
if (Eingabe_Zahl2[Stelle]== '0') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '1') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '2') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '3') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '4') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '5') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '6') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '7') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '8') Merker = 1;
if (Eingabe_Zahl2[Stelle]== '9') Merker = 1;
if (Merker == 0) printf("Hier duerfen nur Zahlen stehen!\n");
if (Merker == 0) printf("\n");
if (Merker == 0) goto ANFANG;
Stelle=Stelle+1;
if (Laenge != Stelle) goto PRUEF_ZAHL2;
Zahl1=atoi(Eingabe_Zahl1);
Zahl2=atoi(Eingabe_Zahl2);
if (Rechenzeichen[0]=='+') Gesamt = Zahl1 + Zahl2;
if (Rechenzeichen[0]=='-') Gesamt = Zahl1 - Zahl2;
if (Rechenzeichen[0]=='*') Gesamt = Zahl1 * Zahl2;
if (Rechenzeichen[0]=='/') Gesamt = Zahl1 / Zahl2;
printf("Das Ergebnis lautet : %d\n" ,Gesamt);
printf("\n");
goto ANFANG;
Ich weiß goto und atoi und sowas ist doof aber darum geht es jetzt nicht.
WEnn man bei diesem Rechner die Zahl 2147483647 eingibt und dann +1 rechnet
kommt - 2147483647 raus.
Man macht das anscheind mit double aber irgendwie verteh ich das nicht und außerdem kann dieser Rechner keine Kommazahlen berechnen.
Wäre nett wenn jemand der das versteht mir helfen könnte.
DAnke
4 Antworten
Ein Integer ist eine Variable mit 32 Bit Länge. Somit wäre die größtmögliche Zahl, die man dort speichern könnte 4.294.967.295.
ABER: Es gibt ja auch negative Zahlen. Wenn in einer Variablen positive und negtive Zahlen gespeichert werden sollen, dann wird von den 32 Bit ein Bit für das Vorzeichen benötigt. Daher ist dann 2.147.483.647 der größtmögliche Wert. Addiert man nun zu dieser Zahl eine 1, dann wird auch das 32. Bit benötigt. Das ist aber für das Vorzeichen da. Also wird die Zahl plötzlich negativ.
Wenn Du mit größeren Zahlen rechnen möchtest, brauchst Du also einen Variablentyp mit 8 Byte Länge (also 64 Bit).
Und wie ändere ich das um ?
Das ist ja warscheinlich mit Double nur da ich ein Neuling bin habe ich kein wirklichen Plan.
Das liegt am Wertebereich von int. Bei 2147483647 ist auf deinem System offenbar Schluss; eine größere Zahl ist durch int nicht darstellbar. Wenn du dann 1 hinzuaddierst, fängt er intern bei der kleinsten darstellbaren Zahl wieder an.
Das kannst du entweder hinnehmen, oder auf einen Datentypen mit größerem Wertebereich ausweichen - wie du schon selbst sagst, double zum Beispiel.
Aus welcher Quelle lernst du eigentlich? Dir scheinen ja schon noch einige Grundlagen zu fehlen...
Sind ein paar Zettel die von nem Bekannten bekommen habe, leider sind sie sehr kompliziert geschrieben für einen Neuling und deswegen versteh ich nicht alles
Double wäre eine Lösung um Kommazahlen zu bearbeiten, anstatt deiner Integer. Was die 2147483647 angeht, dies ist die maximale Größe deines Datentyps und entspricht 32 Bit bzw. einer signed 32 Bit Zahl.
"außerdem kann dieser Rechner keine Kommazahlen berechnen", weil du Integer verwendest und Integer rechnet nur mit ganzen Zahlen. Möchtest du Kommazahlen berechnen, benötigst du den Double statt Integer.
Statt
int Variablenname;
double Variablenname;
schreiben. Hier gibt es ein gutes Tutorial für Anfänger: http://www.youtube.com/user/00z3r000?feature=watch da wird das auch alles erklärt.
ich hab jetzt:
double Zahl1;
double Zahl2;
double Gesamt;
double Merker;
double Laenge;
double Stelle;
Dann erscheint aber ein error Code:
error C2108: Index ist kein Ganzzahltyp
Was ist jetzt falsch ?
Manche Funktionen können nur mit Integern umgehen, darauf musst du achten. Die musst du dann durch andere Funktionen / Vorgehensweisen ersetzen, die auch Double unterstützen.
Ich bin Neuling das ist das aller erste mal das ich was scripte..
könntest du mir sagen wie oder wo ich Integer ersetzen kann durch Double