Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz

Błąd w funkcji.


Rekomendowane odpowiedzi

Opublikowano
Witajcie. Otóż muszę nadać działaniu mojego programu kompatybilność z poleceniem "Napisz funkcję, która wyzeruje wszystkie elementy tej tablicy". Tablica prezentuje się tak: double tab[10][5][30] - składa się z 1500 elementów. Stworzyłem program, którego działanie według mnie jest logiczne. Aczkolwiek funkcja przypisuje wartość równą zero 1161 elementom tablicy. Która część funkcji powoduje ten defekt? Proszę o rozwiązanie owej perypetii. 
#include <iostream>
using namespace std;

inline void funkcja(double tablica[10][5][30])
{
    int a = 0;
    int b = 0;

    for(int c = 0, x = 1 ; a<=9 ; c++, x++)
    {
        tablica[a][b][c] = 0;
        cout << tablica[a][b][c] << endl;
        cout << x << endl;

        if( c == 29 )
        {
            c = 0;
            b++;
        }

        if( b == 4 )
        {
            b = 0;
            a++;
        }
    }
}

//************************************************************************//

    int main()
{
    double tablica[10][5][30];

    funkcja(tablica);
}

 

Opublikowano

 

#include <iostream>

using namespace std;


void zeruj(double tablica[10][5][30])
{
    int wyzerowano = 0;
    for(int i = 0; i < 10; ++i)
    {
        for(int j = 0; j < 5; ++j)
        {

            for(int k = 0; k < 30; ++k)
            {
                tablica[i][j][k] = 0;
                ++wyzerowano;
            }
        }
    }
    cout << wyzerowano << '\n';
}

int main()
{
    double tablica[10][5][30];

    zeruj(tablica);
    return 0;
}
Opublikowano

1. podawaj tablicę do funkcji poprzez referencję

2. po co ci ten inline?

 

I czy ktoś potrafi logicznie wytłumaczyć dlaczego ten typ nie umie into prosty polski, tylko używa złożonych słów które są tu zupełnie zbędne?­

846331404756772371599.jpeg
Opublikowano
#include <iostream>

using namespace std;


void zeruj(double tablica[10][5][30])
{
    int wyzerowano = 0;
    for(int i = 0; i < 10; ++i)
    {
        for(int j = 0; j < 5; ++j)
        {

            for(int k = 0; k < 30; ++k)
            {
                tablica[i][j][k] = 0;
                ++wyzerowano;
            }
        }
    }
    cout << wyzerowano << '\n';
}

int main()
{
    double tablica[10][5][30];

    zeruj(tablica);
    return 0;
}

Dziękuję za Twoje zaangażowanie, lecz znam rozwiązanie tego zadania. Chcę się dowiedzieć, dlaczego spropagowany przeze mnie kod nie sprawdza się w praktyce. 

Opublikowano

Po każdym wyzerowaniu zmiennej `c` gubisz obrót pętli kiedy `c` ma wartość 0, bo po ustawieniu `c` na 0 i skoku do początku pętli jest ona inkrementowana.

Gubisz także przypadek kiedy zmienna `b` jest równa 4, bo najpierw ją inkrementujesz, a potem sprawdzasz czy jest równa 4.

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...