Probleme bei Schulaufgabe



  • 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.



  • Hallo Lappen,

    es ist nun wirklich nicht bös gemeint, aber du solltest dir vielleicht ein Buch kaufen oder etwas der gleichen. Dieses dann durcharbeiten und dich mit dem Basiswissen vertraut machen.
    Ich glaube es bringt dir nichts, wenn du schon bei so grundlegenden Sachen rumfrickelst.

    Die Syntax der for-Schleife, Operatoren, usw gehören auf alle Fälle zu dem großen Bereich des Allgemeinwissens.

    Wie gesagt, ist nicht böse gemein, aber wenn du das Grundwissen schon nicht kannst wirst du irgendwann keine Lust mehr haben, oder auf die Nase fallen 🙂

    Lyrix

    Edit: auch hier gibts ne große Rubrik mit vielen Tutorials. Lad dir einfach mal eines runter und arbeite es durch...



  • Ich hab ein Buch. Eigentlich ein sehr gutes sogar. ausserdem auch ein skript von meinem lehrer. ich glaub das ganze liegt mir einfach nicht so gut wie andere sachen. aber du hast recht, ich werd mich jetzt nochmal hinsetzen und das ganze von vorne durch ackern.



  • lappen schrieb:

    Ich hab ein Buch. Eigentlich ein sehr gutes sogar. ausserdem auch ein skript von meinem lehrer. ich glaub das ganze liegt mir einfach nicht so gut wie andere sachen. aber du hast recht, ich werd mich jetzt nochmal hinsetzen und das ganze von vorne durch ackern.

    Gute Einstellung 👍

    Ich hoffe bei dir macht es bald *Klick* :). Aber keine Panic, am anfang war es auch hart für mich. Wünsch dir viel erfolg 🙂



  • Lyrix schrieb:

    lappen schrieb:

    Ich hab ein Buch. Eigentlich ein sehr gutes sogar. ausserdem auch ein skript von meinem lehrer. ich glaub das ganze liegt mir einfach nicht so gut wie andere sachen. aber du hast recht, ich werd mich jetzt nochmal hinsetzen und das ganze von vorne durch ackern.

    Gute Einstellung 👍

    Ich hoffe bei dir macht es bald *Klick* :). Aber keine Panic, am anfang war es auch hart für mich. Wünsch dir viel erfolg 🙂

    Nicht nur fuer Dich 😛
    Fuer mich ist es immernoch hart, obwohl Ich schon seit knapp 2 Jahren dabei bin 😞 😞



  • tH0RsT3n schrieb:

    Lyrix schrieb:

    lappen schrieb:

    Ich hab ein Buch. Eigentlich ein sehr gutes sogar. ausserdem auch ein skript von meinem lehrer. ich glaub das ganze liegt mir einfach nicht so gut wie andere sachen. aber du hast recht, ich werd mich jetzt nochmal hinsetzen und das ganze von vorne durch ackern.

    Gute Einstellung 👍

    Ich hoffe bei dir macht es bald *Klick* :). Aber keine Panic, am anfang war es auch hart für mich. Wünsch dir viel erfolg 🙂

    Nicht nur fuer Dich 😛
    Fuer mich ist es immernoch hart, obwohl Ich schon seit knapp 2 Jahren dabei bin 😞 😞

    Naja war eher so gemeint, dass er sich am anfang nciht "abschrecken" lassen soll 🙂



  • Ich habe mich heute auch mal mit deinem Problem beschäftigt und habe dabei eine ziemlich einfache, einleuchtende Lösung gefunden:

    [cpp]void addvalue(vector<int>& container, int element, int position) {
    
         // Überschreiben der Positionen, rückwärtslaufend
         for(int i = container.size() - 1; i > position; --i) {
                 container[i] = container[i-1];
         }
    
         // Überschreiben der definierten Position
         container[position] = element;
    }
    
    [/cpp]
    

    Dabei wird der Wert eines Elementes des Vectors an die Position des nachfolgenden Elementes kopiert.
    Die Gefahr, dass dabei ein Wert an eine Stelle kopiert wird, die nicht existiert, wird durch diesen Ausdruck vermieden:

    [cpp]int i = container.size() - 1;[/cpp]
    

    Die Schleife terminiert, wenn die Laufvariable 'i' die definierte Position erreicht. Dann muss nur noch der definierte Wert, der der Funktion übergeben wurde, an diese Stelle kopiert werden.
    Ich hoffe, diese Lösung ist leicht nachzuvollziehen.

    Grüße, Bobby - Karle


Anmelden zum Antworten