Fisiere

 Fisiere
Fisierul este o structura de date externa formata dintr-o multime ordonata de inregistrari , ordonarea facanduse dupa nr. inregistrarii . Fisierul este memorat pe un suport de memorare numit volum.

Prelucrarea datelor dintr-un fisier se refera la urmatoarele operatii:
-deschiderea fisierului
-exploatarea fisierului(adaugare, stergere)
-inchiderea fisierului
In limbajul c++ sunt implementate doua tipuri de fisiere:
-fisiere text (contin numai caractere reprezentate in codul ascii,iar inregistrarea reprezinta o linie de text)
-fisiere binare (inregistrarile sunt de acelasi tip sau sunt structuri de date organizate sub forma unor colectii de campuri)
Citirea datelor in fisier:
*Limbajul pascal:
-definirea identificatorului de fisier var id_f:text;
-asocierea dintre fisierul fizic si identificator: assign(id_f.’nume_f’);
-deschiderea fisierului pentru citire: reset(id_f);
-citirea variabilelor din fisiere se face cu ajutorul procedurilor: read si readln
read(id_f,id_v1[,idv2,..,id_vn]);
readln(id_f,id_v1[,idv2,..,id_vn]);
unde id_v1,id_v2,…,id_vn sunt identificatori de variabile elementare de orice tip,cu exceptia celor logice
-inchiderea fisierului:
close(id_f).
*Limbajul C++:
#include
-implementarea fisierelor de tip text:
fstream id_f([cale\\]nume_f,ios;;in); sau
ifstream id_f(„nume_f”);
Prin implementare,fisierul este edschis pentru citire
-citirea se face astfel:
id_f>>id_v1[>>id_v2>>   >>idvn];
unde id_v1,id_v2,….id_vn sunt identificatori de variabile elementare de orice tip
-inchiderea fisierului:
id_f.close();

Scrierea in fisiere text:
*Limbajul pascal:
-definirea identificatorului de fisier
var id_f:text;
-asocierea dintre fisierul fizic si identificator:
assign(id_f,’nume_f’);
-deschiderea fisierului pentru scriere:
rewrite(id_f);
-scrierea variabilelor in fisier se face cu ajutorul procedurilor write si writeln:
write(id_f,id1[,id2,…idn]);
writeln(id_f,id1[,id2,…idn]);
unde id1,id2,…,idn sunt identificatori de variabile elementare de orice tip sau de constante
-inchiderea fisierului:
close(id_f);
*Limbajul C++:
#include
-implementarea fisiereor de tip text:
fstream id_f([cale\\]”nume_f”); sau
ofstream id_f([cale\\]”nume_f”);
Prin implementare,fisierul este deschis pentru scriere.
-scrierea in fisier se face astfel:
id_f<<id_v1[<<id_v2<<…<<id_vn];<id_v1[><id_v2><id_vn];>
unde id_v1,id_v1,…id_vn sunt indentificatori de variabile de orice tip sau de constante
-inchiderea fisierului:
id_f.close();

Un fisier text poate fi creat din mediul de programare file-&amp;gt;New,salvat cu extensia dorita(exemplu:date.in) si folosit („citit”) in program.

Exemplu:
Din fisierul date.in(creat in directorul curent),se citesc variabilele reale a,b si c,separate prin cate un spatiu.
In fisierul date.out se vor afisa valorile citite, pe prima linie,cu cate un spatiu intre ele,iar pe urmatoarele linii,suma si produsul lor.
date in
3 4 5
date out
3 4 5
12
60

*Limbajul pascal:
var f, g: text;
a,b,c,s,p:real;
begin
assign(f,’date.in’);reset(f);
assign(g,’date.out’):rewrite(g);
read(f,a,b,c);
s: =a+b+c; prod: =a*b*c;
writeln(g,a,”,b,”,c);writeln(g,’Suma=’,s);
writeln(g,’Produsul=’,p);
close(f);close(g);
end.
*Limbajul C++:
#include
ifstream f(„date.in”);
ofstream g(„date.out”);
void main()
{float a,b,c,s,p;
f>>a>>b>>c;
s=a+b+c;
p=a*b*c;
<endl;>g<<a<<” „<<b<<” „<<c<<endl;
g<<„suma=”<<s<<endl;
g<<„produsul=”<<p<<endl;
f.close();
g.close();
}

probleme rezolvate:

 

1) Se citeste un fisier TEST ce contine numere intregi despartite prin spatiu sau ENTER. Sa se afiseze minimul si maximul din acel fisier.

#include <iostream>

using namespace std;

#include<fstream.h>

#include<values.h>

 

void main()

{

ifstream f(„C:\\test.txt”);

 

            /*

            ifstream f;

            f.open(„numar.txt”);

            */

 

if(!f) //sau f=NULL

            {

cout<<„Eroare la deschiderea fisierului!”<<endl;

return;

            }

int x,max=-MAXINT,min=MAXINT;

 

f.seekg(0,ios::beg); //ne pozitionam la inceputul fisierului

while(!f.eof())

            {

f>>x;

if (max<x)

max=x;

else if (min>x)

min=x;

            }

 

f.close();

cout<<„Maximul este: „<<max<<endl;

cout<<„Minimul este: „<<min<<endl;

 

int k;

cin>>k;

}

 

2) Se citeste un fisier text ce contine numere intregi despartite prin spatiu sau ENTER. Se cere a se calcula si afisa pe ecran suma tuturor valorilor numerice din fisier si numarul de elemente strict negative.

#include<iostream.h>

using namespace std;

#include<fstream.h>

#include<values.h>

 

void main()

{

ifstream f(„C:\\test.txt”); //sau: fstream f(„C:\\test.txt”,ios::in);

if(!f) //sau f=NULL

            {

cout<<„Eroare la deschiderea fisierului!”<<endl;

return;

            }

 

int x[100], n_neg=0, s=0, i;

f.seekg(0,ios::beg); //ne pozitionam la inceputul fisierului

i=0;

while(!f.eof())

            {

f>>x[i];

if(x[i]<0)

n_neg++;

s+=x[i++];

            }

 

f.close();

cout<<„Numarul elementelor negative: „<<n_neg<<endl;

cout<<„Suma tuturor elementelor: „<<s<<endl;

int k;

cin>>k;

 

}

 

3) Se citeste un fisier TEXT ce contine numere intregi despartite prin spatiu sau ENTER. Sa se afiseze minimul si maximul din acel fisier. Se va defini o clasa ptr numerele intregi din fisier.

#include<iostream.h>

using namespace std;

