Übung zu Zählschleifen: For-Schleife



  • hmmm... an den hab ich ja gar nich gedacht xD
    müsste auch gehen, aber das kann er sich jetzt selber berechnen lassen xD



  • Vielen Dank, dass du dir so viel Mühe gegeben hast itedvo.

    Leider ist das viel zu kompliziert und ich verstehe bis auf die Präprozessorbefehle, den Variablen, der if-Anweisung und der for-Schleife garnichts.

    Ich kann ausschließlich mit folgendem Grundgerüst arbeiten:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main() 
    {
        //Variablen
        //for-Schleife
        //if-Anweisung
        system("pause");   
        return 0;
    }
    

    Unsere Lehrerin hat leider Mathe und Physik studiert und daher immer solche, ihrer Ansicht nach, witzigen Aufgaben, die sie uns stellt.

    PS: Modulo kenne ich bereits, aber hätte keinen blassen Schimmer, wie ich den hier einsetzten sollte.



  • sag doch gleich das deine professorin hauptsächlich mathe und physik unterrichtet xD

    naja, die zahlenreihe 12345678910987654321 ist also etwas mathematisches...
    von der physik her sagt mir diese reihe gar nichts... was mathe betrifft, da
    hab ich erst vor einem jahr mal was in der richtung gehört.

    es hat irgendwas damit zu tun, dass man aus der hälfte der dritten geraden zahl
    + 1 die zahl danach finden kann...

    hmmm, das wär dann 6, die hälfte 3... 3 + 1 = 4, davon die hälfte + 3 + 1 = 6

    falsch, endlosschleife... ich such mal in google =b

    [edit]: google spuckt wie immer einen haufen quatsch aus, nur ein beitrag aus
    einem englischen mathematik pdf dokument hat mich auf was gebracht: frequencen

    aber noch was:

    000010000
    000212000
    003212300
    043212340

    usw.

    auf was kommste wennst das siehst?



  • Dann schreib doch erstmal hin, was ich dir vorhin gesagt hab. edit: Vielleicht besser eine Schleife, die von 0 bis 36 zählt.

    Dann überleg Dir folgendes. Du hast 4 Bereiche. Hochzählen, Runterzählen, wieder hochzählen, wieder runterzählen. Wie prüfst Du, in welchem Bereich Du bist?



  • @itedvo: viel zu kompliziert.



  • @SG1: ich würds ja gerne anders machen, mit ner verschachtelten schleife wärs
    einfach =b



  • Ihr seid echt großartig, danke eurer hilfe habe ich es _fast_ geschafft:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main() 
    {
        int x = 1, y;
        for(y=1;y<=37;y++)
        {
            if(y<=10 || y>=19 && y<=28)
            {
                printf("%d",x);
                x++;
            }
            else
            {
                printf("%d",x);    
                x--;
            }
        }
        system("pause");   
        return 0;
    }
    

    Jetzt muss ich nur noch einen kleinen Fehler ausmerzen, von dem ich leider noch nicht die leisteste Ahnung habe, woher er kommt.

    Aber trotzdem schonmal vielen herzlichen Dank. 😉



  • hmm, auch ne nice idee =b



  • Das sieht doch schonmal gut aus. Was ist denn der kleine Fehler?


  • Mod

    Anstatt einer komplizierten Funktion schlage ich ein paar gut gewählte if s vor:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main()
    {
      int i;
      for(i=1; i<=37; ++i)
        {
          int zahl;
          if(i<10) zahl=i;
          else if(i<20) zahl = 20-i;
          else if(i<29) zahl = i - 18;
          else zahl=38-i;
          printf("%d",zahl);
        }
      putchar('\n');
      return 0;
    }
    

    Manchmal geht Entwicklungszeit eben vor Eleganz. Wobei eine geschlossene Funktion vermutlich auch nicht mehr elegant aussehen würde.

    edit: Da war meine Entwicklungszeit wohl höher als die des Threaderstellers 😃



  • SeppJ schrieb:

    Anstatt einer komplizierten Funktion schlage ich ein paar gut gewählte if s vor:

    Erfüllt aber nicht die Aufgabenstellung. Ist idiotisch... aber Schule.



  • @SeppJ: Leider darf ich nur eine if-Anweisung verwenden.

    @SG1: Der kleine Fehler liegt darin, dass x am Ende des Schleifendurchlaufs auf eins mehr gesetzt wird (x++), dadurch verschiebt sich der komplette Bereich, den ich bei der if-Anweisung vordefinieren muss, da bei 10 das x nochmal erhöht wird.



  • Dann schreib halt y < 10 statt y <= 10. Bei 10 willst Du ja nichtmehr erhöhen. (Analog vermutlich bei den anderen beiden Grenzen.)



  • Danke, das war hilfreich. Jetzt stimmt auf jeden Fall schonmal:

    12345678910987654321
    

    Geht dann jedoch leider weiter mit:

    0123456787654321-1
    


  • Schlag mich einer Tod, ich habs:

    #include <stdlib.h>
    #include <stdio.h>
    
    int main() 
    {
        int x = 1, y;
        for(y=1;y<=37;y++)
        {
            if(y<10 || y>18 && y<28)
            {
                printf("%d",x);
                x++;
            }
            else
            {
                printf("%d",x);    
                x--;
            }
        }
        printf("\n");
        system("pause");   
        return 0;
    }
    

    Nochmals vielen Dank an euch alle. 🙂



  • Woran ich übrigens dachte war:

    for(int i = 0; i <= 36; i++) {
      if(i % 18 < 9) {
        printf("%d ", 1 + i%9);
      } else {
        printf("%d ", 10 - i%9);
      }
    }
    


  • Das werde ich mir mal rauskopieren und morgen meine 9 Stunden Berufsschule dazu aufwenden, es zu verstehen. Leider habe ich es nicht so mit Mathe. 😃

    Aber ich werde mein bestes geben es zu verstehen!



  • #include <conio.h>
    #include <stdio.h>
    #include <math.h>
    #include <time.h>

    int main()

    {
    printf("Zaehlen von 1 bis 10\n");
    int a;
    for(a=1;a<=10;a++){
    printf("%d\n",a); }
    printf("\n");
    for(a=10;a>=1;a--){
    printf("%d\n",a);}
    printf("\n");
    for(a=1;a<=10;a++){
    printf("%d\n",a); }
    printf("\n");
    for(a=10;a>=1;a--){
    printf("%d\n",a);}

    getche();
    return 0;
    }



  • Sowas von daneben. Das hat mit der Ursprungsaufgabe nichts zu tun.



  • fright schrieb:

    Das werde ich mir mal rauskopieren und morgen meine 9 Stunden Berufsschule dazu aufwenden, es zu verstehen. Leider habe ich es nicht so mit Mathe. 😃

    Aber ich werde mein bestes geben es zu verstehen!

    Dann hast du den falschen Beruf gewählt!


Anmelden zum Antworten