Scrigroup - Documente si articole

     

HomeDocumenteUploadResurseAlte limbi doc
AccessAdobe photoshopAlgoritmiAutocadBaze de dateCC sharp
CalculatoareCorel drawDot netExcelFox proFrontpageHardware
HtmlInternetJavaLinuxMatlabMs dosPascal
PhpPower pointRetele calculatoareSqlTutorialsWebdesignWindows
WordXml


TABLOURI BIDIMENSIONALE

c



+ Font mai mare | - Font mai mic



TABLOURI BIDIMENSIONALE

1. SCOPUL LUCRARII

In aceasta lucrare se prezinta aplicatii cu tablouri bidimensionale (matrici) si aplicatii cu siruri de caractere (stringuri).



2. BREVIAR TEORETIC

2.1. Tablouri bidimensionale

Un tablou reprezinta o colectie de date de acelasi tip. Tablourile bidimensionale sunt denumite si matrici. La declararea unui tablou se specifica numarul de elemente ale fiecarei dimensiuni, incluzand fiecare dintre aceste numere intre paranteze drepte. Indexul inferior al fiecarei dimensiuni este 0.

Sintaxa pentru declararea unei matrici este urmatoarea:

tipul_datelor nume_matrice[nr_linii][nr_coloane];

Exemplu: a : o matrice de numere intregi , ce are 10 linii a cate 5 componente pe linie :

int a[10][5];

In general la tablourile multidimensionale si in particular la matrici, indexul cel mai din dreapta variaza cel mai rapid, adica pentru exemplul tabloului a, elementele componente sunt stocate in memorie, in urmatoarea ordine:

a[0][0], a[0][1], , a[0][4],

a[1][0], a[1][1], .

Un tablou bidimensional poate fi initializat inca din faza de declarare, ca in exemplul urmator:

int mat[3][2]=;

3. DESFASURAREA LUCRARII

Se vor edita si apoi executa programele descrise in continuare.

Programul nr. 1

Sa se calculeze si sa se afiseze suma a doua matrice de cate 3 linii si 4 coloane fiecare.

Vom initializa prin atribuire directa, elementele celor doua matrici.

Sursa programului:

#include <stdio.h>

#include <conio.h>

#define N 3 //numarul de linii ale matricilor

#define M 4 //numarul de coloane ale matricilor

void main(void)

int B[N][M]=;

int C[N][M]; //suma matricilor A si B

int i, j;

for(i=0;i<N;i++)

for(j=0;j<M;j++)

C[i][j]=A[i][j]+B[i][j];

//afisarea matricii C :

clrscr();

for(i=0;i<N;i++)

getch();

Programul nr. 2

Sa se substituie intr-o matrice patrata toate elementele aflate sub diagonala principala cu valoarea 0. Dimensiunea matricii se citeste de la tastatura.

Sursa programului:

#include <stdio.h>

#include <conio.h>

void main()

//Afisarea matricii a, inainte de substitutie:

printf('Inainte de substitutie:n');

for(i=0;i<n;i++)

//Substitutia cu 0:

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

for(j=0;j<i;j++)

a[i][j]=0;

//Afisarea matricii a, dupa substitutie:

printf('Dupa substitutie:n');

for(i=0;i<n;i++)

getch();

Programul nr. 3

Pentru o matrice patrata A de numere intregi, sa se calculeze si afiseze care este numarul (indexul) coloanei ce are suma elementelor (ale coloanei respective) maxima fata de sumele elementelor din celelalte coloane ale matricii.

Sursa programului:

#include <stdio.h>

#include <conio.h>

#define N 3 //numarul de linii (sau coloane) din matricea A

void main(void)

//(Pentru acest exemplu, vom obtine ca rezultat coloana 2, pentru ca

//ea are suma maxima 2+2+3=7)

int i,j;

int sumaCrt; //suma elementelor coloanei curente

int sumaMax; // maximul cautat

int indexSumaMax; //indexul cautat

clrscr();

//initializam sumaMax cu suma elementelor primei coloane:

sumaMax=0;

for(i=0;i<N;i++)

sumaMax=sumaMax+A[i][0];

//initializare indexSumaMax:

indexSumaMax=0;

//Calculam sumele elementelor din restul coloanelor:

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

} //end for j

printf("nColoana cautata = %d ", indexSumaMax);

printf("nAre suma= %d .", sumaMax);

Programul nr.4

Sa se creeze o matrice patrata de dimensiune N, initializata cu numere aleatoare, ce contine toate numerele din multimea: , fiecare element al multimii aparand o singura data.

Sursa programului:

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 3 //dimensiunea matricii patrate

void main()

}

//scriem numarul generat in matrice:

A[i][j]=nr;

}

//afisare matrice:

clrscr();

for(i=0;i<N;i++)

getch();

Programul nr. 5

Sa se copieze toate elementele unei matrici intr-un vector in urmatoarea ordine: intai prima linie, apoi a doua linie, etc.

Sursa programului:

#include <stdio.h>

#include <conio.h>

#define N 3 //numarul de linii

#define M 2 //numarul de coloane

void main()

int V[N*M];

int i,j;

clrscr();

for(i=0;i<N;i++)

for(j=0;j<M;j++)

V[i*M+j]=A[i][j];

//afisare vector:

for(i=0;i<N*M;i++)

