5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐...

40
5. 5.1. PROGRAMAREA CALCULATOARELOR 5.1.1. Pentru progamul următor, corectați erorile de editare, compilare, atenționările și erorile de funcționare. Programul calculează incidența și procentajul literelor dintr-un fișier (denumit mai jos histograma). Scrieți în dreptul liniei greșite varianta corectă. #include <stdio.h> int main (int argc, char **argv) { FILE p_file; /* Fisier de intrare */ int c; /* Caracterul curent citit */ int hist['Z' - 'A' + 1]; /* Histograma literelor */ int sum_let; /* Numarul total de litere din fisier */ float freq; /* Frecvența de apariție a literei curente */ /* Verificati numarul de argumente */ if (argc < 2) { printf (" %s <input file>\n", argv[0]); return (1); } /* Deschideti fisierul de intrare specificat de argv[1] */ p_file = fopen (argv[1], "r"); if (p_file == NULL) { printf ("Nu poate fi deschis fisierul de intrare '%s'.\n", argv[1]); return (1); } /*intializare cu 0 a histogramei */ for (c = 'A'; c > 'Z'; c++) hist[c - 'A'] = 0; /*Citirea continutului fisierului, caracter cu caracter */ sum_let = 0; while ((c = fputc(p_file)) != EOF) { if (c >= 'a' && c <= 'z') c += ('a' - 'A'); /*Daca este cazul, se trece la litera mare */ /* daca e litera, actualizeaza histograma */ if (c >= 'A' && c <= 'Z') { (hist[c - 'A'+1])++; sum_let++; } } fclose (p_file,w); /* Inchide fisierul */ /* Afiseaza histograma */ for (c = 'A'; c <= 'Z'; c++) { freq = 100 * (float)hist[c - 'A'] / (float)sum_let; printf ("%c : %4c (%5.2f %%)\n", c, hist[c - 'A'], freq); } return (0); } Soluție: #include <stdio.h>

Transcript of 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐...

Page 1: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5. 5.1. PROGRAMAREA CALCULATOARELOR 5.1.1. Pentru progamul următor, corectați erorile de editare, compilare, atenționările și erorile de funcționare. Programul calculează incidența și procentajul literelor dintr-un fișier (denumit mai jos histograma). Scrieți în dreptul liniei greșite varianta corectă. #include <stdio.h> int main (int argc, char **argv) FILE p_file; /* Fisier de intrare */ int c; /* Caracterul curent citit */ int hist['Z' - 'A' + 1]; /* Histograma literelor */ int sum_let; /* Numarul total de litere din fisier */ float freq; /* Frecvența de apariție a literei curente */ /* Verificati numarul de argumente */ if (argc < 2) printf (" %s <input file>\n", argv[0]); return (1); /* Deschideti fisierul de intrare specificat de argv[1] */ p_file = fopen (argv[1], "r"); if (p_file == NULL) printf ("Nu poate fi deschis fisierul de intrare '%s'.\n", argv[1]); return (1); /*intializare cu 0 a histogramei */ for (c = 'A'; c > 'Z'; c++) hist[c - 'A'] = 0; /*Citirea continutului fisierului, caracter cu caracter */ sum_let = 0; while ((c = fputc(p_file)) != EOF) if (c >= 'a' && c <= 'z') c += ('a' - 'A'); /*Daca este cazul, se trece la litera mare */ /* daca e litera, actualizeaza histograma */ if (c >= 'A' && c <= 'Z') (hist[c - 'A'+1])++; sum_let++; fclose (p_file,w); /* Inchide fisierul */ /* Afiseaza histograma */ for (c = 'A'; c <= 'Z'; c++) freq = 100 * (float)hist[c - 'A'] / (float)sum_let; printf ("%c : %4c (%5.2f %%)\n", c, hist[c - 'A'], freq); return (0); Soluție: #include <stdio.h>

Page 2: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

int main (int argc, char **argv) FILE *p_file; /* Fisier de intrare */ int c; /* Caracterul curent citit */ int hist['Z' - 'A' + 1]; /* Histograma literelor */ int sum_let; /* Numarul total de litere din fisier */ float freq; /* Frecvența de apariție a literei curente */ /* Verificati numarul de argumente */ if (argc < 2) printf (" %s <input file>\n", argv[0]); return (1); /* Deschideti fisierul de intrare specificat de argv[1] */ p_file = fopen (argv[1], "r"); if (p_file == NULL) printf ("Nu poate fi deschis fisierul de intrare '%s'.\n", argv[1]); return (1); /*intializare cu 0 a histogramei */ for (c = 'A'; c <= 'Z'; c++) hist[c - 'A'] = 0; /*Citirea continutului fisierului, caracter cu caracter */ sum_let = 0; while ((c = fgetc(p_file)) != EOF) if (c >= 'a' && c <= 'z') c += ('A' - a'); /*Daca este cazul, se trece la litera mare */ /* daca e litera, actualizeaza histograma */ if (c >= 'A' && c <= 'Z') (hist[c - 'A')++; sum_let++; fclose (p_file); /* Inchide fisierul */ /* Afiseaza histograma */ for (c = 'A'; c <= 'Z'; c++) freq = 100 * (float)hist[c - 'A'] / (float)sum_let; printf ("%c : %4d (%5.2f %%)\n", c, hist[c - 'A'], freq); return (0); 5.1.2. Pentru programul următor să se precizeze care sunt rezultatele afișărilor – precizați în dreptul liniei care conține funcția de afișare. #include <stdio.h> #define MAX 5 int ModificaTabel(int b[], int); int ModificaElement(int); int main() int a[MAX] = 0,1,2,3,4; int i;

Page 3: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

printf( "Efectul transmiterii intregului tabel ca parametru:\n\nValorile" " din tabelul original sunt:\n" ); for (i=0;i<MAX;i++) printf("%3d",a[i]); printf("\n"); ModificaTabel(a, MAX); printf("Valorile din tabelul modificat sunt:\n"); for (i = 0; i < MAX; i++) printf("%3d",a[i]); printf( "\n\n\nEfectul transmiterii elementelor tabelului" "\n\nValoarea elementului a[3] este %d\n", a[3]); ModificaElement(a[3]); printf( "Valoarea elementului a[3] este %d\n",a[3]); return 0; int ModificaTabel(int b[], int dimm) int j; for (j=0;j<dimm;j++) b[j] *= 2; return 0; int ModificaElement(int x) printf( "Valoarea elementului in ModificaElement este %d\n", x *= 2 ); return 0; Soluție:

5.1.3. Să se scrie un program în C care este constituit din 3 părţi după cum urmează:

‐ se creează un fișier în care se introduc date caracter cu caracter de la tastatură.

Fişierul este închis la introducerea CTRL+Z de la tastatură; ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură şi închis la

introducerea CTRL+Z; la final este listat conținutului fișierului, linie cu linie.

Page 4: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Soluție: #include <stdio.h> #include <conio.h> int main() FILE *pf; char ch, s[100], nume_fis[50] = "c:\\fisier.txt"; int i; clrscr(); /* crearea fisierului prin introducerea caracterelor, inclusiv '/n', de la tastatura. Se termina cu Ctrl-Z */ pf=fopen(nume_fis,"w"); printf("\nIntroduceti textul: "); while ((ch=getc(stdin))!=EOF) putc(ch,pf); fclose(pf); /* Adaugarea unor siruri de caractere. Se termina cu Ctrl-Z*/ pf=fopen(nume_fis,"r+"); fseek(pf,0l,2); printf("Precizati sirurile de caractere incheind cu ^Z:"); while(fgets(s,100,stdin)!=(char*)0) fputs(s,pf); fclose(pf); /* Afisarea continutului */ printf("\nContinutul fisierului, linie cu linie, este: \n"); i=0; pf=fopen(nume_fis,"r"); while(fgets(s,100,pf)!=(char *)0) printf("%d %s",i,s); i++; fclose(pf); getch(); return 0;

Page 5: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.2. STANDARDE ŞI GRAFICĂ TEHNICĂ ŞI CREAŢIE INTELECTUALĂ 5.2.1. Prezentaţi, pe scurt, regulile de întocmire a schemei circuitelor din cadrul documentaţiei unei instalaţii electrice de automatizare în situaţia în care aceasta conţine atât circuite de forţă cât şi circuite de comandă. Soluţie: Schema circuitelor permite înţelegerea funcţionării în detaliu a operaţiunilor ce pot fi realizate de maşina industrială. Ea reprezintă, cu ajutorul semnelor convenţionale, dispozitivele electrice şi toate legăturile, în special legăturile electrice utilizate în funcţionarea maşinii. Pentru schema circuitelor se recomandă formatul A3. Semnele convenţionale utilizate, cum ar fi de exemplu literele reper pentru identificarea elementelor, trebuie să fie conform standardelor în vigoare. Aparatele sunt reprezentate în poziţia lor fără tensiune, iar operatoarele logice binare puse la zero. Organele mecanice de comandă sunt reprezentate în poziţia pe care o au înainte de a porni în ciclu. Diferite circuite se prezintă astfel încât să permită înţelegerea şi depanarea lor uşoară. Se recomandă reprezentarea separată pe schemă a circuitelor de putere (a), de comandă şi de semnalizare (b), în măsura în care acestea sunt separate electric, astfel: a) Circuitele de forţă se reprezintă prin una sau mai multe linii orizontale de pe care pleacă perpendicular derivaţiile cu protecţiile lor, spre fiecare aparat receptor (motor, etc.); b) In circuitele de comanda si semnalizare fiecare circuit elementar se reprezintă între două sau mai multe linii paralele, perpendicular pe acestea, sub forma unui traseu cuprinzând atât cât este posibil, una sau mai multe linii drepte. De asemenea, trebuie să se reprezinte sursa sau sursele de alimentare a circuitelor de comandă. Pentru echipamentele electronice, în locul schemei circuitelor se poate reprezenta o schemă asemănătoare cu schema funcţională, dar indicând în detaliu relaţiile intrări-ieşiri ale operatoarelor logice binare (de exemplu, utilizând tabelele de adevăr). Pe schema circuitelor se recomandă trecerea următoarelor informaţii: - polarităţile; - tensiunile şi frecvenţele diferitelor surse de alimentare şi numărul fazelor; - caracteristicile specifice fiecărui aparat de comandă, atunci când acestea sunt necesare la înţelegerea funcţionării (rezistoare, capacităţi etc.); - curenţii nominali ai siguranţelor fuzibile, valorile de reglaj ale aparatelor cu posibilitatea de reglaj; - mijloacele de acţionare şi funcţiunile aparatelor care nu au funcţii strict electrice (detectoare de poziţie, contacte cu comandă manuală, electrodistribuitoare hidraulice sau pneumatice, dispozitive de temporizare); - diagrama contactelor aparatelor cu comandă manuală; - diagrama circuitelor de lucru ale unităţilor componentelor sau ale utilajului în general; - alte precizări care să contribuie la citirea şi înţelegerea corectă a schemei circuitelor (de exemplu valorile de reglaj ale parametrilor traductoarelor). Astfel de precizări se pot da, de exemplu într-o legendă pe schemă. În cazul în care maşina poate executa mai multe cicluri (eventual cu puncte de plecare diferite), trebuie să se precizeze pe schemă ciclul pentru care aceasta este definită. Se recomandă reprezentarea elementelor consumatoare de energie ale aparatelor (bobine, electromagneţi, etc.) în apropierea liniei la care sunt racordate direct şi care este destinată să fie legată, eventual la pământ; contactele pe care le comandă sunt atunci racordate la altă linie. Pentru uşurarea citirii schemei, se recomandă reprezentarea operaţiilor în ordinea lor succesivă de la stânga la dreapta sau de sus în jos. Trebuie să se indice clar funcţia fiecărui circuit în funcţionarea maşinii. 5.2.2. Precizaţi, pe scurt, câte o măsura recomandată pentru implementare a patru dintre următoarele metode de protecţie, destinate a fi aplicate in cadrul echipamentelor electrice:

