Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Przekazywanie tablicy ze strukturą do funkcji.

luqis 27 Gru 2009 23:06 4066 6
  • #1 27 Gru 2009 23:06
    luqis
    Poziom 9  

    Witam. Mam następujący problem: chcę przekazać do funkcji sumującej, tablicę ze strukturą. Tyle ze nie bardzo wiem jak. Mam cos takiego:

    Code:

    #include <cstdlib>
    #include <iostream>

    using namespace std;
    struct struktura
    {
          char nazwa_p[20];
          int ilosc_p;
          float cena_n;
          float cena_b;
    };

    [b]int liczy(struktura* tablica)[/b]
    {
        int suma;
        for (int i=0;i<10;i++)
        suma=suma+tablica.nazwa_p;
        return suma;
    }

    int main(int argc, char *argv[])
    {
        baza*tablica=new baza[20];
        [b]liczy(tablica);[/b]
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    Interesujące mnie elementy pogrubiłem.Coś nawet próbowałem wpisać ale nie działa. Proszę o pomoc. Oczywiście jest to tylko przykładowy kod bo nie ma wpisane nic do tej tablicy ale z grubsza chciałem pokazać o co mi chodzi. Jak by ktoś mi podpowiedział, co mam wpisać w deklaracji funkcji oraz co przy jej wywoływaniu za parametr, byłbym wdzięczny. Z góry dzięki.

    0 6
  • Pomocny post
    #2 27 Gru 2009 23:19
    lekto
    Poziom 35  

    Code:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

     
    struct struktura
    {
          public:
          int nazwa_p[20];
          int ilosc_p;
          float cena_n;
          float cena_b;
         
          struktura(void)
          {
               for(int i = 0;i <= 20;i++)this->nazwa_p[i] = 0;
          }
    };

    int liczy(struktura *tablica)
    {
        int suma;
        for (int i=0;i<10;i++)
        suma=suma+tablica->nazwa_p[0];
        return suma;
    }

    int main(int argc, char *argv[])
    {
        struktura *tablica = new struktura[20];
        liczy(&tablica[0]);
        system("PAUSE");
        return EXIT_SUCCESS;
    }


    Nie wiem co chciałeś osiągnąć ale próbujesz dodawać typy char (nazwa_p) jak operujesz na wskaźniku to nie używasz kropki tylko "->"

    0
  • #3 27 Gru 2009 23:50
    luqis
    Poziom 9  

    Dzięki w sumie o to mi chodziło. Z tym charem to głupi błąd bo pisałem przykładowy kod na szybko i nie zwróciłem na to uwagi. A jeśli chcę np. Zrobić funkcje która będzie liczyć konkretny element struktury. np raz chcę żeby była to cena_n to daje np coś takiego w wywołaniu funkcji suma(cena_n) i żeby funkcja liczyła mi to a zaraz potem jak wywołam ja od cena_b to żeby liczyła sumę cen brutto. Trochę pogmatwałem ale może ktoś zrozumie ;)

    0
  • #4 28 Gru 2009 00:07
    lekto
    Poziom 35  

    Code:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

     
    struct struktura
    {
          public:
          int nazwa_p[20];
          int ilosc_p;
          float cena_n[20];
          float cena_b[20];
         
          struktura(void)
          {
               for(int i = 0;i <= 20;i++){this->nazwa_p[i] = 0;}
          }
    };

    float liczy(float *tablica)
    {
        float suma;
        for (int i=0;i<20;i++)
        {
            suma+=tablica[i];
            tablica++;
        }
        return suma;
    }

    int main(int argc, char *argv[])
    {
        struktura *tablica = new struktura[20];
        liczy(tablica[0].cena_n);
        liczy(tablica[0].cena_b);
    }

    Nie testowane ale kompiluje się, lepiej sprawdzić.

    0
  • #5 28 Gru 2009 00:40
    luqis
    Poziom 9  

    Nie mogę sprawdzić bo nie idzie wpisywanie do tablicy. Robie to przez cin w pętli for i dostaję poł strony błędów z których większosc wyglada tak:" std::basic_istream<_CharT, _Traits>& std::basic_istream<_CharT, _Traits>::operator>>(std::basic_ios<_CharT, _Traits>&(*)(std::basic_ios<_CharT, _Traits>&)) [with _CharT = char, _Traits = std::char_traits<char>] Nie wiem może jakiś prosty głupi błąd, ale dopiero zaczynam programować, a mam do napisania projekt. Jak byś mógł spojrzeć co robię źle:

    Code:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

     
    struct struktura
    {
          public:
          int nazwa_p[20];
          int ilosc_p;
          float cena_n[3];
          float cena_b[3];
         
          struktura(void)
          {
               for(int i = 0;i <= 3;i++){this->nazwa_p[i] = 0;}
          }
    };

    float liczy(float *tablica)
    {
        float suma;
        for (int i=0;i<3;i++)
        {
            suma+=tablica[i];
            tablica++;
        }
        return suma;
    }

    int main(int argc, char *argv[])
    {
        struktura *tablica = new struktura[3];
            for(int i=0; i<3; i++)
        {
        cin>>tablica[i].cena_n;
        cin>>tablica[i].cena_b;
        }
        cout<<liczy(tablica[0].cena_n);
        cout<<liczy(tablica[0].cena_b);
    }

    0
  • #6 28 Gru 2009 08:54
    lekto
    Poziom 35  

    Code:
    ...
    
        cin>>*tablica[i].cena_n;
        cin>>*tablica[i].cena_b;


    Widzę że masz problem ze wskaźnikami, zapamiętaj że:
    '*' dajemy jak robimy na zmiennej na którą pokazuje wskaźnik,
    nic nie dajemy jeśli robimy bezpośrednio ze wskaźnikiem.

    0
  • #7 28 Gru 2009 13:30
    luqis
    Poziom 9  

    Faktycznie, masz rację, trochę mam problem ze wskaźnikami, ale staram się to pojąć. Z tym kodem wszytsko było by fajnie kompiluje sie uruchamia i nawet cos liczy, tylko no właśnie co?? Bo przy wartościach elementów tablicy dajmy na to: 1,2,3 suma wychodzi 1 a przy 2,3,4 odpowiednio 2 wiec chyba cos nie tak jest ale sam nie wiem co.

    Code:

    #include <cstdlib>
    #include <iostream>

    using namespace std;

     
    struct struktura
    {
          public:
          char nazwa_p[20];
          int ilosc_p;
          float cena_n[3];
          float cena_b[3];
         
         struktura(void)
         {
              for(int i = 0;i <= 3;i++){this->nazwa_p[i] = 0;}
         }
    };

    float liczy(float *tablica)
    {
        float suma;
        suma=0;
        for (int i=0;i<3;i++)
        {
            suma+=tablica[i];
            tablica++;
        }
        return suma;
    }

    double zaokraglij(double x)
    {
      int y = x * 10000;
      if (y % 10 >= 5) y += 10;
      return (y / 10) * 0.001;
    }

    int main(int argc, char *argv[])
    {
        struktura *tablica = new struktura[3];
            for(int i=0; i<3; i++)
        {
        cin>>*tablica[i].cena_n;
        }
        cout<<zaokraglij(liczy(tablica[0].cena_n))<<endl;
        system("pause");
        return 0;
    }

    może w funkcji sumującej w miejscu gdzie jest suma+=tablica[i] to powinno być cos zeby on liczył tablica[i].nazwa_n?? Ale nie wiem. Aha i dlaczego tu:
    Code:
    cout<<zaokraglij(liczy(tablica[0].cena_n))<<endl;
    Jest tablica[0] ?? może dlatego on liczy tylko pierwszy element tablicy??

    0