Zastosowanie logiki...?

Odpowiedz Nowy wątek
2011-09-13 11:23
0

Niebawem zacznę studia, a wraz z tym zdarzeniem zacznie się matma do której nie jestem przekonany. Szczególnie nudna wydaje mi się logika. Chciałbym się od was dowiedzieć, czy znacie jakieś praktyczne (niekoniecznie programistyczne) zastosowania tego działu matematyki.

Kilka faktów sam skojarzyłem z tą logikę i poniżej wymieniam kilka przykładów. Gdyby ktoś mógł dopisać coś do tej listy, byłby fajnie.

1. wyrażenia logiczne w if'ach
Przykład marny, ale kilku programistów się na to powołuje, że niby prawa de morgana potrafią uprościć zapis wyrażeń logicznych. Mając doświadczenie w wysokopoziomowym programowaniu, tego typu kwestia jakoś nigdy mi się nie przydała, bo w typowych programach zwykle mam banalne warunki w konstrukcjach sterujących.

2. programowanie w logice, systemy ekspertowe itp
Przez godzinę używałem Prologa i czytałem tutorial na jego temat. Sprawa na pierwszy rzut oka ma się następująco. Jest dwa etapy. Pierwszy polega na opisywaniu relacji między obiektami. System po otrzymuje tych relacji, chyba je uzupełnia o dodatkowe reguły na podstawie wnioskowania. Potem zachodzi drugi etap w którym programista ma możliwość odpytywania bazy danych. Jest to trochę podobne do SQL, ale zrobiło to na mnie lepsze wrażenie.

Dzięki takiemu programowaniu można tworzyć systemy ekspertowe, które na podstawie podanej wiedzy mogą udzielić odpowiedzi na zadawane pytania, np. z zakresu medycyny.

3. projektowanie bramek logicznych
Kiedyś znajomy student powiedział mi, że wykładowca zadał im ćwiczenie utworzenia pozostałych operatorów logicznych na podstawie chyba dwóch wskazanych. Nie pamiętam jakie to były, ale wniosek był taki, że dzięki logice można zaprojektować taki układ bramek logicznych taniej. Nie wiem ile w tym prawy, ile fałszu, ale przykład podaje, bo trochę mnie zastanawia.

4. szachy?
Trochę mnie to zastanawia, ale kiedyś na okładce rozdziału logiki w podręczniku od liceum był obrazek szachów. Tak mnie zastanawia, czy taka wiedza można wykorzystać w grach? Np. karcianych, czy wspomnianych szachach?

Czekam na wasze opinie.


Pozostało 580 znaków

2011-09-13 11:52
Rev
0

Nudne to będzie klepanie analizy i algebry przez 90% czasu. Matematyka dyskretna akurat była dla mnie najciekawszą z dziedzin matematyki. Należy pamiętać, że nie uczysz się tam tylko algebry boola i tak naprawdę stosowanie prawa de morgana w upraszczaniu wyrażeń w instrukcjach warunkowych jedynie się przyczyni do zmniejszenia czytelności kodu. Jest to bardziej niezbędna podstawa do rzeczy, które będą później, tj. np. algorytmika. Bez matematyki dyskretnej nie ma co podchodzić do automatów, gramatyk, języków formalnych, a tym już zdecydowanie bliżej do informatyki samej w sobie.


Pozostało 580 znaków

2011-09-13 11:53
0

W praktyce cały SQL to zabawa z prawami De Morgana i szukanie najlepszego sposobu na zapisanie warunków.
Szukanie błędów w procesach biznesowych. Często gęsto dostaniesz jakiś proces, który będzie zawierał pewne subtelne błędy. Twoim zadaniem będzie przekonanie biznesu, że te błędy istnieją oraz ich wskazanie.
Testowanie aplikacji. Tego nie unikniesz, bo unit testy są standardem. Logika pomaga na ogarnięcie nietypowych przypadków.

Dygresja, czy SQL często stosuje się w projektach z głową? W końcu tu teraz Java/C# dominują pod tym względem i najczęściej w ich wykonaniu stosuje się ORM. Czy zatem SQL został pogrzebany? - Złowieszczy 2011-09-13 12:19
Szczęścia, zdrowia, pomyślności z ORMami przy np. systemach raportowania. Za duży narzut w stosunku do czystego SQLa i dodatkowo nie można stosować rozwiązań właściwych dla danego DBMS. Do przeglądania pojedynczych tabelek czy prostych zapytań są OK, ale coś bardziej skomplikowanego zdecydowanie lepiej jest napisać natywnie w SQLu. - Koziołek 2011-09-13 12:22