Page 6: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

a. Protecţia împotriva electrocutărilor; b. Protecţia împotriva scurtcircuitelor; c. Protecţia la suprasarcină; d. Protecţia împotriva repornirii automate după întreruperea şi restabilirea tensiunii; e. Dispozitive pentru oprirea de urgenţă şi pentru întreruperea alimentării; f. Protecţia în caz de defect si g. Perturbaţii radioelectronice. Soluţie a. Protecţia împotriva electrocutărilor a.1 Protecţia împotriva electrocutărilor prin atingere directă. Această protecţie este destinată să protejeze persoanele împotriva pericolelor care pot rezultă în urma unui contact direct cu părţile active. Măsurile pot fi: - părţile active trebuiesc protejate prin carcase; - părţile active trebuiesc izolate prin înglobarea acestora într-un înveliş izolant. a.2. Protecţia împotriva electrocutărilor prin atingere indirectă. a.2.1. Protecţia prin deconectarea rapidă a alimentării cu dispozitive de protecţie. Deconectarea rapidă a alimentării, după apariţia unui defect, în scopul de a împiedica menţinerea tensiunii de atingere un timp care prezintă pericol pentru persoane. Aceasta presupune: - racordarea părţilor metalice inactive la circuitul de protecţie; - dispozitive de protecţie care să asigure deconectarea rapidă a alimentării, în caz de defect, cu dispozitive de protecţie (siguranţe, întrerupătoare, relee etc.). Trebuie să se asigure continuitatea circuitului de protecţie prin legături efective, adică prin conductoare de protecţie sau direct prin părţi metalice. Organele de comandă manuală trebuie să fie realizate din materiale electroizolante. a.2.2. Protecţia prin utilizarea tensiunii reduse. Tensiunile recomandate sunt de cel mult 40 Vef in c. a. si 60 in c. c. a.2.3. Separare de protecţie. Separarea de protecţie a unui circuit, în scopul realizării de „circuite unice”, pentru evitarea contactului cu părţile inactive, susceptibile a fi puse sub tensiunea părţii active. b. Protecţia împotriva scurtcircuitelor. Protecţia generală se prevede la începutul cablului de alimentare a echipamentului. Trebuie să asigure protecţia conductoarelor, cu ajutorul dispozitivelor de protecţie corespunzător alese. Se recomanda utilizarea de siguranţe fuzibile sau întrerupătoare automate. Acestea trebuie să asigure o capacitate de rupere egală cu intensitatea curentului de scurtcircuit estimat în punctul de instalare. Alegerea curentului nominal al unui dispozitiv de protecţie împotriva scurtcircuitelor este determinată de secţiunea cea mai mică a conductoarelor protejate de acest dispozitiv. c. Protecţia la suprasarcină. Protecţia conductoarelor împotriva suprasarcinilor este necesară pentru circuite care alimentează motoare. Aceasta se poate realiza cu diverse aparate cum ar fi releele termice. d. Protecţia împotriva repornirii automate după întreruperea şi restabilirea tensiunii. În cazul în care repornirea automată a unor aparate, după întreruperea şi restabilirea alimentării, poate să prezinte pericol pentru persoane, să provoace deteriorarea maşinii sau să dăuneze în funcţionare, această repornire trebuie să fie împiedicată. e. Dispozitive pentru oprirea de urgenţă şi pentru întreruperea alimentării. Echipamentul electric de automatizare al unei maşini va cuprinde dispozitive care să permită oprirea în caz de pericol si separarea echipamentul electric de la sursa de alimentare. Un astfel de dispozitiv poate fi, de exemplu, un buton ciupercă de culoare roşie. f. Protecţia în caz de defect. Dacă defectarea echipamentului de automatizare poate fi cauza unor accidente, pentru evitarea acestui risc se vor lua măsuri corespunzătoare, de exemplu: - utilizarea de dispozitive mecanice pentru asigurarea securităţii maşinii; - blocări corespunzătoare ale circuitelor electrice, care comandă mişcări mecanice; - utilizarea de funcţii redondante (dublare de circuit); - adăugarea de circuite care să asigure funcţii de securitate. g. Perturbaţii radioelectronice. Efectele nedorite ale perturbaţiilor radiostatice şi electromagnetice se vor elimina, de exemplu, utilizând filtre, alegând anumite nivele de putere, metode şi tehnici de cablare şi ecrane adecvate.

Page 7: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.2.3. Precizaţi măsurile recomandate pentru a asigura fiabilitatea şi utilizabilitatea (condiţii tehnice de calitate) ale unui program. Soluţie: a) Conditii pentru asigurarea fiabilitatii: -Produsul trebuie să includă informaţii despre procedurile de salvare a datelor. -Produsul trebuie sa includa functiuni suplimentare prin care se asigură capabilitatea funcţională, se exemplu: -verificări că intrarea este plauzibilă; -protecţie împotriva consecinţelor grave datorate unei greşeli de utilizare; -reluare în caz de eroare. b) Modalitati de asigurare a calitatii de “utilizabilitate” a unui program: -Produsul trebuie sa aiba o interfata cu utilizatorul, cum ar fi, de exemplu: linie de comandă, meniu, ferestre, taste funcţionale, funcţiune de ajutor. -Produsul trebuie sa dispuna de instrumente de adaptare la necesitatile utlizatorului, cum ar fi de exemplu: modificarea parametrilor; modificarea algoritmilor de prelucrare pe calculator; atribuiri la tastele funcţionale. -Produsul trebuie sa asigure protecţia dreptului de autor, prin masuri cum ar fi: protecţia tehnică împotriva copierii; data limită sau durata preprogramată de utilizare; atenţionările interactive în vederea plătirii copiilor. Masurile care se recomanda pentru “usurinta de a avea o privire de ansamblu” in cadrul cerintei de “utilizabilitate” a programelor si datelor sunt: -Fiecare suport de date trebuie să conţină identificarea produsului, iar dacă există mai mult decât un suport, atunci să conţină şi un număr sau un text distinctiv. -Atunci când programele sunt puse în funcţiune, utilizatorul trebuie să fie întotdeauna în măsură de a şti care este funcţiunea care este în curs de a se executa. -Ar trebui ca programele să furnizeze utilizatorului informaţii într-o formă care să fie uşor vizibilă şi uşor de citit. Utilizatorul ar trebui să fie ghidat printr-o reprezentare şi grupare adecvată a informaţiei. Atunci când este necesar, programele ar trebui să atenţioneze utilizatorul. -Mesajele emise de programe pot fi concepute astfel încât utilizatorul să le poată diferenţia uşor după tip, de exemplu: confirmare; interogări din programe; avertizări; mesaje de eroare. -Formatele ecranelor de intrare, rapoartelor sau altor intrări şi ieşiri ar trebui proiectate astfel încât să fie clare şi uşor de perceput, de exemplu: -câmpurile alfanumerice să fie aliniate la stânga; -câmpurile numerice să fie aliniate la dreapta; -în tabele punctele sau virgulele zecimale să fie aranjate pe aceeaşi linie verticală; -limitele de câmp să fie uşor de recunoscut; -câmpurile, a căror utilizare este obligatorie, sa fie semnalate ca atare; -erorile de intrare identificate sunt imediat luminate cu intensitate mai mare în formatul ecranului de intrare; - se atrage atenţia utilizatorului la o schimbare a conţinutului ecranului cu ajutorul unui semnal vizual sau auditiv.

