[C++]zwracanie (losowej) tablicy


(Tomaszu00) #1

Witam,

muszę napisać funkcję, która będzie generować tablicę liczb losowych całkowitych. Moja funkcja wygląda tak:

int funckja1(int tablica[], int size)

{

  for (int l=0; l<=size; l++)

  {

    tablica[l]=rand()%101;

  }

[b]return ???;[/b]

}

I co wpisać, aby zwróciło tą tablicę?

Bo co nie wpiszę (tablica[l],tablica[],tablica) to wywala błąd.


(Szarek) #2

Zawsze oryginał tablicy jest modyfikowany wewnątrz funkcji dlatego nie trzeba tablicy zwracać.

void funckja1(int tablica[], int size)

{

  for (int l=0; l<=size; l++)

  {

    tablica[l]=rand()%101;

  }

}

(Sawyer47) #3

Zasadniczo nie można zwrócić tablicy w C++, a jedynie wskaźnik. W ten funkcji już modyfikujesz tablicę (wpisujesz do niej wartości losowe), więc nie ma potrzeby nic zwracać, po wyjściu z funkcji tablica zostanie zmieniona.


(klonmarcin) #4

jeśli zadeklarujesz tablicę globalnie to po odpaleniu funkcji będzie ona dostępna z wartościami globalnie.

:slight_smile:


([alex]) #5

jeżeli już musisz zwrócić tablicę to:

struct TAB { unsigned size; int *tb; };

(Tomaszu00) #6

wielkie dzięki, skorzystałem z nie zwracania (jakkolwiek to brzmi po "polskiemu"), korzystając z tematu zadam jeszcze jedno pytanie. Mam za zadanie stworzyć funkcję, która (jak wcześniej napisałem) wygeneruje tablicę liczb losowych i drugą funkcję, która zliczy wszystkie parzyste liczby w tej tablicy. No i tu moje pytanie. Czy da się jakoś zagnieździć funkcje? Bo gdy w drugiej funkcji odwołuję się do tablicy kompilator krzyczy, że jest ona niezadeklarowana. Gdy ją deklaruje to już się tworzy nowa tablica.

Kod wygląda tak:

#include 


using namespace std;


int funckja1(int tablica[], int size)

{

  for (int l=0; l<=size; l++)

  {

    tablica[l]=rand()%50;

  }

}


int parzyste()

{

  int suma=0;

  for (int l=0; l<=size; l++)

  {

    if (tab[l]%2==0)

      {

         suma+=1;

      }

}

  return suma;

}

int main()

{

 int tab [100];

  srand(time(0));

  funckja1(tab,10);

  parzyste();

  return 0;

}

(Sawyer47) #7

Niech funkcja parzyste przyjmuje tablicę, na której ma działać.

Bardzo złą praktyką jest używanie w funkcji zmiennych z zewnątrz funkcji, nieprzekazanych jako argument - prawie nigdy nie powinno się tego robić.


([alex]) #8
  1. Jak funkcja nic nie zwraca to musi być typu void:

    void funckja1(int tablica[], int size) [/code]

  2. Zastanów się co oznacza zmienna size, zazwyczaj to rozmiar tablicy "w sztukach" u ciebie maksymalny indeks.

  3. Funkcja parzyste korzysta z niedostępnych zmiennych tab oraz size.

  4. Użycie nazw zmiennych o nazwach "l", "O" i podobnych jest bezsensem - sam sobie utrudniasz.


(Szarek) #9

Jeżeli masz jeszcze jakieś wątpliwości to przeanalizuj to:

http://wklej.org/hash/06752df4e4/


(Tomaszu00) #10

wielkie dzięki, już poprawiłem i działa :slight_smile: