Kurze Programmierhilfe in c++...

  • Hi, ich rätsel an der folgenden Aufgabe.
    Mein Problem ist, dass ich die Do-While schleife nicht richtig anwenden kann, weil ich die Praktikumsstunde verpasst habe. Normale +-*/ formeln kann ich normalerweise aber nicht die folge....
    Kann mir da einer helfen? Danke im Vorraus.

  • Willst du wissen, wie eine do-while-Schleife funktioniert?

    Code
    do
    {
      [I]Anweisungen[/I]
    } while ([I]Bedingung[/I])

    Z.B.:

    Code
    int i = 1;
    do
    {
      printf ("%d. Ich bin cool!\n", i);
      i++;
    } while (i <= 1000);

    Dasselbe könntest du auch mit einer while-Schleife erreichen:

    Code
    int i = 1;
    while (i <= 1000)
    {
      printf ("%d. Ich bin cool!\n", i);
      i++;
    }

    Oder mit einer for-Schleife:

    Code
    for (i = 1; i <= 1000; i++)
     {
       printf ("%d. Ich bin cool!\n", i);
     }

    Jede do-while-Schleife lässt sich in ein Konstrukt mit einer while-Schleife umwandeln. In manchen Fällen ist aber eine do-while-Schleife eleganter, z.B.:

    Code
    int i = 1;
    do
    {
      printf ("%d. Ich bin cool!\n", i);
      i++;
    } while (i < 1);

    In diesem Fall würdest du unter Verwendung einer while-Schleife schreiben:

    Code
    int i = 1;
    printf ("%d. Ich bin cool!\n", i);
    while (i < 1)
     {
       printf ("%d. Ich bin cool!\n", i);
       i++;
     };

    Du müsstest also die printf-Anweisung zweimal in deinen Programmcode einbauen.

    Jede while-Schleife lässt sich auch durch eine for-Schleife emulieren und umgekehrt. In C ist die for-Schleife nur "syntactic sugar" für eine while-Schleife plus Initialisierung.

    Du könntest auch auf alle Schleifen pfeifen und nur goto verwenden. Davon wird aber im Allgemeinen abgeraten, weil der Programmcode unübersichtlich wird ("Spaghetti-Code").

    Noch viel Spaß beim Programmieren!

  • Hi, danke erstmal. versuchs mal mit der while-schleife. welche bibliotheks muss ich denn einbinden?
    <stdio.h> und noch andere?

    @ stefan Kögl: ich will auchnicht meine Hausaufgeben von euch gemacht bekommen, aber ohne erklärung tu ich mir schwer mit z.b einer While-schleife weil ich noch nicht lange mit Informatik zutun habe!
    Die erklärung und nen bisschen hilfe bzw kontrolle wollt ich hier finden...
    danke

  • ich will auchnicht meine Hausaufgeben von euch gemacht bekommen, aber ohne erklärung tu ich mir schwer mit z.b einer While-schleife weil ich noch nicht lange mit Informatik zutun habe!
    Die erklärung und nen bisschen hilfe bzw kontrolle wollt ich hier finden...
    danke

    Eine Erklärung hast du wahrscheinlich dort bekommen, wo du auch die Aufgabenstellung her hast. Ansonsten hilft immer noch Google. Konkrete Fragen werden hier übrigens immer gern beantwortet.

  • ja klar, normalerweise hilft einem unser prof immer, aber ich bin zum lernen nach hause gefahren und erreiche den daher nicht.

    ich bin gerad dabei zu schreiben...kommt bestimmt bald ne konkrete frage...

  • ok, bin gerade am tüfteln....versuch gerade zu schreiben, dass die eingabe überprüft wird!
    Mein prbolem is, dass ich nicht genau weiß was anweisung und bedingung ist, wenn ich das in 2 schritte unterteile (also in überprüfen der eingabe und ausrechnen der gleichung)!
    beim überprüfen ist doch:
    anweisung: überprüfen
    bedingung: n>=0


    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    int main ()
    {
    int n,i;
    n=getchar();
    do
    {
    scanf("%d \ n");
    }
    while
    n=getchar();
    n>=0;

    2 Mal editiert, zuletzt von tobi1986 (20. Januar 2009 um 16:31)

  • ok, bin gerade am tüfteln....versuch gerade zu schreiben, dass die eingabe überprüft wird!

    So weit, so gut.

    Mein prbolem is, dass ich nicht genau weiß was anweisung und bedingung ist


    Die Schleife wird wiederholt, wenn die Bedingung erfüllt ist. Die Bedingung könnte zB "0 < n" sein.


    anweisung: überprüfen
    bedingung: n>=0


    Hab' ich nicht kapiert....


    Was willst du überhaupt machen? Du liest hier an drei verschiedenen Stellen/Zahlen zeichen ein...

    BTW: Bitte Code-Tags verwenden

  • Hi, danke erstmal. versuchs mal mit der while-schleife. welche bibliotheks muss ich denn einbinden?
    <stdio.h> und noch andere?

    Für while, do, for brauchst du keine Bibliotheken, weil es sich um Elemente der Sprache C und nicht um Funktionen handelt. Du brauchst stdio.h aber für printf.

  • passt das vom prinzip her? im moment wird bei system ("pause") ein fehler angezeigt (undeclared)...

  • Dieser Code wird aus einigen Gründen nicht funktionieren.

    1. Die Zeile

    Code
    scanf("%d \ n", n);


    ist fehlerhaft. Richtig wäre:

    Code
    scanf("%d", &n);

    2. Was macht der Code? Er liest ganze Zahlen ein, solange sie größer als 0 sind, und speichert sie in der Variablen n ab. Dadurch wird die Variable n immer wieder überschrieben. Somit wird am Ende nur die letzte Zahl gespeichert. Wenn du aber alle Zahlen haben willst, musst du einen Array verwenden. Z.B.:

    Code
    int n [10];
    int c = 0;
    do
    {
      scanf ("%d", &n [c]);
      c++;
    } while (n > 0 && c < 10);

    Damit werden zehn Zahlen eingelesen und gespeichert.

  • ok, aber das brauche ich doch nicht, wenn ich nur kontrollieren will ob die eingabe korrekt ist oder? Das soll ich ja mit der ersten schleife erreichen, dass kontrolliert wird ob die eingabe eine zahl ist...

    wieso wird denn im moment immer bei system ("pause") ein fehler angezeigt???


  • ok, aber das brauche ich doch nicht, wenn ich nur kontrollieren will ob die eingabe korrekt ist oder? Das soll ich ja mit der ersten schleife erreichen, dass kontrolliert wird ob die eingabe eine zahl ist...

    Dafür verwendet man nicht while, sondern if. Aber streng genommen kannst du auf diese Weise gar nicht kontrollieren, ob die Eingabe eine Zahl ist. Wenn der Benutzer "Hallo" eingibt, ergibt scanf ("%d", &n), dass n der Wert 0 zugewiesen wird. Um wirklich zu checken, ob der Benutzer eine Zahl eingegeben hat, musst du die Eingabe als String einlesen und dann überprüfen, ob sich der String verlustfrei in eine Zahl und dann zurück in einen String konvertieren lässt.

    wieso wird denn im moment immer bei system ("pause") ein fehler angezeigt???


    Das weiß ich nicht, aber ich würde dir empfehlen, statt dessen getch () zu verwenden. Das ist eleganter.

  • bin jetzt soweit:

    es wird nach einer eingabe für n gefragt und n wird kontrolliert.
    wie kann ich denn jetzt anzeigen lassen ob n "richtig"(zahl) oder "falsch"(buchstabe) ist?

  • gets (eingabe);


    Das war eine recht misslungene Demonstration dessen, wie man Benutzereingaben richtig verarbeitet. (Nein, ich bin kein Sysprog-Tutor; gets ist von sich aus böse.)

    Zitat

    Das weiß ich nicht, aber ich würde dir empfehlen, statt dessen getch () zu verwenden. Das ist eleganter.


    Die Implementierung unnötiger Features mit unportablen Mitteln ist nicht elegant.

    *plantsch*

  • ach scheisse, das rall ich nichmehr bis morgen....
    Kann das nich biitttee einer für mich schreiben in dev c++? bitte...
    bis zur klausur lern ich das ja eh, aber so schnell nichtmehr...

  • wie kann ich denn jetzt anzeigen lassen ob n "richtig"(zahl) oder "falsch"(buchstabe) ist?


    scanf gibt einen Wert zurück, der die Anzahl der erfolgreich eingelesenen Elemente angibt. D.h. du kannst das ungefähr so abprüfen:

    Code
    int rc;
    rc = scanf("%d", &n);
    if (rc == 1)
    {
        /* ein Element gelesen, d.h. n ist eine gültige Zahl */
    }
    else
    {
        /* kein Element gelesen, d.h. die Eingabe war keine Zahl */
    }

    *plantsch*

  • Das war eine recht misslungene Demonstration dessen, wie man Benutzereingaben richtig verarbeitet. (Nein, ich bin kein Sysprog-Tutor; gets ist von sich aus böse.)

    Solange er - in diesem Fall - nicht mehr als 1000 Zeichen eingibt, passiert nichts Böses.

    Die Implementierung unnötiger Features mit unportablen Mitteln ist nicht elegant.

    getch ist unportabel?

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!