eGospodarka.pl
eGospodarka.pl poleca

eGospodarka.plGrupypl.misc.elektronikaprogramowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralkiRe: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli programatora pralki
  • Path: news-archive.icm.edu.pl!news.icm.edu.pl!news.chmurka.net!.POSTED.213.192.88.238
    !not-for-mail
    From: Piotr Gałka <p...@c...pl>
    Newsgroups: pl.misc.elektronika
    Subject: Re: programowanie w C - bardzo ogólne pytanie o filozofię. Arduino w roli
    programatora pralki
    Date: Tue, 24 Oct 2017 11:24:17 +0200
    Organization: news.chmurka.net
    Message-ID: <osn0rv$o3u$1$PiotrGalka@news.chmurka.net>
    References: <osllnb$psp$1@dont-email.me>
    NNTP-Posting-Host: 213.192.88.238
    Mime-Version: 1.0
    Content-Type: text/plain; charset=iso-8859-2; format=flowed
    Content-Transfer-Encoding: 8bit
    Injection-Date: Tue, 24 Oct 2017 09:24:15 +0000 (UTC)
    Injection-Info: news.chmurka.net; posting-account="PiotrGalka";
    posting-host="213.192.88.238"; logging-data="24702";
    mail-complaints-to="abuse-news.(at).chmurka.net"
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101
    Thunderbird/52.4.0
    In-Reply-To: <osllnb$psp$1@dont-email.me>
    Content-Language: pl
    Xref: news-archive.icm.edu.pl pl.misc.elektronika:725229
    [ ukryj 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.

Podziel się

Poleć ten post znajomemu poleć

Wydrukuj ten post drukuj


Następne wpisy z tego wątku

Najnowsze wątki z tej grupy


Najnowsze wątki

Szukaj w grupach

Eksperci egospodarka.pl

1 1 1

Wpisz nazwę miasta, dla którego chcesz znaleźć jednostkę ZUS.

Wzory dokumentów

Bezpłatne wzory dokumentów i formularzy.
Wyszukaj i pobierz za darmo: