# Aus Datei Zahlen lesen, sortieren und wieder ausgeben



## beimaik (27. Juni 2005)

Hallo,
ich habe folgendes Problem, ich muss aus einer Datei Zahlen lesen und diese sortieren, danach auf den Bildschrim ausgeben. Ist egal welcher Algorithmus, muss auch nicht super effektiv sein das Programm. Es muss nur laufen 
Wäre super cool wenn mir jemand helfen könnte...

Schönen Tag noch

Maik


----------



## deepthroat (27. Juni 2005)

Also, was ist denn eigentlich dein Problem: das Einlesen, das Sortieren oder das Ausgeben - oder alles zusammen?

Du könntest aber zum Beispiel sowas machen:
	
	
	



```
#include <multiset>
#include <iterator>
#include <algorithm>
#include <fstream>

ifstream eingabe ("daten.txt");
multiset<int> sortmenge;
int zahl;

while (eingabe >> zahl) {
  sortmenge.insert (zahl);
}

copy (sortmenge.begin (), sortmenge.end (), 
      ostream_iterator<int> (cout, " "));
```


----------



## beimaik (27. Juni 2005)

alles zusammen ist mein Problem, ich komm mit C überhaupt nicht kla, normal mach ich sowas eben fix in Java, danke schon mal für deine schnelle antwort!


----------



## deepthroat (27. Juni 2005)

Also nochmal zur Klarheit: Du willst das in C machen, nicht C++, ja?!

In C wird das dann natürlich etwas länger. 
	
	
	



```
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>

FILE *datei;
if ( (datei = fopen("daten.txt", "r")) == NULL) 
  return errno;

int zahl;

while (fscanf (datei, "%i", &zahl) == 1) {
  /* zahl in datenstruktur einfügen. */
}

/* Sortieren, z.B. mit qsort () */

for (int i = 0; i < anzahl_elemente; ++i ) {
  printf ("%i ", datenstruktur[i];
}
puts ();
```

Da mußte jetzt natürlich noch einiges einfügen. Speziell die Datenstruktur ist kompliziert. Weißt du denn wenigstens wieviele Zahlen (maximal) in der Datei drinstehen?


----------



## beimaik (27. Juni 2005)

das ist egal, n paar würden schon reichen, c oder cpp ist eigentlich auch egal, Hauptsache das Programm ließt aus einer Datei ein paar Zahlen, sortiert diese und gibt sie auf dem Bildschrim aus.


----------



## beimaik (27. Juni 2005)

Das Programm habe ich zur Zeit und muss nun noch das Einlesen von Dateien hinbekommen, was müsste ich ändern?


```
/*bubble.c*/
#include <stdio.h>
/*Programm das Zahlen sortiert*/
# define TRUE 1
#define FALSE 0
#define NMAX 100
int main(void)
{
       int sortiert;           /*steuert die Schleife          */
        int i,n;                /*Index,Anzahl der Zahlen       */
        int x[NMAX];            /*Indizierte Zahlenwerte        */
        int h;                  /* Für Tausch                   */

        /*Einlesen der Zahlen   */

        printf("Bubble sortiert maximal %3d Zahlen !\n", NMAX);
        printf("Wieviel Zahlen sollen sortiert werden ?\n");
         scanf("%i", &n);
         for(i = 0; i < n; i++)
          {
             printf("%2i : ", i+1); scanf("%i", &x[i]);
          }

       /* Sortieren */

       sortiert = TRUE;

	while (sortiert) {
		sortiert = FALSE;
		for (i = 0; i < n - 1; i++) 
			if (x[i] > x[i+1]) {
				h = x[i];
				x[i] = x[i+1];
				x[i+1] = h;
				sortiert = TRUE;
			}
}


       /* Sortierte Zahlen ausgeben */
        for( i=0;i<n;i++)
          printf(" %2i : %6i\n", i, x[i]);

        return 0;
}
```


----------



## deepthroat (27. Juni 2005)

Na, den halbfertiges Programm hätteste ja auch gleich zeigen können.

Du müsstest halt erstmal 'ne Datei öffnen und dann statt von der Standardeingabe die Daten von der Datei aus lesen. Genau das hab ich ja bereits vorgemacht:
	
	
	



```
#include <stdio.h>
#include <errno.h>

FILE *datei;
int n = 0;

if ( (datei = fopen("daten.txt", "r")) == NULL) 
  return errno;

while (n < NMAX && fscanf (datei, "%i", &x[n]) == 1) {
  ++n;
}
fclose (datei);
```

Mein erster Vorschlag für C++ realisiert übrigens genau was du willst, du hättest nur noch eine main Funktion darumbauen müssen.


----------



## beimaik (27. Juni 2005)

Das Programm hab ich mir so zusammengesucht  *grins* hatte es bis vorhion ja noch nicht, schuldige.


----------



## beimaik (27. Juni 2005)

Vielen Dank für die Hilfe, hast mir wirklich geholfen (nicht ironisch gemeint)

cu


----------

