Verloren Temat założony przez niniejszego użytkownika |
Sortowanie bąbelkowe liczb ujemnych » 2012-09-08 21:06:52 Hej wszystkim, mam następujący problem:
Stworzyłem niewielki program w którym mam tablicę o wielkości [10], którą wypełniam liczbami. Następnie sortuję te liczby i wyświetlam największą, oraz najmniejszą liczbę. I tu leży pies pogrzebany. Kiedy wypisuję liczby ujemne, program najzwyczajniej w świecie je ignoruje. Wie ktoś może dlaczego tak się dzieje? Jeżeli będzie potrzebny plik źródłowy to prosiłbym o przypomnienie pomiędzy czym się go wpisuje :P [cośtam][/cośtam]. |
|
pekfos |
» 2012-09-08 21:09:47 [cpp][/cpp] |
|
Verloren Temat założony przez niniejszego użytkownika |
» 2012-09-08 21:20:20 #include <iostream> #include <conio.h> using namespace std;
const int zakres = 10; void Wprow( int T[], int zakres ); int Suma( int T[], int zakres ); int Min( int T[], int zakres ); int Max( int T[], int zakres ); int T[ 10 ];
int main() { cout << "PRZEBIEG PROGRAMU:\n"; cout << " - wprowadzenie dowolnych liczb calkowitych\n"; cout << " - uzyskanie ich sumy\n"; cout << " - wyznaczenie najwiekszej oraz najmniejszej liczby\n\n"; Wprow( T, zakres ); cout << "\nSuma wprowadzonych liczb wynosi: " << Suma( T, zakres ); cout << "\nNajmniejsza liczba wynosi: " << Min( T, zakres ); cout << "\nNajwieksza liczba wynosi: " << Max( T, zakres ); getch(); }
void Wprow( int T[], int zakres ) { int i; for( i = 0; i <= zakres; ++i ) { cout << "Wprowadz liczbe: "; cin >> T[ i ]; } }
int Suma( int T[], int zakres ) { int i, wynik = 0; for( i = 0; i <= zakres; ++i ) wynik += T[ i ]; return wynik; }
int Min( int T[], int zakres ) { int i, x, MIN; for( i = 0; i <= zakres; i++ ) for( x = 0; x <= zakres; x++ ) if( T[ x ] > T[ x + 1 ] ) { MIN = T[ x ]; T[ x ] = T[ x + 1 ]; T[ x + 1 ] = MIN; } return MIN; }
int Max( int T[], int zakres ) { int i, x, MAX; for( i = 0; i <= zakres; i++ ) for( x = 0; x <= zakres; x++ ) if( T[ x ] < T[ x + 1 ] ) { MAX = T[ x + 1 ]; T[ x + 1 ] = T[ x ]; T[ x ] = MAX; } return MAX; |
|
withelm |
» 2012-09-08 22:55:57 void Wprow( int T[], int zakres ) { int i; for( i = 0; i <= zakres; ++i ) { cout << "Wprowadz liczbe: "; cin >> T[ i ]; } } wczytujesz 11 elementów, a nie 10 Twoje "wyznaczanie" MIN/MAX, jest błędne ponieważ odwołujesz się do komórki T[11] która nie istnieje, program się nie wywalił jakiegość błędu pamięci ponieważ operujesz na małych danych. aha, pomyśl jak poprawic ten kod aby nie miał copy-pasty, nie zawsze trzeba sortowac ciąg, aby obliczyć min,max. spróbuj wczytać te ujemnie liczby scanfem, powinno pomóc. |
|
Verloren Temat założony przez niniejszego użytkownika |
» 2012-09-08 23:04:38 Ah, faktycznie 11, a nie 10 elementów, ale to akurat mniejszy problem. Ze scanfem dopiero się zapoznam więc dzięki za radę :) I co masz na myśli poprzez wyznaczanie minimalnej i maksymalnej liczby inaczej niż przez sortowanie? Mógłbyś powiedzieć coś więcej? :P
Edit: Zapomniałem zapytać czemu 'cin' nie wystarcza skoro np. -200 tak samo jak 200 jest liczbą całkowitą? |
|
withelm |
» 2012-09-08 23:32:01 sortuj sobie w odzielnej funckji, a potem wyznaczaj sobie min/max po posortowanej tablicy. nie wypisuje proprawnych wyników poniewaz twoim MIN jest zamieniany element, a nie rzeczywisty minimalny, wypisz sobie posortowana tablice i zauważ gdzie jest min, a gdzie max; |
|
tirou |
» 2012-09-09 10:38:29 Faktycznie, twój algorytm do znajdowania elementow najmniejszych i najwiekszych jest zły.
ty robisz cos tak jakby funkcja swap:
void swap( int & a, int & b ) { int temporary = a; a = b; b = temporary }
A zapewniam cię, że poprawny algorytm sortowania bąbelkowego na 100% sortuje liczby ujemne. Tak jak ktos wczensniej napisal sortowanie najlepiej robic w oddzielnej funkcji. |
|
Verloren Temat założony przez niniejszego użytkownika |
» 2012-09-09 17:14:54 Eh, pogmatwało mi się już wszystko i ostatecznie program wyświetla przedostatnią liczbę ujemną... i mimo wszystko chciałbym to zrobić cin'em. |
|
« 1 » 2 |