-
Data: 2017-10-24 11:24:17
Temat: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
Od: Piotr Gałka <p...@c...pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]W dniu 2017-10-23 o 23:07, ToMasz pisze:
> Czy moglibyście mi pi razy oko wyjasnić jak to sie w C robi? Tyle ze nie
> mogą być to osobne programy zapisane na dysku (do wczytywania w miarę
> trwania prania), bo to trzeba na raz wgrać do arduino.
>
W C zrobisz np. tak:
int obroty(int kierunek,int czas)
{
// tu sterowanie silnikiem i odmierzenie czasu
}
int pranie(int cykli)
{
int i;
int err;
for(i=0;i<cykli;i++)
{
err=obroty(0,5); // w lewo, przez 5 sekund
if(err!=0)return err;
err=obroty(1,5); // w prawo, przez 5 sekund
if(err!=0)return err;
}
return 0; // oznacza że się udało bez błędów
}
//podobnie
int plukanie(int cykli)
{
}
int wirowanie(int czas, int predkosc)
{
}
//i całość
void main()
{
int err;
err=wlewanie_wody();
if(err==0)err=pranie(50);
if(err==0)err=plukanie(5);
if(err==0)err=wirowanie(20,1000);
if(err!=0)mrugaj_czerwownym_LEDem_w_nieskonczonosc()
;
zapal_LED_koniec_prania();
}
Użyłem int jako err bo ogólnie błędom można nadać różne numery i je
rozróżniać.
Ale jak jest tylko zero/jedynkowo to czytelniej byłoby wszędzie gdzie
jest err zamiast int użyć bool.
Ja zaczynałem się uczyć C od książki Kernighan, Ritche "Język C", ale to
było wieki temu. Nie mam pojęcia czy teraz jest coś lepszego aby zacząć
od podstaw.
Ale na pewno warto - choćby dla swojego samorozwoju.
Z tym, że ja uważam, że nie koniecznie trzeba zaprzęgać C do hardawre'u.
Równie dobrze można korzystać z komputera samego w sobie.
Zadanie 1 ode mnie:
1.Napisz program do wypisywania na ekranie kolejnych liczb pierwszych
(np. do 100, a jak już będzie działał to zmień zakres na 1000).
2.Otocz go pomiarem czasu wykonania - czyli jak kończy to wypisuje ile
mu to zajęło.
3.Rozdziel proces wyliczania od procesu wypisywania liczb pierwszych
(czyli wyniki zbieraj w buforze i potem wypisuj z bufora).
4.Zamiast wypisywać liczby pierwsze wypisz tylko ich liczbę (wiesz ile
zebrałeś ich w buforze). Możesz zwiększyć zakres poszukiwania - może do
10000.
5.Zastanów się co można zmienić w algorytmie aby program liczył szybciej
- masz gotowe narzędzie do sprawdzenia czy pomysł jest dobry, czy zły, a
wypisywanie liczby znalezionych liczb ma wykryć sytuacje, gdyby
modyfikacja algorytmu coś w nim zepsuła i jednocześnie nie zajmuje czasu
wypisywaniem wszystkich liczb, bo obsługa ekranu jest czasochłonna
Ewentualne zadanie 2 (moim zdaniem trudniejsze):
Mieliśmy kiedyś taką grę "samotnik" (jest pewnie wiele typów). Trójkąt -
w dolnej linii 5 dziurek, w następnej 4 itd aż na górze jedna. Wkłada
się w to pionki zostawiając jedną dziurkę wolną i następnie zbija je jak
w warcabach. Celem jest aby został tylko jeden pionek.
Mój, wtedy chyba 7 letni, syn się bardzo irytował, że to nigdy nie da
się zrobić i pytał, czy ja umiem. Powiedziałem mu, że ja takie problemy
rozwiązuję inaczej. Usiedliśmy przy komputerze i po około 2h miałem
program (w międzyczasie tłumaczyłem dziecku mniej więcej jak zapisuję to
zadanie (obrazkowo na papierze, a nie w kodzie)), który dla każdego
stanu początkowego wyszukiwał wszystkie sekwencje prowadzące do sukcesu.
Mój program składał się z 13-tu zagłębionych pętli for(). Każda pętla
wykonywała jeden ruch i wołała kolejną (chyba, że ruch już nie był
możliwy). Jak dochodziło do ostatniej i ona mogła wykonać ruch to
oznaczało sukces.
Jak już to miałem to użyłem tej procedury do policzenia ile sekwencji
kończy się sukcesem w każdej z 4 sytuacji początkowych (inne są
symetryczne) z tego wyszło, z jakiej zaczynać aby mieć największą
szansę. A potem dla każdej sytuacji wydrukowałem po 10 sekwencji
prowadzących do celu i on już sam je sobie "w realu" przećwiczył i
bardzo mu się podobało, że nareszcie ta wkurzająca gra została pokonana.
P.G.
Następne wpisy z tego wątku
- 24.10.17 11:39 ajt
- 24.10.17 11:45 Piotr Gałka
- 24.10.17 11:58 Piotr Gałka
- 24.10.17 12:27 Piotr Gałka
- 24.10.17 12:30 Mateusz Viste
- 24.10.17 12:58 J.F.
- 24.10.17 13:23 Piotr Gałka
- 24.10.17 13:30 Włodzimierz Wojtiuk
- 24.10.17 13:42 Piotr Wyderski
- 24.10.17 13:42 Piotr Gałka
- 24.10.17 13:49 Piotr Wyderski
- 24.10.17 13:52 J.F.
- 24.10.17 14:07 Piotr Gałka
- 24.10.17 14:07 Piotr Wyderski
- 24.10.17 14:12 Piotr Gałka
Najnowsze wątki z tej grupy
- Położyłem dwa telefony obok siebie
- Przekaźnik na szynę DIN (?)
- Taśma LED
- Jak odróżnić myjki wibrujące od ultradźwiękowych.
- Ledy na wyłączniku czasowym błyskają
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- RCD wybija
- Re: Kompensacja mocy biernej przy 230VAC
- Łożysko ślizgowe - jaki olej
- Re: Kompensacja mocy biernej przy 230VAC
- Re: Kompensacja mocy biernej przy 230VAC
- Współczesny falomierz
- Zasilacz 7V na szynę DIN
- Waga z legalizacją
Najnowsze wątki
- 2025-04-09 Czy blokowanie sali obrad Sejmu przez PO-opozycje pod rządami PiS już się przedawniło? [mecenas Giertych dołki kopie?]
- 2025-04-09 Koniec produkcji Leapmotor T03
- 2025-04-09 Pruszków => Specjalista ds. public relations <=
- 2025-04-09 Rzeszów => International Freight Forwarder <=
- 2025-04-09 Ryga => Konsultant Wdrożeniowy Comarch XL/Optima (Księgowość i Kad
- 2025-04-09 Poznań => Konsultant wdrożeniowy Comarch XL/Optima (Księgowość i
- 2025-04-09 Chrzanów => Spedytor Międzynarodowy (handel ładunkami/prowadzenie f
- 2025-04-09 Warszawa => JavaScript / Node / Fullstack Developer <=
- 2025-04-09 Warszawa => Senior Product Manager <=
- 2025-04-09 Warszawa => Starszy Konsultant SAP FICO <=
- 2025-04-09 Warszawa => NMS System Administrator <=
- 2025-04-07 C++. Podróż Po Języku - komentarz
- 2025-04-08 Warszawa => Presales - Inżynier Wsparcia Technicznego IT <=
- 2025-04-08 Pomnik Polaków w Berlinie - OK! - ale co z ustawą o mniejszości polskiej?
- 2025-04-08 Uniwersytet Jagielloński zawiesza protestujących studentów