Ştiri:

Vă rugăm să citiţi Regulamentul de utilizare a forumului Scientia în secţiunea intitulată "Regulamentul de utilizare a forumului. CITEŞTE-L!".

Main Menu

Limbajul de programare (al viitorului).

Creat de meteor, Noiembrie 04, 2011, 08:05:02 PM

« precedentul - următorul »

0 Membri şi 1 Vizitator vizualizează acest subiect.

meteor

    Intii de toate, vreau sa intreb (ca poate am ramas in urma  ;D), sa-mi spuna cine stiie, daca exista un astfel de limbaj de programare, care sa indeplineasca urmatoarele cerinte:
   1) Programarea sa fie in mod text,adica, asa cum eu scriu acum in Romana, asa si la acel limbaj, codul sursa sa fie sau in Engleza sau in Maghiara,sau in Italiana, etc.
   1.1) Programarea sa poata fi si audio (eu sa-i dictez, iar calculatorul,robotul  sa indeplineasca), video (la aratarea unor semne,camerei calculatorul,robotul sa le indeplineasca). Punctul 1.1 nu e principal.
   2) Limbajul de programare sa poata efectua NU NUMAI CALCULE REPETITIVE (numai asta si pot face limbajele de programare din ziua de astazi, alceva nimic), DAR sa poata rezolva probleme de logica, filozofice,etc.
   3) Fie ca la calculator se pune o persoana de la litere. Ea are niste probleme din fizica,matematica,informatica,filozofie, etc., aceasta persoana idee nu are despre programare. Conditia este ca , persoana data, doar pornind limbajul de programare dat, va scrie fiecare problema (in mod text), si verificind (erorile de sintactica) va apasa doar tasta enter si pe ecran sa-i apara raspunsul la problema.
Sper ca-i clara intrebarea.

   

Electron

Citat din: meteor din Noiembrie 04, 2011, 08:05:02 PM
Limbajul de programare sa poata [...] rezolva probleme de logica, filozofice,etc.
Limbajele de programare nu pot sa rezolve probleme de nici un fel. E ca si cum ai cauta o limba care sa scrie piese de teatru.

e-
Don't believe everything you think.

meteor

  Drept sa spun, nu am inteles deloc observatia ta. Zi-o cumva mai clar.
 
 

AlexandruLazar

Pai sa le luam pe rand :).

Citat din: meteor din Noiembrie 04, 2011, 08:05:02 PM
    Intii de toate, vreau sa intreb (ca poate am ramas in urma  ;D), sa-mi spuna cine stiie, daca exista un astfel de limbaj de programare, care sa indeplineasca urmatoarele cerinte:
   1) Programarea sa fie in mod text,adica, asa cum eu scriu acum in Romana, asa si la acel limbaj, codul sursa sa fie sau in Engleza sau in Maghiara,sau in Italiana, etc.

Tu intrebi de un 4GL (4th Generation Language). Exista multe astfel de limbaje (vezi la https://en.wikipedia.org/wiki/4GL ) fiindca e un subiect care a fost foarte la moda pana pe la mijlocul anilor '90.

Din pacate, niciunul din aceste limbaje nu a prins pentru programarea de uz general, fiindca limbajul natural, desi foarte accesibil pentru noi, este greoi de utilizat atunci cand e vorba de formulat in mod ne-ambiguu un set de instructiuni. Daca citesti vreodata un standard ISO sau IEEE, o sa vezi ca e scris intr-un stil infernal de greu de citit; aproape fiecare fraza ar putea fi formulata in mai putine cuvinte, dar ar fi mai putin precisa. De aceea si limbajele acestea nu "au prins" -- pur si simplu s-au dovedit a fi prea putin concise pentru a fi folosite pe scara larga.

Exista cateva nise -- asa-numitele DSL (Domain Specific Languages), adica limbajele care sunt destinate numai anumitor tipuri de probleme. Un exemplu bun in acest sens este SQL, care suna destul de mult a engleza si este indeajuns de expresiv, dar numai pentru un set restrans de sarcini.

Citat1.1) Programarea sa poata fi si audio (eu sa-i dictez, iar calculatorul,robotul  sa indeplineasca), video (la aratarea unor semne,camerei calculatorul,robotul sa le indeplineasca). Punctul 1.1 nu e principal.

Exista sisteme de recunoastere vocala suficient de performante pentru asa ceva la ora actuala, si pot fi folosite pentru orice limbaj. Deci, practic da. Similar si pentru video.

Citat2) Limbajul de programare sa poata efectua NU NUMAI CALCULE REPETITIVE (numai asta si pot face limbajele de programare din ziua de astazi, alceva nimic), DAR sa poata rezolva probleme de logica, filozofice,etc.

De aici deja intrebi altceva :).

In primul rand, un limbaj de programare nu efectueaza nicio operatie. Un limbaj de programare este folosit numai pentru a descrie o problema sau niste pasi de rezolvare (vezi mai jos pentru o oaresice clarificare in acest sens), dar altfel nu efectueaza vreo operatie. Este la fel si cu limbajul vorbit; el este doar un mod de a comunica informatie. Atunci cand spun "eu postez un mesaj pe forumul Scientia.ro", nu fac decat sa comunic aceasta informatie, dar limba romana nu posteaza vreun mesaj.

