Sunteți pe pagina 1din 5

PROBLEMA 5

#include<stdio.h>
#include<conio.h>
#include<math.h>
#define R 10000
#define Io 1e-12
#define Vt 0.025
#define E 10
double radacina;
double f(double x)
{ return E-x-R*Io*(exp(x/Vt)-1);
}
int bf(double ls, double ld, double er)
{ double xm;
if(f(ls)*f(ld)>0) return 0;
if(f(ls)==0)
{ radacina=ls;
return 1;
}
if(f(ld)==0)
{ radacina=ld;
return 1;
}
xm=0.5*(ls+ld);
while((fabs(ld-ls)>er)&&(f(xm)!=0))
{ xm=0.5*(ls+ld);
if(f(ls)*f(xm)<0) ld=xm;
else ls=xm;
}
radacina=xm;
return 1;
}
int main(void)
{ double ls, ld, i;
printf("limita la stanga=");
scanf("%lf",&ls);
printf("limita la dreapta=");
scanf("%lf",&ld);
if (bf(ls, ld, 0.0001)==0) printf("Functia nu are solutii");
else printf("\nTensiunea prin dioda este=%lf V", radacina);
i=(E-radacina)/R;
printf("\nCurentul prin dioda este=%lf A", i);
getch();
return 0; }

PROBLEMA 6
#include<stdio.h>
#include<conio.h>
#include<math.h>
#define RC 1
double *sol;
double f(double x)
{ return -0.5+exp(-x/RC);}
double derf(double x)
{ return (-1/RC)*(exp(-x/RC));}
int MNR(double x0, double nr_iter, double er, double*sol)
{ double xn, xn_1, aux;
int i=1;
xn=x0;
do{ xn_1=xn;
if (aux=derf(xn_1)==0) return 2;
xn=xn_1-f(xn_1)/aux;
i++;
}while((fabs(xn-xn_1)>er)&&(i<=nr_iter));
if (i>=nr_iter) return 1;
*sol=xn;

return 0;
}
int main(void)
{ int i, nrmax_iter;
double er, x0;
printf("Eroarea maxima dorita=");
scanf("%lf", &er);
printf("\nValoarea de start pentru aproximatii=");
scanf("%lf", &x0);
printf("\nNumarul maxim de iteratii este=");
scanf("%d", &nrmax_iter);
switch(MNR(x0, nrmax_iter, er, sol))
{ case 2: printf("\nDerivata este nula");break;
case 1: printf("\nS-a depasit numarul de iteratii");break;
case 0: printf("\nTimpul solicitat este=%lf", *sol);
}
getch();
return 0;
}

PROBLEMA 4
#include<stdio.h>
#include<conio.h>
#include<math.h>
double radacina;
double f(double s)
{ return 10/(s*(s+1)*(s+2));
}
int bf(double ls, double ld, double er)
{ double xm;
if(f(ls)*f(ld)>0) return 0;
if(f(ls)==0)
{ radacina=ls;
return 1;
}
if(f(ld)==0)
{ radacina=ld;
return 1;
}
xm=0.5*(ls+ld);
while((fabs(ld-ls)>er)&&(f(xm)!=0))
{ xm=0.5*(ls+ld);
if(f(ls)*f(xm)<0) ld=xm;
else ls=xm;
}
radacina=xm;
return 1;
}
int main(void)
{ int i, n;
double ls, ld, er;
printf("limita la stanga=");
scanf("%lf",&ls);
printf("limita la dreapta=");
scanf("%lf",&ld);
if(bf(ls, ld, 0.001)==0)
printf("Functia nu are solutii\n");
else printf("Radacina este= %lf", radacina);
getch();
return 0;
}

S-ar putea să vă placă și