Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek dla 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ół

07 Wrz 2015 20:23 819 18
  • Poziom 5  
    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?
  • Pomocny post
    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.
  • Poziom 5  
    A czym się różni i++ od ++i ? I jakie to ma znaczenie ?
  • Pomocny post
    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 :)
  • Poziom 5  
    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 ?
  • Pomocny post
    Poziom 20  
    jaja11jaja napisał:

    Kod: c
    Zaloguj się, aby zobaczyć kod



    A tak? :D
  • Poziom 32  
    Rezystoreczek, pytanie było: - "czym się różni i++ od ++i" - wg mnie twoja odpowiedź jest zbyt szeroka.
  • 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 ;)
  • Pomocny post
    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ć.
  • 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. ; )
  • 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? ;>
  • 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
  • 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ą. ;)
  • 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!
  • 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ą". ;)
  • Moderator Programowanie
    W związku z tym, że dalsza dyskusja nie wnosi niczego nowego, a zaczyna... "nieprzyjemnie pachnieć", temat zamykam.