#include<fstream.h>

#include<values.h>

 

class numar

{

int n;

public:

int& retur();

friend istream& operator>>(istream&,numar&);

};

int& numar::retur()

{

return n;

}

istream& operator>>(istream& a,numar& b)

{

a>>b.n;

return a;

}

void main()

{

ifstream f(„C:\\test.txt „);

if(!f)

            {

cout<<„Eroare la deschiderea fisierului!”<<endl;

return;

            }

 

numar x;

int max=-MAXINT;

int min=MAXINT;

f.seekg(0,ios::beg);

while(!f.eof())

            {

f>>x;

if (max<x.retur())

max=x.retur();

else if (min>x.retur())

min=x.retur();

            }

 

cout<<„Minimul este: „<<min<<endl;

cout<<„Maximul este: „<<max<<endl;

 

int k;

cin>>k;

}

 

4) Se citeste un sir de la tastatura pana la intalnirea caracterului „$”. Dupa citire datele se scriu intr-un fisier text si se preiau din fisierul respectiv si se face contorizarea fiecarei vocale din fisier.

#include<iostream.h>

#include<fstream.h>

#include<stdio.h>

using namespace std;

void main()

{

char c;

int a=0,e=0,i=0,o=0,u=0;

ofstream f(„C:\\test.txt”);

 

if(!f)

            {

cout<<„Eroare la deschidere.”<<endl;

            }

 

do{

c=getchar();

switch(c)

                        {

case ‘a’: a++; break;

case ‘e’: e++; break;

case ‘i’: i++; break;

case ‘o’: o++; break;

case ‘u’: u++;

                        }

 

if(c!=‘$’)

f.put(c); //ar fi mers si f<<c;

            }while(c!=‘$’);

 

f.close();

ofstream g(„C:\\test.txt”);

if(!g)

            {

cout<<„Eroare la deschidere fisierului de citire.”<<endl;

            }

 

g<<„Vocala a se gaseste de : „<<a<<” ori.\n”;

g<<„Vocala e se gaseste de : „<<e<<” ori.\n”;

g<<„Vocala i se gaseste de : „<<i<<” ori.\n”;

g<<„Vocala o se gaseste de : „<<o<<” ori.\n”;

g<<„Vocala u se gaseste de : „<<u<<” ori.\n”;

g.close();

cout<<„Opratia de contorizare a vocalelor a reusit!”<<endl;

 

int k;

cin>>k;

 

}

 

5) Sa se sumeze valorile numerice dintr-un fisier text.

#include<iostream.h>

#include<string.h>

#include<stdlib.h>

#include<fstream.h>

#include<stdio.h>

using namespace std;

 

void main()

{

char a[255], separator[]=” ,”,cifre[]=„0123456789.+-„,*p;

double s=0;

fstream f(„C:\\test.txt”,ios::in);

 

if(!f)

            {

cout<<„Eoare la deschiderea fisierului.”<<endl;

return;

            }

 

while(!f.eof())

            {

f.getline(a,255,‘\n’);

p=strtok(a,separator); //se separa sirul folosind ca separator spatiul sau virgula

while (p)

                        {

if (strspn(p,cifre)==strlen(p))

s+=atof(p);

cout<<p<<„\n”;

p=strtok(NULL,separator);

                        }

            }

 

cout<<„Suma este: „<<s<<endl;

int k;

cin>>k;

}

 

Probleme propuse :

 

1.ÎN FIŞIERUL NUMERE.TXT SUNT MEMORATE PE MAI MULTE LINII, NUMERE ÎNTREGI (CEL MULT 100),NUMERELE DE PE ACEEAŞI LINIE FIIND DESPĂRŢITE PRIN CÂTE UN SPAŢIU, FIECARE NUMĂR AVÂND CELMULT 9 CIFRE. SĂ SE DETERMINE CELE MAI MICI DOUĂ VALORI DISTINCTE, FIECARE AVÂND EXACT DOUĂCIFRE, MEMORATE ÎN FIŞIER ŞI SĂ SE AFIŞEZE PE ECRAN ACESTE VALORI, DESPĂRŢITE PRINTR-UN SPAŢIU.DACĂ ÎN FIŞIER NU SE AFLĂ DOUĂ ASTFEL DE VALORI, PE ECRAN SE VA AFIŞA VALOAREA 0EXEMPLU: DACĂ FIŞIERUL NR1.TXTARE CONŢINUTUL ALĂTURAT,
5 10
3 -77 20
50 5 0 12 18 30
SE VA AFIŞA PE ECRAN, NU NEAPĂRAT ÎN ACEASTĂ ORDINE:-77 10

 

Se dau fisierele i1.txt si i2.txt care contin mai multe caractere.Determinati: a)daca cele doua fisiere au acelasi numar de caractere

b)daca au acelasi caractere

 

2.FIŞIERUL TEXT NUMERE.IN CONŢINE PE PRIMA LINIE UN NUMĂR NATURAL NENUL N (1≤N≤100) ŞI PE URMĂTOAREA LINIE N NUMERE REALE POZITIVE ORDONATE CRESCĂTOR, SEPARATE PRIN CÂTE UN SPAŢIU.A) SCRIEŢI UN PROGRAM C/C++ CARE CITEŞTE DIN FIŞIERUL NUMERE.IN NUMĂRUL NATURAL N, ŞI DETERMINĂ, UTILIZÂND UN ALGORITM EFICIENT DIN PUNCT DE VEDERE AL TIMPULUI DE EXECUTARE ŞI AL MEMORIEI UTILIZATE, NUMĂRUL MINIM DE INTERVALE ÎNCHISE DE FORMA [X,X+1], CU X NUMĂR NATURAL, A CĂROR REUNIUNE INCLUDE TOATE NUMERELE REALE DIN FIŞIER.

EXEMPLU: DACĂ FIŞIERUL NUMERE.IN ARE CONŢINUTUL:

2.3 2.3 2.8 5.7 5.7 6.3

ATUNCI SE AFIŞEAZĂ 3 (INTERVALELE [2,3], [5,6], [6,7] SUNT CELE 3 INTERVALE DE FORMA CERUTĂ CARE CONŢIN NUMERE DIN ŞIR).

 

3.Se dau fisierele i1.txt si i2.txt care contin mai multe caractere.Determinati: a)daca cele doua fisiere au acelasi numar de caractere

b)daca au acelasi caractere

 #include<iostream.h>

#include<fstream.h>

void main()