Pozostało 580 znaków

2011-09-13 11:55
1

Rozszerzenie 3: Projektowanie przerzutników, dzięki którym można zrobić maszyny stanowe (automaty), dzięki którym działa komputer.
1: W wyrażeniach logicznych np. tutaj się przydaje:
zamiast (takie zapisy mnie rozwalaja zawsze):
if ((a==true && b==true) || (a==false && b==false))
można zapisać to jako:
if (a==b)

lub trudniejszy przypadek prawie tego samego:
if ((a==true && b==false) || (a==false && b==true))
na:
if (a^b)

Dzięki logice wiesz jak używać masek bitowych.

Często ludzie mówią, że umieją programować, a później jak np. oglądam ich kod to widzę:

int a;
// tutaj gdzies wczytanie a
string b;
switch (a)
{
case 0:
  {
    b = "Liczba 0";
    break;
  }
case 1:
  {
    b = "Liczba 1";
    break;
  }
...
case 40:
  {
    b = "Liczba 40";
    break;
  }
}

gdzie tu logika? - logika jest potrzebna, żeby nauczyć się myśleć. Jak nie ogarniesz logiki to nie nauczysz się programować, co najwyżej wykujesz (patrz przykład wyżej).


░█░█░█░█░█░█░█░█░█░█░█░
edytowany 2x, ostatnio: krwq, 2011-09-13 11:58
Pokaż pozostałe 3 komentarze
Mówisz o myśleniu logicznym, co nie? Nie musiałem się uczyć logiki, by wiedzieć, że w pokazanym przykładzie wystarczy użyć konwersji. - Złowieszczy 2011-09-13 12:46
A czemu szachista miałby się uczyć matematyki? I jakie niby gry uczą praktycznej logiki? - somekind 2011-09-13 22:34
bo może być fajnie? Nie wiem. Punkt 4 to tylko przypuszczenie. Hej, somekind nie atakuj na mnie z siekierą. Jeśli masz coś dopowiedzenia to podaj kolejny przykład. - Złowieszczy 2011-09-14 07:50
Co do if (a^b) -> nie byłoby przypadkiem prościej użyć (a != b)? Żadnych masek bitowych... (a i nie ma potencjalnego strzelenia sobie w stopę w językach C/C++ podobnych) - msm 2011-09-14 11:19
No może być fajnie. Chodziło mi i to, że grając w szachy człowiek nie uczy się matematyki (i vice versa). - somekind 2011-09-14 11:56

Pozostało 580 znaków

2011-09-13 12:44
0

Szczęścia, zdrowia, pomyślności z ORMami przy np. systemach raportowania. Za duży narzut w stosunku do czystego SQLa i dodatkowo nie można stosować rozwiązań właściwych dla danego DBMS. Do przeglądania pojedynczych tabelek czy prostych zapytań są OK, ale coś bardziej skomplikowanego zdecydowanie lepiej jest napisać natywnie w SQLu.

Kiedyś zdarzyło mi się rozmawiać ze specem od architektury aplikacji biznesowych. Otrzymałem wówczas poniższą odpowiedź na ten temat 'SQL vs ORM'.

języki z rodziny SQL zostały stworzone do operowania na relacyjnych danych. Porządna logika biznesowa (zrozumiała/testowalna/rozszerzalna/wymienialna...) potrzebuje czegoś więcej niż jedynie możliwości zmiany danych - potrzebuje modelu. Model da się pięknie wyrazić za pomocą struktur obiektowych - stąd cała ewolucja z programowania strukturalnego do obiektowego. Moim zdaniem implementowanie logiki w SQL to cofanie się o całą epokę. Kwestii wydajności tutaj nie poruszam - i jedno i drugie podejście można napisać wydajnie i niewydajnie, wszystko zależy od umiejętności programisty.

Dziś zgadzam się z tym zdaniem i wypierdy na temat wydajności mnie nie przekonują.


Pokaż pozostałe 8 komentarzy
Kolego nie masz doświadczenia a próbujesz kozaczyć. Może kiedyś będziesz pracował przy dużym projekcie bazodanowym to przekonasz się że żaden ORM nie zapewni ci takich możliwości i szybkości jak czysty SQL. Do napisania programu obsługi biblioteki na zajęcia z programowania możesz sobie tego używać. - MiL 2011-09-14 09:59
Nie, nie zły dzień, po prostu fakty stwierdzam. Ignorancja jest błogosławieństwem, a "wypierdy" które wypisujesz o ORMach to czysta ignorancja. - somekind 2011-09-14 11:58
w assemblerze też da się napisać szybszy program niż w C#, tylko po co... - krwq 2011-09-14 21:10
"ORM nie zapewni ci takich możliwości i szybkości jak czysty SQL" ...i nic nie zapewni ci takich możliwości i szybkości jak NoSQL :] - 0x200x20 2011-09-14 22:52

