• 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

Aruba Cloud - Virtual Private Server VPS
0 głosów
460 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 (158,200 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 (155,140 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 171 wizyt
0 głosów
1 odpowiedź 1,223 wizyt
pytanie zadane 19 listopada 2016 w C i C++ przez T.Żurawski Początkujący (290 p.)
0 głosów
1 odpowiedź 565 wizyt
pytanie zadane 7 grudnia 2022 w C i C++ przez Janchess Początkujący (480 p.)

93,327 zapytań

142,323 odpowiedzi

322,396 komentarzy

62,657 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

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...