Tablouri bidimensionale(matrici)

Similar documents
ȘIRURI (TABLOURI UNIDIMENSIONALE)

O V E R V I E W. This study suggests grouping of numbers that do not divide the number

Sisteme cu logica fuzzy

1.3. OPERAŢII CU NUMERE NEZECIMALE

Soluţii juniori., unde 1, 2

Divizibilitate în mulțimea numerelor naturale/întregi

Teorema Reziduurilor şi Bucuria Integralelor Reale Prezentare de Alexandru Negrescu

Inteligenta Artificiala

Subiecte geometrie licenta matematica-informatica 4 ani

ON THE QUATERNARY QUADRATIC DIOPHANTINE EQUATIONS (II) NICOLAE BRATU 1 ADINA CRETAN 2

Barem de notare clasa a V-a

METODE NUMERICE: Laborator #4 Eliminare gaussiană cu pivotare totală şi scalare. Algoritmul Thomas pentru rezolvarea sistemului 3-diagonal

array a[0..n-1] a[0] = v0,..., a[n-1] = vn-1

CURS 11: Programare dinamică - II - Algoritmica - Curs 12 1

Rezolvarea ecuaţiilor şi sistemelor de ecuaţii diferenţiale ordinare (II)

Liste. Stive. Cozi SD 2017/2018

UNITATEA DE ÎNVĂȚARE 3 Analiza algoritmilor

Utilizarea limbajului SQL pentru cereri OLAP. Mihaela Muntean 2015

Programarea Dinamica. (si alte chestii adiacente) Andrei Olariu

Reactoare chimice cu curgere piston (ideala) cu amestecare completa de tip batch (autoclava)

Cristalul cu N atomi = un sistem de N oscilatori de amplitudini mici;

Sisteme de Recunoastere a Formelor Lab 12 Clasificare cu Support Vector Machine

Pentru clasa a X-a Ştiinţele naturii-sem II

GENERATOARE DE SEMNAL DIGITALE

Cercet¼ari operaţionale

Ecuatii si inecuatii de gradul al doilea si reductibile la gradul al doilea. Ecuatii de gradul al doilea

COMPARATIVE DISCUSSION ABOUT THE DETERMINING METHODS OF THE STRESSES IN PLANE SLABS

Utilizarea claselor de echivalenta in analiza asistata de calculator a sistemelor cu evenimente discrete

Controlul predictiv bazat pe modele intare-stare-iesire. Cuprins. 2. Modele intrare-stare-iesire :01

Gradul de comutativitate al grupurilor finite 1

Sisteme cu logica fuzzy cu mai multe intrari (MISO)

Laborator 5. Instructiuni de control logic : FOR, IF, WHILE. - Staţii de lucru care au instalat Orcad9.2. si MatLab 7.1

PROBLEME DIVERSE lecţie susţinută la lotul de 13 de Andrei ECKSTEIN Bucureşti, 25 mai 2015

MATEMATICĂ 3 PROBLEME DE REFLECŢIE

APLICAŢII ALE FORMULELOR LUI NEWTON PENTRU POLINOAME SIMETRICE

Habilitation Thesis. Periodic solutions of differential systems: existence, stability and bifurcations

Rădăcina pătrată a unei matrici reale de ordinul 2

SIMULAREA DECIZIEI FINANCIARE

Teoreme de compresie-extensie de tip Krasnoselskii şi aplicaţii (Rezumatul tezei de doctorat)

Laborator 3. Backtracking iterativ

Calcul Numeric. Cursul Anca Ignat

PRELUCRARI PE IMAGINI BINARE (ALB/NEGRU)

GAZETA MATEMATICĂ SERIA A. ANUL XXXVI (CXV) Nr. 1 2/ 2018 ARTICOLE. Computing exponential and trigonometric functions of matrices in M 2 (C)

LIGHTNING MVP System

