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

Sortowanie bąbelkowe liczb ujemnych

Ostatnio zmodyfikowano 2012-09-14 20:43
Autor Wiadomość
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].
P-64640
pekfos
» 2012-09-08 21:09:47
[cpp][/cpp]
P-64641
Verloren
Temat założony przez niniejszego użytkownika
» 2012-09-08 21:20:20
C/C++
#include <iostream>
#include <conio.h>
using namespace std;

// .::::GLOBALNE::::.
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 ];

// .::::GŁÓWNY PROGRAM::::.
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();
}


// .::::FUNKCJE::::.
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;
P-64643
withelm
» 2012-09-08 22:55:57
C/C++
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.
P-64648
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ą?
P-64649
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;
P-64654
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:

C/C++
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.
P-64677
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.
P-64716
« 1 » 2
  Strona 1 z 2 Następna strona