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

Losowanie liczb i wywolywanie funkcji

Object Storage Arubacloud
0 głosów
574 wizyt
pytanie zadane 20 czerwca 2015 w C i C++ przez szymonn7 Początkujący (350 p.)
Mam 2 funkcje...na pierwszy rzut oka wydają się w porządku, ale nei do końca. Kiedy przykładowo wpisze liczby 1,2,3, to program wypisze mi je w kolejności 3,1,2. Dlaczego tak jest?

Oto kod:

http://pastebin.com/F6xjV9Wi

3 odpowiedzi

+1 głos
odpowiedź 20 czerwca 2015 przez Boshi VIP (100,240 p.)
wybrane 20 czerwca 2015 przez szymonn7
 
Najlepsza

Skasuj tą zmienną liczba i wypisz to jak człowiek  z samej tablicy.

 

    do{
               
                 cout<<tablica[licznik];
                licznik++;
} while (licznik < 3);

 

komentarz 20 czerwca 2015 przez draghan VIP (106,230 p.)
Daj się człowiekowi wdrożyć. ;D Widać, że początkujący - niech się nie zniechęca od razu. :)

Moim zdaniem na początku drogi dobrze jest widzieć, że droga prowadzi tam, dokąd chcemy. Dopiero po przejściu kawałka można się zacząć rozglądać za skrótami. :)
komentarz 20 czerwca 2015 przez Boshi VIP (100,240 p.)
W sumie też racja, chociaż warto uczyć się dobrych nawyków od razu bo potem wychodzą bohomzy  nie mające za wiele wspólnego z kodem :)
komentarz 20 czerwca 2015 przez draghan VIP (106,230 p.)
Też słuszny punkt widzenia. Trzeba dobrze wyważyć te dwa podejścia, żeby wyszedł uczniowi efekt, a nie wyszedł sam uczeń. ;D
komentarz 20 czerwca 2015 przez szymonn7 Początkujący (350 p.)
Podoba mi sie morał :D Dzieki panowie :)
0 głosów
odpowiedź 20 czerwca 2015 przez draghan VIP (106,230 p.)
W pętli wypisującej powinieneś najpierw wpisać wartość z tablicy do zmiennej liczba, dopiero potem ją drukować. :)

A tak nawiasem: do operacji na tablicach wygodniejsza jest pętla for. :)
0 głosów
odpowiedź 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)

Niepotrzebnie komplikujesz sobie życie podczas wypisywania liczb, lepiej zrobić to w ten sposób:

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

I jeżeli już przesyłasz jako argument funkcji rozmiar tablicy, to skożystaj z niego, żeby uczynić swoją funkcję bardziej w uniwersalną. Swoją drogą tablice lepiej jest przekazywać do funkcji w orginale (za pomocą wskaźnika do pierwszego elementu, albo referencji) :)

Pozdrawiam!

komentarz 20 czerwca 2015 przez draghan VIP (106,230 p.)
A w jaki sposób w tej chwili szymonn7 podaje tablicę do funkcji? :)
komentarz 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Przesyła kopię tablicy
komentarz 20 czerwca 2015 przez Boshi VIP (100,240 p.)
Zdaje się, że jest to  jedno i to samo. I tak  czy podajemy jako *tab czy tab[] to dostajemy wskaźnik na pierwszy element  tablicy.

 W c++ i nie tylko tablice  są przekazywane tylko przez referencje.
komentarz 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
W wg mnie to nazwa tablicy jest wskaźnikiem do jej zerowego elementu, nie powinno być więc samo tab?
komentarz 20 czerwca 2015 przez draghan VIP (106,230 p.)
To jest referencja. :) Tablic w C oraz C++ nie przekazuje się w postaci kopii - po prostu się nie da. :)

Gdyby to była kopia, nie byłoby możliwe wypełnienie tablicy z main w funkcji podajLiczby(). :)
komentarz 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Możliwe, że masz rację, dość dawno nie używałem zwykłych tablic :)
komentarz 20 czerwca 2015 przez Boshi VIP (100,240 p.)
@iwan,  nie jestem pewny, ale chyba samo tab też przejdzie, dawno w c++ nie pisałem nic, tyle, że to wszystko jest jedno i to samo.
komentarz 20 czerwca 2015 przez iwan9449 Pasjonat (20,810 p.)
Samo tab przejdzie na bank, ale nie pamiętam dokładnie jak jest z przekazywaniem tablic do funkcji ;)
komentarz 20 czerwca 2015 przez draghan VIP (106,230 p.)

Jeśli mamy kod, np:

int tab[5];

to do funkcji, która oczekuje parametru tablicowego, nie można posłać *tab, bo operator gwiazdki to dereferencja - a że nazwa tablicy jest wskaźnikiem do jej zerowego elementu, dostajemy w efekcie wartość z tablicy spod indeksu zero: tab[0] - co nie przejdzie.

Jeśli mamy funkcję o nagłówku:

void fcja(int tablica[]);

to możemy do niej posłać:

  1. fcja(tab);
  2. int * ptab = tab; fcja(ptab);

Efekt będzie tożsamy.

Podobne pytania

0 głosów
0 odpowiedzi 436 wizyt
pytanie zadane 30 stycznia 2019 w Offtop przez Konrad Gałach Użytkownik (880 p.)
0 głosów
1 odpowiedź 320 wizyt
pytanie zadane 15 marca 2016 w HTML i CSS przez Filip31411 Dyskutant (8,820 p.)
0 głosów
1 odpowiedź 115 wizyt
pytanie zadane 24 maja 2017 w C i C++ przez MagicznyJasio Użytkownik (580 p.)

92,568 zapytań

141,424 odpowiedzi

319,634 komentarzy

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

...