Documente Academic
Documente Profesional
Documente Cultură
calculatoarelor
Seminar 6
Algoritmi – vectori part. III
2022
Cuprins
II. Probleme
2
I. Simulare proba practica
3
I. Simulare proba practica
4
II. Probleme
5
II. Probleme
1. Sa se verifice daca doua siruri de numere citite de la tastatura sunt sau nu unul
anagrama celuilalt.
Exemplu: Rezultat:
Introduceti nr. de note: 5 Nota 1=7 //nu se va lua in considerare (minim)
Introduceti elementele sirului: Nota 2=8 //k=1
Nota 1=7 Nota 3=7 //nu se va lua in considerare (minim)
Nota 2=8 Nota 4=9 //k=2
Nota 3=7 Nota 5=10 //nu se va lua in considerare (maxim)
Nota 4=9 Punctajul este: 8.50 --- (8+9)/2 = 8.50
Nota 5=10
Problema 2 – rezolvare
REAL note[10], total, media, min, max;
k=0;
INTREG n,k,i;
DO-FOR i = 0, n -1, 1
WRITE ("Introduceti nr. de note:");
IF ((note[i]!=max) && (note[i]!=min))
READ (n);
THEN {
WRITE ("Introduceti elementele sirului:\n");
total = total + note[i];
DO-FOR i = 0, n-1, 1
k = k+1;
READ (note(i));
}
ENDDO;
ENDIF;
ENDDO;
total = 0;
min = note[0];
IF (k!=0) THEN {
max = note[0];
media = total / k;
WRITE ("Punctajul este:", media);
//se determina nota maxima si nota minima
}
DO-FOR i= 1,n-1,1
ENDIF;
{ IF (note[i]>max) THEN max=note[i];
STOP.
ENDIF;
IF (note[i]<min) THEN min=note[i];
ENDIF;
}
ENDDO;
Problema 3 - enunt
Sa se scrie programul care realizeaza compunerea a doua permutari
• Ce este o permutare ?
R: numărul de posibilități de rearanjare a unei liste ordonate de valori (sau obiecte).
Teorie:
Indicatii:
Fie a si b doi vectori in care se retin permutarile initiale si c vectorul care contine
permutarea compusa.
Obs: in limbajul C elementele sunt memorate in masive incepand de la pozitia 0,
iar elementele din cadrul permutarii incep de la 1.
Problema 3 - exemplu
Exemplu
Introduceti gradul permutarilor:3
(a o b)(x) = a(b(x))
Introduceti elementele primei permutari:
a(1)=2
a(2)=1
a(3)=3
Exemple
Exemplu 1: Exemplu 2:
Introduceti gradul permutarii: 3 Introduceti gradul permutarii: 3
Introduceti elementele permutarii: Introduceti elementele permutarii:
a(1)=2 a(1)=1
a(2)=1 a(2)=2
a(3)=3 a(3)=3
Nu este permutare identica. Permutare identica.
1 2 3 1 2 3
2 1 3 1 2 3
Indicatii:
- se citesc gradul permutarii si elementele.
- se verifica intr-un DO-FOR dupa i daca fiecare valoare a lui a[i] este egala cu i+1. Daca in final (i = = n)
atunci permutarea este identica.
Problema 4 - rezolvare
INTREG n,i, a[100];
WRITE ("Introduceti gradul permutarii:");
READ (n);
WRITE ("Introduceti elementele permutarii:\n");
DO-FOR i = 0, n-1, 1
READ (a(i));
ENDDO;
Exemplul 1: Exemplul 2:
Introduceti gradul permutarii:3 Introduceti gradul permutarii:3
Introduceti elementele permutarii: Introduceti elementele permutarii:
a(1)=3 a(1)=1
a(2)=2 a(2)=2
a(3)=1 a(3)=3
Permutarea este transpozitie: 3 Permutarea nu este transpozitie.
1 2 3 1 2 3
3 2 1 1 2 3
Problema 5 – indicatie si exemple
Indicatii:
- se citesc gradul si elementele permutarii
- intr-un DO-FOR se numara cate elemente sunt diferite fata de permutarea
identica.
- in variabila dif se va retine cate elemente sunt diferite in raport cu pozitiile
pe care le au iar in variabila poz pe ce pozitie se afla tranzpozitia
- daca dif este diferit de 2 atunci se da mesaj ca permutarea nu este
transpozitie, altfel se da mesajul ("Permutarea este transpozitie: ", poz);
Exemplul 2:
Exemplul 1: Introduceti gradul permutarii:3
Introduceti gradul permutarii:3 Introduceti elementele
Introduceti elementele permutarii: permutarii:
a(1)=3 a(1)=1
a(2)=2 a(2)=2
a(3)=1 a(3)=3
Permutarea este transpozitie: 3 Permutarea nu este transpozitie.
1 2 3 1 2 3
3 2 1 1 2 3
Problema 5 – rezolvare
INTREG n,i, a[100], dif, poz;
IF (dif != 2) THEN SCRIE ("Permutarea nu
este transpozitie.\n");
WRITE ("Introduceti gradul
permutarii:"); ELSE SCRIE ("Permutarea este
READ (n); transpozitie: ", poz);
WRITE ("Introduceti elementele ENDIF;
permutarii:\n");
DO-FOR i=0, n-1, 1
READ (a(i)); DO-FOR i = 0, n-1, 1
ENDDO; WRITE (i+1); //pozitii permutare
ENDDO;
dif=0; WRITE ("\n");
DO-FOR i = 0, n-1, 1 DO-FOR i = 0, n-1,1
IF (a[i] != i+1) THEN WRITE (a(i)); //valori permutare
{ dif = dif+1; ENDDO;
poz = i+1; STOP.
}
ENDIF;
ENDDO;
Problema 6 – enunt (tema)
Sa se scrie programul care determina inversa unei permutari de gradul n.
Indicatie:
Indicatie:
Exemplu rulare
Introduceti dimensiunea sirului: 3
Introduceti elementele sirului (varsta in ani)
x[0]=21 //21*12 = 252 este palindrom
x[1]=37 //37*12 = 444 este palindrom
x[2]=35 //35*12 = 420 nu este palindrom
Persoanele a caror varsta exprimata in luni formeaza un palindrom sunt:
1
2
Problema 7 - rezolvare
INTREG n,m,x[100], y[100],i, nr, inv,c; IF (nr)
THEN { SCRIE ("Persoanele a caror varsta
SCRIE ("Introduceti dimensiunea sirului");
exprimata in luni formeaza un palindrom sunt:\n");
CITESTE (n);
DO-FOR i = 0,nr-1,1
SCRIE ("Introduceti elementele sirului");
SCRIE (y[i]+1);
DO-FOR i=0, n-1, 1 ENDDO;
SCRIE (x(i)); }
ENDDO; ELSE SCRIE ("Nu exista niciun palindrom");
nr =0 ; ENDIF;
DO-FOR i = 0, n-1, 1 STOP.
{ inv = 0;
m = x[i]*12;
WHILE (m) DO {
inv = inv*10 + m%10;
m = m/10;
c = inv;
}
ENDWHILE;
IF (c = = x[i] * 12) THEN { y[nr] = i;
nr = nr+1;
}
ENDIF;
}
ENDDO;
nr=0;
Problema 7 - rezolvare i=0 //x[0]=21
inv=0
m=x[0]*12 = 252
Exemplu rulare
while (m!=0) // aici m=252
Introduceti dimensiunea sirului: 3 DO
Introduceti elementele sirului (varsta in ani) {
x[0]=21 //21*12 = 252 este palindrom inv = 0*10 + 252 % 10 = 2
x[1]=37 //37*12 = 444 este palindrom m = 252/10 = 25 //cat - /
c=2
x[2]=35 //35*12 = 420 nu este palindrom
}
27
Problema 9 - enunt
Sa se scrie programul care realizeaza operatia de
intersectie dintre doua multimi date.
Prin intersectia a doua multimi se va obtine o multime cu elementele
comune multimilor initiale.
Daca intersectia este vida, atunci cardinalul multimii rezultat este 0
Exemplu
Metoda presupune:
- compararea a doua elemente, cate unul din fiecare vector initial, cu
scrierea celui mai mic dintre ele in vectorul rezultat si trecerea la
urmatorul element al vectorului initial din care s-a preluat. Procesul de
comparare se incheie cand s-a epuizat unul din vectorii initiali.
31
Problema 10 –
rezolvare metoda 1 (in doua etape)
INTREG m,n,i,j,p; IF (i= =m)
REAL x[100], y[200], z[300]; THEN
READ (m); // dimensiunea vectorului I DO-FOR i = j, n-1, 1
DO-FOR i = 0, m-1, 1 { z[p]=y[i];
READ (x[i]); p=p+1;
ENDDO; }
READ (n); // dimensiunea vectorului II ENDDO;
DO-FOR j = 0, n-1, 1 ELSE
READ (y[j]); DO-FOR j= i, m-1, 1
ENDDO; { z[p]=x[j];
i=0; j=0; p=0;
p=p+1;
}
WHILE ((i<m) && (j<n)) DO
ENDDO;
IF (x[i]<y[j]) THEN { z[p]=x[i];
ENDIF;
p=p+1;
i=i+1;
WRITE ("Vectorul rezultat este:");
} DO-FOR i= 0, p-1, 1
ELSE { z[p]=y[j]; WRITE (z[i]);
p=p+1; ENDDO;
j=j+1; STOP.
}
ENDIF; 32
ENDWHILE;
Problema 10 –
indicatii metoda 2 (cu o etapa)
33
Problema 3 – rezolvare metoda 2 (cu o etapa)
INTREG x[100], y[150], z[251];
INTREG m,n,i,j,k; i=1; j=1; k=0;
//INTREG hv=32000; WHILE ((x[i]!=hv) || (y[j]!=hv))
{
READ (m); // dimensiunea vectorului I k=k+1;
DO-FOR i = 1, m, 1 IF (x[i] < y[j]) THEN
READ (x[i]); { z[k]=x[i];
ENDDO;
i=i+1;
READ (n); // dimensiunea vectorului II
IF (i>m) THEN x[i]=hv;
DO-FOR j = 1, n, 1 ENDIF;
READ (y[j]); }
ENDDO; ELSE
{ z[k]=y[j];
hv= |x(m)| + |y(n)| + 1; j=j+1;
IF (j>n) THEN y[j]=hv;
ENDIF;
}
ENDIF;
}
ENDWHILE;
35