Pasta Place
/*
* Programmieren fuer Physiker, SS 2013
*
* Haeufigkeitstabelle aus eingelesenen Werten erzeugen
* (hier Lottozahlen). Ergebnisdatei schreiben.
*/
#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std ;
int main()
{
const int MaxAnz=100000 ; // Maximale Zahl an Werten
int Wert[MaxAnz] ;
const int Bereich=50 ; // Maximaler Wertebereich (hier 1-49)
int Haeuf[Bereich] ;
char QuellName[30], ZielName[30] ;
cout << "Haeufigkeitstabelle generieren" << endl ;
cout << "Quelldatei: " ;
cin >> QuellName ;
cout << "Ergebnisdatei: " ;
cin >> ZielName ;
// Daten einlesen
ifstream QuellDatei(QuellName) ;
if( 0==QuellDatei)
{
cout << "Kann Quelldatei nicht oeffnen. Stop." << endl ;
exit(1) ;
}
int Anz=0 ; // Anzahl erfolgreich eingelesener Werte!
// Einlesen bis zum Dateiende: Ergebnis von ">>" Ausdruck
// wird Null (also false) am Dateiende. Falls einlesen
// klappt ist das Ergebnis "true".
while (QuellDatei >> Wert[Anz])
{
cout << Wert[Anz] << " " ;
Anz++ ;
if (Anz >= MaxAnz)
{
cout << "Puh. Das sind mir zuviel Daten... Stop." << endl ;
exit(1) ;
}
}
QuellDatei.close() ;
cout << endl ;
cout << "Anzahl der Werte: " << Anz << endl ;
// Haeufigkeitstabelle generieren
for( int i=0; i<Bereich; i++) Haeuf[i]=0 ;
for( int i=0; i<Anz; i++)
{
int w=Wert[i] ;
if (w>=1 && w<Bereich) Haeuf[w]++ ;
else
cout << "Wert " << w
<< " ausserhalb Bereich. Nicht gezaehlt." << endl ;
}
// Daten ausgeben
ofstream ZielDatei(ZielName) ;
if( 0==ZielDatei)
{
cout << "Kann Ergebnisdatei nicht oeffnen. Stop." << endl ;
exit(1) ;
}
cout << "Wert Anzahl" << endl ;
ZielDatei << "# Wert Anzahl" << endl ;
for( int i=1; i<Bereich; i++)
{
cout << i << " " << Haeuf[i] << endl ; ;
ZielDatei << i << " " << Haeuf[i] << endl ;
}
ZielDatei.close() ;
}