{char c,d;

ifstream f1(„i1.txt”);

ifstream f2(„i2.txt”);

while(!f1.eof() && !f2.eof() )

{f1.get(c);

f2.get(d);

}

if(f1.eof() && f2.eof() )

cout<<„au acelasi numar de caractere”;

else

cout<<„Diferite”;

if(!f1.eof() )

cout<<„I1 are mai multe caractere”;

else

cout <<„I2 are mai multe caractere”;

cin>>c>>d;

}

 

 

Matrici

Matrice

O matrice este o structura de date care are elementele de acelasi fel dispuse pe linii si pe coloane. Matricea are m linii si n coloane. O matrice poate arata astfel:

 

 

 

 

matrice             matrice2  matrice3

 

 

 

 

Matricile prezentate mai sus sunt MATRICI PATRATICE (numarul de linii este egal cu numarul de coloane), iar in C++ are anumite proprietati ajutatoare.

Matricea se declara folosind comanda: tip [numar max. de linii] [numar max. de coloane];. Exemplu: int x[10][5]. Am declarat o matrice de tip int cu maxim 10 linii si 5 coloane. Ca si la vectori, matricea declarata este …goala. Trebuie sa ii atribuim elemente fiecarui spatiu liber. Atribuirea se face aproximativ ca la vectori, doar ca aici vom avea doua repetitii, deoarece fiecarei linii ii corespunde n-1 coloane, etc, si vom avea nevoie de o variabila i, ce va reprezenta linia, si una j, ce va reprezenta coloana. Vom mai folosi inca 2 variabile, n si m, care vor reprezenta numarul actual de linii, respectiv coloane

 

Iata cum facem atribuirea in C++: for (i=0; i<n; i++)

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

cin>>x[i][j];         In aceasta mica aplicatie, vom citi de la tastatura o matrice, si o vom afisa pe ecran. Iata cum facem:

 

#include <iostream.h>

void main ()

{

int x[10][10], n, m, i, j;//m=matricea, n, m= nr actual de linii/coloane, i, j=linia, respectiv coloana

cout<<”Dati numarul de linii: “; cin>>n;//citim nr de linii

cout<<”Dati numarul de coloane: “; cin>>m; //citim nr. de coloane

cout<<”Introduceti elementele matricei: “<<endl;

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

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

{

cout<<”x[„<<i<<„][„<<j<<„]=”;

cin>>x[i][j]; //citim elementele matricei

}

cout<<”Afisam matricea: “<<endl;

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

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

{cout<<x[i][j]<<” “;  //si afisam fiecare linie, respectiv coloana, dar cu un mic spatiu intre elemente

cout<<endl; //dupa fiecare linie terminata, trebuie sa trecem la alt rand

}

Probleme rezolvate:

1.) Afisarea elementelor unei matrici

 

Se citeste o matrice patratica.Sa se afiseze elementele de pe diagonala secundara,elementele de pe diagonala principala,elementele de sub/desupra diagonalei secundare/principala.

#include<iostream.h>

 

 

main()

{

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

cin>>n;

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

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

cin>>a[i][j];

cout<<„diagonala principala”<<endl;

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

cout<<a[i][i]<<” „;

 

cout<<endl<<„diagonala secundara”<<endl;

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

cout<<a[i][n-1-i]<<” „;

 

cout<<endl<<„elementele de deasupra diagonalei principale”<<endl;

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

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

cout<<a[i][j]<<” „;

 

cout<<endl<<„elementele de sub diagonala principala”<<endl;

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

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

cout<<a[i][j]<<” „;

 

cout<<endl<<„elementele de deasupra diagonalei secundare”<<endl;

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

for(j=0;j<=n-i-2;j++)

cout<<a[i][j]<<” „;

 

cout<<endl<<„elementele de sub diagonala secundara”<<endl;

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

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

cout<<a[i][j]<<” „;

}

2.) afisare matrici instructiunea for

Se citeste n. Sa se afiseze urmatoarele forme. In exemplu n=4:

 

1)

 

1 2 3 4

1 2 3

1 2

1

 

#include<iostream.h>

main()

{

int i,j,n;

cout<<„n=”;cin>>n;

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

{

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

cout<<j<<” „;

cout<<endl;

}

}

 

2)

 

1 1 1 1

2 2 2

3 3

4

 

#include<iostream.h>

main()

{

int i,j,n;

cout<<„n=”;cin>>n;

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

{

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

cout<<i<<” „;

cout<<endl;

}

}

 

4)

 

4 3 2 1

4 3 2

4 3

4

 

#include<iostream.h>

main()

{

int i,j,n;

cout<<„n=”;cin>>n;

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

{

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

cout<<n-j+1<<” „;

cout<<endl;

}

}

3.) Scrieţi un program C/C++ care citeşte de la tastatură un număr natural n (1≤n≤100)şi apoi elementele unui tablou bidimensional cu n linii şi n coloane, care memorează numere naturale cu cel mult 9 cifre fiecare; programul afişează pe ecran acele valori din tablou care sunt strict mai mici decât toate elementele cu care se învecinează direct (aflate pe aceeaşi linie dar pe o coloană alăturată sau pe aceeaşi coloană dar pe o linie alăturată).Numerele afişate vor fi separate prin câte un spaţiu.

 

 

 

#include<iostream.h>

 

 

 

 

long a[101][101];

 

int n,i,j;

 

int verifica(int i,int j)

 

{

 

long x=a[i][j];

 

if((i+1<=n)&&

 

(x>=a[i+1][j]))return 0;

 

if((i-1>=1)&& (x>=a[i-1][j]))return 0;

 

if((j-1>=1)&& (x>=a[i][j-1]))return 0;

 

if((j+1<=n)&&(x>=a[i][j+1]))return 0;

 

return 1;

 

}

main()

 

{ do{cin>>n;}while(n<=1 ||n>=100);

 

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

 

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

 

cin>>a[i][j];

 

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

 

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

 

if (verifica(i,j)==1)

 

cout<<a[i][j]<<” „;

 

}

4.) Se considera o matrice An*m cu elemente numere intregi. Sa se determine linia (liniile) din matrice care contine cele mai multe elemente nenule.

 

#include<iostream.h>

main( )

{

int a[30][30],n,m,i,j,max,nr;

cout<<„Dati numarul de linii n = „;cin>>n;

cout<<„Dati numarul de coloane m = „;cin>>m;

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

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

{

cout<<„a[„<<i<<„,”<<j<<„]= „;

cin>>a[i][j];

}

cout<<endl<<„Matricea A are elementele:”<<endl;

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

{

for(j=1;j<=m;j++) cout<<a[i][j]<<” „;

cout<<endl;

}

max=0;

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

{

nr=0;

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

if(a[i][j]!=0) nr++;

if(max<nr) max=nr;

}

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

{

nr=0;

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

if(a[i][j]!=0) nr++;

if(max==nr) cout<<„Linia „<<i<<” are „<<max<<” elemente

nenule”<<endl;

}

}