In al doilea rand, un limbaj de programare nu poate efectua "doar calcule repetitive". Stiu ca asta e definitia din majoritatea manualelor de liceu. E o definitie proasta. Si rezolvarea de probleme de logica sau filosofie se poate, in anumite limite, pune sub forma de "calcule repetitive" (cat de largi sunt limitele este o oaresice disputa; in ceea ce ma priveste, ca mare admirator al lui Bertrand Russell, pot sa-ti spun ca sunt destul de largi, desi altii s-ar putea sa nu fie de acord).

Practic, ceea ce tu vroiai sa intrebi de fapt este daca exista vreun limbaj de programare (impreuna cu instrumentele asociate -- compilator sau interpretor de exemplu) care sa poata rezolva probleme de logica, sau probleme care se pot reduce la probleme de logica. Raspunsul relativ surprinzator este ca da :). Cateva exemple:

a) Limbajele constraint-based. Un exemplu in acest sens este Prolog (desi el nu este efectiv un limbaj constraint-based "pur", ci un limbaj declarativ), dar il dau ca exemplu fiindca este cel mai cunoscut. El se bazeaza pe declararea de reguli si fapte (traducere ad-hoc pentru rules si facts).

De exemplu, in Prolog, pot spune asa:

Orange(X): Fruit(X)

In felul acesta, am declarat o regula care spune ca daca X este portocala, atunci X este un fruct. Pot acum sa intreb "Ce obiecte fac parte din clasa fructelor?", si mi se va raspunde corespunzator:

?- Fruit(X)
>>> Orange


Desigur ca lucrurile pot fi mult mai complicate de atat (Prolog poate de fapt sa lucreze cu orice problema de logica formala) dar nu cunosc atat de bine limbajul ca sa dau exemple prea elaborate :D.

b) ATP-urile (Automatic Theorem Prover); acestea sunt niste limbaje care permit descrierea eficienta a unor constructii de tipul unor teoreme si le pot demonstra (sau infirma) in mod automat. Un exemplu in acest sens ar fi SPASS ( http://www.spass-prover.org/ ). Acestea depind insa de formularea foarte riguroasa a acestor teoreme, lucru care nu e deloc trivial.

c) Limbajele de programare functionala (de exemplu Haskell sau Scheme). Acestea permit descrierea unor algoritmi sub forma aplicarii succesive a unor functii in sensul matematic. Practic, descrierea algoritmilor intr-un limbaj functional nu se face prin definirea fiecarui pas, ci prin descrierea legaturilor intre setul de date initiale si setul de date finale.

Ca fapt divers, limbajele de programare cu care probabil esti cel mai familiarizat (e.g. C sau Pascal) fac parte dintr-o clasa de limbaje numita limbaje imperative. Fara a intra in detalii, la nivel general, limbajele imperative se caracterizeaza prin faptul ca descrierea unui algoritm se face prin descrierea fiecarei transformari succesive a starii programului (i.e. a variabilelor lor si a mediului pe care ruleaza). Limbajele ca cele amintite mai sus pun de fapt accentul pe descrierea unor stari initiale si finale, obtinerea pasilor necesari ca atare fiind in principiu sarcina compilatorului.

Pare frumos, dar din pacate limbajele care adopta complet paradigmele amintite mai sus, fara a avea vreun element imperativ, nu sunt prea flexibile (iar altele, ca cele functionale, ar fi practic imposibil de folosit daca ar fi pur functionale, fara vreun element imperativ).

Citat3) Fie ca la calculator se pune o persoana de la litere. Ea are niste probleme din fizica,matematica,informatica,filozofie, etc., aceasta persoana idee nu are despre programare. Conditia este ca , persoana data, doar pornind limbajul de programare dat, va scrie fiecare problema (in mod text), si verificind (erorile de sintactica) va apasa doar tasta enter si pe ecran sa-i apara raspunsul la problema.
Sper ca-i clara intrebarea.

Exista astfel de limbaje (sau medii de programare), dar ele sunt in continuare dependente de abilitatea utilizatorului de a descrie problema pe care o poate rezolva. Exista medii de simulare, de exemplu, cum ar fi COMSOL, care iti permit sa descrii probleme destul de complicate (inclusiv probleme cuplate), dar specificarea problemei trebuie sa fie in continuare riguroasa si completa din punct de vedere matematic. Din pacate, de cele mai multe ori asta e imposibil pentru o persoana fara o pregatire speciala.

Un exemplu in acest sens; la prima vedere, daca un elev de clasa a X-a mi-ar da urmatoarea problema:

Dandu-se un circuit format dintr-o sursa de tensiune continua E=10V, cu rezistenta interna r=0.5 Ohm, si o rezistenta R de 1 kOhm, care este curentul I care trece prin acea rezistenta?

ea ar parea corect si complet formulata. Din pacate, nu este asa. Ea este corect formulata numai intr-un anumit context (circuite electrice cu parametri concentrati). Pentru mine, acest lucru este evident din context, fiindca imi dau seama ca in principiu un elev de clasa a X-a nu cunoaste alte cadre teoretice decat circuitele electrice cu parametri concentrati, pentru ca as intuit ca daca ar fi si alte lucurri pe care trebuie sa le cunosc ele mi-ar fi fost date -- dar astfel de lucruri nu pot fi reduse la nivel axiomatic (si implicit, nici transformate in algoritmi care sa se incheie intr-un timp finit cu un rezultat garantat sa fie corect). Descrierea completa ar fi mult mai dificila de atat (ar trebui de fapt precizate conditiile de frontiera si starile initiale pe fiecare din elementele circuitului, precum si legile de variatie a marimilor considerate).