FORMULELE LUI STIRLING, WALLIS, GAUSS ŞI APLICAŢII

Prelegerea 7. Sistemul de criptare AES. 7.1 Istoric

Despre AGC cuasigrupuri V. Izbaș

A GENERALIZATION OF A CLASSICAL MONTE CARLO ALGORITHM TO ESTIMATE π

Câteva rezultate de algebră comutativă

Reactoare chimice cu curgere piston (ideala) (Plug Flow Reactor PFR) cu amestecare completa (Mixed Flow Reactor MFR) de tip batch (autoclava)

Modelling the Steady State Characteristic of ph Neutralization Process: a Neuro-Fuzzy Approach

Proiectarea Algoritmilor

ALGORITMI DE OPTIMIZARE IN INGINERIE ELECTRICA. Sef lucrari ing. Alin-Iulian DOLAN

Avem 6 tipuri de simboluri in logica predicatelor:

Arhitectura sistemelor de calcul

4/68. Mini-comutatoare cu came. Prezentare generalã a sistemului. Întreruptoare Pornit-Oprit TM. Comutatoare de comandã TM.

Mugur Acu OPERATORUL INTEGRAL LIBERA-PASCU ŞI PROPRIETĂŢILE ACESTUIA CU PRIVIRE LA FUNCŢIILE UNIFORM STELATE, CONVEXE, APROAPE CONVEXE ŞI

ARTICOLE ŞI NOTE MATEMATICE

Numere prime. O selecţie de probleme pentru gimnaziu

Legi de distribuţie (principalele distribuţii de probabilitate) Tudor Drugan

Metode clasice. Camelia Chira.

COMPARATIVE STUDY OF STRUCTURAL ANALYSIS APPLIED TO AGRICULTURAL MACHINES BODIES AND ACCOMPLISHED WITH SOLID WORKS AND AUTODESK INVENTOR PROGRAMS

The 2017 Danube Competition in Mathematics, October 28 th. Problema 1. Să se găsească toate polinoamele P, cu coeficienţi întregi, care

SOI prin smart-cut. Caracterizarea TEM-HRTEM a defectelor structuale induse in Si prin hidrogenare in plasma.

VINDECAREA BOLILOR INCURABILE PRIN METODE NATURALE BY MIKHAIL TOMBAK

Ordin. pentru aprobarea structurii informaţiilor înscrise pe cardul naţional de asigurări sociale de sănătate

IMAR Problema 1. Fie P un punct situat în interiorul unui triunghi ABC. Dreapta AP intersectează

Universitatea Politehnica Bucureşti Facultatea de Automatică şi Calculatoare Departamentul de Automatică şi Ingineria Sistemelor

QUASI-ANALYTIC SOLUTIONS OF FIRST-ORDER PARTIAL DIFFERENTIAL EQUATIONS USING THE ACCURATE ELEMENT METHOD

Clasa a 10-a. Review of preview

Aplicaţie SCADA. Simularea procesului de incalzire a unei pompe de caldura

REZUMATUL TEZEI DE DOCTORAT

Exemplifying the application of hierarchical agglomerative clustering (single-, complete- and average-linkage)

Graduări pe algebre de matrice

STRUCTURAL INTENSITY METHOD APPLIED TO STUDY OF VIBRATIONS DAMPING / METODA INTENSIMETRIEI STUCTURALE APLICATĂ LA STUDIUL AMORTIZĂRII VIBRAŢIILOR

Nonlinear Vibrations of Elastic Beams

Procesarea Imaginilor

Evaluarea efectelor vibratiilor

Manual Limba Germana

ROMANIAN MATHEMATICAL SOCIETY

2. Finite Impulse Response Filters (FIR)

$IfNot ParametricTable= P_ratio_gas. P ratio,gas = 14; Raport comprimare compresor aer - Pressure ratio for gas compressor (2) $EndIf

Metode numerice de aproximare. a zerourilor unor operatori. şi de rezolvare a inegalităţilor variaţionale. cu aplicaţii