5.) Sa se scrie un program care calculeaza transpusa unei matrici An*m

 

#include <iostream.h>

main( )

{

int n,m,i,j,a[30][30],b[30][30];

cout<<„Dati dimensiunile matricei „<<endl;

cout<<„Dati numarul de linii n = „;cin>>n;

cout<<„Dati numarul de coloane m = „;cin>>m;

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

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

{

cout<<„a[„<<i<<„,”<<j<<„]= „;

cin>>a[i][j];

}

cout<<„Elementele matricei A sunt: „<<endl;

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

{

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

cout<<a[i][j]<<” „;

cout<<endl;

}

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

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

b[j][i]=a[i][j];

cout<<„Matricea transpusa este „<<endl;

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

{

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

cout<<b[i][j]<<” „;

cout<<endl;

}

}

6.) Sa se scrie un program care calculeaza produsul a doua matrici bidimensionale A si B.

 

#include <iostream.h>

main()

{

int n,m,p,i,j,k,a[10][10],b[10][10],c[10][10];

cout<<„Dati numarul de linii n = „;cin>>n;

cout<<„Dati numarul de coloane m = „;cin>>m;

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

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

{

cout<<„a[„<<i<<„,”<<j<<„]= „;

cin>>a[i][j];

}

cout<<„Elementele matricei A sunt: „<<endl;

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

{

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

cout<<a[i][j]<<” „;

cout<<endl;

}

cout<<„Dati numarul de linii m = „;cin>>m;

cout<<„Dati numarul de coloane p = „;cin>>p;

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

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

{

cout<<„b[„<<i<<„,”<<j<<„]= „;

cin>>b[i][j];

}

cout<<„Elementele matricei B sunt: „<<endl;

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

{

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

cout<<b[i][j]<<” „;

cout<<endl;

}

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

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

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

c[i][j]+=a[i][k]*b[k][j];

cout<<„Elementele matricei produs „<<endl;

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

{

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

cout<<c[i][j]<<” „;

cout<<endl;

}

}

7.) Scrieti un program care construieste in memorie un tablou t cu n linii si n coloane, cu elemente numere intregi, astfel incat pe diagonala principala sa existe numai elemente egale cu 1, elementele de pe cele doua semidiagonale paralele cu diagonala principala si alaturate diagonalei principale sa fie tot egale cu 2, elementele de pe urmatoarele doua semidiagonale sa fie egale cu 3 etc.Valoarea lui n se citeste de la tastatura.

 

#include<iostream.h>

int a[20][20],nr[30],i,j,n,k,m,max=0;

main()

{

cout<<„n=”;cin>>n;

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

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

if(i==j) a[i][j]=1;

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

{k=2;

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

{a[i][j]=k;k=k+1;}

}

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

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

a[j][i]=a[i][j];

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

{

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

cout<<a[i][j]<<” „;

cout<<endl;

}

}

8.) Se da o matrice cu m lini * n coloane, ale carei elemente sunt cifre de 0 si 1. Sa se afiseze indicii liniei (liniilor) pe care se afla cele mai multe valori de 1.

 

#include<iostream.h>

int a[20][20],nr[30],i,j,n,m,max=0;

main()

{

cout<<„n=”;cin>>n;

cout<<„m=”;cin>>m;

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

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

{

cout<<„a[„<<i<<„][„<<j<<„]=”;

cin>>a[i][j];

}

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

nr[i]=0;

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

{

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

nr[i]=nr[i]+a[i][j];

if(max<nr[i]) max=nr[i];

}

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

if(nr[i]==max) cout<<i<<” „;

}

9.) Se da o matrice cu m lini * n coloane.Sa se memoreze intr-un vector b sumele elementelor de pe fiecare lini a matricii ( b[i] va reprezenta suma elementelor de pe linia i in matrice)

 

#include<iostream.h>

int a[20][20],b[30],i,j,n,m;

main()

{

cout<<„n=”;cin>>n;

cout<<„m=”;cin>>m;

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

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

{

cout<<„a[„<<i<<„][„<<j<<„]=”;

cin>>a[i][j];

}

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

b[i]=0;

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

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

b[i]=b[i]+a[i][j];

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

cout<<b[i]<<” „;

}

10.) O matrice patratica cu n linii *  n coloane se numeste triunghiulara superior daca toate elementele aflate sub diagonala principala sunt nule. Realizati un program care verifica daca matricea este triunghiulara superior.

 

#include<iostream.h>

int a[20][20],i,j,n,g;

main()

{

cout<<„n=”;cin>>n;

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

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

{

cout<<„a[„<<i<<„][„<<j<<„]=”;

cin>>a[i][j];

}

g=1;

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

 

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

if(a[i][j]) g=0;

if(g==0)

cout<<„nu este triunghiulara superior”;

else cout<<„este triunghiulara”;

}

Probleme propuse:

 

1.)  Se citesc elementele unei matrici cu m linii si n coloane.  Sa se calculeze produsul elementelor impare din matrice.

2.)  Se citeste o matrice. Cate componente prime are matricea?

3.)  Se citeste o matrice. Sa se calculeze media aritmetica a elementelor pare

4.)  Se da o matrice cu m linii si n coloane. Sa se calculeze suma elementelor de pe fiecare linie a matricei.

5.)  Se da o matrice cu m limii si n coloane. Sa se calculeze suna elementelor de pe marginea matricei.

 

 

 

TABLOURI UNIDIMENSIONALE-VECTORI

TABLOURI UNIDIMENSIONALE (VECTORI)

Structura de date este o colectie de date inzestrata cu informatii structurale care permit identificarea si selectia componentelor.

Componentele unei structuri de date pot fi identificate si selectate fie prin numele, fie prin intermediul relatiilor structurale. Cea mai simpla relatie structurala este pozitia fiecarei componente in cadrul structurii.

