Sunteți pe pagina 1din 10

Transformarea structurilor repetitive

CAT TIMP -> REPETA

cat timp (expresie logica) executa


instructiune
sfarsit cat timp
<=>
daca (expresie logica) atunci
repeta
instructiune
pana cand (NOT expresie logica)
sfarsit daca

REPETA -> CAT TIMP

repeta
instructiune
pana cand (expresie logica)
<=>
instructiune
cat timp (NOT expresie logica) executa
instructiune
sfarsit cat timp

CAT TIMP -> EXECUTA CAT TIMP

cat timp (expresie logica) executa


instructiune
sfarsit cat timp
<=>
daca (expresie logica) atunci
executa
instructiune
cat timp (expresie logica)
sfarsit daca

EXECUTA CAT TIMP -> CAT TIMP

executa
instructiune
cat timp (expresie logica)
<=>
instructiune
cat timp (expresie logica) executa
instructiune
sfarsit cat timp
PENTRU -> CAT TIMP

A)pentru i <- li,ls,pas executa


instructiune
sfarsit pentru
<=>
i <- li
cat timp i<=ls executa
instructiune
i <- i+pas
sfarsit cat timp

B)pentru i <- ls,li,-pas executa


instructiune
sfarsit pentru
<=>
i <- ls
cat timp i>=li executa
instructiune
i <- i-pas
sfarsit cat timp

CAT TIMP -> PENTRU


nu este intotdeauna posibil (este necesara instructiune de forma i <- i+pas sau i <- i-pas)

PENTRU -> REPETA

A)pentru i <- li,ls,pas executa


instructiune
sfarsit pentru
<=>
i <- li
daca li<=ls atunci
repeta
instructiune
i <- i+pas
pana cand (i>ls)
sfarsit daca

B)pentru i <- ls,li,-pas executa


instructiune
sfarsit pentru
<=>
i <- ls
daca ls>=li atunci
repeta
instructiune
i <- i-pas
pana cand (i<li)
sfarsit daca

REPETA ..PANA CAND -> EXECUTA..CAT TIMP (la traducere in C++)

repeta
instructiune
pana cand (expresie logica)
<=>
executa
instructiune
cat timp (NOT expresie logica)

ALGORITMI ELEMENTARI

1. PRELUCRAREA NUMERELOR NATURALE NENULE <= n


cin>>n;
for (i=1;i<=n;i++)
{
//prelucrarea lui i;
}

2. CITIREA SI PRELUCRAREA A n NUMERE


cin>>n;
for (i=1;i<=n;i++)
{
cin>>x;
//prelucrarea lui x;
}

3. PRELUCRAREA NUMERELOR INTREGI DIN INTERVALUL [a,b] (a<=b)


cin>>a>>b;
for (i=a;i<=b;i++)
{
//prelucrarea lui i;
}

4. CITIREA SI PRELUCRAREA A n PERECHI DE NUMERE


cin>>n;
for (i=1;i<=n;i++)
{
cin>>x>>y;
//prelucrarea perechii x,y;
}
5. CITIREA A n NUMERE SI PRELUCRAREA PERECHILOR DE NUMERE CONSECUTIV CITITE IN
SIR
cin>>n>>x;
for (i=2;i<=n;i++)
{
cin>>y;
//prelucrarea perechii x,y;
x=y;
}
N= 4 12,43,2,9 => (12,43), (43,2),(2,9)

6. PRELUCRAREA DIVIZORILOR PROPRII AI UNUI NUMAR


cin>>n;
for (d=2;d<=n/2;d++)
if (n%d==0)
// prelucrarea lui d;

7. TESTAREA PROPRIETATII DE NUMAR PRIM


cin>>n;
OK <- 1 // pp ca n este numar prim
for (d=2;d<=n/2;d++) //for (d=2;d*d<=n;d++)
if (n%d==0)
OK <- 0; //n nu este prim deoarece are cel putin un divizor propriu
if (OK==1 && n>1) // prelucrarea lui n ca numar prim
else // prelucrarea lui n ca numar neprim

8*. PRELUCRAREA DIVIZORILOR UNUI NUMAR (eficient)