florin_try

#4
Citat din: meteor din Noiembrie 04, 2011, 08:05:02 PM
   Intii de toate, vreau sa intreb (ca poate am ramas in urma  ;D), sa-mi spuna cine stiie, daca exista un astfel de limbaj de programare, care sa indeplineasca urmatoarele cerinte:
  1) Programarea sa fie in mod text,adica, asa cum eu scriu acum in Romana, asa si la acel limbaj, codul sursa sa fie sau in Engleza sau in Maghiara,sau in Italiana, etc.

Ai auzit tu de varianta C++ sau FORTRAN in limba maghiara sau romana?

Citat din: meteor din Noiembrie 04, 2011, 08:05:02 PM
  1.1) Programarea sa poata fi si audio (eu sa-i dictez, iar calculatorul,robotul  sa indeplineasca), video (la aratarea unor semne,camerei calculatorul,robotul sa le indeplineasca). Punctul 1.1 nu e principal.

Modul cum interfatezi cu calculatorul nu are nimic de a face cu limbazul de programare.

Te referi la o interfata audio-video cu calculatorul. Ce-i drept, azi se foloseste tastatura si mausul.
Azi, o astfel de interfata audio poate doar sa irite la culme. De exemplu cind la telefon imi raspunde un robot care imi cere sa ii raspund verbal in loc de "apasa tasta 1 pentru cutare", imi vine sa arunc dracului telefonul, ca asa de iritant poate fi.

Sunt insa de acord cu tine ca acest punct nu e principal. De fapt poate fi annoyance.


Citat din: meteor din Noiembrie 04, 2011, 08:05:02 PM
  2) Limbajul de programare sa poata efectua NU NUMAI CALCULE REPETITIVE (numai asta si pot face limbajele de programare din ziua de astazi, alceva nimic), DAR sa poata rezolva probleme de logica, filozofice,etc.

In nici un caz nu in viitorul apropiat.  Si nu cu masina Turing.
Dar filozofia rezolva probleme? Impresia mea era ca doar le enunta.

Probleme de logica binara pot rezolva la greu computerele de azi. Nu stiu daca ai un cod de 100 linii fara sa folosesti conditia if, care implica evaluarea unei expresii logice.

Citat din: meteor din Noiembrie 04, 2011, 08:05:02 PM
  3) Fie ca la calculator se pune o persoana de la litere. Ea are niste probleme din fizica,matematica,informatica,filozofie, etc., aceasta persoana idee nu are despre programare. Conditia este ca , persoana data, doar pornind limbajul de programare dat, va scrie fiecare problema (in mod text), si verificind (erorile de sintactica) va apasa doar tasta enter si pe ecran sa-i apara raspunsul la problema.
Sper ca-i clara intrebarea.

Vezi tu, inainte de a ajunge la raspuns trebuie sa ajungi mai intii la intrebare.
Degeaba iti da cineva/ceva raspunsul daca nu intelegi intrebarea.
Iar la intrebare poti ajunge framintindu-te poate ani de zile, nicidecum apasind miraculoasa tasta "ENTER".

meteor

    Laza, m-am uitat fugitiv la ce ai postat aici, mai mult de jumatate e neclar, insa nu ma voi apuca sa studiez si verific toata informatia postata. Deaceea raspunsul si conditiile pe care le voi nainta (a doua oara), poateca la unele deja ai dat raspuns, iar daca mai incerci sa dai un raspuns, expunel inca mai simplu.
    Intii de toate mie imi pare ca foarte putini au inteles intrebarea. O mai expun o data: Fie ca la calculator se pune o persoana, absolut nestiitoare de matematica si programare. Ea are pe calculator, un soft (un limbaj de programare), il deschide, alege limba vorbita (engleza,maghiara, italiana,...etc.). Apoi, "deschide o pagina noua", adica incepe lucrul propriu zis. Aici, ea poate scrie oriiice , fix asa cum eu scriu acum, exemplu de problema:" Fie 2 trenuri A si B. Ele se deplaseaza unul spre celalalt cu vitezele x km/h  si y km/h. Peste cit timp, trenurile se vor intilni?" Fie ca raspunsul este zkm/h. Acum limbajul de programare, trebue sa dea raspunsul strict: "Trenurile A si B se vor intilni peste z km/h".
    Problema data e foarte usoara pentru un soft. Insa sint probleme, ce implica mult mai multa logica, si e greu sa faci un astfel de soft care sati dea raspuns. Exemplu de problema:" Fie exista un patrulater ABCD. Sa se calculeze aria lui, daca se stie ca AB-a cm; BC=b cm; CD=c cm; DA=d cm." Programul va trebui sa spuna: " Este imposibil de calculat aria acestui patrulater (ABCD) sau exista o infinitate de patrulatere cu aceste dimensiuni avind arii diferite. E nevoe sa mai specificati macar un unghi sau o diagonala". Dupa ce utilizatorul va specifica, programul va afisa aria patrulaterului.

   Programarea  audio,video nu e mare noutate. Am vazut acum vreo 2 ani in urma cu spaniolii au facut ca vocea pe care o vorbim sa poata fi scrisa text in calculator. La fel si japonezii au facut roboti la care (avind un bagaj limitat de semne), ii vei arata un vemn si el va aduce mincarea de la bucatarie, iar daca arati alt semn el va inchide geamul, etc. Toate aceste semne se pot discompune in "elemente". Apoi fiecare element sa constitue o litera (sau un cuvint), exemplu e limbajul surdomutilor. Robotul (limbajul de programare) , captind aceste conditii (date), poate trece propriuzis la calculul sau. Si ce va schimba daca eu ii voi dicta unui program problemele enuntate mai sus, ce el le va rezolva mai rapid?! Absolut deloc nu, deoarece fiecare program are un principiu al sau de functionare, dar pina nu-i pui bazele, nu vei gasi raspuns nici text nici audio nici vidio, nici altfel raspunsul.

   Laza, daca stau lucrurile cam asa de extraordinar (nu peste tot) ,cum tu ai expus, atunci zi-mi pina la urma asa un limbaj de programare, in care eu dupa ce il voi deschide sa scriu urmatoarea problema simpla: " Sa se calculeze suma numerelor 3 si 4", iar in final programul sami scrie:" 7" sau " Suma numerelor 3 si 4 este egala cu 7".
    Da, si daca chiar este sa-mi destainui si mie principiul sau de functionare. Iar, daca nu este, sa-mi spui cam pe ce baza (schema algoritm) el ar functiona. Tu doar traesti in secolul 21! Eu stiu raspunsul, insa te-ai prins in capcana, si astept sa vad daca vei mai esi (teafar).