Procedeu de demonstrare a unor inegalităţi bazat pe inegalitatea lui Schur

Definiţie. Pr(X a) - probabilitatea ca X să ia valoarea a ; Pr(a X b) - probabilitatea ca X să ia o valoare în intervalul a,b.

RECREAŢ II MATEMATICE REVISTĂ DE MATEMATICĂ PENTRU ELEVI Ş I PROFESORI

Dynamic Response of Beams on Elastic Foundation with Axial Load

Matematici speciale Variabile aleatoare discrete

Agricultural Engineering

BABEŞ-BOLYAI UNIVERSITY CLUJ-NAPOCA FACULTY OF MATHEMATICS AND COMPUTER SCIENCE

TEORIA RELATIVITĂŢII. Gheorghe Munteanu, Vladimir Bălan

Probleme actuale în studiul funcţiei zeta Igusa

INCLUZIUNI OPERATORIALE PRIN TEHNICA PUNCTULUI FIX ÎN SPAŢII METRICE VECTORIALE

Curs de Geometrie. Andrei-Dan Halanay

MODEL FOR FLEXIBLE PLATES SUPPORTED ON PILES

TEOREME DE PUNCT FIX PENTRU OPERATORI CE NU INVARIAZĂ DOMENIUL DE DEFINIŢIE ŞI

"IIITO-TEC 'NIKI" & EQUIPME

CALCULUS OF SHAFT LINE FROM SHIPS USING FEM METHOD

Alte rezultate din teoria codurilor

THE METROLOGY OF OPTICAL FIBRE LOSSES

Transcription:

Tablouri bidimensionale(matrici) ianta în Pascal Problema 1: Secvență de matrici Enunț Scrieţi un program care citeşte de la tastatură două numere naturale n și m ( 2<n<20, 2<m<10000) și construieşte în memorie o secvență de matrici pătratice ( n linii şi n coloane), pe care o afișează pe ecran. Prima matrice (inițială) va avea elementele de pe diagonala secundară egale cu m, după care fiecare element aflat deasupra diagonalei secundare va fi mai mic cu o unitate decât vecinul aflat pe aceeaşi linie în dreapta lui şi fiecare element aflat sub diagonala secundară va fi mai mare cu o unitate decât vecinul aflat pe aceeaşi linie în stânga lui. Următoarele matrici (secundare) din serie vor conține pe fiecare poziție (i, j) numărul divizorilor proprii ai elementului (i, j) a matricii anterioare din secvență. Seria continuă cu matrici obținute repetând acest mod de calcul până când vom avea o matrice cu toate elementele nule. Exemplu n=5 m=47 Date de intrare 43 44 45 46 47 44 45 46 47 48 45 46 47 48 49 46 47 48 49 50 47 48 49 50 51 0 4 4 2 0 4 4 2 0 8 4 2 0 8 1 2 0 8 1 4 0 8 1 4 2 0 1 1 1 0 1 1 1 0 2 1 1 0 2 0 1 0 2 0 1 0 2 0 1 1 0 0 0 0 0 0 0 0 0 1 0 0 0 1 0 Rezultate

0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Pașii algorimului principal Algoritm secventamatrici @ citește n și m @ inițializează prima matrice din secvență (după prima regulă) @ afișează prima matrice din secvență @ CâtTimp matricea nu este nulă execută @ generează noua matrice (după a doua regulă) @ afișează matricea curentă @ Sf.CâtTimp Sf.Algoritm Identificarea subalgoritmilor Programul Observații: Nu s-a cerut ca indexarea să se facă de la 0 sau de la 1 Rezolea este data pentru matrici indexate de la unu Sunt date două iante de construire a matricii inițiale (una care urmărește direcția diagonalei secundare și una unde s-a folosit modul particular cum se aranjează numerele în acest tip de matrice) program secventamatrici; type matrix=array[1..20,1..20] of integer;

