• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Zapisywanie sortowania do pliku.

Object Storage Arubacloud
0 głosów
450 wizyt
pytanie zadane 21 maja 2020 w C i C++ przez CHRN Nowicjusz (140 p.)

Witam. Mam do stworzenia kod w C++, który wczytuje z pliku liczby, sortuje je, a nastepnie zapisuje posortowane liczby do nowego pliku. Mam kody, który tylko wczytuje liczby i wyświetla posortowane. Co i w którym miejscu kodu powinienem użyć, aby zapisywało wynik do osobnego pliku ? 

#include <iostream>
#include <fstream>

using namespace std;

void czytaj(int *wsk, char *nazwa, int *ilosc);
void sortowanie(int [], int wielkosc);

int i=0;
int main()
{
cout<<"Wczytujemy dane do tablicy z pliku liczby.txt\n";
int dane[100];
char *nazwa=".\\liczby.txt";
czytaj(dane,nazwa,&i);
cout<<endl<<"Wczytane liczby to:\n\n";
for (int k=0;k<i;k++)
{
cout<<dane[k]<<" ";
}
cout << endl;

sortowanie(dane,i);
cout<<endl<<"Posortowane liczby to:\n\n";
for (int k=0;k<i;k++)
{
cout<<dane[k]<<" ";
}
cout<<endl;
system("PAUSE"); return 0;
}


void czytaj(int *wsk,char *nazwa, int *ilosc)
{
ifstream plik; 
plik.open(nazwa); 
while(!plik.eof()) { 

plik >>wsk[i++];
*ilosc++; }
plik.close(); 
}

void sortowanie(int dane [], int wielkosc)
{
int temp;

for (int i=0;i<wielkosc-1;i++)
for (int j=0;j<wielkosc-1;j++)
if(dane[j]>dane[1+j])
{
temp=dane[j];
dane[j]=dane[j+1];
dane[j+1]=temp;
}
}

 

1
komentarz 21 maja 2020 przez tkz Nałogowiec (42,000 p.)
Skoro masz funkcję "czytaj", to stwórz "pisz", która po prostu zapisuje do pliku. I tak działasz na tablicy, dane są zapisywane więc możesz z nimi podziałać.
2
komentarz 21 maja 2020 przez Asertywny Mądrala (5,430 p.)
Luźny komentarz. Nie nazywaj funkcji `sortowanie`. Funkcje są czasownikami, a zmienne i klasy rzeczownikami. Nazwij funkcję `sortuj` albo najlepiej `sort`.

Optymalnie - nie pisz w ogóle własnej funkcji sortującej tylko wykorzystaj tę z std.

1 odpowiedź

0 głosów
odpowiedź 22 maja 2020 przez VBService Ekspert (254,440 p.)
edycja 24 maja 2020 przez VBService

Jakiś czas temu na innym forum napisałem coś podobnego do tego co potrzebujesz.


#include <iostream>
#include <string>
#include <algorithm>
#include <fstream>
using namespace std;

void generuj_dane_losowe(int* tablica, int ile)
{
    srand(time(NULL));
    for( int i=0; i<ile; i++ )
    {
      tablica[i] = rand() % 89 + 10;
    }
}

void pokaz_dane(int* tablica, int ile)
{
    int linia = 1;
    for( int i=0; i<ile; i++ )
    {
      cout << tablica[i] << " ";
      if ((linia + i) % 10 == 0) cout << endl;
    }
}

void wczytaj_tablice_z_pliku(int* tablica, int ile, string nazwa_pliku)
{
    string linia;
    int i=0;

    ifstream plik(nazwa_pliku); 
    while(getline(plik, linia))
    {
      tablica[i++] = stoi(linia);
    }
    
    plik.close();
}

void zapisz_tablice_do_pliku(int* tablica, int ile, string nazwa_pliku)
{
    ofstream plik(nazwa_pliku);
    for(int i=0; i < ile; i++)
    {
      plik << tablica[i] << endl;
    }
    
    plik.close();
}

int main()
{
    int ile = 100;
    int tablica[ile];

    string plik1 = "dane1.txt";
    string plik2 = "dane2.txt";
    string plik3 = "dane3.txt";  
     
    cout << endl; 
    cout << "Generuję losowe dane do tablicy." << endl;
    generuj_dane_losowe(tablica, ile);

    cout << "Wygenerowane dane przed posortowaniem." << endl << endl;
    pokaz_dane(tablica, ile);

    cout << endl;
    cout << "Zapisuję dane nieposortowane do pliku: " << plik1 << endl;
    zapisz_tablice_do_pliku(tablica, ile, plik1);

    // Tablic zawiera dane, ale dla Twojego przykładu, zostanie wyczyszczona
    // i ponownie zostaną załadowane dane
    tablica[ile] = {};
    cout << "Pobieram dane z pliku: " << plik1 << " do posortowania." << endl;
    wczytaj_tablice_z_pliku(tablica, ile, plik1);

    cout << "Dane wczytane, zaczynam sortowanie." << endl;    
    cout << endl;
    cout << "Tablica posortowana rosnąco" << endl;
    sort(tablica, tablica+ile); // Tablica posortowana rosnąco
    pokaz_dane(tablica, ile);

    cout << endl;
    cout << "Zapisuję dane posortowane rosnąco do pliku: " << plik2 << endl;
    zapisz_tablice_do_pliku(tablica, ile, plik2); 

    cout << endl;
    cout << "Tablica posortowana malejąco" << endl;  
    sort(tablica, tablica+ile, greater <int>()); // Tablica posortowana malejąco
    pokaz_dane(tablica, ile);

    cout << endl;
    cout << "Zapisuję dane posortowane malejąco do pliku: " << plik3 << endl;
    zapisz_tablice_do_pliku(tablica, ile, plik3);

    return(0);  
}

Demo on-line,
Funkcje generuj_dane_losowe()pokaz_dane() zapożyczone z tego wpisu.

Podobne pytania

0 głosów
1 odpowiedź 373 wizyt
pytanie zadane 8 czerwca 2021 w Java przez Paluch22 Nowicjusz (230 p.)
0 głosów
1 odpowiedź 348 wizyt
pytanie zadane 20 września 2020 w C i C++ przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 563 wizyt

92,626 zapytań

141,486 odpowiedzi

319,846 komentarzy

62,009 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...