Größten arraywert herrausfinden



  • Hallo,
    ich weis, diese frage wurde schon des öfteren gestellt, und man findet im Netz auf viel, aber ich habe eine eigene Lösung, aber mir ist wohl irgentwo ein logik fehler passiert, und ich dachte mir vlt findet ihr ihn, da ich als programmier anfänger grade schon überfordert bin.

    zum code:
    ich erstelle 100 zufallszahlen und speichere diese in einem array ab.
    danach möchte ich die größte zahl ausgeben, und diese finde ich anhand einer for schleife herraus, aber leider funktioniert das nicht ganz.

    ich würde mich über tipps und ratschläge freuen, damit mir das beim nächsten mal nichtmehr passiert 🙂

    lg und vielen dank

    hier der code:

    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <time.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    int main(int argc, char** argv) {
    	srand(time(NULL));//für pseudozufallszahl erzeugung
    
    	int i_zufall[100];
    	int i_zaehlen;
    	int max;
    	int zahl1 = 0;
    
    	//Zufallszahlen erzeugen
    	for(int i = 0; i < 100; i++)
    	{
    		i_zufall[i] = rand () %1000-1000;
    	}
    
    	//mittelwert berrechnen
    	for(int i = 0; i <= 100; i++)
    	{
    		zahl1 = i_zufall[i];
    
    		if(zahl1 > max)
    		{
    			max = zahl1;
    		}
    
    	}
    
    	cout << max;
    
    	return 0;
    }
    


  • Dir fehlt die Initialisierung von i in Zeile 25.



  • m.e. schrieb:

    Dir fehlt die Initialisierung von i in Zeile 25.

    danke, ich habe das im code geändert, funktioniert aber leider immer noch nicht.

    ich vermute, das die werte garnicht in die arrayelemente geschrieben werden, aber von der syntax her sollte das doch korrekt sein 😕

    lg und danke



  • #include <iostream> 
    #include <cstdlib> 
    #include <string> 
    #include <time.h> 
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    int main(int argc, char** argv) {
    	srand(time(NULL));//für pseudozufallszahl erzeugung 
    
    	int i_zufall[100];
    	int max = 0;
    
    	//Zufallszahlen erzeugen 
    	for (int i = 0; i < 100; i++)
    	{
    		i_zufall[i] = rand() % 1000 + 0;
    	}
    
    	for (int i = 0; i < 100; i++)
    	{
    
    		if (i_zufall[i] > max) 
    		{
    			max = i_zufall[i];
    		}
    	}
    
    	cout << max;
    	return 0;
    }
    

    So sollte deins aussehen

    Edit: Statt rand() solltest du uniform_int_distribution verwenden
    Google:
    http://www.cplusplus.com/reference/random/uniform_int_distribution/



  • Welchen Wert hat denn max vor der zweiten for-Schleife?



  • Talon schrieb:

    #include <iostream> 
    #include <cstdlib> 
    #include <string> 
    #include <time.h> 
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    int main(int argc, char** argv) {
    	srand(time(NULL));//für pseudozufallszahl erzeugung 
    
    	int i_zufall[100];
    	int max = 0;
    
    	//Zufallszahlen erzeugen 
    	for (int i = 0; i < 100; i++)
    	{
    		i_zufall[i] = rand() % 1000 + 0;
    	}
    
    	for (int i = 0; i < 100; i++)
    	{
    
    		if (i_zufall[i] > max) 
    		{
    			max = i_zufall[i];
    		}
    	}
    
    	cout << max;
    	return 0;
    }
    

    So sollte deins aussehen

    Edit: Statt rand() solltest du uniform_int_distribution verwenden
    Google:
    http://www.cplusplus.com/reference/random/uniform_int_distribution/

    Danke, aber so hat es auchnicht funktioniert 😉

    ich habe das problem aber mittlerweile selbst lösen können, habe mich kurz mit was anderem beschäftigt und danach konnte ich wieder produktiv weitercoden 😃

    Hier mein jetziger code, habe das ein oder andere noch verändert.

    #include <iostream>
    #include <cstdlib>
    #include <string>
    #include <time.h>
    
    /* run this program using the console pauser or add your own getch, system("pause") or input loop */
    using namespace std;
    int main(int argc, char** argv) {
    	srand(time(NULL));//für pseudozufallszahl erzeugung
    
    	int i_zufall[99];
    	int i_zaehlen;
    	int max = 0;
    	int zahl1 = 0;
    
    	//Zufallszahlen erzeugen
    	for(int i = 0; i < 100; i++)
    	{
    		i_zufall[i] = rand () %2000;
    		i_zufall[i] -= 1000;
    
    	}
    
    	//mittelwert berrechnen
    	for(int i = 0; i <= 100; i++)
    	{
    		zahl1 = i_zufall[i];
    
    		if(zahl1 > max)
    		{
    			max = zahl1;
    		}
    	}
    
    	cout << max;
    
    	return 0;
    }
    

    trozdem danke für eure hilfe!



  • int i_zufall[99];
    ...
        for(int i = 0; i < 100; i++)
    ...
        for(int i = 0; i <= 100; i++)
    

    In ein Array, das 99 Elemente aufnehmen kann, fügst du 100 ein und betrachtest dann 101. Das ist falsch!

    Im Übrigen: "funktioniert nicht" ist keine Fehlerbeschreibung.



  • das ist ja jetzt noch "falscher" als davor!

    int max = 0; // Maximum setzt du auf 0
        int zahl1 = 0; 
    
        //Zufallszahlen erzeugen 
        for(int i = 0; i < 100; i++) 
        { 
            i_zufall[i] = rand () %2000; 
            i_zufall[i] -= 1000;  // hier erzeugst du Zahlen zwischen -1000 und +1000
    
        }
    

    d.h. es ist durchaus möglich (wenn auch unwahrscheinlich - aber das ist jetzt mal egal), dass das Array i_zufall[i] nur negative Werte hat.
    Dein Algorithmus liefert aber 0 als größten Wert - das stimmt so nicht!

    int i_zufall[99];
    

    naja, das ist eben auch falsch. Du hast nun 99 Einträge, iterierst aber von Index 0-99 => also 100 Einträge.

    zahl1 = i_zufall[i];
    

    das ist auch unnötig, greif doch direkt auf i_zufall[i] zu statt das erstmal in eine andere Variable zu kopieren.



  • die max-Berechnung geht kürzer

    max = *max_element(i_zufall, i_zufall + 100);
    


  • Du initialisierst max mit dem falschen Wert.

    Wenn du nur negative Werte hast, bekommst du ein falsches Ergebnis.

    Eine Möglichkeit ist, max mit dem kleinsten möglichen Wert zu initialisieren.
    Da dieser Wert aber vom Typ von max abhängig ist, nimmt man besser einen Wert aus dem Array.


Anmelden zum Antworten