n,m:integer; a:matrix; procedure citiredate( inputn:integer; inputm:integer); writeln(); write(' Introduceti dimensiunea matricii n='); readln(inputn); write(' Introduceti numarul m='); readln(inputm); procedure matriceinitiala1( matrice:matrix; dimensiune:integer; m:integer); // genereaza prima matrice din secventa conform primei reguli // se parcurge efectiv matricea pe directii paralele cu diagonala // secundara matrice[i][dimensiune-i+1]:=m; for j:=dimensiune-i downto 1 do matrice[i][j]:=matrice[i][j+1]-1; for i:=2 to dimensiune do for j:=dimensiune-i+2 to dimensiune do matrice[i][j]:=matrice[i][j-1]+1 procedure matriceinitiala2( matrice:matrix; dimensiune:integer; m:integer); // genereaza prima matrice din secventa conform primei reguli // se genereaza matricea observand modul cum ar arata valorile in ea for j:=dimensiune downto 1 do matrice[1][j]:=m-dimensiune+j; for i:=2 to dimensiune do matrice[i][j]:=matrice[i-1][j]+1; function nrdivizoriproprii(nr:integer):integer; // numaram divizorii proprii ai argumentului functiei i, numar:integer; numar:=0; if nr>2 then

for i:=2 to (nr div 2)+1 do if (nr mod i)=0 then numar:=numar+1; nrdivizoriproprii:=numar; procedure matricesecundara( matrice:matrix; dimensiune:integer); // generarea matricilor dupa a doua regula matrice[i][j]:=nrdivizoriproprii(matrice[i][j]); function testmatrice(matrice:matrix; dimensiune:integer):boolean; // testam daca matricea este matricea nula indicator:boolean; indicator:=true; if matrice[i][j]<>0 then indicator:=false; testmatrice:=indicator; procedure afisarematrice(matrice:matrix; dimensiune:integer); writeln(); write(' ', matrice[i][j]); writeln(); citiredate(n,m); matriceinitiala1(a,n,m); //matriceinitiala2(a,n,m); afisarematrice(a,n); while (not testmatrice(a,n)) do matricesecundara(a,n);

afisarematrice(a,n); readln(); end. Problema 2: Sistem de ecuații liniare Enunț Fie un sistem de n ecuații liniare cu n necunoscute ( 2 n 10 ). De exemplu pentru n = 4 sistemul arată astfel: a 1,1 x 1 + a 1,2 x 2 + a 1,3 x 3 + a 1,4 x 4 = b 1 a 2,1 x 1 + a 2,2 x 2 + a 2,3 x 3 + a 2,4 x 4 = b 2 a 3,1 x 1 + a 3,2 x 2 + a 3,3 x 3 + a 3,4 x 4 = b 3 a 4,1 x 1 + a 4,2 x 2 + a 4,3 x 3 + a 4,4 x 4 = b 4 Rezolvați acest sistem folosind matrici și/sau determinanți. Coeficienții sistemului precum și termenii liberi sunt numere reale ce vor fi citite de la tastatură. Exemplu n=3 Date de intrare matricea coeficientilor (3 x 3): 2 3-1 -1 1 2 7-1 -3 matricea termenilor liberi (3 x 1): 5 10 15 x[1]=5.41 x[2]=0.54 x[3]=7.43 Rezultate Indicații: folosim metoda lui Cramer Pașii algorimului principal Algoritm sistemecuatii @ se calculează determinantul sistemului Δ @ dacă Δ 0 atunci Δx @ se calculează x i = i Δ unde i = 1, n, Δx i fiind determinantul obţinut din Δ prin înlocuirea coloanei corespunzătoare coeficienţilor necunoscutei x i, i = 1, n cu coloana termenilor liberi

