Programm aus mehreren Schleifen und einer Funktion hat Wurm drin



  • Hallo,
    ich habe [versucht] ein Programm zu schreiben, dass einen fragt wie groß bzw wie viele Zahlen das Feld beinhalten soll. Die Grenze liegt bei 100. Also der Benutzer soll sich eine Zahl zwischen 1 und 100 aussuchen, ansonsten soll "Fehlermeldung!!..." erscheinen. zum einlesen der genannten groesse möchte ich gerne die Funktion int einlesen nutzen und zum ausgeben die for-Schleife. Bei der Ausgabe sollen die Zahlen in 3 Spalten ausgegeben werden und auch nur die, die ohne rest durch 3 teilbar sind.
    Wenn ich mein Programm startet (nutze DEV-C++ 5.4.0) dann funktioniert entweder das DEV programm nicht mehr oder ich schaffe es, dass ich ne Zahl eingeben kann, dann kommt aber eher ein schönes Muster aus vielen 0 heruas oder eine Zahl wird ganz oft wiedergegeben.
    Also irgendwo ist bei mir der Wurm drin 😞
    Ich bin sehr dankbar für Tips, Ratschläge, Ideen, oä. Anregungen bei der Fehlersuche.

    #include<iostream>
    #include<iomanip>
    #include<math.h>
    #define DIM 100
    int einlesen(int &s);
    using namespace std;
    int main(void)
    {
    	int groesse,z;
    	int feld[groesse];
    	cout << "Bitte geben Sie einen Wert zwischen 1 und 100 fuer Groesse an: " << endl;
    	cin >> groesse;
    	if(groesse>100 && groesse<0)
    	{
    	cout << "Fehlermeldung!! Groesse ist zu gross oder zu klein!" << endl;
    	}
    	else
    	{
    	einlesen(groesse);
    	for(z=0;z<groesse;z++)
    		{
    			cout << setw(7) << feld[groesse];
    			if((z%3)==0)
    			{
    				cout << endl;
    			}
    		}
    	}
    }
    
    	int einlesen(int &s)
    {
    	int feld[s],z;
    	for(z=0;z<s;z++)
    	{
    		feld[z]=z+1;
    	}
    }
    


  • int main(void) 
    { 
        int groesse,z; 
        int feld[groesse]; //groesse hier undefiniert, außerdem wird diese art der arrayerstllung nicht vom standard abgedeck. benutze std::vector
        cout << "Bitte geben Sie einen Wert zwischen 1 und 100 fuer Groesse an: " << endl; 
        cin >> groesse; 
        if(groesse>100 && groesse<0) // gleichzeigit größer 0 und kleiner 0 ?
        { 
        cout << "Fehlermeldung!! Groesse ist zu gross oder zu klein!" << endl; 
        } 
        else 
        { 
        einlesen(groesse); 
        for(z=0;z<groesse;z++) 
            { 
                cout << setw(7) << feld[groesse]; // nicht eher feld[z] ? gibt außerdem ALLE zahlen aus
                if((z%3)==0) 
                { 
                    cout << endl;  //alle drei zahlen wechselt du in eine neue zeile ? 
                } 
            } 
        } 
    } 
    
        int einlesen(int &s) //warum referenz ? und was wird hier eingelesen ? return fehlt!
    { 
        int feld[s],z; // immer noch nicht erlaubt, außerdem ist das feld lokal und kommt nie aus der funktion raus
        for(z=0;z<s;z++) 
        { 
            feld[z]=z+1; 
        } 
    }
    

    EDIT:
    Ums etwas leichter zu machen:

    int main(void) 
    { 
        int groesse;
        vector<int> feld();
        einlesen(feld, groesse); 
        for(int z = 0; z < feld.size(); z++) nur bis zur länge des felds, nicht bis zur größe, im feld sind ja nur ein drittel der zahlen bis zum limit ! 
        { 
            cout << setw(7) << feld[z]; 
            if( (z % 3) == 0) 
            { 
                cout << endl;
            } 
        } 
    }  
    
    void calculate(vector & feld, int groesse) // nur alle durch 3 teilbaren zahlen ins feld packen
    { 
        for(int z = 3; z < groesse; z+=3) 
        {
    	feld.push_back(z);
        } 
    }
    


  • ah okay. also zählt das nicht als aufgabe wenn meine funktion bloß die zahlen einlesen soll ?



  • #include<iostream>
    #include<iomanip>
    #include<math.h>
    #define DIM 100
    int einlesen(int &s);
    using namespace std;
    int main(void)
    {
    	int groesse,z;
    	groesse=1;
    	int feld[groesse];
    	cout << "Bitte geben Sie einen Wert zwischen 1 und 100 fuer Groesse an: " << endl;
    	cin >> groesse;
    	if(groesse>100 && groesse<=0)
    	{
    	cout << "Fehlermeldung!! Groesse ist zu gross oder zu klein!" << endl;
    	}
    	else
    	{
    	einlesen(groesse);
    	for(z=0;z<groesse;z++)
    		{
    			cout << setw(7) << feld[z];
    			if((z%3)==0)
    			{
    				cout << endl;  //Ja ich möchte nach 3 Zahlen eine neue Zeile beginnen
    			}
    		}
    	}
    }
    
    	int einlesen(int &s)  //kann ich das nicht so lassen, dass in meiner Funktion nur das einlesen/zuweisen der zahlen stattfindet ?
    {
    	int feld[s],z;
    	for(z=0;z<s;z++)
    	{
    		feld[z]=z+1;
    	}
    }
    


  • moni89 schrieb:

    int einlesen(int &s)  //kann ich das nicht so lassen, dass in meiner Funktion nur das einlesen/zuweisen der zahlen stattfindet ?
    

    Du hast da eine Referenz auf s.
    Damit kannst du die Variable ändern die übergeben wird. (Bei dir wäre das groesse)
    Aber:
    1. ändest du s gar nicht
    2. willst du das auch gar nicht.

    Du willst den Inhalt von feld ändern. Das ist aber in eingabe eine lokale Variable, die beim verlassen der Funktion ungültig wird.



  • Danke,
    habs noch gelöst bekommen 🙂



  • Der nächste der hier im Forum die Suchfunktion benutzt wird seine Frage trotzdem stellen müssen. Warum fragst du? Weil der die Lösung hier nicht findet obwohl er oder sie gesucht hat aber nur weiss das DU die Lösung hast, wie die aussieht weisst auch nur DU.
    Stelle bitte weiter Fragen und sage Niemandem wie deine Lösung aussieht, so das nur DU auch profitierst von diesem Forum und andere Leute sich weiter den Wolf suchen.



  • ganz ruhig brauner

    #include<iostream>
    #include<iomanip>
    #include<math.h>
    
    //Funktionsprototypen
    int einlesen(int ein_anzahl, int ein_feld[]);                                  
    using namespace std;
    
    //Hauptprogramm
    int main(void)
    {
    	//Variablendeklaration
        int anzahl, i;
        const int groesse=100;
    
    	//Einlesen der Anzahl der Werte
    	do
    	{
    		cout << "Bitte geben Sie einen Wert zwischen 1 und 100 fuer Anzahl an: " << endl;
    		cin >> anzahl;
    
    		if(anzahl>groesse || anzahl<=0)                                             
    		{
    			cout << "Fehlermeldung!! Anzahl ist zu gross oder zu klein!" << endl;
    		}
    	}
    	while(anzahl>groesse || anzahl<=0);                                            
    
    	//Deklaration des Arrays                                                    
    	int feld[anzahl];
    
    	//Aufruf der Funktion zum Einlesen der Zahlen 
    	einlesen(anzahl, feld);                                                     
    
        //Ausgabe des Arrays                                                        
    	for(i=0; i<anzahl; i++)
    	{
    			cout << setw(7) << feld[i];
    
    	}
    
      //Programm beenden
      cout<<endl;
     // system("Pause");
      return 0;		
    }
    
    //Funktion zum Einlesen der Zahlen	
    int einlesen(int ein_anzahl, int ein_feld[])  
    {
        int j;
        cout<<"Eingabe der Zahlen: ";
    	for(j=0; j<ein_anzahl; j++)
    	{
    		cin>>ein_feld[j];
    	}
    }
    


  • Wäre mir neu, dass dieses Forum einen Papa braucht, der seine User zusammenfaltet. Du hast bisher nichts Produktives dazu beigetragen, riskierst hier jetzt aber eine Dicke Lippe. Der große Daddy hat jetzt seine Antwort.


Anmelden zum Antworten