AlexandruLazar

#6
Citat din: meteor din Noiembrie 05, 2011, 10:08:48 AM
   Intii de toate mie imi pare ca foarte putini au inteles intrebarea. O mai expun o data: Fie ca la calculator se pune o persoana, absolut nestiitoare de matematica si programare. Ea are pe calculator, un soft (un limbaj de programare), il deschide, alege limba vorbita (engleza,maghiara, italiana,...etc.). Apoi, "deschide o pagina noua", adica incepe lucrul propriu zis. Aici, ea poate scrie oriiice , fix asa cum eu scriu acum, exemplu de problema:" Fie 2 trenuri A si B. Ele se deplaseaza unul spre celalalt cu vitezele x km/h  si y km/h. Peste cit timp, trenurile se vor intilni?" Fie ca raspunsul este zkm/h. Acum limbajul de programare, trebue sa dea raspunsul strict: "Trenurile A si B se vor intilni peste z km/h".

Am inteles intrebarea foarte bine. Exemplul dat de tine e un exemplu perfect ilustrativ pentru motivul din care un astfel de lucru este, din pacate, imposibil. Uite numai cateva lucruri pe care tu nu le-ai precizat in aceasta problema:

- Vitezele x si y sunt constante
- Deplasarea se face pe o suprafata plana?
- Care e distanta initiala dintre cele doua trenuri?
- Care este originea axei timpului peste care o consideri? (Peste cat timp incepand de cand?)

Desigur, as putea imagina un algoritm prin care sa pot infera raspunsurile la aceste intrebari. De exemplu, as putea face un rationament de tipul "intrucat problema nu contine date initiale si legi de variatie, ea pare pusa de cineva care nu este obisnuit cu astfel de probleme, prin urmare ea se refera la cazul simplu in care X si Y sunt constante si suprafata este plana, iar originea timpului este din momentul plecarii trenurilor".

Observa insa ca acest algoritm *nu* poate garanta un raspuns corect. El este un algoritm probabilistic -- la fel de bine se poate ca utilizatorul sa fi uitat sa specifice una din aceste date. Ba se poate ca omisiunea sa fie chiar intentionata, pentru ca il intereseaza un raspuns in functie de parametrii omisi.

Principiul de baza este acela ca un limbaj de programare nu suplineste inteligenta utilizatorului. Compilatoarele iau un numar infiorator de decizii autonome, deci nu sunt un fel de masinarii "fara minte", insa le iau astfel incat sa urmeze in mod optim niste instructiuni date de utilizator. Un program este de fapt o expresie a rationamentelor programatorului. Daca programatorul nu rationeaza, nu are cum sa iasa ceva.

CitatProblema data e foarte usoara pentru un soft.

Dimpotriva, dupa cum ai vazut mai sus, problema formulata este de fapt imposibil de rezolvat pentru un soft, indiferent cat de avansat, fiindca este o problema incomplet formulata.

CitatInsa sint probleme, ce implica mult mai multa logica, si e greu sa faci un astfel de soft care sati dea raspuns. Exemplu de problema:" Fie exista un patrulater ABCD. Sa se calculeze aria lui, daca se stie ca AB-a cm; BC=b cm; CD=c cm; DA=d cm." Programul va trebui sa spuna: " Este imposibil de calculat aria acestui patrulater (ABCD) sau exista o infinitate de patrulatere cu aceste dimensiuni avind arii diferite. E nevoe sa mai specificati macar un unghi sau o diagonala". Dupa ce utilizatorul va specifica, programul va afisa aria patrulaterului.

Limbajele de tip ATP pot rezolva astfel de probleme, doar ca trebuie puse intr-o forma usor diferita (e.g. "Fie un patrulater ABCD. AB=a cm, BC=b cm, CD=c cm, DA=d cm"; dupa care problema va fi definita de o serie de predicate: "Aria lui ABCD este finita"; "Aria lui ABCD depinde numai de AB, BC, CD, DA" s.a.m.d.; dupa o vreme, daca sistemul axiomatic al geometriei in plan este suficient de bine descris in program, se poate ajunge de fapt la un raspuns).

