Home - Rasfoiesc.com
Educatie Sanatate Inginerie Business Familie Hobby Legal
Doar rabdarea si perseverenta in invatare aduce rezultate bune.stiinta, numere naturale, teoreme, multimi, calcule, ecuatii, sisteme




Biologie Chimie Didactica Fizica Geografie Informatica
Istorie Literatura Matematica Psihologie

Informatica


Index » educatie » Informatica
» Informatica atestat matrici


Informatica atestat matrici


COLEGIUL NATIONAL "CAROL I"

INFORMATICA

ATESTAT

MATRICI
1. INTRODUCERE



Organizarea in structuri de date a datelor prelucrate de algoritmi simplifica multe dintre operatiile de prelucrare. Atunci cand organizam datele intr-o structura de date, trebuie sa identificam modul in care putem avea acces la ele si operatiile pe care le putem executa cu datele respective. Procesul de organizare a datelor in colectii este un proces care se desfasoara pe trei niveluri care interactioneaza intre ele:

Nivel conceptual - nivelul la care se dezvolta imaginea mentala a structurii de date; modul in care trebuie organizate datele si reactiile care exista intre ele

Nivel logic - nivelul la care se alege un model de implementare a structurii conceptuale

Nivel fizic - nivelul la care sunt stocate datele in memoria calculatorului si care implica anumite caracteristici ale operatiilor de accesare si de prelucrare a datelor din colectie, in functie de modul in care sunt memorate datele si de algoritmii implementati in limbaj pentru accesarea, citirea si scrierea datelor in memorie.

2. ORGANIZAREA DATELOR - TABLOUL DE MEMORIE

Consideram o firma de transport care are un parc de 10 masini, cu capacitati de transport diferite si trebuie sa determinam cate dintre aceste masini au cea mai mare capacitate de transport.

Stabilim structura de date necesara:

a)     la nivel conceptual

Capacitatile de transport ale masinilor reprezinta un sir de numere intregi, aranjate intr-o ordine aleatorie, in care trebuie cautat numarul cel mai mare si de cate ori apare in sir.

b)     la nivel logic

Implementarea permisa de limbajul C++ a unei colectii de date omogene este vectorul, fiecare numar intreg fiind un element al structurii.

Vom folosi urmatorii algoritmi:

Algoritmul pentru parcurgerea vectorului la memorarea numerelor

Algoritmul pentru determinarea valorii maxime intr-un sir de numere

Algoritmul de cautare in vector a elementelor cu o valoare precizata (valoarea maxima)

c)     la nivel fizic

Numerele vor fi memorate intr-o zona continua de memorie interna, fiecarui numar alocandu-i-se acelasi spatiu pentru memorare. Identificarea unui element al structurii se face prin indicele sau.

a

a

a

a

a

a

a

a

a

a

Pentru a pastra datele memorate in vederea prelucrarii lor ulterioare, se vor salva intr-un fisier text, de unde vor fi restaurate in memoria interna intr-un vector, la fiecare prelucrare.

In structura de date folosita, intre elementele structurii exista o relatie de ordine in care fiecare element are un succesor si un predecesor. Acest tip de structura este o structura liniara.


a1 = primul element - nu are predecessor

ai = element - succesorul sau este ai+1, iar predecesorul sau este ai-

an = ultimul element - nu are successor

Luand un alt caz, daca consideram ca avem situatia in care exista cinci contoare pentru energie electrica, contoare ce se citesc trimestrial si se inregistreza intr-un tabel consumul trimestrial (in mii kWh), pentru a determina: media consumului trimestrial, cel mai mic consum trimestrial, contorul cu cel mai mic consum si contorul cu cel mai mare consum, stabilim structura de date care se va folosi:

a)     la nivel conceptual

Contoarele sunt organizate intr-un tabel cu patru linii si cinci coloane in care sunt memorate numere intregi. Tabelul va avea 4 linii, corespunzatoare celor 4 trimestre si 5 coloane, corespunzatoare celor cinci contoare.

b)    la nivel logic

Implementarea permisa de limbajul C++ a unei colectii de date omogene este tabloul de memorie.

