Array mit Zahlen füllen und verschiedene Operationen ausführen



  • Hallo,

    ich sitze hier grade an einer Aufgabe bezüglich dem Umgang mit Arrays.
    Und zwar sollen wir erstmal nur verschiedene Rechenoperationen ausführen und ich hab da ein Problem mit einer Vorgabe.

    Wenn ich ein Array per Abfrage des Inhalts erstelle funktioniert das auch.
    Benutze ich aber eine Funktion zum füllen mit Zufallszahlen kommt irgendwie immer das gleiche bei raus.
    Liegt das am begrenzten Zahlenraum der Random-Funktion? Oder hab ich das sonst wo nen Fehler drin?

    Thx schon mal

    #include "stdio.h"
    #include "stdlib.h"
    float findmax(float array[], int n){
        int i;
        float maximum;
        maximum = array[0];
        for(i = 0; i < n; i++){
            if(maximum < array[i])
                maximum = array[i];
        }
        return maximum;
    }
    float findmin(float array[], int n){
        int i;
        float minimum;
        minimum = array[0];
        for(i = 0; i < n; i++){
            if(minimum > array[i])
                minimum = array[i];
        }
        return minimum;
    }
        int main(int argc, char* argv[]){
        const int n = 200;
        float array[n], barray[n];
        int i;
        float min,max;
        for( i=0; i<n; i++ ){
            array[i] = (float) rand()/RAND_MAX;
            barray[i] = (float) rand()/RAND_MAX;
    }
        printf( "%d Zufallszahlen erzeugt\n", 2*n);
    
        /*int main(){
        float array[10];
        float max,min;
        int n,i;
        printf("Anzahl d. Elemente ");
        scanf("%d",&n);
        printf("Array eingeben: ");
        for(i = 0; i < n; i++){
            scanf("%f",&array[i]);
        }*/
    
        max = findmax(array, n);
        min = findmin(array, n);
        printf("\nMaximum ist %f", max);
        printf("\nMinimum ist %f\n\n", min);
        return 0;
    }
    


  • Das ist Absicht. Rand wird wahrscheinlich immer mit dem gleichen Wert initialisiert und liefert deshalb immer gleiche Zufallswerte. Deswegen auch Pseudozufallszahlen. Warum "wahrscheinlich": Du initialisierst nirgends mittels srand().



  • Beliebt ist es, srand mit der aktuellen Zeit als Argument aufzurufen.
    Solange das Programm nicht in der selben Sekunde startet, kommen am Anfang verschiedene Zahlen raus.

    #include <stdlib.h>
    #include <time.h>
    ...
    srand(time(NULL));
    

    Das brauchst du auch nur einmal im Programm am Anfang machen.



  • knivil schrieb:

    Das ist Absicht. Rand wird wahrscheinlich immer mit dem gleichen Wert initialisiert und liefert deshalb immer gleiche Zufallswerte. Deswegen auch Pseudozufallszahlen. Warum "wahrscheinlich": Du initialisierst nirgends mittels srand().

    Das hieße wenn ich auf die Art mehrere Zahlen erzeugen sind die alle gleich? Oo

    Und noch eine andere Frage:
    Wenn ich array1 und array2 addieren möchte und das Ergebnis wieder in array1 schreiben will. Geht das direkt ohne Umweg über ein array3, dass dann in array1 geschrieben wird? Komme da nicht weiter.



  • So wie du

    b1 = b1+b2;
    

    schreiben kannst, kannst du auch

    a1[0] = a1[0]+a2[0];
    

    schreiben.
    Für die 0 darfst du auch eine Laufvariable einsetzten. 🙂



  • Ach, vergessen: die b1 und b2 sind normale Variablen (char, int, double, ...), keine Arrays.



  • DirkB schrieb:

    Beliebt ist es, srand mit der aktuellen Zeit als Argument aufzurufen.
    Solange das Programm nicht in der selben Sekunde startet, kommen am Anfang verschiedene Zahlen raus.

    #include <stdlib.h>
    #include <time.h>
    ...
    srand(time(NULL));
    

    Das brauchst du auch nur einmal im Programm am Anfang machen.

    Aaaaah funktioniert, danke!

    DirkB schrieb:

    So wie du

    b1 = b1+b2;
    

    schreiben kannst, kannst du auch

    a1[0] = a1[0]+a2[0];
    

    schreiben.
    Für die 0 darfst du auch eine Laufvariable einsetzten. 🙂

    Sieht irgendwie so nach "selbst in den Schwanz gebissen" aus ^^
    Aber ok wenn das so geht akzeptiere ich das 😉



  • Gimmick schrieb:

    Sieht irgendwie so nach "selbst in den Schwanz gebissen" aus ^^
    Aber ok wenn das so geht akzeptiere ich das 😉

    Kanntest du das nicht?
    Wenn du z.B. in einer for-Schleife nur jeden 2. Wert haben willst, geht das doch auch so:

    for( i=0; i<n; i=i+2){
    

    In C gibt es sogar eine Kurzschreibweise dafür:

    i += 2;
    

    Oder die obigen Beispiele:

    b1 += b2;	
    a1[0] += a2[0];
    

    Es geht auch mit anderen Operatoren.



  • DirkB schrieb:

    Gimmick schrieb:

    Sieht irgendwie so nach "selbst in den Schwanz gebissen" aus ^^
    Aber ok wenn das so geht akzeptiere ich das 😉

    Kanntest du das nicht?
    Wenn du z.B. in einer for-Schleife nur jeden 2. Wert haben willst, geht das doch auch so:

    for( i=0; i<n; i=i+2){
    

    In C gibt es sogar eine Kurzschreibweise dafür:

    i += 2;
    

    Oder die obigen Beispiele:

    b1 += b2;	
    a1[0] += a2[0];
    

    Es geht auch mit anderen Operatoren.

    Ja irgendwie hatte ich ein Problem damit, dass da was mit sich selbst ersetzt wird, oder wie man das auch immer beschreiben soll. Aber wenn ich ein wenig drüber nachdenk macht das schon Sinn 😃


Anmelden zum Antworten