1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Kurze Programmierhilfe in c++...

  • tobi1986
  • 19. Januar 2009 um 18:35
  • Unerledigt
  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 19. Januar 2009 um 18:35
    • #1

    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.

  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    Punkte
    1.010
    Beiträge
    199
    • 19. Januar 2009 um 18:49
    • #2

    http://www.informatik-forum.at/showpost.php?p=167379&postcount=4

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 19. Januar 2009 um 20:31
    • #3

    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!

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 19. Januar 2009 um 20:34
    • #4
    Zitat von Adok

    In C ist die for-Schleife nur "syntactic sugar" für eine while-Schleife plus Initialisierung.


    Ja, abgesehen vom Zusammenspiel von continue und dem dritten Ausdruck im Kopf der for-Schleife. Aber das nur am Rande :)

    *plantsch*

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 12:51
    • #5

    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

  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    Punkte
    1.010
    Beiträge
    199
    • 20. Januar 2009 um 12:56
    • #6
    Zitat von tobi1986

    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.

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 13:33
    • #7

    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...

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 16:20
    • #8

    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)

  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    Punkte
    1.010
    Beiträge
    199
    • 20. Januar 2009 um 17:21
    • #9
    Zitat von tobi1986

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

    So weit, so gut.

    Zitat von tobi1986

    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.

    Zitat von tobi1986


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


    Hab' ich nicht kapiert....

    Zitat von tobi1986


    #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;

    Alles anzeigen


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

    BTW: Bitte Code-Tags verwenden

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 20. Januar 2009 um 17:37
    • #10
    Zitat von tobi1986

    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.

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 17:37
    • #11

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

    C
    #include <stdio.h>
    #include <conio.h>
    #include <math.h>
    int main ()
    {
    int n=0;
    do
    {
    scanf("%d \ n", n);
    } 
    while (n>0);
    system("pause");
    return 0;
    }
    Alles anzeigen
  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 20. Januar 2009 um 17:41
    • #12

    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.

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 17:51
    • #13

    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???


    Code
    int main()
    {
    
    
    int n=0;
    do
    {
    scanf("%d", &n);
    } 
    while (n>0);
    
    
    system("pause");
    return 0;
    }
    Alles anzeigen
  • Stefan Kögl
    10
    Stefan Kögl
    Mitglied
    Reaktionen
    10
    Punkte
    1.010
    Beiträge
    199
    • 20. Januar 2009 um 17:57
    • #14
    Zitat von tobi1986

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

    Das ganze ist zwar weder portabel noch sonst was, aber wenn du es trotzdem verwenden willst:

    Code
    #include <stdlib.h>
  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 20. Januar 2009 um 18:01
    • #15
    Zitat von tobi1986

    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.

    Code
    char eingabe [1000], konvert [1000];
    int n;
    
    
    gets (eingabe);
    n = atoi (eingabe);
    konvert = itoa (n, konvert, 10);
    if (strcmp (eingabe, konvert))
    {
      printf ("Fehler: Keine Zahl eingegeben!");
      return;
    }
    Alles anzeigen
    Zitat von tobi1986

    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.

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 18:37
    • #16

    bin jetzt soweit:

    C
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
    
    
    int n=0;
    do
    {
    printf("bitte geben sie einen Wert fuer n an:");
    scanf("%d", &n);
    } 
    while (n>0);
    
    
    system("pause");
    return 0;
    }
    Alles anzeigen

    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?

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 20. Januar 2009 um 18:55
    • #17
    Zitat von Adok

    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*

  • tobi1986
    3
    tobi1986
    Mitglied
    Punkte
    60
    Beiträge
    10
    • 20. Januar 2009 um 18:56
    • #18

    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...

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 20. Januar 2009 um 18:57
    • #19
    Zitat von tobi1986

    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*

  • Adok
    20
    Adok
    Mitglied
    Reaktionen
    49
    Punkte
    4.199
    Beiträge
    714
    • 20. Januar 2009 um 19:00
    • #20
    Zitat von Plantschkuh!

    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.

    Zitat von Plantschkuh!

    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!

Benutzerkonto erstellen Anmelden

Rechtliches

Impressum

Datenschutzerklärung