NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Dvourozměrné pole ve funkci

V předchozím kvízu, Online test znalostí C++, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Energy304
Člen
Avatar
Energy304:17.10.2017 20:31

Ahoj, mám program, který by měl přes funkci 'NajdiCislo' vyhledat kolikrát je dané číslo v dvojrozměrném poli. Problém nástává, když chci funkci volat v mainu. Přesněji při zadání mého vytvořeného pole do volání funkce.

funkce:

int NajdiPocet(int** pole, const int radek, const int sloupec, const int cislo) {
        int pocet;

        for (int i = 0; i < radek; i++)
        {
                for (int j = 0; j < sloupec; j++)
                {
                        if (pole[j][i] = cislo) {
                                pocet++;
                        }
                }
                cout << endl;
        }

        return pocet;
}

main:

int main()
{
        const int radek = 10;
        const int sloupec = 10;
        int pole[sloupec][radek];

        for (int i = 0; i < radek; i++)
        {
                for (int j = 0; j < sloupec; j++)
                {
                        pole[j][i] = rand() % 10;
                        cout << pole[j][i] << " ";
                }
                cout << endl;
        }

        cout << "Počet je: " << NajdiPocet(pole , radek, sloupec, 5) << endl;

    return 0;
}

Chybu přikládám v obrázku.

Už jsem zkoušel něco podobného s jednorozměrným polem a vše mi fungovalo.

Děkuji za odpověď.

 
Odpovědět
17.10.2017 20:31
Avatar
David Oczka
Tvůrce
Avatar
Odpovídá na Energy304
David Oczka:17.10.2017 21:10

No, člověče... Máš tam dost chyb...

#include "stdafx.h"
#include <stdio.h>
#include <stdlib.h>
#include <iostream>

const int radek = 10;
const int sloupec = 10;

int NajdiPocetStaticky(int (*pole)[sloupec], const int radek, const int sloupec, const int cislo)
{
        int pocet = 0;

        for (int i = 0; i < radek; i++)
        {
                for (int j = 0; j < sloupec; j++)
                {
                        if (pole[j][i] == cislo)
                        {
                                pocet++;
                        }
                }
                std::cout << std::endl;
        }

        return pocet;
}

int NajdiPocetDynamicky(int** pole, const int radek, const int sloupec, const int cislo)
{
        int pocet = 0;

        for (int i = 0; i < radek; i++)
        {
                for (int j = 0; j < sloupec; j++)
                {
                        if (pole[j][i] == cislo)
                        {
                                pocet++;
                        }
                }
                std::cout << std::endl;
        }

        return pocet;
}

int main()
{
        int pole[sloupec][radek];
        int *dynamickePole[sloupec];
        for (int i = 0; i < sloupec; ++i)
        {
                dynamickePole[i] = new int[radek];
        }

        for (int i = 0; i < radek; i++)
        {
                for (int j = 0; j < sloupec; j++)
                {
                        dynamickePole[j][i] = rand() % 10;
                        pole[j][i] = dynamickePole[j][i];
                        std::cout << dynamickePole[j][i] << " ";
                }
                std::cout << std::endl;
        }


        std::cout << "Pocet dynamicky je: " << NajdiPocetDynamicky(dynamickePole, radek, sloupec, 5) << std::endl;

        std::cout << "Pocet je: " << NajdiPocetStaticky(pole, radek, sloupec, 5) << std::endl;

        return 0;
}

Nebyla definována hodnota proměnné pocet, v podmínce bylo = namísto ==. Polím a tedy i pointerům očividně moc nerozumíš, je třeba rozeznávat dynamické a statické pole. Doporučuji to dostudovat... ;)

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
17.10.2017 21:10
Avatar
Energy304
Člen
Avatar
Odpovídá na David Oczka
Energy304:17.10.2017 21:31

Moc děkuji! Dostudovat toho musím více :)

 
Nahoru Odpovědět
17.10.2017 21:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 3 zpráv z 3.