@ se afișează soluția @ altfel se afișează un mesaj că sistemul e incompatibil sau nedeterminat Sf.Algoritm Observăm că mai sunt și alte metode de a rezolva sistemele liniare de ecuații folosind matrici însă aici vom exemplifica doar pe aceasta. Identificarea subalgoritmilor Programul program problema2; type matrix = array [1..10,1..10] of real; sir = array [1..10] of real; A:matrix; X,B:sir; n:integer; function calculdeterminant(d:matrix; dimensiune:integer):real; // calculam recursiv un determinant prin dezvoltarea sa pe o line daca // dimensiunea lui e mai mare decat unu (alegem arbitrar prima linie) // daca dimensiunea e unu valoarea sa e acel element unic k,i,j, coef:integer; aux:matrix; delta:real; delta:=0; coef:=1; if dimensiune=1 then delta:=d[1][1] else for k:=1 to dimensiune do

for i:=2 to dimensiune do if j<k then aux[i-1][j]:=d[i][j]; if j>k then aux[i-1][j-1]:=d[i][j]; delta:=delta+coef*d[1][k]*calculdeterminant(aux, dimensiune-1); coef:=coef*(-1); calculdeterminant:=delta; function rezolesistem(a:matrix; dimensiune:integer; B:sir; X:sir):boolean; // daca se poate se calculeaza in X solutia sistemului // si returneaza true // daca nu X ramane zero si functia returneaza false aux:matrix; delta:real; k, delta:=calculdeterminant(a,dimensiune); if delta <> 0 then rezolesistem:=true; for k:=1 to dimensiune do if k=j then aux[i][j]:=b[i] else aux[i][j]:=a[i][j]; X[k]:=calculDeterminant(aux, dimensiune)/delta; end else rezolesistem:=false; procedure citirematrice( a:matrix; nrlinii:integer; nrcoloane:integer);

for i:= 1 to nrlinii do for j:= 1 to nrcoloane do read(a[i][j]); readln(); procedure citiresir( a:sir; dimensiune:integer); i:integer; read(a[i]); readln(); procedure afisare(x:sir; dimensiune:integer; stare:boolean); i:integer; writeln(); if stare then writeln('x(',i,')=',x[i]:2:2); end else writeln('sistem incompatibil sau nedeterminat!'); procedure citiredate( a:matrix; b:sir; n:integer); write('introduceti numarul necunoscutelor n='); readln(n); writeln('introduceti coeficientii necunoscutelor (matricea sistemului ',n,'x',n,')'); citirematrice(a,n,n); writeln('introduceti termenii liberi (matricea termenilor liberi ',n,'x1)'); citiresir(b,n); citiredate(a,b,n); afisare(x,n, rezolesistem(a,n,b,x)); readln(); end.

Problema 3: Jocuri de minime Enunț Se citește o matrice pătratică cu n linii și n coloane ( 3 elemente numere naturale din intervalul [ 0, 1000]. n 100 ), cu a) Calculați și afișați (în orice ordine) valoarile minime din fiecare dintre cele 4 zone în care este împarțită matricea de catre cele două diagonale (elementele de pe diagonale nu aparțin nici unei zone). b) Interschimbați circular în sens trigonometric (invers acelor de ceas) cele 4 valori minime, de ori câte ori ar apărea valoarea înlocuită în zona de destinație. Astfel, valoarea minimă din zona N va ajunge pe pozițiile tuturor valorilor minime din V, cea din V în locul celor din S, cea din S în locul celor din E, iar cea din E în locul celor din N. Afișați matricea rezultată. Exemplu n=4 2 3 10 8 2 1 2 1 2 11 5 7 0 4 8 3 Date de intrare minim N=3 minim E=1 minim V=2 minim S=4 2 1 10 8 3 1 2 4 3 11 5 7 0 2 8 3 Rezultate Pașii algorimului principal Algoritm rotatiiminime @ citește matricea @ determina valorile minime din cele patru zone @ afișează valorile minime @ rotește valorile minime intre zone @ afiseaza matricea noua Sf.Algoritm

