Przekazywanie tablicy ze strukturą do funkcji.

0

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

#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. 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 man wpisać w deklaracji funkcji oraz co przy jej wywoływaniu za parametr. Z góry dzięki.

0

stwórz nową tablicę, wrzuć do niej co trzeba, i tą nową wrzuć do funkcji żeby policzyła, chyba dobre rozwiązanie.

0

Ten kod w ogóle mi się nie podoba ;-P Chcesz do inta dodawać chara, nie indeksujesz swojej tablicy struktur mimo że chcesz wrzucać kolejne jej pola, używasz jakiegoś typu 'baza' nie wiadomo skąd, alokujesz dynamicznie mimo że tablica ma stały rozmiar, nie zwalniasz zaalokowanej pamięci, o co tutaj w ogóle chodzi? ;-P Nie wiem skąd przekleiłeś ten kod ale nawet gdy stosuję się algorytm copy'ego-paste'a trzeba trochę myśleć ;)

0

Tu masz poprawilem ci kod ale nie wiem czy o to ci chodzilo :)

#include <cstdlib>
#include <iostream>
using namespace std;
struct struktura
{
      char nazwa_p[20];
      int ilosc_p;
      float cena_n;
      float cena_b;
};
int liczy(struktura & tablica)
{
	int suma=0;
	for (int i=0;i<10;i++)
	suma=suma+ tablica.cena_b;
	return suma;
}
int main(int argc, char *argv[])
{
	struktura nowa;
	liczy(nowa);
	system("PAUSE");
	return EXIT_SUCCESS;
}
0

[rotfl]
Przekazanie do funkcji - dobrze. Przydalaby sie tez zmienna informujaca o ilosci elementow w tablicy. Chyba, ze chodzi Ci zawsze o 10 pierwszych elementow. Co jesli przekazesz mniej niz 10 elementowa tablice?

Tworzenie tablicy - Pala. baza*tablica=new baza[20]; Dlaczego koniecznie dynamicznie alokujesz pamiec? Tak bardzo zalezy Ci zzeby umiescic to na stercie? Poza tym... masz zmienna typu baza? Chyba raczej struktura * tablica=new struktura[20];

Wywolanie funkcji - dobrze (liczy(tablica);)

Odwolywanie sie do elementow tablicy - pala z minusem.
baza*tablica=new baza[20];
suma=suma+tablica.nazwa_p;

Odwolywanie sie do elementow tablicy przez kropke... Bez komentarza.

EDIT
Przeczytalem, ze chodzi o przekazanie tablicy struktur. Moj blad... Ale niech zostanie dla potomnosci

0

Sorry trochę namieszałem z tym kodem. Pisałem tak na szybko bo gdybym wkleił całość co mam napisane to by trochę dużo zajęło i było by nieprzejrzysto jeżeli chodzi o mój problem. A co do kodu to może inaczej:

#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.cena_n;
    return suma;
}

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

Jak w tym wypadku zrobić żeby przy wywoływaniu funkcji można było dać takie wywołanie aby liczyła ona np. raz elementy ze struktury cena_n a drugi ze struktury cena_b??

0

Proponuje dobrą książkę. CO TO STRUKTURA cena_n SIE PYTAM SIE ?? To element struktury. A to o czym mowisz przy uzyciu jednej, bez dodatkowego parametru ( 1 licz to i to, 2 to i tamto) jest niewykonalne. :| :| :|

0

Hallo luqis!

Moze to Ci troche pomoze:

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

float liczy(struktura* tablica)
{
    float suma =0.0;

    for (int i=0; i<5; i++)
    suma = suma + tablica[i].cena_n;

    return suma;
}

int _tmain(int argc, _TCHAR* argv[])
{
    float suma = 0.0;
		 
    struktura* tablica = new struktura[05];

    tablica[0].cena_n = 1.0;
    tablica[1].cena_n = 2.0;
    tablica[2].cena_n = 3.0;
    tablica[3].cena_n = 4.0;
    tablica[4].cena_n = 5.0;

    suma = liczy(tablica);

    system("PAUSE");
    return EXIT_SUCCESS;	
}

Pozdrawiam
Markus

1 użytkowników online, w tym zalogowanych: 0, gości: 1