Vom folosi urmatorii algoritmi:

Algoritmul pentru parcurgerea tabloului de memorie pentru memorarea numerelor

Algoritmul pentru determinarea mediei aritmetice

Algoritmii de determinare a valorii minime, respectiv maxime.

Daca pentru reprezentarea datelor s-ar folosi tabloul de memorie cu o singura dimensiune (vectorul), algoritmii de prelucrare ar fi foarte complicati. De aceea in acest caz vom folosi un tablou bidimensional ( matrice) cu patru linii si cinci coloane. Identificarea unui element din tablou se va face nu printr-un indice, ci prin numarul liniei si numarul coloanei. Astfel daca numele tabloului bidimensional este b, elementul b2,3 este elementul din linia 2 si coloana 3 si are valoarea 32.

TRIMESTRE

CONTOARE

TABLOURI BIDIMENSIONALE

Un tablou bidimensional (matrice) este ca un tabel unde fiecare element se afla pe o anumita linie si o anumita coloana.

De exemplu, elementul de pe linia i si coloana j din matricea a se noteaza cu aij.Exemple:

a=

Elementul de pe linia 1 si coloana 3 este 9.

Declararea variabilelor de tip tablou bidimensional

I. In sectiunea typedef se defineste tipul tablou bidimensional (matrice), iar in sectiunea de declaratii de variabile se declara variabila de tip matrice astfel:

typedef tip_componente id_matrice[dimensiune1][dimensiune2] ;

id_matrice nume_variabila;

unde:

id_matrice identificatorul (numele) tipului tablou bidimensional;

nume_variabila identificatorul (numele) variabilei tablou;

dimensiune1, dimensiune2 sunt doua numere naturale reprezentand tipul de date pentru indicii de linie respectiv de coloana;

tip_componente tipul de date al elementelor matricii si poate fi orice tip predefinit sau definit de utilizator.

II. In sectiunea de declaratii de variabile astfel:

tip_componente nume_variabila [dimensiune1][dimensiune2

unde: tip_componente, nume_variabila, dimensiune1 si dimensiune2 au aceeasi semnificatie ca mai sus.

Nu este obligatoriu sa utilizam: elementele liniei cu numarul de ordine zero si anume nume_variabila[0][0], nume_variabila[0][1] . .. nume_variabila[0][dimensiune2-1] si pe cele ale coloanei cu numarul de ordine zero adica pe nume_variabila[0][0], nume_variabila[1][0] . .. nume_variabila[dimensiune1-1][0]

Elementele unei matrici pot fi initializate prin utilizarea urmatoarei sintaxe:

tip_comp nume_var [ dim1][dim2]=, , , . . };

valorii,i=0,1,2 . reprezinta un sir de valori separate prin virgula

Elementele matricei se vor initializa in ordine astfel: linia cu numar de ordine zero    cu sirul de valori valori0, linia cu numarul de ordine unu cu sirul de valori valori1, etc.

Exemple:

float a[10

- se declara o matrice a cu maxim 10 linii si maxim 15 coloane cu toate elementele de tip real. Tipul indicelui de linie este intervalul 0..9, iar tipul indicelui de coloana este intervalul 0..14.

typedef int matrice[11][25];

matrice a;

- se declara o matrice a cu maxim 11 linii si maxim 25 coloane cu toate elementele de tip integer. Tipul indicelui de linie este intervalul 0..10, iar tipul indicelui de coloana este intervalul 0..24.

typedef char matrice[6][6];

matrice a,b;

- se declara doua matrici a si b cu maxim 6 linii si maxim 6 coloane cu elemente de tip char (fiecare dintre matrici are maxim 36 de elemente).

4) typedef int matrice[5];

matrice a[5],b[5];

- se declara variabilele cu numele a si b de tip matrice, cu cate 5 componente, reprezentand fiecare cate un tablou cu 5 componente de tip integer (adica maxim 25 de componente de tip integer).

5) enum culori ;

culori a[10][15], b[10][15], c[10][15];

