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

Losowanie liczb i wywolywanie funkcji

VPS Starter Arubacloud
0 głosów
769 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 497 wizyt
pytanie zadane 30 stycznia 2019 w Offtop przez Konrad Gałach Użytkownik (880 p.)
0 głosów
1 odpowiedź 408 wizyt
pytanie zadane 15 marca 2016 w HTML i CSS przez Filip2248 Dyskutant (8,840 p.)
0 głosów
1 odpowiedź 129 wizyt
pytanie zadane 24 maja 2017 w C i C++ przez MagicznyJasio Użytkownik (580 p.)

92,979 zapytań

141,941 odpowiedzi

321,185 komentarzy

62,303 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...