[C++] [Program] Problem z tablicami i sortowaniem
Ostatnio zmodyfikowano 2014-06-20 22:40
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: #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; for( int mic = 0; mic < 150; mic++ ) { p = tab[ mic ] / 10000000; if( p % 100 == 12 ) { grudzien++; } } cout << "Liczba osob urodzonych w grudniu: " << grudzien << endl; for( int mic = 0; mic < 150; mic++ ) { kob = tab[ mic ] / 10; if( kob % 2 == 0 ) { k++; } } cout << "Liczba kobiet w biurze: " << k << endl; 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; 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 << "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; const int r = j; cout << "Liczba nieprawidlowych PESELI: " << j << endl; cout << "Najwiecej ludzi urodzilo sie w roku 19" << "Tutaj beda dwie pierwsze cyfry peselu, ktory powtarza sie najczesciej" << endl; getch(); }
|
|
pekfos |
» 2014-06-20 22:40:16 Tablica bu jest błędnie utworzona. |
|
« 1 » |