Page 8: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.3. DISPOZITIVE ŞI CIRCUITE ELECTRONICE 5.3.1. Pentru schema din figură se presupune că dispozitivul de comandă pe grilă (DCG) furnizează semnale de comandă cu un unghiul de comandă α constant, raportat la fiecare trecere prin zero a tensiunii reţelei. Frecvenţa tensiunii de alimentare este f = 50 Hz. a) Să se reprezinte formele de variaţie în timp ale tensiunilor u2(t) şi uS(t), pentru α = /2 (rad). b) Ştiind că pentru u2 (t)= U2m.sin t expresia curentului de sarcină iS(t) este

2

2

0,pentru [0, ) ;

/ sin ,pentru [ , ]; (1.1)

0,pentru ( , ) ;

/ sin ,pentru ,2 .

m SS

m S

t

U R t ti t

t

U R t t

să se calculeze valoarea medie US med iar pe baza rezultatului obţinut să se reprezinte caracteristica de comandă: US med(α), pentru 0; .

Soluţie:

a) mss.sf

T 2002050

11 , .

mss./

ftt 50050

502

2

2

.

Folosind aceste valori şi cunoscând principiul de funcţionare al schemei rezultă reprezentarea din Fig. 1.

Fig 1. Fig. 2. b) S S Su t R i t

2 2

0 0 0

1 1 1 1( ). ( ) ( ). ( ) ( ). ( ) ( ). ( )

2 2S med S S S S S S SU u t d t R i t d t R i t d t R i t d t

2 1 cosmSmed

UU

, având forma de variaţie din figura Fig. 2.

Us

U2

Page 9: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.3.2. Se consideră schemele de amplificatoare inversoare din figurile de mai jos realizate cu amplificatoare operaţionale. a) Pentru schema din figura din stânga să se determine expresiile tensiunii de ieşire U0 = f(U1) de parametru x, 0;1x fiind coeficientul de poziţie al cursorului potenţiometrului, în două

situaţii:i) amplificatorul operaţional este ideal şi fără saturaţie, ii) amplificator operaţional este ideal cu fenomen de saturare a ieşirii. În primul caz să se calculeze U0 dacă R = 100kΩ, Rp = 50kΩ, x = 0.75, U1 = 8V. În al doilea caz să se calculeze U0, considerând că amplificatorul este polarizat de la o sursă de tensiune dublă: +VS , 0V, -VS, şi că R = 100kΩ, Rp = 50kΩ, x = 0.5, VS = 10V, U1 = 8V. b) Care este deosebirea dintre cele două scheme din punctul de vedere al rezistenţei Rp?

Soluţie: a) i)Pentru un amplificator operaţional ideal, variaţia tensiunii de ieşire este nelimitată,

0 ;U . În Fig.2a avem montajul unui amplificator proporţional inversor, având

coeficientul de amplificare K negativ:

1 1o i i i

x R xU U U K U

x R x

; ; ( ;0]

1

xK K

x

, pentru x 0;1 .

Aplicaţie numerică:

0.75

8 24 V1 1 0.75o i

x RU U

x R

, deci 24VoU .

ii) Pentru cazul unui amplificator operaţional ideal cu limitare, variaţia tensiunii de ieşire este limitată, 0 ;S SU V V ,. Punând condiţia de limitare a tensiunii de ieşire, rezultă:

, ( ; ]; 0;11

, ; ; 0;11 1

, [ ; ); 0;11

S i S

o i i S S

S i S

xV dacă U V x

x

x xU U dacă U V V x

x x

xV dacă U V x

x

Aplicaţie numerică: 0.75

8V 24V <-10V1 1 0.75Ox i S

xU U V

x

, deci 10VoU , limitat prin

saturarea ieşirii amplificatorului operaţional. b) Montajul din Fig.2b permite ajustarea coeficientului de proporţionalitate negativ, fără a modifica condiţia de eliminare a efectului temperaturii asupra tensiunii de ieşire,

1 || const.p nR R R , dacă 1 || nR R R .

În cazul montajului din Fig.2a, condiţia pentru Rp : 1

1|| 1 R const.

1p n

xR x RR R R x x

xR x R

, pentru x 0;1 .

Page 10: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.3.3. Se consideră schemele electronice din Fig. a şi b realizate cu amplificatoare operaţionale ideale şi elemente neliniare EN cu caracteristica din Fig. c, în configuraţii de tipul celor din Fig. d. i) Să calculeze şi să se reprezinte grafic caracteristica de transfer U1(Ue) a schemei din Fig.a atunci când EN se realizează sub forma EN4. ii) Să calculeze şi să se reprezinte grafic caracteristica de transfer U1(Ue) a schemei din Fig.b atunci când EN se realizează sub forma EN6.

Fig.a. Fig.b.

En1 En2 En3 En4 En5 En6

Fig.c. Fig.d. Soluţie: EN de tip dipol (EN1÷EN6) pot fi utilizate în orice schemă, neavând terminal conectat la borna de masă (0 V) a sursei de alimentare. Soluţie: Amplificatorul operaţional ideal este în montaj inversor, deci ecuaţia tensiunii de ieşire în funcţie de intrare este:

k

0 k1

100

100n

i i i i

RU KU U U U

R

; V V0 10 ; 10iU U

EN6 are limitele de intrare în conducţie egale, DZ1 şi DZ2 fiind identice: Pragul de intrare în conducţie la polarizare negativă UL2 = UZ2 + UDO1 = 5.2[V] + 0,65[V] = 5,85[V] pentru U12 -UL2 <0; Pragul de intrare în conducţie la polarizare pozitivă UL1 = UZ1 + UDO2 = 5.2[V] + 0,65[V] = 5,85[V] pentru 0 < UL1 U12

Polarizarea EN6 se face de către tensiunea de ieşire U0 a AO, deci avem V V0 [ 10 ; 10 ]U .

Prin corelarea polarităţii tensiunii de ieşire a AO şi pragurile de intrare în conducţie, rezultă

V2 2

2 1

V1 1

; pentru [ 10 ; ); (EN în conducţie)

; pentru ; ; (EN blocat)

; pentru ( ; 10 ]. (EN în conducţie)

L i L

e i i L L

L i L

U U U

U U U U U

U U U

Page 11: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.4. FUNDAMENTELE CALCULATOARELOR 5.4.1. Să se reprezinte funcţia f din schema următoare cu un număr minim de porţi logice SI-NU (2 sau 4 intrări):

Page 12: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.4.2. Să se reprezinte funcţia f din figura următoare folosind un circuit multiplexor cu 2 intrări de adresă, 4 de date şi porţi logice:

Vom pune la intrările de adresă ale multiplexorului variabilele a şi b. Variabilele c şi d sunt puse la intrătile de date în funcţie de valorile funcţiei. In fapt, fiecare intrare de date devine o funcţie de cele 2 variabile c şi d. obtinem expresiile: D00= d , D01= c + d , D02= D03= c O schemă posibilă este reprezentată în figura următoare (se accept şi reprezentare simplificată pentru circuitul multiplexor cu punctarea doar a intrărilor şi ieşirilor folosite):

Page 13: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.4.3. Proiectaţi un numărător sincron modulo 5 folosind bistabile JK. Soluţie: Vom avea nevoie de 3 bistabile JK. Tabelul de funcţionare este următorul: Tabelul1

In tabelul 1 am pus şi intrările J şi K ale celor 3 bistabile. Pentru aceasta am folosit tabelul de funcţionare al bistabilului JK (tabelul 2, nu trebuie specificat în rezolvare). Din tabel obţinem următoarele ecuaţii (prin intermediul diagramelor de minimizare):

