-
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
- Linuks od wer. 6.15 przestanie wspierać procesory 486 i będzie wymagać min. Pentium
- Propagation velocity v/c dla kabli RF
- Jakie natynkowe podwójne gniazdo z bolcem (2P+PE)
- Czujnik nacisku
- Protoków komunikacyjny do urządzenia pomiarowego
- Hiszpania bez pradu
- amperomierz w plusie
- 3G-nadal działa
- Historia pewnego miernika kalibratora
- Ustym 4k Pro i wyświetlacz
- Czemu rozwaliło celę?
- Wojna w portfelu
- Jaki trojfazowy licznik tuya lub podobny?
- Problem z dekoderem adresów
- Intel się wyprzedaje: po 10latach pchnęli pakiet kontrolny Altery za 1/4 kwoty zakupu
Najnowsze wątki
- 2025-05-15 Nowy rodzaj zagrożenie ze strony elektryków :)
- 2025-05-15 Bus inpostu, przemycający ludzi, walnął w nocy w tira zaparkowanego na autostradzie 5 ofiar
- 2025-05-15 Alert RCB w sprawie dziewczynki
- 2025-05-15 Kurierski bus przemycał ludzi i zasnął nad ranem za kierownicą.
- 2025-05-15 Dęblin => JavaScript / Node / Fullstack Developer <=
- 2025-05-14 Tsue i smsy
- 2025-05-14 Biedna kobieta jechała samochodem na targ aby sprzedać klamoty i dostała 300 zł mandatu
- 2025-05-14 hot spot traci connected device
- 2025-05-14 John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- 2025-05-14 John Carmack twierdzi, że gdyby gry były optymalizowane, to wystarczyły by stare kompy
- 2025-05-14 Wariant rumuński
- 2025-05-14 Rolnicy protestują w Szczecinie
- 2025-05-14 Rolnicy protestują w Szczecinie
- 2025-05-14 Rolnicy protestują w Szczecinie
- 2025-05-14 Niemcy: Przychody ze sprzedaży produktów Fairtrade w 2024r. wzrosły o rekordowe 13% do 2,9GEUR