Autor: Maria-Catalina Leca - 315CA
Copyright © 2023-2024
Materia: Programarea Calculatoarelor și Limbaje de Programare 1
Tema 3 - Simulator de Octave în C
Acest proiect implementează un simulator de manipulare a matricelor, inspirat de GNU Octave, folosind limbajul C. Programul permite încărcarea, modificarea și efectuarea operațiilor matematice pe matrice, respectând restricțiile impuse de enunț.
Simulatorul este capabil să gestioneze multiple matrice simultan, utilizând alocare dinamică și tehnici eficiente de realocare. Comenzile sunt introduse prin intermediul liniei de comandă, fiecare având un format bine definit.
Programul implementează următoarele comenzi pentru gestionarea matricelor:
L m n→ Încarcă o matrice de dimensiunem × ncu valori întregi.D index→ Afișează dimensiunile matricei de la pozițiaindex.P index→ Afișează matricea de la pozițiaindex.F index→ Șterge matricea de la pozițiaindex.
C index l <linii> c <coloane>→ Redimensionează matricea la un subset specific.T index→ Transpune matricea.
M index1 index2→ Înmulțește matriceaindex1cuindex2și stochează rezultatul.R index putere→ Ridică matriceaindexlaputere, utilizând exponentiere logaritmică.S index1 index2→ Înmulțește două matrice folosind algoritmul lui Strassen.
O→ Sortează matricile în funcție de suma elementelor.Q→ Eliberează toate resursele și închide programul.
Fiecare fișier .c conține funcțiile principale pentru fiecare operație asupra matricelor. Programul lucrează cu:
- O listă de matrici → conținând datele fiecărei matrice.
- O listă de vectori → reținând dimensiunile fiecărei matrice.
- Funcțiile dedicate alocă dinamic memoria necesară fiecărei matrici și listei de dimensiuni.
- O funcție de realocare dublă dimensiunea listelor când spațiul se epuizează.
- Se creează o matrice nouă cu dimensiunile dorite.
- Se copiază datele relevante, iar memoria inițială este eliberată.
- Pentru înmulțirea clasică → se folosește algoritmul standard de produs matricial.
- Pentru algoritmul lui Strassen → se împart matricile în submatrici și se calculează recursiv rezultatul.
- Se creează o matrice nouă cu dimensiunile inversate.
- Valorile sunt copiate corespunzător, iar memoria veche este eliberată.
- Implementare eficientă folosind exponentiere binară pentru complexitate
O(log n). - Se gestionează separat cazurile pentru puterea
0(matrice identitate) și1(matricea originală).
- Se calculează suma fiecărei matrice.
- Se sortează matricele crescător, păstrând ordinea corespunzătoare în listă.
- Matricea de la un anumit index este eliminată și lista este ajustată corespunzător.
Qeliberează toată memoria și închide programul.
> L 4 4
> P 0
1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16
> T 0
> P 0
1 5 9 13
2 6 10 14
3 7 11 15
4 8 12 16
> M 0 0
> P 1
90 100 110 120
202 228 254 280
314 356 398 440
426 484 542 600
> R 1 2
> P 1
46820 53400 59980 66560
94100 107352 120604 133856
141380 161304 181228 201152
188660 215256 241852 268448
> F 1
> QSimulatorul de Octave implementează operații esențiale asupra matricelor, folosind alocare dinamică eficientă și algoritmi optimi pentru fiecare operație. Funcțiile sunt modularizate, iar programul respectă cerințele temei, oferind o gestionare robustă a memoriei și a resurselor.
🚀 Proiect realizat cu pasiune pentru Programarea Calculatoarelor! 🚀