Documente Academic
Documente Profesional
Documente Cultură
Rezolvari Subiecte Colocviu PC
Rezolvari Subiecte Colocviu PC
/*Folosind expresii conditionale, sa se scrie un program care citeste valoarea reala a lui x si
calculeaza valoarea functiei:
f(x)={ 0 , x=0;
x^2+5*x, x>-2
(x+2)^2, x<-2*/
#include <stdio.h>
#include <stdlib.h>
# include <math.h>
int main()
{ float x;
printf("x=");
scanf("%f",&x);
(x<-2)?printf("%10.2f",pow(x+2,2)):(x==0)?printf("0 "):(x>-2)?printf("%10.2f",x*x+5*x):printf("caz exceptat");
getchar();
getchar();
return 0;
}
/* 3.6. S se scrie un program care citete un numr real x, ce
reprezint msura unui unghi n radiani, i l transform n grade, minute i secunde sexagesimale*/
#include <stdio.h>
#include <stdlib.h>
# include <math.h>
int main()
{
float x,x1;
int g,m,s;
printf("x=");
scanf("%f",&x);
x1=x;
x=x*180/M_PI;
g=(int)x;
x-=g;
x*=60;
m=(int)x;
x-=m;
x*=60;
s=x;
printf("%5.2f radiani are %d grade, %d minute, %d secunde",x1,g,m,s);
getchar();
getchar();
return 0;
}
/*Sa se scrie un program care simuleaza functionarea unui numarator de tip ceas (se indica ora,
minutul si secunda).*/
#include <stdio.h>
#include <stdlib.h>
# include <time.h>
//Problema facuta sub linux unde printf("\033[34m"); chiar se executa, sub windows stergeti acele printf
int secunda()
{clock_t start,stop;
start=clock();
do{stop=clock();
}while(((stop-start)/CLOCKS_PER_SEC)<1);
return 1;
}
int main()
{char ch[30];
int h,m,s,a,b,c;
printf("Specificati ora sub formatul HH:MM:SS: \n");
scanf("%d:%d:%d",&a,&b,&c);
sprintf(ch,"%s",__TIME__);
sscanf(ch,"%d:%d:%d",&h,&m,&s);
printf("Ora curenta %s\n",ch);
do {
printf("\033[34m");
printf("%02d:%02d:%02d\n",h,m,s);
printf("\033[4;1H");
if (secunda()) s++;
if(s==60) {m++;s=0;}
if(m==60) {h++;m=0;}
if(h==24) {h=0;}
}while((a*3600+b*60+c-h*3600-m*60-s)!=0);
printf("%02d:%02d:%02d\n",h,m,s);
printf("\033[36m");
printf("Apasati o tasta pentru a iesi");getchar();
getchar();
return 0;
/*Sa se scrie un program care citeste numerele ntregi a,b,c,d si determina cea mai mare dintre
fractiile a/b si c/d.*/
#include <stdio.h>
#include <stdlib.h>
void citire(int *a)
{printf("\nnr:");
scanf("%d",a);
}
int main()
{int a,b,c,d;
citire(&a);
citire(&b);
citire(&c);
citire(&d);
if(a*d>b*c) printf("\n %d/%d > %d/%d",a,b,c,d);
else if(a*d==b*c) printf("\n %d/%d = %d/%d",a,b,c,d);
else printf("\n %d/%d < %d/%d",a,b,c,d);
getchar();
getchar();
return 0;
/*Sa se stabileasca pozitia unei drepte fata de un cerc dat. Se citesc: coordonatele centrului cercului,
raza acestuia, precum si coordonatele a doua puncte situate pe dreapta.*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct punct
{int x,y;
};
void citire(struct punct *a)
{printf("\nx=");
scanf("%d",&a->x);
printf("y=");
scanf("%d",&a->y);
}
float d(struct punct O,struct punct A,struct punct B)
{float r,r1;
if (B.x-A.x==0) return (A.x-O.x);
r1=(float)(B.y-A.y)/(B.x-A.x);
r=r1*O.x-r1*A.x+A.y-O.y;
r=abs(r);
r=r/sqrt(pow(r1,2)+1);
return r;
}
int main()
{ struct punct O,A,B;
printf("A:");
citire(&A);
printf("B:");
citire(&B);
printf("O:");
citire(&O);
float r,r1;
printf("R=");
scanf("%f",&r);
r1=d(O,A,B);
if (r1>r) printf("\n Dreapta exterioara cercului");
if (r1==r) printf("\n Dreapta tangenta cercului");
if (r1<r) printf("\n Dreapta secanta cercului");
getchar();
getchar();
return 0;
}
/*Se citesc coordonatele vrfurilor unui triunghi n plan.Sa se scrie un program care stabileste
pozitia fata de triunghi a unui punct oarecare din plan dat prin coordonatele lui.*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
struct punct
{float x,y;
};
float aria(struct punct a,struct punct b,struct punct c)
{
float d;
d=a.x*b.y+b.x*c.y+a.y*c.x-b.y*c.x-a.x*c.y-a.y*b.x;
d=abs(d)/(float)2;
return d;
}
void citire(struct punct *a)
{printf("\nx=");
scanf("%f",&a->x);
printf("y=");
scanf("%f",&a->y);
}
int main()
{ struct punct A,B,C,P;
printf("A:");
citire(&A);
printf("B:");
citire(&B);
printf("C:");
citire(&C);
printf("P:");
citire(&P);
if (aria(A,B,C)==aria(A,B,P)+aria(A,C,P)+aria(B,C,P)) printf("\n Punctul P este in interiorul triunghiului ABC");
else printf("\n Punctul P nu este in interiorul triunghiului ABC");
//printf("ABC %f \n ABP %f \n ACP %f \n BCP %f",aria(A,B,C),aria(A,B,P),aria(A,C,P),aria(B,C,P));
getchar();
getchar();
return 0;
}
/*Scrieti un program care calculeaza greutatea ideala a unei persoane, utiliznd formulele:
G_barbat=50 + 0.75*(naltime-150) + (vrsta-20)/4;
G_femeie=G_barbat - 10;
Se citesc: sexul, naltimea(n cm), vrsta (n ani).*/
#include <stdio.h>
#include <stdlib.h>
int main()
{ int h,v;
char s;
printf("sex: (M/F)");
s=getchar();
printf("inaltime:");
scanf("%d",&h);
printf("varsta:");
scanf("%d",&v);
float g=0;
switch(s)
{case 'M':case 'm':g=50+0.75*(h-150)+(float)(v-20)/4;break;
case 'F':case 'f':g=50+0.75*(h-150)+(float)(v-20)/4-10;break;
}
printf("\n\tGreutate ideala: %5.2f kg",g);
getchar();
getchar();
return 0;
/*Scrieti un program care transforma coordonatele carteziene ale unui punct din plan n coordonate
polare.*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{ float r,t,x,y;
printf("x=");
scanf("%f",&x);
printf("y=");
scanf("%f",&y);
r=sqrt(pow(x,2)+pow(y,2));
if(x>0 && y>=0) t=atan(y/x);
if(x>0 && y<0) t=atan(y/x)+2*M_PI;
if(x<0) t=atan(y/x)+M_PI;
if(x==0 && y>0) t=M_PI/2;
if(x==0 && y<0) t=3*M_PI/2;
if (r!=0) printf("\nA(%4.2f,%4.2f) -> A(%4.2f,%4.2fpi)",x,y,r,t/M_PI);
else printf("\nA(%4.2f,%4.2f) -> A(%4.2f,t) ,t apartine R",x,y,r);
getchar();
getchar();
return 0;
}
/*2. De la tastatur se citesc 4 perechi de numere reale, care
reprezint n coordonate rectangulare vrfurile unui patrulater. S se stabileasc natura acestui patrulater.
*/
# include <stdio.h>
# include <stdlib.h>
# include <math.h>
struct punct
{ float x,y;
};
//b==1 => camp x
//b==0 => camp y
//a==1 => max
//a==0 -> min
}
else if((paralel(d[0],d[2])&&!paralel(d[1],d[3]))||(!paralel(d[0],d[2])&¶lel(d[1],d[3])))
printf("\ntrapez\n");
else printf("\n patrulater convex oarecare");
}
getchar();
return 0;
}
/*De pe mediul de intrare sunt citite elementele reale ale unui sir de dimensiunea n. Sa se gaseasca
pozitia elementelor de valoare minima si valoare maxima din sir.*/
#include <stdio.h>
#include <stdlib.h>
int main()
{ int n;
float *v,max,min;
register int i;
printf("n=");
scanf("%d",&n);
v=calloc(n,sizeof(float));
if(v==NULL) exit(1);
for (i=0;i<n;i++)
{printf("v[%d]=",i+1);
scanf("%f",v+i);
if(i==0) max=min=v[0];
else {if (v[i]<min) min=v[i];
if(v[i]>max) max=v[i];
}
}
printf("\n Pozitiile elementleor minime: ");
for (i=0;i<n;i++)
if(v[i]==min) printf("%d ",i+1);
printf("\n Pozitiile elementleor maxime: ");
for (i=0;i<n;i++)
if(v[i]==max) printf("%d ",i+1);
getchar();
getchar();
return 0;
}
/*4. S se scrie un program pentru generarea tuturor numerelor prime
mai mici sau egale cu un numr natural n.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int prim(int a)
{if(a==0||a==1)return 0;
register int i;
for (i=2;i<=sqrt(a);i++)
if(a%i==0) return 0;
return 1;
}
int main()
{ int n;
//printf("\033[2J");
printf("n=");
scanf("%d",&n);
register int i;
for (i=2;i<=n;i++)
if(prim(i)) printf("%d ",i);
getchar();
return 0;
}
/* Se citete un numr natural n. S se gseasc cel mai mare
ptrat perfect mai mic sau egal cu n.
Aceeai problem, dar s se indice numrul prim cel mai mic, dar mai mare sau egal cu numrul citit.
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int prim(int a)
{if(a==0||a==1)return 0;
register int i;
for (i=2;i<=sqrt(a);i++)
if(a%i==0) return 0;
return 1;
}
int main()
{int n;
printf("n=");
scanf("%d",&n);
int i;
for (i=n;i>0;i--)
if(sqrt(i)==(int)sqrt(i)) {printf("patrat perfect: %d\n",i);break;}
for (i=n;i>0;i--)
if(prim(2*n-i)){printf("numar prim: %d\n",2*n-i);break; }
getchar();
getchar();
return 0;
}
#include <math.h>
int main()
{int n,v[100],x,i;
printf("n=");
scanf("%d",&n);
printf("x=");
scanf("%d",&x);
unsigned long int u=0;
for (i=0;i<n;i++)
{printf("a%d=",i);scanf("%d",&v[i]);u+=v[i]*pow(x,i);}
printf("valoare %ld",u);
getchar();
getchar();
return 0;
}
/*Sa se scrie un program pentru efectuarea operatiilor de adunare, scadere, nmultire si mpartire
ntre doua polinoame:
A(x)=a0 +a1x1+......+ anxn
B(x)=b0 +b1x1+......+ bmxm
Gradele si coeficientii reali ai polinoamelor se citesc de pe mediul de intrare.
*/
#include <stdio.h>
#include <stdlib.h>
void citire(float *a,int n)
{int i;printf("\n");
for(i=0;i<=n;i++)
{printf("coef x^%d:",i);
scanf("%f",&a[i]);
}
}
void afisare(float *a,int n)
{int i;
for (i=0;i<=n;i++)
if (a[i]!=0) i==n?printf("%+4.2f*x^%d",a[i],i):printf("%+4.2f*x^%d",a[i],i);
}
void reset(float *p,int n)
{int i;
for(i=0;i<=n;i++)
p[i]=0;
}
void inmultire(float *a,int n,float *b,int m,float *c)
{int i,j;
for (i=0;i<=n;i++)
for (j=0;j<=m;j++)
c[i+j]+=a[i]*b[j];
}
void adunare(float *a,int n,float *b,int m,float *c)
{int p=n<m?n:m,i;
for (i=0;i<=p;i++)
c[i]=a[i]+b[i];
if(p==n) for (i=n+1;i<=m;i++)
c[i]=b[i];
if(p==m) for (i=m+1;i<=n;i++)
c[i]=a[i];
}
void scadere(float *a,int n,float *b,int m,float *c)
{int p=n<m?n:m,i;
for (i=0;i<=p;i++)
c[i]=a[i]-b[i];
if(p==n) for (i=n+1;i<=m;i++)
c[i]=(-1)*b[i];
if(p==m) for (i=m+1;i<=n;i++)
c[i]=a[i];
}
int grad(float *a,int n)
{int m=-1,i;
for (i=0;i<=n;i++)
if(a[i]) m=i;
return m;
}
void impartire(float *a,int n,float *b,int m,float *c,float *r)
{int i;
float *p,*p1;
p=calloc(n,sizeof(float));
p1=calloc(n,sizeof(float));
if(p==NULL) exit(1);
if(p1==NULL) exit(1);
c[n-m]=a[n]/b[m];
reset(p1,n);
inmultire(c,n-m,b,m,p1);
scadere(a,n,p1,n,p);
n=grad(p,n);
while(grad(p,n)>=grad(b,m))
{c[n-m]=p[n]/b[m];
reset(p1,n);
inmultire(c,n-m,b,m,p1);
scadere(p,n,p1,n,p);
n=grad(p,n);
}
for (i=0;i<=n+1;i++)
r[i]=p[i];
}
int main()
{ float *a,*b,*c,*r;
int n,m,p,q;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
a=calloc(n,sizeof(float));
if(a==NULL) exit(1);
b=calloc(m,sizeof(float));
if(b==NULL) exit(1);
citire(a,n);
citire(b,m);
p=n>m?n:m;
c=calloc(p,sizeof(float));
printf("\nf=");
afisare(a,n);
printf("\ng=");
afisare(b,m);
adunare(a,n,b,m,c);
printf("\n\nf+g=");
afisare(c,p);
scadere(a,n,b,m,c);
printf("\nf-g=");
afisare(c,p);
scadere(b,m,a,n,c);
printf("\ng-f=");
afisare(c,p);
c=calloc(n+m,sizeof(float));
inmultire(a,n,b,m,c);
printf("\nf*g=");
afisare(c,n+m);
q=n>m?n-m-1:m-n-1;
r=calloc(q,sizeof(float));
if(r==NULL) exit(1);
c=calloc(q+1,sizeof(float));
if(c==NULL) exit(1);
n>m?impartire(a,n,b,m,c,r):impartire(b,m,a,n,c,r);
n>m?printf("\nf/g="):printf("\ng/f=");
afisare(c,q+1);
if (grad(r,q)!=-1)
{ printf("\n\tr=");
afisare(r,q);
}
getchar();
getchar();
return 0;
} //Problema asta merge dar partial, nu am folosit functii de free() pentru ca codeblocksul dadea ceva erori la alocare
//de memorie....
/*O matrice patrata cu elemente reale este mpartita de diagonalele sale n patru zone. Se considera
ca elementele situate pe diagonale nu apartin nici unei zone. Sa se scrie un program care
calculeaza media aritmetica a elementelor fiecarei zone.*/
#include <stdio.h>
#include <stdlib.h>
void citire(float **a,int n)
{int i,j;
for(i=0;i<n;i++)
{printf("\n");
for(j=0;j<n;j++)
{printf("a[%d][%d]=",i+1,j+1);
scanf("%f",&a[i][j]);
}
}
}
void ma(float **a,int n)
{ float maN=0,maS=0,maE=0,maV=0;
int contN=0,contS=0,contE=0,contV=0,i,j;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
{
if(i>j&&i+j<n-1) {maV+=a[i][j];contV++;}
if(i>j&&i+j>n-1) {maS+=a[i][j];contS++;}
if(i<j&&i+j>n-1) {maE+=a[i][j];contE++;}
if(i<j&&i+j<n-1) {maN+=a[i][j];contN++;}
}
printf("\n MaN= %4.2f\nMaE= %4.2f\nMaS= %4.2f\nMaV=
%4.2f\n",maN/contN,maE/contE,maS/contS,maV/contV);
}
int main()
{ int n,i;
float **a;
printf("n=");
scanf("%d",&n);
a=calloc(n,sizeof(float *));
if(a==NULL) exit(1);
for (i=0;i<n;i++)
{a[i]=calloc(n,sizeof(float));
if(a[i]==NULL) exit(1);
}
citire(a,n);
ma(a,n);
getchar();
getchar();
return 0;
int main()
{int i;
citire:{printf("\nn=");
scanf("%d",&n);
for (i=0;i<n;i++)
{printf("\nv[%d]= ",i+1);scanf("%d",&v[i]);}
}
if (!ordonat(v,n)) {printf("\n sir neordonat\n ");//printf("\033[2J");
goto citire;
}
printf("\nx=");
scanf("%d",&x);
cautare(0,n-1);
getchar();
getchar();
return 0;
}
//Se da un sir de n numere ntregi. Sa se extraga subsirul ordonat crescator de dimensiune maxima.
#include <stdio.h>
#include <stdlib.h>
int *secventa(int *p)
{int *q;
q=p;
while (q&&*(q+1)>*q)
q++;
return q;
}
void afisare(int *k,int l)
{printf("\n");
int i;
for(i=0;i<l;i++)
printf("%d ",k[i]);
}
int main()
{ int a[50],p[50],q[50],r[50],n,max=0,i;
printf("n=");
scanf("%d",&n);
for (i=0;i<n;i++)
{printf("a[%d]=",i+1);
scanf("%d",&a[i]);
}
r=a;
p=a;
max=1;
do
{q=secventa(p);
if(max<=q+1-p) {max=q+1-p;r=p;}
p=q+1;
}while (p-a<n-1&&q-a<n-1);
afisare(r,max);
getchar();
getchar();
return 0;
int main()
{ int i;
printf("n=");
scanf("%d",&n);
for(i=0;i<n;i++)
{printf("\n p[%d]=",i+1);
scanf("%d",&p[i]);
}
printf("\nnumar de intrebari:");
scanf("%d",&q);
printf("\nval minima acceptata pentru punctaj:");
scanf("%d",&a);
printf("\n val maxima acceptata pentru punctaj:");
scanf("%d",&b);
back(1);
getchar();
return 0;
}
void diferenta(int a[100],int n,int b[100],int m,int c[100],int *p)
{int i;
for (i=0;i<n;i++)
if(!gasit(a[i],b,m)) {c[*p]=a[i];(*p)++;}
}
int main()
{ int i,n,m,p=0,q=0,r=0;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
printf("\n");
for (i=0;i<n;i++)
{printf("a[%d]= ",i+1);scanf("%d",&a[i]);}
printf("\n");
for (i=0;i<m;i++)
{printf("b[%d]= ",i+1);scanf("%d",&b[i]);}
intersectie(a,n,b,m,c,&p);
reuniune(a,n,b,m,d,&q);
diferenta(a,n,c,p,e,&r);
printf("\n\n Intersectie:");
afisare(c,p);
printf("\n Reuniune:");
afisare(d,q);
printf("\n\n Diferenta:");
afisare(e,r);
getchar();
getchar();
return 0;
n=m=i;
while (i>=0) {a[i]=s[i]-'0';i--;}
strcpy(p,s);
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(a[i]==a[j]) b[a[i]]=1;
i=0;
while(i<m)
{
if(b[p[i]-'0']) {pt=p;strcpy(pt+i,pt+i+1);m--;}
else i++;
}
puts(pt);
printf("\n%s\n",strrev(s));
for (i=0;i<n-1;i++)
for (j=i+1;j<n;j++)
if(s[i]<s[j]) {char c;c=s[i],s[i]=s[j];s[j]=c;}
printf("\n%s\n",s);
getchar();
getchar();
return 0;
}
//Se da o matrice de nxn elemente 0 si 1. Sa se stabileasca daca matricea respectiva este simetrica
#include <stdio.h>
#include <stdlib.h>
int simetric(int a[50][50],int n)
{int i,j;
for (i=0;i<n;i++)
for(j=0;j<n;j++)
if(a[i][j]!=a[j][i]) return 0;
return 1;
}
int main()
{
int n,a[50][50],i,j;
printf("n=");
scanf("%d",&n);
for (i=0;i<n;i++)
for(j=0;j<n;j++)
{printf("a[%d][%d]=",i+1,j+1);
scanf("%d",&a[i][j]);
}
simetric(a,n)==1?printf("\nMatrice simetrica "):printf("\nMatricea nu e simetrica");
getchar();
getchar();
return 0;
}
}
int main()
{ int n,i,cont=0;
printf("n=");
scanf("%d",&n);
for (i=2;i<=n;i++)
{if(frumos(i)) if(cont<10) {printf("%d ",i);cont++;}
else {printf("\n%d ",i);cont=0;}
}
getchar();
getchar();
return 0;
}
/*Se citeste de la tastatura ora, minutul si secunda indicate de un ceas. Sa se calculeze unghiul
masurat n sens trigonometric ntre indicatorul orar si minutar.*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
char ch[20]="";
int H,M,S,g,m,s;
double h,m1,x;
printf("ora: (HH:MM::SS) ");
gets(ch);
sscanf(ch,"%d:%d:%d",&H,&M,&S);
if(H>11) H-=12;
h=M_PI/6*(H+(double)M/60);
m1=M_PI/30*(M+(double)S/60);
x=h-m1;
if(x<0) x=2*M_PI-x;
x*=180/M_PI;
g=(int)x;
x-=g;
x*=60;
m=(int)x;
x-=m;
x*=60;
s=x;
printf("\n Unghi de %d grade, %d minute si %d secunde",g,m,s);
getchar();
getchar();
return 0;
#error Erori la impartire reala Problema neterminata integral
}
/*De pe mediul de intrare se citeste gradul unui polinom si coeficientii sai, care sunt numere ntregi.
n
P x p p x + pn x ( ) = + 1 + ...
01
n care p0 este nenul.
Stiind ca polinomul admite numai radacini ntregi simple, sa se gaseasca radacinile polinomului.*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int divizori(int a,int *p)
{int nr=0,k;
for(k=1;k<=abs(a);k++)
if(a%k==0) {p[nr]=k;p[++nr]=(-1)*k;nr++;}
return nr;
}
int radacina(int a,int *p,int *n)
{ int *b,i,s,nr=0;
b=calloc(*n-1,sizeof(int));
if(b==NULL) {fprintf(stderr,"\nEroare la alocarea de memorie ");exit(1);}
rad:
{if (*n==0) return nr;
b[*n-1]=p[*n];
for (i=*n-1;i>0;i--)
b[i-1]=a*b[i]+p[i];
s=b[0]*a+p[0];
if (s!=0&&nr==0) return 0;
if(s!=0&&nr!=0) return nr;
nr++;
for (i=0;i<*n;i++)
p[i]=b[i];
p[*n]=0;
*n=*n-1;
}
goto rad;
}
int main()
{
int n,*p,i,m,r,q[20]={0},ok=1;
printf("n=");
scanf("%d",&n);
p=calloc(n,sizeof(int));
if(p==NULL) {fprintf(stderr,"\nEroare la alocarea de memorie ");exit(1);}
for (i=0;i<=n;i++)
{printf("p^%d= ",i);
scanf("%d",p+i);
}
m=divizori(p[0],q);
for (i=0;i<m;i++)
if((r=radacina(q[i],p,&n))>0) {printf("\n %d este radacina de ordin %d",q[i],r);ok=0;}
if(ok) printf("\n\n Polinomul nu are radacini intregi ");
getchar();
getchar();
return 0;
}
/*Se dau dou iruri de caractere care reprezint numere ntregi
zecimale foarte mari. S se scrie un program de efectuare a operaiilor aritmetice asupra lor
*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
int v3[100]={0},v1[100]={0},v2[100]={0};
void afisare( int v[100],int n)
{int i;
for(i=n-1;i>=0;i--)
printf("%d",v[i]);
}
}
int main()
{char s[100];
int n,m,i;
citire:
{printf("a=");
gets(s);
for (i=strlen(s)-1;i>=0;i--)
{if(!isdigit(s[i])) {printf("\nValoare eronata a numarului !!!\nIntroduceti numere naturale\n"); goto citire;}
v1[strlen(s)-i-1]=s[i]-'0';
}
n=strlen(s);
printf("b=");
gets(s);
for (i=strlen(s)-1;i>=0;i--)
{if(!isdigit(s[i])) {printf("\nValoare eronata a numarului !!!\nIntroduceti numere naturale\n"); goto citire;}
v2[strlen(s)-i-1]=s[i]-'0';
}
m=strlen(s);
printf("\na+b=");
adunare(v1,n,v2,m);
printf("\na-b=");
scadere(v1,n,v2,m);
getchar();
return 0;
matrice()
{p= new int*[50];
if(p==NULL) exit(1);
{printf("\n");
for(int j=0;j<n;j++)
printf("%d ",p[i][j]);
}
~matrice() {for (int i=0;i<n;i++)
delete [] p[i];
delete [] p;
}
return c;
return c;
for (i=0;i<n;i++)
for (j=0;j<n;j++)
c.p[i][j]=a*p[i][j];
return c;
}
};
int main()
{
printf("n=");
scanf("%d",&n);
matrice a(10,10);
a.init(n,n);
matrice b(10,10);
b.init(n,n);
a.citire();
b.citire();
matrice c(10,10);
c.init(n,n);
c=a*b-(a+b)*2;
c.afisare();
getchar();
return 0;
/*Fiind date anul, luna, ziua, sa se scrie o functie care sa returneze a ctea zi din an este ziua
respectiva si cte zile au mai ramas din anul respectiv.*/
#include <stdio.h>
#include <stdlib.h>
int bisect(int a)
{
if ((a%4==0&&a%100!=0)||(a%400==0)) return 1;
return 0;
}
int main()
{
int a,l,zile=0,z;
citire:
{printf("\nan: ");
scanf("%d",&a);
printf("luna: ");
scanf("%d",&l);
if(l<1||l>12) {printf("\n\n\t\tValoare eronata a lunii!!!");goto citire;}
printf("zi:");
scanf("%d",&z);
if(z<1||z>31) {printf("\n\n\t\tValoare eronata a zilei!!!");goto citire;}
if(l==2) if(!bisect(a)&&z==29) {printf("\n\n\t\tAnul nu e bisect si ziua 29 nu exista!!!");goto citire;}
}
if(l!=9&&l!=10) zile=(l-1)/2*30+(l-1-(l-1)/2)*31;
else zile=((l-1)/2-1)*30+(l-2-(l-1)/2)*31;
if(l>2) if(bisect(a)) zile-=1;else zile-=2;
zile+=z;
printf("\n\t Ziua este a %d -a din an\n\tAu mai ramas %d zile din an",zile,bisect(a)?366-zile:365-zile);
getchar();
getchar();
return 0;
int main()
{int v[5]={0},n,c10[5]={0},c5[4]={0};
c10[0]=(int)'I';
c10[1]=(int)'X';
c10[2]=(int)'C';
c10[3]=(int)'M';
c5[0]=(int)'V';
c5[1]=(int)'L';
c5[2]=(int)'D';
char s[100]="",lch[5]="";
printf("an:");
scanf("%d",&n);
int i=0;
while (n)
{v[i]=n%10;n/=10;i++;}
n=i;
for (i=n-1;i>=0;i--)
switch (v[i])
{case 1: lch[0]=(char)c10[i];lch[1]=NULL;strcat(s,lch);break;
case 2:case 3:{int j;for (j=0;j<v[i];j++) lch[j]=(char)c10[i];lch[v[i]]=NULL; strcat(s,lch);break;}
case 4: lch[0]=(char)c10[i];lch[1]=(char)c5[i];lch[2]=NULL;strcat(s,lch);break;
case 5: lch[0]=(char)c5[i];lch[1]=NULL;strcat(s,lch);break;
case 6:case 7:case 8: lch[0]=(char)c5[i]; int j; for (j=1;j<=v[i]-5;j++) lch[j]=(char)c10[i];lch[v[i]4]=NULL;strcat(s,lch);break;
case 9: lch[0]=(char)c10[i];lch[1]=(char)c10[i+1];lch[2]=NULL;strcat(s,lch);break;
}
printf("an: %s",s);
getchar();
getchar();
return 0;
}
/*Dndu-se forma postfixata a unei expresii aritmetice care contine numai numere ntregi si
operatori +,-,*,/, sa se scrie un program pentru evaluarea sa.*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>
struct nod
{int val;
struct nod *urm;
};
int main()
{ struct nod *vf;
char s[100],*p,ch[]=", ";
int i,n=0,m=0;
citire:
{
printf("\nIntroduceti expresia, valori separate prin virgula (2,3,+): \nE=");
gets(s);
if(strlen(s)==0) {printf("\n\t Valoare eronata a expresiei");goto citire;}
for (i=0;i<strlen(s);i++)
scadere(p,n,p1,n,p);
n=grad(p,n);
}
for (i=0;i<=n+1;i++)
r[i]=p[i];
int main()
{
float *a,*b,*c,*r,*d,*e;
int n,m,p;
printf("n=");
scanf("%d",&n);
printf("m=");
scanf("%d",&m);
a=calloc(n,sizeof(float));
if(a==NULL) exit(1);
b=calloc(m,sizeof(float));
if(b==NULL) exit(1);
citire(a,n);
citire(b,m);
p=n<m?n:m;
c=calloc(p,sizeof(float));
if(c==NULL) exit(1);
r=calloc(50,sizeof(float));
if(r==NULL) exit(1);
impartire(a,n,b,m,r,c);
if(grad(c,p)==-1) {printf("\n c.m.m.d.c= ");afisare(b,p);c=b;}
else {printf("\n c.m.m.d.c= ");afisare(c,--p);}
reset(r,p);
inmultire(a,n,b,m,r);
d=calloc(50,sizeof(float));
if(d==NULL) exit(1);
e=calloc(p,sizeof(float));
if(e==NULL) exit(1);
impartire(r,n+m,c,p,d,e);
printf("\n c.m.m.m.c= ");
afisare(d,n+m-p);
getchar();
getchar();
return 0;
}
//S se implementeze noiunea de mulime i operaiile permise
// asupra sa.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "multime.c"
int main()
{
multime a,b,c(NM);
c=a+b;
printf("\nReuniune:");
c.afisare();
c=a*b;
printf("\nIntersectie:");
c.afisare();
printf("\nDiferenta:");
c=a-b;
c.afisare();
printf("\nDiferenta simetrica:");
c=(a-b)+(b-a);
c.afisare();
getchar();
return 0;
Multime.c:
#define NM 100
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
class multime
{ private:
int *p,n;
public:
multime()
{p=new int [NM];
if(p==NULL) exit(1);
citire();
}
multime(int a)
{p=new int [NM];
if(p==NULL) exit(1);
n=a;
}
int gasit(int a)
{int i;
for (i=0;i<n;i++)
if(p[i]==a) return 1;
return 0;
}
void citire()
{char s[NM],x[]=",{}",*q;
citire:
{n=0;
printf("\nMultime:");
gets(s);
q=strtok(s,x);
while (q)
{
if (gasit(atoi(q))) {printf("\n Valoarea introdusa nu respecta notiunea de multime !!!");goto citire;}
else {p[n]=atoi(q);n++;}
q=strtok(NULL,x);
}
}
}
void setn(int a)
{n=a;}
void afisare()
{printf("\n");
int i;
if(n==0) printf("Multimea vida ");
else for (i=0;i<n;i++)
printf("%d ",p[i]);
}
multime operator *(multime b) // INTERSECTIE
{multime c(NM);
int i,j,k=0;
for (i=0;i<n;i++)
for (j=0;j<b.n;j++)
if(p[i]==b.p[j]) {c.p[k]=p[i];k++;}
c.setn(k);
return c;
}
multime operator +(multime b) // REUNIUNE
{multime c(NM);
int i,j,k=0,ok;
for (i=0;i<n;i++)
{c.p[k]=p[i];k++;}
for (i=0;i<b.n;i++)
{ok=1;
for (j=0;j<n;j++)
if(b.p[i]==c.p[j]) ok=0;
if(ok) {c.p[k]=b.p[i];k++;}
}
c.setn(k);
return c;
//S se implementeze un editor de texte care s permit cteva operaii definite de Dvs.
//(inserarea unui text, tergere, modificare etc. ..)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "editor.c"
int main()
{char s[255]="",ch[100]="";
printf("Text:");gets(s);
citire:
{printf("\noperatie dorita (I/A/S/M/E): ");
gets(ch);
switch (ch[0])
{case 'I':case 'i': inserare(s);break;
case 'A':case 'a': afisare(s);break;
case 'S':case 's': stergere(s);break;
case 'M':case 'm': modificare(s);break;
}
}
if(ch[0]!='E'&&ch[0]!='e') goto citire;
getchar();
return 0;
Editor.c:
void inserare(char s[255])
{ char a[255];
printf("\n Introduceti text:");
gets(a);
strcat(s,a);
}
void afisare(char s[255])
{printf("\n %s\n",s);
}
void stergere(char *s)
{char s1[100],s2[100],*p,*q;
printf("\n Introduceti cuvantul de la care sa incepa stergerea:");
gets(s1);
printf("Introduceti cuvantul pana la care sa se stearga:");
gets(s2);
p=strstr(s,s1);
q=strstr(p,s2);
strcpy(p,q);
}
void modificare(char *s)
{char ch[100],*p,*q,q1[100];
printf("Introduceti textul ce va fii modificat:");
gets(ch);
p=strstr(s,ch);
q=p+strlen(ch);
printf("introduceti noul text:");
gets(ch);
strcpy(q1,q);
strcpy(p,ch);
p=p+strlen(ch);
strcpy(p,q1);
}
/*Folosind numai pointeri si expresii cu pointeri, se vor scrie functii de citire, afisare si nmultire a
doua matrice.*/
#include <stdio.h>
#include <stdlib.h>
#define NM 50
int **init()
{int **p,i;
p=calloc(NM,sizeof(int));
if(p==NULL) exit(1);
else for (i=0;i<NM;i++)
{p[i]=calloc(NM,sizeof(int));
if(p[i]==NULL) exit(1);
}
return p;
}
void citire(int **p,int *n)
{printf("n=");
scanf("%d",n);
int i,j;
for (i=0;i<*n;i++)
for (j=0;j<*n;j++)
{printf("a[%d][%d]=",i+1,j+1);
scanf("%d",&p[i][j]);
}
}
void afisare(int **p,int n)
{
printf("\n");
int i,j;
for (i=0;i<n;i++)
{printf("\n");
for(j=0;j<n;j++)
printf("%d ",p[i][j]);
}
}
int **inmultire(int **p,int n,int**q,int m)
{if (n!=m) {printf("\nMatrici diferite ca rang!"); return NULL;}
else{ int i=0;
int **c;
c=init();
while (i<n) { int j,k,s=0;
for (j=0;j<n;j++)
{s=0;
for (k=0;k<n;k++)
s+=p[i][k]*q[k][j];
c[i][j]=s;
}
i++;
}
afisare(c,n);
return c;
}
}
void merge(float *a,int n, float *b,int m)
{int i,j,k;
i=j=k=0;
float *c;
c=init(2);
verificare:
{if (a[i]<b[j]) {c[k]=a[i];k++;i++;}
else if (b[j]<a[i]) {c[k]=b[j];k++;j++;}
else {c[k]=a[i];k++;i++;j++;}
}
if (i<n&&j<m) goto verificare;
while (n-i>0) {c[k]=a[i];k++;i++;}
while (m-j>0) {c[k]=b[j];j++;k++;}
printf("\n Interclasare: ");
afisare(c,k);
}
int main()
{float *a,*b;
int n,m;
a=init(1);
b=init(1);
citire(a,&n);
citire(b,&m);
merge(a,n,b,m);
getchar();
return 0;
}
//Write a function to sort ascending n character strings*/
#include <stdio.h>
#include <stdlib.h>
#define NM 250
#include <string.h>
char *init()
{char *p;
p=calloc(NM,sizeof(char));
if(p==NULL) exit (1);
return p;
}
void citire(char **p, int *n)
{printf("n=");
scanf("%d",n);
gets(p[0]);
int i;
for (i=0;i<*n;i++)
{p[i]=init();
printf("sir:");
gets(p[i]);
}
}
m=malloc(sizeof(int));
if(m==NULL) {fprintf(stderr,"\n\tEroare la alocarea de memorie"); exit(1);}
printf(" n= ");
scanf("%d",n);
printf(" m= ");
scanf("%d",m);
a=calloc(*n+1,sizeof(int));
if(a==NULL) {fprintf(stderr,"\n\tEroare la alocarea de memorie"); exit(1);}
b=calloc(*m+1,sizeof(int));
if(b==NULL) {fprintf(stderr,"\n\tEroare la alocarea de memorie"); exit(1);}
citire(a,*n);
citire(b,*m);
c=calloc(*n+*m+2,sizeof(int));
if(c==NULL) {fprintf(stderr,"\n\tEroare la alocarea de memorie"); exit(1);}
inmultire(a,*n,b,*m,c);
printf("\n");
afisare(c,*n+*m);
getchar();
getchar();
return 0;
/*Sa se scrie o functie care calculeaza puterea k a unei matrici patrate, folosind pointeri pentru
referentierea elementelor matricei. Matricea obtinuta va fi afisata sub forma naturala.*/
#include <stdio.h>
#include <stdlib.h>
void citire(int **a, int n)
{ register int i,j;
for (i=0;i<n;i++)
for(j=0;j<n;j++)
{printf("a[%d][%d]= ",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
void atribuire (int **b,int **a,int n)
{int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
b[i][j]=a[i][j];
}
void inmultire(int **b,int **a, int n)
{register int i,j,k;
int **c,s=0;
c=calloc(n,sizeof(int *));
if(c==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
for (i=0;i<n;i++)
{c[i]=calloc(n,sizeof(int));
if(c[i]==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
}
i=0;
while (i<n)
{for(j=0;j<n;j++)
{s=0;
for(k=0;k<n;k++)
s+=b[i][k]*a[k][j];
c[i][j]=s;
}
i++;
}
atribuire(b,c,n);
for (i=0;i<n;i++)
free(c[i]);
free(c);
b=calloc(n,sizeof(int *));
if(b==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
for (i=0;i<n;i++)
{b[i]=calloc(n,sizeof(int));
if(b[i]==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
}
for (i=0;i<n;i++)
for(j=0;j<n;j++)
b[i][j]=1;
citire(a,n);
atribuire(b,a,n);
for (i=1;i<k;i++)
inmultire(b,a,n);
printf("\nMatricea la puterea %d:",k);
afisare(b,n);
getchar();
getchar();
return 0;
/*Sa se scrie o functie care calculeaza matricea transpusa a unei matrice, folosind pointeri si
expresii cu pointeri pentru referentierea elementelor matricei. Matricele vor fi afisate sub forma
naturala.*/
#include <stdio.h>
#include <stdlib.h>
void citire(int **a, int n)
{ register int i,j;
for (i=0;i<n;i++)
for(j=0;j<n;j++)
{printf("a[%d][%d]= ",i+1,j+1);
scanf("%d",&a[i][j]);
}
}
void atribuire (int **b,int **a,int n)
{int i,j;
for(i=0;i<n;i++)
for(j=0;j<n;j++)
b[i][j]=a[i][j];
}
void transpusa(int **b,int **a,int n)
{register int i,j;
atribuire(b,a,n);
for (i=0;i<n;i++)
for(j=0;j<n;j++)
if(i<=j) {int aux=b[j][i];b[j][i]=b[i][j];b[i][j]=aux;}
}
void afisare(int **a,int n)
{printf("\n");
int i,j;
for (i=0;i<n;i++)
{printf("\n");
for(j=0;j<n;j++)
printf("%d ",a[i][j]);
}
}
int main()
{ int n,**a,**b;
register int i;
printf("n=");
scanf("%d",&n);
a=calloc(n,sizeof(int *));
if(a==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
for (i=0;i<n;i++)
{a[i]=calloc(n,sizeof(int));
if(a[i]==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
}
b=calloc(n,sizeof(int *));
if(b==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
for (i=0;i<n;i++)
{b[i]=calloc(n,sizeof(int));
if(b[i]==NULL) {fprintf(stderr,"\n\tEroare la alocare de memorie");}
}
citire(a,n);
transpusa(b,a,n);
afisare(b,n);
getchar();
getchar();
return 0;
/*Sa se scrie o functie recursiva si una nerecursiva pentru calculul valorii polinoamelor Hermite
H(x) definite astfel:
H0(x)=1; H1(x)=2x;
Hn(x)=2nHn-1(x)-2(n-1)Hn-2(x), pentru n2.*/
#include <stdio.h>
#include <stdlib.h>
int hermite(int n,int x)
{if (n==0) return 1;
if(n==1) return 2*x;
return (2*n*hermite(n-1,x)-2*(n-1)*hermite(n-2,x));
}
int main()
{int n,x;
citire:{printf("n= ");
scanf("%d",&n);
}
if(n<1) {printf("\n\t Valoare eronata pentru n");goto citire;}
printf("x= ");
scanf("%d",&x);
printf("\n Valoare polinom Hemite: %d ",hermite(n,x));
getchar();
getchar();
return 0;
else {hanoi(n-1,a,c,b);
printf("\n Mutare disc de pe %c pe %c",a,b);
hanoi(n-1,c,b,a);
}
int main()
{
int n;
char a='A',b='B',c='C';
printf("n= ");
scanf("%d",&n);
hanoi(n,a,c,b);
getchar();
return 0;
}
/*Sa se scrie un program recursiv care citeste n cuvinte si le afiseaza n ordinea inversa a
introducerii lor.*/
#include <stdio.h>
#include <stdlib.h>
void citire(int i,int n)
{printf("\n cuvant:");
char s[100];
if(i==0) gets(s);
gets(s);
if(i+1<n) citire(i+1,n);
printf("\n%s",s);
}
int main()
{ int n;
citire:
{printf("\nn=");
scanf("%d",&n);
}
if(n<0) {printf("\n\tValoare negativa a lui n!");goto citire;}
if(n>0 )citire(0,n);
getchar();
return 0;
}
//Sa se scrie un program recursiv de generare a produsului cartezian a n multimi.
#include <stdio.h>
#include <stdlib.h>
int ok=0;
void afisare(int k,int *x)
{if(ok==1) printf(",(");
else {printf("(");ok=1;}
int i;
printf("%d",x[0]);
for(i=1;i<=k;i++)
printf(",%d",x[i]);
printf(")");
{int i;
for (i=1;i<=n;i++)
{ x[j]=i;
if (valid(j)) { if(j==k) afisare(j);
else combinari(j+1);
}
}
}
int main()
{
citire:
{
printf("n=");
scanf("%d",&n);
}
if(n<0) {printf("\n\t Valore a lui n negativa!");goto citire;}
citire1:
{printf("k=");
scanf("%d",&k);
}
if(k>n) {printf("\n\tValoare a lui K mai mare decat n!");goto citire1;}
combinari(1);
getchar();
return 0;
}
/*Sa se scrie un program de rezolvare a problemei celor 8 regine (determinarea tuturor asezarilor pe
tabla de sah a celor 8 regine astfel nct sa nu se atace).*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int valid(int k,int x[])
{ int i;
for(i=1;i<k;i++)
if(x[i]==x[k] || abs(x[i]-x[k])==k-i) return 0;
return 1;
}
void afisare(int k, int x[])
{int i;
for(i=1;i<=k;i++)
printf("%d ",x[i]);
printf("\n");
}
void regina(int k,int x[])
{int i;
for(i=1;i<=8;i++)
{x[k]=i;
if(valid(k,x)) {if(k==8) afisare(k,x);
else regina(k+1,x);
int main()
{ int x[9];
regina(1,x);
getchar();
return 0;
}
//Sa se genereze recursiv permutarile multimii A de n elemente.
#include <stdio.h>
#include <stdlib.h>
int valid(int k,int *x)
{int i;
for(i=0;i<k;i++)
if(x[i]==x[k]) return 0;
return 1;
}
void afisare(int k,int *x)
{printf("\n");
int i;
for (i=0;i<=k;i++)
printf("%d ",x[i]);
}
void permutari(int k,int n,int *x)
{int i;
for (i=1;i<=n;i++)
{x[k]=i;
if(valid(k,x)) {if(k==n-1) afisare(k,x);
else permutari(k+1,n,x);
}
}
}
int main()
{int n,*x;
printf("n= ");
scanf("%d",&n);
x=calloc(n,sizeof(int));
if(x==NULL) {fprintf(stderr,"\nEroare la alocare de memorie");exit(1);}
permutari(0,n,x);
getchar();
return 0;
}
/*Funcia lui Ackermann. S se scrie programul recursiv care calculeaz funcia lui Ackermann definit astfel:
Ack(0,n)=n+1
pentru n N
Ack(m,0)=Ack(m-1,1)
pentru m N*
Ack(m,n)=Ack(m-1,Ack(m,n-1)) pentru m,n N*
*/
#include <stdio.h>
#include <stdlib.h>
int ack( register int m,register int n)
{
switch(m)
{case 0: return n+1;
default: switch (n)
{case 0: return ack(m-1,1);
default: return ack(m-1,ack(m,n-1));
}
}
}
int main()
{int n,m;
citire:
{
printf("n=");
scanf("%d",&n);
}
if(n<0) {printf("\n\t Valore a lui n negativa!");goto citire;}
citire1:
{printf("m=");
scanf("%d",&m);
}
if(m<0) {printf("\n\tValoare a lui m negativa!");goto citire1;}
printf("Ack(%d,%d)=%d",n,m,ack(n,m));
getchar();
return 0;
printf("}");
}
}
void afisare(struct element *s,int k,int n,int m)
{printf("\n");
int i,**b;
b=calloc(n,sizeof(int *));
if(b==NULL) {fprintf(stderr,"\nEroare la alocare de memorie");exit(1);}
for(i=0;i<n;i++)
{b[i]=calloc(m,sizeof(int));
if(b[i]==NULL) {fprintf(stderr,"\nEroare la alocare de memorie");exit(1);}
}
for(i=0;i<=k;i++)
if(i==0) b[s[i].x][s[i].y]='x';
else b[s[i].x][s[i].y]=i;
print(b,n,m);
for(i=0;i<n;i++)
free(b[i]);
free(b);
}
void labirint(int k,struct element *s,int **v,int n,int m,struct element *p)
{int i;
for (i=0;i<4;i++)
{s[k].x=s[k-1].x+p[i].x;
s[k].y=s[k-1].y+p[i].y;
if (valid(s,k,v)) {if(solutie(s,k,n,m)) afisare(s,k,n,m);
else labirint(k+1,s,v,n,m,p);
}
}
}
void citire(int **v,int *n,int *m)
{int i,j;
FILE *in;
in=fopen("matrice.txt","r");
if(in==NULL) {fprintf(stderr,"\nEroare la deschiderea fisierului");exit(1);}
for(i=0;i<*n;i++)
{v[i]=calloc(*m,sizeof(int));
if(v[i]==NULL) {fprintf(stderr,"\nEroare la alocare de memorie");exit(1);}
}
fscanf(in,"%d %d",&i,&j);
for(i=0;i<*n;i++)
for(j=0;j<*m;j++)
fscanf(in,"%d",&v[i][j]);
fclose(in);
print(v,*n,*m);
}
int main()
{int *n,*m,**v;
struct element *s,p[]={{-1,0},{0,1},{1,0},{0,-1}};
n=malloc(sizeof(int));
if(n==NULL) {fprintf(stderr,"\nEroare la alocare de memorie");exit(1);}
m=malloc(sizeof(int));
if(m==NULL) {fprintf(stderr,"\nEroare la alocare de memorie");exit(1);}
FILE *in;
in=fopen("matrice.txt","r");
/*Cunoscnd data de nastere a Dvs. si stiind ca n anul curent va aniversati ziua de nastere n ziua
de x [luni, marti, ..., duminica], scrieti un program pentru a afisa ziua (din saptamna) n care vati
nascut*/
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct
{int zi,luna,an;
} data;
int bisect(int a)
{ if ((a%4==0&&a%100!=0)||(a%400==0)) return 1;
return 0;
}
int main()
{data a;
int s,i,b;
char ch[10];
printf("zi nastere:");
scanf("%d",&a.zi);
printf("luna:");
scanf("%d",&a.luna);
printf("an:");
scanf("%d",&a.an);
gets(ch);
printf("zi din saptamana de nastere din anul curent:");
gets(ch);
if(!strcmp(ch,"Duminica")) b=0;
if(!strcmp(ch,"Luni")) b=1;
if(!strcmp(ch,"Marti")) b=2;
if(!strcmp(ch,"Miercuri")) b=3;
if(!strcmp(ch,"Joi")) b=4;
if(!strcmp(ch,"Vineri")) b=5;
if(!strcmp(ch,"Sambata")) b=6;
sscanf(__DATE__,"%*s %*d %d",&s);
for (i=s;i>a.an;i--)
if(bisect(i)) {if(b==0) b=5;else if(b==1) b=6; else b-=2;}
else {if(b==0) b=6;else b--;}
switch(b)
{case 0:printf("\nDuminica");break;
case 1:printf("\nLuni");break;
case 2:printf("\nMarti");break;
case 3:printf("\nMiercuri");break;
case 4:printf("\nJoi");break;
case 5:printf("\nVineri");break;
case 6:printf("\nSambata");break;
}
getchar();
return 0;
}