Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

C - Losowanie liczb - w górę i w dół

jaja11jaja 07 Wrz 2015 20:23 684 18
  • #1 07 Wrz 2015 20:23
    jaja11jaja
    Poziom 3  

    Siema.
    Robię program na poprawkę ale coś nie działa:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    w jedna strone sortowanie dziala w drugą nie, czemu?

    0 18
  • Pomocny post
    #2 07 Wrz 2015 20:27
    -psiak-
    Poziom 32  

    ponieważ: for(i = 1; i > N; i++)
    i nie używaj i++ tam gdzie można użyć ++i, to ci się okropnie zemści.

    1
  • #3 07 Wrz 2015 20:53
    jaja11jaja
    Poziom 3  

    A czym się różni i++ od ++i ? I jakie to ma znaczenie ?

    0
  • Pomocny post
    #4 07 Wrz 2015 20:56
    Rezystoreczek
    Poziom 20  

    W złym miejscu zmieniłeś znak :D myśl, co robisz. Chciałeś go zmienić w ifie, by w odwrotnym kierunku sortować. Zmieniłeś w forze, przez co od razu warunek jest fałszem i się nie sprawdza :)

    1
  • #5 07 Wrz 2015 21:04
    jaja11jaja
    Poziom 3  

    Rezystoreczek napisał:
    W złym miejscu zmieniłeś znak :D myśl, co robisz. Chciałeś go zmienić w ifie, by w odwrotnym kierunku sortować. Zmieniłeś w forze, przez co od razu warunek jest fałszem i się nie sprawdza :)


    Czyli, że co ?
    Kod: c
    Zaloguj się, aby zobaczyć kod
    itd ?

    Czy o co Ci chodzi ?

    0
  • Pomocny post
    #6 07 Wrz 2015 21:09
    Rezystoreczek
    Poziom 20  

    jaja11jaja napisał:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    A tak? :D

    1
  • #9 07 Wrz 2015 23:56
    -psiak-
    Poziom 32  

    Rezystoreczek, pytanie było: - "czym się różni i++ od ++i" - wg mnie twoja odpowiedź jest zbyt szeroka.

    0
  • #10 08 Wrz 2015 00:55
    Rezystoreczek
    Poziom 20  

    no tak, no ale jak on doczyta aż do i++ i ++i, to przy okazji wchłonie dużo wiedzy, która mu ułatwi potem dalszą działalność z kodowaniem ;)

    0
  • Pomocny post
    #11 09 Wrz 2015 12:01
    azra
    Poziom 16  

    i++ wykonuje postinkrementację zmiennej i, to znaczy: operator ten przeprowadza inkrementację zmiennej, ale zwraca oryginalną, niezmienioną wartość.

    Kod: c
    Zaloguj się, aby zobaczyć kod


    ++i wykonuje preinkrementację, to znaczy: przeprowadza inkrementację i zwraca zmodyfikowaną wartość.
    Kod: c
    Zaloguj się, aby zobaczyć kod


    Ale nie przesadzałbym aż tak bardzo (odnośnie "to ci się okropnie zemści") - w miarę nowe kompilatory zwykle zwracają taki sam kod dla i++ i ++i jeżeli wartość zwracana przez operator nie jest używana. Oczywiście przy mikrokontrolerach może i warto sobie to przynajmniej sprawdzić.

    -1
  • #13 09 Wrz 2015 16:30
    azra
    Poziom 16  

    Toć i jest tam "zwykle". ;) W pewnych okolicznościach, które nie muszą być wcale oczywiste, kod może się mimo wszystko różnić, dlatego i dopisałem, że należy to sobie sprawdzić w praktyce.

    Jasnym chyba jest, że należy się zapoznać z operatorami, których się chce używać. Szczególnie w C++, gdzie będzie to miało większe znaczenie, bo tymczasowa kopia obiektu może być zdecydowanie bardziej kosztowna niż jakiegoś tam integera, no i wtedy i++ czy ++i w pętli for będzie miało większe znaczenie.

    Jesteśmy jednak w kontekście C, gdzie śmiem wątpić, że na PC dodatkowa kopia inta będzie nam aż tak bruździła. O ile w ogóle w kodzie wynikowym będzie takowa.

    Jak już robić, to robić dobrze - zgadzam się. Ale też podejmujmy decyzje świadomie. Świadomie, na bazie wiedzy, a nie ze strachu przed jakąś "okropną zemstą", bo to nie jest wcale żadna czarna magia. ; )

    0
  • #14 09 Wrz 2015 16:37
    Rezystoreczek
    Poziom 20  

    Ale w takim przypadku:

    Kod: c
    Zaloguj się, aby zobaczyć kod


    strona po której są plusiki ma niezwykle ważne znaczenie, hm? ;>

    0
  • #15 09 Wrz 2015 16:40
    -psiak-
    Poziom 32  

    Świadomie - zgadzam się. Czyli jak nie ma różnicy użyć i++ czy ++i to świadomie używamy ++i, zamiast stawiać kloca na korytarzu w nadzieje że firma zatrudnia sprzątaczkę i ta sprzątaczka zdoła posprzątać.

    Rezystoreczek napisał:
    ... strona po której są plusiki ma niezwykle ważne znaczenie
    Owszem ale w takim przypadku radziłbym:
    Kod: c
    Zaloguj się, aby zobaczyć kod
    widzisz jak wszystko proste o ile nie pchasz na siłę i++ ;> ;P

    1
  • #16 09 Wrz 2015 17:34
    azra
    Poziom 16  

    Rezystoreczek napisał:
    Ale w takim przypadku: [snap!]
    strona po której są plusiki ma niezwykle ważne znaczenie, hm? ;>

    No oczywiście, bo zmienia działanie programu. Nie taki był jednak kontekst ani pierwszej wypowiedzi, ani moich.

    Cytat:
    Czyli jak nie ma różnicy użyć i++ czy ++i to świadomie używamy ++i
    Ogólnie rzecz biorąc, tak, chyba, że - świadomie - podejmujemy decyzję, że w nosie mamy tę - o ile w ogóle w kodzie wynikowym takowa będzie - kopię inta, bo kod nam lepiej wygląda z post- zamiast z preinkrementacją. ;)

    0
  • #17 09 Wrz 2015 17:38
    -psiak-
    Poziom 32  

    azra napisał:
    ... bo kod nam lepiej wygląda z post- zamiast z preinkrementacją. ;)
    Możemy stawiać kloca na korytarzu ponieważ dla nas korytarz lepiej wygląda z klocem!

    1
  • #18 09 Wrz 2015 20:44
    azra
    Poziom 16  

    ...tak, przynajmniej dopóki tylko my koło tego kloca chodzimy i nie ma specjalnych konsekwencji (bądź nie obchodzą one nas, pomimo tego, że jesteśmy ich świadomi).

    Bo to i nie taki wielki kloc jeżeli rozmawiamy o intach i niepotrzebnej tymczasowej kopii, której być może w ogóle nie ma, bo ją optymalizacja wycięła.

    To już niemal problem klasy "mogę to napisać krócej, ale dodam jeszcze jedną tymczasową zmienną" - czasami czytelność jest ważniejsza niż optymalizacja.

    Ogółem, ja się z Tobą we wszystkim zgadzam, poza tym, że to aż taki wielki problem jeśli chodzi o tymczasową kopię inta, no i z podejściem straszenia "okropną zemstą". ;)

    0
  • #19 10 Wrz 2015 09:00
    adamas_nt
    Moderator Programowanie

    W związku z tym, że dalsza dyskusja nie wnosi niczego nowego, a zaczyna... "nieprzyjemnie pachnieć", temat zamykam.

    0