# Sprachliche Repräsentation von Zahlen



## Marimi (25. Oktober 2010)

Hallo,

ich bin auf der suche nach einem C++ Befehl der mir eine Zahl sprachlich repräsentiert also  zum beispiel: 1234 = eins-zwei-drei-vier

Hab auch versuhct das zu googeln stoße aber so auf gar nix. Vielleicht kann mir ja wer helfen und sagen welchen Befehl ich dazu brauche.

Lieben Gruß
Marimi


----------



## deepthroat (25. Oktober 2010)

Hi.

Mir wäre kein "Befehl" bekannt der das machen würde.

Am besten du erstellst selbst ein solches Programm.

Es gibt ja nur 10 Ziffern denen du ein Wort zuordnen mußt.

Gruß


----------



## Marimi (28. Oktober 2010)

Hallöchen, 

also ich hab einen ansatz gefunden, so ein Programm zu schreiben. Allerdings wird mir beim ausführen gar nix ausgegeben. stimmt was an meiner syntax nicht:


```
#include <iostream>
using namespace std;

int main () {
    /*Diese Programm gibt die sprachliche Repräsentation von Zahlen wieder. */
    /* Zuerst wird für unsere Zahl eine Variable eingelesen. */
    int z;
    cin >> z;
    cout << "Bitte geben Sie eine Zahl ein: ";
    /* Mit Hilfe der switch-Anweisung werden für jede Ziffer die dazugehörigen Namen zu geordnet. */
    {switch (z) 
        {case 1: cout << "eins";
        case 2: cout << "zwei";
        case 3: cout << "drei";
        case 4: cout << "vier";
        case 5: cout << "fuenf";
        case 6: cout << "sechs";
        case 7: cout << "sieben";
        case 8: cout << "acht";
        case 9: cout << "neun";
        case 0: cout << "null";}}
  
 
return 0;
}
```

Ich sollte auch noch eine eine do/while einschleife bauen damit das programm beliebig oft durchführbar wird. 

Lieben Gruß 
Marimi


----------



## sheel (28. Oktober 2010)

Lass mich raten, die eingegebene Zahl war sicher größer als 9?

Du solltest nicht nur eine Schleife zur Programmwiederholung einbauen, sondern auch eine Schleife damit jede Ziffer durchgegangen wird.

Dein Programm funktioniert nur von 0 bis 9.

Und ein switch mit 10 cases? Naja...

Ich verwende hier zwar kein cout/cin; solltest du aber bei Bedarf leicht umändern können:


```
char ziffern[][10]={"null","eins","zwei","drei","vier","fuenf","sechs","sieben","acht","neun","minus"};
//...
void ausgabe(int zahl)
{
    int i,j;char c[16];
    sprintf(c,"%d",zahl);
    j=strlen(c);
    if(j<0)return;
    for(i=0;i<j;i++)
    {
        if(c[i]=='-')c[i]=10;
        else c[i]-='0';
    }
    printf("%c",ziffern[c[0]][0]-'a'+'A');
    printf("%s ",&(ziffern[c[0]][1]));
    for(i=1;i<j;i++)
    {
         printf("%s ",ziffern[c[i]]);
    }
}
```
Ist getestet

Gruß


----------



## Marimi (29. Oktober 2010)

oh naja also es geht ja darum ne vierstellige Zahl einzulesen und die sprachlich wieder zu geben. Das Problem ist, mit dem printf haben wir no ned gearbeitet im Praktikum. Ich hab switch genommen weils am ehersten das macht was ich ja brauche nur funktioniert das ganze ned ^^.

Für was steht denn zb das %d, %c, %s (das %modulo ist weiß ich sogar XD)

Lg Marimi


----------



## deepthroat (29. Oktober 2010)

Hi.





Marimi hat gesagt.:


> oh naja also es geht ja darum ne vierstellige Zahl einzulesen und die sprachlich wieder zu geben. Das Problem ist, mit dem printf haben wir no ned gearbeitet im Praktikum. Ich hab switch genommen weils am ehersten das macht was ich ja brauche nur funktioniert das ganze ned ^^.


Für eine einzelne Ziffer funktioniert dein Programm ja schon. Du müßtest nur noch eine Schleife erstellen, die eine ganze Zahl in ihre Ziffern zerlegt und diese Ziffern dann ausgeben auf diese Weise ausgeben.

Einen Integer kannst du mit Hilfe des Modulo-Operators in Ziffern zerlegen.





Marimi hat gesagt.:


> Für was steht denn zb das %d, %c, %s (das %modulo ist weiß ich sogar XD)


