====== 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)); } ++++