Pasta Place

Raw File Download
    Physik/Programmieren_und_Rechnernutzung/Programmieren_C++/Uebungen/SS_13/Uebungsbeispiele/U06/haeuf-tab.cc
/*
 * 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() ;
}