Array2



  • crazybaby schrieb:

    Ich verstehe nicht was genau falsch daran ist?

    Würdest du deinen Code ordentlich einrücken, würdest du es selbst sehen:

    Du hast 6 {, aber nur 4 }.



  • crazybaby schrieb:

    Ich verstehe nicht was genau falsch daran ist?

    1. verwende bitte Code-Tags
    2. "ein Fehler" ist keine gute Fehlerbeschreibung
    3. Bitte rücke deinen Code ordentlich ein, dann siehst du fehlende Klammern recht schnell

    Wenn ich das jetzt richtig überblicke, fehlen schließende "}" zu zwei for-Schleifen im unteren Teil.



  • #include <cstdlib> 
      #include <iostream> 
    
     using namespace std; 
    
     int main(int argc, char *argv[]) 
      { 
          int n; 
      int zahl[20]; 
      cout<<" Anzahl der einzulesenden Elemente maximal 20 "; 
      cin>>n; 
      cout<<" Elemente eingeben "; 
    
     for (int i=0;i<n;i++) 
    {
      cin>> zahl[i]; 
    
    }
    
     for (int i=0;i<n;i++){ 
     cout<<zahl[i]<<" "; 
     } 
     cout << endl; 
    
     int tausch=0; // gibt die Anzahl der Tausche an. 
    
     for (int j=0; j < n-1; j++) 
     { 
     if (zahl[j] > zahl[j+1]) 
     { 
     int hilf=zahl[j]; 
    
     zahl[j]=zahl[j+1]; 
     zahl[j+1]=hilf; 
     tausch++; 
    
     cout << tausch << ". Tausch:  "; 
    
     for (int i=0;i<n;i++){ 
     cout<<zahl[i]<<" "; 
     } 
     cout << endl;    
    } 
     }
      }
    

    Jetzt funktioniert das programm leute danke, aber es zeigt immer noch nicht die höhere Zahl vertauscht an.

    Ist mein programm inhaltlich falsch oder wie?



  • crazybaby schrieb:

    Jetzt funktioniert das programm

    Wenn ein Programm nicht tut, was es soll, spricht man in der Regel nicht von "funktionieren".

    crazybaby schrieb:

    Ist mein programm inhaltlich falsch oder wie?

    Ja.

    Du machst nur einen "Bubble"-Durchgang. Du musst das solange wiederholen, bis du nichts mehr zum Vertauschen findest.

    Und die Einrückung ist immer noch wie Kraut und Rüben.



  • Könnt ihr mir nicht sagen wie das Programm richtig aussehen soll?

    Ich habe meine Ansätze ja gepostet .



  • crazybaby schrieb:

    Könnt ihr mir nicht sagen wie das Programm richtig aussehen soll?

    Ich habe meine Ansätze ja gepostet .

    MFK schrieb:

    ...

    Du machst nur einen "Bubble"-Durchgang. Du musst das solange wiederholen, bis du nichts mehr zum Vertauschen findest.

    ...



  • Hey leute danke das programm funktioniert jetzt.

    Könnt ihr mir nicht sagen was ich in dem programm einbauen könnte , damit das programm überpruft ob der nutzer maximal
    20 Werte eingibt.

    Ich habs mal so gemacht:

    for( int i = 0; i<20; i++;) {

    return zahl[i];

    }

    Kann ich das so machen?



  • Nein.

    Kauf dir ein Buch, oder google wenigstens nach irgendeinem E-Book. Hier im Forum gibt es irgendwo einen C++-Bücher Thread -> SuFu benutzen.
    Was du da machst hat nichts mit Programmieren zu tun oder damit, es zu lernen. Das ist eher trial & error, mal sehen was bei raus kommt und dann im Forum posten falls es zufällig auch noch kompiliert.



  • Ich hab es ja geggogelt aber nichts gefunden .

    Kann mir nicht mal jemand einen tipp geben?



  • Wäre es so in ordnung?

    #include <cstdlib>
    #include <iostream>

    using namespace std;

    int main(int argc, char *argv[])
    {
    int n;
    int zahl[20];

    do
    {
    cout<< "Eingabe maximal 20 Zahlen"<<endl;
    ...
    } while ( n < 1 || n > 20);
    for (int i=0;i<n;i++)
    {
    cin>> zahl[i];

    }

    for (int i=0;i<n;i++){
    cout<<zahl[i]<<" ";
    }
    cout << endl;

    int tausch=0; // gibt die Anzahl der Tausche an.

    for (int j=0; j < n-1; j++)
    {
    if (zahl[j] > zahl[j+1])
    {
    int hilf=zahl[j];

    zahl[j]=zahl[j+1];
    zahl[j+1]=hilf;
    tausch++;

    cout << tausch << ". Tausch: ";

    for (int i=0;i<n;i++){
    cout<<zahl[i]<<" ";
    }
    cout << endl;
    }
    }
    }



  • Ja das wäre es - vorausgesetzt du willst undefiniertes Verhalten und zu 99% eine Endlosschleife die dir immer wieder "Eingabe maximal 20 Zahlen" ausgibt 🤡



  • Ihr werdet's mir sowieso nicht sagen aber ich Versuchs wie soll ich das denn dann genau machen?



  • crazybaby schrieb:

    Ihr werdet's mir sowieso nicht sagen aber ich Versuchs wie soll ich das denn dann genau machen?

    dir ein Buch kaufen und C++ lernen



  • Kann mir nicht jemand wenigstens sagen wo ich die Schleife dann genau einbauen kann damit ich endlich fertig werde?


  • Mod

    crazybaby schrieb:

    Kann mir nicht jemand wenigstens sagen wo ich die Schleife dann genau einbauen kann damit ich endlich fertig werde?

    Ich wüsste zwar wo, aber da du immer noch keine Codetags benutzt, kann ich leider nicht sagen, welche Zeile es ist.

    Nein, im Ernst: Wenn dir nach ein paar Beiträgen nicht mehr geholfen wird, sondern nur noch gesagt wird, du sollst etwas lernen, dann könnte da vielleicht was dran sein. Siehe auch den ersten Link in meiner Signatur und den Thread mit dem schönen Namen:
    RTFM! oder warum dir keiner helfen will...



  • Aber ich meine helfen könnt ihr ja trotzdem öde? Wenn ihr mir nicht sagt was ich falsch mache lerne ich ja auch nichts. War die Schleife falsch oder wie? Könnt ihr das Programm nicht einfach korrigieren?

    Ich wollte ja nur das das Programm ein wenig schöner aussieht.



  • Ich nehme mir mal die Freiheit, dein Programm aus obrigen Post in Code-Tags zu packen und verünftig einzurücken, das macht es auch für Leute, die dir helfen wollen ein wenig einfacher :xmas1:

    #include <cstdlib>
    #include <iostream>
    
    using namespace std;
    
    int main(int argc, char *argv[])
    {
        int n;
        int zahl[20];
    
        do
        {
            cout<< "Eingabe maximal 20 Zahlen"<<endl;
            // ...
        } while ( n < 1 || n > 20);
    
        for (int i=0;i<n;i++)
        {
            cin>> zahl[i];
        }
    
        for (int i=0;i<n;i++)
        {
            cout<<zahl[i]<<" ";
        }
        cout << endl;
    
        int tausch=0; // gibt die Anzahl der Tausche an.
    
        for (int j=0; j < n-1; j++)
        {
            if (zahl[j] > zahl[j+1])
            {
                int hilf=zahl[j];
    
                zahl[j]=zahl[j+1];
                zahl[j+1]=hilf;
                tausch++;
    
                cout << tausch << ". Tausch:  ";
    
                for (int i=0;i<n;i++)
                {
                    cout<<zahl[i]<<" ";
                }
                cout << endl;
            }
        }
    }
    


  • Weiß jemand wo mein Fehler liegt?



  • crazybaby schrieb:

    Wenn ihr mir nicht sagt was ich falsch mache lerne ich ja auch nichts.

    Du bekommst doch ständig gesagt, was du falsch machst. Dein "Lernansatz" ist falsch. Du weißt scheinbar überhaupt nicht, was du tust. Rumprobieren mit Null Ahnung ist extrem uneffektiv, wenn du C++ lernen willst.

    crazybaby schrieb:

    Weiß jemand wo mein Fehler liegt?

    Welcher Fehler denn? Soll ich die letzte Version erst selbst kompilieren und die Ausgabe mit dem vergleichen, was bei Deiner Aufgabenstellung erwartet wird? Warum sollte ich mir die Mühe machen, wenn du dir selbst keine Mühe machst?



  • crazybaby schrieb:

    Könnt ihr mir nicht sagen was ich in dem programm einbauen könnte , damit das programm überpruft ob der nutzer maximal
    20 Werte eingibt.

    Hallo crazybaby,

    Zunächst solltest Du den Benutzter dazu bringen, die Anzahl der Zahlen wie gewünscht einzugeben. Nach Deiner Anforderung soll die Anzahl zwischen 1 und 20 liegen. Das ist gar nicht so trivial. Ich poste Dir jetzt einfach mal meine Lösung.

    Dazu wird zunächst mal das erste druckbare Zeichen gelesen (Variable char c ). Ist es =='q', so kann man das Programm abbrechen - diese Freiheit sollte man seinem User immer geben. Ist es kein 'q', so kommt das Zeichen zurück in den Stream ( cin.putback(c) ) und anschließend wird versucht eine Zahl zu lesen. Gelingt dies und liegt sie im erwarteten Bereich wird die Schleife abgebrochen und alles ist gut. Im anderen Fall wird das evt. gesetzte Fehlerflag im Stream gelöscht ( cin.clear() ) und der Rest der Zeile überlesen ( cin.ignore( numeric_limits< streamsize >::max(),'\n') ). Dann beginnt das ganze von vorn.

    #include <iostream>
    
    int main()
    {
        using namespace std;
        cout << "Bitte Zahl zwischen 1 und 20 eingeben (Abbruch mit 'q')\n";
        int zahl;
        bool ok = true;
        for( char c; ; cin.clear(), cin.ignore( numeric_limits< streamsize >::max(), '\n' ) ) // skipline
        {
            if( !(cin >> c) || c == 'q' )
            {
                ok = false; // Merker für 'Abbruch' setzen
                break;
            }
            if( cin.putback(c) >> zahl && zahl >= 1 && zahl <= 20 )
                break;
            cout << "versuchen Sie es nochmal .." << endl;
        }
    
        // --   Abspann
        if( ok )
        {
            cout << "Die Zahl war " << zahl << endl;
        }
        else
        {
            cout << "Abbruch" << endl;
        }
        return 0;
    }
    

    :xmas2: Werner


Anmelden zum Antworten