Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
calculatoarelor
Seminar 5
Algoritmi vectori part. II
2016
Probleme
1. Sa se scrie programul pentru sortarea elementelor unui vector de dimensiune n.
a) sortarea prin interschimbare (metoda bulelor)
b) sortarea prin selectie
c) sortarea prin insertie
2. Sa se scrie programul care verifica daca elementele unui vector formeaza o progresie
aritmetica
4. Scrieti programul pentru determinarea c.m.m.d.c (cel mai mare divizor comun) dintr-
un sir (vector) de numere naturale nenule.
5. Scrieti programul care determina amplitudinea unui sir de numere memorate intr-un
vector de numere reale.
2
Problema 1a - enunt
Sa se scrie programul pentru sortarea elementelor unui
vector de dimensiune n.
a) sortarea prin interschimbare (metoda bulelor)
( WHILE (C) DO S....ENDWHILE)
Indicatie:
- se compara doua cate doua elemente Exemplu 1:
consecutive ale vectorului, interschimbadu-le in Introduceti dimensiunea
cazul neindeplinirii criteriului de ordonare. vectorului, n=4
- dupa o parcurgere intergrala a vectorului, x[0]=2
procesul se reia incepand cu primul element. x[1]=1
- elementele cu valoare mica sunt impinse catre x[2]=4
inceputul vectorului x[3]=3
- procesul se opreste cand la o parcurgere a 1.00 2.00 4.00 3.00
vectorului nu s-a produs nicio interschimare, 1.00 2.00 3.00 4.00
situatie indicata de valoarea variabilei p. Vectorul sortat este:
1.00 2.00 3.00 4.00
Problema 1a rezolvare I
INTREG n,i,p;
REAL x[100], aux;
SCRIE ("Introduceti dimensiunea vectorului, n=");
CITESTE (n); WHILE (C)
DO-FOR i=0,n-1,1 DO S....
CITESTE x(i); ENDWHILE
ENDDO;
p=1;
WHILE (p) DO
{ p=0;
da
DO-FOR i=0,n-2,1 C
IF (x[i]>x[i+1])
THEN { S
aux=x[i];
nu
x[i]=x[i+1];
x[i+1]=aux;
p=1;
}
ENDIF;
ENDDO;
}
ENDWHILE;
Indicatie:
- metoda consta in determinarea elementului minim din vector si aducerea lui
pe prima pozitie, dupa care se determina minimul din vectorul ramas si
aducerea lui pe a doua pozitie,etc.
- minimul se poate detecta comparand un element al vectorului cu toate care il
succed, interschimbandu-le in cazul neindeplinirii criteriului de ordonare
(aceasta metoda poate avea la randul ei mai multe variante).
Exemplu
Introduceti dimensiunea vectorului, n=4
x[0]=2
x[1]=1
x[2]=4
x[3]=3
Problema 1b rezolvare II
INTREG n,i,j;
REAL x[100], aux;
SCRIE ("Introduceti dimensiunea vectorului, n=");
CITESTE(n);
DO-FOR i=0,i<n,1
CITESTE x(i);
ENDDO;
DO-FOR i=0,n-2,1
DO-FOR j=i+1,n-1,1
IF (x[i]>x[j])
THEN { aux = x[i];
x[i] = x[j];
x[j] = aux;
}
ENDIF;
END-DO;
ENDDO;
Solutie:
-pentru verificarea cerintei este putem verifica faptul ca un elemnt este egal cu
media aritmetica a elementului din stanga si din dreapa lui (nr elemente din
vector >=3).
-vectorul este parcurs pana la penultimul element sau pana la un element care
nu indeplineste conditia.
l Exemplu 2
l Introduceti dimensiunea vectorului, n=4
l x[0]=1
l x[1]=2
l x[2]=3
l x[3]=5
l Elementele nu formeaza o progresie aritmetica
Problema 2 rezolvare
INTREG n;
REAL x[100];
SCRIE ("Introduceti dimensiunea vectorului, n=");
CITESTE(n);
i=1;
WHILE ((i<n-1) && (x[i] = = (x[i-1] + x[i+1])/2)) DO i=i+1;
ENDWHILE;
}
ENDIF;
STOP
Problema 3 - enunt
Fie un vector cu numere reale, de dimensiune n. Scrieti programul
care insereaza intre doua valori consecutive ale vectorului
media aritmetica a acestora.
Indicatie:
l se parcurge vectorul pana la penultimul
l se deplaseaza toate valorile spre dreapta cu o pozitie si se insereaza
media aritmetica.
l dupa fiecare inserare se incrementeaza indicele cu 2 pentru a nu insera si
media dintre medie si element.
Exemplu
Introduceti dimensiunea vectorului, n=3
x[0]=1
x[1]=2
x[2]=3
Vectorul actualizat cu media este:
1.00 1.50 2.00 2.50 3.00
Problema 3 rezolvare numerica
l Exemplu
k=3 (k=n) l Introduceti dimensiunea vectorului, n=3
l x[0]=1
i=0 l x[1]=2
l x[2]=3
l Vectorul actualizat cu media este:
While (i<k-1) DO ... l 1.00 1.50 2.00 2.50 3.00
0<2 -> j=3 -> x[3] = x[2] = 3
j=2 -> x[2] = x[1] = 2
j=1 -> j>i+1 (1>1) cond.nu este indeplinita => se iese din for
-> x[1] = (x[0]+x[1])/2 = (1+2)/2=1.5
-> i=i + 2 = 0 +2= 2
-> k = k +1 = 3 +1 = 4
k=4
i=2
2<3 -> j=4 -> x[4] = x[3] = 3
j=3 -> j>i+1 (3>3) cond. nu este indeplinita => se iese din for
-> x[3] -> (x[2]+x[3])/2 = (2+3)/2=2.5
-> i = i +2 = 2 + 2 = 4
-> k = k +1 = 4 +1
k=5
i=4
4<4 cond. nu este indeplinita, se iese din WHILE
Se afiseaza vectorul creat.
Problema 3 - rezolvare
l INTREG n,i,j,k,p;
l REALx[100];
l
l SCRIE ("Introduceti dimensiunea vectorului, n=");
l CITESTE(n);
l
l DO-FOR i=0,n-1,1
l CITESTE x(i);
l ENDDO;
l k=n;
l i=0;
l WHILE (i<k-1)
l DO {
l DO-FOR ( j=k, j>i+1, j=j-1 ) x[j] =x[j-1];
l x[j] = (x[i]+x[i+1])/2;
l i=i+2;
l k=k+1;
l }
Indicatii:
Amplitudinea unui sir de numere se determina ca diferenta (in valoarea
absoluta) dintre maximul si minimul din sirul respectiv.
Exemplu
Introduceti dimensiunea sirului, n=3
x[0]=2
x[1]=1
x[2]=3
Amplitudinea este 2.00
Problema 5 - rezolvare
l INTREG n,i;
l REAL x[100], min, max;
l CITESTE ( n);
l DO-FOR i=0,n-1,1
l CITESTE (x(i)) ;
l ENDDO;
l min = x[0]
l max = x[0]
l DO-FOR i=1,n-1,1
l IF (x[i]<min) THEN min = x[i]
l ELSE IF (x[i]>max) THEN max=x[i]
l ENDIF;
l ENDIF;
l ENDDO;
l SCRIE ("Amplitudinea este ", max-min);
l STOP.
Problema 6 - enunt
Sa se calculeze produsul numerelor perfecte dintr-un vector cu m
elemente numere intregi.
Indicatie:
l un numar este perfect daca se poate scrie ca suma a divizorilor sai
naturali, mai putin el insusi.
Exemple:
l 6=1+2+3
l 28=1+2+4+7+14
l 496=1+2+4+8+16+31+62+124+248
l 8.128=1+2+4+8+16+32+64+127+254+508+1016+2032+4064
Problema 6 rezolvare numerica
l p=1 Exemplu rulare
l nr=0 Introduceti dimensiunea sirului, n=3
x[0]=6
l i = 0,2,1 x[1]=28
l i=0 x[2]=2
l { s=0 Produsul numerelor perfecte este 168.
l (j=1,6/2=3,1)
l j=1 daca 6 % 1 = 0 => s=s+1=1
l j=2 daca 6 % 2 = 0=> s= 1+2 = 3
l j=3 daca 6 % 3 = 0=> s=3+3 =6
l daca s = = x[0] (6= =6) atunci { p=1* 6 = 6
l nr = 0 + 1 = 1
l }
l i=1
l { s=0
l (j=1,28/2=14,1)
l j=1 daca 28 % 1 = 0 => .......
l ......
l j = 14 daca 28 % 14 = 0 => s = 14 + 14 = 28
l daca s = = x[1] (28 = = 28) atunci { p= 6*28 = 168
l nr = 1 + 1 = 2
l }
l i = 2 .........
Problema 6 rezolvare
l INTREG n,s,i,j, x[100], p, nr;
l CITESTE ( n);
l DO-FOR i=0,n-1,1
l CITESTE (x(i)) ;
l ENDDO;
l p =1 //produsul
l nr = 0 //nr. de numere perfecte
l DO-FOR i = 0,n-1,1 {
l s=0
l DO-FOR j=1,x[i]/2,1
l IF (x[i]%j ==0) THEN s=s+j;
l ENDIF;
l ENDDO;
l IF (s= =x[i]) THEN {
l p=p*x[i];
l nr=nr+1;
l }
l ENDIF;
l }
l ENDDO;
l IF (nr) THEN SCRIE("Produsul numerelor perfecte este", p);
l ELSE SCRIE("Nu exista numere perfecte in sir.");
l ENDIF;
l STOP
Problema 7 - enunt
Se da un vector de 100 de elemente reale. Sa se scrie
programul care transforma vectorul in multime,
eliminand dublurile (operatie de compactare).
Indicatie:
l Se parcurge vectorul de la primul pana la ultimul elemnt
si se compara elementul curent cu toate situate in
dreapta sa.
l Daca elementul mai este gasit se realizeaza deplasarea
valorilor cu o pozitie spre stanga si se decrementeaza
numarul total.
Problema 7 rezolvare numerica
Introduceti dimensiunea vectorului, n=5 V.valori inainte de modificarea pozitiei j=3 si k=4
x[0]=1 x[0]= 1.00
x[1]=2 x[1]= 2.00
x[2]=1 x[2]= 2.00
x[3]=2 valori dupa schimbarea pozitiei n=3, j=2, k=3.
x[4]=1
VI.valori inainte de modificarea pozitiei j=2 si k=3
I. fara schimbarea pozitiei j=1 si k=-1 si n=5 x[0]= 1.00
II. valori inainte de modificarea pozitiei j=2 si x[1]= 2.00
k=-1 valori dupa schimbarea pozitiei n=2, j=1, k=2.
x[0]= 1.00
x[1]= 2.00 Rezultat:
x[2]= 2.00 Vectorul compactat este:
x[3]= 1.00 1.00 2.00
III.valori dupa schimbarea pozitiei n=4, j=1,
k=4.
IV.fara schimbarea pozitiei j=2 si k=4 si n=4
Problema 7 rezolvare
l INTREG n,i,j,k,p;
l REALx[100];
l SCRIE ("Introduceti dimensiunea vectorului, n=");
l CITESTE(n);
l DO-FOR i=0,n-1,1
l CITESTE x(i);
l ENDDO;
l k=-1
l DO-FOR i=0,n-1,1
l DO-FOR j=i+1,n-1,1
l IF (x[i] == x[j]) THEN {
l DO-FOR k=j,n-2,1
l x[k]=x[k+1];
l ENDDO;
l n=n-1
l j=j-1
l }
l ENDIF;
l ENDDO;
l ENDDO;