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

Po przypisaniu funkcji do zmiennej program przestaje działać

Ostatnio zmodyfikowano 2012-05-01 19:53
Autor Wiadomość
quentine
Temat założony przez niniejszego użytkownika
Po przypisaniu funkcji do zmiennej program przestaje działać
» 2012-05-01 18:49:25
Witam :)

Ćwiczę sobie dalej c++ i piszę program, który ze stworzonej tablicy wynajduje element największy i go wypisuje. W dalszej części będę jeszcze chciał pokazać ile razy w tablicy ten element występuje, ale po drodze pojawił się problem.

Program w takiej wersji zadziała normalnie:

C/C++
#include <cstdlib>
#include <iostream>

using namespace std;
int wczytajLiczby( int t[], int ile )
{
    int i = 0;
    do
    {
        cin >> t[ i ];
        i++;
    } while( i < ile );
   
}
int najwieksza( int t[], int ile )
{
    int i = 0;
    int max = t[ 0 ];
    do
    {
        if( t[ i ] > max )
             max = t[ i ];
       
        i++;
    } while( i < ile );
   
    return max;
}
int ileRazy( int t[], int ile, int max )
{
    int i = 0;
    int k = 0;
    do
    {
        if( t[ i ] = max )
             k++;
       
        i++;
    } while( i < ile );
   
    return k;
}
int main( int argc, char * argv[] )
{
    int howmuch;
    int tablica[ howmuch ];
    cout << "Ile liczb chcesz wprowadzic do tablicy?" << endl;
    cin >> howmuch;
    if( cin.good() )
         cout << "Poprawnie utworzono tablice zlozna z " << howmuch << " elementow." << endl;
    else
    { cout << "Wprowadzono niepoprawna wartosc." << endl; }
    cout << "Wprowadz teraz " << howmuch << " kolejnych liczb do tablicy" << endl;
    wczytajLiczby( tablica, howmuch );
    cout << "Najwieksza liczba z tablicy to: " << najwieksza( tablica, howmuch ) << endl;
   
    system( "pause" );
    return 0;
}

Funkcję "najwieksza" wywołałem w cout. Ale gdybym chciał przypisać do zmiennej wartość zwracaną przez funkcję największa, to program nie zadziała. Pojawia się okienko "Program przestał działać" i po kliknięciu anuluj zamyka się.
Przy samej kompilacji nie ma błędów.

Ten kod nie zadziała:

C/C++
#include <cstdlib>
#include <iostream>

using namespace std;
int wczytajLiczby( int t[], int ile )
{
    int i = 0;
    do
    {
        cin >> t[ i ];
        i++;
    } while( i < ile );
   
}
int najwieksza( int t[], int ile )
{
    int i = 0;
    int max = t[ 0 ];
    do
    {
        if( t[ i ] > max )
             max = t[ i ];
       
        i++;
    } while( i < ile );
   
    return max;
}
int ileRazy( int t[], int ile, int max )
{
    int i = 0;
    int k = 0;
    do
    {
        if( t[ i ] = max )
             k++;
       
        i++;
    } while( i < ile );
   
    return k;
}
int main( int argc, char * argv[] )
{
    int howmuch;
    int tablica[ howmuch ];
    cout << "Ile liczb chcesz wprowadzic do tablicy?" << endl;
    cin >> howmuch;
    if( cin.good() )
         cout << "Poprawnie utworzono tablice zlozna z " << howmuch << " elementow." << endl;
    else
    { cout << "Wprowadzono niepoprawna wartosc." << endl; }
    cout << "Wprowadz teraz " << howmuch << " kolejnych liczb do tablicy" << endl;
    wczytajLiczby( tablica, howmuch );
    int max = najwieksza( tablica, howmuch );
    cout << "Najwieksza liczba z tablicy to: " << max << endl;
   
    system( "pause" );
    return 0;
}

Jeżeli ma ktoś pomysł dlaczego tak się dzieje, to proszę o pomoc :)

Pozdrawiam
P-55754
szyx_yankez
» 2012-05-01 19:24:23
C/C++
int howmuch;
int tablica[ howmuch ];
Co to?
P-55755
quentine
Temat założony przez niniejszego użytkownika
» 2012-05-01 19:31:26
Zmienna, za pomocą której użytkownik może określić ile elementów ma mieć tablica. Kompilator nie krzyczał, więc uznałem, że tak jest dobrze :)

EDIT:

OK, problem był właśnie w tym miejscu :P Przeniosłem tworzenie tablicy poniżej przypisania zmiennej wartości i działa :) Dzięki za pomoc :)

Poprawiony kod:

C/C++
/*Program wczytujący z klawiatury n liczb całkowitych Program ma znaleźć
największą spośród podanych i wyświetlić informację ile razy ta liczba
wystąpiła.*/
#include <cstdlib>
#include <iostream>

using namespace std;
int wczytajLiczby( int t[], int ile )
{
    int i = 0;
    do
    {
        cin >> t[ i ];
        i++;
    } while( i < ile );
   
}
int najwieksza( int t[], int ile )
{
    int i = 0;
    int max = t[ 0 ];
    do
    {
        if( t[ i ] > max )
             max = t[ i ];
       
        i++;
    } while( i < ile );
   
    return max;
}
int ileRazy( int t[], int ile, int max )
{
    int i = 0;
    int k = 0;
    do
    {
        if( t[ i ] = max )
             k++;
       
        i++;
    } while( i < ile );
   
    return k;
}
int main( int argc, char * argv[] )
{
    int howmuch;
    cout << "Ile liczb chcesz wprowadzic do tablicy?" << endl;
    cin >> howmuch;
    int tablica[ howmuch ];
    if( cin.good() )
         cout << "Poprawnie utworzono tablice zlozna z " << howmuch << " elementow." << endl;
    else
    { cout << "Wprowadzono niepoprawna wartosc." << endl; }
    cout << "Wprowadz teraz " << howmuch << " kolejnych liczb do tablicy" << endl;
    wczytajLiczby( tablica, howmuch );
    int max = najwieksza( tablica, howmuch );
    cout << "Najwieksza liczba z tablicy to: " << max << endl;
   
    system( "pause" );
    return 0;
}
P-55756
szyx_yankez
» 2012-05-01 19:53:03
Kod nadal nie jest poprawny.
P-55759
« 1 »
  Strona 1 z 1