Kanał - ATNEL tech-forum
Wszystkie działy
Najnowsze wątki



Teraz jest 30 mar 2026, o 22:37


Strefa czasowa: UTC + 1





Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 
Autor Wiadomość
 Tytuł: Pętla for()
PostNapisane: 4 mar 2014, o 13:23 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 03 sie 2013
Posty: 87
Pomógł: 0

Witam

Prosiłbym o podpowiedź jak zmodyfikować pętlę:

Kod:
for(uint8_t i=80; i<190; i++){}


mogła przybierać wartości w kilku zakresach np:
80 do 90
110 do 120
150 do 190

z wykluczeniem
91 do 109
121 do 149



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 13:32 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 06 maja 2012
Posty: 233
Lokalizacja: Gdynia
Pomógł: 15

Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 13:42 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

Może tak.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


Autor postu otrzymał pochwałę

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 14:33 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

kurnachatka napisał(a):
Może tak.


Nie.
Po pierwsze
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

jest odpowiednikiem
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.

Po drugie i przede wszystkim, ingerencja w wartość zmiennej poza nagłówkiem pętli for to marny pomysł. I nie chodzi o to, że nie można tylko o to, że tak się po prostu nie robi. Zobacz: już na dzień dobry zrobiłeś kiksa w przypisanej wartości, a to tylko jeden z wielu potencjalnych problemów stworzonych przez taki zapis.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 20:19 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

Cytuj:
kurnachatka napisał(a):
Może tak.


Nie.
Po pierwsze
Składnia: [ Pobierz ] [ Ukryj ]
język c
for(uint8_t i=80; i<190; i++)
{
  bla;
  ble;
}
GeSHi

jest odpowiednikiem
Składnia: [ Pobierz ] [ Ukryj ]
język c
uint8_t i=80;
while( i<190)
{
  bla;
  ble;
  i++;
}
GeSHi

Po drugie i przede wszystkim, ingerencja w wartość zmiennej poza nagłówkiem pętli for to marny pomysł. I nie chodzi o to, że nie można tylko o to, że tak się po prostu nie robi. Zobacz: już na dzień dobry zrobiłeś kiksa w przypisanej wartości, a to tylko jeden z wielu potencjalnych problemów stworzonych przez taki zapis.


Kolego xor nie za bardzo wiem o co ci chodzi.
Rozumiem że na pewno są inne bardziej optymalne metody rozwiązania tego zagadnienia.
To może kolega by się nimi pochwalił.
Moje rozwiązanie na pewno działa.
Poniżej umieszczam cały kod który sobie możesz wyświetlić na terminalu i sprawdzić czy spełnia pożądany rezultat kolegi mickeu.
Składnia: [ Pobierz ] [ Ukryj ]
język c
Musisz się zalogować, aby zobaczyć kod źródłowy. Tylko zalogowani użytkownicy mogą widzieć kod.


------------------------ [ Dodano po: 29 minutach ]

Obrazek

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 22:24 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Jeśli działa to w porządku. ;-)
...ale lepiej unikać takich potworków. Lepiej dla wszystkich a przede wszystkim dla autora.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 22:30 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 15 lip 2012
Posty: 203
Lokalizacja: Sosnowiec
Pomógł: 2

Nie bardzo wiem gdzie tam widzisz błąd Xor

_________________
sig on ;)



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 22:35 
Offline
Użytkownik
Avatar użytkownika

Dołączył(a): 07 lut 2013
Posty: 600
Pomógł: 47

Prawdopodobnie tyle rozwiązań co autorów :lol:

Zamiast tych if-ów można by jeszcze wykonać trzy pętle for jedna za drugą każda dla żądanego zakresu.

_________________
https://www.instagram.com/myfirstquadcopter/



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 23:00 
Offline
Użytkownik

Dołączył(a): 20 wrz 2013
Posty: 647
Zbananowany użytkownik

Pomógł: 101

Nie "Xor" tylko "xor" ;-)
Gdzie leży błąd? No niby błędu nie ma, rzekomo wszystko działa, gra i bucy, ale...masz zamiar za każdym razem dla sprawdzenia pisać program? Albo gapić sie nie wiadomo ile czasu w kod zastanawiając jak zmieni sie indeks w każdym obrocie pętli? A do tego prowadzi łamanie zasad. W tym wypadku zasadą jest skupienie CALEGO sterowania w nagłówku.

_________________
+++++[>++++<-]>[>++++++<-]>.---------.+++.



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
PostNapisane: 4 mar 2014, o 23:16 
Offline
Moderator
Avatar użytkownika

Dołączył(a): 03 paź 2011
Posty: 27450
Lokalizacja: Szczecin
Pomógł: 1045

Jeśli ja coś mogę dodać - to powiem, że zdecydowanie lepszym rozwiązaniem jest zastosowanie continue jak to pokazał kolega nixie.

xor - ma rację mówiąc, że nie warto ingerować w zmienne służące do iteracji pętli. I wcale nie chodzi o to żeby to był jakiś błąd co pokazał kolega kurnachatka .... dlatego, że widać - że rozwiązań będzie tyle ilu programistów ;)

to jednak continue i brak ingerencji w zmienną iteracyjną pozwala przede wszystkim na

1. większą czytelność kodu
2. zdecydowanie mniejsze ryzyko popełnienia błędów, których na tak prostym przykładzie ciężko wskazać
3. często nawet lepszą optymalizację kodu

a na zakończenie - zastosowanie w takim wypadku continue to naturalna droga w C (i nie tylko w C) w takim wypadku, dobry styl programowania a widać, że niewiele osób korzysta z continue, często nie do końca nawet rozumiejąc do czego i kiedy można to zastosować. Tymczasem tu mamy właśnie taki ciekawy i dobrze przemawiający do wyobraźni przypadek - gdzie? i jak? stosować continue

_________________
zapraszam na blog: http://www.mirekk36.blogspot.com (mój nick Skype: mirekk36 ) [ obejrzyj Kurs EAGLE ] [ mój kanał YT TV www.youtube.com/mirekk36 ]



Góra
 Zobacz profil  
cytowanie selektywne  Cytuj  
Wyświetl posty nie starsze niż:  Sortuj wg  
Utwórz nowy wątek Odpowiedz w wątku  [ Posty: 10 ] 

Strefa czasowa: UTC + 1


Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników i 4 gości


Nie możesz rozpoczynać nowych wątków
Nie możesz odpowiadać w wątkach
Nie możesz edytować swoich postów
Nie możesz usuwać swoich postów
Nie możesz dodawać załączników

Szukaj:
Skocz do:  
Sitemap
Technologię dostarcza phpBB® Forum Software © phpBB Group phpBB3.PL
phpBB SEO