Funktion deklarieren

thehasso

Erfahrenes Mitglied
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
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(36) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306): Siehe Deklaration von 'scanf'
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(45) : warning C4996: 'scanf': This function or variable may be unsafe. Consider using scanf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details.
1> c:\program files\microsoft visual studio 9.0\vc\include\stdio.h(306): Siehe Deklaration von 'scanf'
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(67) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(68) : error C2143: Syntaxfehler: Es fehlt ';' vor 'Typ'
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(70) : error C2065: 'min': nichtdeklarierter Bezeichner
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(70) : error C2065: 'min_a': nichtdeklarierter Bezeichner
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(71) : error C2065: 'max': nichtdeklarierter Bezeichner
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(71) : error C2065: 'max_a': nichtdeklarierter Bezeichner
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(85) : error C2082: Neudefinition des formalen Parameters "min"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(86) : error C2082: Neudefinition des formalen Parameters "min"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(87) : error C2082: Neudefinition des formalen Parameters "umsatz"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(88) : error C2082: Neudefinition des formalen Parameters "umsatza"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(89) : error C2082: Neudefinition des formalen Parameters "i"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(102) : error C2082: Neudefinition des formalen Parameters "max"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(104) : error C2082: Neudefinition des formalen Parameters "umsatz"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(105) : error C2082: Neudefinition des formalen Parameters "umsatza"
1>c:\users\hasso\documents\visual studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\aufgabezwei.c(106) : error C2082: Neudefinition des formalen Parameters "i"
1>Das Buildprotokoll wurde unter "file://c:\Users\hasso\Documents\Visual Studio 2008\c++\helloworld\zeichenkette\zeichenkette\zeichenkette\seminaraufgabe\aufgabe2.c\aufgabe2.c\Debug\BuildLog.htm" gespeichert.
1>aufgabe2.c - 15 Fehler, 2 Warnung(en)
========== Alles neu erstellen: 0 erfolgreich, Fehler bei 1, 0 übersprungen ==========


Code:
#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
 
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?
 
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:

C++:
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...
 
Zuletzt bearbeitet:
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.

C++:
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.
C++:
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).
 

Neue Beiträge

Zurück