CitatLaza, daca stau lucrurile cam asa de extraordinar (nu peste tot) ,cum tu ai expus, atunci zi-mi pina la urma asa un limbaj de programare, in care eu dupa ce il voi deschide sa scriu urmatoarea problema simpla: " Sa se calculeze suma numerelor 3 si 4", iar in final programul sami scrie:" 7" sau " Suma numerelor 3 si 4 este egala cu 7".

In primul rand un limbaj de programare nu se deschide. Tu te referi la mediul lui de dezvoltare.

In al doilea rand, Prolog poate face asta, de exemplu, dar trebui sa ii explici multe alte lucruri inainte. De exemplu, cum definesti suma a doua numere naturale, pentru ca o suma se poate defini in multe feluri pe multe clase de date diferite.

CitatEu stiu raspunsul, insa te-ai prins in capcana, si astept sa vad daca vei mai esi (teafar).

Din pacate esti foarte departe de a cunoaste raspunsul :). Ti se pare ca e asa pentru ca ai avut o expunere destul de limitata la probleme de algebra abstracta si de teoria algoritmilor, dar de fapt inca nu iti e foarte clar nici ce e un limbaj de programare, nici care e diferenta dintre un limbaj de programare si unul din mediile lui de programare.

Pe de alta parte, daca deja stii raspunsurile de dinainte, zi asa ca sa nu ma mai chinui sa-ti raspund  ;D

meteor

    Cu problema cea cu trenurile, intradevar e expusa incomplet, am pus-o in graba,mecanic (  1)apropo ar fi de dorit ca vitezele sa nu fie constante. 2) daca trenurile se deplaseaza pe o "linie" (pe o cale ferata), nici nu mai ai nevoe sa afli daca sunt in plan sau in spatiu ), ei hai mai bine sa fie cea a lui Teodor Sirbu , problema celor 2 trenuri.
Pe de alta parte, programul, fiind intratit de inteligent, ar fi trebuit sa ne atentioneze ca problema e incompleta, si cu ce trebue ea de completat. Algoritmul tau de calcul, e doar pentru tine...., si nici pe departe nu il poti transmite programului.

    Ai spus ca limbajul de tip ATP "ar putea" rezolva un astfel de probleme (suma a 2 numere). Simplu simplu de tot aratani principiul sau de functionare, in 2 cuvinte.

    Cu Prolog, nu stau lucrurile asa de bine...In exemplul cela de eri, de unde poate sti o persoana de la litere ce inseamna : " Orange(x): Fruit(x)", bine hai sa zicem ca ea stie engleza, insa 2 puncte si x intre paranteze, pentru ea ar fi ceva absolut nou, o stfel de scriere.

    Daca stiam raspunsul "destul de complet", nici nu mai eram sa scriu  in paranteze (in titlul subiectului), ca e al viitorului. Azi sau mine, nu cred ca va functiona intocmai cu conditiile pe care le-am expus. Stiinta actuala e departe sa faca asa realizari.
    Cel mai important, insa este, ca sa fie un inceput, o baza buna, la care sa fie orientati la lucru programatorii, ci nu haotic sa lucreze la greu.

    Mi insa imi pare, ca tu nu prea bine ai inteles (algebra lui G.Bool, baza programarii ).La drept vorbind nici eu 100 % nu am inteleso  ;).
Explic de ce.
  Florin a oservat, si tu ceva ai spus, ca limbajele de programare din ziua de astazi nu numai ca fac operatii repetitive ci si logice.
E foarte corect, din contra as face o observatie pentru Florin si tie ca nici o operatie repetitiva nu se face pina nu se indeplineste mare si fundamentul programarii - instructiunea "if"=daca. Ce spune  algebra lui Boole, ca toata informatia se poate "diviza" pina la bit= este/nu este. Ca sa poti "lucra" cu aceasta informatie , sa o poti "parcurge" este absolut necesar instructiunea logica "if"=daca.
   E corect, si nu e mare secret ca multi termeni si notiuni nu imi sunt clare, si nu le folosesc corect. Insa intrebarea, cred ca e clar expusa.

meteor

    Am sa incerc sa fac primul pas (in bezna)...

            Hai sa incep (voi descrie foarte scurt).
     Repet inca o data ca nu in zadar intre paranteze e scris (al viitorului), deoarece, nu cred ca degraba se va rezolva complet intrebarea, INSA eu am "citiva" pasi mici, dar sunt convinsi ca sunt corecti.
   1) Foarte putini isi dau seama ca limba pe care ei o vorbesc este un grandios limbaj de programare (noi permament (cind comunicam), programam, si rezolvam programe. Insa din cauza ca ne-am deprins cu el, nici nu sesizam esenta sa). Amintitiva cum a aparut prima oara grafia latina (nu mai tin minte cum e corect spus, greaca sau cum mai era)?! Stie cineva?! Dar, ce a fost pina atunci, s-a gindit cineva?! Voi spune scurt. Primele date despre o astfel de "limba scrisa"->tiparita au fost insusi desenele oamenilor primitivi. Ei ca sa poata transmite o informatie era nevoe sa deseneze obiectul vazut. Apoi, totul a mai evoluat... Egiptenii tot foloseau un fel de "desene", insa ca sa poti forma orice cuvint din viata cotidiana, era nevoe sa stii o sumedenie de astfel de "desene".