Tabelul 2 J0 = Q2 ; K0 = 1; J1 = Q0 ; K1 = Q0 ; J2 = Q1 . Q0 ; K2 = 1;

Schema pentru numărător este dată în figura de mai jos:

Page 14: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.5. TEORIA SISTEMELOR I 5.5.1. Să se stabilească dependenţa intrare - ieşire în domeniul imaginilor pentru sistemul din figură cu orientarea w, v1, v2 y.

a u HR()

w

-

v1 v2 y

HP1( HP2(

HM()

y

Soluţie: Rezolvarea problemei se bazează pe următorul rezultat: În ipoteza că ne găsim în cazul SISO, funcţia de transfer a sistemului din figură se calculează cu formula

)(H)(H

)(H)(H

)(

21

1

1.

Fie Hw(), Hv1() şi Hv2() funcţiile de transfer prin care se exprimă în mod separat influenţa mărimilor de intrare asupra mărimii de ieşire. Ele se obţin folosind formula anterioară astfel:

)(H)(H)(H)(H

)(H)(H)(H

)(w)(y

)(HMPPR

PPR

)(v )(v

w

21

21

21 1

00

(1)

)(H)(H)(H)(H

)(H

)(H)(H))((H)(H

)(H

)(v)(y

)(HPRMP

P

PRMP

P

)(v)(w

v

12

2

12

2

2

1 111001

(2)

)(H)(H)(H)(H)(H)(H)(H))((H)(v)(y

)(HMPPRRPPM

)(v)(w

v

21211

2 1

1

11

1

002

(3)

Sistemul fiind liniar este valabil principiul superpoziţiei, astfel că dependenţa intrare-ieşire are forma:

1 2w v 1 v 2y( ) H ( )w( ) H ( )v ( ) H ( )v ( ) . (4).

Egalitatea (4) reprezintă rezultatul problemei. Rezolvarea de mai sus se bazează pe metoda algebrei schemelor bloc. Rezultatul poate fi obţinut cu acelaşi volum de muncă folosind formula lui Mason şi cu un volum de muncă şi mai redus, folosind „calculul din aproape în aproape”. 5.5.2. În cazul discretizării prin aproximare a sistemelor liniare se folosesc formulele

(MT)

(MDA)

(MDR)

1z1z

h

1zzh1z

h

s1

21

(1) (MDR – metoda Euler sau metoda dreptunghiului retardată, MDA –

metoda dreptunghiului sau metoda dreptunghiului avansată, MT – metoda Tustin sau metoda trapezului). Explicaţi cum se folosesc aceste formule şi determinaţi modelul matematic în timp discret ( cu orientarea ua ) asociat prin metoda dreptunghiului avansată sistemului în timp continuu )t(a3)t(u2)t(u5 cu orientarea a u. Pasul de discretizare a timpului este h. Sistemul dat poate îndeplini funcţia de filtru de ordinul I sau de regulator proporţional cu filtrare. Soluţie: Relaţiile se folosesc pentru a asocia unui sistem în timp continuu cu funcţia de transfer H(s) un sistem în timp discret cu funcţia de transfer H(z). Calculul se reduce la efectuarea substituţiei

)(dinadecvataresiaexps

)s(H)z(H1

1

(2). Metoda de calcul poartă numele

de metoda substituţiei.

u1 y1=y

H1

H2 y2 u2=y

u

(+)

Page 15: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Sistemului dat îi corespunde funcţia de transfer

s1

25

s1

3

2s53

)s(H

, iar în conformitate cu

formula de substituţie (2) aplicată pentru a doua egalitate din (1) rezultă

1

1zhz

s1

z5h25

h35z)h25(

hz3

1zhz

25

1zhz

3)s(H)z(H

.

Întrucât )z(u

)z(a)z(H , avem

1525

3

zh

h)z(u)z(a , respectiv )z(uh)z(az)z(a)h( 3525 1 . În

consecinţă modelul în timp discret este ]t[uh

h]t[a

h]t[a

25

31

25

5 . (3).

Egalitatea (3) reprezintă rezultatul problemei.

Page 16: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.6. PROGRAMAREA ORIENTATĂ PE OBIECTE 5.6.1. Într-o aplicaţie de conducere de proces se utilizează senzori de tip analogic şi optic. Toţi senzorii trebuie resetaţi şi calibraţi, respectiv periodic citiţi. Citirea presupune şi filtrare folosind valoarea anterioară citită, dar metodele de filtrare sunt diferite pentru senzori de tip diferit. Toate valorile citite sunt întregi. Fiecare operaţie de citire este specifică senzorului respectiv, resetarea este comună tuturor tipurilor de senzori iar calibrarea este diferită pentru senzorii analogici şi optici. Senzorii permit şi o operaţie identică de interogare a stării. Senzorii optici mai necesită o operaţie specifică de aducere la zero, alta decât reset, iar senzorii analogici necesită o operaţie specifică de selectare a canalului. Proiectaţi o ierarhie de clase (se cer doar declaraţiile, nu şi implementările) care să modeleze fragmentul corespunzător de realitate, în cadrul aplicaţiei software de conducere de proces. Sugeraţi care vor fi metodele publice şi unde vor fi folosite acele funcţii care nu sunt publice. Comentaţi fiecare variabilă şi fiecare funcţie membră. Soluţie: class senzor int status; // starea protected: int val_citita; // valoarea citita (va fi setata de citire) int val_anterioara; // valoarea anterioara va fi transferata din val_citita // in timpul apelului metodei de citire int val_filtrata; // valoarea prelucrata prin filtrare (va fi returnata de get) virtual int filtru()=0; public: virtual void calibrare()=0; // calibrarea este o functie virtuala pura virtual void citire()=0; // citirea este si ea o functie virtuala pura void reset(); // operatia de reset int status(); // returneaza starea int get(); // returneaza valoarea filtrata ; class senzor_analog public: senzor // clasa specializata pentru senzori analogici int filtru(); // functia de filtrare nu va fi accesata de afara public: void calibrare(); // calibrarea specifica senzorului analogic void citire(); // aici se va apela si filtrul specific void select_canal(int ); // extensie pentru selectia canalului analogic ; class senzor_optic public: senzor int filtru(); public: void calibrare(); // calibrarea specifica senzorului optic void citire(); // aici se va apela si filtrul specific void zero(); // extensie pentru operatia specifica de aducere la zero ; 5.6.2. Valorile citite într-un sistem de monitorizare trebuie stocate într-o stivă. Creaţi pentru aceasta un tipar stivă cu alocare dinamică şi apoi generaţi o stivă de întregi pentru stocarea acelor valori. Soluţie:

template <class T> class Cstack // tipar de stiva T *m_p; // stiva propriu-zisa va fi aici

Page 17: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

int m_nStored; // indicator varf stiva int m_nDepth; // dimensiunea temporara a stivei enum GROW_BY=5; // pasul de crestere a stivei public: CStack( ); // constructor virtual ~CStack(); // destructor int IsEmpty() const; // test stiva goala void Push(const T &item); // introducere in stiva T Pop(); // extragere din stiva ; // Constructori template <class T > CStack<T>::CStack() m_p=0; m_nStored=0; m_nDepth=0; template <class T > CStack<T>::~ CStack() delete []m_p; // Operatii template <class T > int CStack<T>::IsEmpty() const return m_nStored==0; template <class T > void CStack<T>::Push(const T &item) if(m_nStored==m_nDepth) // stiva alocata s-a umplut T *p=new T[m_nDepth+GROW_BY]; // trebuie o stiva mai mai mare for (int i = 0; i<m_nDepth; i++) // stiva se replica in cea noua p[i]=m_p[i]; m_nDepth+=GROW_BY; // dimensiunea temporara creste delete [ ]m_p; // stiva anterioara este eliberata m_p=p; m_p[m_nStored]=item; // introducerea in stiva m_nStored ++; // si avansul indicatorului de varf stiva template <class T > T CStack<T>::Pop( ) m_nStored--; // indicatorul de varf al stivei merge inapoi return m_p[m_nStored]; // scoaterea din stiva … CStack <int> stiva_val_cit; // utilizare (stiva de intregi pentru valorile citite)

Page 18: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.7. PROIECTAREA CIRCUITELOR DIGITALE DEDICATE 5.7.1. Să se implementeze în VHDL, cu componente, entitatea Ansablu descrisă de schema hardware din figură care cuprinde două componente: C1 inclusă în biblioteca IEEE şi NR cu funcţia de numărător înainte de 2 biţi, sincron pe front crescător al Clock-ului, cu Reset asincron prioritar, care va fi implementat cu procese.

C1 NR

A

B

C

F D

count

2

O1

Rst

Clk

I3 I4 I5

I1

I2

Ansamblu

Soluţie library IEEE, COMPASS_LIB; use IEEE.STD_LOGIC_1164.all; use COMPASS_LIB.COMPASS.all; entity ANSAMBLU is port (I1, I2, I3, I4, I5: in STD_LOGIC; O1: out STD_LOGIC_Vector(1 downto 0) ); end ANSAMBLU; architecture A1 of ANSAMBLU is component C1 port (A, B, C: in STD_LOGIC; F: out STD_LOGIC); end component; component NR port (D, Clk, Rst: in STD_LOGIC; Count: out STD_LOGIC_Vector(1 downto 0)); end component; signal S: STD_LOGIC; begin Et1: C1 port map(I1, I2, I3, S); Et2: NR port map(S, I4, I5, O1); end A1; ------------------------------ entity NR is port (D, Clk, Rst: in STD_LOGIC; Count: out STD_LOGIC_Vector(1 downto 0)); end NR; architecture V1 of NR is Count := ”00”; begin process (Clk, Rst)

Page 19: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

begin if Rst = '0' then Count <= "00"; elsif RISING_EDGE(Clk) then Count <= Count + '1'; end if; end process; end V1; 5.7.2. a) Să se implementeze în VHDL automatul cu stări finite (ASF) descris prin diagrama de stări din figură folosind templet-ul Registru plus Logica pentru Noua stare şi Ieşiri (cu 2 procese). Automatul are intrările D, Rst, Clk şi iesirea Y, este sincron pe frontul coborâtor al clock-ului, şi are Reset prioritar asincron activ pe zero. (D este ieşirea unui convertor paralel serie). b) Precizaţi care este funcţiunea automatului. c) Precizaţi numărul de bistabile implementate de Sinteza automată.

