wie schreibe ich ein Programm als Funktion?



  • Folgendes Problem:

    Ich habe ein Programm zum Finden von Primzahlen geschrieben. Nun sagte mir mein Tutor, dass ich daraus eine Funktion schreiben soll, die in der main aufgerufen wird. Leider krieg ich es leider nicht so hin, wie es soll. Ich poste daher mal den Quelltext des Programms und den meines "Funktionsversuchs". Vielen Dank.

    #include <iostream>
    using namespace std;
    
    int main (){
    	int laenge = 0;
    	cout << "Bitte geben sie eine Zahl ein";
    	cout << endl;
    	cin >> laenge;
    	cout << endl;
    	bool *arr = new bool[laenge];
    
    	cout << "Die Primzahlen sind:" << endl;
    
    	for ( int k = 0; k < laenge; k++){
    		arr[k] = true;
    	}
    
    		arr[0] = false;
    		arr[1] = false;
    
    		for (int l = 0; l < laenge; l++){
    			if (arr[l] == true) {
    				for (int z = l+1; z < laenge; z++){
    					if (z % l == 0){
    						arr[z] = false;
    					}
    				}
    			}
    			if ( arr[l] == true){
    				cout << l << endl;
    			}
    		}
    
    }
    

    und nun mein Versuch:

    #include <iostream>
    using namespace std;
    
    int Primzahlen (int laenge){
    
    		bool *arr = new bool[laenge];
    
    		for ( int k = 0; k < laenge; k++){
    		arr[k] = true;
    		}
    
    		arr[0] = false;
    		arr[1] = false;
    
    		for (int l = 0; l < laenge; l++){
    			if (arr[l] == true) {
    				for (int z = l+1; z < laenge; z++){
    					if (z % l == 0){
    						arr[z] = false;
    					}
    				}
    			}
    			if ( arr[l] == true){
    				return l;
    			}
    		}
    }
    
    int main (){
    	int laenge = 0;
    	cout << "Bitte geben sie eine Zahl ein";
    	cout << endl;
    	cin >> laenge;
    	cout << endl;
    
    	cout << "Die Primzahlen sind:" << endl;
    	cout << Primzahlen (laenge) << endl;
    }
    

  • Mod

    Ungetestet, sollte aber gehen. Könnten eventuell Syntaxfehler drin sein, um die Aufmerksamkeit des Lesers zu erhöhen:

    #include <iostream>
    #include <vector>
    using namespace std;
    
    vector<int> Primzahlen (int laenge){  // Keine einzelne Zahl als Rückgabewert...
    
                    vector<int> primzahlen;      // ...stattdessen ein Vector von Zahlen...
    		bool *arr = new bool[laenge];
    
    		for ( int k = 0; k < laenge; k++){
    		arr[k] = true;
    		}
    
    		arr[0] = false;
    		arr[1] = false;
    
    		for (int l = 0; l < laenge; l++){
    			if (arr[l] == true) {
    				for (int z = l+1; z < laenge; z++){
    					if (z % l == 0){
    						arr[z] = false;
    					}
    				}
    			}
    			if ( arr[l] == true){
    				primzahlen.push_back(l);  // ...welcher hier gefüllt wird
    			}
    		}
    }
    
    int main (){
    	int laenge = 0;
    	cout << "Bitte geben sie eine Zahl ein";
    	cout << endl;
    	cin >> laenge;
    	cout << endl;
    
    	cout << "Die Primzahlen sind:" << endl;
            vector<int> primzahlen=Primzahlen(laenge);
            for (int i=0; i<primzahlen.size(); ++i)	cout << primzahlen[i] << endl;  // Und hier werden alle Elemente des Vectors ausgegeben
    }
    


  • arr löschen nicht vergessen!
    oder ein std::deque<bool> oder ähnliches nehmen...



  • ja, delete habe ich noch eingefügt, hatte ich vorhin noch vergessen. Das mit vector hatten wir noch nicht, aber ich werde mich da mal durcharbeiten und versuchen zu verstehen... danke, schon mal



  • StehtAufDemC++Schlauch schrieb:

    ja, delete habe ich noch eingefügt, hatte ich vorhin noch vergessen.

    Dass man das vergisst ist ganz normal. Darum benutzt man auch Container, die sowas niemals vergessen.


Anmelden zum Antworten