Programm



  • HAllo alle zusammen ich habe gerade ein Problem bei einer Aufgabe:

    Es ist ein Programm zu erstellen, in welchem der Anwender aus einer Anzahl möglicher Aufgaben
    mit einem Array eine auswählen kann. Die maximale Anzahl der Elemente des Arrays sei 10.
    Die Aufgaben sollen wiederholt angeboten werden bis zum Abbruch durch den Anwender. Zu
    Beginn ist dabei die Anzahl der tatsächlich zu verwendenden Arrayelemente einzulesen.
    Folgende Aktionen sollen zur Auswahl stehen und mittels switch realisiert werden:
    - Aufgabe 1: Das Array mit der vorgegebenen Zahl der Elemente soll (neu) eingelesen werden.
    - Aufgabe 2: Der Tauschalgorithmus ist durchzuführen.
    - Aufgabe 3: Das Array soll gespiegelt werden (Reihenfolge umkehren).
    - Aufgabe 4: Das Array soll am Bildschirm angezeigt werden.

    - Aufgabe 5: Das Programm beenden.

    Mein Ansatz:

    #include <iostream>
    #include <cstdlib>
    using namespace std;

    int main() {

    int n;
    int zahl[10];
    cout<<" Anzahl der einzulesenden Elemente/maximal 10 ";
    cin>>n;
    cout<<" Elemente eingeben ";
    for (int i=0;i<n;i++)
    cin>>zahl[i];

    cout<< " (1)Das Array mit der vorgegebenen Zahl der Elemente soll (neu) eingelesen werden.";
    cout<< " (2)Der Tauschalgorithmus ist durchzuführen";
    cout<< " (3)Das Array soll gespiegelt werden (Reihenfolge umkehren).";
    cout<< " (4)Das Array soll am Bildschirm angezeigt werden";
    cout<< " (5)Das Programm beenden";

    }

    Ich programmiere mit visual studio und ich wollte euch fragen warum mir nicht mal ein Menü angezeigt wird.

    DAs verstehe ich im Moment nicht ganz.

    Bitte um hilfe.

    Danke


  • Mod

    Das ist gar nichts. Ein bisschen Text ausgeben kann jeder. Nicht einmal das hast du richtig gemacht. Schließlich wird dein "Menü" ausgegeben, nachdem du die Zahlen eingelesen hast. Guck dir noch einmal die Aufgabe an:

    Folgende Aktionen sollen zur Auswahl stehen und mittels switch realisiert werden:

    Das ist doch mal ein Ansatzpunkt. Zu den Aufgabenstellungen musst du doch irgendeine Art von Ansatz haben!? Eine gute Strategie ist, ein großes Problem in Teilprobleme zu zerlegen, die jeweils eine übersichtliche Lösung haben. Hier ist dir die Gliederung schon schön vorgegeben: Schreibe eine Funktion für Aufgabe 1, eine für Aufgabe 2, usw. Mach dir zumindest mal Gedanken über jeweils einen Ansatz dazu.



  • Ok ich versuchs mal selber.

    Aber wäre schön nur wenn ihr sagen könnt was ich falsch gemacht hab , das mir nicht mal der text richtig ausgegeben wird .

    Dann wäre wenigstens ein Problem gelöst.



  • Aber wäre schön nur wenn ihr sagen könnt was ich falsch gemacht hab , das mir nicht mal der text richtig ausgegeben wird .

    Was genau passiert denn?
    Schließt sich das Konsolenfenster, wenn eigentlich die Ausgabe an der Reihe wäre?

    -> dann schau mal in den FAQ's dort gibt es verschiedene Lösungen für dieses Problem (wobei ich glaube, dass Visual Studio das selbst in die Hand nimmt)

    Hast du überhaupt schon die Eingabe (also die Länge des Arrays bzw. dessen Elemente eingegeben)? Wenn du nichts eingibst, wartet er ewig auf eine Eingabe und du siehst das Menü, welches (komischerweise) erst nach der Eingabe angezeigt wird, nicht.



  • #include <iostream>
    #include <cstdlib>
    using namespace std;

    int main() {

    int n;
    int zahl[10];
    cout<<" Anzahl der einzulesenden Elemente/maximal 10 ";
    cin>>n;
    cout<<" Elemente eingeben ";
    for (int i=0;i<n;i++)
    cin>>zahl[i];

    int Zahl[10] ={2, 4, 6, 8 , 10 , 12 , 14, 16 ,18 ,20}

    cout<< " (1)Das Array mit der vorgegebenen Zahl der Elemente soll (neu) eingelesen werden.";
    cout<< " (2)Der Tauschalgorithmus ist durchzuführen";
    cout<< " (3)Das Array soll gespiegelt werden (Reihenfolge umkehren).";
    cout<< " (4)Das Array soll am Bildschirm angezeigt werden";
    cout<< " (5)Das Programm beenden";

    }

    Ich weiss nicht ob ich die array länge richtig erstellt habe , aber ich poste es mal.



  • Wofür genau ist dieses zweite Array? Wenn du ein Array mit einer Initialisierungsliste initialisierst (der {1, 2, 3, ...} Kram), dann brauchst du nicht unbedingt eine Größe angeben, da der Compiler die aus der Länge der Initialisierungsliste von selber herleiten kann.

    Der Grund, wieso dein Menü "nicht angezeigt wird" ist, dass das Programm sich sofort beendet. Das Menü wird schon angezeigt, aber das Programm beendet gleich darauf und so bekommst du nie mit, dass es angezeigt wird. Du wirst nach dem Anzeigen des Menüs wohl auf eine Eingabe warten wollen...



  • bist du der iceman aus dem thread hier?
    C++ Array falls nicht, nimm mir die vermutung nicht übel.

    und falls doch, dann mach doch mal das was wir dir auch schon dort geraten haben.
    selber recherchieren, selber denken und auch ausprobieren.

    SeppJ hat schonmal das prinzip dieser lösung hier gesagt, was erwartest du jetzt von uns?
    den code zu der aufgabe? (ich hoffe in solchen fällen ja immer wieder, dass so Typen wie Sone oder so kommen und die lösung posten - als Template Meta Programm mit gehörigem Nutzen der STL und Boost!)

    aber um dir vllt mal das grundprinzip des programmierens nahe zu legen:
    - man schreibst einzelne anweisungen als quellcode, diese werden nacheinander immer schön der reihe anch sequentiell vom pc agearbeitet
    - in vielen sprachen (wie eben C++) arbeitest du mit variablen, diese haben einen typ. und du musst sowohl den typ als auch den namen (und etwaige erstbelegungen) vor dem nutzen dieser variablen angeben (variablen deklaration nennt man das). es gelten heir so regeln wie eindeutigkeit, dass es in einem block keine 2 variablen mit gleichem namen geben darf

    das ist mal ganz simplifiziert. aber wenn du dies mal beherzigst und in dein programm reinschaust, kann das dann funktionieren?

    beantworte us doch mal folgende fragen:
    1.- wie erzeugst du dir eine variable (variablendeklaration)?
    2.- was macht cout? (und wie nutzt man es)
    3.- was macht cin? (und wie nutzt man es)
    4.- was bedeutet for?
    5.- was bedeutet if? (und wie nutzt man es)
    6.- wie erzeugst du ein array?
    7.- was ist ein array?
    8.- wie greifst du af ein aray zu?



  • Hallo leute mein programm sieht im moment so aus:

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

    }

    for (int i=0;i<n;i++){
    cout<<zahl<<" ";
    }
    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<<" ";
    }
    cout << endl;
    }

    Aber es scheint immer noch nicht die ZAhlen vertauscht bei visual studio darzustellen .

    Kann mir bitte jemand helfen .

    Wäre sehr dankbar dafür.



  • Hallo leute ich hab bisschen weiter probiert und folgendes Programm.

    Leider hat es anscheinend Fehler .

    Wollt euch fragen ob ihr mir helfen könnt.

    #include <iostream> 
    >   
    > using namespace std; 
    >   
    > int main() 
    >  { 
    >      char Auswahl; 
    >   
    > do{ 
    >   
    > cout<< " (A)Das Array mit der vorgegebenen Zahl der 
    > Elemente soll (neu) eingelesen werden."<< endl; 
    >     cout<< " (B)Der Tauschalgorithmus ist durchzuführen"<< 
    > endl; 
    >     cout<< " (C)Das Array soll gespiegelt werden 
    > (Reihenfolge umkehren)."<< endl; 
    >     cout<< " (D)Das Array soll am Bildschirm angezeigt 
    > werden"<< endl; 
    >     cout<< " (E)Das Programm beenden"; 
    >   
    > cin>> Auswahl; 
    >   
    > cout<< "Drücken sie eine Zahl zwischen 1 bis 5 "     
    > <<endl; 
    >      switch(Auswahl) 
    >   
    > { 
    >   
    > case(´A'): 
    >   
    > 
    > cout << " (1)Das Array mit der vorgegebenen Zahl wird 
    > eingelesen"; 
    >          for (int i=0;i<n;i++) 
    >          cin>>zahl; 
    > 
    > int Zahl[10] ={2, 4, 6, 8 , 10 , 12 , 14, 16 ,18 ,20} 
    > 
    > break; 
    > 
    > case('B´): 
    > 
    > cout << " Der Tauschalgorithmus wird durchgeführt"<< 
    > endl; 
    > 
    > int n; 
    >           int zahl[10]; 
    >          cout<<" Anzahl der einzulesenden Elemente/maximal 
    > 10 "; 
    >          cin>>n; 
    > 
    > 
    > 
    > 
    > 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:  "; 
    > 
    > break; 
    > 
    > default: 
    > 
    > 
    > 
    > } 
    > 
    > } 
    > 
    > 
    > case('C´): 
    > 
    > cout << " Das Array wird gespiegelt"<< endl; 
    >                int first=0; 
    >                int last=n-1; 
    >              while (first < last) 
    >              { 
    >                int hilf=zahl[first]; 
    > 
    > zahl[first]=zahl[last]; 
    >                   zahl[last]=hilf; 
    > 
    > first++; 
    >                  last--; 
    >        }
    


  • Der Fehler liegt wahrscheinlich an den ganzen '>'-Zeichen am Anfang der Zeilen. Das sagt dir aber der Compiler. (Liebe mods, macht bitte ein :troll:-Smiley)



  • crazy2 schrieb:

    Leider hat es anscheinend Fehler .

    Wollt euch fragen ob ihr mir helfen könnt.

    Formatiere den Code erstmal so, dass er lesbar ist. Was Du hier postest, ist eine Zumutung für jeden Leser.



  • 'C´
    

    Das finde ich typographisch sehr ansprechend. :troll:



  • crazy2 schrieb:

    Wollt euch fragen ob ihr mir helfen könnt.

    wahrscheinlich schon

    crazy2 schrieb:

    Leider hat es anscheinend Fehler .

    Ja stimmt, und welche Fehler wären das?

    Hier mal eine compilierbare Fassung:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int zahl[] ={ 2, 4, 6, 8 , 10 , 12 , 14, 16 ,18 ,20 }; // <== das muss vorher deklariert werden
        const int N = sizeof(zahl)/sizeof(zahl[0]); // <== Anzahl aus dem Feld übernehmen
        int n = N; // <== initiale Belegung der Anzahl
        char Auswahl;
        do
        {
            cout<< " (A)Das Array mit der vorgegebenen Zahl der Elemente soll (neu) eingelesen werden."<< endl;
            cout<< " (B)Der Tauschalgorithmus ist durchzuführen"<< endl;
            cout<< " (C)Das Array soll gespiegelt werden (Reihenfolge umkehren)."<< endl;
            cout<< " (D)Das Array soll am Bildschirm angezeigt werden"<< endl;
            cout<< " (E)Das Programm beenden";
            cout<< "Drücken sie eine Buchstaben von 'A' bis 'E' " <<endl; // <== diese Zeile noch vor(!) 'cin >> Auswahl'
            cin>> Auswahl;
    
            switch(Auswahl)
            {
            case('A'):
                cout << " (1)Das Array mit der vorgegebenen Zahl wird eingelesen"; 
                for (int i=0;i<n;i++) 
                    cin >> zahl[i]; // <== hier fehlte das [i]
                break; 
    
            case('B'):
                cout << " Der Tauschalgorithmus wird durchgeführt"<< endl;
                cout<<" Anzahl der einzulesenden Elemente/maximal " << N;
                cin >> n;
                { // <== eigenen Scope für Variable 'tausch'
                    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:  ";
                            break;
                        }
                    }
                }
            case('C'):
                cout << " Das Array wird gespiegelt"<< endl; 
                for (int first=0, last=n-1;first < last; ++first, --last ) // <=== bevorzuge for vor while! 
                { 
                    int hilf=zahl[first]; 
                    zahl[first]=zahl[last]; 
                    zahl[last]=hilf; 
                }
    
            case 'D': // <=== case D: fehlt
            default: // <=== default am Ende des switch-Statements
                break;
    
    // <=== alles ab hier fehlte
            } // switch(auswahl)
        } while( Auswahl != 'E' );
    } // main
    

    :xmas2: Werner



  • Hi danke Werner .

    Jetzt ist es wenigstens kompilierbar.

    Aber ich glaube inhaltlich ist noch nicht ganz ok oder?

    Ist eigentlich mein case c in ordnug?

    Ehrlich geagt beim case D weiss ich auch nicht wie ich das machen kann.

    HAst du eine Idee?

    Wäre dankbar dafür.



  • crazy2 schrieb:

    Aber ich glaube inhaltlich ist noch nicht ganz ok oder?

    das solltest Du beurteilen. Tut das Programm das, was Du erwartest?

    crazy2 schrieb:

    Ist eigentlich mein case c in ordnug?

    Ja - ich denke schon.

    crazy2 schrieb:

    Ehrlich geagt beim case D weiss ich auch nicht wie ich das machen kann.

    Mh.. das sollte der leichteste Part sein. Wie in Zeile 25 und 26. Nur statt einlesen von cin, ausgeben auf cout. Wo ist das Problem?

    :xmas2: Werner



  • Ah ja mein programm sieht jetzt so aus:

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int zahl[] ={ 2, 4, 6, 8 , 10 , 12 , 14, 16 ,18 ,20 }; // <== das muss vorher deklariert werden. Wie soll ich das deklarieren?
        const int N = sizeof(zahl)/sizeof(zahl[0]); // <== Anzahl aus dem Feld übernehmen
        int n = N; // <== initiale Belegung der Anzahl Soll ich hier einfach für N die Zahl 10 nehmen?
        char Auswahl;
        do
        {
            cout<< " (A)Das Array mit der vorgegebenen Zahl der Elemente soll (neu) eingelesen werden."<< endl;
            cout<< " (B)Der Tauschalgorithmus ist durchzuführen"<< endl;
            cout<< " (C)Das Array soll gespiegelt werden (Reihenfolge umkehren)."<< endl;
            cout<< " (D)Das Array soll am Bildschirm angezeigt werden"<< endl;
            cout<< " (E)Das Programm beenden";
            cout<< "Drücken sie eine Buchstaben von 'A' bis 'E' " <<endl; // <== diese Zeile noch vor(!) 'cin >> Auswahl'
            cin>> Auswahl;
    
            switch(Auswahl)
            {
            case('A'):
                cout << " (1)Das Array mit der vorgegebenen Zahl wird eingelesen";
                for (int i=0;i<n;i++)
                    cin >> zahl[i]; // <== hier fehlte das [i]
                break;
    
            case('B'):
                cout << " Der Tauschalgorithmus wird durchgeführt"<< endl;
                cout<<" Anzahl der einzulesenden Elemente/maximal " << N;
                cin >> n;
                {   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:  ";
                            break;
                        }
                    }
                }
            case('C'):
                cout << " Das Array wird gespiegelt"<< endl;
                for (int first=0, last=n-1;first < last; ++first, --last ) // <=== bevorzuge for vor while!
                {
                    int hilf=zahl[first];
                    zahl[first]=zahl[last];
                    zahl[last]=hilf;
                }
    
            case 'D': 
    
            for (int i=0;i<n;i++)
                    cout >> zahl[i];
            default: // <=== default am Ende des switch-Statements
                break;
    
    // <=== alles ab hier fehlte
            } // switch(auswahl)
        } while( Auswahl != 'E' );
    } // main
    

    Stimmt mein programm soweit ?



  • crazy2 schrieb:

    Stimmt mein programm soweit ?

    .. beurteile es doch selbst. Compiliert es? Tut es das, was Du erwartest?

    :xmas1:



  • Der Tauschalgorithmus wird leider nicht richtig dargestellt. Und mir wird immer noch kein Array auf der Konsole angezeigt. Kompilieren tut es schon.

    Was meinst du den damit dass ich den Array vorher deklarieren soll.

    Wie denn genau?

    Danke für deine Geduld an dieser Stelle.



  • Kompilieren und debuggen "in der Cloud"...
    Ich weiss gar nicht welchen Smiley ich jetzt nehmen soll... 😉

    Crazy2 schrieb:

    Und mir wird immer noch kein Array auf der Konsole angezeigt.

    Die Ausgabe koenntest Du hinbekommen, wenn Du statt '>>' '<<' schreibst:

    for (int i=0;i<n;i++)
      cout << zahl[i];
    


  • Oh man der Fehler war wirklich blöd.

    Danke

    Weisst du wie ich diesen Teil des Programms noch korrigieren kann?

    #include <iostream>
    
    using namespace std;
    
    int main()
    {
        int zahl[] ={ 2, 4, 6, 8 , 10 , 12 , 14, 16 ,18 ,20 }; // <== das muss vorher deklariert werden. Wie soll ich das deklarieren?
        const int N = sizeof(zahl)/sizeof(zahl[0]); // <== Anzahl aus dem Feld übernehmen
        int n = N; // <== initiale Belegung der Anzahl Soll ich hier einfach für N die Zahl 10 nehmen?
        char Auswahl;
        do
        {
    

Anmelden zum Antworten