Identificarea subalgoritmilor Programul program problema3; type matrix=array[1..100,1..100] of integer; sir=array[1..4] of integer; matrice:matrix; n:integer; minime:sir; procedure citirematrice( a:matrix; dimensiune:integer); write('introduceti dimensiunea matricii n='); readln(dimensiune); writeln('introduceti elementele matricii linie cu linie'); read(a[i][j]); readln(); procedure afisarematrice(a:matrix; dimensiune:integer); writeln(); write(a[i][j],' '); writeln(); procedure afisareminime(s:sir); writeln('minim N:', s[1]);

writeln('minim V:', s[2]); writeln('minim S:', s[3]); writeln('minim E:', s[4]); procedure determinareminime(a:matrix; dimensiune:integer; sirminime:sir); // determina cele patru valori minime N,V,S,E for i:=1 to 4 do sirminime[i]:=1001; if(i<j) and (i+j<dimensiune+1) and (a[i][j]<sirminime[1]) then sirminime[1]:=a[i][j]; if(i<j) and (i+j>dimensiune+1) and (a[i][j]<sirminime[2]) then sirminime[2]:=a[i][j]; if(i>j) and (i+j>dimensiune+1) and (a[i][j]<sirminime[3]) then sirminime[3]:=a[i][j]; if(i>j) and (i+j<dimensiune+1) and (a[i][j]<sirminime[4]) then sirminime[4]:=a[i][j]; procedure inlocuireminime( a:matrix; dimensiune:integer;sirminime:sir); // inlocuieste valorile intre ele conform cerintei if(i<j) and (i+j<dimensiune+1) and (a[i][j]=sirminime[1]) then a[i][j]:=sirminime[2]; if(i<j) and (i+j>dimensiune+1) and (a[i][j]=sirminime[2]) then a[i][j]:=sirminime[3]; if(i>j) and (i+j>dimensiune+1) and (a[i][j]=sirminime[3]) then a[i][j]:=sirminime[4]; if(i>j) and (i+j<dimensiune+1) and (a[i][j]=sirminime[4]) then

a[i][j]:=sirminime[1]; citirematrice(matrice,n); determinareminime(matrice,n,minime); afisareminime(minime); inlocuireminime(matrice,n,minime); afisarematrice(matrice,n); readln(); end. Problema 4: Jocul cu imagini Enunț Un tânăr începe să se inițieze în secretele prelucrării de imagini. Cu surprindere el află că o imagine alb negru poate fi reprezentată în principiu și ca o matrice de zero și unu și că folosindu-se de înmulțirea matricilor el poate deforma imaginea. Cu toate acestea el nu știe să înmulțească două matrici și să transforme o imagine. Ajutați-l să rotească o imagine cu un unghi θ. Pentru asta scrieți o funcție ce calculează produsul a două matrici. Citiți de la tastatură imaginea ca o matrice cu dimensiunea n x m ce va conține doar zero și unu precum și matricea R ce o va folosi pentru rotire (de dimensiunea 2 x 2 ce conține patru numere reale - coeficienții transformării în vederea rotirii). Pentru fiecare punct negru (1 în matrice) se calculează coordonatele inițiale ( x i, y i ), unde x i e linia minus n div 2 + n mod 2 și y i este respectiv coloana minus m div 2 + n mod 2 (pentru a stabili originea sistemului de coordonate în mijlocul matricii). Noile coordonate ( x t, y t ) ale punctului după rotire se găsesc prin înmulțirea vectorului [ x i, y i ] cu matricea transformărilor R. Acest punct va fi în matricea nouă la poziția ( i, j ) obținută din noile coordonate la care se adăugă valorile scăzute anterior când am stabilit originea sistemului de referință în mijlocul matricii. Dacă indicii noi pentru un punct sunt negativi sau depășesc dimensiunile m x n înseamnă că punctele respective ies din imaginea finală și nu mai sunt puse. Exemplu Imaginea: Date de intrare Rezultate