Asupra unei structuri de date se pot aplica mai multe tipuri de operatii :vizualizarea elementelor structurii sub diferite forme, actualizarea(adaugarea, modificarea sau stergerea unei componente), imbogatirea structurala(prin adaugarea unor informatii de legatura) sortare(aranjarea componentelor intr-o anumita ordine stabilita de un anumit criteriu de ordonare.

Din punct de vedere al continutului, structurile pot fi:

-omogene(toate componentele structurii sunt de acelasi tip)

-neomogene(componentele structurii sunt de tipuri diferite)

in functie de modul in care sunt memorate structurile de date se impart in doua mari categorii:

-Structuri interne, sunt create in memoria interna RAM a sistemului, si au un caracter temporar, datorita faptului ca memoria interna este volatila.

-Structuri externe, sunt depozitate pe un suport de memorie externa (hard-disk.floppy-disk), avand astfel un caracter permanent.

TABLOURI

Un sir de elemente de acelasi tip, in care conteaza ordinea elementelor, se numeste vector sau tablou unidimensional.

Un tablou(array) este o structura formata dintr-un numar fixat de componente de acelasi tip, numit tip de baza. Numarul de componente este determinat de numarul de valori ale indicilor, care sunt obligatoriu tipuri ordinale. Pozitia unui element se mai numeste si indicele sau rangul elementului, iar elementele se mai numesc si componente ale vectorului. Sintaxa declararii tipului tablou este :

type_nume=array[tip_ordinal1,tip_ordinaln] of tip_oarecare

unde:

n-reprezinta dimensiunea tabloului

tip_ordinal1,tip_ordinaln reprezinta tipul indicilor tabloului

tip_oarecare reprezinta tipul componentelor tabloului

!Obervatii.In cazul in care tip_ordinal este unul din tipurile intregi,este obligatoriu sa folosim subdomeniile lui

Exemplu: type vector=array[1..100] of integer;

var v:vector;

variabila v este un tablou de dimensiune 1 cu 100 componente intregi identificate prin indici din subdomeniul 1..100.

Aici tipul ordinal este subdomeniu al tipului integer, iar tipul oarecare este ineger. Componentele unui tablou sunt memorate pe zone de memorii consecutive. Adresarea unei componente a tabloului se face prin indice (o valoare a tipului ordinal) care se specifica dupa numele tabloului, intre paranteze drepte.

Tipul tablou array[tip_ordinal] of tip poate ramane si anonim. Astfel, putem scrie ceva de genul type vector=array si var x:vector pe scurt prin var x:arrayAdica, tipul tablou ramane anonim, nu trebuie neaparat sa primeasca un nume(aici cel de vector).

tip_ordinal si tip pot fi atat tipuri anonime, cat si identifictori de tip.

Limbajul Turbo Pascal nu ne permite sa declaram o variabila de tip array cu un numar variabil de componente. De multe ori nu stim cate componente vor fi necesare pentru o anumita rulare a programului. Orice problema in care se lucreaza cu variabila de tip array si in care se cere prelucrare a n componente constituie un exemplu in acest sens .In acest caz ideea este sa rezervam un numar maxim de componente, atat cat este necesar pentru rulare atunci cand n este maxim. la fiecare rulare a programului se cere numarul de componente. De cele mai multe ori o parte dintre cele rezervate raman neutilizate.

Prin declararea unui vector vom intelege numarul maxim de elementele acestuia. Numarul elementelor efective folosite, care difera de la o executie la alta se numeste numar real (efectiv de elemente).

‘Vizualizarea’ tuturor elementelor pe rand si prelucrare acestora se numeste parcurgere. Parcurgerea intr-un ciclu pozitiile elementelor din vector i=1,2,3,,n si pentru fiecare valoare a lui i, ‘vizitam’ si prelucram elementul v[i], adica elementul aflat pe pozitia i: secventa de program

for i:=1 to n d0

<prelucrarea v[i]

urmarirea ciclului pas cu pas

Pasul 1:i:=1,prelucreza v[1]

Pasul 2:i:=2,prelucreza v[2]

––––––––––––-

Pasul n:i:=n,prelucreza v[n]

OPERATII CU VECTORI

O variabila de tip tablou nu poate fi citita sau scrisa in intregime. In Turbo Pascal7.0 Se pot face atribuiri intre variabile de acelasi tablou. Dar, e preferabil sa se lucreze pe componente .Cu componentele unui tablou Se pot face toate operatiile ce Se pot face cu orice variabila de acel tip (afisare, citire, atribuire etc)

1.citirea unui vector

Aceasta inseamna citirea numarului n de componente, intr-un ciclu for, de pilda. De fapt avem de citit componenta numarului i, cu i de la 1 la n. Deci putem scrie:

for i:= 1 to n do

begin

write(‘dati x[‘,x,’]=’);

readln(x[i]);

end;

2.Srierea unui vector

cand trebuie sa afisam vectorul, adica toate componentele sale efective numarul acestora este cunoscut. Afisarea se realizeaza ciclic si poate fi astfel:

-fiecare element pe un rand(folosita mai ales cand avem vectori si siruri de caractere)

for i:1to n do

writeln(x[i]);

-toate elementele pe acelasi rand, despartite de virgula si/sau spatii(in cazul valorilor numerice)

for i:=1 to n do

write(x[i],’,’);

writeln;

3.inversarea unui vector in alt vector

vom inversa vectorul x in vectorul y, de acelasi tip cu x, deci vom pune in componenta y[1] pe x[n],in componenta y[2] pe x[n-1],im componenta y[n] pe x[1]

for i :=1 to n do

y[i]:=x[n+1-i]

4.inversarea unui vector in el insasi

Va trebui sa schimbam prima componenta cu ultima,pe a doua cu penultima s.a.m.d.,pana la mijloc vom intelege n div 2 indiferent daca n este par sau impar.Asadar,va trebui sa parcurgem vectorul pana la n div 2 intershimband pe x[i] cu x[n+1-i];

for i:=1 to n do div 2 do

begin

aux:=x{i];

x[i]:=x [n+1-i];

x[n+1-i]:=aux;

end;

5.determinarea elementului minim dintr-un vector

Aceasta problema se rezolva astfel:consideram minim primul element,apoi parcurgem restul vectorului si,ori de cate ori gasim un element mai mic actualizam minimul la valoarea acelui element

minim:=x[1]

for i:=2 to n do

if x[i]<x[1] then minim:=x[i];

In acest moment,la sfarsitul ciclului,variabila minim(de acelasi tip ca si componentele x) contine cel mai mic element din vector

6.determinarea elementului maxim dintr-un vector

Se actualizeaza maximul intr-o variabila max.Algoritmul este asemanator cu cel de minim.Initializam maximul cu primul element.Parcurgem intr-un ciclu pozitiile celorlalte elemente i pentru fiecare element v[i],daca v[1] mai mic decat v[i],atunci v[i] devine noul maxim.

7.determinarea simultana a minimului si maximului dintr-un vector

Pentru a realiza aceste lucruri simultan se procedeaza dupa cum urmeaza:

minim:=x[1];maxim:=x[1];

for i:= 2 to n do

begin

if x[i]<minim then minim:=x[i]

if x[i]>maxim then maxim:=x[i]

end;

Evident daca vectorul contine doar un singur element acela va fi si maxim si minim

8.insumarea componentelor unui vector de numere

Suma componentelor unui vector se calculeaza ca orice suma,se pleaca cu suma nula,apoi la fiecare pas i (i de la 1 la n),suma creste cu elementul curent,care este x[i].

suma:=0;

for i:= 1 to n do

suma:=suma+x[i];

9.Afisarea elementelor pare dintr-un vectorde numere intregi.

sa consideram var x:=array{1..20] of integer,si var n,i:integer.Vom parcurge vectorul si vom afisa doar numerele pare:

for i:=1 to n do

if not odd(x[i]) then

writeln(x[i])

10.afisarea elementelor impare de pe pozitii pareale unui vector de intregi

Vectorul are componentele intregi.Consideram aceleasi variabile ca si la problema anterioara.Daca spunem pozitie trebuie sa ne gandimla indice,iar dac spunem element trebuie sa ne gandim la elementul de pe pozitia i,deci la x[i].Asadar va trebui sa avem not odd )i)si oddx[i]