Soluţie a) library IEEE; use IEEE.STD_LOGIC_1164.all; entity ASF is port (D, Clk, Rst: in bit; Y: out bit); end ASF; architecture A1 of ASF is type STATE is (S0, S1, S2, S3); signal PR_state, NX_state: STATE; begin Registru: process (Rst, Clk) begin if (Rst='0') then PR_state <= S0; elsif (Clk'event and Clk='0') then PR_state <= NX_state; end if; end process; ------------------------------ Logica NX_state si OUT: process (D, PR_state) begin case PR_state is

Page 20: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

when S0 => Y <= '0'; if (D='1') then NX_state <= S1; else NX_state <= S0; end if; when S1 => Y <= '0'; if (D='1') then NX_state <= S2; else NX_state <= S0; end if; when S2 => Y <= '0'; if (D='1') then NX_state <= S3; else NX_state <= S0; end if; when S3 => Y <= '1'; if (D='0') then NX_state <= S0; else NX_state <= S3; end if; end case; end process; end A1; b) Funcţia realizată de ASF: Detecţie şi semnalizare a faptului că pe perioada a 3 tacte consecutive D a fost 1. c) Număr minim de bistabile date de Sinteza automată = 4.

Page 21: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.8. TEORIA SISTEMELOR II 5.8.1. Se consideră sistemului de reglare cu schema bloc din figură. Să se determine condiţia ca sistemul să fie asimptotic stabil. 0RK este amplificarea regulatorului iar 0IT timpul integrator.

Soluţie: Rezolvarea problemei se bazează pe aplicarea criteriului Hurwitz. Se parcurg următorii paşi: i) Determinarea polinomului caracteristic al sistemului pe baza funcţiei de transfer; ii) Determinarea condiţiilor de stabilitate asimptotică pe baza aplicării criteriului lui Hurwitz.. i) Sistemul are ordinul n=3. Pentru orientarea yw funcţia de transfer a sistemului este

RRIII

RIR

IR

IR

KsKTsTsT

KsTK

sssTK

sssTK

s10)101(25

)(10...

125

10)

11(1

125

10)

11(

)(23

2

2

. Pentru

analiza stabilităţii considerăm polinomul caracteristic adus în formă monică:

I

RR

RRIII

T

KsKsss

KsKTsTsTs

2)101(2.04.0)(

10)101(25)(

23

23

ii) Deoarece prin ipoteză 0RK , 0IT rezultă că toţi coeficienţii )s( sunt strict pozitivi. Deci prima condiţie a criteriului Hurwitz este îndeplinită. Determinantul Hurwitz este

I

R

R

I

R

TK

.

)K(.TK

.

2400

0101201

0240

3 . În consecinţă,

040401 .. , )K(.

TK

.

R

I

R

101201

240

2

I

RR T

K)K(.

2101080 > 0 (1)

232

I

R

TK

.

Ca urmare condiţia de stabilitate asimptotică a sistemului este 2 >0. Dezvoltând rezultă:

)K(.K

TTK

)K(.TK

)K(.R

RI

I

RR

I

RR 101080

21010800

2101080

= >

R

RI K101

K25T

.

Relaţia încadrată reprezintă rezultatul cerut.

)1

1(sT

KI

R 125

102 ss

-

w a c y

RG-PI Procesul condus

Page 22: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.8.2. Enunţaţi criteriul de stabilitate Jury, dând explicaţiile necesare construirii schemei Jury, şi utilizaţi enunţul pentru a analiza stabilitatea sistemului în timp discret cu orientarea

uy:

]t[x021]t[y

]t[u

0

1

0

]t[x

5.020

5.011

201

]1t[x .

Soluţie: Se consideră un sistem liniar în timp discret, invariant în timp, cu polinomul caracteristic nn

nn azazazaz

11

10 ...)( (1). Cu coeficienţii din (1) se construieşte

o schema de calcul numită schema Jury. Ea este alcătuită din n-1 perechi de linii. In cadrul fiecărei perechi, a doua linie din pereche o reproduce pe prima prin parcurgere în sens invers.

Elementul general al schemei îl notam cu klj ( k – indicele liniei, l- indicele coloanei ). În

stânga barei din schemă apare coeficientul Jury. Ei sunt notaţi cu ib2 , i reprezentând numărul

de ordine al perechii de linii.

Coeficienţii Jury ib2 se calculează cu formula 1,2

1,122

li

lii j

jb . Aplicarea formulei este sugerată

în schema următoare în care cele 2 linii alcătuiesc perechea ‘i’: -

1,12 ij ……………………

ib2 1,2ij …………………….

Prima linie a primei perechi se alcătuieşte din coeficienţii polinomului caracteristic în ordinea

021 ,...,, aaaa nnn (de la gradul 0 la gradul n).

Începând cu a doua pereche de linii, prima linie a perechii se completează pe baza perechii anterioare folosind formula: 1,221,12,12 liilili jbjj . Fiecare nouă pereche de linii are o

coloană mai puţin decât perechea precedentă. Criteriul stabilităţii Jury are următorul enunţ: Sistemul liniar in timp discret cu polinomul caracteristic (1) este asimptotic stabil dacă sunt îndeplinite următoarele condiţii: i) 0)1(

ii) 0)1()1( n

iii) 12 ib pentru 1n;1i (toţi coeficienţii Jury trebuie să fie subunitari în modul).

Pentru aplicaţia dată la început calculăm polinomul caracteristic, apoi analizăm succesiv dacă cele trei condiţii din enunţul criteriului Jury sunt îndeplinite:

5.4zz5.1z5z)5.0z)(1z2z(

)1z(4)5.0z()1z(

5.0z20

5.01z1

201z

)z(

232

2

i) 05.415.11)1(

ii) 0)5.415.11()1()1( 3 => sistemul este instabil. Nu mai este necesar să construim schema Jury. Rezultatul rezolvării problemei este: sistemul dat este instabil. 5.8.3. Sistemele descrise prin ecuaţiile Fam şi MJ modelează matematic mecanisme de translaţie, respectiv de rotaţie, fără frecare. Semnificaţia notaţiilor este următoarea: m – masa mecanismului de translaţie, F – forţa rezultantă care acţionează asupra mecanismului, a - acceleraţia imprimată de forţa F, J – momentul de inerţie al mecanismului de rotaţie, M –

Linia 1 a perechii ‘i’ Linia 2 a perechii ‘i’

Page 23: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

momentul exterior care se exercită asupra mecanismului, - acceleraţia unghiulară imprimată de momentul M. Fie p poziţia momentană a mecanismului de translaţie şi poziţia mecanismului de rotaţie. În ipoteza că sistemele au orientările F p, respectiv M , se cere: i) Să se calculeze funcţiile de transfer ale celor două sisteme; ii) Ecuaţiile de stare ale celor două sisteme. Soluţie: i) Fie v viteza mecanismului de translaţie. Atunci avem:

pv , va , iar modelul dat devine Fpm Pentru a calcula funcţia de transfer trecem egalitatea în domeniul operaţional:

)s(F)s(psmFpm 2

Întrucât, prin definiţie )s(F

)s(p)s(H , rezultă că sistemul are funcţia de transfer

2

1

sm)s(H

.

Fie viteza unghiulară a mecanismului de rotaţie. Atunci avem: , , iar modelul dat devine J

Pentru a calcula funcţia de transfer trecem egalitatea în domeniul operaţional:

)s(M)s(sJJ 2

Întrucât, prin definiţie )s(M

)s()s(H

, rezultă că sistemul are funcţia de transfer

2

1

sJ)s(H

.

Relaţiile încadrate reprezintă funcţiile de transfer ale celor două sisteme. ii) Ca variabile de stare ale sistemului de translaţie se adoptă poziţia p şi viteza v. Ele caracterizează procese de acumulare de energie potenţială şi de energie cinetică. Ca urmare, o primă ecuaţie de stare este vp . A doua ecuaţie de stare se obţine din Fam şi va .

