Probleme bei Schulaufgabe



  • Hallo Zusammen,

    da ich absoluter Anfänger bin was C++ angeht, hab ich mal eine wahrscheinlich für Euch lächerliche Frage. Ich hab in der Schule eine Aufgabenstellung bekommen, weiß aber leider nicht so hundertprozentig, wie ich das lösen soll:

    Schreiben Sie ein Programm, das über folgendes Menü verfügt:

    1 Einlesen
    2 Ausgeben
    3 Einfügen
    4 Programmende

    Das Programm kehrt nach jedem Menüpunkt in das Menü zurück, es kann nur über den letzten Punkt verlassen werden.

    Unter 1 werden sechs Werte abgefragt und in einem Feld gespeichert; das Feld umfasst 10 Plätze.
    Unter 2 wird das Feld auf dem Bildschirm ausgegeben
    Unter 3 wird eine neuere Wert eingelesen, sowie die Position, an der der Wert eingefügt werden soll. Alle dahinter stehenden Werte rücken einen Platz weiter.

    Zählweise: Beginn mit Position 1 -> Einfügen NACH dem 1. Element.

    Also 1 und 2 sind eigentlich nicht das große Problem, aber mit Punkt 3 hab ich meine schwierigkeiten.
    Wie bitte bekomm ich es hin, das ich einen Wert in das Feld eintrage und die Werte dahinter einen Platz weiter rücken.
    Ich wäre über eure Hilfe sehr Dankbar.

    😕



  • Hi,

    wenn ich das richtig sehe, dann programmiert ihr Konsolenanwendungen (die schwarzen dinger). Dieser Bereich im Forum handelt aber nur von VCL...

    Wie auch immer, nimm eine Schleife die das Menü ausgibt und auf die eingabe 1, 2, 3 oder 4 wartet. je nachdem wird dann eine andere Aktion aufgerufen

    while (true)
    {
    cout <<1 für einlesen;
    cout <<2 für ausgeben;
    cout <<3 für einfpgen;
    cout <<4 programmende;
    int x;
    cin >>x;
    if(x==1)
    {//einelsen
    }
    else if (x==2)
    {//ausgeben
    }
    .
    .
    .
    

    So in etwa sollte das klappen.

    mfg
    Rai



  • Hi,
    mir fällt so spontan ein, dass du einfach die Felder, angenommen Wert[0] bis Wert[9]) in deinem Array um eins weiterrücken musst, am besten mit einer for Schleife. Wobei dein Wert[9] dann überschrieben wird und somit nicht mehr vorhanden ist, da dieser ja mit Wert[8] überschrieben wird. Dein neuer Wert nimmt dann anschließend den Platz Wert[0] ein.

    mfg
    Tom



  • Dieser Thread wurde von Moderator/in Jansen aus dem Forum VCL/CLX (Borland C++ Builder) in das Forum DOS und Win32-Konsole verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Nimm anstatt von deinem Array eine Containerklasse wie z.B. list oder aber vector und nutze die Methode insert.



  • hattet ihr im unterricht verkettete listen? vielleicht will euer lehrer sowas sehen..



  • Also ersteinmal sorry für das falsche forum und zweitens danke für die vielen antworten.

    @elise: nein, wir hatten bisher noch keine verkettete listen. ich weiß um ganz ehrlich zu sein gar nicht was das ist.

    @raimond: so in etwa hab ich das menü auch geschrieben. danke.

    @tom7: wie sähen denn die befehle in etwa aus. wir haben bisher nur die grundsachen wie for schleife; funktionen usw. gemacht.

    das problem ist bei mir einfach, das ich zwar meistens weiß wie ich es machen muß,oder machen müsste, aber nicht weiß wie ich das ganze in befehle umsetzte.



  • lappen schrieb:

    das problem ist bei mir einfach, das ich zwar meistens weiß wie ich es machen muß,oder machen müsste, aber nicht weiß wie ich das ganze in befehle umsetzte.

    Das Problem hat am Anfang, glaub ich zumindest jeder, deshalb glaube ich auch, dass es dir über kurz oder lang nix bringt wenn ich oder andere dir hier den Quellcode auf dem Silbertablett präsentieren.

    Da ist es am besten du setzt dich mit nem Bleistift und nem Zettel an die Aufgabe und machst erst mal ein Ablaufdiagramm des Programms. Daraus kannst du dann wunderbar den Quellcode lesen. So wurde es uns in der Schule gelernt als wir mit Turbo C/C++ angefangen haben.

    Fragen sind ja jederzeit erlaubt, aber gleich der fertige code? Dann wirst dus nie lernen.

    mfg
    Tom



  • Nicht getestet ...

    int position;     // Position der einzufügenden Zahl
    int zahl;         // Einzufügende Zahl
    int laenge = 10;  // Länge deines Feldes
    int feld[laenge]; // Dein Feld
    
    for(int i=laenge-1; i>position; i--)
        feld[i] = feld[i-1];
    
    feld[--i] = zahl;
    


  • DarthZiu schrieb:

    Nicht getestet ...

    BugFree™:

    #include <iostream>
    
    #include <cstdlib>
    #include <ctime>
    
    using namespace std;
    
    int main( )
    {
        char Array[ 10 ];
    
        // Array mit Werten füllen und ausgeben:
        srand( static_cast< unsigned int >( time( 0 ) ) );
    
        for( int i = 0; i < 10; ++i ) {
    
            Array[ i ] = 32 + static_cast< int >( ( 224.0 * rand( ) / static_cast< float >( RAND_MAX ) ) );
            cout.width( 2 );
            cout.fill( '0' );
            cout << i + 1 << ": " << "'" << Array[ i ] << "'"<< endl;
        }
    
        size_t pos = 0;
    
        while( pos < 1 || pos > 10 ) {
    
            cout << endl << "An welcher Position einfügen?" << endl;
            cout << "Position: "; cin >> pos;
    
            if( cin.fail( ) ) {
    
                cout << endl << "Falsche Eingabe!" << endl;
                cin.clear( );
                cin.ignore( cin.rdbuf( )->in_avail( ) );
    
            } else if( pos > 10 ) {
    
                cout << endl << "Der Maximalwert ist 10!" << endl;
    
            } else if( pos < 1 ) {
    
                cout << endl << "Der Minimalwert ist 1!" << endl;
            }
        }
    
        char ch = 0;
    
        while( ch < 32 ) {
    
            cout << endl << "Welches Zeichen einfügen?" << endl;
            cout << "Zeichen: "; cin >> ch;
    
            if( cin.fail( ) ) {
    
                cout << endl << "Falsche Eingabe!" << endl;
                cin.clear( );
                cin.ignore( cin.rdbuf( )->in_avail( ) );
    
            } else if( ch < 32 ) {
    
                cout << endl << "Falche Eingabe!!" << endl;
            }
        }
    
        // Wert einfügen:
    
        for( int i = 9; i > ( pos - 1 ); --i )
            Array[ i ] = Array[ i - 1 ];
    
        Array[ pos - 1 ] = ch;
    
        // Array ausgeben:
    
        for( int i = 0; i < 10; ++i ) {
    
            cout.width( 2 );
            cout.fill( '0' );
            cout << i + 1 << ": " << "'" << Array[ i ] << "'"<< endl;
        }
    
    }
    

    Greetz, Swordfish



  • @tom7: da hast du sicherlich recht. am meisten lernt man, wenn man es selber auseinander klamüsert. ich mach das in microcontroller ja auch so.
    aber in c++ brauch ich zumindest mal als grundlegende funktion ein beispielprogramm.



  • @Swordfish
    Ich glaub, wenn unser Freund das Programm so abgibt, wie du es geschrieben hast, bekommt er gleich ne 6. 😃



  • nur hast du mittlerweile als Beispielprogramm schon den fix fertigen Quellcode erhalten;

    Und wenn du schon am µC rumprogst, dann solltest du dich doch von der Logik her nicht schwer tun und Befehle kann man ja nachlesen usw....

    Muss aber jeder für sich entscheiden.

    mfg
    Tom



  • lappen schrieb:

    aber in c++ brauch ich zumindest mal als grundlegende funktion ein beispielprogramm.

    Da kannst du dich austoben: http://www.c-plusplus.net/forum/viewtopic-var-t-is-134700.html



  • DarthZiu schrieb:

    @Swordfish: Ich glaub, wenn unser Freund das Programm so abgibt, wie du es geschrieben hast, bekommt er gleich ne 6. 😃

    Wieso, mein Progrämmchen war nur als Beispiel gedacht, wie man einen Wert ch in ein Array an der Position pos einfüght.

    Greetz, Swordfish



  • @tom7: ich will ja gar nicht alles vorgesetzt bekommen.die programmierung von µC ist jedoch meiner meinung nach komplett anders. es ist um einiges komplizierter als c++.
    ich werd mich heute abend aber an das problem nochmal in aller ruhe ransetzten(was ich ja auch schon gemacht habe).

    ich werd euch das ergebnis auf jeden fall mal zeigen. 🙂



  • Oft hilft es auch mal ähnliche, aber einfachere Probleme zu lösen. Schreib mal ne Funktion, die alle Zahlen im Feld um eins nach rechts verschiebt (erstes Element danach beliebig, letztes fällt raus und geht verloren).

    Bau das Programm so um, daß es ab eienr bestimmten Stelle erst verschiebt.
    Bau ne Funktion, die an einer Stelle ne Zahl hinschreibt.

    Einfügen geht dann so: ab der gewünschten Position schieben, dann hinschreiben. Also nur noch zwei Funktionsaufrufe.



  • Also:

    Ich hab jetzt mal ne ganze Weile hier rum probiert, aber scheinbar bin ich echt zu blöd. Hier ist mein Programm:

    #pragma argsused
    #include <iostream.h>

    int main(int argc, char* argv[])
    {
    double feld[10],pos,wert;
    int auswahl=1;

    while(auswahl==1 || auswahl==2 || auswahl==3)
    {
    cout<<" 1 Einlesen"<<endl;
    cout<<" 2 Ausgeben"<<endl;
    cout<<" 3 Einfügen"<<endl;
    cout<<" 4 Programmende"<<endl;
    cin>>auswahl;

    switch (auswahl)
    {
    case 1:
    cout<<"Bitte geben Sie 6 Werte ein: "<<endl;
    for (int i=0;i<=5;i++)
    {
    cout<<"Geben Sie Wert"<<i+1<<"ein:"<<endl;
    cin>>feld[i];
    }
    break;

    case 2:
    for (int i=0;i<=5;i++)
    {
    cout<<"Speicherplatz"<<i+1<<"="<<feld[i]<<endl;
    }
    break;

    case 3:
    cout<<"Geben Sie einen neuen Wert und dessen Speicherplatz ein:"<<endl;
    cin>>wert;
    cin>>pos;

    break;
    }
    }
    system ("pause");
    return 0;
    }

    So. Ich hab jetzt verschiedene Sachen unter Case 3 versucht, aber nichts hat bisher hingehauen. 😡

    @jester: du meinst also mit ner for schleife ein feld füttern?



  • Bitte beachte bei zukünftigen Posts das Einrücken der Zeilen!

    Hier dein Code (ein wenig verändert)...
    Ist eigentlich selbsterklärend....

    EDIT: <iostream>...

    #include <iostream> 
    #include <process.h>
    #include <conio.h>
    
    using namespace std;
    
    int main(int argc, char* argv[]) 
    { 
    int feld[10],pos,wert; 
    char auswahl=1; 
    
    while(auswahl!=4) 
    { 
    system("cls");
    cout<<" 1 Einlesen"<<endl; 
    cout<<" 2 Ausgeben"<<endl; 
    cout<<" 3 Einfuegen"<<endl; 
    cout<<" 4 Programmende"<<endl; 
    cin>>auswahl; 
    system("cls");
    
    	switch (auswahl) 
    		{ 
    		case '1':{ 
    
    					cout<<"Bitte geben Sie 6 Werte ein: "<<endl; 
    					for (int i=0;i<=5;i++) 
    					{ 
    					cout<<"Geben Sie Wert "<<i+1<<" ein:"<<endl; 
    					cin>>feld[i]; 
    					} 
    
    					cout<<"\nBitte Taste druecken!"<<endl;
    					getch();
    					break; 
    			  }
    
    		case '2':{
    
    					for (int i=0;i<=5;i++) 
    					{ 
    					cout<<"Speicherplatz"<<i+1<<"="<<feld[i]<<endl; 
    					} 
    
    					cout<<"\nBitte Taste druecken!"<<endl;
    					getch();
    					break; 
    			   }
    
    		case '3':{ 
    
    					cout<<"Geben Sie einen neuen Wert und dessen Speicherplatz ein!\nWert:"<<endl; 
    					cin>>wert; 
    					cout<<"Position:"<<endl;
    					cin>>pos; 
    					pos--;
    					if(pos>=0 && pos<6)
    					feld[pos]=wert;
    					else{
    					cout<<"Beachten Sie die Positionsgrenzen 1-6"<<endl;
    					}
    					cout<<"\nBitte Taste druecken!"<<endl;
    					getch();
    					break; 
    			   }
    		case '4':{
    
    					cout<<"Bitte Taste druecken um das Programm zu beenden!"<<endl;
    					getch();
    					return 0;
    					break;
    			   }
    
    		default:{
    					cout<<"Beachten Sie die Eingabegrenzen 1-4"<<endl;
    					cout<<"\nBitte Taste druecken!"<<endl;
    					getch();
    					break;
    
    				}
    	   } 
    } 
    
    return 0; 
    }
    

    MfG Kuldren



  • Hallo

    Auch wenn es nervt, aber <iostream.h> gehört seit 98 nicht mehr zum Standard. Es heißt jetzt <iostream> und viele Dinge befinden sich im namespace std.

    chrische


Log in to reply