Pozostało 580 znaków

2011-09-13 13:29
0

Zastanawia mnie też jak ma się do siebie logika rozmyta do zwykłej logiki. Na wiki piszę, że tutaj nie ma tylko wartości 0 i 1 tylko rozważa się przedział wartości <0, 1>, pisze też, że to pozawala na uogólnienie - trochę mi to przypomina sieci neuronowe (kiedyś próbowałem się tego nauczyć, ale było trochę za trudne).

Myślałem, że do sieci neuronowych wystarczy tylko opanować analizę matematyczną, czy to oznacza, że znajomość logiki rozmytej mogła by mi tu ułatwić zadanie?
Jeszcze jedno podpytanie do tej kwestii, czy logika rozmyta jest jakoś strasznie trudna? Czy można ją łatwo pojąć, gdy się opanuje materiał zwykłej logiki?


edytowany 2x, ostatnio: Złowieszczy, 2011-09-13 13:40

Pozostało 580 znaków

2011-09-13 14:40
1

Jeśli chodzi o jeszcze jakieś zastosowania logiki to w przypadku Teori Złożoności Obliczeniowej moze się przydać (np. przy redukcjach do problemów SAT)


Masz problem? Pisz na forum, nie do mnie. Nie masz problemów? Kup komputer...
Nawiasem twoje logo ma związek z kreskówką beyblade (widok bączka z góry) albo z naturo (tryb sharingan)? - Złowieszczy 2011-09-13 18:18
To drugie ;) - Shalom 2011-09-13 22:16
Yea! Mnie się podoba. - Złowieszczy 2011-09-14 07:52

Pozostało 580 znaków

2011-09-13 20:20
1

Nudna/ irytująca logika to jest na prawie. Mam znajomych prawników i czytałem niektóre ustępy (lepiej byłoby je nazwać sracze), które były tak popier*olone, że głowa boli. Tak więc kolejne, cholernie praktyczne zastosowanie logiki to rozumienie prawa i regulaminów.

Poza tym logika, o ile dobrze myślę, jest niezbędna przy rachunku prawdopodobieństwa. Np aby oszacować sobie ryzyko, albo opłacalność, trzeba najpierw ustalić co z czego wynika.

Logika to pewnie u ciebie będzie jeden semestr, w sumie pewnie wyjdzie max kilkadziesiąt godzin. To nie wydaje mi się zbyt dużo.

Kiedyś znajomy student powiedział mi, że wykładowca zadał im ćwiczenie utworzenia pozostałych operatorów logicznych na podstawie chyba dwóch wskazanych.

Da się wszystkie wyprowadzić z jednego, np NAND.

NOT x = x NAND x
x AND y = NOT (x NAND y)
x OR y = NOT(NOT x AND NOT y)

Podobnie można zrobić z NOR. Bardzo dużo układów scalonych składa się właśnie praktycznie tylko z bramek NAND czy NOR, dla przykładu pamięci SSD. Jak widać strasznie dużo bramek się tutaj tworzy i pasuje znać jakieś prawa logiki, aby ilość bramek zmniejszyć. Programy do optymalizacji układów scalonych mają pewnie czasem ceny kosmiczne.


"Programs must be written for people to read, and only incidentally for machines to execute." - Abelson & Sussman, SICP, preface to the first edition
"Ci, co najbardziej pragną planować życie społeczne, gdyby im na to pozwolić, staliby się w najwyższym stopniu niebezpieczni i nietolerancyjni wobec planów życiowych innych ludzi. Często, tchnącego dobrocią i oddanego jakiejś sprawie idealistę, dzieli od fanatyka tylko mały krok."
Demokracja jest fajna, dopóki wygrywa twoja ulubiona partia.

Pozostało 580 znaków

2011-09-13 22:01
0x200x20
1

Logika temporalna - czyli logika z uwzględnieniem czasu. Przydatne do dowodzenia poprawności algorytmów współbieżnych i rozproszonych.

Pozostało 580 znaków

2011-09-16 00:03
0

Nie wiem do końca co rozumiesz przez praktyczne, przykłady które mi się nasuwają

Semantyka języków programowania, Języki i Automaty, Lambda Rachunek

Skoro jeszcze nie studiowałeś, nie wiesz dokładnie jak wykląda logika, przykład z UW

http://www.mimuw.edu.pl/~urzy/Pmat/

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0