Ta strona używa ciasteczek (plików cookies), dzięki którym może działać lepiej. Dowiedz się więcejRozumiem i akceptuję

RoboRemoFree - sterowanie diodą przyciskiem

Autor Wiadomość
deshipu 




Posty: 2158
Pomógł: 115 razy
Otrzymał 187 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 07-12-2017, 15:37   

Żeby twoja gramatyka definiowała język akceptowany przez twój komputer, w sensie stricte formalnym, musiałaby uwzględniać informację o tym ile twój komputer ma pamięci oraz jak poszczególne konstrukcje wpływają na jej zużycie. To jest w teorii do zrobienia, ale oczywiście zmiana ilości wolnej pamięci zmieni ci gramatykę.

Ale weźmy prostszy przykład. Jak napiszesz taką gramatykę, to musisz w niej między innymi uwzględnić polecenie "#include" i jego działanie. W szczególności, żeby mieć pełną definicję języka, musisz wiedzieć jakie parametry polecenie to akceptuje, a jakie prowadzą do błędu. Żeby to wiedzieć, twoja gramatyka musi zawierać pełną listę wszystkich plików na twoim komputerze i wszystkich jego dyskach sieciowych, oraz, ponieważ istnieją ścieżki względne, katalog w którym uruchomisz kompilację.

Jeśli zamiast tego gramatyka zezwoli do dowolną ścieżkę, to nie będzie definiować, w sensie formalnym, tego samego języka, który jest zaimplementowany na twoim komputerze, bo istnieją takie wejścia, które gramatyka przyjmuje, a które twój komputer odrzuca.

[ Dodano: 07-12-2017, 15:39 ]
MarJanPol napisał/a:
Panowie, jestem bardzo wdzięczny za Wasz aktywny udział w moim skromnym wątku :-D ale jeśli się zgodzicie, że na chwilę wrócę do meritum i zadam pytanie pomocnicze, o to w którym dokładnie miejscu trzeba zmienić "=" na "==", bo jakoś nie jest to dla mnie takie intuicyjne.

Poza tym rozumiem, że użycie zmiennej string jest nieoptymalne - czy zatem lepiej będzie zmienić linijkę:
String odebraneDane = "";
na:
int odebraneDane = "0";

Kłaniam się uniżenie wszystkim znawcom tematu... ;-)
m.


Porównanie robisz w if-ie. Tam chcesz mieć operator porównania, a nie przypisanie.

To co zaproponowałeś jest niepoprawne na kilka różnych sposobów, więc może na razie zostaw w wersji nieoptymalnej ale działającej, a jak poczytasz więcej o C, C++ i Arduino, to może kiedyś poprawisz.

Warto przeczytać » Jak unikać pułapek języka C?


Postaw piwo autorowi tego posta
 
 
Więcej szczegółów
Wystawiono 1 piw(a):
MarJanPol
Elvis 



Posty: 1362
Pomógł: 93 razy
Otrzymał 250 piw(a)
Skąd: wawa
Programuję w:
C, asm
Wysłany: 07-12-2017, 15:40   

deshipu, masz racje, to co jest zgodne z gramatyka, nalezy do jezyka. Programy niepoprawne rowniez, wiec to ze program nie dziala nic nie zmienia.
Natomiast zaciekawilo mnie to co piszesz o udowodnionym braku mozliwosci napisania gramatyki - informatyke konczylem juz dosc dawno, wiec moze od tego czasu cos sie zmienilo. Moglbys podac zrodlo?
BTW - udowodnione ze nie istnieje gramatyka dla jezyka naturalnego, ale to inna sprawa.

Ostatnio zmieniony przez Elvis 07-12-2017, 15:41, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 2158
Pomógł: 115 razy
Otrzymał 187 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 07-12-2017, 15:47   

Elvis napisał/a:
deshipu, masz racje, to co jest zgodne z gramatyka, nalezy do jezyka. Programy niepoprawne rowniez, wiec to ze program nie dziala nic nie zmienia.