for i:=1 to ndo

if (not odd[i]) and odd(x[i])

writeln(x[i])

11.numararea elementelor negative si a celor pozitive dintr-un vector de numere.

Fie NN Si NP cele doua numere.Acestea se comporta ca doua contoare,initial nule,De fiecare data cand gasim in sirul de numere un element negativ se incrementeazaNN,NN:=NN+1,altfel NP.

NN=0;NP=0;

for i:=1to n do

if x[i]<0 then inc(NN)

else inc(NP);

writeln(‘Exista’,NN,’elemente negative’);

writeln(‘Exista,’NP’,elemente pozitive’);

12cautare secventiala a unui element intr-un vector

Aceasta problema necesita pentru a putea fi reolvata si o parcurgere a vectorului de la prima pozitie pana la sfarsit sau pana s-a gasit elementul cautat.Gasirea elementului cautat este marcat de o variabila logica gasit,pozitionata initial pe fals.Fie x vectorul,iar a elementul cautat

gasit:=false;

i:=1

while(i:=n) and (not gasit) do

if x[i]:=a then

gasit:=true

else

inc(i)

12.inserarea unui element dintr-un vector.

sa inseram,pe poozitia p intr-un vector,un element nou m.Pentru aceasta vom deplasa elementele de pe pozitiile de la p la n,unde n ete numarul de elemente ale vectorului,cu o pozitie mai incolo spre dreapta.Deplasare se vaface de la pozitia ultima inspre pozitia p.In final vom pune elementul m pe pozitia p.Fireste numarul de elemnte ale vectorului vor creste cu o unitate:n:=n+1

for i:=n+1 downto p+1 do

x[i]:=x[i-1];

x[p]:=m;

n:=n=1;

Ordonare vectorilor

Metoda selectiei directe.

Consideram ca avem un vector de elemente comparabile intre ele, sa ordonam crescator elementele vectorului. Metoda este urmatoarea il punem pe cel mai mai in fata ,apoi procedam la fel cu restul elementelor .Aceasta metoda se implementeaza astfel: vom compara pe x[1] cu toate elementele de dupa el. Daca gasim un element x[j] care e mai mic decat x[1],atunci interschimbam pe x[1] cu x[j] .Cand am ajuns la ultimul element inseamna ca pe prima pozitie va fi sigur cel mai mic element din vector(noul x[1]) in continuare, ne ocupam doar de elementele de pe pozitia doi incolo si vom parcurge vectorul pana la x[n] ca si in primul caz. Aceste traversari ale vectorului ,insotite de eventualile interschimbari au loc pana la penultima pozitie, cand mai are loc doar o singura comparare, intre x[n-1] si x[n]

Metoda bubble-sort

se compara fiecare element x[i] cu elementul de pe pozitia succesoare, deci cu elementul x[i+1].Daca elementele nu sunt puse in ordine crescatoare, se vor schimba intre ele. Procesul se repeta pana cand la o traversare a lui x nu mai are loc nici o interschimbare

Sortare prin numarare

Pentru fiecare element din vector se numara cate elemente mai mici decat el exista in vector.

program ordonare alfabetica;

var x:array[1..20] of string;

i,j,n:integer;aux:string;

begin

write (‘cati elevi sunt?=’);

readln(n) ;

for i:=1 to n do;

begin

write(‘nume elev x ‘,i,’:’);

readln(x[i]);

end;

for i:=1 to n-1 do

for j:=i+1 to n do

if x[i]<x[j] then

begin

aux:=x[i];x[i]:=x[j];x[j]:=aux;

end;

writeln (‘ordinea alfabetica este:’);

for i:= 1 to n do writeln(i,”,x[i]);

readln;

end.

Interclasarea a doi vectori

Presupunem ca dispunem de doi vectori( eventual de dimensiuni diferite) ordonati, sa obtinem vectorul reuniune ordonat. Fie a si b doi vectori, iar in vectorul c sa punem rezultatul. Vom proceda in felul urmator

1 vom compara primul element din vectorul a cu primul element din vectorul b si pe cel mai mic il vom pune in c, eliminandu-l din vectorul de unde provine;

2 procesul se repeta pana cand se epuizeaza unul din vectori;

3 Se copiaza la sfarsitul lui c toate elementele din vectorul ramas neterminat, care fireste vor fi deja ordonate, cat si mai mari ca ultimul element din vectorul care s-a epuizat primul.

Cautare binara

Cautarea binara se foloseste pentru a determina existenta unui element intr-un vector. Daca elementele vectorului sunt deja ordonate crescator sau descrescator, atunci procesul cautarii poate deveni mai rapid, daca se aplica cautarea binara .

Se compara elementul cauta cu elementul din mijloc si, daca ele nu coincid, se va trece la cautare doar in acea jumatate a vectorului in care in mod logic, elementul cautat s-ar putea gasi, in stanga sau in dreapta, dupa cum elementul din mijloc este mai mare sau mai mic decat elementul cautat s.a.m.d. pana cand domeniul in care trebuie sa mai caute sa terminat.

