Parameter übergeben?



  • Hallo
    Aufgabe ist es drei Zahlen einzulesen. (1.Funktion)
    Aus diesen drei Zahlen soll der Maximum bestimmt werden. (2.Funktion)
    In der main Funktion soll der Maximum ausgegeben werden.(3.Funktion)
    "Verwenden Sie keine globalen Variablen, sondern übergeben jeder Funktion die
    notwendigen Daten als Parameter."

    So das ganze soll mit 3 Funktionen geschehen. Es dürfen KEINE globalen Variablen genutzt werden. Ich hänge nun bei dem Problem, die in der 1. Funktion aufgenommen drei Werte zurückzugeben, denn eine Funktion kann ja schließlich nur einen Wert zurück geben. Ich stehe auf dem Schlauch. Das ganze sollte möglichst ohne einen Array funktionieren. Ich würde das ganze nur mit min. fünf Funktionen hin bekommen. Also in jeder Funktion einen Wert einlesen und diesen zurück geben...

    Könnt ihr mir helfen?

    Danke und frohe Weihnachten!



  • Du kannst deine 1. Funktion auch dreimal aufrufen 🙂

    Ansonsten kannst du die Werte auch mit Hilfe von Zeigern zurückgeben.

    Nimm die mal ein Beispiel bei den scanf Paramtern (Nein nicht bei dem Formatstring mit den %, sondern dahinter). Wie bekommst du dort die Werte?



  • #include <stdio.h>
    
    #define MAX_NUMS 5
    
    int* get_numbers()
    {
      static int numbers[MAX_NUMS];
      int i;
      for (i = 0; i < MAX_NUMS; ++i)
      {
        printf("Number %i: ", i + 1);
        scanf("%i", &numbers[i]);
      }
      return numbers;
    }
    
    int get_max(int *numbers)
    {
      int i, j = 0;
      for (i = 1; i < MAX_NUMS; ++i)
        if (numbers[i] > numbers[j])
          j = i;
      return numbers[j];
    }
    
    int main()
    {
      int num;
      num = get_max(get_numbers());
      printf("Highest number was: %i\n", num);
      return 0;
    }
    

    So in etwa? :xmas1:



  • er wollte keinen array =b

    orientier dich an dem hier:

    #include <stdio.h>
    #include <conio.h>
    
    int Calc_MinMax(int a, int b, int c, int mode);
    
    int main(void){
    
    	int a, b, c;
    
    	printf(" Berechnung von Min, Max und Mittelwert!\n");
    	printf("-=======================================-\n\n\n");
    
    	printf("Geben Sie bitte Zahl 1 ein: ");
    	scanf("%d", &a);
    	printf("Geben Sie bitte Zahl 2 ein: ");
    	scanf("%d", &b);
    	printf("Geben Sie bitte Zahl 3 ein: ");
    	scanf("%d", &c);
    
    	printf("\n\nGoesster Wert ist: %d\n", Calc_MinMax(a,b,c,1));
    	printf("Kleinster Wert ist: %d\n", Calc_MinMax(a,b,c,2));
    	printf("Mittlere Wert ist: %d\n", Calc_MinMax(a,b,c,3));
    
    	getch();
    
    	return 0;
    }
    
    int Calc_MinMax(int a, int b, int c, int mode){
    
    	switch(mode){
    		case 1:
    			if(a > b && a > c)
    				return a;
    			else
    				if(b > a && b > c)
    					return b;
    				else
    					return c;
    			break;
    		case 2:
    			if(a < b && a < c)
    				return a;
    			else
    				if(b < a && b < c)
    					return b;
    				else
    					return c;
    			break;
    		case 3:
    			if((a < b && a > c) || (a > b && a < c))
    				return a;
    			else
    				if((b < a && b > c) || (b > a && b < c))
    					return b;
    				else
    					return c;
    			break;
    	}
    
    	return -1;
    }
    

    is nicht auskommentiert, zur orientierung:

    wenn: mode = 1 --> Max berechnen
    wenn: mode = 2 --> Min berechnen
    wenn: mode = 3 --> Mitlerer berechnen

    was man noch einbauen könnte ist der mittelwert zu berechnen... aber ja, is ja open-source: viel spaß beim basteln xD



  • Ach so ich dachte er wollte nur keine arrays übergeben.. weil sonst spricht doch eigentlich nix dagegen oder? :xmas1:



  • @itedvo
    Wo ist denn die erste Funktion zur Eingabe? Dort liegt doch sein Problem.



  • Mehrere Werte ohne Array kann man einfach mit einer Struktur übergeben.

    typedef struct {
    int a,b,c;
    } Dreiwerte;
    ...
    Dreiwerte liesDreiwerte(){...}
    ...
    Dreiwerte dreiwerte = liesDreiwerte();
    


  • ach so... hups... ok da hab ich mich bei seinem problem vertan xD

    naja, dann machs in etwa so:

    void get_numbers(int *, int *, int *);
    
    int main(void){
    
     int a=0, b=0, c=0;
    
     printf("Es werden nun Zahlen eingelesen!\n\n");
    
     get_numbers(&a,&b,&c);
    
     // usw. (der rest is ja klar xD)
    
     return 0;
    }
    
    void get_numbers(int *a, int *b, int *c){
    
     printf("Geben Sie bitte die 1. Zahl ein: ");
     scanf("%d", a);  // & fehlt weil bereits mit einem pointer gearbeitet wird
     printf("Geben Sie bitte die 2. Zahl ein: ");
     scanf("%d", b);
     printf("Geben Sie bitte die 3. Zahl ein: ");
     scanf("%d", c);
    
    }
    

    es geht auch so:

    int get_number(int *);
    
    int main(void){
    
     int a=0, b=0, c=0;
    
     printf("1. Zahl: ");
     printf("%d", get_number(&a);
     printf("2. Zahl: ");
     printf("%d", get_number(&b);
     printf("3. Zahl: ");
     printf("%d", get_number(&c);
    
     getch();
     return 0;
    }
    
    int get_number(int *zahl){
    
      scanf("%d", zahl);
    
      return *zahl;
    }
    
    /*
    
    Bei dieser Version wird sowohl der Wert per pointer verändert wie auch zurück geliefert. 
    den vorteil sieht man hier genau: man muss den wert nicht zusätzlich einer variable übergeben, 
    wenn man den wert später noch ein mal braucht...
    */
    

    die 2. version ist portabler... wobei ich denke das man so eine funktion kaum mehr wo brauchen kann... etwas abgeändert wenn zum beispiel arrays oder structuren eingelesen werden müssen, dann ja, aber sonst eher nicht... aber für solche aufgaben eignet sich die 2. meiner meinung nach besser...



  • cooky451 schrieb:

    Ach so ich dachte er wollte nur keine arrays übergeben.. weil sonst spricht doch eigentlich nix dagegen oder? :xmas1:

    hast recht, spricht wirklich nix dagegen... :xmas1: :xmas1: :xmas2: :xmas2:


Anmelden zum Antworten