====== Unterprogramme und Funktionen ======
Das folgende Programm soll eine double-Zahl auf zwei Dezimalstellen runden.\\
Dabei werden die unterschiedlichen Arten von Unterprogrammen bzw. eine Funktion mit Rückgabewert vorgestellt. Jeder Button führt das Runden anders durch:
* Runden mit Unterprogramm ohne Parameter
* Runden mit Unterprogramm mit Eingabeparameter
* Runden mit Unterprogramm mit Ein-/Ausgabeparameter
* Runden mit Funktion (mit Rückgabewert)
{{:inf:vis-c:grundlagen:screenyrunden.png|}}
===== Projekt Runden =====
//---------------------------------------------------------------------------
#include
#pragma hdrstop
#include "RundenUnit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void rundenohnepar() //keine Variablenübergabe
{
double zahl;
zahl=StrToFloat(Form1->Edit1->Text);
zahl=zahl*100+0.5;
zahl=(int)zahl;
zahl=zahl/100.0;
Form1->Label1->Caption=FloatToStr(zahl);
}
void rundenmitpar(double z) //Typ double muss übereinstimmen
{
z=z*100+0.5;
z=(int)z;
z=z/100.0;
Form1->Label2->Caption=FloatToStr(z);
}
void rundenmiteinauspar(double &z) //Ein-/Ausgabeparameter mit & vor Namen
{
z=z*100+0.5;
z=(int)z;
z=z/100.0;
}
double runden(double z) //Funktion mit Rückgabewert
{
z=z*100+0.5;
z=(int)z;
z=z/100.0;
return z; //Wert von z wird quasi der Funktion runden
//zugewiesen
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
rundenohnepar();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
double zahl;
zahl=StrToFloat(Edit1->Text);
rundenmitpar(zahl); //Aufruf der Funktion mit Eingabeparameter.
//hier hat zahl noch immer den Wert als vor Aufruf der Funktion!
ShowMessage(zahl);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button3Click(TObject *Sender)
{
double zahl;
zahl=StrToFloat(Edit1->Text);
rundenmiteinauspar(zahl); //Aufruf der Funktion mit Ein/Ausgabeparameter
//jetzt hat zahl einen anderen Wert als vor Aufruf der Funktion
Form1->Label3->Caption=FloatToStr(zahl);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button4Click(TObject *Sender)
{
double zahl;
zahl=StrToFloat(Edit1->Text);
Label4->Caption=FloatToStr(runden(zahl));
}
//---------------------------------------------------------------------------
==== Vertiefung ====
Erweitere das Programm um ein weiteres Edit-Feld, in dem die Anzahl der Nachkommastellen eingegeben werden können.\\
Die Funktion ''double runden'' soll eine weitere Eingabevariable vom Typ ''integer'' erhalten, sodass auch die Anzahl der Nachkommastellen eingegeben werden können.\\
Hinweis: Verwende dazu die Funktion ''pow(z,n)'', welche die n-te Potenz der Zahl z ermittelt. Dafür muss die Bibliothek math.h eingefügt werden:
#include
++++ Lösung:|
double runden(double z, int nk) //Funktion mit Rückgabewert
{
z=z*pow(10,nk)+0.5;
z=(int)z;
z=z/pow(10,nk);
return z; //Wert von z wird quasi der Funktion runden
//zugewiesen
}
void __fastcall TForm1::Button4Click(TObject *Sender)
{
double zahl;
int nachkomma;
zahl=StrToFloat(Edit1->Text);
nachkomma=StrToInt(Edit2->Text);
Label4->Caption=FloatToStr(runden(zahl,nachkomma));
}
++++