Totul a evoluat pina atunci cind s-au dat seama ca cel mai logic este: sa divizez "limba pe gare o vorbesti", in elemente din care e compusa ea, un fel de "atomi indivizibili", astfel ca apoi cu ei sa poti construi toata limba. Pentru a insusi e nevoe sa memorezi aceste elemente, sa le dai semn fiecarui si poftim problema e rezolvata. Astfel este limba (grafia) engleza, limba (grafia) latina, etc. Elementele spre exemplu limbii (grafiii romane) sunt 24 de litere (cu toateca eu cinsider citeva din ele de prisos -i din a,x,y,z). In limba rusa sunt de prisos literele io;iu,ia (si altele). Se poate spune ca orice grai omenesc e compus din 20 litere ("atomi").
    Fiecare cuvint e compus din litere. Mai sunt si accentele ce au o oarecare importanta, dar nu mai spun aici. Fiecare propozitie e compusa din cuvinte. Fiecare text,fraza (intrebare/problema) e compusa din propozitii. -Nu va suna  acum solutia la problema????!!!
    Solutia faimoasa este ca fiecare cuvint in text (context) in faimoasa gramatica (sintaxa frazei) unei limbi reprezinta un loc foarte bine determinat ex:Atribut,pronume;etc.
1.2) La fel si la programarea audio.
     Despre programarea video asteptam mai multe raspunsuri. Se stie ca surdomutii au limbajul lorfiecare cuvint inseamna un semn,miscare (insa e foarte greu de retinut atitea semne,miscari). Tot se stie ca fiecare litera  este un semn (in nustiu ce limbaj), deaceea e mult mai ratiunal sa programam video cu ajutorul semnelor (literelor nu cuvintelor), plus la toate astea avem un diapazon infinit. Insa, este un neajuns. Timpul de expunere a informatieii (video), cu ajutorul fiecarei litere, e mult mai mare ca cel al surdomutilor.
    Codul Morse tot e un "fel" de limbaj de programare.
2)   Care-i ideea fundamentala cu care putem lucra mai departe (in programare) din faimoasa gramarica (la care au lucrat oamenii, ani la rindu)?! -In un text toate propozitiile au o ordine (logica) speciala, ea e unica. Fiecare propozitie explica pe cea principala (pina la propozitia regenta,mi se pare). Adica informatia initiala apare din propozitia principala (regenta), celelalte din urma sunt "completari", lamuresc pe cea principala.

Pas1. Formidabilul nostru program(limbaj de programare. Da, el poate fi si un program, daca nu e noutate pentru voi. El poate fi construit chiar si in Pascal (ca un sir de caractere....), si in C++ Buillder(in un Edit sau Label, ca un AnsiString....), si in Delphi 6, si in Java NetBens,etc....), problema e ca e extrem de greu de lucrat (ca program, veti vedea mai tirziu de ce), si e de dorit de creat o platforma. Lucrul  va incepe cu constructia sintaxei unei fraxe (scheme). Apoi va gasi care e propozitia principala. Fiecare cuvint ( in o limba sunt cel putin 50000 de cuvinte. Nu uitati ca se poate de redus de ~ 1/4; 1/5 ori, deoarece sunt sinonime) are insemnatatea sa, va ocupa o anumita pozitie in memorie(cum e spre exempli cuvintul Program,begin, end,... in Pascal). Astfel in memoria "robotului" nostru ii va fi cunoscuta (la crearea lui datele  ii vor fi introduse) diferite interpretari ale probleme (sensul fiind acelasi), si nu se va bloca deloc daca o persoana va scrie " Sa se insumeze 2 numere,daca ...." si nu " Sa se adune 2 numere, daca...", pentru el aceste 2 propozitii au aceeasi semnificatie. Verbele ocupa o pozitie extrem de importanta. Unele din text ii indica lui "ce sa faca". Ex: sa parcurga un sir (echivalent "for i=1 to n do",spre exemplu , sa insumeze (functia de adunare), sa afiseze (writ/writeln in Pascal ) etc.
Pas2 Se trece la " calculul" urmatoarei propozitie (ce sta in memorie din schema sintaxei propozitiei). In final "se parcurge" programul si se ia decizia- adica afisarea raspunsului. E ca un "fel" de schema Von Neumman.

3)Pina aici e un robot/program cu nimic esit din comun fata de acele din ziua de astazi. Insa ca sa indeplinim punctul 3) din conditia problemei initiale (sa efectueze calcule de logica, sa dea raspuns la intrebari filozofice), e extrem de greu. O solutie "ideala" pina ce nu o pot da, insa o incercare o pot face...
    Baza unei programari nu poate exista fara o baza filozofico-matematica buna pusa la punc. Eu descriu presupun ca solutia ar fi determinarea solutiei unui nou subiect din filozofie cu tema "Marele Algoritm". Ce mai inseamna acest "Marele Algoritm". Eu  presupun ca ar putea exista un astfel de algoritm, care dupa ce il parcurgem sa ajungem la raspunsul ORECAREI PROBLEME. Desigur intii de toate se pune simpla intrebare - da mai poate exista asa fantezii sau nu?! La moment nu pot demonstra ca el poate exista. A doua intrebare este: Chiar daca, el ar exista, el e finit sau infinit (in pasi). Cu parere de rau nici la intrebarea asta nu pot da raspuns. Insa pot spune primii pasi ai acestui algoritm  (voi spune foarte scurt):
