Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
int posibil(int k)
{
for(int i=1;i<=k-1;i++)
if(x[i]==x[k]) return(0);
1
return(1);
clrscr();
m=contor=0;
printf("dati n=");
scanf("%d",&n);
k=1;
x[k]=0;
while (k>0)
{
gasit=0;
while (x[k]<n) {
}
void afisare()
{ // m=coloane
contor++;
if (contor>24) {
contor=1;
m++;
if(m==3) {
x[k]=x[k]
m=0;
+1;
getch();
gasit=posibil(k);
if (gasit)
clrscr();
break;
}
}
if (gasit) if (k==n) afisare();
else {
k=k+1;
x[k]=0;
}
else k--;
}
gotoxy(10+20*m,contor);
for(int i=1;i<=k;i++)
printf("%d ",x[i]);
printf("\n");
}
}
getch();
}
void main ()
{
Aranjamente si combinari
Fie A={a1, a2, ,an} o multime finita cu n elemente si m {0, 1, 2,
,n} Se stie ca multimea A are in total 2 submultimi.
Combinari
Definitie
Submultimile multimii A avand fiecare cate m elemente se numesc
combinari de n elemente luate cate m.
Numarul combinarilor de n elemente luate cate m se noteaza Cn
2
printf("dati m=");
scanf("%d",&m);
if (n<m) printf("trebuie ca n sa
fie mai mare ca m");
k=1;
x[k]=0;
while (k>0)
{ gasit=0;
while (x[k]<n) {
x[k]=x[k]+1;
gasit=posibil(k);
if (gasit)
break;
}
if (gasit) if (k= =m)
afisare();
else {
k=k+1;
x[k]=x[k-1];}
else k--; }
getch();}
Aranjamente
Definitie
Submultimile ordonate cu m elemente ale multimii A se numesc
aranjamente de n elemente luate cate m.
Numarul aranjamentelor de n elemente luate cate m se noteaza An
Fiecare submultime cu m elemente poate fi ordonata in m! moduri.
Rezulta, asadar, ca vom avea de m! ori mai multe aranjamente de n elemente
luate cate m decat combinari de n elemente luate cate m.
Se obtin relatiile:An=m!Cn sau Cn=An/m!
(1)
Relatiile (1) permit aflarea unui numar cunoscand celalalt numar dintre
An si Cn.
Teorema
Fie A o multime finita cu n elemente si 0 m n un numar natural.
Atunci:
An=n!/(n-m)!
(2)
Teorema
Cn=n!/(n-m)!m!
Formula lui Pascal
Cn+Cn++Cn=2
Sa se genereze aranjamentele unei multimi cu n elemente luate cate m
Program
#include<stdlib.h>
scanf("%d",&m);
#include<conio.h>
if (n<m) printf("n trebuie sa fie
#include<stdio.h>
mai mare decat m");
int n,m,k,x[10],contor;
k=1;
int gasit,pos;
x[k]=0;
int posibil(int k)
while (k>0)
{
{ gasit=0;
for(int i=1;i<=k-1;i++)
while (x[k]<n)
if(x[i]==x[k]) return(0);
{
return(1);
x[k]=x[k]+1;
}
gasit=posibil(k);
void afisare()
if (gasit) break;
{
}
for(int i=1;i<=k;i++)
if (gasit) if (k==m)
printf("%d ",x[i]);
afisare();
printf("\n");
else {
}
k=k+1;
void main ()
x[k]=0;
{
}
clrscr();
else k--;
printf("dati n=");
}
scanf("%d",&n);
getch();
printf("dati m=");
}