cin>>n;
for (d=1;d*d<n;d++)
if (n%d==0)
// prelucrarea lui d si a lui n/d;
if (d*d==n)
// prelucrarea lui d (pentru patrate perfecte)

9. PRELUCRAREA CIFRELOR UNUI NUMAR


cin>>n;
while (n>0)
{
c=n%10;
n=n/10;
// prelucrarea cifrei c; - ogliditul lui n : o=o*10+c;
- determinarea unui numar x care are cifre din n, in aceeasi
ordine ca in n : x=x+p*c; p=p*10;
}

10. CEL MAI MARE DIVIZOR COMUN (A,B!=0)


a) cin>>a>>b;
while (a!=b)
if (a>b) a=a-b;
else b=b-a;
cout<<a;
b) cin>>a>>b;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
cout<<a;

11. CEL MAI MIC MULTIPLU COMUN (A,B!=0)


b) cin>>a>>b;
ca=a; cb=b;
while (b!=0)
{
r=a%b;
a=b;
b=r;
}
m=ca*cb/a; //produsul numerelor initiale div cmmdc

12. DETERMINAREA PUTERII LA CARE APARE FACTORUL PRIM d IN DESCOMPUNEREA IN


FACTORI PRIMI A LUI n
p=0;
while (n%d==0)
{
n=n/d;
p++;
}
cout<<p;

13. DESCOMPUNEREA IN FACTORI PRIMI


cin>>n;
d=2;
while (n!=1)
{
p=0;
while (n%d==0)
{
n=n/d;
p++;
}
if (p>0)
// prelucrarea lui d si/sau p
d++;
}

14. CITIREA SI PRELUCRAREA UNUI SIR DE NUMERE CARE SE TERMINA CU VALOAREA 0 CARE
NU FACE PARTE DIN SIR
cin>>x;
while (x!=0)
{
// prelucrarea lui x;
cin>>x;
}

15. DETERMINAREA CELUI MAI MARE NUMAR x<n SI CARE ARE O PROPRIETATE
n=25 => x=23
cin>>n;
x=n;
do
{
x--;
OK <- 1
for (d=2;d<=x/2;d++)
if (x%d==0)
OK <- 0;
}
while (OK==0);
cout<<x;

16. DETERMINAREA CELUI MAI MIC NUMAR x>n SI CARE ARE O PROPRIETATE
n=25 => x=29
cin>>n;
x=n;
do
{
x++;
OK <- 1
for (d=2;d<=x/2;d++)
if (x%d==0)
OK <- 0;
}
while (OK==0);
cout<<x;

17. PRIMII n TERMENI FIBONACCI


1 1 2 3 5 8 13 21
cin>>n;
a=1; b=0; // nu fac parte dintre termenii Fibonacci
for (i=1;i<=n;i++)
{
c=a+b;
cout<<c<<' ';
a=b;
b=c;
}

18. TERMENII FIBONACCI <=x


1 1 2 3 5 8 13 21
x=20
cin>>x;
a=1; b=0; // nu fac parte dintre termenii Fibonacci
while (a+b<=x)
{
c=a+b;
cout<<c<<' ';
a=b;
b=c;
}
MATRICE

TIPURI DE PROBLEME
A) CITIRE N (EVENTUAL M) SI CONSTRUIRE MATRICE CU N LINII SI N (EVENTUAL M) COLOANE
#include <iostream>
using namespace std;
int a[101][101],n,m,i,j..;
int main()
{
cin>>n>>m;
for (i=1;i<=n;i++)
for (j=1 ;j<=m; j++)
if (...) a[i][j]=...;
for (i=1;i<=n;i++)
{
for (j=1 ;j<=m; j++) cout<<a[i][j]<<" ";
cout<<endl;
}
return 0;
}

B) CITIRE N (EVENTUAL M) SI MATRICE SI PRELUCRARE ELEMENTE MATRICE


#include <iostream>
using namespace std;
int a[101][101],n,m,i,j..;
int main()
{
cin>>n>>m;
for (i=1;i<=n;i++)
for (j=1 ;j<=m; j++)
cin>a[i][j];
for (i=1;i<=n;i++)
for (j=1 ;j<=m; j++)
//prelucrarea lui a[i][j];
//afisare rezultat
return 0;
}

Ba) PRELUCRAREA ELEMENTELOR MATRICEI


