Programarea calculatoarelor 2 - Laborator 11

Pornind de la un fișier text care descrie un circuit combinațional și valorile intrărilor sale, să se calculeze valoarea la ieșirea circuitului.
Circuitul e descris în fișier în felul următor: pe prima linie, două numere întregi nenegative, reprezentând numărul N al intrărilor circuitului și numărul M de semnale întermediare. Pe linia următoare, în ordine, un șir de 0 și 1 separat prin spații, reprezentând în ordine valorile celor N intrări. Pe următoarele linii, până la sfârșitul fișierului, câte o descriere a porților din circuit, în formatul următor:
out AND in1 in2 ... ink
out ITE in1 in2 in3
out NOT in
out OR in1 in2 ... ink
Pe prima poziție se află ieșirea fiecărei funcții logice. Porțile AND și OR pot avea oricâte intrări (cel puțin două), poarta NOT una singură. Funcția ITE (if-then-else) reprezintă un multiplexor: dacă in1 e adevărat, ieșirea ia valoarea lui in2, altfel valoarea lui in3.
Numele semnalelor încep cu s pentru cele intermediare și cu i pentru intrările circuitului, urmate de numărul corespunzător (de la 0 la M-1 și respectiv N-1). Funcțiile logice pentru semnalele intermediare nu sunt date într-o ordine anume, dar sunt în așa fel încât circuitul nu e ciclic. Semnalul s0 este ieșirea circuitului, a cărei valoare trebuie calculată.
Fișierul se dă ca unic argument pe linia de comandă; dacă acesta lipsește, se citește de la stdin.
Exemplu:
5 3
0 1 0 1 0
s1 AND i0 i1
s0 OR s1 i2 s2
s2 AND i3 i4

Marius Minea
Last modified: Wed Dec 17 08:36:17 EET 2003