Aus Datei Zahlen lesen, sortieren und wieder ausgeben

beimaik

Grünschnabel
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
 
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:
Code:
#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, " "));
 
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!
 
Also nochmal zur Klarheit: Du willst das in C machen, nicht C++, ja?!

In C wird das dann natürlich etwas länger.
Code:
#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?
 
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.
 
Das Programm habe ich zur Zeit und muss nun noch das Einlesen von Dateien hinbekommen, was müsste ich ändern?

Code:
/*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;
}
 
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:
Code:
#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.
 
Zurück