PROBLEME REZOLVATE VECTORI                                                     `1.Sa se scrie un program care afiseaza elementul minim par al unui sir.

#include<iostream.h>
void main()
{
int i,n,v[20],min,gasit=0;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
cin>>v[i];
for(i=1;i<=n && !gasit;i++)
if(v[i]%2==0)
{
min=v[i];
gasit=1;
}
for(i=1;i<=n;i++)
if(v[i]%2==0 &&v[i]<min)
min=v[i];
cout<<min;
}

2.Se citeşte un vector cu n componente numere întregi. Să se afişeze doar numerele impare aflate pe poziţii pare din vector

#include<iostream.h>
void main()
{
int n,i,d,v[20];
cout<<„n=”;cin>>n;
for(i=0;i<n;i++)
{
cout<<„v[„<<i<<„]=”;
cin>>v[i];
}
for(i=0;i<n;i++)
if((i%2==0)&&(v[i]%2==1))
cout<<v[i]<<” „;
}

3.Se citeste un vector cu n componente nr intregi. Sa se adauge in vector pe pozitia poz(citita de la tastatura), un nou element avand ca valoare numarul elementelor negative din vector.Sa se afiseze vectorul rezultat in urma adaugarii.

#include<iostream.h>
void main()
{
int i,n,v[20],nr=0,k;
cout<<„n=”;cin>>n;
cout<<„poz=”;cin>>poz;
for(i=1;i<=n;i++) cin>>v[i];
for(i=1;i<=n;i++)
if(v[i]<0) nr++;
for(i=n+1;i>=poz;i–)
v[i+1]=v[i];
v[poz]=nr;
for(i=1;i<=n+1;i++) cout<<v[i]<<” „;
}

4. Se citeste un vector de componente numere intregi pozitive.Sa se afiseze numarul care se repeta de cel mai multe ori in vector.

#include<iostream.h>
void main()
{
int aux,n,i,j,nr,m,max,y,a[20],v[20];
cout<<„n=”;cin>>n;
for (i=1;i<=n;i++)
{cout<<„a[„<<i<<„]=”;cin>>a[i];}
aux=-1;
max=a[1];
for(i=2;i<=n;i++)
if(max<a[i]) max=a[i];
m=max;
for(i=1;i<=m;i++) v[i]=0;
for(i=1;i<n;i++)
{nr=1;
y=a[i];
if(y!=aux)
for(j=i+1;j<=n;j++)
if(y==a[j])
{
nr++;a[j]=aux;
}
v[y]=nr;
}
max=v[1];j=1 ;
for(i=2;i<=m;i++)
if(max<v[i]){max=v[i];j=i;}
cout<<„numarul „<<j<<” se repeta de „<<max<<” ori”;
}

5. Se citesc doi vectori cu componente numere naturale.Fiecare vector are elementele sortate crescator. Se cere sa se construiasca un al treilea vector care contine elementele celor doua in ordine crescatoare.

#include<iostream.h>
void main(void)
{
int i,n,j,m,k;
float x[50],y[50],z[100];
cout<<„Dati numarul de elemente ale vectorului x „;cin>>n;
for(i=1;i<=n;i++)
{
cout<<„x[“<<i<<”]= „;
cin>>x[i];
}
cout<<„Dati numarul de elemente alevectoruluii y „;cin>>m;
for(j=1;j<=m;j++)
{
cout<<„y[“<<j<<”]= „;
cin>>y[j];
}
i=1;j=1;k=0;
while( (i<=n) && (j<=m) )
if(x[i]<y[j]){k++;z[k]=x[i];i++;}
else {k++;z[k]=y[j];j++;}
if(i<=n) for(j=i;j<=n;j++) {k++;z[k]=x[j];}
else for(i=j;i<=m;i++) {k++;z[k]=y[i];}
cout<<endl<<„Vectorul z cu elementele interclasate este „;
for(i=1;i<=k;i++) cout<<z[i]<<” ”;
}


probleme propuse spre rezolvare


1.Se citeste un vector a cu cel mult 9 valori cifre. Sa se afiseze pe randuri separate permutarile circulare ale vectorului.
Ex. Pentru vectorul 1 3 5 4 se va afisa:
3 5 4 1
5 4 1 3
4 1 3 5
1 3 5 4

2.Sa se afiseze elementele prime ale unui sir de n numere intregi citite de la tastatura .
3.Find dat un vector v cu n elemete numere intregi,sa se afiseze de cate ori gasim doua elemente consecutive egale intre ele.

4.Fiind dat un vector v cu n elemente numere intregi  sa se construiasca alti doi vectori,primul  va contine doar componente pare iar al doilea numai componente impare.

5.Se dau doua multimi definite prin intermediul vectorilor u si v,cu m respectiv n elemente.Sa se memoreze in vectorul w  si apoi sa se afiseze reuniunea celor doua multimi.

6.Se citeste un vector a cu n elemente numere intregi. Afisati valoarea minima din vector si pozitiile pe care apare ea. Elementele vectorului sunt numerotate de la 1 la n.

7.Se citeste un vector a cu n elemente numere intregi. Stergeti toate aparitiile primului element si afisati vectorul ramas.
Exemplu: n=6 si vectorul 3 4 5 3 3 6
se afiseaza 4 5 6

8.Se citeste un vector a cu n elemente intregi. Sa se transforme in multime prin eliminarea elementelor care se repeta.

9.Se citeste un vector a cu n elemente numere intregi. Sa se elimine un numar minim de elemente din vectorul a astfel incat elementele ramase sa fie ordonate strict crescator.
Primul element din vector nu se elimina.

10. Se citeste un vector a cu n elemente numere naturale. Sa se afiseze pe linii separate elementele vectorului grupate in functie de cifra cea mai semnificativa (prima cifra).
Exemplu: n=5 si vectorul 65 32 333 106 66 se vor afisa:
106
32 333
65 66

ALGORITMI

ALGORITMI. NOTIUNI GENERALE

Algoritmul este conceptul fundamental al informaticii. Orice echipament de calcul poate fi considerat o masina algoritmica.
Într-o definitie aproximativa algoritmul este un set de pasi care defineste modul în care poate fi dusa la îndeplinire o anumita sarcina. Exemplu de algoritm: algoritmul de interpretare a unei bucti muzicale (descris în partitura).

 DEFINITII SI CARACTERISTICI

Definitie:
Algoritmul este un set finit de pasi executabili, descrisi fara echivoc, care solutioneaza o clasa de probleme.

Proprietatile fundamentale ale algoritmilor:

  • Caracterul finit: orice algoritm bine proiectat se termina într-un numar finit de pasi;
  • Claritatea : algoritmul trebuie descris clar, fara ambiguitati
  • Generalitatea: orice algoritm trebuie sa rezolve toate problemele dintr-o clasa de probleme;
  • Completitudinea-presupune tratarea cazurilor speciale (a exceptiilor) unei probleme.
  • Realizabilitatea: orice algoritm trebuie sa poata fi codificat într-un limbaj de programare;
  • Eficienta- se refera la timpul de executie (in care sunt folosite resursele calculatorului: memorie, procesor) si la spatiul de memorie utilizat. Un algoritm este cu atat mai eficient cu cat spatiul de memorie utilizat este mai mic si numarul de operatii mai putine.

Nerespectarea acestor caracteristici generale conduce la obtinerea de algoritmi neperformanti, posibil infiniti sau nerealizabili.

Observatia1. Nu orice problema admite un algoritm de rezolvare.
Observatia2. Doi agoritmi sunt echivalenti cand pentru aceleasi date de intrare se obtin aceleasi date de iesire.

Etapele rezolvarii unei probleme:

-stabilirea cerintelor problemei
-stabilirea datelor de intrare si a datelor de iesire
-stabilirea unui rationament general de rezolvare a problemei
-reprezentarea algoritmului problemei intr-o forma simpla si clara
-verificarea rationamentului pentru valori concrete
-implementarea algoritmului intr-un limbaj de programare

Probleme rezolvate:

Se citeste un numar natural nenul n. Sa se se calculeze urmatoarele sume:
a) s = 1+2+..+n
b) s = 1^2 + 2^2 + … + n^2
c) s = 1^3 + 2^3 + … + n^3
d) s = 1*2 + 2*3 + .. + n*(n+1)

#include<iostream.h>
void main()
{
int n,s1=0,s2=0,s3=0,s4=0,i;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
s1=s1+i;
cout<<s1<<endl;
for(i=1;i<=n;i++)
s2=s2+i*i;
cout<<s2<<endl;
for(i=1;i<=n;i++)
s3=s3+i*i*i;
cout<<s3<<endl;
for(i=1;i<=n;i++)
s4=s4+i*(i+1);
cout<<s4;
}

Se citeste n. Sa se afiseze urmatoarele forme. In exemplu n=4:

forme_for

1)

* * * *
* * *
* *
*

#include<iostream.h>
void main()
{
int n,i,j;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
{
for(j=(n-i)+1;j>=1;j–)
cout<<‘*'<<” „;
cout<<endl;
}
}

2)

1 2 3 4
5 6 7 8
9 10 11 12
13 14 15 16

#include<iostream.h>
void main()
{
int n,i,j;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
{
for(j=n*(i-1)+1;j<=n*i;j++)
cout<<j<<” „;
cout<<endl;
}
}

3)

1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4

#include<iostream.h>
void main()
{
int n,i,j;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
{
for(j=1;j<=n;j++)
cout<<j<<” „;
cout<<endl;
}
}

4)

4 3 2 1
1 2 3 4
4 3 2 1
1 2 3 4

#include<iostream.h>
void main()
{
int n,i,j;
cout<<„n=”;cin>>n;
for(i=1;i<=n;i++)
{
if(i%2==0)
{
j=1;
while(j<=n)
{
cout<<j<<” „;
j++;}
cout<<endl;
}
else
{
j=n;
while(j>=1)
{
cout<<j<<” „;
j–;
}
cout<<endl;}
}
}

Sa se afiseze primele n numere naturale impare

#include<iostream.h>
void main()
{
int n,i=1;
cout<<„n=”;cin>>n;
while(i<=2*n)
{
cout<<i<<” „;
i=i+2;
}
}

Sa se afiseze primele n numere naturale impare

#include<iostream.h>
void main()
{
int n,i=1;
cout<<„n=”;cin>>n;
while(i<=2*n)
{
cout<<i<<” „;
i=i+2;
}
}

Se citesc de la tastatura `n` numere naturale. Sa se afiseze la monitor toti divizorii fiecarui numar x in parte . Daca x este prim afiseaza „x este nr prim”

#include<iostream.h>
void main()
{
int x,d,g,n;
cout<<„n=”;cin>>n;
for(int i=1;i<=n;i++)
{
g=0;
cout<<„x=”;
cin>>x;
for(d=2;d<=x/2;d++)
if (x%d==0) {cout<<d<<endl; g=1; }
if(g==0) cout<<x<<” numar prim”<<endl;
}
}

PROBLEME PROPUSE

1.Se citeste un vector A cu n elemente numere naturale distincte, ordonate crescator. Se citeste apoi un numar natural k. Sa se determine pozitia pe care apare k in vectorul A si numarul de pasi facuti de program pana la gasirea lui. Daca numarul k nu se afla in vector se va afisa acest lucru impreuna cu numarul de pasi facuti de program.

2.Se citesc 2 vectori A si B cu n si respectiv m elemente numere intregi. Elementele vectorilor sunt ordonate crescator. Sa se construiasca un vector C care sa contina elementele din A si B ordonate crescator.

3.se citeste un numar natural de maxim 9 cifre. Sa se afiseze cea mai mare si cea mai mica cifra din numar.

Metoda bulelor
4e citeste un vector A cu n elemente numere intregi. Sa se ordoneze crescator elementele vectorului folosind metoda bulelor.

5.Se citeste un numar natural cu cel mult 4 cifre. Sa se calculeze cel mai mic multiplu par al numarului obtinut din prima si ultima cifra a numarului citit.
Ex. pentru 1265 se obtine 30 (2*15)

6.Se citeste un numar natural n cu cel mult 9 cifre. Sa se determine cea mai mare cifra a lui n si de cate ori apare ea in n.

7.Se citeste un numar natural n cu cel mult 9 cifre. Sa se calculeze numarul obtinut din cifrele lui pare aflate pe pozitii impare, numararea pozitiilor cifrelor incepand cu cifra cea mai semnificativa.
Ex: daca n=2346561 rezulta 24

8Se considera urmatorul sir de numere: 1, 1, 2, 2, 1, 2, 3, 3, 3, 1, 2, 3, 4, 4, 4, 4, … .Pentru un numar natural n de maxim 4 cifre sa se scrie un program eficient ca timp de executie si utilizare a memoriei care sa determine elementul de pe pozitia n din sirul definit mai sus.

9.Se citesc 2 numere naturale a si b. Sa se afiseze cel care mai multe cifre 1 in scrierea in baza 2.

10.Se se afiseze primele n numere prime, n numar natural citit de la tastatura.