1) Din start, cel care intreaba, sa dea raspuns, in ce domeniu el doreste sa obtina raspunsul. Ce inseamna acest domeniu?! Stim ca sunt mai multe geometrii, in fiecare (spre exemplu) suma unghiurilor in triunghi e diferita, raspunsul e diferit- geometria euclidiana, a lui Lomacevschi;etc. La fel mai e si fizica clasica si fizica lui Einstein  (cu toate ca cea clasica e inclusa in a lui Einstein, insa din cauza ca anumite valori sunt extrem de mici ca rezultatul sa se schimbe, se neglijeaza si folosim fizica clasica). Un exemplu in acest caz ar fi: in cit timp (pentru acel sistem de referinta-masina) o masina va parcurge 100 km, cu viteza de 100 km/h, fata de observatori ce stai nemiscati. In fizica lui Einstein rezultatul deviaza infim de putin fata de fizica clasica, insa daca valorile cresc considerabil de mult?!
2) Fiecare intrebare/problema are 2 chimpuri (de baza): 1. Chimpul datelor; 2. Chimpul intrebarilor. O intrebare/problema nu poate fi rezolvata(sau are o infinitate de solutii) daca cantitatea de informatii din chimpul datelor e mai mica ca cantitatea de informatii (necesara de raspuns) din chimpul intrebarilor. O astfel de problema am pus-o inca demult- (problema calculului ariei unui patrulater, fiind date in problema datele numai despre dimensiunile laturilor). Astfel QD>=QI (cantitatea de date >= cantitatea de intrebari). Cel mai bine ar fi egalitate adica QD=QI. Raspund de ce. Multe intrebari/probleme din viata cotidiana/stiinta au un surplus de date, hai sa zic iar problema cea cu patrulater, se considera un surplus de infirmatii daca in problema s-ar indica inca 3 unghiuri (inafara de un unghi);sau un surplus de date daca s-ar mai indica inca 1 diagonala (inafara de prima). Aceste date doar ocupa memorie, si ingreuneaza lucrul, Ele nu-s gresite daca se indica, insa sunt de prisos. La fel si in programare deseori se fac calcule se indica date, ele fiind de prisos.
     Daca, cineva doreste sa gindesca foarte bine, intii el  trebue sa se convinga (daca poate, caci deseori e foarte greu) daca problema poate fi rezolvata- cu datele prezente in probleme + cele care trebuesc gasite.
3) Intrebarea problemei sa nu fie "dubla", sau incompleta. In asemenea cazuri se pot da de la 2 pina la infinit raspunsuri, toate fiind corecte. Un exemplu din viata cotidiana:" Ion il intreba pe Victor:-Victor tu ti-ai cumparat masina?! Victor raspunde:" Da mi-am cumparat, e din anul 2000; etc.", Ion ii spune:" Pai, nu Victore, eu am vrut sa te intreb daca ti-ai cumparat masina de frezat.".
       Astfel, robotul nostru inteligent, pentru a putea da raspuns la o intrebare ceva ce implica mai multa  logica, sau filozofie. Trebue sa "parcurga" aceste 3 puncte.
       La fiecare aparitei unui nou cuvint (din afara limbii cutare), programul va ruga sa-i definiti/explica ce el insemna (e un pronume, verb,etc.). El va fi ca un "copil" mic ce permament invata. Cu cit veti lucra la el cu atit el va fi mai "inteligent". Deoarece aici fiecare functie /procedura/clasa va ramine in memorie permament. Pornirea sa se incepe nu nu pornirea cind el a fost creat, ci de cind s-a lucrat ultima data la el. Automat se vor grea meniuri, dupa crearea claselor, unde se vor memora, astfel ca utilizatorul sa nu mai defineasca din nou din nou (spre exemplu cei aceasta tetraedru). Definirea "axiomatica" atuturor elementelor (noilor definitii), e lucru complicat, dar cumva se poate, nu mai scriu acum aici. Voi ce credeti ca totul ce stiti acum, nu este format din axiome??!! Le-ati defnit/sau incerca ale defini vreo data??!! Intrebati un copil (sau pe voi) ce inseamna o litera sau un numar sau ce inseamna un punct. Astfel pot face o mica concluzie ca noi (creerul uman) lucreaza cu aceste "axiome", ele fiind pastrate in memorie (de la prima aparitie).

      Eu personal, impart evolutia programarii/robotizarii in 2 perioade globale. 1) Cind utilizatorul creaza (programul/robotul), pentru ca acesta sa-i dea un oarecare raspuns, insa pasii de gasire a solutiei tot utilizatorul le prezinta.
            2) Cind utilizatorul creaza (programul/robotul),pentru ca acesta sa-i dea sau nu un raspuns oarecare, pasii de gasire a solutiei robotul singur ii "face",cauta . Ehehei, pina la a doua perioada e mult.... A doua periada reprezinta roboti/programe cu intelect, ei vor fi "vii".. Vor fi ca niste fiinte. Principala deosebire este ca lor nu le mai trebu o comanda, ca acestea sa faca o instructiune, ei vor "trai" singuri de "capul lor".  Idee nu am daca pot exista a doua perioada. Sunt extrem de curios (daca da), care ar fi principiul de functionare (apropo daca imi spune cineva principiul de functionare a creerului uman, eu ii voi raspunde despre a doua perioada). Posibilitatea existentei celei de a doua perioada ar produce mari tulburari si intrebari inspre teoria creationista .

AlexandruLazar

