# Funktion deklarieren



## thehasso (6. April 2008)

Hallo, 

Diesesmal hab ich eine frage zu Funktionen, deswegen auch ein neuer Thread. Ich hab mir ne Menge an Informationen gesammelt das Funktionen zur besseren übersichtlichkeit dienen und das Programm dadurch besser Strukturiert ist und besser zum Anschein kommt. 

Ich selbst habe versucht eine Anweisung als Funktion zu schreiben jedoch bis jetzt kein Erfolg. Ich hoffe mir kann jemand das problem zeigen .

Beim Komplemieren steht jedes mal .



> 1>------ Neues Erstellen gestartet: Projekt: aufgabe2.c, Konfiguration: Debug Win32 ------
> 1>Die Zwischen- und Ausgabedateien für das Projekt "aufgabe2.c" mit der Konfiguration "Debug|Win32" werden gelöscht.
> 1>Kompilieren...
> 1>aufgabezwei.c
> ...





```
#include <stdlib.h> 
#include <stdio.h> 
#include<math.h> 
#include "conio.h" 

int klein(int min, int min_a, int umsatz[12], int umsatza[12], int i);// Dekleration der Funktion 1
int groß(int max, int max_a, int umsatz[12], int umsatza[12], int i); // Dekleration der Funktion 2


int main() 
{ 

 
int const n=11; 
int umsatz[12],umsatza[12],m1,m2,i;
double standardabweichung; 
int umsatz_summe=0; // char* monate [12]=... 
int mittelwert=0; 
char monate[12][12] = {"Januar", "Ferbruar", "März", "April", "Mai", "Juni", "Juli", "August", "September", "Oktober", "November", "Dezember" }; 
char jahr[12][5] = {"2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007", "2007"}; 

printf("\n\tHandelsfirma A & B GmbH\n"); 

printf("Menue:\n"); 
printf("1: - Umsaetze eingeben\n"); 
printf("2: - Programm Wiederholen\n"); 
printf("3: - Ermittlung kleinster Wert\n"); 
printf("4: - Ermittlung groesster Wert\n"); 


printf( "\nBitte geben Sie die Daten fuer das 1. Unternehmen ein:\n" );

		for(i=0;i<=n;i++){
    
			printf("Bitte %i -ten Umsatz fuer %s %s \n",i+1,monate[i],jahr[i]);  // Eingabe 
			printf("Eingabe:");scanf("%i",&umsatz[i]); 
		}


printf( "\nBitte geben Sie die Daten fuer das 2. Unternehmen ein:\n" );

		for(i=0;i<=n;i++){
			
			printf("Bitte %i -ten Umsatz fuer %s %s \n",i+1,monate[i],jahr[i]);  // Eingabe 
			printf("Eingabe:");scanf("%i",&umsatza[i]); }


        umsatz_summe+=umsatz[i];  // Berechnung Summe 
        mittelwert=umsatz_summe/n; // Berechnung Mittelwert 
		standardabweichung = sqrt((umsatz_summe) / (n-1));

    
printf("\n--------------------------------------------------------------------------------\n"); 
//printf("\n:Eintrag:\t:Monat:\t:Jahr:\t\t:Umsatz:\n"); 
    for (i=0;i<=11;i++) 
    { 
        printf("%5i. %10s %10s %10i",i+1 ,monate[i],jahr[i],umsatz[i]);  //Ausgabe Umsatz, Monat, Jahr 
        printf("%5i. %10s %10s %10i",i+1 ,monate[i],jahr[i],umsatza[i]);  //Ausgabe Umsatz, Monat, Jahr 
        printf("\n"); 
	}
printf("\n--------------------------------------------------------------------------------\n"); 


printf("\nDie Summe ist:%i Mittelwert:%.2f Standradabweichung: %i",umsatz_summe,mittelwert,standardabweichung); // Ausgabe Summe


		int klein(int min, int min_a, int umsatz[12], int umsatza[12], int i);
		int groß(int max, int max_a, int umsatz[12], int umsatza[12], int i);

printf("Die Niedrigste Umsatz Unternehmen 1 ist %i\n Niedrigste Umsatz Unternehmen 2 ist:%i",min,min_a);
printf("Die Maximimale Umsatz Unternehmen 1 ist %i\n Maximale Umsatz Unternehmen 2 ist:%i",max,max_a);

// Hier soll die Funktion aufgerufen werden.
// int klein
//printf( "Firma 1 min. Umsatz %i im Monat %s, \nFirma 2 min. Umsatz %i im Monat %s", min, monate[min], min_a, monate[min_a] );


system("pause"); 

}

int klein(int min, int min_a,int umsatz[12], int umsatza[12], int i) // Definition der Funktion 1
{		

	int min = umsatz[0];
	int min = umsatza[0];
	int umsatz[12];
	int umsatza[12];
	int i;

	for(i=0;i<11;i++)
	{
		if( min > umsatz[i] ){min = umsatz[i];} 
		if( min > umsatza[i] ){min_a = umsatza[i];} 
	}
		//- die return-Anweisung kann auch ganz fehlen, dann erfolgt der Rücksprung in die aufrufende Funktion beim 
					//Erreichen des Funktionsendes (der schließenden geschweiften Klammer um den Funktionkörper) 
}

int groß(int max, int maxa, int umsatz[12], int umsatza[12], int i) // Definition der Funktion2
{
int max = umsatz[0];
int max_a = umsatza[0];
int umsatz[12];
int umsatza[12];
int i;

for (i=0; i<11; i++)
{
if(max < umsatz[0]){ umsatz[0]=max;}
if(max_a < umsatza[0]){umsatz[0]=max;}
}


}
```



