Logicus este un software educational 2.0, pentru incepatori in lumea programari, care intentioneaza sa simuleze, scheme logice, sa genereze coduri sursa in urmatoarele limbaje:
(Pascal, C/C++ si Pseudocod) a schemei logice, construite de utilizator. Intrucat un soft educational nu inseamna continut copy-paste de pe wikipedia sau google, am realizat acest soft pe care eu il consider soft educational 2.0, in care am incercat sa implementez un nou concept de soft educational avand interfata vocala(VUI) recunoaste comenzi vocal, softul “vorbeste”, raspunsurile date de elev, sunt scrise intr-un suprafata de desenat de mana, existand un OCR pentru indentificare, cat si o logare bazata pe recunoastere faciala. Am scris acest soft din dorinta de a arata o noua directie a softurilor educationale. Am dorit sa arat ca si in acest domeniu pot fi aduse noutati, chiar daca nu perfect functionale.
Algoritmi folositi:
Teoria grafurilor – schemele le-am reprezentat ca niste grafuri
Recursivitate
Divide et impera
Back-Propagation, si Back-Propagation cu moment scris in NeurosLab, si folosit pentru invatare a retelelor neuronale si dupa aceea importate in Logicus
Tehnici folosite:
Canvas
Double buffered
Threaduri(Simulare, cat si in about)
Synchronizarea threadurilor(analog)
Alocarea dinamica a obiectelor, cat si a variabilelor. Si la vectori
Update
Schimbarea limbii, am folosit recursivitate, pentru algoritmul de schimbare a limbii.
Tehnologii
Delphi 2. BusinessSkin 3. NeurosLab(soft scris pentru realizarea VUI-ului, recunoasterea vorbirii, Recunoasterea faciala pentru logarea in meniul de administrare si OCR-ului), partea de inteligenta artificiala 4. DictRO(soft prezentat anul trecut la InfoEducatie) pentru realizarea interfetei vocale
Cerinte sistem
Una bucata Windows
Realizatori
Budisteanu Ionut Alexandru
Scoala: Colegiul National “Mircea cel Batran” Rm. Valcea
In primul rand acuma are implementata forma poloneza post fixata, astfel reuseste sa faca expresii complicate[codul cum e scris permite si recursivitate]. Vectori, matrici bidimensionale, tridimensionale, de orice tip(int,float, byte,string, smallint), permite atat atribuire de un element, cat si toata matricea(nu partial!), acuma este orientat spre tipuri de date Variant din Delphi.
Am observat butonand Delphi-ul 2009(este portat pe 2009 acuma) cum este gandita clasa care indentifica greselile de syntaxa(pe care am implementat-o intr-un alt proiect de al meu si anume AILab) dar si in Logicus. Este un Thread Synchronizat cu GUI-ul care cauta variabilele care nu sunt definite, expresi care nu sunt corecte(o mare parte din ele, nu le determina 100%).
Am implementat Save/Load din fisiere XML(Mi-am scris proprile clase de parsare de fisiere XML). La Optiunea de Load am lasat si din formatul *.lgs(Logicus Old Save), deoarece erau multe fisiere vechi. Permite exportare din *.lgs in *.XML
Am implementat o alta clasa de update, organizata pe threaduri.
Small things: Export to BMP
Am schimbat thema aplicatie cu una standard de Vista.
Acuma totul se aloca dinamic.
Am invatat din nou retelele in NeurosLab, de data aceasa cu mai multe cuvinte dintre care: Search Delete New Save Load Stop :d pentru a nu mai face classificare la speech recognition
Next things: -Sa le bag la muchii - Arrow, sa arat directia -Schimbare limbii(narratorul implementat de mine functioneaza cat de cat pentru limba romana), astfel daca se schimba limba, el tot in romana vorbeste -Optiunii mai multe
La schema logica, i se asociaza un graf. Cand se simuleaza, ma bazez pe o teorema a programarii structurate(top down) care spune ca orice bucla poate fi realizata de elementele de atribuire, if, scriere, citire, deci practic in simulatorul scris de mine, while-ul, for-ul si repeat-ul si if-ul sunt transformate in circuite echivalente cu while-ul. SChema logica, ramane, echivalenta, practic are loc o translatare, a schemei de intrare intro schema echivalenta cu while.
Problema era, cand am scris translatoarele pentru limbajele Pacsal, C++ si pseudocod, eu trebuia sa verific, daca IF-ul, este o bucla(se mai poate intoarce candva) sau un if simplu(care nu se mai intoarce nici o data), deci rezolv problema pentru a afla daca sunt if-uri sau while-uri imbricate. Practic cine doreste sa implementeze un for, sau un repeat trb sa creeze cu drag and drop o schema echivalenta cu blocurile care sunt echivalente: blocul de control-decizie si blocurile de atribuire si sa faca testarea deciziei la intrare sau la iesire din bucla
Edit: Cu alte cuvinte, daca editati o schema logica cu repeat, codul translatat si generat in limajul pascal, c++… va fi cu while, dar la rulare cele 2 coduri sunt echivalente.
Am folosit divede et impera, pentru a determina gradul de imbricare al blocurilor de decizie(care pot fi si while-uri si if-uri)