for (i=1;i<=n;i++)
for (j=1 ;j<=m; j++)
//prelucrarea lui a[i][j];
Bb) PRELUCRAREA ELEMENTELOR MATRICEI PATRATICE IN FUNCTIE DE DIAGONALA
PRINCIPALA
- numerotare 1..n
for (i=1;i<=n;i++)
for (j=1 ;j<=n; j++)
if (i==j) //prelucrarea lui a[i][i], element de pe diagonala principala;
else if (i<j) //prelucrarea lui a[i][j], element aflat deasupra diagonalei
principale;
else //prelucrarea lui a[i][j], element aflat sub diagonala principala;

11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44

- numerotare 0..n-1
for (i=0;i<n;i++)
for (j=0 ;j<n; j++)
if (i==j) //prelucrarea lui a[i][i], element de pe diagonala principala;
else if (i<j) //prelucrarea lui a[i][j], element aflat deasupra diagonalei
principale;
else //prelucrarea lui a[i][j], element aflat sub diagonala principala;
Bc) PRELUCRAREA ELEMENTELOR MATRICEI PATRATICE IN FUNCTIE DE DIAGONALA
SECUNDARA
- numerotare 1..n
for (i=1;i<=n;i++)
for (j=1 ;j<=n; j++)
if (i+j==n-1) //prelucrarea lui a[i][n+1-i], element de pe diagonala
secundara;
else if (i+j<n-1) //prelucrarea lui a[i][j], element aflat deasupra
diagonalei secundare;
else //prelucrarea lui a[i][j], element aflat sub diagonala secundara;
- numerotare 0..n-1
for (i=0;i<n;i++)
for (j=0 ;j<n; j++)
if (i+j==n+1) //prelucrarea lui a[i][n+1-i], element de pe diagonala
secundara;
else if (i+j<n+1) //prelucrarea lui a[i][j], element aflat deasupra
diagonalei secundare;
else //prelucrarea lui a[i][j], element aflat sub diagonala
secundara;

11 12 13 14
21 22 23 24
31 32 33 34
41 42 43 44

00 01 02 03
10 11 12 13
20 21 22 23
30 31 32 33

Ca) PRELUCRAREA ELEMENTELOR DE PE DIAGONALA PRINCIPALA


for (i=1;i<=n;i++)
// prelucrarea lui a[i][i];

Cb) PRELUCRAREA ELEMENTELOR DE PE DIAGONALA SECUNDARA


for (i=1;i<=n;i++)
// prelucrarea lui a[i][n+1-i];

Da) PRELUCRAREA ELEMENTELOR PE LINII INTR-O MATRICE A(N,M) - determinarea


minimului de pe fiecare linie
for (i=1;i<=n;i++) // pentru fiecare linie
{
// initializare mn=2000000000;
for (j=1;j<=m;j++)
if (a[i][j]<mn) mn=a[i][j];
// afisare/comparare
cout<<mn<<' ';
}

Db) PRELUCRAREA ELEMENTELOR PE COLOANE INTR-O MATRICE A(N,M) - determinarea


minimului de pe fiecare coloana
for (j=1;j<=m;j++) // pentru fiecare coloana
{
// initializare mn=2000000000;
for (i=1;i<=n;i++)
if (a[i][j]<mn) mn=a[i][j];
// afisare/comparare
cout<<mn<<' ';
}

Ea) STERGEREA UNEI LINII

Eb) STERGEREA UNEI COLOANE

Ec) INSERAREA UNEI LINII

Ed) INSERAREA UNEI COLOANE

S-ar putea să vă placă și

  • Info 1
    Info 1
    Document13 pagini
    Info 1
    mayi_rm
    Încă nu există evaluări
  • Infooo
    Infooo
    Document12 pagini
    Infooo
    mayi_rm
    Încă nu există evaluări
  • Algoritmi Info
    Algoritmi Info
    Document10 pagini
    Algoritmi Info
    mayi_rm
    Încă nu există evaluări
  • Info
    Info
    Document13 pagini
    Info
    mayi_rm
    Încă nu există evaluări
  • Infooo
    Infooo
    Document13 pagini
    Infooo
    mayi_rm
    Încă nu există evaluări