Nimm lieber einfach cout. Wenn du wissen willst was es mit dem printf auf sich hat, schau einfach in eine Referenz (z.B. http://www.cplusplus.com/reference/clibrary/cstdio/printf/). Das % in dem Formatstring hat übrigens nichts mit dem Modulo Operator zu tun.

Gruß


----------



## Marimi (29. Oktober 2010)

Danke dir für deine antwort deepthroat. Heißt das dann praktisch, dass ich vor dem switch die Variable die für vierstellige Zahl steht in die Bestandteile via modulo zerlege dann diesen bestandteil mit dem switch zu bearbeiten, dann die nächste ziffer der zahl mit switch bearbeiten usw.? Die Schleife würd ich am ende drüber legen.

Das Problem am aktuellen Code ist dass mir der Compiler das zwar compiliert aber im ausgabefenster rein garnichts steht, warum, hab ich ne Klammer falsch gesetzt?


----------



## sheel (29. Oktober 2010)

Nocheinmal: Dein Programm aus dem ersten Beitrag gibt nur dann was aus, wenn die eingegebene Zahl zwischen 0 und 9 ist.
Ab 10 geht nichts mehr


----------



## deepthroat (29. Oktober 2010)

Marimi hat gesagt.:


> Danke dir für deine antwort deepthroat. Heißt das dann praktisch, dass ich vor dem switch die Variable die für vierstellige Zahl steht in die Bestandteile via modulo zerlege dann diesen bestandteil mit dem switch zu bearbeiten, dann die nächste ziffer der zahl mit switch bearbeiten usw.? Die Schleife würd ich am ende drüber legen.


Ja, du mußt eine Schleife um die switch-Anweisung bauen.


Marimi hat gesagt.:


> Das Problem am aktuellen Code ist dass mir der Compiler das zwar compiliert aber im ausgabefenster rein garnichts steht, warum, hab ich ne Klammer falsch gesetzt?


Du hast die break Anweisungen bei jedem Fall vom switch vergessen. Ansonsten erhalte ich folgende Ausgabe wenn ich "2" eingebe:

```
2
Bitte geben Sie eine Zahl ein: zwei
```
(du müßtest die "cin >>" bzw. "cout <<" vertauschen)

Gruß


----------



## Marimi (2. November 2010)

Hallöchen,

also das mit dem tausch von cin und cout hat funktioniert. Ich sehe nun die aufforderung eine zahl einzugeben. Das Problem ist jetzt wenn ich eine eingebe und enter drücke schleißt sich das ausführfenster sofort. 

Ah und ich hab jetzt aus dem switch ein if else gemacht:

```
#include <iostream>
using namespace std;

int main () {
    /*Diese Programm gibt die sprachliche Repräsentation von Zahlen wieder. */
    /* Zuerst wird für unsere Zahl eine Variable eingelesen. */
    
    int z;
     cout << "Bitte geben Sie eine Zahl ein: ";
     cin >> z;
    int a= z%10;
        /* Mit Hilfe der switch-Anweisung werden für jede Ziffer die dazugehörigen Namen zu geordnet. */
     if (a==1)
      cout << "eins" << endl;
     else
     if (a==2) 
      cout << "zwei" << endl;
     else 
     if (a==3)
      cout << "drei" << endl;
     else 
     if(a==4)
      cout << "vier" << endl;
     else 
     if (a==5)
      cout << "fuenf" << endl;
     else 
     if(a==6)
      cout << "sechs" << endl;
     else 
     if (a==7)
      cout << "sieben" << endl;
     else 
     if (a==8)
      cout << "acht" << endl;
     else
     if (a==9)
      cout << "neun" << endl;
     else
     if (a==0)
      cout << "null" << endl; 
      
     return 0;
     }
```
Das Programm ist noch lang nicht vollständig das würd ja jetzt nur die letzte stelle ausspucken. ich schreib den rest erst dann wenn das mit der einer ziffer funktioniert, sonst schreib ich am ende alles um sonst . ;-)


----------



## ComFreek (2. November 2010)

Hast du nicht die Schleife vergessen?
Habe deinen letzten Satz überlesen.



> Das Problem ist jetzt wenn ich eine eingebe und enter drücke schleißt sich das ausführfenster sofort.


Das ist kein Problem. Es wird ja auch nicht am Ende auf weitere Dinge gewartet, sondern direkt mit return 0; die Funktion main() beendet.
Du kannst ein cin.get(); vor dem return einfügen.

Wäre es nicht eleganter ein Array mit den Wörtern der Zahlen zu machen?:

```
char *Numbers[] = {'null', 'eins', 'zwei',...};

cout << Numbers[a];
```


----------



## Marimi (2. November 2010)

Möchte allen Danke sagen für ihre Hilfe mein Programm steht und funktioniert .

Lieben Gruß
Marimi


----------

