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

Białe znaki(enter)- sortowanie

Ostatnio zmodyfikowano 2016-02-15 16:30
Autor Wiadomość
heheszek
Temat założony przez niniejszego użytkownika
Białe znaki(enter)- sortowanie
» 2016-02-15 15:34:10
Witam. Mam problem z sortowaniem bąbelkowym i białym znakiem w postaci Entera pod koniec pliku.

Nie wiem, czemu ale na końcu sortowania występują mi dwa zera, których nie ma w pliku. Co zrobić by ich nie było?

Opcja 3



C/C++
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstdio>
#include <conio.h>




using namespace std;


int main()

{
   
    int o;
    int i = 0;
   
   
    cout << "Autor: xxx\n";
    cout << "Program wykonuje osobno kolejne  operacje z podpunktow a-c z zadania\n\n";
    cout << "Prosze wybrac numer operacji\n";
    cout << "1 - a) Wyznacza ilosc liczb parzystych i nieparzystych ,a nastepnie zapisuje te liczby do osobnych plikow\n";
    cout << "2 - b) Wskazuje  najwieksza i najmniejsza liczbe \n";
    cout << "3 - c) Sortuje malejaco wszystkie liczby,a nastepnie je zapisuje do pliku \n";
    cin >> o;
    if( o == 1 ) {
        int n;
        char nazwa[ 100 ];
        cout << "Podaj z jakiego pliku chcesz odczytac wyrazy." << endl;
        cin >> nazwa;
        ifstream we( nazwa );
        ofstream parz( "parzyste.txt" );
        ofstream nieparz( "nieparzyste.txt" );
        if( !we )
        {
            cout << "Nie mozna otworzyc pliku";
            getchar();
            return 1;
        }
        while( !we.eof() )
        {
            we >> n;
           
            if( n % 2 == 0 )
            {
                parz << n << endl;
               
                i++;
               
            }
            else
                 nieparz << n << endl;
           
        }
       
        we.close();
        cout << "\nJest " << i << " liczb parzystych.\n";
        cout << "Jest " << 1000 - i << " liczb nieparzystych.\n";
    }
    if( o == 2 ) {
       
        int liczba, min, max;
        min = INT_MAX;
        max = INT_MIN;
       
        ofstream werdykt( "werdykt.txt" );
       
        char nazwa[ 100 ];
        cout << "Podaj z jakiego pliku chcesz odczytac wyrazy." << endl;
        cin >> nazwa;
        ifstream we( nazwa );
        if( !we )
        {
            cout << "Nie mozna otworzyc pliku";
            getchar();
            return 1;
        }
       
        while( !we.eof() )
        {
           
           
            we >> liczba;
           
           
            if( liczba < min )
            {
                min = liczba;
            }
            if( liczba > max )
            {
                max = liczba;
            }
           
        }
        werdykt << "Najwieksza liczba w pliku jest liczba: " << max << endl
        << "Najmniejsza liczba w pliku jest liczba: " << min << endl;
        we.close();
        cout << "Najwieksza liczba w pliku jest liczba: " << max << endl;
        cout << "Najmniejsza liczba w pliku jest liczba: " << min << endl;
       
    }
    if( o == 3 ) {
        int tab[ 1000 ] = { 0 };
        int temp = 0;
        int schowek, zamiana;
        ofstream sort( "posortowane.txt" );
        char nazwa[ 100 ];
        cout << "Podaj z jakiego pliku chcesz odczytac wyrazy." << endl;
        cin >> nazwa;
        ifstream we( nazwa );
        if( !we )
        {
            cout << "Nie mozna otworzyc pliku";
            getchar();
            return 1;
        }
       
        while( !we.eof() )
             we >> tab[ temp++ ];
       
        do
        {
            zamiana = 0;
            for( int i = 0; i < 1001; i++ )
            {
                if( tab[ i ] > tab[ i - 1 ] )
                {
                    zamiana = zamiana + 1;
                    schowek = tab[ i ];
                    tab[ i ] = tab[ i - 1 ];
                    tab[ i - 1 ] = schowek;
                }
            }
        }
        while( zamiana != 0 );
       
        for( int j = 0; j <= 1001; j++ )
        {
            sort << tab[ j ] << " " << endl;
            we.close();
           
           
        } }
   
    system( "PAUSE" );
    return 0;
}

Plik: http://sendfile.es/pokaz​/700519---hc0y.html
P-144898
Monika90
» 2016-02-15 15:53:57
Nieprawidłowo wczytujesz liczby, zamiast
C/C++
while( !we.eof() )
{
    we >> n;
   
   
}

zrób
C/C++
while( we >> n )
{
   
   
}
P-144901
heheszek
Temat założony przez niniejszego użytkownika
» 2016-02-15 16:01:45
Chodzi mi tylko o opcję numer 3

Nawet pomimo tej zmiany i tak mam te dwa zera na samym końcu sortowania
P-144902
Monika90
» 2016-02-15 16:11:09
Tablica tab ma 1000 elementów, więc w tej pętli
C/C++
for( int i = 0; i < 1001; i++ )
{
    if( tab[ i ] > tab[ i - 1 ] )
    {
        zamiana = zamiana + 1;
        schowek = tab[ i ];
        tab[ i ] = tab[ i - 1 ];
        tab[ i - 1 ] = schowek;
    }
}
wychodzisz poza dopuszczalny indeks.

W następnej pętli jest nawet gorzej
C/C++
for( int j = 0; j <= 1001; j++ )
{
    sort << tab[ j ] << " " << endl;
    we.close();
   
   
}
aż o dwa elementy za daleko.
P-144903
heheszek
Temat założony przez niniejszego użytkownika
» 2016-02-15 16:21:51
Teraz mam tylko jedno 0, więc jest progres. Jest to pewnie ten biały znak(ENTER) na końcu pliku.

C/C++
int tab[ 1000 ] = { 0 };
int temp = 0;
int schowek, zamiana;
ofstream sort( "posortowane.txt" );
char nazwa[ 100 ];
cout << "Podaj z jakiego pliku chcesz odczytac wyrazy." << endl;
cin >> nazwa;
ifstream we( nazwa );
if( !we )
{
    cout << "Nie mozna otworzyc pliku";
    getchar();
    return 1;
}

while( !we.eof() )
     we >> tab[ temp++ ];

do
{
    zamiana = 0;
    for( int i = 0; i < 1000; i++ )
    {
        if( tab[ i ] > tab[ i - 1 ] )
        {
            zamiana = zamiana + 1;
            schowek = tab[ i ];
            tab[ i ] = tab[ i - 1 ];
            tab[ i - 1 ] = schowek;
        }
    }
}
while( zamiana != 0 );

for( int j = 0; j <= 999; j++ )
{
    sort << tab[ j ] << " " << endl;
    we.close();
   
   
} }
P-144904
Monika90
» 2016-02-15 16:30:16
Sortowanie jest wciąż źle, w pierwszej iteracji kiedy i jest równe 0 używasz ujemnego indeksu, bo i - 1 jest wtedy równe -1.
P-144905
« 1 »
  Strona 1 z 1