Rezultă Fm

v1

. Matriceal, avem:

Fmv

p

v

p

10

00

10

.

Ca variabile de stare ale sistemului de rotaţie se adoptă poziţia unghiulară şi viteza unghiulară . Ele caracterizează procese de acumulare de energie potenţială şi de energie cinetică. Ca urmare, o primă ecuaţie de stare este . A doua ecuaţie de stare se obţine din

MJ şi . Rezultă MJ

1 . Matriceal, avem:

MJ

10

00

10

.

Relaţiile încadrate reprezintă ecuaţiile de stare ale celor două sisteme.

Page 24: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.9. BAZE DE DATE 5.9.1. Se consideră două tabele (ale unei baze de date Oracle), cu numele PERSONAL (având coloanele CNP, NUME si SALAR), respectiv CONTABILITATE (având coloanele DATA_ACTUALIZARE, SALAR_MEDIU). Să se scrie comenzile SQL pentru crearea celor două tabele, permiţând stocarea de date referitoare la categoriile de informaţii precizate prin numele coloanelor (CNP, NUME, SALAR, DATA_ACTUALIZARE, SALAR_MEDIU). Se vor prevedea şi constrângerile necesare pentru asigurarea integrităţii / coerenţei logice a datelor / informaţiilor anterior referite, considerate obligatorii (tip, dimensiuni, plaja valori, constrângeri). Se cere să se scrie secvenţa de cod PL/SQL implementând un trigger (declanşator) care, la orice operaţie de modificare/actualizare a conţinutului/datelor tabelei PERSONAL, calculează valoarea medie de pe coloana SALAR (din PERSONAL), salvând-o în tabela CONTABILITATE (in coloana SALAR_MEDIU), împreună cu data curentă calendaristică aferenta operaţiei (în coloana DATA_ACTUALIZARE). Soluție: CREATE TABLE PERSONAL ( CNP char(13) primary key, NUME varchar(20) NOT NULL, SALAR int CHECK (SALAR>0)); CREATE TABLE CONTABILITATE ( DATA_ACTUALIZARE date default SYSDATE, SALAR_MEDIU number); CREATE or REPLACE trigger declansator AFTER insert or update or delete on PERSONAL DECLARE sal number; BEGIN SELECT AVG(salar) into sal from PERSONAL; INSERT into CONTABILITATE (Salar_mediu) values(sal); END; / Soluție 2 –obligatorie dacă în tabela CONTABILITATE nu este prevăzută constrângerea de dată curentă DEFAULT SYSDATE: CREATE or REPLACE trigger declansator AFTER insert or update or delete on PERSONAL DECLARE sal number; BEGIN SELECT AVG(salar) into sal from PERSONAL; INSERT into CONTABILITATE values(sysdate, sal); END; / 5.9.2. Scrieţi o comandă SQL pentru crearea unei tabele PERSONAL permiţând stocarea de date referitoare la următoarele categorii de informaţii: NR_MATRICOL, NUME, PRENUME, DATA_NAŞTERII, SALAR_BAZA. Se vor prevedea şi constrângerile necesare pentru asigurarea integrităţii / coerenţei logice a datelor / informaţiilor anterior referite, considerate obligatorii (tip, dimensiuni, plaja valori, constrângeri). Scrieţi comenzile SQL pentru adăugarea a două noi linii (cu orice date valorice). Scrieţi comenzile SQL pentru ştergerea conţinutului tabelei, respectiv ştergerea tabelei.

Page 25: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Soluție: CREATE TABLE PERSONAL (NR_MATRICOL char(6) primary key, NUME varchar(20) NOT NULL, PRENUME varchar(20) NOT NULL, DATA_NAST date NOT NULL, SALAR_BAZA INT CHECK (SALAR_BAZA >0 AND SALAR_BAZA<10000)); INSERT INTO PERSONAL VALUES(‘LM1245’, ‘Ion’, ‘Ion’, ’12.12.1990’, 1000); INSERT INTO PERSONAL VALUES(‘LM2568’, ‘Ioni’, ‘Ioni’, ’14.07.1990’, 2000); DELETE FROM PERSONAL; DROP TABLE PERSONAL; Varianta alternativa posibilă pentru definiţia coloanei SALAR_BAZA: - SALAR_BAZA INT CHECK (SALAR_BAZA BEWEEN 1 AND 10000) - SALAR_BAZA NUMERIC(5) CHECK (SALAR_BAZA >0)

Page 26: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.10. MEDII ŞI TEHNOLOGII DE PROGRAMARE 5.10.1. Scrieţi o funcţie Visual Basic .NET care să primească un parametru întreg şi să returneze, prin prelucrarea numărului primit ca parametru, un număr având cifrele în ordine inversă. Se presupune că numărul transmis ca parametru conţine fix 3 cifre. Exemplu: Invers(198)= 891. Soluţie: Private Function Invers(ByVal n As Integer) Dim rez As Integer Dim sute, zeci, unitati As Integer sute = n \ 100 n = n - sute * 100 zeci = n \ 10 n = n - zeci * 10 unitati = n rez = unitati * 100 + zeci * 10 + sute Return rez End Function 5.10.2. Secvenţa de cod de mai jos are ca efect trasarea într-un control PictureBox1 a unei linii între coordonatele (x1,y1) şi (x2,y2). Modificati secventa pentru a se desena, în interiorul aceluiaşi control, un trapez isoscel având baza mare latura inferioară a dreptunghiului format de cele două perechi de coordonate, iar baza mică o treime din latura superioară a aceluiaşi dreptunghi. Se presupune că x1<x2 şi y1<y2. Dim myGraph As System.Drawing.Graphics myGraph = PictureBox1.CreateGraphics() myGraph.DrawLine(Pens.Black, x1, y1, x2, y2) Soluţie: Dim myGraph As System.Drawing.Graphics myGraph = PictureBox1.CreateGraphics() myGraph.DrawLine(Pens.Black, x1, y2, x2, y2) myGraph.DrawLine(Pens.Black, x2, y2, (CInt(x2-(x2- x1)/3)), y1) myGraph.DrawLine(Pens.Black, (CInt(x2-(x2-x1)/3)), y1, (CInt(x1+(x2-x1)/3)), y1) myGraph.DrawLine(Pens.Black, (CInt(x1+(x2-x1)/3)), y1, x1, y2) 5.10.3. Ce va afişa la ieşire secvenţa de cod de mai jos? Dim i, j As Integer For i = 1 To 5 For j = 5 To 1 Step -1 If (j - i) < 0 Then Continue For Console.Write(j + i) Next Next Soluţie: 6543276548769810

Page 27: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.11. COMUNICAŢII DE DATE 5.11.1. Prezentaţi şi explicaţi funcţionarea transceiverului pe magistrala CAN folosind schema din figură.

Soluţie: Magistrala CAN constă din două linii, notate CANH (Can High line) şi CANL (CAN Low line), la care se adaugă masa. Transmisia pe aceasta magistrala este de tip diferenţial. În figură este reprezentat un transceiver de CAN. Dacă la intrarea driverului semnalul TxD are valoarea 1 logic (starea 1), ambele tranzistoare vor fi blocate şi cele două linii se vor afla la potenţialul 0,5·Vcc. Dacă se comandă valoarea 0 logic (starea 0), ambele tranzistoare vor fi deschise şi între cele două linii apare o diferenţă de potenţial, ce va fi detectată de receiver. Starea 0 este numită „dominantă” (cîştigă), iar starea 1 este denumită “recesivă” (pierde). Aceast fapt este folosit pentru arbitrarea magistralei. Transceiverele de mare viteză (1Mbps) sînt diferite de cele de mică viteză (125Kbps). Ultimele sînt tolerante la defecte. Căderea uneia dintre cele două linii, prin întreruperea ei sau prin scurtcircuitarea la masă sau la Vcc nu duce la căderea totală a comunicaţiei. Caracterul diferenţial al transmisiei şi filtrele încorporate în receivere duc la un grad scăzul de interferenţă electromagnetică şi o bună imunitate la zgomotul de mod comun (cel care se manifestă identic pe ambele linii, raportat la masă.) 5.11.2. Prezentaţi comparativ metodele de codare a informaţiei de tip NRZ si AMI pentru transmiterea datelor. Codaţi prin cele două metode secvenţa 101100. Soluţie: Metoda NRZ (Non Return to Zero). Aceasta este codarea "naturală", adică bitul 0 se codează printr-un palier scăzut de tensiune, iar bitul 1 printr-un palier ridicat. Numim celulă de bit durata alocată transmiterii unui bit de informaţie. În sistemul NRZ nivelul de tensiune este eşantionat la mijlocul celulei de bit, pentru a determina valoarea numerică binară a semnalului. Dezavantajul metodei este că sincronizarea de bit este o problemă dificil de rezolvat.

