Probleme bei Schulaufgabe



  • 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



  • lappen schrieb:

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

    Naja, eigentlich meinte ich hauptsächlich, daß Du das Problem mal in einzelne Teilprobleme zerlegen solltest und habe Dir eine Liste mit Teilproblemen, die Du lösen könntest gemacht.

    Das verschieben dürfte sich tatsächlich gut mit einer for-Schleife implementieren lassen. Die sollte wohl irgendwie rückwärts über das Feld laufen.



  • @kuldren: was ist mit dem Befehl p-- gemeint? Ich kenne den leider nicht.

    @chrische5: Also wir haben nur <iostream.h> kennengelernt und arbeiten auch nur damit.

    @jester: Ich glaub ich hab auf jeden Fall ein dickes Problem mit Felder (Arrays) und werde auch dieses Problem so wie Du es beschrieben hast angehen.
    Ich glaub ich hab zudem auch eine schwäche was for-Schleifen angeht. Und das in Kombination mit Feldern bricht mit z.Z logisch das Genick.



  • p-- decrementiert den Wert in p.

    int p = 5;  // in p steht 5
    p--;        // dekrementieren; in p steht jetzt 4
    

    Ist das Gleiche wie 'p = p - 1', nur halt ne kürzere Schreibweise.



  • na logisch. hätt ich auch von selbst draufkommen können. danke



  • Syntax der for-Schleife:

    for(INITIALISIERUNG; ABBRUCHBEDINGUNG; ANWEISUNG)
    {
        // mache was
    }
    

    Du musst aber nicht immer alle drei Sachen reinschreiben. Folgende 'Progrämmchen' machen alle das Gleiche:

    /* i wird mit 0 initialisiert. Die Schleife läuft so lange, wie i kleiner als 10 ist. i wird bei jedem Schleifendurchlauf um eins erhöht. In der Schleife wird immer der aktuelle Zählwert ausgegeben. */
    for(int i=0; i<10; i++)
    {
        cout << i << endl;
    }
    
    // 2. Variante
    for(int i=0; i<10; )
    {
        cout << i << endl;
        i++;
    }
    
    // 3. Variante
    int i=0;
    for(;i<10;)
    {
        cout << i << endl;
        i++;
    }
    
    // 4. Variante (Unschön, aber möglich)
    int i=0;
    for(;;)
    {
        cout << i << endl;
        i++;
    
        if(i>=10)
            break;
    }
    


  • also ich sitz jetzt schon wieder fast 1 1/2 std rum und probier rum. ich komm einfach nicht darauf. sorry wenn ich mich besonders und extrem dämlich anstelle, aber ich schaff es einfach nicht einen wert an eine stelle einzubringen und die darauffolgenden werte um jeweils einen speicherplatz zu verrücken. das kann doch nun wirklich nicht so schwer sein. vielleicht sollte ich bäcker werden!!!!!!!!!

    feld[5] => [0] [1] [2] [3] [4] das sind meine 5 Feldpositionen

    1 3 5 7 9 das sind meine werte(inhalte)

    ich hab keinen blassen schimmer wie ich die for-schleife aufbauen muß, damit der inhalt von position 2,also den wert 5, nach position 3 verschiebe kann.
    das die schleife rückwärtszählen muß ist mir eigentlich klar, aber den aufbau der verdammten wschleife krieg ich nicht hin.



  • Nein. Eher Maurer.

    Zeig doch mal deinen Code. Aber auf der anderen Seite haben wir dir mittlerweile 3 komplette Lösungen gepostet.


Anmelden zum Antworten