Program Are
Program Are
s[0][i]=h1*60+m1;
cout<<"ora de sfarsit pentru spectacolul"<<i<<" (hh mm)=";
cin>>h2>>m2;
s[1][i]=h2*60+m2;
}
sortare();
cout<<"ordinea spectacolelor este "<<endl<<o[1]<<endl;
ora=s[1][o[1]];
for(i=2;i<=n;i++)
if(s[1][o[1]]>=ora)
{
cout<<o[i]<<endl;
ora=s[1][o[i]];
}
2. Un comis-voiajor pleaca dintr-un oras, trebuie sa viziteze un numar de orase si sa nu se intoarca in
orasul de unde a plecat cu efort minim. Orice oras i este legat printr-o sosea de orice alt oras j printrun drum de A[i,j] [Link] cere traseul pe care trebuie sa-l urmese comis-voiajorul, astfel incat sa
parcurga un numar minim de kilometri.
#include <iostream>
using namespace std;
int s[10],a[10][10],n,i,j,v,p,vs,vs1,mint,cost;
main()
{
cout<<"Numar noduri=";cin>>n;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
cout<<"A["<<i<<"]["<<j<<"]=",cin>>a[i][j],a[j][i]=a[i][j];
}
3. Se efectueaza plata unei sume s utilizand un numar minim de monezi. Se cunosc valorile
monezilor.
#include<iostream>
using namespace std;
int n,i,man,inv,s,a[100];
main()
{
cout<<"Suma=";cin>>s;
cout<<"Numarul de bancnote:";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"a["<<i<<"]=";cin>>a[i];
}
do
{
inv=0;
for(i=1;i<=n-1;i++)
if(a[i]<a[i+1])
{
man=a[i];
a[i]=a[i+1];
a[i+1]=man;
}
}
while(inv);
i=1;
cout<<s<<endl;
do
{
if(s/a[i]>0)
cout<<s/a[i]<<" bancnote cu valoarea "<<a[i]<<endl,s=s%a[i];
i++;
}
while(i<=n);
}
4. Se considera o multime de n numere reale. Se cere o submultime a sa cu un numar maxim de
elemente, astfel incat suma elementelor sale sa fie maxima
#include<iostream>
using namespace std;
float A[100],B[100];
int n,m,i;
void Greedy()
{
for(i=1;i<=n;i++)
if(A[i]>=0)
{
m++;
B[m]=A[i];
}
}
main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"A["<<i<<"]=";
cin>>A[i];
}
Greedy();
for(i=1;i<=m;i++)
cout<<B[i]<<" "
}
5. Programul construieste si, apoi tipareste,
o lista de valori intregi, de tip coada,
dupa care construieste cu valorile din lista
o alta lista ordonata, pe care o afiseaza
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
struct intrare
{
int
valoare;
/* se adauga la lista*/
{
ptr_lista = ptr_lista -> urmator;
ptr_lista -> valoare = valoare;
ptr_lista -> urmator = NULL;
}
else
exit (0);
}
printf ("Valoare:");
scanf ("%d", &valoare);
}
/* afisare lista */
printf("\nLista introdusa:\n");
ptr_lista = start; /* initializare adresa de inceput a listei */
if ( ptr_lista != NULL )
{
do
{
printf ("(%d) -> ", ptr_lista -> valoare);
ptr_lista = ptr_lista -> urmator;
} while ( ptr_lista != NULL );
printf ("NULL\n");
}
else
printf ("Lista vida ( NULL )\n");
printf("\nApasati o tasta pentru a ordona lista\n");
getch();
exit(1);
if (start) // copiez primul element din lista init in cea ordonata
{
vr=(struct intrare *) malloc( sizeof (struct intrare ));
vr-> valoare = start->valoare;
vr-> urmator = NULL;
plo=vr;
}
ptr_lista=start->urmator; // se continua in lista init cu elem urmator
while (ptr_lista)
{
pc=plo;
pp=NULL;
while (pc && ptr_lista->valoare > pc->valoare){
pp=pc;
pc=pc->urmator;
}
// s-a gasit pozitia de inserat intre pp si pc!
vr=(struct intrare *) malloc( sizeof (struct intrare ));
vr->valoare = ptr_lista->valoare;
if (!pp){plo=vr;
}
else
pp->urmator=vr;
vr->urmator = pc;
ptr_lista=ptr_lista->urmator;
};
}
6. Programul construieste, apoi tipareste,
o lista de valori intregi, de tip coada,
dupa ordoneaza valorile in aceasta lista si o afiseaza
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
struct intrare
{
int
valoare;
};
struct intrare *start, *ptr_lista, *start_lo, *pp, *pc, *plo;
int valoare, inv;
start = NULL;
clrscr();
printf ("Introduceti un sir de valori, terminat cu 0.\n");
printf ("Valoare:");
scanf ("%d", &valoare);
while ( valoare )
{
if ( start == NULL )
{
start = ( struct intrare * ) malloc( sizeof (struct intrare ));
/* se poate utiliza si functia new in loc de malloc */
start-> valoare = valoare;
start-> urmator = NULL;
ptr_lista = start;
}
else
{
ptr_lista ->urmator=(struct intrare*)
malloc(sizeof(struct intrare));
if ( ptr_lista -> urmator != NULL )
{
ptr_lista = ptr_lista -> urmator;
ptr_lista -> valoare = valoare;
ptr_lista -> urmator = NULL;
}
else
exit (0);
/* se adauga la lista*/
}
printf ("Valoare:");
scanf ("%d", &valoare);
}
/* afisare lista */
printf("\nLista introdusa:\n");
ptr_lista = start; /* initializare adresa de inceput a listei */
if ( ptr_lista != NULL )
{
do
{
printf ("(%d) -> ", ptr_lista -> valoare);
ptr_lista = ptr_lista -> urmator;
} while ( ptr_lista != NULL );
printf ("NULL\n");
}
else
printf ("Lista vida ( NULL )\n");
printf("\nApasati o tasta pentru a ordona lista\n");
getch();
if (plo)
{
do
{inv=0;
pc=plo;
pp=NULL;
while (pc->urmator){
pp=pc;
pc=pc->urmator;
if (pp->valoare > pc->valoare){
valoare=pp->valoare;
pp->valoare=pc->valoare;
pc->valoare=valoare;
inv=1;
}
}
}while(inv);
}
/* afisare lista ordonta*/
printf("\nLista ordonata:\n");
ptr_lista = plo; /* initializare adresa de inceput a listei */
if ( ptr_lista != NULL )
{
do
{
printf ("(%d) -> ", ptr_lista -> valoare);
ptr_lista = ptr_lista -> urmator;
} while ( ptr_lista != NULL );
printf ("NULL\n");
}
else
printf ("Lista vida ( NULL )\n");
}
7. Programul construieste si, apoi tipareste,
o lista de valori intregi, de tip coada,
dupa care modifica lista (legaturile),
astfel incat valorile sa fie ordonate, si o afiseaza
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
void main()
{
struct intrare
{
int
valoare;
/* se adauga la lista*/
{
ptr_lista = ptr_lista -> urmator;
ptr_lista -> valoare = valoare;
ptr_lista -> urmator = NULL;
}
else
exit (0);
}
printf ("Valoare:");
scanf ("%d", &valoare);
}
/* afisare lista */
printf("\nLista introdusa:\n");
ptr_lista = start; /* initializare adresa de inceput a listei */
if ( ptr_lista != NULL )
{
do
{
printf ("(%d) -> ", ptr_lista -> valoare);
ptr_lista = ptr_lista -> urmator;
} while ( ptr_lista != NULL );
printf ("NULL\n");
}
else
printf ("Lista vida ( NULL )\n");
printf("\nApasati o tasta pentru a ordona lista\n");
getch();
/* se ordoneaza lista */
if (!start)
exit(1);
ptr_lista=start; // se init cu primul element
vr=ptr_lista->urmator;
plo=ptr_lista;
ptr_lista->urmator=NULL;
ptr_lista=vr;
while (ptr_lista)
{
pc=plo;
pp=NULL;
while (pc && ptr_lista->valoare > pc->valoare){
pp=pc;
pc=pc->urmator;
}
// s-a gasit pozitia de inserat intre pp si pc!
vr=ptr_lista->urmator; // memorez noua adresa de inceput a list neord
if (!pp){ptr_lista->urmator=plo;
plo=ptr_lista;
}
else
{pp->urmator=ptr_lista;
ptr_lista->urmator = pc;
}
ptr_lista=vr;
};
}
8. S se scrie un tip structur pentru reprezentarea unei liste nlnuite, prin
intermediul creia se vor reine valori textuale pentru afiarea unui mesaj. Lista
va conine 3 elemente.
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
//scriem o structura pentru reprezentarea unul nod (element) al listei
struct nod_lista{
char* inf;
nod_lista* next;
};
//construim un tip propiu pentru reprezentarea unui nod de lista pe baza structurii definite anterior
typedef struct nod_lista nod;
//functia principala in rulare
void main()
{
nod* a; //primul element al listei
a=(nod*)malloc(sizeof(nod));
a->inf="Salut"; //continutul primului element
{
arb->st=(struct st_arbore *) malloc (sizeof(struct st_arbore)) ;
arb=arb->st;
arb->cuvant=cuv;
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
}
else if (strcmp(cuv, arb->cuvant) >0 )
if(arb->dr)
actualizare (arb->dr, cuv);
else
{
arb->dr=(struct st_arbore *) malloc (sizeof(struct st_arbore)) ;
arb=arb->dr;
arb->cuvant=cuv;
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
}
else
arb->nrap=arb->nrap + 1;
}
nle++;
if (nle%24==0){
printf("Apasati o tasta pentru a continua afisarea!\n");
getch();
}
tiparire_arbore (arbo->dr) ; /* tiparire arbore dreapta */
}
}
void main ()
{struct st_arbore *arb;
char cuvant[LUNGMAX] ;
clrscr();
printf("Introduceti cuvinte, care vor fi apoi tiparite in ordine"
" alfabetica:\n");
gets(cuvant) ;
arb=(struct st_arbore *) malloc (sizeof(struct st_arbore)) ;
/* am presupus ca nu se returneaza de catre malloc
valoarea NULL */
arb->cuvant=strdup(cuvant);
arb->nrap=1;
arb->st=NULL;
arb->dr=NULL;
gets(cuvant) ;
while (strcmp(cuvant, ""))
{actualizare (arb, strdup(cuvant));
gets(cuvant);
}
printf("Lista ordonata a cuvintelor (numar aparitii):\n");
tiparire_arbore (arb);
}
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#include <string.h>
int ok;
struct arbore
{
char info[30];
int nr_ap, niv;
struct arbore *st, *dr;
};
parcurge(p->st,s);
parcurge(p->dr,s);
}
}
}
}
void main()
{
clrscr();
creare(tata_lor);
afis(tata_lor);
getch();
}
11. Arbore de nr in care cautam o valoare si returnam pointer la valoarea
respectiva daca a fost gasita. Programul mai verifica daca arborele
este echilibrat. La constructie se va introduce 0 pt back
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct arbore
{
int info;
struct arbore *st,*dr;
};
p=new arbore;
p->info=n; p->st=NULL; p->dr=NULL;
creare(p->st);
creare(p->dr);
}
}
void main()
{
echilibrat(tata_lor->st,1,&niv_st);
echilibrat(tata_lor->dr,1,&niv_dr);
if (abs(niv_st-niv_dr)<=1) printf("Arborele este echilibrat.\n");
else printf("Arborele nu e echilibrat.\n");
getch();
}
12. Se numara nr de noduri si frunze dintr_un arbore binar de nr intregi
se det latimea maxima
la constructie se va introduce 0 pt back
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
struct arbore
{
int info;
struct arbore *st, *dr;
};
void main()
{int x[100],max,i;
int nr_noduri=0, nr_frunze=0;
struct arbore *tata_lor;
clrscr();
creare(tata_lor);
numara(tata_lor,&nr_noduri,&nr_frunze);
for(i=1;i<=20;i++)
x[i]=NNN(tata_lor,i);
max=x[1];
for(i=1;i<=20;i++)
if(x[i]>max)
max=x[i];
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
#include<string.h>
int max=20,nc;
}
void afisare(container *varf)
{container *p;
clrscr();
p=varf;
if(p==NULL)
printf("Coada este nula!\n");
else
{ printf("\nComponenta cozii :");
while(p)
{ printf("\nContainerul cu codul %d, contine %s, ambalat la %d/%d/%d cu greutate de %d",p>cod,p->continut,p->[Link],p->[Link],p->[Link],p->greutate);
p=p->leg;
}
}
getch();
}
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
struct
s_stiva
{
int
valoare;
s_stiva *ptr_stiva;
if (ultimul==NULL)
{
ultimul=(struct s_stiva *) malloc(sizeof(struct s_stiva));
if (ultimul==NULL)
{printf("Memorie plina!\n");
return(NULL);
}
else
{
ultimul->valoare=val;
ultimul->nr_aparitii=1;
ultimul->urmator=NULL;
return(ultimul);
}
}
else
{
ptr_stiva=ultimul;
void main()
{
struct s_stiva *ultim=NULL;
int numar;
clrscr();
printf("Prg. construieste si afiseaza o stiva de nr. intregi, distincte.\n");
printf("Introducerea se termina cu EOF(CTRL-Z, ENTER.\n");
printf("Introduceti numar: ");
while(scanf("%d", &numar)!=EOF)
{if((ultim=adauga_stiva(ultim, numar))==NULL)
break;
printf("Introduceti numar: ");
}
afisare_stiva(ultim);
eliberare_spatiu(ultim);
}
15. Programul construieste o stiva de caractere, pe care apoi o tipareste.
#include <stdio.h>
struct st_lista
{
char
car;
/* se tipareste un
}
vr=primul;
#include <stdio.h>
struct st_lista
{
char
car;
{
vr=(struct st_lista *) malloc(sizeof(struct st_lista));
if (vr == NULL)
{
/* mesaj de
l-am gasit */
{
gasit=(ptr->car == ch);
ptr=ptr->urmator;
}
return (!gasit);
}
17. Programul permuta liniile dintr-o matrice pentru a ordona
crescator valorile de pe diagonala principala a matricei.
#include <stdio.h>
#include <conio.h>
#define NR_MAX 3
int a[NR_MAX][NR_MAX];
int nl, nc, l, c;
int ntotsol=0; // numarul total de solutii
scanf("%d", &a[l][c]);
};
printf("\nApasati o tasat pentru a continua programul\n");
getch();
for (l=0; l<nl; l++)
for (c=0; c<nc; c++)
{// se aduce linia 'l' si coloana 'c' pe pozitia (0,0)
for (col=0; col<nc; col++)
{aux=a[0][col];
a[0][col]=a[l][col];
a[l][col]=aux;
};
for (lin=0; lin<nl; lin++)
{
aux=a[lin][0];
a[lin][0]=a[lin][c];
a[lin][c]=aux;
};
if (incearca(0)) // daca exista solutie (ord. diagonala)
ntotsol++;
{aux=a[0][col];
a[0][col]=a[l][col];
a[l][col]=aux;
};
for (lin=0 ;lin<nl; lin++)
{aux=a[lin][0];
a[lin][0]=a[lin][c];
a[lin][c]=aux;
};
};
printf("\nNumarul total de solutii este %d.\n", ntotsol);
printf("\nApasati o tasta pentru a termina programul !\n");
getch();
};
aux, q;
lin=col=i;
do
{
q=0;
if ((i > 0 && a[lin][col] >= a[i-1][i-1] ) || (i == 0))
{
for (c=0; c<nc; c++)
{aux=a[i][c];
a[i][c]=a[lin][c];
a[lin][c]=aux;
};
else
col++;
} while (!q && lin < nl && col < nc);
return (q);
}
18. Programul citeste un vector de valori intregi
si determina daca o anumita valoarea (suma dorita) se poate furniza
prin insumarea valorilor din vector, si ofera toate solutiile posibile
#include <stdio.h>
#include <conio.h>
#define MAXV 16
typedef struct
{int nval, val[MAXV]; /* numar valori disponibile in vector */
long rest;
int nrsol;
/* numar solutii */
unsigned sel;
} TDate;
int nle=0; /* numar de linii afisate pe ecran */
printf(" -");
printf("\n");
nle++;
if(nle%23==0)
{printf("Se continua afisarea dupa apasarea unei taste!\n");
getch();
}
}
/* solutie exacta */
/* continua cautarea */
void main ()
{int i;
long Suma;
TDate x;
clrscr();
printf ("Introduceti valori, terminand cu 0 sau caracter nenumeric:\n");
for (i = 0; i < MAXV; i++)
if (scanf("%i", &([Link][i])) < 1 || [Link][i] == 0)
break;
if (!i)
{ printf ("Lipsa date!!!\n"); exit(1); }
[Link] = i;
printf("\nAti introdus %u valori:\n", [Link]);
for (i = 0; i < [Link]; i++)
printf ("%5i", [Link][i]);
printf ("\n");
for (;;)
{printf ("\nSuma dorita de construit (calculat) cu valori "
"din vector\n\t(oprire program orice caracter nenumeric): ");
fflush(stdin);
if (!scanf ("%ld", &Suma))
break;
[Link] = 0; [Link] = Suma; [Link] = 0;
Cauta (&x, 0);
/* Cauta solutii */
if (! [Link])
printf ("Nu exista solutie !\n");
}
}
19. "acoperirea" unei table de sah
prin mutarile unui cal, astfel incat fiecare casuta a tablei sa fie
parcursa (atinsa) o singura data; se afiseaza prima solutie gasita
#include <stdio.h>
#include <conio.h>
#define N 5
#define NSQ N*N
#define NrMaxMutCal 8
// N - dimensiunea tablei de sah; NSQ=N^2;
// NrMaxMutCal=8, nr. maxim mutari posibile ale calului, pt. o pozitie data
int i, j, q;
long int nr_incercari;
int h[N+1][N+1];
int a[NrMaxMutCal+1]={0, 1, 1, 2, 2, -1, -1, -2, -2};// poz. relative pe cele doua
int b[NrMaxMutCal+1]={0, 2, -2, 1, -1, 2, -2, 1, -1};// doua coordonate,
// ale celor 8 mutari posibile
void muta (int i, int x, int y, int *pq){// determina mutarea urmatoare
int k, u, v, l, c, q1;
k = 0;
do {
k = k + 1;
u = x + a[k];
// noile coordonate
v = y + b[k];
q1 = 0;
if ((u >= 1 && u <= N) && (v >= 1 && v <= N) && (h[u][v] == 0))
// daca mutarea este valida si casuta nu a fost vizitata
{h[u][v] = i;
if (i < NSQ)
{// daca sol. nu e completa se incearca mutarea urm.
muta (i+1, u, v, &q1);
if (!q1) // daca nu este valida se sterge mutarea
{h[u][v] = 0;
nr_incercari++; // se numara ramurile taiate
}
// (infundate)
}
else
q1 = 1;// daca s-a acoperit tabla->tipareste solutia
} // se continua daca nu s-a gasit o solutie (q1=0) si daca
} while (!q1 && k < NrMaxMutCal); // mai sunt mutari posibile (k<8)
// din pozitia curenta
*pq = q1;
muta( 2, 1, 1, &q);
if (!q)
else
{for (i=1; i<=N; i++)
{for (j=1; j<=N; j++)
printf("%4d", h[i][j]);
printf("\n");
}
printf("\nNumarul total de incercari a fost de: %ld\n\n",
nr_incercari);
}
}
20. Problema 'Turnurilor din Hanoi', rezolvata recursiv.
#include <stdio.h>
#include <conio.h>
enum pozitie { stanga , mijloc , dreapta};
void muta ( int n, enum pozitie sursa, enum pozitie inter, enum pozitie dest )
{
if ( n > 0 )
{
muta ( n - 1 , sursa , dest , inter );
deplasare ( sursa , dest );
muta ( n - 1 , inter, sursa , dest );
}
}
21. Se citeste un vector cu n elemente numere naturale. Sa se determine elementul minim din vector
folosind Divide et impera.
#include<iostream>
using namespace std;
int min(int a[100],int s , int d)
{
if ( s == d ) return a[s];
else
{
int m = (s+d)/2;
int m1 = min(a,s,m);
int m2 = min(a,m+1,d);
}
}
int main()
{
int a[100];
int n ;
cin>> n;
for (int i = 0 ; i < n ;i++)
cin>>a[i];
system("pause");
return 0;
}
22. Se citeste un vector cu n elemente numere naturale. Sa se calculeze CMMDC al elementelor
vectorului folosind Divide et impera.
#include<iostream>
using namespace std;
int cmmdc(int a[100], int s, int d)
{ if(s==d) return a[s];
else
{ int x,y;
x=cmmdc(a,s,(s+d)/2);
y=cmmdc(a,(s+d)/2+1,d);
while(x!=y)
if(x>y) x=x-y;
else y=y-x;
return x;
}
}
int main()
{
int a[100],n,i;
cin>>n;
for(i=1;i<=n;i++) cin>>a[i];
cout<<cmmdc(a,1,n);
system("pause");
return 0;
}
23. Sa se calculeze folosind metoda divide et impera suma elementelor unui vector.
#include<iostream.h>
int v[20],n;
int suma(int li,int ls)
{int m, d1 ,d2;
if(li!=ls)
{m=(li+ls)/2;
d1=suma(li,m);
d2=suma(m+1,ls);
return d1+d2;
}
else
return v[li];
}
void main()
{
cout<<"n=";
cin>>n;
for(int i=1;i<=n;i++)
{cout<<"v["<<i<<"]=";
cin>>v[i];}
cout<<"suma celor "<<n<<" elemente ale vectorului "<<suma(1,n);
}
24. Se citeste un numar real x. Sa se calculeze radical de ordinul 3 din x folosind un algoritm de tip
Divide et impera.
#include<iostream>
using namespace std;
double r3(double x, double s, double d)
{
if(d-s<=0.0001) return d;
else
{ double m=(s+d)/2;
if(m*m*m<x) return r3(x,m,d);
else return r3(x,s,m);
}
}
int main()
{ double x;
cin>>x;
if(x>0) if(x<1) cout<<r3(x,0,1);
else cout<<r3(x,0,x);
else if(x>-1) cout<<r3(x,-1,0);
else cout<<r3(x,x,0);
system("pause");
return 0;
}
25. Ord. descresc., prin selectie Heapsort:
construim Heap-ul, arborele de selectie, memorat intr-un
vector, dupa care se interschmba prima valoare (maximul)
cu ultima si in vectorul ramas (n-1) se construieste
din nou Heap-ul, s.a.m.d.
#include<stdio.h>
#include <conio.h>
void cerne (double a[], int l, int r)
{
int i,j;
double x;
i=l; j=2*i; x=a[i]; /* x ce se cerne prin arbore/ vector */
while (j<=r){
if (j<r) /* nu s-a ajuns la capat */
if (a[j]<a[j+1]) /* j-ind. val. mai mare din */
j++;
if (x>a[j])
double x;
l=(n/2)+1; r=n;
while (l>1){
l--;
cerne(a,l,r);
for( i = 1 ; i <= n ; ++i ){
printf (" %[Link] ", a[i]);
if (i%10==0)
printf("\n");
}
printf("\nApasa o tasta pentru continuare program!\n");
getch();
}
while(r>1)
{x=a[1];
a[1]=a[r];
a[r]=x;
r--;
cerne(a,l,r);
for( i = 1 ; i <= n ; ++i ){
printf (" %[Link] ", a[i]);
if (i%10==0)
printf("\n");
}
printf("\nApasa o tasta pentru continuare program!\n");
getch();
}
}
void main(void)
{
double sir[1000];
int ne, i;
clrscr();
printf("HeapSort pentru ordonare crescatoare vector.\n");
printf ("Numarul de elemente: ");
scanf ("%d",&ne);
for ( i = 1 ; i <= ne ; ++i)
{
printf (" sir(%d)=", i);
scanf ("%lf", &sir[i]);
}
heapsort(sir,ne);
for( i = 1 ; i <= ne ; ++i ){
printf (" %[Link] ", sir[i]);
if (i%10==0)
printf("\n");
}
printf("\nPROGRAM TERMINAT! Apasa o tasta-iesire!!!\n");
getch();
}
#include<stdio.h>
#include <conio.h>
void cerne (double a[], int l, int r)
{
int i,j;
double x;
i=l; j=2*i; x=a[i]; /* x ce se cerne prin arbore/ vector */
while (j<=r){
if (j<r) /* nu s-a ajuns la capat */
if (a[j]>a[j+1]) /* j-ind. val. mai mica din */
j++;
if (x<a[j])
}
printf("\nApasa o tasta pentru continuare program!\n");
getch();
}
while(r>1)
{x=a[1];
a[1]=a[r];
a[r]=x;
r--;
cerne(a,l,r);
for( i = 1 ; i <= n ; ++i ){
printf (" %[Link] ", a[i]);
if (i%10==0)
printf("\n");
}
printf("\nApasa o tasta pentru continuare program!\n");
getch();
}
}
void main(void)
{
double sir[1000];
int ne, i;
clrscr();
printf ("Numarul de elemente: ");
scanf ("%d",&ne);
for ( i = 1 ; i <= ne ; ++i)
{
printf (" sir(%d)=", i);
#include<stdio.h>
#include <conio.h>
int ncomp=0, nins=0; /* numar de comparatii si inserari/deplasari */
/*
*/
void main(void){
double sir[100]; int ne,i;
clrscr();
printf("Numar elemente:");
scanf("%d", &ne);
for(i=0; i<ne; i++)
{
printf("sir(%d)= ", i+1);
scanf("%lf", &sir[i]);
}
printf("Sirul ordonat este: \n");
sort_ins_binara(sir , ne);
for (i=0;i<ne;i++)
{
printf(" sir (%2d) = %lf \n", i+1, sir[i]);
if ((ne+1)%4==0)
printf("\n");
}
printf("\n");
printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n",
ncomp, nins);
}
28. Prog. ordonare cresc. sir, utilizand metoda de inserare directa, adica:
se considera un sir ordonat, format initial din primul element din sirul initial,
si un sir neordonat, format din restul elementelor sirului, din care se iau pe
rand celelalte elemente si li sa cauta, de la dreapta la stanga, pozitia in
sirul ordonat, construit tot in sirul initial.
#include <stdio.h>
#include <conio.h>
int ncomp=0, nins=0; /* numar de comparatii si inserari/ deplasari */
a[j+1]=a[j];
j--;
ncomp++; nins++;
}
a[j+1]=x;
}
}
void main()
{
double sir[100];
int ne, i;
clrscr();
printf("Numar elemente:");
scanf("%d", &ne);
for(i=0; i<ne; i++)
{
printf("sir(%d)= ", i+1);
scanf("%lf", &sir[i]);
}
sort_ins_direct (sir, ne); /* ordonarea sirului prin inserare directa */
printf("\n Sirul ordonat:\n");
for(i=0; i<ne; i++)
{
printf(" sir(%d)=%5.2lf ", i+1, sir[i]);
if ( (i+1) %5 == 0 ) /* daca s-au afisat 5 valori din sir pe o linie */
printf("\n");
}
printf("\n");
printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n",
ncomp, nins);
#include<stdio.h>
#include<conio.h>
#define DIM 100
{i=s; j=d;
x=a[(s+d)/2];
do
/* santinela */
{
while (a[i]<x) i++, ncomp++;
while (a[j]>x) j--, ncomp++;
if (i<=j)
{t=a[i];
a[i]=a[j];
a[j]=t;
i++; j--;
ninv++;
}
} while(i<=j);
void main(void)
{int n;
VECTOR v;
clrscr();
printf("Programul ordoneaza (sorteaza) un vector cu alg. QuickSort.\n");
printf("Dimensiune vector, n=");scanf("%d", &n);
cit_vect(n, v);
QuickSortit (v, n);
#include<stdio.h>
#include <conio.h>
int ncomp=0, ninv=0; /* numar de comparatii si inversiuni */
void sort_sel_direct ( double a[], int n )
/* functia sorteaza un vector prin metoda de selectie directa */
{
double x;
int i, j, k;
for ( i = 0 ; i < n-1 ; ++i )
{
k = i;
x = a[i];
for ( j = i+1 ; j < n ; ++j, ncomp++ ) /* determinare minim si indicele lui din sir */
if (a[j] < x)
{
k = j;
x = a[k];
}
a[k] = a[i];
{
printf("sir(%d)=",i+1);
scanf("%lf",& sir[i]);
}
sort_sel_direct(sir,ne); /* ordonarea sirului prin selectie directa */
for(i=0;i<ne;i++)
{
printf(" sir(%2d)=%5.1lf",i+1,sir[i]);
nl++;
/* o linie noua */
}
printf("\n");
printf("Ordonarea s-a realizat prin %d comparatii si %d inversiuni\n",
ncomp, ninv);
}
31. Programul ordoneaza un sir de valori prin
#include <stdio.h>
#include <conio.h>
int ncomp=0, ninv=0; /* numar de comparatii si inversiuni/ deplasari */
{double x;
int i, j;
for (i=1; i<n; i++)
for (j=n-1; j>=i; j--, ncomp++)
if (a[j-1] > a[j])
{
x=a[j-1];
a[j-1]=a[j];
a[j]=x;
ninv++;
}
}
void main(){
double sir[100];
int ne,i, nl=0;
clrscr();
printf("Numar elemente:");
scanf("%d", &ne);
for(i=0; i<ne; i++) /* citirea elementelor sirului de ordonat */
{printf("sir(%d)=",i+1);
scanf("%lf", &sir[i]);
}
{
printf("sir(%2d)=%5.1lf ", i+1, sir[i]);
nl++;
}
printf("\n");
printf("Ordonarea s-a realizat prin %d comparatii si %d deplasari\n",
ncomp, ninv);
}