- se declara trei matrici cu numele a, b si c cu tipul indicelui de linie intervalul 0..9 si tipul indicelui de coloana intervalul 0..14 (matricile au maxim 150 elemente)

double a[2][2]=,};

- se declara o matrice cu numele a, cu indicele de linie avand doua valori 0 si 1 iar cel de coloana avand tot valorile 0 si 1, deci matricea are maxim 4 elemente, tipul acestora fiind double, elemente care in urma initializarii vor avea valorile: a[0][0] va memora valoarea 1.2, a[0][1] va memora valoarea 3.22, a[1][0] va memora valoarea 5.67 si a[1][1] va memora valoarea 7.89.

3. MATRICI PATRATICE

-elementele diagonalei principale

a 1],a[2][2], a[3][3], , a[n][n].

- elementele diagonalei secundare:

a[1][n], a[2][n-1], a[3][n-2], , a[n][1].

  In cazul in care numarul de linii este egal cu numarul de coloane matricea se numeste patratica. Daca nu utilizam linia zero si coloana zero vom avea:

4 OPERATII CU MATRICI
1. Selectarea (accesarea) unei componente
nume_variabila [pozitie1][pozitie2]

Se scrie numele variabilei urmat intre paranteze drepte de pozitia liniei si intre alte paranteze drepte de pozitia coloanei in matrice (aceasta poate fi o valoare sau o expresie indiceala).

Exemple: Presupunem ca matrice are ca elemente valorile:

Fie declaratia:float a[2][3];

atunci:

a[0][0] - reprezinta elmentul de pe linia 0 si coloana 0 si are valoarea 3;

a[0][1] - reprezinta elmentul de pe linia 0 si coloana 1 si are valoarea 7;

a[1][2] - reprezinta elmentul de pe linia 1 si coloana 2 si are valoarea 5;

Variabilele de tip matrice nu se pot citi/scrie direct cu instructiunile cin/cout. Prezentam in continuare modalitatea prin care se poate face aceasta

2.Citirea unei matricii

Ca si-n cazul vectorilor, si la matrici trebuie citite mai intai numarul de linii respectiv de coloane, apoi pe rand folosind o instructiune repetitiva fiecare element al matricii. Ne propunem sa citim o matrice a cu m linii si n coloane.

Aceasta se realizeaza astfel:

cout<<'m=';cin>>m;

cout<<'n=';cin>>n;

for(i=1;i<=m;i++)

for (j=1;j<=n;j++)

3. Afisarea unei matricii

Vom afisa matricea citita anterior (afisarea se va face pe linii).

for(i=1;i<=m;i++)

4. Atribuirea

O componenta a unei variabile de tip tablou bidimensional primeste valoarea unei alte componente a altei variabile de acelasi tip tablou bidimensional ;

Nu pot avea loc atribuiri de forma x=y unde x si y sun tablouri bidimensionale.

5.LEGATURA POINTERI - TABLOURI BIDIMENSIONALE

Elementul a[i][j] al unui tablou bidimensional se identifica prin:

a[i][j] sau *(a[i]+j) sau *(j+a[i]) sau i[a][j] sau j[a[i]] sau j[i[a]] sau *(*(a+i)+j) sau

*(a+j+dimensiune2*i) sau *(&a[0][0]+dimensiune2*i+j)

6. APLICATII

Putem face aceasta citire utilizand un tablou bidimensional. Valorile elementelor le vom citi pozitie cu pozitie, utilizand doua instructiuni for.

#include <iostream.h>

int main()

return 0;}

Daca presupunem ca avem de scris un program mai complicat , cu operatii dificile cu matrici. Dorim sa testam programul pentru o matrice de 5 linii si 5 coloane. Introducem cele 25 elemente, programul nu functioneaza corect

Pentru a evita cazul de mai sus utilizam o citire speciala, dintr-un fisier extern. Pe prima linie este scris numarul de linii si numarul de coloane, apoi, pe urmatoarele n linii sunt scrise cele m coloane. Un exemplu concret:

"matrice.txt"    Putem citi elementele si

insirate unul dupa altul, insa nu vom

