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 <iostream>
#include <conio.h>
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 ... "<<zahl<<": ";
  if (zahl>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.

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 <<eingabe<<" Sekunden sind "<<stunden<<" Stunden, "<<minuten<<" Minuten und "<<sekunden<<" Sekunden!";
 
 
  getch();
  return 0;
}
 
void umwandeln(long ein, int &stun, int &min, int &sek)
{
	stun=ein/3600;
	ein=ein%3600;
	min=ein/60;
	sek=ein%60;
}

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.