Nie, "programy niepoprawne" nie należą do języka. Z definicji, poprawnym programem (czy tam "zdaniem" czy "wypowiedzią" czy jak kto to akurat sobie nazwie) nazywamy te i tylko te wejścia, które należą do języka. Inaczej nie byłoby żadnego sensu wprowadzanie pojęcia języka formalnego. Albo wejście należy do języka i daję "tak", albo nie należy i daje "nie", albo jest niedecydowalne i nic nie daje bo obliczenie się nie zatrzymuje.

Elvis napisał/a:
Natomiast zaciekawilo mnie to co piszesz o udowodnionym braku mozliwosci napisania gramatyki - informormatyke konczylem juz dosc dawno, wiec moze od tego czasu cos sie zmienilo. Moglbys podac zrodlo?


Nic takiego nie napisałem. Napisałem, że specyfikacja nie zawiera formalnej specyfikacji gramatyki całego języka, co możesz łatwo sprawdzić czytając tę specyfikację, oraz że jeśli nawet byś napisał taką gramatykę na podstawie tej specyfikacji, to będzie ona niejednoznaczna — to taki techniczny temin dotyczący klas gramatyk, pewnie jeszcze będzie na dalszych wykładach.

Postaw piwo autorowi tego posta
 
 
Elvis 



Posty: 1362
Pomógł: 93 razy
Otrzymał 250 piw(a)
Skąd: wawa
Programuję w:
C, asm
Wysłany: 07-12-2017, 15:54   

Wrzuc na luz, nie rozmawiasz z mlodym studentem (niestety) - konczylem studia dawno temu, na nastepne wyklady raczej nie pojde. Moglem co najwyzej zapomniec, ale kilka razy jakis parser pisalem, wiec nawet mialem okazje troche sobie poprzypominac.
Program niepoprawny, tzn. np. zawieszajacy sie, uzywajacy zbyt duzo pamieci albo odwolujacy sie od adresu zero jest poprawnym programem w sensie jezyka. Mylisz dwa pojecia - semantyke i syntaktyke. Jezyk formalny okresla syntaktyke jezyka, czyli to co widzi kompilator. To ze program nie ma sensu, albo wykonuje niepoprawne operacje nic nie zmienia, to nadal bedzie poprawny kod w C++. A co robi to juz inna i trudniejsza sprawa. Bo kod ktory ma 10PB moze byc zupelnie zly, a dla kogos innego poprawny, tylko wymaga wiecej pamieci.

Polecany artykuł » Inteligentny budynek za 250zł? Recenzja Smart Home Kit


Ostatnio zmieniony przez Elvis 07-12-2017, 15:54, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 2158
Pomógł: 115 razy
Otrzymał 187 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 07-12-2017, 15:56   

Elvis napisał/a:
BTW - udowodnione ze nie istnieje gramatyka dla jezyka naturalnego, ale to inna sprawa.


Jestem ciekaw jak to możliwe. Może masz na myśli konkretną klasę gramatyki, na przykład bezkontekstowe? Bo ogólnie rzecz biorąc, ludzki mózg jest turing-complete, więc teoretycznie istnieje gramatyka opisująca wszystko, co on może przetworzyć.

Postaw piwo autorowi tego posta
 
 
MarJanPol 



Posty: 14
Otrzymał 1 piw(a)
Wysłany: 07-12-2017, 15:59   

deshipu napisał/a:
Porównanie robisz w if-ie. Tam chcesz mieć operator porównania, a nie przypisanie.


OK. Dziękuję! Rozumiem w takim razie, że w if-ie co do zasady nigdy nie używa się "=" (?). Jak wrócę do domu i sprawdzę czy działa, to dam znać...
m.

Ostatnio zmieniony przez MarJanPol 07-12-2017, 16:00, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
deshipu 




Posty: 2158
Pomógł: 115 razy
Otrzymał 187 piw(a)
Programuję w:
Python, C, Lua
Należę do:
Nigmalabs
Moje roboty:
uKubik, pKubik, Katka, Tote