Page 28: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Metoda AMI (Alternate Mark Inversion). Metoda foloseşte trei nivele de tensiune: pozitiv, zero şi negativ. Bitul 0 este codificat prin absenţa unui impuls în celula de bit, iar bitul 1 prin prezenţa impulsului. Codarea prin impuls, faţă de palier, este mai fiabilă în raport cu perturbaţiile, dar dublează banda de frecvenţă necesară. Avantajul alternării este că nivelul mediu de tensiune pe canal este constant, ceea ce simplifică situaţia din punctul de vedere al perturbaţiilor legate de deriva de nul pe firul de masă.

5.11.3. Prezentaţi echipamentele componente ale unei celule de telefonie mobilă, funcţionarea acesteia şi modalităţile de comunicare între celulă şi centrală. Soluţie Celula are următoarele componente BTS (Base Transceiver Station – Staţia de bază de emisie/recepţie) constă din antena şi echipamentul radio de emisie/recepţie care defineşte, în funcţie de puterea sa, aria de cuprindere a celulei. Acest echipament conectează terminalul mobil la centrala de telefonie celulara; BSC (Base Station Controler – Controlerul staţiei de bază). Conţine partea digitală a echipamentului celulei. Această componentă translatează semnalul de voce de 13 Kbit/sec în standardul PCM de 64Kbit/sec şi administrează resursele radio ale BTS. În funcţie de tipul celulei, rurală sau metropolitană, şi de alte condiţii, BTS se poate afla în aceeaşi construcţie cu BSC sau la distanţă de acesta. În concentrările urbane, cu trafic foarte intens, celulele au dimensiuni foarte mici (sute de metri) şi se pot lega mai multe transceivere la un controler. Antena serveşte doar pentru legătura între terminale şi BTS. Legătura între BTS şi centrala de comutare se face prin canalele specifice telefoniei: circuite analogice pe 2 fire. Situaţia este specifică celulelor foarte mici, care nici măcar nu se leagă la o centrală, ci direct la o linie telefonică comutată din PSTN (Public Switched Telephone Network); circuite digitale pe cablu de cupru. Este cel mai răspîndit mod de comunicare între celule şi centrale şi se realizează pe lungimi ce pot varia între interiorul unei clădiri şi distanţe de ordinul kilometrilor; fibra optică, permite legături la distanţe mari, pînă la 40 Km fără a folosi repetoare; microunde.

Codarea NRZ

0 011 0 1

1 0 1 1 0 0

Codarea AMI

Page 29: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.12. SISTEME INCORPORATE 5.12.1. Să se scrie un program în limbaj de asamblare pentru un microcontroler 8051, care să accepte cereri de întreruperi externe pe liniile /INT0 si /INT1. Întreruperile sunt active pe front căzător. În rutina de tratare a întreruperii /INT0 se va seta bitul 0 al portului P1 (P1.0), iar în rutina de tratare a întreruperii pentru /INT1 se va reseta bitul P1.0. Programul principal va rula în buclă infinita, după ce s-a realizat programarea sistemului de întreruperi. Soluţie Programul corespunzător este: ORG 0h LJMP PP ;salt la PP ORG 03h ;adresa de start a rutinei de tratare a intreruperii INT0 RUT_0: SETB P1.0 ;setare bit P1.0 RETI ;revenire din rutina de tratare a intreruperii INT0 ORG 13h ;adresa de start a rutinei de tratare a intreruperii INT1 RUT_1: CLR P1.0 ;resetare bit P1.0 RETI ;revenire din rutina de tratare a intreruperii INT1 ORG 100h ;adresa de start a programului principal PP: CLR IE.7 ;invalidare globala a sistemului de intreruperi SETB IE.0 ;validare intrerupere INT0 SETB TCON.0 ;activare front cazator pentru INT0 SETB IE.2 ;validare intrerupere INT1 SETB TCON.2 ;activare front cazator pentru INT1 SETB IE.7 ;validarea globala a sistemului de intreruperi SJMP $ ;bucla infinita 5.12.2. Să se scrie un program în limbaj de asamblare pentru un microcontroler 8051, care să asigure comunicaţia seriala în ecou (data recepţionată este transmisa înapoi) cu un partener de „dialog”, prin intermediul sistemului UART integrat, la viteza de 9600 bauds/sec, ştiind ca frecventa oscilatorului este de 12 MHz. Programul trebuie conceput astfel încât, microcontrolerul să gestioneze recepţia prin intermediul întreruperii specifice sistemului de comunicaţie serială. Fiecare octet recepţionat la un moment dat, va fi depus în memoria de date externă (MDX), la adresa 1000h. Soluţie Formula de calcul a constantei de timp necesare programarii timerului T1 (generatorul de baud-rate) este:

ratebaudTH

fOSC

SMOD

_384256)1(

2

Pentru o viteza de transfer de 12 MHz constanta de timp este:

25332563686400

12000000256

9600384

10122256)1(

60

TH

exprimat in hexazecimal: (TH1) = FDh Structura cuvantului de comanda TMOD pentru programarea timerului T1 in modul 2 este: D7 D6 D5 D4 D3 D2 D1 D0 0 0 1 0 0 0 0 0 Exprimat in hexazecimal: (TMOD) = 20h Programul corespunzator este:

Page 30: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

ORG 0h LJMP PP ;salt la PP ORG 23h ;adresa de start a rutinei de tratare a intreruperii ES RUT_SER: CLR IE.4 ;invalideaza intreruperile ES MOV A,SBUF ;transfera in acumulator octetul receptionat MOVX @DPTR,A ;transfera in MDX la adresa 1000h caracterul

receptionat CLR SCON.0 ;resetare fanion RI MOV SBUF,A ;trensmite inapoi octetul receptionat JNB SCON.1 ;asteapta incheierea transferului prin testarea

fanionului TI CLR SCON.1 ;resetare fanion TI SETB IE.4 ;valideaza cererile de intrerupere provenite de la

ES RETI ;revenire din rutina de tratare a intreruperii ES ORG

100h ;adresa de start a programului principal

PP: CLR IE.7 ;invalidare globala a sistemului de intreruperi MOV TMOD,#20h ;transfera cuvantul de comanda pentru timerul 1 MOV TL1,#0FDh ;transfera constanta de timp in TL1 MOV TH1,#0FDh ;transfera constanta de timp in TH1 SETB SCON.6 ;pozitioneaza pe 1 bitul 6 din registrul SCON

(Modul 1) CLR SCON.7 ;pozitioneaza pe 0 bitul 7 din registrul SCON

(Modul 1) SETB SCON.4 ;validare receptie SETB TCON.4 ;pornire soft timer T1 SETB IE.4 ;validare intreruperi de la sistemul de comunicatie

seriala MOV DPTR,#1000h ;incarcare in DPTR a adresei din MDX unde se

depune octetul ;receptionat SETB IE.7 ;validarea globala a sistemului de intreruperi SJMP $ ;bucla infinita 5.12.3. Pentru un sistem cu microcontroler 8051, care dispune de: Memorie program externă de 16 Koct, implementată cu circuite de capacitate de 4Kx8; Memorie de date externă de 32 Koct, implementată cu circuite de capacitate de 8Kx8, se cere: i) Să se prezinte harta corespunzătoare memoriei program şi harta corespunzătoare memoriei de date externă, în cadrul sistemului considerat. ii) Să se deseneze schema de implementare a decodificatorul de adrese, pentru obtinerea semnalelor de chip_select (/CSx – semnale de chip select „0” active). Circuitul decodificator utilizat este 74LS138 (tabela de adevar si schema bloc a circuitului 74LS138 sunt prezentate in figura de mai jos).

Page 31: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Soluţie: i) Harta memoriei a) Memoria program Numărul de circuite necesare: N = 16/4 = 4 circuite Linii de adresa utilizate pentru selectia locatiilor de memorie din circuite: 12 (A0...A11) Linii de adresa utilizate la generarea semnalelor de chip select: 4 (A12...A15) Harta memoriei program este sintetizata in tabelul de mai jos: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h

– 0FFFh

/CS_E0 . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 1000h

– 1FFFh

/CS_E1 . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h

– 2FFFh

/CS_E2 . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 3000h

– 3FFFh

/CS_E3 . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1

b) Memoria de date externa Numarul de circuite necesare: N = 32/8 = 4 circuite Linii de adresa utilizate pentru selectia locatiilor de memorie din circuite: 13 (A0...A12) Linii de adresa utilizate la generarea semnalelor de chip select: 3 (A13...A15) Harta memoriei program este sintetizata in tabelul de mai jos: A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0000h

– 1FFFh

/CS_X0 . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 2000h

– 3FFFh

/CS_X1 . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4000h

– 5FFFh

/CS_X2 . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1 0 1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 6000h

– 7FFFh

/CS_X3 . . . . . . . . . . . . . 1 1 1 1 1 1 1 1 1 1 1 1 1

ii) Implementarea decodificatoarelor de adrese a) Pentru memoria program

Page 32: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

b) Pentru memoria de date externa

