usmiech Temat założony przez niniejszego użytkownika |
Jeden blad na ok sto prob » 2013-05-18 23:03:57 Witam, napisalem w sumie nietrudny program. Generalnie sa to operacje na tablicy. Program kompiluje sie oki, nie pokazuje zadnych ostrzezen. Dziala rowniez , no generalnie, ok. Ale jak napisalem w tytule tamatu, popelnil jeden blad. Pomylil jedna z liczb z sortowaniu tablicy. Niby tylko jedna i tylko raz na pewnie ok 100 prob /nie liczylem :)/. Czy taki blad moze sie zdarzyc pomimo poprawnego kodu, czy tez to raczej jakis blad w programie ?
Nie chodzi o kod, pewnie , ze bede mogl go pokazac, ale ja nie mam duzego doswiadczenia dlatego to pytanie kieruje do bardziej doswiadczonych osob... czy zdarza sie pomylka kompowi :) |
|
dambo |
» 2013-05-18 23:07:53 bez kodu raczej Ci nie pomożemy, ale takie coś to na pewno jakieś małe przeoczenie w algorytmie |
|
usmiech Temat założony przez niniejszego użytkownika |
» 2013-05-18 23:29:29 To, ze kompy sie myla to wie kazdy /chociaz to pewnie moga byc bledy programistow/, ale te pomylki sa raczej w duzych projektach... wiec czy w tak malym tez moze to byc tylko blad kompa ? |
|
ison |
» 2013-05-18 23:35:08 na 100% wina kodu To, ze kompy sie myla to wie kazdy |
kompy się nie mylą, mylą się programiści piszący programy |
|
usmiech Temat założony przez niniejszego użytkownika |
» 2013-05-18 23:40:06 Pokaze kod. Pomylka nastapila w eortowaniu tablicy wg sum skladnikow danej liczby / np suma 123 to 6/. Sorki za tak szczegolowe wyjasnienie, ale chcialem byc dobrze zrozumiany :) Kod: #include "stdafx.h"
#include <iostream>
using namespace std; int sumaDigits( int tablica ); void selectionSort( int tablica[], int rozmiar ); void selectionSortDigits( int tablica[], int rozmiar ); void selectionSortDigitsNajmniejszyNumer( int tablica[], int rozmiar );
int main() { const int tablica_rozmiar = 5; int tablica[ tablica_rozmiar ]; cout << "Wprowadz " << tablica_rozmiar << " liczb/y/ : \n\n"; for( int i = 0; i < tablica_rozmiar; ++i ) { cout << "Podaj liczbe #[" << i << "]: "; while( !( cin >> tablica[ i ] ) ) { cout << "\nPrzykro mi... ale oczekiwana byla liczba." << " Sprobuj jeszcze raz!\n" << endl; cin.clear(); cin.ignore( 10000, '\n' ); cout << "Podaj liczbe #[" << i << "]: "; } } cout << "\nWprowadzone przez Ciebie liczby to: \n"; for( int i = 0; i < tablica_rozmiar; ++i ) { cout << tablica[ i ] << ", "; } cout << endl; selectionSort( tablica, tablica_rozmiar ); cout << "\nPosortowana tablica od liczby najmniejszej do najwiekszej to: \n"; for( int i = 0; i < tablica_rozmiar; ++i ) { cout << tablica[ i ] << ", "; } cout << endl; selectionSortDigits( tablica, tablica_rozmiar ); cout << "\nPosortowana tablica od najmniejszej sumy skladnikow liczb to: \n"; for( int i = 0; i < tablica_rozmiar; ++i ) { cout << tablica[ i ] << ", "; } cout << endl; cout << "\nLiczba/y/ z najmniejsza suma jej skladnikow to: \n"; selectionSortDigitsNajmniejszyNumer( tablica, tablica_rozmiar ); cout << endl; system( "pause" ); return 0; }
int sumaDigits( int tablica ) { int suma = 0; while( tablica > 0 ) { suma += tablica % 10; tablica /= 10; } return suma; }
void selectionSort( int tablica[], int rozmiar ) { int index; int najmniejszyIndex; int location; int temp; for( index = 0; index < rozmiar - 1; index++ ) { najmniejszyIndex = index; for( location = index + 1; location < rozmiar; location++ ) { if( tablica[ location ] < tablica[ najmniejszyIndex ] ) najmniejszyIndex = location; temp = tablica[ najmniejszyIndex ]; tablica[ najmniejszyIndex ] = tablica[ index ]; tablica[ index ] = temp; } } }
void selectionSortDigits( int tablica[], int rozmiar ) { int index; int najmniejszyIndex; int location; int temp; for( index = 0; index < rozmiar - 1; index++ ) { najmniejszyIndex = index; for( location = index + 1; location < rozmiar; location++ ) { if( sumaDigits( tablica[ location ] ) < sumaDigits( tablica[ najmniejszyIndex ] ) ) najmniejszyIndex = location; temp = tablica[ najmniejszyIndex ]; tablica[ najmniejszyIndex ] = tablica[ index ]; tablica[ index ] = temp; } } }
void selectionSortDigitsNajmniejszyNumer( int tablica[], int rozmiar ) { int minIndex = 0; int najmniejszyNumer = 0; for( int index = 0; index < rozmiar; ++index ) { if( sumaDigits( tablica[ minIndex ] ) > sumaDigits( tablica[ index ] ) ) { minIndex = index; tablica[ najmniejszyNumer ] = tablica[ index ]; } } for( int i = 0; i < rozmiar; ++i ) { if( sumaDigits( tablica[ i ] ) <= sumaDigits( tablica[ najmniejszyNumer ] ) ) { cout << tablica[ i ] << ", "; } } }
//przy pisaniu kodu kompilator nie pozwolil mi na uzycie tablicy jako argumentu funkcji sumaDigits (w selectionSortDigits).. sorki //za nieprofesjonalne slownictwo, programuje generalnie po angielsku :) |
|
usmiech Temat założony przez niniejszego użytkownika |
» 2013-05-19 00:31:15 Znalazles jakis blad ison ?
Juz chyba wiem w czym tkwi problem... ten najprostszy sposob sortowania nie jest najlepszy... no tak napisali w ksiazkach ;-) |
|
ison |
» 2013-05-19 19:05:04 Wprowadz 5 liczb/y/ :
Podaj liczbe #[0]: 8 Podaj liczbe #[1]: 9 Podaj liczbe #[2]: 40 Podaj liczbe #[3]: 2 Podaj liczbe #[4]: 4
Wprowadzone przez Ciebie liczby to: 8, 9, 40, 2, 4,
Posortowana tablica od liczby najmniejszej do najwiekszej to: 4, 2, 8, 9, 40,
Posortowana tablica od najmniejszej sumy skladnikow liczb to: 4, 2, 40, 8, 9,
Liczba/y/ z najmniejsza suma jej skladnikow to: 2, 2, Press any key to continue . . .
masz konkretne liczby, dla których nie działa przeanalizuj kod i sprawdź dlaczego dostajesz zły wynik //edit void selectionSort( int tablica[], int rozmiar ) { int index; int najmniejszyIndex; int location; int temp; for( index = 0; index < rozmiar - 1; index++ ) { najmniejszyIndex = index; for( location = index + 1; location < rozmiar; location++ ) { if( tablica[ location ] < tablica[ najmniejszyIndex ] ) najmniejszyIndex = location; temp = tablica[ najmniejszyIndex ]; tablica[ najmniejszyIndex ] = tablica[ index ]; tablica[ index ] = temp; } } }
|
|
usmiech Temat założony przez niniejszego użytkownika |
» 2013-05-19 19:37:02 A to ciekawe, bo uzylem klasycznego wzoru na sortowanie tablicy I ten wiersz, ktory wskazales do wystawienia poza for powinien tam wlasnie byc , znaczy w for :) (swap) pojde na kompa, wkleje kod z ksiazki ;) |
|
« 1 » 2 |