|
|
Questo è il mio massimo.Tutto quello che ho fatto da quando ho iniziato a programmicchiare,escluse un paio di cose relative agli array,è qui dentro. Per prima cosa viene inserita l'equazione di secondo grado(graficamente verrà fuori uno schifo,vi avviso)e,supponendo si stia lavorando su un piano cartesiano,verrà trovato anche il vertice. Successivamente si potrà anche inserire l'equazione di primo grado rappresentante una retta.A questo punto il programma si occupa di controllare se suddetta retta attraversa la parabola,è tangente alla parabola o non attraversa mai la parabola.
| CODE | #include<stdio.h>
#include<conio.h>
#include<math.h>
#include<stdlib.h>
int main (void)
{ char scelta;
int a,b,c,m,q,b2,c2; //b2 e c2 nascono dalla somma dei valori rispettivamente di (b e -q) e di (c e -m)
double delta,x1,x2,radice,verticex,verticey,radice2,iy1,iy2;
do{ //ciclo di controllo principale,permette,una volta finita l'esecuzione,di continuare dall'inizio
do{ // ciclo legato al controllo IF(ramo else)
do{ //ciclo di controllo che permette di reinserire i valori di a,b e c
printf("\nInserisci valore di a: ");
scanf("%d", &a);
printf("Inserisci valore di b: ");
scanf("%d", &b);
printf("Inserisci valore di c: ");
scanf("%d", &c);
printf("L'equazione inserita e' Y=%dx(2) %dx %d",a,b,c);
delta=pow(b,2)-4*(a*c); // formula per calcolare il delta,ossia b alla seconda meno 4 a per c
if (delta < 0 )
{
printf("\nL'equazione e' impossibile poiche' il delta e' inferiore a zero\n");
}
printf("\nVuoi modificare i valori inseriti?S/N");
scelta=getch();
} while ((scelta == 's') || (scelta == 'S')); //possibilità di scegliere se modificare i valori immessi.Esegue controllo su delta inferiori a zero permettendo cosi di reinserire i valori
if (delta > 0)
{
//utilizzo la formula risoutiva delle equazioni di secondo grado
// -b(+-)radice quadra di b alla seconda meno 4 a per c
radice=sqrt(delta);
//printf("\nla radice del delta e' %lf",radice);
getch();
x1=((-b)-radice)/(a*2);
x2=((-b)+radice)/(a*2);
printf("\nx1 corrisponde a %lf\nx2 corrisponde a %lf",x1,x2);
verticex = (x1+x2)/2;
verticey = -delta/4*a;
printf("\nIl vertice della parabola e' (%lf:%lf)",verticex,verticey);
}
if (delta == 0)
{
x1=x2=-b/(a*2);
printf("\nEssendo il delta pari a 0,le due soluzioni sono coincidenti.\nInfatti x1 e x2 hanno valore %lf e %lf",x1,x2);
printf("\nIl vertice della parabola e' (%lf:0)",x1);
}
if (delta >= 0) //IMPORTANTE,QUANDO IL DELTA è INFERIORE A ZERO,ESEGUE CONTROLLO IN MODO DA IMPEDIRE AL PROGRAMMA DI CONTINUARE
{
//parte riguardante la retta
getch();
printf("\nOra,data una determinata retta,vogliamo trovarne i punti che si \nintersecano assieme alla parabola");
getch();
printf("\nInserisci valore di m: ");
scanf("%d", &m);
printf("\nInserisci valore di q: ");
scanf("%d", &q);
printf("\nL'equazione inserita e' Y=%dx %d",m,q);
printf("\nNe consegue che: %dx(2)%dx%d=%dx %d",a,b,c,m,q);
getch();
//poichè devo eguagliare le due equazioni,procedo a sommare i termini simili,facendo attenzione al segno durante lo spostamento
b2=b+(-m);
c2=c+(-q);
// ho trovato una nuova equazione di secondo grado,che mi permetterà,una volta risolta,di determinare per quali punti dell'asse delle x si intersecheranno retta e parabola
printf("\neguagliando le due equazioni se ne ricava:%dx(2) %dx %d",a,b2,c2);
//getch();
delta=pow(b2,2)-4*(a*c2);
// printf("\n%lf delta",delta); da togliere
if (delta < 0 )
printf("\nnon esiste alcuna retta che passi per la parabola");
if (delta > 0)
{
radice2=sqrt(delta);
getch();
x1=((-b2-radice2)/(a*2));
x2=((-b2+radice2)/(a*2));
printf("\nx1 corrisponde a %lf\nx2 corrisponde a %lf. \nI punti trovati sono le cordinate delle intersezioni sull'asse della x",x1,x2);
}
if (delta == 0)
{
x1=x2=-b2/(a*2);
printf("\nEssendo il delta pari a 0,le due soluzioni sono coincidenti.\nInfatti x1 e x2 hanno valore %lf e %lf",x1,x2);
}
iy1=a*(pow(x1,2))+(b*x1)+c;
iy2=a*(pow(x2,2))+(b*x2)+c;
printf("\nSostituendo le x trovate alle due equazioni iniziali,e' possibile risalire \nai due punti che si intersecano sull'asse delle y.");
if (iy1 == iy2)
{
printf("\nLa retta si interseca su un punto solo: %lf; %lf",x1,iy1);
}
else
{
printf("\n\nIl primo punto in cui la retta si interseca sulla parabola e' %lf; %lf",x1,iy1);
printf("\n\nIl secondo punto in cui la retta si interseca sulla parabola e' %lf; %lf",x2,iy2);
}
printf("Vuoi continuare ad inserire altri dati? S/N");
scelta=getch();
system("cls");
}
else
{
printf("\nEssendo il delta minore di zero non e' possibile proseguire");
printf("\nVuoi re-inserire altri dati? S/N");
scelta=getch();
}
} while((scelta == 's') || (scelta == 'S'));
//attenzione a non fare confusione!
} while ((scelta == 's') || (scelta == 'S'));
getch();
return 0;
} |
|