Kleine Verständnis Frage zum Programm Code



  • Guten Abend,

    ich habe ein kleines C Programm, welches ein Array sortieren kann:

    #include <stdio.h>
    #define N 7
    
    void umkehr(float array[], int n);
    void ausgabe(float array[], int n);
    void tausche(float *a, float *b);
    
    void ausgabe(float ar[], int m) {
    	int i;
    
    	for (i = 0; i<m; i++)
    		printf("%5.2f ", ar[i]);
    	putchar('\n');
    }
    
    void umkehr(float ar[], int n) {
    	int i = 0, j = n - 1;
    
    	while (i<j) {
    		tausche(&ar[i++], &ar[j--]);
    	}
    }
    
    void tausche(float *a, float *b){
    	float temp;
    
    	temp = *a;
    	*a = *b;
    	*b = temp;
    }
    
    int main(void) {
    	float a[] = { -11.5, 6.2, 1.95, 0.3, -9.1, 99.99, 0. };
    
    	ausgabe(a, N);
    	umkehr(a, N);
    	ausgabe(a, N);
    	system("PAUSE");
    	return 0;
    }
    

    Mich würde hier im besonderen interessieren warum vorher dieser Teil definiert worden ist Warum ist das so und kann man das vielleicht besser machen ?:

    void umkehr(float array[], int n);
    void ausgabe(float array[], int n);
    void tausche(float *a, float *b);
    


  • Das sind die Funktionsprototypen, das ist damit die Funktion überall bekannt ist.
    Würde man die weglassen, dann könnten zwei Funktionen sich nicht gegenseitig aufrufen.
    Aber sinnvoller wäre es die Funktionskörper unter die main Funktion zu platzieren um die Übersichtlichkeit zu erhöhen.



  • Danke, das hat mir schon weitergeholfen.

    Ich hätte dann noch eine kleine Frage, wie kann es sein, dass zwei unterschiedliche Aufrufe trotzdem die gleichen Zahlen hervorbringen ?

    // 2. zuf = rand() % (b - a + 1) + a;
    		// 2. von 1 bis 6
    		zuf = rand() % b + a;
    		// 3. von 1 bis 6
    

    Wie kann das denn überhaupt sein ?

    #include <stdlib.h>
    #include <stdio.h>
    
    int main(void){
    	srand(time(0));
    	int a, b;
    	a = 1;
    	b = 6;
    	int zuf;
    
    	for (int i = 0; i <= 100; i++){
    		// 1. zuf = rand() % 6 + 1; von 1 bis 6
    		// 2. zuf = rand() % (b - a + 1) + a;
    		// 2. von 1 bis 6
    		zuf = rand() % b + a;
    		// 3. von 1 bis 6
    		printf("Zahl: %d  \n", zuf);
    	}
    
    	system("PAUSE");
    	return 0;
    
    }
    


  • // 2. zuf = rand() % (b - a + 1) + a;
    // (b - a + 1) + a = (6 - 1 + 1) + 1 = 7
    // zuf = rand() % b + a;
    // b + a = 6 + 1 = 7
    

    Fällt dir was auf? 🙂



  • 😃 😃 Genau !!!, die Basics...

    Unglaublich.. Danke sehr. Das wars für heute von mir 😉


Anmelden zum Antworten