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

Definiowanie i wywoływanie funkcji

Ostatnio zmodyfikowano 2014-11-20 10:23
Autor Wiadomość
Criss
Temat założony przez niniejszego użytkownika
Definiowanie i wywoływanie funkcji
» 2014-11-19 22:39:34
Program przypisuje tablicy [5][5] losowo wartości od 1 do 9. Następnie powinien zliczyć ile razy występuje każda cyfra, potem znalezc jaka cyfra jest największa i podanie ile razy wystąpiła (wiem, ze da sie to zrobić prościej, ale chciałem przećwiczyć używanie osobnej funkcji z poza maina) . Zliczanie akurat działa, ale nie zawsze, czego już w ogóle nie potrafię zrozumieć. To nie jest jednak główny problem. Chodzi o zdefiniowaną na początku funkcje najw(), a przynajmniej tak mi się wydaje, że robię coś źle z definiowaniem i potem z wywołaniem. Funkcja po znalezieniu największej cyfry powinna przestawać działać. Z linijki
cout << "Najwieksza cyfra jest " << c << " i wystapila " << ilosc[ c - 1 ] << " razy." << endl;
 powstaje jednak coś takiego: "Najwieksza cyfra jest 0 i wystapila 0 razy." (cały kod poniżej). Nie jestem też pewien co do tego w jaki sposób chce zakończyć działanie najw(). Ew. prosze też o sugestie co do nieprawidłowego zliczania ilości poszczególnych cyfr.
Cały kod:
C/C++
#include <cstdlib>
#include <iostream>
#include <ctime>

using namespace std;
int ilosc[ 9 ], tab[ 5 ][ 5 ];
int c = 9;
int najw() {
    for( int i = 0; i <= 5; i++ ) {
        for( int j = 0; j <= 5; j++ ) {
            if( tab[ i ][ j ] == c ) {
                cout << "Najwieksza cyfra jest " << c << " i wystapila " << ilosc[ c - 1 ] << " razy." << endl;
                return( 0 ); } } }
    if( tab[ 4 ][ 4 ] != c ) {
        c--;
        najw();
    } }
int main( int argc, char * argv[] )
{
    srand( time( NULL ) );
    int tab[ 5 ][ 5 ];
    for( int i = 0; i <= 5; i++ ) {
        for( int j = 0; j <= 5; j++ ) {
            tab[ i ][ j ] = rand() % 9 + 1; } }
    for( int i = 0; i <= 5; i++ ) {
        for( int j = 0; j <= 5; j++ ) {
            for( int a = 1; a <= 9; a++ ) {
                if( tab[ i ][ j ] == a ) {
                    ilosc[ a - 1 ] ++; } } } }
    for( int b = 1; b <= 9; b++ ) {
        cout << "Cyfra " << b << " wystapila " << ilosc[ b - 1 ] << " razy." << endl; }
    najw();
   
   
   
    system( "PAUSE" );
    return EXIT_SUCCESS;
}
P-121033
Monika90
» 2014-11-19 22:49:27
Indeksy we wszystkich Twoich pętlach wychodzą poza dopuszczalny dla tablicy zakres. Tablica używana w funkcji najw to nie ta sama tablica co w main.

P-121034
Criss
Temat założony przez niniejszego użytkownika
» 2014-11-19 23:05:04
A faktycznie, dzięki. Zdaje się, że poprawiło się zliczanie cyfr, ale cała reszta pozostaje w tym samym stanie.
P-121035
b00rt00s
» 2014-11-20 10:23:34
Pozwolę dodać coś od siebie. Stworzyłeś niezły koszmarek, jeśli chodzi o czytelność kodu... Nawet nie chciało mi się tego czytać. Kiedy piszesz kod, dbaj o jego czytelność. Ułatwisz innym jego analizę, nie mówiąc już o tym, że unikniesz błędów wynikających z tego, że Ty sam nie będziesz rozumiał, co napisałeś.
P-121043
« 1 »
  Strona 1 z 1