#9
Citat din: meteor din Noiembrie 06, 2011, 03:57:33 PM
  1) Foarte putini isi dau seama ca limba pe care ei o vorbesc este un grandios limbaj de programare (noi permament (cind comunicam), programam, si rezolvam programe.

Foarte multi (printre care tu nu te numeri) isi dau seama ca termenul "de programare" asociat unui limbaj este unul de convenienta. Orice structura care are sintaxa si semantica e un limbaj.

CitatCodul Morse tot e un "fel" de limbaj de programare.

Orice structura cu sintaxa si semantica e un limbaj, si se poate folosi inclusiv pentru programare (pe automate Turing sau de alta natura).

CitatIn un text toate propozitiile au o ordine (logica) speciala, ea e unica. Fiecare propozitie explica pe cea principala (pina la propozitia regenta,mi se pare). Adica informatia initiala apare din propozitia principala (regenta), celelalte din urma sunt "completari", lamuresc pe cea principala.

Din pacate limbajele vorbite nu satisfac aceasta conditie.

CitatPas1. Formidabilul nostru program(limbaj de programare. Da, el poate fi si un program, daca nu e noutate pentru voi.

Ok, deci nu stii despre ce vorbesti. Sa iti explic ca la clasa a opta: un limbaj de programare este format din sintaxa si semantica prin care se organizeaza o serie de simboluri. El nu este un program. Un mediu de programare permite comunicarea prin intermediul unui limbaj de programare. De aceea, Pascal este un limbaj de programare iar TurboPascal, Borland Pascal, FreePascal sunt medii de programare. Delphi NU este un limbaj de programare ci un IDE pentru limbajul ObjectPascal. C++ Builder NU este un limbaj de programare ci un IDE pentru limbajul C++. Java NetBeans NU este un limbaj de programare ci un IDE pentru limbajul Java (incidental omonim cu numele unui framework pentru acelasi limbaj.

CitatEx: sa parcurga un sir (echivalent "for i=1 to n do",spre exemplu , sa insumeze (functia de adunare), sa afiseze (writ/writeln in Pascal ) etc.

Ai incercat vreodata sa implementezi un astfel de program? Imagineaza o schema logica prin care ai putea decoda in mod corect urmatoarea propozitie si i-ai putea da raspunsul corect:

"Fie un sir A="abcdef". De asemenea, fie un sir B="dcefg". De ce sirul A este mai lung decat sirul B? Analog, este Simfonia a 5-a a lui Beethoven mai lunga decat sirul A? Dar decat Dark Side of the Moon?".

Retine, in algoritmul pe care il proiectezi, ca un calculator nu are notiunea de sir de caractere, nici de lungime a unui sir de caractere, nici macar de lungime in general, deci vor trebui in prealabil definite.

CitatEu  presupun ca ar putea exista un astfel de algoritm, care dupa ce il parcurgem sa ajungem la raspunsul ORECAREI PROBLEME. Desigur intii de toate se pune simpla intrebare - da mai poate exista asa fantezii sau nu?! La moment nu pot demonstra ca el poate exista.

Daca te oboseai sa citesti postul meu de dinainte ai fi vazut ca au demonstrat altii ca el nu exista.

CitatA doua intrebare este: Chiar daca, el ar exista, el e finit sau infinit (in pasi). Cu parere de rau nici la intrebarea asta nu pot da raspuns. Insa pot spune primii pasi ai acestui algoritm  (voi spune foarte scurt):

Daca ai fi macar un pic familiar cu teoria automatelor finite ai sti din start ca la intrebarea asta nu se poate da un raspuns.

Citat1) Din start, cel care intreaba, sa dea raspuns, in ce domeniu el doreste sa obtina raspunsul. Ce inseamna acest domeniu?! Stim ca sunt mai multe geometrii, in fiecare (spre exemplu) suma unghiurilor in triunghi e diferita, raspunsul e diferit- geometria euclidiana, a lui Lomacevschi;etc. La fel mai e si fizica clasica si fizica lui Einstein  (cu toate ca cea clasica e inclusa in a lui Einstein, insa din cauza ca anumite valori sunt extrem de mici ca rezultatul sa se schimbe, se neglijeaza si folosim fizica clasica). Un exemplu in acest caz ar fi: in cit timp (pentru acel sistem de referinta-masina) o masina va parcurge 100 km, cu viteza de 100 km/h, fata de observatori ce stai nemiscati. In fizica lui Einstein rezultatul deviaza infim de putin fata de fizica clasica, insa daca valorile cresc considerabil de mult?!

Acesta nu este un pas al unui algoritm!

Citat2) Fiecare intrebare/problema are 2 chimpuri (de baza): 1. Chimpul datelor; 2. Chimpul intrebarilor. O intrebare/problema nu poate fi rezolvata(sau are o infinitate de solutii) daca cantitatea de informatii din chimpul datelor e mai mica ca cantitatea de informatii (necesara de raspuns) din chimpul intrebarilor.

Nu e adevarat. Fiind data problema:

"Un punct material se misca cu viteza constanta de 100 m/s. Care este distanta parcursa de acel punct material?"

Urmatorul raspuns:

"Distanta parcursa este de [tex]100 * t_d[/tex], unde [tex]t_d[/tex] este timpul de deplasare considerat"

este perfect valid si se potriveste perfect comportamentului sistemului gandit de tine.


CitatLa fiecare aparitei unui nou cuvint (din afara limbii cutare), programul va ruga sa-i definiti/explica ce el insemna (e un pronume, verb,etc.).

Asta e o problema rezolvata cel putin din anii '70. Din pacate n-a ajuns la niciun rezultat grozav cu structurile complicate care contin cuvinte polisemantice.