Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Sortowanie bąbelkowe wyników

Ostatnio zmodyfikowano 2016-04-17 20:40
Autor Wiadomość
Wojteky2000
Temat założony przez niniejszego użytkownika
Sortowanie bąbelkowe wyników
» 2016-04-17 12:19:30
Witam!
Chciałem stworzyć program, który posortowałby mi wyniki (które zostałyby pobrane z pliku tekstowego) i potem zapisał je w nowym pliku tekstowym. Póki co skleiłem coś takiego:


#include <iostream>
#include <fstream>
#include <cstdlib>
using namespace std;
string imie[100], nazwisko[100];
void sortowanie_babelkowe(int *tab, int n)
{
    for(int i=1; i<n; i++)
    {
        for(int j=n-1; j>=1; j--)
        {
            if(tab[j]<tab[j-1])
            {
                int bufor;
                bufor=tab[j-1];
                tab[j-1]=tab[j];
                tab[j]=bufor;
            }
        }
    }
}
int wynik[100];
int main()
{
    fstream plik;
    plik.open("wynik.txt",ios::in);
    if(plik.good()==false)
    {
        cout << "plik nie istnieje";
        exit(0);
    }
    string linia;
    int nr_linii=1;
 int liczba=0;
    while(getline(plik, linia))
    {

        liczba=liczba+1;
        nr_linii=nr_linii+1;
        switch(nr_linii)
        {
            case nr_linii: imie[liczba] = linia; break;
            case nr_linii: nazwisko[liczba] = linia; break;
            case nr_linii: wynik[liczba]=atoi(linia.c_str()); break;

        }

        nr_linii++;
    }
}


Jednak kompilator nie przyjmuje mi "case nr_linii", ponieważ nr_linii nie może pojawić się w stałem eksprecjii czy coś w tym stylu. Pomoglibyście? Oczywiście zastrzegam nie jest to praca domowa - robię to dla siebie na przyszłość gdyby się coś takiego przydało.
P-147347
carlosmay
» 2016-04-17 12:31:10
case nr_linii: imie[ liczba ] = linia; break;
Tutaj musi być wartość, np:
case 1: { } break;
P-147348
Wojteky2000
Temat założony przez niniejszego użytkownika
» 2016-04-17 12:46:41
No dobra ale ja nie mam określonej ilości wyników - program ma pobierać wyniki aż się linie skończą
P-147349
mateczek
» 2016-04-17 12:47:48
C/C++
int main()
{
   
    string imie[ 100 ], nazwisko[ 100 ];
    int wynik[ 100 ];
   
    fstream plik;
    plik.open( "test.txt", ios::in );
    if( plik.good() == false )
    {
        cout << "plik nie istnieje";
        exit( 0 );
    }
    string linia;
    int nr_linii = 0;
   
    while( getline( plik, linia ) )
    {
        int typTablicy = nr_linii % 3;
        int indexTablicy = nr_linii / 3;
       
        switch( typTablicy ) {
        case 0: imie[ indexTablicy ] = linia;
            break;
           
        case 1: nazwisko[ indexTablicy ] = linia;
            break;
           
        case 2: wynik[ indexTablicy ] = stoi( linia );
            break;
        }
        nr_linii++;
    }
}
P-147350
Wojteky2000
Temat założony przez niniejszego użytkownika
» 2016-04-17 13:34:34
a żeby można było użyć "stoi" to jaką bibliotekę trzeba zaimplementować, ponieważ kompilator mi nie przyjmuje tego i sygnalizuje, że stoi nie zostało zdeklarowane?
P-147353
mateczek
» 2016-04-17 13:44:01
std::stoi (C++11 only) //włączyć c++11 w opcjach kompilatora

napisałem stoi bo mi wygodnie to zapamiętać String TO Int. możesz inną funkcję użyć !!!
P-147354
Wojteky2000
Temat założony przez niniejszego użytkownika
» 2016-04-17 14:16:12
Okej dobra udało się już działa (użyłem funkcji atoi(linia.c tyle, że jest jeden problem - imiona i nazwiska z pliku pobiera prawidłowo, ale wyniku już nie. Gdy w pliku mam zapisane jako wynik 2 i 18 to program wyświetla mi 0 i 0. czym to może być spowodowane? A i jeszcze jedna sprawa - Jak mogę zobaczyć wynik mojego sortowania? udało mi się je zaimplementować (i widzę po czasie wykonywania programu, że rzeczywiście coś się sortuje, bo jest o 0,1 s więcej gdy wsadzę mu, że ma sortować) ale nie mam zielonego pojęcia jak wyświetlić ten wynik (może niekoniecznie musi być to gotowy kod ale chociaż pomysł na to (nie chce, żebyście robili wszystko za mnie)).
P-147356
mateczek
» 2016-04-17 16:25:51
jak chcesz sortować to lepiej zmienić ideę programu

napisz sobie klasę zawodnik z trzema polami oraz operatorem mniejszy
a do sortowania użyj algorytmu sort ze standardowej biblioteki


C/C++
#include <iostream>
#include <fstream>
#include<vector>
#include<algorithm>
using namespace std;
class zawodnik {
    string imie;
    string nazwisko;
    int wynik;
public:
    zawodnik( string im, string naz, int wyn ) {
        imie = im;
        nazwisko = naz;
        wynik = wyn;
    }
    bool operator <( zawodnik & z ) { //operator do porównania zawodników tu określisz po czym chcesz sortować
        //   return wynik<z.wynik;            // po wyniku
        return imie < z.imie; //alfabetycznie po imieniu
        //  return nazwisko<z.nazwisko;       //alfabetycznie po nazwisku
    }
    void przedstawSie() {
        cout << imie << " " << nazwisko << " " << wynik << endl;
    }
   
};

int main()
{
   
    vector < zawodnik > tablicaZawodnikow;
   
   
    fstream plik;
    plik.open( "test.txt", ios::in );
    if( plik.good() == false )
    {
        cout << "plik nie istnieje";
        exit( 0 );
    }
   
    while( 1 )
    {
        string im, naz, swyn;
        if( !getline( plik, im ) ) break;
       
        if( !getline( plik, naz ) ) break;
       
        if( !getline( plik, swyn ) ) break;
       
        tablicaZawodnikow.push_back( zawodnik( im, naz, stoi( swyn ) ) ); //zapakowanie do tablicy odczytanego z pliku zawodnika
       
    }
   
    sort( tablicaZawodnikow.begin(), tablicaZawodnikow.end() ); //sortowanie tablicy
    for( zawodnik & z: tablicaZawodnikow ) { //wyświetlenie posortowanej
        z.przedstawSie();
    }
   
   
}
P-147358
« 1 » 2
  Strona 1 z 2 Następna strona