n=5 m=7 Imaginea noua rotita: 0 0 0 1 0 0 0 0 0 0 1 0 0 0 1 1 1 1 1 1 1 0 0 0 1 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 0 1 0 0 0 0 0 1 0 0 0 0 0 1 0 1 0 0 0 1 0 0 0 0 0 Rotirea (pt. un unghi de ~45 grade): 0.7-0.7 0.7 0.7 Pașii algorimului principal Algoritm joculcuimagini @ citește matricea imaginii @ citeste matricea rotatiei @ roteste imaginea @ pentru fiecare element al matricii imagine egal cu 1 @ calculam coordonatele in raport cu centrul imaginii @ calculam noile coordonate dupa rotire @ calculam indicii i,j corespunzatori noilor coordonate in noua imagine @ punem valoarea 1 in matricea noua la pozitia i,j @ afisam matricea imaginii rotite Sf.Algoritm

Identificarea subalgoritmilor Programul program problema4; type matrix=record a:array[1..100,1..100] of real; n,m:integer; img, rot, imgnew:matrix; procedure citirematrice( mat:matrix); for i:=1 to mat.n do for j:=1 to mat.m do read(mat.a[i][j]); readln(); procedure citireimagine( imagine:matrix); write('introduceti inaltimea imaginii n='); readln(imagine.n); write('introduceti latimea imaginii m=');readln(imagine.m); writeln('introduceti valoarea punctelor (0 sau 1) linie cu line:'); citirematrice(imagine); procedure citiretransformare( rot:matrix); rot.n:=2; rot.m:=2; writeln('introduceti matricea transformarii cu dimensiunea 2 x 2

linie cu linie'); citirematrice(rot); procedure produs(m1:matrix; m2:matrix; c:matrix); // calculeaza produsul matricilor m1 si m2. Rezultatul se pune in c i,j,k:integer; if m1.m<>m2.n then c.n:=0; c.m:=0; end else c.n:=m1.n; c.m:=m2.m; for i:=1 to m1.n do for j:=1 to m2.m do c.a[i][j]:=0; for k:=1 to m1.m do c.a[i][j]:=c.a[i][j]+m1.a[i][k]*m2.a[k][j]; function testincadrare(x,y,n,m:integer):boolean; //testeaza daca indicii x si y sunt in intevalele corecte testincadrare:=(x>=1)and(x<=n)and(y>=1)and(y<=m); procedure rotireimagine(img:matrix; R:matrix; newimg:matrix); //roteste imaginea conform coeficientilor din R coordinitiale, coordtransf:matrix; i,j, x,y:integer; ajustarex,ajustarey:integer; newimg.n:=img.n; newimg.m:=img.m; coordinitiale.n:=2; coordinitiale.m:=1; ajustarex:=img.n div 2+img.n mod 2; ajustarey:=img.m div 2+img.m mod 2;

for i:=1 to newimg.n do for j:=1 to newimg.m do newimg.a[i][j]:=0; for i:=1 to img.n do for j:=1 to img.m do if img.a[i][j]=1 then coordinitiale.a[1][1]:=i-ajustarex; coordinitiale.a[2][1]:=j-ajustarey; produs(r, coordinitiale, coordtransf); x:=trunc(coordtransf.a[1][1])+ajustarex; y:=trunc(coordtransf.a[2][1])+ajustarey; write(x,' ',y,' '); if testincadrare(x,y,newimg.n, newimg.m) then newimg.a[x][y]:=1; procedure afisareimagine(imag:matrix); for i:=1 to imag.n do writeln(); for j:=1 to imag.m do write(imag.a[i][j]:1:0, ' '); citireimagine(img); citiretransformare(rot); rotireimagine(img,rot,imgnew); afisareimagine(imgnew); readln(); end.