11-1_Funktionen_Input1

Werbung
Funktionen
Aufgabe:
Eingabe zweier Zahlen
---> Minimum bestimmen
Dann nochmals
Eingabe zweier Zahlen
---> Minimum bestimmen
Schreibaufwendige
Lösung:
int main(){
int min1, min2;
int z1, z2, z3, z4;
printf("4 Zahlen eingeben\n");
scanf("%d",&z1);
scanf("%d",&z2);
scanf("%d",&z3);
scanf("%d",&z4);
//...
...
if (z1<z2)
min1 = z1;
else
min1 = z2;
if (z3<z4)
min2 = z3;
else
min2 = z4;
}
Die Nachteile sind:
Schreibarbeit
Unstrukturiertes Programm
Elegantere
Lösung:
Funktionen
(Black Box)
Systemisch:
Black-Box-Methode
Input
Output
Black
Box
Input - Schnittstellenkanal
zahl1
Funktion:
zahl2
mini
mini
Output - Schnittstellenkanal
WICHTIG:
Die Schnittstellenkanäle
bzw. Input und Output
werden hier durch Variablen
realisiert.
int main(){ Wie heisst der Aufruf der
int min1, min2;
Funktion?
int z1, z2, z3, z4;
printf("4 Zahlen eingeben\n");
scanf("%d",&z1);
scanf("%d",&z2);
scanf("%d",&z3);
scanf("%d",&z4);
min1 = mini(z1,z2); // Aufruf
min2 = mini(z3,z4); // Aufruf
printf("Min1=%d, Min2=%d",
min1,min2);
}
Der Funktionsaufruf:
min1
mini(z1,z2);
kann man sich als einen
Kanal vorstellen, der den
Output von rechts nach links
transportiert.
Der Funktionsaufruf:
min1 = mini(z1,z2);
Zur besseren Vorstellung
kann man sich diesen
Funktionsaufruf auch wie
folgt anschaulich vorstellen:
mini(z1,z2);
Ein Zapfhahn wird in den Aufruf
angebracht.
Die Anzahl der Tropfen (bzw. der
Flüssigkeit), d.h. min(z1,z2) wird ....
min1
in einem Behälter (einer
Variablen) mit dem Namen min1
aufgefangen (abgespeichert).
Weitere Möglichkeit eines
Funktionsaufrufs:
z1 = 4; z2 = 8;
6
min1 = mini(6,17);
8
min2 = mini(z2,19);
4
min1 = mini(13,z1);
1
min1
= mini(4,mini(2,1));
Aber wie wird die Funktion
definiert (programmiert) ?
Datentyp der
Funktion
lokale Variable
int mini(int zahl1, int zahl2){
int erg;
if(zahl1 <= zahl2)
erg = zahl1; return erzeugt output.
Funktion wird dann sofort
else
verlassen. D.h. es kann nur genau
erg = zahl2; ein output realisiert werden
return(erg);
}
Der sogenannte formale Parameter ist ein InputParameter, weil er einen reinen Input darstellt.
Dies nennt man auch call by value
z.B. ersetzen beim vorigen Aufruf von mini(z2,19) die aktuellen
Parameter z2 und 19 die formalen Parameter (Platzhalter) zahl1 und
zahl2
int mini(int zahl1, int zahl2){
int erg;
if(zahl1 <= zahl2)
erg = zahl1;
else
erg = zahl2;
return(erg);
}
An den formalen Parameter wird beim Aufruf
der Funktion ein tatsächlicher Übergabewert, der
so genannte aktuelle Parameter übergeben.
Welche Variablen der
Funktion mini sind vom
Hauptprogramm aus sichtbar
und umgekehrt ?
int mini(int zahl1, int zahl2) {
int erg;
if(zahl1 <= zahl2)
erg = zahl1;
else
erg = zahl2;
return(erg);
}
Was geschieht ganz genau
beim Aufruf (vom
Hauptprogramm aus) der
Funktion
min1 = mini(z1 , z2);
im Gegensatz zum formalen Parameter heißen
diese Parameter lokale Variable
min1 = mini(z1 , z2);
zahl1=z1
(Kopie)
zahl2=z2
(Kopie)
int erg;
if(zahl1 <= zahl2)
erg = zahl1;
else
erg = zahl2;
return(erg);
Beispiel:
z1 = 7; z2 = 3;
3 min1 = mini(z1 , z2);
3
7
int erg;
7
3
if(zahl1 <= zahl2)
7
erg = zahl1;
else
3
3
erg = zahl2;
3
return(erg);
#include "stdafx.h"
#include <stdio.h>
int mini(int zahl1, int zahl2);
int main(){
int min1, min2;
int z1, z2, z3, z4;
printf("1.Zahl eingeben\n");
scanf("%d",&z1);
printf("2.Zahl eingeben\n");
scanf("%d",&z2);
printf("3.Zahl eingeben\n");
scanf("%d",&z3);
printf("4.Zahl eingeben\n");
scanf("%d",&z4);
min1 = mini(z1,z2);
min2 = mini(z3,z4);
printf("1.Minimum=%d\n",min1);
printf("2.Minimum=%d\n",min2);
return 0;
}
int mini(int zahl1, int zahl2){
int erg;
if(zahl1 <= zahl2)
erg = zahl1;
else
erg = zahl2;
return(erg);
}
// Deklaration
Dies ist die Funktion main.
Sie besitzt keine Parameter und
wird im Gegensatz zu allen
anderen Funktionen automatisch
(ohne Zutun des Programmierers)
beim Programmstart aufgerufen!
D.h. die in ihr enthaltenen
Anweisungen werden ausgeführt.
// Definition
Dies ist die Funktion mini
Bemerkung:
Funktion mini wird in der Funktion
main (Hauptprogramm) benutzt,
bevor sie erst später weiter unten
definiert wurde. Deshalb muß sie
dem Hauptprogramm bekannt
gemacht werden, deshalb
Deklaration der Funktion vor main:
#include "stdafx.h"
#include <stdio.h>
int mini(int zahl1, int zahl2);
int main(){
...
min1 = mini(z1,z2);
...
Aufgaben
Realisieren Sie die folgenden
Funktionen und rufen diese in main
je einmal auf:
1) Maximum zweier Zahlen
2) Mittelwert dreier Zahlen
3) Taschenrechner
#include "stdafx.h"
#include <stdlib.h>
double maximum(double zahl1, double zahl2);
double taschenrechner(double z1, double z2,
char modus);
double mittelwert(double z1, double z2,
double z3);
int main(){
double max, durchschnitt, erg;
max = maximum(5 , 3.6);
durchschnitt = mittelwert(2, 6, 4);
erg = taschenrechner(7, 9, '+');
printf("Maximum=%f\n", max);
printf("Mittelwert=%f\n", durchschnitt);
printf("TR-Ergebnis=%f\n", erg);
return 0;
}
double maximum(double zahl1, double
int erg;
if(zahl1 < zahl2)
erg = zahl2;
else
erg = zahl1;
return erg;
}
zahl2){
double mittelwert(double z1, double z2,
double z3){
return (z1+z2+z3)/3;
}
double taschenrechner(double z1,
double z2, char modus){
double erg;
if(modus == '+'){
erg = z1+z2;
}
else if(modus == '-'){
erg = z1-z2;
}
else if(modus == '*'){
erg = z1*z2;
}
else{
erg = z1/z2;
}
return erg;
}
Bemerkung:
Soll eine Funktion über ihren
Namen keinen Wert
zurückgeben, dann hat sie
den Datentyp void.
void nichts(int note){
if(note <= 4)
printf("gut\n");
else
printf("weniger gut\n");
//auch möglich:
//return;
}
Bemerkung:
Hat eine Funktion keinen
Parameter, so wird dies in
der Parameterliste mit void
dargestellt.
(void kann auch weggelassen
werden).
void ausgabe (void){
printf("Hallo MESK\n");
}
// auch möglich:
/*
void ausgabe (){
printf("Hallo MESK\n");
}
*/
Wo macht eine Funktion Sinn, die
keinen Parameter hat und auch nichts
zurückgibt ?
Am Anfang eines Programms sollte der
Anwender sogenannte Programminfos
auf den Bildschirm bekommen, die ihn
darüber aufklären, wie (z.B. welche
Tasten er wann drücken soll) er das
Programm bedienen soll.
Struktogramm einer
Funktion:
Hier kommt Funktionsaufruf rein.
Geben Sie ein Beispiel dazu an!
erg = mini(3, 5)
Die Funktion selbst (der
Funktionenkörper) wird wieder
in ein Struktogramm gepackt,
vor das der Name, der
Parameter und die
Beschreibung der Funktion
geschrieben wird.
Beispiel:
Darstellen der Funktion mini
(siehe oben) durch ein
Struktogramm
i bedeutet Input-Parameter
Name: mini
o bedeutet Output-Parameter
Parameter:
(i) double z1 : eine Zahl
Wer will, kann statt return
(i) double z2 : eine Zahl
auch Rückgabe schreiben
(o): das Minimum dieser 2 Zahlen
Beschreibung: Berechnet von den 2 Zahlen z1 und z2
das Minimum.
z1 < z2
F
W
erg = z1
erg = z2
return erg
TIPP:
Der besseren übersichtlicheren
Darstellung wegen, kann man
die Funktion (Funktionen) in
eine Header-Datei schreiben
und dann mit
#include ...
wieder einfügen.
Welche Funktionen kennen Sie
schon, bevor Sie diese
Präsentation angeschaut
haben?
main()
scanf(...)
printf(...)
Herunterladen