Masina cu trei adrese

Intrebari despre programarea cu VC++ incluzand mediul de dezvoltare, instalare, setari, debugger, compilator, linker si documentatie.
Post Reply
Popa Bogdan
Junior
Junior
Posts: 3
Joined: 10 Jun 2009, 09:36
Judet: Braşov

Masina cu trei adrese

Post by Popa Bogdan » 10 Jun 2009, 09:56

Salut,trebuie sa fac o aplicatie care sa simuleze masina cu trei adrese....dupa ce m-am uitat cam ce trebuie sa fac mi-am dat seama ca mi-ar fi foarte util daca as putea transforma o variabila tip CString intr-o linie de cod.Adica daca as avea sa zicem CString var1;var1="c=a+b"; sa pot executa ce este in var1 ( variabilele c,a,b sunt declarate si nu sunt fixe incat sa fac ceva cu if{})....aici vine intrebarea,se poate face asa ceva?...daca nu din CString,din alt tip se poate?.



neagu_laurentiu
Membru++
Membru++
Posts: 919
Joined: 23 Jul 2007, 11:32

Re: Masina cu trei adrese

Post by neagu_laurentiu » 10 Jun 2009, 10:22

Nu se poate... direct si rapid !
Daca e vorba de calcule matematice poti implementa un "calculator" prin interpretare din aproape in aproape, extragi elementele si le ordonezi dupa prioritati, se pot interpreta si functii etc. E de lucru insa, un pic.

O solutie rapida e lucrul cu .dll-urile ce incapsuleaza un limbaj script (de ex. JavaScript) si in felul acesta doar pasezi string-ul in limbajul respectiv si obtii rezultatul.
Sau in .NET, eu m-am jucat cu string-uri in C# insa in mod normal ar merge si sub C++/CLI.
Last edited by neagu_laurentiu on 10 Jun 2009, 10:24, edited 1 time in total.

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Masina cu trei adrese

Post by Dragos Cojocari » 10 Jun 2009, 10:22

Nu se poate cu librariile standard C++. Probabil sunt librarii care fac acest lucru dar pana la urma si taskul/tema ta cer acelasi lucru. Altfel spus poti folosi CString sa tina expresia dar trebuie tu sa o evaluezi. In functie de operatorii si functiile pe care trebuie sa ii implementezi solutia poate merge de la notatia poloneza pana la implementarea unui limbaj formal (folosind gramatici). In acest punct insa e nevoie de mai multe informatii: ce operatii suporta masina ta, ce operanzi suporta in afara de cele 3 adrese etc.

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Masina cu trei adrese

Post by Dragos Cojocari » 10 Jun 2009, 10:24

neagu_laurentiu wrote:O solutie rapida e lucrul cu .dll-urile ce incapsuleaza un limbaj script (de ex. JavaScript) si in felul acesta doar pasezi string-ul in limbajul respectiv si obtii rezultatul.
Sau in .NET, eu m-am jucat cu string-uri in C# insa in mod normal ar merge si sub C++/CLI.
Asta cred ca e cheat ptr o tema de casa. :) In aceasi nota e sa generezi cod C++, sa invoci compilatorul, sa executi codul si sa obtii rezsultatul. :biggrin:

Viorel
Microsoft MVP
Microsoft MVP
Posts: 292
Joined: 13 Jul 2007, 12:26

Re: Masina cu trei adrese

Post by Viorel » 10 Jun 2009, 10:24

O soluţie ar fi Microsoft Script Control, care permite şi evaluarea expresiilor JScript într-un program C++.

Popa Bogdan
Junior
Junior
Posts: 3
Joined: 10 Jun 2009, 09:36
Judet: Braşov

Re: Masina cu trei adrese

Post by Popa Bogdan » 10 Jun 2009, 10:49

Multumesc....cam in consecinta,la nivelul la care sunt eu nu se poate,nu stiu Javascript.Dragos ,sti undeva unde as putea citi despre generarea codului c++ si invocarea compilatorului?...oricum deja ma gandesc la altceva incat sa-mi iasa cam ce vreau eu,mai stramtorez aplicatia doar pentru nota :( ,sunt anul 1 la info si-mi trebuie aplicatia asta la arhitectura calculatoarelor,jumatate e gata....doar calcule mai trebuie sa-mi faca.O solutie tot gasesc eu :D...thx

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Masina cu trei adrese

Post by Dragos Cojocari » 10 Jun 2009, 11:37

Popa Bogdan wrote:Multumesc....cam in consecinta,la nivelul la care sunt eu nu se poate,nu stiu Javascript.Dragos ,sti undeva unde as putea citi despre generarea codului c++ si invocarea compilatorului?...oricum deja ma gandesc la altceva incat sa-mi iasa cam ce vreau eu,mai stramtorez aplicatia doar pentru nota :( ,sunt anul 1 la info si-mi trebuie aplicatia asta la arhitectura calculatoarelor,jumatate e gata....doar calcule mai trebuie sa-mi faca.O solutie tot gasesc eu :D...thx
Chestia cu compilatorul de C++ e extrem de urata. Orice profesor care a terminat o scoala profesionala cu ore optionale de informatica ar trebui sa depunceteze acea solutie. :)

Uite aici ptr forma poloneza infixata http://labs.cs.utt.ro/labs/pc/html/node51.html . E un algoritm extrem de simplu.

Uite si aici: http://en.wikipedia.org/wiki/Reverse_Polish_notation

Popa Bogdan
Junior
Junior
Posts: 3
Joined: 10 Jun 2009, 09:36
Judet: Braşov

Re: Masina cu trei adrese

Post by Popa Bogdan » 10 Jun 2009, 12:22

Mersi Dragos,e super utila forma poloneza,nu stiam de asa ceva.Am inteles despre ce este vorba.

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Masina cu trei adrese

Post by Dragos Cojocari » 10 Jun 2009, 13:02

Popa Bogdan wrote:Mersi Dragos,e super utila forma poloneza,nu stiam de asa ceva.Am inteles despre ce este vorba.
Excelent. Incearca sa implementezi algoritmul iar daca dai de probleme posteaza-le aici.

Uite aici si un algoritm ptr a aduce o expresie din forma folosita in mod normal in RPN (reversed polish notation): http://planetmath.org/encyclopedia/Shun ... rithm.html

PS: m-am exprimat gresit , e vorba de "notatia poloneza" si nu de "forma poloneza".

Dragos Cojocari
Membru++
Membru++
Posts: 789
Joined: 11 Jul 2007, 14:11

Re: Masina cu trei adrese

Post by Dragos Cojocari » 15 Jun 2009, 14:33

Heh, nu m-am putut abtine si am facut un programel ce implementeaza RPN. Programul e facut pe genunchi dupa vreo 2 ani de Java asa ca fiti blanzi. :)

Ce face programul:
- preia expresia de la consola
- aduce expresia in RPN
- evalueaza expresia
- se accepta atat constante cat si variabile; valorile ptr variabile sunt hardcoded dar exista posibilitatea ca valorile ptr variabile sa fie introduse de utilizator
- doar operatorii +,-, * sunt implementati iar regulile de precedenta sunt implementate destul de brural.
Attachments
RPN.zip
(8.83 KiB) Downloaded 209 times

Post Reply