5.1 Textzeile in Zahlenfolge umwandeln
Das folgende Programm dient dazu zwei Zahlen der Größe nach zu ordnen. Nach Ausführen der Funktion sortierezwei sollen die als Adressen übergebenen Speicherstellen x und y die ursprünglichen Werte der Größe nach geordnet enthalten. Die Funktion führt bei Aufruf folgendes durch:
|
Im Programm existieren zwei Funktionen sortierezwei. Eine verarbeitet Zeiger auf Integer-Variablen, die andere Zeiger auf double-Variablen. Der C++ Compiler erkennt nicht nur am Namen, welche der beiden Funktionen beim Aufruf in der main-Methode gemeint ist, sondern er zieht auch Anzahl und Typ der übergebenen Parameter mit zu Rate. Beide Eigenschaften des Funktionskopfes, also der Funktionsname und Anzahl und Typ der Übergabeparameter machen die Signatur einer Funktion aus, durch die sie von anderen Funktionen unterscheidbar ist. Verwendet man zwei Funktionen gleichen Namens, jedoch mit unterschiedlichen Übergabeparametern, so nennt man das Überladen (Overloading) von Funktionen.
Während im ersten Teil des Programms sortierezwei(double* x, double* y) aufgerufen wird, verwendet der zweite Teil sortierezwei(int* x, int* y). Im zweiten Teil werden zudem nicht feste Zahlen verwendet, sondern es können Zahlen eingegeben werden, die über eine, gegenüber dem Beispiel im Thema Textverarbeitung, etwas verbesserte Routine zum Parsen der textuell eingegebenen Zahlen aus zahlenparsen.h verwendet wird. Wer sich zahlenparsen.h anschaut, wird feststellen, dass auch parse(..) in zwei überladenen Varianten existiert.
#include <iostream>
#include "zahlenparsen.h"
using namespace std;
void sortierezwei(int* x, int* y)
{
int hilf;
if(y<x)
{
hilf = *x;
*x = *y;
*y = hilf;
}
}
void sortierezwei(double* x, double* y)
{
double hilf;
if(y<x)
{
hilf = *x;
*x = *y;
*y = hilf;
}
}
int main(void)
{
double dx = 7.0;
double dy = 1.0;
sortierezwei(&dx,&dy);
cout<<"dx="<<dx<<" dy="<<dy<<endl;
//zweiter Teil:
string text;
char zeile[1000];
cout<<endl<<"Geben Sie durch Kommata getrennt zwei Integerzahlen ein:"<<endl;
cin.getline(zeile,1000);
text = zeile;
int* werte = parse(text,',');
int x = werte[0];
int y = werte[1];
cout<<endl<<"Es wurde eingegeben: 1. Zahl x="<<x
<<", zweite Zahl y = "<<y<<endl;
sortierezwei(&x,&y);
cout<<endl<<"Der Groesse nach aufsteigend geordnet: erste Zahl x = "<<x
<<", zweite Zahl y = "<<y<<endl;
}
Code 5.1-1: C++ Programm "sortierezwei.cpp"
sortierezwei, sortierezwei.cpp, zahlenparsen.h und sortierezwei.exe - Datei gepackt