-
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
- kolorowy e-paper
- Sterownik kotła CO praca PWM
- Jakie baterie A23 i LR44?
- OLED SSD1306 - degradacja?
- Który symulator AVR jest ,,prawilny"?
- Disk on Module, czym to odczytać?
- Pasta ochronna? Lutownicza?
- zagadka pneumatyczna
- Klip testowy, jak sie to używa
- Jak sie smazy elektronike z odleglosci kilkuset metrów?
- William Shockley, co-inventor of the transistor
- Gazowy kocioł CO regulacja cyklingu i regulacja pogodowa
- Zamek elektroniczny
- szablon do pasty DIY
- Głośnik potrzebny
Najnowsze wątki
- 2025-11-24 kolorowy e-paper
- 2025-11-24 Białystok => Konsultant Microsoft Dynamics 365 Finance <=
- 2025-11-24 Białystok => Programista Delphi <=
- 2025-11-24 DRL tylne
- 2025-11-24 Warszawa => Account Manager - Usługi rekrutacyjne <=
- 2025-11-24 Czego mógł się obawiać "niewinny jak Giertych"?
- 2025-11-24 tankuj na MOL
- 2025-11-23 konpederacki debil o fotelikach
- 2025-11-22 Sterownik kotła CO praca PWM
- 2025-11-22 Fwd: Fwd: jesienne paragony grozy
- 2025-11-22 Fwd: jesienne paragony grozy
- 2025-11-22 Fwd: Stopa z gwintem
- 2025-11-22 Gdynia => Przedstawiciel handlowy / KAM (branża TSL) <=
- 2025-11-22 Warszawa => Solution Architect (Workday) - Legal Systems <=
- 2025-11-22 Warszawa => Senior Cloud Engineer - AWS <=




Ile kosztują tanie mieszkania w polskich metropoliach?