lg thehasso


----------



## devDevil (6. April 2008)

Die Frage/Aufforderung soll dicht angreifen, sondern dir einen diskreten Anschubser geben:
Hast du die Fehlermeldungen gelesen? Weißt du wie man Variablen anlegt und ihnen einen Wert zuweißt? Es scheint nicht so, von d.h. ließ dir bitte nochmal ein C-Tutorial durch und belästige keinen mit solchen wirklich banalen Fehlern. In deinem Fall hast du z.B. direkt untereinander zwei Variablen vom Typ int mit Bezeichner min angelegt. Dass das nicht gehen kann sollte doch logisch sein. Woher soll der Compiler wissen welche Variable gemeint ist?


----------



## Beichtpfarrer (6. April 2008)

Bei jeder deiner Funktionen fehlt der Rückgabe Wert.
Bei der main mag das der compiler noch übergehen (auch wenn es unschön ist), aber bei den anderen Funktionen ist es absolut notwendig.

Du hast deine Funktion so deklariert, dass sie einen int zurückgeben.
Das bedeutet, du solltest die Funktion sollte etwa so aussehen:


```
int maximum(int feld[], int size) // übergib hier keine variablen, die nur lokal gebraucht werden..
{
 int _max = feld[0];

 for (int i=1; i<size; i++) // i < size , nicht i < size-1 !!
                                  // sonst uebergehst du das letzte element
 {
  if(_max < feld[i])
    _max = feld[i];   // nicht feld[0] = max; (oder hast du das wirklich gemeint?)
 }

 return _max;    // wicthig !
}
```


/edit:
Ergänzung, probier mal die [ cpp ] - tags für C/C++ Code, sieht schöner aus...


----------



## devDevil (6. April 2008)

Schreib dein Programm komplett neu und überleg bevor du schreibst!

Du fragst gar nicht nach was dein Benutzer denn jetzt machen will, zeigst ihm aber ein Menü an.

Dann gib deinen Variablen anständige Namen ... n wäre bsw. month_count und würde 12 als Wert bekommen, was anständige for-Schleifenbedingungen schaffen würde (i < month_count).

Dann guck dir mal an wie das mit Variablen richtig geht.


```
int min(int* first, int* last)
{        
    int tmp_min = *first;
    for (int* ptr = first; ptr != last; ptr++) if (*ptr < tmp_min) tmp_min = *ptr; 
    return tmp_min;
}

int max(int* first, int* last)
{
    int tmp_max = *first;
    for (int* ptr = first; ptr != last; ptr++) if (*ptr > tmp_max) tmp_max = *ptr; 
    return tmp_max;
}
```
 wären z.B. sehr schnelle Implementierungen von Minimum und Maximum. 

```
int min_first_business = min(sales_first, sales_first + month_count); // min. Umsatz von Unternehmen 1
int min_second_business = min(sales_second, sales_second + month_count); // min. Umsatz von Unternehmen 2
int min_total = min_first_business < min_second_business ? min_first_business : min_second_business; // min. Umsatz beider Unternehmen
```
 wäre dann ein extrem schnelles finden des Minimalen Umsatzes der beiden Unternehmen (business).


----------

