====== Unterprogramme mit Ein- und Ausgabeparametern ====== Es gibt jedoch auch viele Probleme, bei denen die Ausführung des Unterprogramms Ergebnisse liefert, die später im Hauptprogramm verwendet werden müssen. Dazu dienen sogenannte **Ein/Ausgabeparameter**. Diese Parameter werden mit einem **&**-Zeichen gekennzeichnet. ==== Beispiel ==== Kopiere den Programmcode und teste das Programm. #include #include using namespace std; void berechnung(int &n, int &sum); int main() { int zahl, summe=0; cout <<"Dieses Programm summiert alle Zahlen von 1 bis n"; cout <<"\n Zahl n: "; cin >> zahl; cout<<"\n Summe: 1 ... "<0) { berechnung(zahl, summe); cout << summe; } else{cout<<"Es wurde ein falscher Wert eingegeben";} cout<<"\n\n Die Variable zahl hat nun den Wert: " << zahl; getch(); } //Hauptprogramm void berechnung(int &n, int &sum){ sum=0; while(n>0){ sum=sum+n; n--; } } //Berechnung Beide Parameter sind Ein/Ausgabeparameter. ''n'' wird innerhalb von Berechnung verändert, weshalb auch der veränderte Wert zurückgegeben wird, als ''zahl''. Ändere den Kopf von ''berechnung'', sodass ''n'' ein reiner Eingabeparameter ist und ''sum'' ein Ein/Ausgabeparameter. ==== Aufgabe 1 ==== Schreibe ein Programm (zeitumwandlung.cpp), welches Sekunden in Stunden, Minuten und Sekunden umwandelt. Die Umwandlung soll mit Hilfe des Unterprogramms ''void umwandeln'' (Eingabeparameter: ein->long; Ein/Ausgabeparameter: h, m, s) realisiert werden. ++++ Lösung| /* void umwandeln(long ein, int &stun, int &min, int &sek); int main() { long eingabe; int stunden, minuten, sekunden; cout << "Dieses Programm rechnet Sekunden in Stunden, Minuten und Sekunden um!\n"; cout << "Bitte geben Sie die Anzahl der Sekunden an: "; cin >> eingabe; umwandeln(eingabe, stunden, minuten, sekunden); cout < */ ++++ ==== Aufgabe 2 ==== Schreibe ein Programm (winkelumwandlung.cpp), welches Dezimalgrad in Grad, Minuten und Sekunden umwandelt.\\ (Eingabeparameter: dezgrad->float; Ein/Ausgabeparameter: g, m, s ->int ) Testdaten: Die Eingabe von 30.2556 soll dann 30 Grad 15 Minunten 20 Sekunden liefern. Hinweis: Du erhältst die Vor- bzw. Nachkommastellen einer Dezimalzahl, indem du ein Type-Casting durchführst. Z.B. liefert ''grad = (int)dezgrad;'' die Vorkommastellen, ''help = dezimalgrad - grad''; dann die Nachkommastellen. Die Variable ''grad'' besitzt dabei den Typ ''int'', die Variable ''help'' den Typ ''float''. ==== Aufgabe 3 ==== Schreibe ein Unterprogramm, welches auf zwei Nachkommastellen rundet.\\ (Ein/Ausgabeparameter: zahl->double) ++++ Lösung| void round(double &zahl) { zahl=(double)(int)(zahl*100+0.5)/100; } ++++