Wysłany: 07-12-2017, 16:05   

Elvis napisał/a:
Program niepoprawny, tzn. np. zawieszajacy sie, uzywajacy zbyt duzo pamieci albo odwolujacy sie od adresu zero jest poprawnym programem w sensie jezyka. Mylisz dwa pojecia - semantyke i syntaktyke. Jezyk formalny okresla syntaktyke jezyka, czyli to co widzi kompilator.


Nawet nie zacząłem nic mówić o *wykonywaniu* programu — nie chciałem ci komplikować i ograniczyłem się do przykładów z błędami kompilacji.

Ale możemy tam pójść, bo to ty mylisz pojęcia — wszystko zależy od tego co weźmiesz za swoją czarną skrzynkę i za wyniki "tak" i "nie". Ja nie chciałem ci komplikować, więc założyłem, że się ograniczamy do kompilatora i poprawna kompilacja programu to "tak" a niepoprawna to "nie". Ale oczywiście gramatykami możesz opisać dowolne działanie komputera i możemy sobie nasz język rozszerzyć (a właściwie zawężyć)— na przykład zakładając, że po kompilacji programu zostanie on uruchomiony z jakimś tam wejściem i jeśli da oczekiwane wyjście to jest "tak". Oczywiście te testy wtedy muszą być częścią języka, bo ich zmiana da ci inny język za każdym razem.

[ Dodano: 07-12-2017, 16:05 ]
MarJanPol napisał/a:
deshipu napisał/a:
Porównanie robisz w if-ie. Tam chcesz mieć operator porównania, a nie przypisanie.


OK. Dziękuję! Rozumiem w takim razie, że w if-ie co do zasady nigdy nie używa się "=" (?). Jak wrócę do domu i sprawdzę czy działa, to dam znać...
m.


Nie wiem, czy nigdy — jak się uprzesz, to możesz, tak jak widzisz. Ale w praktyce zazwyczaj jest to błąd.

Ostatnio zmieniony przez deshipu 07-12-2017, 16:09, w całości zmieniany 1 raz  
Postaw piwo autorowi tego posta
 
 
ethanak 




Posty: 75
Otrzymał 3 piw(a)
Programuję w:
C, C++
Wysłany: 07-12-2017, 16:09   

Nie.
Używać możesz czego chcesz, tyle że różne "używania" dają różne efekty.
Przykład: if (x = y).
Będzie orawdą, jeśli y nie jest ogólnie pojętym zerem. Jeśli napiszesz ciś w stylu if (x = "dupa"). - zawsze będzie to prawdą, ponieważ " dupa" nie jest zerem, a ubocznym efektrm będzie to, że od tej chwili x będzie równe "dupa".
Jeśli napiszesz if (x == "dupa") - będzie to prawdą tylko wtedy, jeśli x było dupą przed wykonaniem porównanua.
Poniał?

Postaw piwo autorowi tego posta
 
 
MarJanPol 



Posty: 14
Otrzymał 1 piw(a)
Wysłany: 07-12-2017, 19:49   

DZIAŁA !!! :-D

dzięki bardzo!
m.

[ Dodano: 07-12-2017, 20:00 ]
...a tak na marginesie (i żebym był trochę mądrzejszy), czy możecie mi koledzy podpowiedzieć jak należałoby zmodyfikować ten kod, żeby zmienna "odebraneDane" mogła mieć typ integer?
m.

Postaw piwo autorowi tego posta
 
 
Wyświetl posty z ostatnich:   
Odpowiedz do tematu
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
Nie możesz załączać plików na tym forum
Możesz ściągać załączniki na tym forum
Wersja do druku

Skocz do:  

Nie rozwiązałeś swojego problemu? Zobacz podobne tematy: Arduino, problem z o... Arduino i programowa... Przysyłanie/Odbieran... Atmega - problem z b...
lub przeszukaj forum po wybranych tagach: roboremofree


Powered by phpBB modified by Przemo © 2003 phpBB Group
Popularne kursy: Arduinopodstawy elektroniki