Page 33: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.13. SISTEME DE OPERARE 5.13.1. Realizaţi un program în C ce funcţionează pe baza următorului scenariu: Un proces P afişează repetitiv cifre de la 0 la 9. Afişarea va începe cu cifra 0 (cifra va fi afişată în buclă, de câte ori e posibil într-o secundă), iar la fiecare secundă va incrementa cifra afişată. Procesul de afişare se va încheia când se ajunge la 10 şi va afişa numărul total de cifre tipărite. Soluţie: #include<unistd.h> #include<signal.h> #include<sys/wait.h> #include<sys/types.h> void handler(int sig); int number, counter; int main(int argc, char** argv) number = 0; counter = 0; signal(SIGALRM, &handler); alarm(1); while(number < 10) printf("%d", number); counter++; printf("Total:%d", counter); return 0; void handler(int sig) number++; alarm(1); 5.13.2. Realizaţi un program C ce funcţionează pe baza următorului scenariu: se va crea un proces părinte P şi un proces fiu F. Procesul P va citi conţinutul unui fişier primit ca şi argument şi îl va trimite printr-un pipe procesului F. F va număra caracterele primite într-un contor pe care îl va afisa în terminal. Soluţie: #include<stdio.h> #include<string.h> #include<unistd.h> #include<fcntl.h> int main(int argc, char**argv) int ppf[2];//pipes int fd;//file descriptor char buffer[2]; pipe(ppf);

Page 34: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

if(fork()) //close unused pipe ends close(ppf[0]); //open file fd = open(argv[1], O_RDONLY); if(fd == -1) perror("File read error"); _exit(1); int n; while((n = read(fd,buffer, strlen(buffer)+1)) != 0) write(ppf[1], buffer, n); close(ppf[1]); int rc; wait(&rc); else //close pipe ends close(ppf[1]); int contor = 0,n; while((n = read(ppf[0],buffer, strlen(buffer)+1)) != 0) contor += n; printf("\nContor:%d\n",contor); return 0; 5.13.3. Realizaţi un program shell script ce va primi ca şi argument un nume de director D şi un cuvânt C. Programul va căuta cuvântul C parcurgând recursiv directorul D, iar pentru fiecare fişier întâlnit care conţine cuvântul C va afişa calea relativă a acestuia. Soluţie: #!/bin/sh word=$2 lst() for i in $1/* do if [ -d $i ] then lst $i elif [ -f $i ] then count=`grep $word $i | wc -l` if [ $count -gt 0 ]

Page 35: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

then echo $i fi fi done lst $1

Page 36: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.14. SECURITATEA INFORMATIEI 5.14.1. Precizaţi succesiunea operaţiilor pentru obţinerea cheilor publice utilizând o „autoritate pentru distribuţia cheilor publice” (v. figura de mai jos)

(1) Request || Time1

(2) EKRauth [ KUb || Request || Time1 ]

(3) EKUb [IDA || N1]

(7) EKUb [ N2 ]

(6) EKUa [N1 || N2]

(4) Request || Time2

(5) EKRauth [ KUa || Request || Time2 ]

A

Chei publiceAutoritate

B

Distribuţia cheilor folosind o autoritate pentru chei publice

Soluţie Fiecare participant cunoaşte cheia publică a autorităţii, care va fi folosită pentru autentificarea părţilor participante. Pentru a primi o cheie se urmează paşii descrişi în continuare: (1) A trimite un mesaj datat (mesajul include Time1) autorităţii conţinând o cerere (Request) pentru cheia publică curentă a lui B. [mesajul (1)] (2) Autoritatea răspunde cu un mesaj [mesajul (2)] criptat cu cheia sa privată, mesaj pe care A îl poate decripta fiind în posesia cheii publice a autorităţii. Astfel A poate fi sigur că mesajul primit este autentic, mesajul fiind criptat cu cheia privată a autorităţii KRauth. Mesajul include următoarele: (3) Cheia publică a lui B, KUb. (4) Cererea originală pentru ca A să determine dacă aceasta nu a fost modificată. (5) Datarea mesajului, astfel A poate determina dacă mesajul primit nu este un mesaj vechi de la autoritate, conţinând o cheie diferită de cheia curentă a lui B. (6) A salvează cheia publică a lui B şi îi transmite acestuia un mesaj care conţine un identificator IDA şi un anunţ N1, care este folosit pentru identificarea tranzacţiei. [mesajul (3)] (7) B recepţionează cheia publică a lui A de la autoritate în aceeaşi manieră cum A a recepţionat cheia lui B. [mesajele (4) si (5)] (8) B transmite un mesaj lui A criptat cu cheia publica a lui A si care contine un raspuns N2 la anuntul N1 [mesajul (6)] (9) In final A ii retransmite mesajul N2 inapoi lui B, criptat cu cheia publica a lui B. Astfel A si B au ajuns in posesia cheilor publice ale celuilalt si s-au anuntat unul pe altul despre acest lucru. [mesajul (7)] 5.14.2. Aplicaţi transformarea ShiftRows( ), potrivit figurii de mai jos, din algoritmul de criptare AES următorului tablou de stare:

AB90F1A7

1523A57B

1225E377

1B3F32A2

S

Page 37: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Transformarea ShiftRows( )

Soluţie: În această transformare, octeţii din liniile tabloului de stare sunt rotiţi spre stânga astfel: cu 0 octeţi pentru linia 1, cu 1 octet pentru linia 2, cu 2 octeţi pentru linia 3 şi respectiv cu 3 octeţi pentru linia 4, rezultand tabloul de stare S’.

90F1A7AB

A57B1523

771225E3

1B3F32A2

'S

5.14.3. Aplicaţi transformarea InvSubBytes( ) din algoritmul de decriptare AES, bazat pe substitutia S inversa din figură, următorului tablou de stare:

AB90F1A7

1523A57B

1225E377

1B3F32A2

S

Descrierea substituţiei octetului xy (in hexazecimal) utilizând cutia inversă S

Page 38: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

Soluţie: Pentru fiecare byte se obtine x (prima cifra hexa) si y (a doua cifra hexa) si se utilizeaza figura data pentru a obtine valoarea noua a octetului respectiv. De ex. Pentru S0,0=2A, x=2, y=A, rezultand S’0,0=95. Astfel rezulta:

E096CBBD

F2324620

392C1D02

56E71A95

'S

Page 39: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

5.15. REŢELE DE CALCULATORE 5.15.1. Se consideră adresa IP v4 172.16.0.150 având masca 255.255.255.192. Se cere: a) Adresa reţelei, respectiv adresa de broadcast a reţelei din care face parte adresa IP; b) Adresa subreţelei, respectiv adresa de broadcast a subreţelei din care face parte adresa IP; c) Numărul de hosturi din subreţeaua din care face parte adresa IP; d) Numărul de subreţele definite de masca adresei IP dată. Soluţie: a) Adresa IP defineşte o reţea de clasa B. Rezultă că masca reţelei este 255.255.0.0 . Făcând operaţiile pe biţi vom avea: 10101100.00010000.00000000.10010110 Adresa IP 11111111 .11111111 .00000000.00000000 Mască reţea -------------------------------------------------- 10101100.00010000.00000000.00000000 Adresa reţelei -------------------------------------------------- 10101100.00010000.11111111 .11111111 Adresa de broadcast a reţelei Adresa reţelei este 172.16.0.0 Adresa de broadcast a reţelei este 172.16.255.255 b) Făcând operaţiile pe biţi vom avea: 10101100.00010000.00000000.10010110 Adresa IP 11111111 .11111111 .11111111 .11000000 Masca subreţea -------------------------------------------------- 10101100.00010000.00000000.10000000 Adresa subreţelei -------------------------------------------------- 10101100.00010000.00000000.10111111 Adresa de broadcast a subreţelei Adresa subreţelei este 172.16.0.128 Adresa de broadcast a subreţelei este 172.16.0.191 c) Numărul de hosturi din subreţea: NH = 26-2 = 62 hosturi d) Numărul de subreţele: NSR = 210-2 = 1022 subreţele 5.15.2. Se consideră adresa IP v4 192.168.10.125/28. Se cere: a) Adresa reţelei, respectiv adresa de broadcast a reţelei definite de perechea adresă IP/ mască reţea. b) Numărul de hosturi din reţeaua determinată la punctul a). Soluţie: a) Făcând operaţiile pe biţi vom avea: 11000000.10101000.00001010.01111101 Adresa IP 11111111 .11111111 .11111111 .11110000 Masca reţea -------------------------------------------------- 11000000.10101000.00001010.01110000 Adresa de reţea -------------------------------------------------- 11000000.10101000.00001010.01111111 Adresa de broadcast a reţelei Adresa reţelei este 192.168.10.112. Adresa de broadcast a reţelei este 192.168.10.127.

Page 40: 5. 5.1. PROGRAMAREA CALCULATOARELOR - ac.upt.ro · PDF filePROGRAMAREA CALCULATOARELOR ... ‐ fişierul creat este redeschis pentru adăugarea de caractere de la tastatură ... /*

b) Numărul de hosturi din subreţea: NH = 24-2 = 14.