Kurzer denkanstoß bei einer for schleife



  • Hi

    also ich denke mal das es wieder wie üblich irgend son kleiner fehler sein wird. Aber erstmal den code

    #include <fstream>
    #include <iostream> 
    #include <string>
    #include<vector>
    using namespace std;
    
    int main(int nArg, char* pszArgs[])
    {
    
        int x;
        int y;
        int z = 36;
    
      ofstream myFile;
      myFile.open ("c:/verbindugnen.txt"); 
    
         for (x = 1; x <= 18; x ++) 
        {    
    
        for (y = 19; y <= z; y ++) 
        {    
        }
    
       myFile << 3 << " " << x << " " << y << " " << y+1 << "\n" << 3 << " " << x << " " << x+1 << " " << y+1 << "\n\n";
    
        }
    
     myFile.close();
    
      system("pause");
    }
    

    Und raus kommt dann

    3 1 37 38
    3 1 2 38
    3 2 37 38
    3 2 3 38
    3 3 37 38
    3 3 4 38
    3 4 37 38
    3 4 5 38

    usw

    rauskommen soll aber

    3 1 19 20
    3 1 2 20
    3 2 20 21
    3 2 3 21
    3 3 21 22
    3 3 4 22

    usw

    das problem ist das er y nicht hochzählt oder es so tut und y dann nicht mit dem erhöten wert reinschreibt sonder gleich mit 37 38 und sich nicht wie x verändert

    also das wärs problem ist sicher voll sympel aber hoffe mir kanns trotzdem jemand schnell erklären was falsch ist

    Danke



  • Verschiebe mal die Klammer } von Zeile 28 in zeile 32. 😃



  • ja danke hat geholfen wie gesagt sind immer nur kleinigkeiten lieder aber daran merk ich wenigstens das ich noch viel machen muss

    Nochmal danke



  • GT schrieb:

    ja danke hat geholfen

    Wenn du deinen Code ordentlich eingerückt hättest, hättest du wahrscheinlich selbst gesehen, wo das Problem ist.



  • ja das wieder so ne sache ich schreib halt einfach
    gibts beim einrücken eigentlich so ne art muster? dann würd ich mich versuchen mal dran zu halten. Vieleicht wirds dann auch besser.

    Aber sicherlich hast du recht.



  • ein guter Editor hat automatische Einrueckung. Normalerweise wird jeder tieferliegende codeblock ein paar Leerzeichen bzw. einen Tabstop weit eingerueckt.

    int main(int nArg, char* pszArgs[])
    {
      int x;
      int y;
      int z = 36;
    
      ofstream myFile;
      myFile.open ("c:/verbindugnen.txt");
    
      for (x = 1; x <= 18; x ++)
      {    
        for (y = 19; y <= z; y ++)
        {    
        }
        myFile << 3 << " " << x << " " << y << " " << y+1 << "\n" << 3 << " " << x << " " << x+1 << " " << y+1 << "\n\n";
    
      }
      myFile.close();
      system("pause");
    }
    


  • Ja, so bitte:

    #include <fstream>
    
    int main()
    {
    	int z = 36;
    
    	std::ofstream myFile;
    	myFile.open ("c:/verbindugnen.txt");
    
    	for(x = 1; x <= 18; x++)
    	{
    		for(y = 19; y <= z; y++)
    		{
    			myFile << 3 << " " << x << " " << y << " " << y + 1 << std::endl << 3 << " " << x << " " << x + 1 << " " << y + 1 << std::endl << std::endl;
    		}
        }
    
    	myFile.close();
    	system("pause");
    }
    


  • jetzt ist doch noch falsch

    3 19 36 37
    3 19 20 37
    3 19 37 38
    3 19 20 38
    3 19 38 39
    3 19 20 39

    des x wiederholt sich immer wieder anstatt sich zu verändern

    3 19 36 37
    3 19 20 37
    3 20 37 38
    3 20 21 38
    3 21 38 39
    3 21 22 39

    ......

    der code

    #include <fstream>
    #include <iostream> 
    #include <string>
    #include<vector>
    using namespace std;
    
    int main(int nArg, char* pszArgs[])
    {
    
        int x;
        int y;
    
      ofstream myFile;
      myFile.open ("c:/verbindugnen.txt"); 
    
      for (x = 19; x <= 36; x ++) 
      {    
    
         for (y = 36; y <= 54 ; y ++) 
         {      
             myFile << 3 << " " << x << " " << y << " " << y+1 << "\n" << 3 << " " << x << " " << x+1 << " " << y+1 << "\n";
         }
      }
    
     myFile.close();
    
      system("pause");
    }
    


  • Das sagst du ihm ja auch so. das x bleibt erstmal so lange gleich, bis y einmal von 36 bis 54 durchgelaufen ist. danach wird x um eins erhoeht und y laeuft wieder von 36 bis 54 durch usw.

    Was du gepostet hast sieht so aus, als sollten x und y gleichzeitig laufen. da gibts mehrere moeglichkeiten:

    for(x=19, y=36; x<=36&&y<=54; x++, y++){ cout...}
    

    Hier laufen x und y parallel, allerdings wird die schleife abgebrochen sobald entweder x die 36 erreicht hat oder y die 54 (ersteres wird eher geschehen, da 36-19=17 und 54-36=18 - nach 17 iterationen ist die abbruchbedingung erreicht.
    Da aber x und y dann eh immer um 17 auseinanderliegen, waere folgendes sinnvoller udn uebersichtlicher:

    for(x = 19; x <=36; x++){
    y = x+17;
    cout << ...
    }
    


  • danke so gehts


Anmelden zum Antworten