gasi cu usurinta coordonatele

fiecaruia.

Programul acum va include "fstream.h" in loc de "iostream.h". Putem folosi in continuare "cin" si "cout" numai ca avem acces si la "ifstream" sau "ofstream". Pentru exemplificare, afisam matricea citia din "matrice.txt" in alt fisier text, "rezult.txt". Mai jos regasim acelasi program dar acum el utilizeaza citirea din fisier.

#include <fstream.h>

ifstream fin('matrice.txt');

ofstream fout('rezult.txt');

int main()

return 0;}

Nu este nevoie sa creem fisierul "rezult.txt", deoarece a fost creat automat de program.

Din definitia transpusei unei matrice rezulta ca matricea      este simetrica daca si numai daca:

Forma generala a unei matrice simetrice este:

            In relatie se observa simetria elementelor fata de diagonala principala a matricei .In particular, matricea patratica nula  este simetrica.

Probleme:

Scrieti un program care construieste matricea dupa modelul :

pt. n=5 obtinem matricea:

5 1

4 1

1 1 1 1

#include <iostream.h>

#include <conio.h>

#include <stdio.h>

int a[12][12],i,j,n;

void main()

getche();

Sa se citeasca o matrice cu m linii si n coloane cu elem numere intregi, sa se afiseze matricea si sa se calculeze maximul de pe o linie data de la tastatura Se vor folosi subprograme recursive pt citire, afisare si det maximului dintr-un vector.

#include <iostream.h>

#include <conio.h>

int a[10][10],m,n;

void citeste(int a[][10],int m,int n,int i,int j)

else citeste(a,m,n,i+1,1);

int max(int v[],int nr)

void scrie(int a[10][10],int i,int j)

else

}

void main()

7. BIBLIOGRAFIE

C. Apostol, B. Ghilic-Micu, I. Rosca, V. Rosca, Introducere in programare. Teorie si practica Pascal, Ed. Viata Romaneasca, 1993.

T. Balanescu, S. Gavrila, H. Georgescu, M. Gheorghe, L. Sofonea, I. Vaduva, Pascal si Turbo Pascal, Vol. I, II, Ed. Tehnica, 1992.

Fl. M. Boian, Sisteme de operare interactive, Ed. Libris, Cluj-Napoca, 1994.

V. Cristea, C. Giumale, E, Kalisz, Al. Paunoiu, Limbajul C standard, Ed. Teora, Bucuresti, 1992

  1. M. D. Popovici, M. I. Popovici, C++. Tehnologia orientata spre obiecte. Aplicatii, Ed. Teora, Bucuresti, 2000

V. Patriciu, Sisteme de operare pentru minicalculatoare si microcalculatoare, Ed. Militara, 1992.

D. Rancea, Limbajul Turbo Pascal, vol I, II, Ed. Libris, Cluj-Napoca, 1993.

T. Spircu, Introducere in informatica, Ed. Teora, 1993.

I. Vaduva, Gh. Barbu, Bazele Informaticii, Editura Tehnica, 1997.

M. Vlada, Informatica, Ed. Ars Docendi, Bucuresti, 1999.

Gazeta de Informatica, 1999 - 2000.





Politica de confidentialitate





Copyright © 2024 - Toate drepturile rezervate

Informatica


Access
Adobe photoshop
Autocad
Baze de date
C
Calculatoare
Corel draw
Excel
Foxpro
Html
Internet
Java
Linux
Mathcad
Matlab
Outlook
Pascal
Php
Powerpoint
Retele calculatoare
Sql
Windows
Word


Subiectul - Examen sisteme informatice
Circuitul Watchdog
Laborator Inteligenta Artificiala
UN NOU MOD DE A PRIVI AUTOMATIZAREA INSTALATIILOR DINTR-O CLADIRE
Instalare ARD
WORD si WINDOWS - SUBIECTE
Minighid de utilizare PROARB 3.0
Sisteme cu inteligenta artificiala
LISTE CIRCULARE SIMPLU INLANTUITE
GRAFICA 3D - Rendering




termeni
contact

adauga