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

Sortowanie Liczb

Ostatnio zmodyfikowano 2014-02-16 21:21
Autor Wiadomość
strus123
Temat założony przez niniejszego użytkownika
Sortowanie Liczb
» 2014-02-15 23:36:25
Witam,
mam problem z jednym "if" gdzie jest sprawdzana poprawna ilosc wprowadzonych liczb jaka wczesniej zadeklarowal uzytkownik.
otóż można ominac ten warunek wpisujac pierwsza liczbe taka sama jak rozmiar_tabeli lub wywala blad gdy pierwsza liczba jest wieksza od rozmiar_tabeli :/
Narazie zrobilem taka prowizorke zeby bylo widoczne jak program pracuje.

C/C++
#include <iostream>
#include <algorithm>
#include <functional>

using namespace std;


int main()
{
   
    cout << "=================================================================" << endl;
    cout << "\t\t SORTOWNIK" << endl;
    cout << "\t\t\t\t by Hydr0" << endl;
    cout << "=================================================================" << endl;
   
    int rozmiar_tablicy, wartosc;
   
    cout << "\n Wprowadz ilosc liczb calkowitych, ktore nalezy wczytac: " << endl;
    cin >> rozmiar_tablicy;
   
    if( rozmiar_tablicy > 0 && rozmiar_tablicy < 10 ) //warunek ilosci liczb
   
    {
       
        int * p = new int[ rozmiar_tablicy ]; // "dynamiczna alokacja pamieci"-we wkazniku p jest adres wolnej pamieci w której bedziemy
        // przechowywwac tablice o rozmiarze "rozmiar_tablcy"
        cout << "Wpisz Liczby [NIE ZAPOMNIJ ODDZIELIC JE SPACJA] " << endl;
        cout << "\t :#: ";
       
        {
            for( int i = 0; i < rozmiar_tablicy; i++ ) // wpisujemy wartosci do naszej tablicy
            {
               
               
                cin >> wartosc;
                p[ i ] = wartosc;
            }
           
            if( * p > rozmiar_tablicy ) // sprawdzenie czy uzytkownik wprowadzil tyle liczb ile wczesniej zadeklarowal !! TUTAJ PROBLEM!!
            {
                cout << "Za duzo! Limit Liczb to " << rozmiar_tablicy << " !" << endl;
                return 0;
            }
           
            sort( p, p + rozmiar_tablicy ); // "sortownik" - funkcja odpowiedzialna za posortowanie naszych wartosci
           
            cout << endl;
            cout << "\t\t" << "Posortowane rosnaco: " << endl;
            for( int i = 0; i < rozmiar_tablicy; i++ ) // petla "for" ktora bedzie wypisywala juz ulozone wartosci "rozmiar_tablicy" razy.
            {
                cout << "\t # " << p[ i ] << " #" << endl;
            }
           
           
            if( rozmiar_tablicy < 0 && rozmiar_tablicy > 10 ) //komunikat jesli uzytkownik wprowadzi za duzy rozmiar tablicy
            {
                cout << "\t Wprowadziles za duzo liczb" << endl;
                cout << "\t Ilosc liczb musi byc wieksza od 0 i mniejsza od 51" << endl;
               
               
               
            }
        }
    }
   
   
   
   
    return 0;
}

dzieki za pomoc :)
P-104696
killjoy
» 2014-02-15 23:44:51
W czym problem?  Nadmiar liczb zostanie zignorowany, nie spowoduje to żadnego błędu, czy wysypania się programu.
P-104697
strus123
Temat założony przez niniejszego użytkownika
» 2014-02-15 23:52:05
nie sprecyzowałem problemu. otóż ma zawsze wywalać komunikat ze "za duzo...." jeśli użytkownik rzeczywiście wprowadzi za dużo bo teraz można go ominąć tak jak już wyżej dopisałem, podając pierwszą liczbę do sortowania taką samą jak liczba rozmiar_tabeli lub wywala błąd jeśli pierwsza liczba będzie większa od liczby (nie rozmiaru) "rozmiar_tabeli" mimo że ilość się zgadza...
P-104698
killjoy
» 2014-02-15 23:59:31
Pewnie że wywala Ci błąd, gdy pierwsza liczba jest większa niż rozmiar tabeli bo to:
C/C++
if( * p > rozmiar_tablicy ) // sprawdzenie czy uzytkownik wprowadzil tyle liczb ile wczesniej zadeklarowal !! TUTAJ PROBLEM!!
{
    cout << "Za duzo! Limit Liczb to " << rozmiar_tablicy << " !" << endl;
    return 0;
}

Jest równoznaczne z tym:
C/C++
if( p[ 0 ] > rozmiar_tablicy ) // sprawdzenie czy uzytkownik wprowadzil tyle liczb ile wczesniej zadeklarowal !! TUTAJ PROBLEM!!
{
    cout << "Za duzo! Limit Liczb to " << rozmiar_tablicy << " !" << endl;
    return 0;
}

W ten sposób,
* p
 Odwołujesz się do wartości pierwszego elementu, a nie do rozmiaru tabeli.
(o ile dobrze rozumiem o co Ci chodzi)
P-104700
strus123
Temat założony przez niniejszego użytkownika
» 2014-02-16 00:07:23
więc jaki warunek tam dać żeby wyłapywał to dobrze ? bo już zgłupiałem...
P-104702
alixir
» 2014-02-16 21:21:35
Na obecnym etapie nie możliwe jest wprowadzenie więcej liczb niż się zadeklarowało. Dba o to pętla for, więc z tego co ja rozumiem to ty chciałbyś wiedzieć czy bufor jest już pusty. W twoim przypadku warunek mógłbyś zapisać tak
if( getchar() != '\n' )

Jeśli ostatnim znakiem nie jest znak nowej linii to prawdopodobnie użytkownik podał więcej liczb.
P-104743
« 1 »
  Strona 1 z 1