Jak to zrobić?


(Lysyprezes) #1

Czy ktoś potrafi mi pomóc:

Napisz program pobierający z pliku txt o nazwie no załóżmy plik.txt :slight_smile: informacje w nim zawarte czyli liczby. Oczywiście za pomocą fgetc(). Następnie pobrane liczby ma posortować (metoda dowolną) i wynik zapisac do pliku sort.txt.

To wszystko w skrócie.

Kod na odczyt z txt znam, kod na sortowanie - no coś tam coś tam, na zapis też, ale za nic w świecie nie wiem jak to ze sobą zgrać...


(adpawl) #2

Możesz uzyć tablicy...

Robisz tak:

1.otwierasz plik do odczytu

2.wczytujesz kolejne liczby do tablicy (przy uzyciu np "while")

3.zamykasz plik do odczytu

4.sortujesz tablicę

5.otwierasz plik do zapisu

6.zapisujesz do niego tablicę

7.zamykasz...

W razie problemów poszukaj na http://www.4programmers.net/

tam jest sporo przykładów itp.


(Ryan) #3

Zakładam, że każda liczba w osobnej linii. Sortowanie bąbelkowe. Program pisałem w oknie odpowiedzi i może mieć błędy. W fgetc() nie ma nic oczywistego - użyję fscanf().

#include 

void main(void) {

  int tablica[1024]; // tablica statyczna dla prostoty

  int indeks = 0; // pozycja w pliku (linia)

  int i, j, min, minpos; // zmienne pomocnicze

  FILE *plik; // uchwyt pliku


  plik = fopen("plik.txt", "rt");

  while ( (!feof(plik)) && (indeks < 1024) ) {

    fscanf(plik, "%d", &tablica[indeks++]);

  }

  fclose(plik);


  plik = fopen("sort.txt", "wt");

  for (i=0; i
    min = tablica[i];

    minpos = i;

    for (j=i+1; j
      if (tablica[j] < min) {

        min = tablica[j];

        minpos = i;

      }

    }

    tablica[minpos] = tablica[i];

    tablica[i] = min;

    fprintf(plik, "%d\n", min);

  }

  fclose(plik);

}

Można na kilka prostszych lub krótszych sposobów. Kod sprawdzę później albo jak wrócę do domu.