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

Tablice do funkcji

Object Storage Arubacloud
+1 głos
226 wizyt
pytanie zadane 16 lipca 2019 w C i C++ przez magda_19 Gaduła (3,080 p.)

Próbuję rozwiązać takie oto zadanie: Napisz program, który wylosuje 999 liczb całkowitych z zakresu od 4 do 10 włącznie, wypisze te wartości na ekran, po czym zsumuje je i wynik wypisze na ekran. Wszelkie operacje mają zostać zrealizowane w oparciu o funkcje. Tablica ma być zadeklarowana w funkcji main. Oczekiwane funkcje: 
Wypełnienie tablicy o podanym rozmiarze losowymi liczbami z przedziału podawanego przez argumenty funkcji.
Sumowanie określonej ilości liczb znajdujących się w tablicy i zwrot wyniku.
Wypisywanie zawartości tablicy.

Nie wiem gdzie jest właściwie błąd. Oto kod:

#include <iostream>
#include <time.h>
#include <cstdlib>

using namespace std;

int wylosujLiczby (int tablica [], 999, 4, 10)
{
    for (int i = 0; i < 999; i++)
    {
        tablica [i] = rand() % 11;

        cout << tablica [i];
    }


}

int wypiszLiczby (int tablica[], 999)
{
    for (int i = 0; i < 999; i++)
    {
        cout << tablica [i];
        i++;
    }
}

int obliczSume (int tablica[], 999)
{
    int Suma = 0;

    for (int i = 0; i < 999; i++)
    {
        suma  = suma + tablica [i];
    }
    return suma;
}


int main()
{
    int tablica [999];

    srand(time(NULL));
    
    int suma;


    cout << wylosujLiczby(tablica, 999, 4, 10);

    cout << "Suma liczb wynosi: " << obliczSume(tablica, 999) << endl;



    return 0;
}

 

2 odpowiedzi

+1 głos
odpowiedź 16 lipca 2019 przez tkz Nałogowiec (42,000 p.)
1. Losujesz od 0 do 10, to "srand(time(NULL));" powinno być w funckji.

2. Poczytaj o std::random.

3. Popraw przekazywanie tablicy do funkcji, bo to co Ty masz jest bez sensu.
1
komentarz 16 lipca 2019 przez niezalogowany

1. Niepowinno, bo zazwyczaj nie chcesz np ustawić tego samego ziarna kolejny raz i otrzymać tych samych liczb, lub by wylosowane liczby zależały od czasu:

https://en.cppreference.com/w/cpp/numeric/random/srand

Generally speaking, the pseudo-random number generator should only be seeded once, before any calls to rand(), at the start of the program. It should not be repeatedly seeded, or reseeded every time you wish to generate a new batch of pseudo-random numbers.

komentarz 16 lipca 2019 przez tkz Nałogowiec (42,000 p.)
Powinno być nad forem, ponieważ tylko zaciemnia zamiary, po co to tam, "skoro nic nie robi". Dla jasności kodu powinno znaleźć się w funkcji.
+1 głos
odpowiedź 16 lipca 2019 przez Marcin Siniarski Gaduła (4,420 p.)

Wystarczy popatrzeć na argumenty funkcji.

int wylosujLiczby (int tablica [], 999, 4, 10)
  1. Tablice to wskaźniki.
  2. 999, 4, 10 - Tu powinny być zmienne, a nie ich wartości.
  3. Funkcja nic nie zwraca więc powinna mieć void jako typ zwracający

Z tych punktów powstaje nam taka oto funkcja

void wylosujLiczby (int* tablica, int size, int min, int max)

Zastosuj je do reszty i wszystko będzie w porządku.
Drobna rada: Naucz się budowy funkcji, co to są wskaźniki i referencje zanim zaczniesz z funkcjami

komentarz 17 lipca 2019 przez Piotr Batko Stary wyjadacz (13,190 p.)

Tablice to nie wskaźniki. Pierwszy argument był przekazywany do funkcji poprawnie. Zapis int tablica[] jest w porządku i oznacza dokładnie to samo, co int * tablica.

Ja go preferuję od zapisu z gwiazdką, bo nawiasami kwadratowymi sugeruje się, że przekazywany jest wskaźnik do elementów tablicy.

komentarz 17 lipca 2019 przez Marcin Siniarski Gaduła (4,420 p.)
edycja 17 lipca 2019 przez Marcin Siniarski

Dobrze nie znałem, że taki zapis jest dozwolony, ale tablice są wskaźnikami. Popatrz

int tab[5] = {1,2,3,4,5};
cout << *(tab + 4) << endl; // Wypisuje 5
cout << *tab << endl; // Wypisuje 1
komentarz 18 lipca 2019 przez Piotr Batko Stary wyjadacz (13,190 p.)

To niczego nie dowodzi. Analogiczny dowód, że int-y są bool-ami:

if (42) std::cout << "int to bool!";

Tak samo, jak int-y niejawnie konwertują się do typu bool, tak samo tablice niejawnie konwertują się do wskaźników. Ale to nie znaczy, że int-y są bool-ami; to nie znaczy że tablice są wskaźnikami.

Tablica to zbiór elementów ułożonych w pamięci w jednym ciągu. Wskaźnik to zmienna, która przechowuje adres innej zmiennej.

Podobne pytania

0 głosów
1 odpowiedź 410 wizyt
0 głosów
2 odpowiedzi 1,330 wizyt
pytanie zadane 6 października 2015 w C i C++ przez Pscoolka Nowicjusz (240 p.)
+2 głosów
3 odpowiedzi 1,161 wizyt

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 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!

...