printf('%d ',V[i]);

getch();

Programul nr. 6

Se citesc de la tastatura dimensiunile unei matrici de numere intregi. Se citeste apoi matricea. Sa se afiseze daca sunt diferite toate elementele matricii intre ele sau nu.

Sursa programului:

#include <stdio.h>

void main()

//Parcurgem toate elementele matricii, ca si cum ar fi dispuse

// intr-un vector, de la primul, pana la penultimul:

for(i=0;i<nL*nC-1;i++)

//compar elementul curent, cu toate elementele dupa el:

//(elementul curent este in linia i/nC si in coloana i%nC)

for(j=i+1;j<nL*nC;j++)

if(a[i/nC][i%nC]==a[j/nC][j%nC])

printf('Sunt toate diferite.');

Programul nr.7

Scrieti un program care verifica daca o matrice este patrat magic.

Se va verifica mai intai daca in matrice sunt prezente toate valorile din

multimea 1,2,,N*N.

Sursa programului:

/* O matrice patrata de dimensiune N, ce contine toate numerele 1,2,..,N*N,

este patrat magic daca suma elementelor din fiecare linie, din fiecare coloana, de pe

diagonala principala si de pe diagonala secundara, are aceeasi valoare.

Astfel, urmatoarea matrice, este patrat magic:

16 3 2 13

5 10 11 8

9 6 7 12

4 15 14 1

#include <stdio.h>

#include <conio.h>

#include <stdlib.h>

#define N 4 //dimensiunea matricii

#define NxN N*N //numarul de elemente din matrice

void main()

int i,j;

int suntPrezente[NxN];

int S;//valoarea comuna, daca este patrat magic

int sCrt;//suma curenta calculata

clrscr();

//Verificam daca matricea contine toate numerele din multimea

//Fiecare numar valid prezent, il inregistram in vectorul suntPrezente.

for(i=0;i<NxN;i++)

suntPrezente[i]=0;

for(i=0;i<N;i++)

for(j=0;j<N;j++)

if((A[i][j]<1)||(A[i][j]>NxN))

else suntPrezente[A[i][j]-1]=1;

for(i=0;i<NxN;i++)

if(suntPrezente[i]==0)

//Calculam suma elem. de pe diagonala principala:

S=0;

for(i=0;i<N;i++)

S=S+A[i][i];

//Comparam valoarea S cu suma sCrt a fiecarei linii:

for(i=0;i<N;i++)

}

//Comparam valoarea S cu suma sCrt a fiecarei coloane:

for(i=0;i<N;i++)

}

//Comparam valoarea S cu suma sCrt de pe diagonala secundara:

sCrt=0;

for(i=0;i<N;i++)

sCrt=sCrt+A[i][N-i-1];

if(sCrt!=S)printf('Nu este patrat magic.');

else printf('Este patrat magic.');

getch();

Programul nr.8

Implementati urmatorul algoritm prin care se construieste un patrat magic, de dimensiune N. Acesta este valabil numai pentru N - impar.

Plasati valoarea 1 in mijlocul randului de jos.

Apoi, pentru fiecare numar Nr de la 2 la N*N , se repeta:

daca numarul anterior ( Nr-1 ) a fost plasat in linia i si coloana j,

numarul curent Nr se va plasa in linia i+1 ( o linie mai jos) si in

coloana j+1 ( o coloana mai la dreapta ). Daca linia trece peste ultima: se va trece in linia 0. La fel si daca se trece peste ultima coloana: se trece in coloana 0. Daca pozitia calculata este deja ocupata, numarul curent se va scrie in aceeasi coloana, dar cu o linie mai sus.

Astfel pentru N=3, se obtine urmatorul patrat magic:

Sursa programului:

#include <stdio.h>

#include <conio.h>

#define N 3 //dimensiunea matricii

void main()

}//else

a[linCrt][colCrt]=nr;

}//for

//afisarea matricii rezultate:

for(i=0;i<N;i++)

getch();

4. PROBLEME PROPUSE

1. Se citesc 16 numere intregi de la tastatura. Aceste numere trebuie memorate intr-o matrice patrata de 4 linii si 4 coloane. Sa se calculeze si afiseze maximul din matrice cat si linia si coloana in care apare acest maxim. ( In cazul in care sunt mai multe valori egale cu maximul, se va afisa linia si coloana primei aparitii).

2. Sa se comute doua coloane ale unei matrici intre ele. Matricea si numerele coloanelor care se comuta, se vor citi de la tastatura.

3. Sa se verifice daca o matrice patrata NxN este simetrica (fata de diagonala principala) .

4. Se citesc mai multe numere intregi, intr-o matrice. Se citeste de asemenea numarul unei linii. Sa se copieze linia respectiva intr-un vector.

5. Sa se permute doua linii ale unei matrici intre ele. Numerele celor doua linii, ca si matricea, se vor citi de la tastatura.

8. Sa se scrie un program ce verifica daca o matrice patrata NxN are toate elementele de sub diagonala principala nule.



Politica de confidentialitate | Termeni si conditii de utilizare



DISTRIBUIE DOCUMENTUL

Comentarii


Vizualizari: 1356
Importanta: rank

Comenteaza documentul:

Te rugam sa te autentifici sau sa iti faci cont pentru a putea comenta

Creaza cont nou

Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved