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

[C++] [Program] Problem z tablicami i sortowaniem

Ostatnio zmodyfikowano 2014-06-20 22:40
Autor Wiadomość
tajre
Temat założony przez niniejszego użytkownika
[C++] [Program] Problem z tablicami i sortowaniem
» 2014-06-13 06:13:14
Witam, chcę się dowiedzieć jak naprawić błąd, który powoduje, że ponowne użycie danych z tablicy w sortowaniu powoduje zmiany ich wartości. Oto kod:
C/C++
#include <iostream>
#include "conio.h"
#include <string>
#include <fstream>
#include "cmath"
#include <iomanip>
#include <ctime>
#include <cstdlib>

using namespace std;

void sortuj( long long int bu[], int fail )
{
    long long int temp;
    bool wszystko = false;
    while( wszystko == false )
    {
        wszystko = true;
        for( int i = 1; i < fail; i++ )
        {
            if( bu[ i ] < bu[ i - 1 ] )
            {
                wszystko = false;
                temp = bu[ i ];
                bu[ i ] = bu[ i - 1 ];
                bu[ i - 1 ] = temp;
            }
        }
    }
}
int main()
{
    int rozm = 0, x, p, kob, k = 0, grudzien = 0, lata = 0, piec = 0, szesc = 0, siedem = 0, osiem = 0, dziewiec = 0, mod, sprawdz, fail = 0, j;
    long long int tab[ 150 ], d, bu[ fail ], tmp = 0;
    ofstream odp;
    odp.open( "odp.txt", ios::out );
   
   
    ifstream plik;
    plik.open( "pesel.txt", ios::in );
   
    while( !plik.eof() ) {
        string wiersz, o;
        int b;
       
        getline( plik, wiersz );
       
        odp << wiersz << endl;
        tab[ rozm ] = 0;
        for( int z = 0; z < 11; z++ )
        {
            d = tab[ rozm ];
            o = wiersz[ z ];
            b = atoi( o.c_str() );
            cout << b;
            tab[ rozm ] = d + b * pow( 10,( 10 - z ) );
            d = d + tab[ rozm ];
        }
        cout << endl;
        rozm = rozm + 1;
       
    }
   
   
    plik.close();
    odp.close();
    cout << rozm << endl;
    //Sprawdzamy, ile osób urodziło się w grudniu.
    for( int mic = 0; mic < 150; mic++ )
    { p = tab[ mic ] / 10000000;
        //cout<<p << endl;
        if( p % 100 == 12 )
        { grudzien++;
            //cout<< grudzien << endl;
        } }
    cout << "Liczba osob urodzonych w grudniu: " << grudzien << endl;
    //Sprawdzamy, czy to kobieta, czy mężczyzna
    for( int mic = 0; mic < 150; mic++ )
    {
        kob = tab[ mic ] / 10;
        if( kob % 2 == 0 )
        {
            k++;
        }
    }
    cout << "Liczba kobiet w biurze: " << k << endl;
    //Lata pięćdziesiąte, sześćdziesiąte itd.
    for( int mic = 0; mic < 150; mic++ )
    {
        lata = tab[ mic ] / 10000000000;
       
        if( lata == 5 )
        {
           
            piec++; }
        else if( lata == 6 )
        {
           
            szesc++; }
        else if( lata == 7 )
        { siedem++; }
        else if( lata == 8 )
        { osiem++; }
        else if( lata == 9 )
        {
           
            dziewiec++; }
       
    }
    cout << "Osob, ktore urodzily sie w latach piecdziesiatych jest:" << piec << " = " << piec / 1.5 << "%" << endl;
    cout << "Osob, ktore urodzily sie w latach szescdziesiatych jest:" << szesc << " = " << szesc / 1.5 << "%" << endl;
    cout << "Osob, ktore urodzily sie w latach siedemdziesiatych jest:" << siedem << " = " << siedem / 1.5 << "%" << endl;
    cout << "Osob, ktore urodzily sie w latach osiemdziesiatych jest:" << osiem << " = " << osiem / 1.5 << "%" << endl;
    cout << "Osob, ktore urodzily sie w latach dziewiecdziesiatych jest:" << dziewiec << " = " << dziewiec / 1.5 << "%" << endl;
    //Wyszukaj nieprawidlowe nr-y PESEL
    cout << "Nieprawidlowe PESELE: " << endl;
    for( int mic = 0; mic < 150; mic++ )
    {
       
        mod = tab[ mic ] % 10;
        x =( tab[ mic ] / 10000000000 ) * 1 +( tab[ mic ] / 1000000000 ) % 10 * 3 +( tab[ mic ] / 100000000 ) % 10 * 7 +( tab[ mic ] / 10000000 ) % 10 * 9 +( tab[ mic ] / 1000000 ) % 10 * 1 +( tab[ mic ] / 100000 ) % 10 * 3 +( tab[ mic ] / 10000 ) % 10 * 7 +( tab[ mic ] / 1000 ) % 10 * 9 +( tab[ mic ] / 100 ) % 10 * 1 +( tab[ mic ] / 10 ) % 10 * 3;
        sprawdz = x % 10;
        if( sprawdz + mod == 10 || sprawdz + mod == 0 );
        else
        {
           
           
            cout << tab[ mic ] << endl;
            bu[ fail ] = tab[ mic ];
            cout << bu[ fail ] << endl;;
            fail++;
            j = fail;
           
           
           
           
           
            // j=fail;
           
            //cout << "z" << bu[fail-1] << endl;
            /*cout << "z" <<bu[1] << endl;
            cout << "z" <<bu[2] << endl;
            cout << "z" <<bu[3] << endl;
            cout << "z" <<bu[4] << endl;
            cout << "z" <<bu[5] << endl;
            cout << "z" <<bu[6] << endl;
            cout << "z" <<bu[7] << endl;
            cout << "z" <<bu[8] << endl;*/
           
        }
       
    }
   
    j = fail;
    cout << "teraz sortowanie" << endl;
    sortuj( bu, fail );
   
    cout << bu[ 0 ] << endl;
    cout << bu[ 1 ] << endl;
    cout << bu[ 2 ] << endl;
    cout << bu[ 3 ] << endl;
    cout << bu[ 4 ] << endl;
    cout << bu[ 5 ] << endl;
    cout << bu[ 6 ] << endl;
    cout << bu[ 7 ] << endl;
    //cout << bu[8] << endl;*/
    const int r = j;
   
    //sortuj(bu,fail);
    /*for (int i=0;i>r;i++)
    {
    if (bu[i]  >bu[i+1])
        {  tmp=bu[i+1];
         bu[i+1] = bu[i];
          bu[i]=tmp;}
    else{i++;}
   
    }*/
   
    /*for (int i=0; i<r; i++)
    {
        cout << bu[i]<< endl;
    }*/
    /*cout << bu[0] << endl;
    cout << bu[1] << endl;
    cout << bu[2] << endl;
    cout << bu[3] << endl;
    cout << bu[4] << endl;
    cout << bu[5] << endl;
    cout << bu[6] << endl;
    cout << bu[7] << endl;*/
    cout << "Liczba nieprawidlowych PESELI: " << j << endl;
    //Najwiecej ludzi urodzilo sie w roku:
   
    cout << "Najwiecej ludzi urodzilo sie w roku 19" << "Tutaj beda dwie pierwsze cyfry peselu, ktory powtarza sie najczesciej" << endl;
    //cout << bu[0] << endl;
    //cout << bu[1] << endl;
    getch();
}
P-112021
pekfos
» 2014-06-20 22:40:16
Tablica bu jest błędnie utworzona.
P-112414
« 1 »
  Strona 1 z 1