• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Tablica strukturalna dwuwymiarowa jako parametr funkcji

Object Storage Arubacloud
0 głosów
378 wizyt
pytanie zadane 9 grudnia 2020 w C i C++ przez francus11 Gaduła (3,250 p.)

Cześć, mam problem z jednym fragmentem zadania, mianowicie tym:

"napisać funkcję srednia(), która dla jakiejś dwuwymiarowej tablicy zmiennych typu strukturalnego SDane, o rozmiarze [N][N], wyznacza średnią wartość pól ‘liczba’ rekordów, które w polu ‘znak’ przechowują znak z przedziału i zwraca tę informację."

Chodzi o to, by funkcja pobierała parametr, który jest tablicą strukturalną dwuwymiarową, o nieokreślonych z góry wymiarach i żeby najlepiej parametr przybierał postać wskaźnika, żebym mógł bezpośrednio wpływać na zmienną, której używam przy wywoływaniu funkcji. Próbowałem takiego kodu, ale ciągle wyskakiwał błąd związany albo z tablicą, albo ze wskażnikiem, gdy próbowałem z nim

float srednia(int sizee, SDane& tabl)
{
    int countt = 0;
    int values = 0;
    for(int i = 0; i < 5; i++)
    {
        for(int j = 0; j < 5; j++)
        {
            if( tabl[i][j].znak >= 'a' && tabl[i][j].znak <= 'd')
            {
                countt++;
                values = values + tabl[i][j].liczba;
            }

        }
    }
    return values / countt;

}

Ktoś może wie, co może tu przeszkadzać?

komentarz 10 grudnia 2020 przez mokrowski Mędrzec (155,460 p.)
A możesz pokazać jak wygląda struktura SDane ? Interesujące jest także jak masz definiowane N. Czy to jest globalna stała?

2 odpowiedzi

+3 głosów
odpowiedź 9 grudnia 2020 przez tangarr Mędrzec (154,860 p.)
wybrane 10 grudnia 2020 przez francus11
 
Najlepsza

Jeżeli funkcja ma być uniwersalna (działać dla tablic o różnych rozmiarach) to polecam użyć szablonu
Przykład:

#include <iostream>

struct MojaStruktura {
};

template <int N, int M>
void funkcja(MojaStruktura (&tablica)[N][M]) {
    for (int i=0; i<N; i++) {
        for (int j=0; j<M; j++) {
            std::cout << "Robię coś w elemencie " << i <<"x" << j << std::endl;
        }
    }
    
}

int main() {
    MojaStruktura a[10][5];
    funkcja(a);
}

 

0 głosów
odpowiedź 9 grudnia 2020 przez TOM_CPP Pasjonat (22,640 p.)
edycja 9 grudnia 2020 przez TOM_CPP

tablicą strukturalną dwuwymiarową, o nieokreślonych z góry wymiarach

Jeżeli nie są znane rozmiary w momencie kompilacji to sugerowałby użyć kontenera std::vector oraz użył funkcji std::accumulate do wyliczenia średniej.

#include <iostream>
#include <vector>
#include <numeric>

using namespace std;

struct Data
{
    char znak {};
    int value {};
};

auto average( const vector<vector<Data>>& table )
{
    int counter {0};
    auto logic =  [&]( auto a , auto b )
                  {
                     if( b.znak>='a' && b.znak<='d' )
                     {
                        ++counter;
                        return a+b.value;
                     }
                     return a;
                  };

    auto result = accumulate(cbegin(table),cend(table),0.0,[&]( auto a , auto b )
                                                         {
                                                             return a + accumulate(cbegin(b),cend(b),0.0,logic);
                                                         } );
    return counter!=0 ? result/counter : 0;
}

int main()
{

   vector<vector<Data>> table;
   table.push_back( vector<Data>{Data{'b',10},Data{'1',10}} );
   table.push_back( vector<Data>{Data{'c',31},Data{'g',10}} );
   cout << average(table) << endl;
}

https://godbolt.org/z/3aqE7b

Podobne pytania

0 głosów
0 odpowiedzi 119 wizyt
0 głosów
1 odpowiedź 1,003 wizyt
pytanie zadane 19 listopada 2016 w C i C++ przez T.Żurawski Początkujący (290 p.)
0 głosów
1 odpowiedź 270 wizyt
pytanie zadane 7 grudnia 2022 w C i C++ przez Janchess Początkujący (480 p.)

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...