Felder im Unterprogram übergeben



  • Kann man auch Felder übergeben ??ich hab das mal so hingewurstet hab aber keine Ahnung wies geht 🤡

    void test(int feld)
    {
    	int feld2[5];
    	feld2[0]=feld[4];
    	feld2[1]=feld[3];
    	feld2[2]=feld[2];
    	feld2[3]=feld[1];
    	feld2[4]=feld[0];
    	return feld2;
    }
    void main()
    {
    	int feld[5];
    	int feld2[5];
    
    	cin>>feld[0];
    	cin>>feld[1];
    	cin>>feld[2];
    	cin>>feld[3];
    	cin>>feld[4];
    	test(feld);
    	cout<<feld2[0];
    	cout<<feld2[1];
    	cout<<feld2[2];
    	cout<<feld2[3];
    	cout<<feld2[4];
    	getch();
    	return;
    }
    

    wie muss ich es anstellen damit ich feld 2 dann wieterverwenden kann ??

    mfg Cobi

    PS: Mit so einfachen Befehlen wie möglich ^^



  • ich denke du meinst sowas oder ?

    /*also ich denke hier könntest du es so 
    void test(int *feld_,int *feld2_){
     oder so*/
    void test(int feld_[],int feld2[]_){// du hast ein int und kein int[] übergeben
    // machen
    
        feld2_[0]=feld_[4];
        feld2_[1]=feld_[3];
        feld2_[2]=feld_[2];
        feld2_[3]=feld_[1];
        feld2_[4]=feld_[0];
        return ;//wenn void dann auch nichts zurückgeben! 
    }
    
    int main(){//int main nicht void main
        int feld[5];
        int feld2[5];
    
        cin>>feld[0];
        cin>>feld[1];
        cin>>feld[2];
        cin>>feld[3];
        cin>>feld[4];
        test(feld,feld2);
        cout<<feld2[0];
        cout<<feld2[1];
        cout<<feld2[2];
        cout<<feld2[3];
        cout<<feld2[4];
        return 0;
    }
    

    in meinen Augen solltest du dich unbeding mal mit Schleifen und Rückgabewerten- sowie Parametern von Funktionen beschäftigen. Dann könnte man das ganze zB so aussehen lassen

    static const int size=5;//global
    void test(int *feld_,int *feld2_){
    	for(int i=0,j=4;i<size;++i,--j)
    		feld2_[i]=feld_[j];
    	return ;
    }
    
    int main(){
        int feld[size];
        int feld2[size];
    	for(int i=0;i<size;++i)
        	cin>>feld[i];
        test(feld,feld2);
        for(int i=0;i<size;++i)
    		cout<<feld2[i]<<" ";
        return 0;
    }
    

    hoffe ich kann dir damit helfen



  • Cobalt schrieb:

    Kann man auch Felder übergeben ??ich hab das mal so hingewurstet hab aber keine Ahnung wies geht 🤡

    Jein. Du kannst ein Feld einer Funktion uebergeben und die kann auch ein neues Feld zurueck geben, aber nicht so wie du das machst. Ich hab mal deinen Code kommentiert:

    Cobalt schrieb:

    void test(int feld) //1. void bedeutet keine Rueckgabe, du gibst aber einen Wert zurueck. es muss also int* test(...) heissen 2. ubergibt "int feld" nur eine Zahl. Entweder du nimmst "int feld[]" oder besser noch "int *feld, int feldlaenge". Die Feldlaenge brauchst du, weil ein Feld in C/C++ nicht weiss wie lange es ist.
    {
    	int feld2[5]; // Ok, hier erzeugst du ein neues Feld, aber Felder die so erzeugt werden werden geloescht sobald man die geschweifte Klammer schliesst  in der das Feld angelegt wurde. Hier musst due das Feld mit "int *feld2 = new int[5]" anlegen, mit new anlgelegte Felder bleiben erhalten bis man sie loescht.
    	feld2[0]=feld[4];
    	feld2[1]=feld[3];
    	feld2[2]=feld[2];
    	feld2[3]=feld[1];
    	feld2[4]=feld[0];
    	return feld2;
    }
    void main()
    {
    	int feld[5];
    	int feld2[5]; //hier muss es jetzt besser int *feld2 = NULL; heissen
    
    	cin>>feld[0];
    	cin>>feld[1];
    	cin>>feld[2];
    	cin>>feld[3];
    	cin>>feld[4];
    	test(feld); // feld2 = test(feld, 5);
    	cout<<feld2[0];
    	cout<<feld2[1];
    	cout<<feld2[2];
    	cout<<feld2[3];
    	cout<<feld2[4];
    	getch();
            // hier noch ein delete [] feld2; und fertig
    	return;
    }
    

    wie muss ich es anstellen damit ich feld 2 dann wieterverwenden kann ??

    mfg Cobi

    PS: Mit so einfachen Befehlen wie möglich ^^

    Das einzige Problem ist noch, dass man nicht sicher weiss, wie lange das Feld ist, das von test(...) zurueck gegeben wird. Entweder du schreibst die Laenge in das erste Feld von der Rueckgabe oder du machst Feld2 so gross wie das Feld was du uebergibst. Die dritte Loesung ist einen Zeiger auf eine Variable zu uebergeben und da die Laenge reinzuschreiben.



  • Danke schön 🙂

    mfg Cobi



  • // hier noch ein delete [] feld2; und fertig

    ich weiss ja nicht ob ich deine Idee nicht recht verstanden habe, aber
    wo legst du denn dynamsich ein int-array an das du dann mit delete[] löschen willst?
    so wie ich das sehe versuchst du hier was zu löschen was nicht so zu löschen ist .....
    wenn ich deine Idee nicht erkennen konnte lasse ich mich gern eines Besseren belehren.



  • Hi Ich hab das mal probiert mit normalen Variablen ^^

    #include iostream.h>
    #include<iomanip.h>
    
    void test(int tmp1,int tmp2, int *tmp3,int *tmp4)
    {
    
    	*tmp3=tmp2;
    	*tmp4=tmp1;
    }
    
    void main()
    {
    	int a,b,c,d;
    	cin>>a;
    	cin>>b;
    	test(a,b,&c,&d);
    	cout<<c;
    	cout<<d;
    	getch();
    return;
    }
    

    Funktionieren würde es nur hab ichs auch richtig deklariert ?

    mfg Cobi



  • also die funktion an sich scheint zu stimmen, gibt aber dennoch noch ein paar kleinigkeiten du dan anpassen solltest

    #include<iostream>//ohne .h bitte
    #include<iomanip>// ohne .h bitte
    using namespace std;// beim weglassen des .h musst du nun den //namespace den du benutzt bekanntgeben
    // wenn du nicht vor jede klasse, funktion der 
    //stl "std::" schreiben willst 
    void test(int tmp1,int tmp2, int *tmp3,int *tmp4){
        *tmp3=tmp2;
        *tmp4=tmp1;
    }
    
    int main(){ //nochmal: int main!
        int a,b,c,d;
        cin>>a>>b;
        test(a,b,&c,&d);
    	cout<<c;
        //cout<<"\n";// dient nur der übersicht
    	cout<<d;
        //cout<<"\n";// dient nur der übersicht
    	//cin.get();
    	return 0;
    }
    

Anmelden zum Antworten