Aiuto programma

yoghi871
Salve a tutti sono nuovo e questa è la prima domanda che vi porgo, io devo creare un programma che acquisisca un polinomio di grado 2 e ne calcola la radice. vorrei qualche dritta sul calcolo delle radici di un polinomio di grado 2. Grazie per l'aiuto

Risposte
Maurizio Zani
Non vedo un gran difficoltà:
gli passi il valore dei 3 parametri $a$, $b$, e $c$ del polinomio ($ax^2+bx+c$) e poi gli fai calcolare le radici

$x_1=(-b+sqrt(b^2-4ac))/(2a)$, $x_2=(-b-sqrt(b^2-4ac))/(2a)$

In che linguaggio scrivi il programma?

yoghi871
lo scrivo in C, perchè inizieresti con delta...?

codino75
"yoghi87":
lo scrivo in C, perchè inizieresti con delta...?


perche' se il delta e' minore di 0 , la formula generale non e' valida (e quindi genererebbe un errore), ma puoi cmq dire che non ci sono soluzioni reali.

yoghi871
quindi basta impostare il delta e le 2 formule principali X_1 e X_2?come regola di radici per polinomi.

codino75
"yoghi87":
quindi basta impostare il delta e le 2 formule principali X_1 e X_2?come regola di radici per polinomi.


non ho ben capito cosa intendi.

yoghi871
voglio sapere se mi basta impostare solo le forumle base delle radici e la formula del delta.

codino75
"yoghi87":
voglio sapere se mi basta impostare solo le forumle base delle radici e la formula del delta.


si' in buona sostanza,
se delta<0 allora non ci sono soluzioni
se delta=>0 allora le 2 soluzioni (eventualmente coincidenti) sono date dalle formule che calcolano $x_1$ ed $x_2$ sopra riportate.

yoghi871
Per ora Grazie di tutto se avrò altri problemi non esiterò a domandare! GRAZIE :D

codino75
"yoghi87":
Per ora Grazie di tutto se avrò altri problemi non esiterò a domandare! GRAZIE :D


di nulla.
bussa e ti sara' aperto, come disse un Tale.

luca260786
Salve a tutti anche io sono nuovo e devo realizzare lo stesso programma dell'utente precedente ma mettendoci anche i numeri complessi, cioè le soluzioni ci sono anche se il delta è minore di 0........... Lo devo scrivere in linguaggio C come posso impostarlo? Gli input sono i coefficienti? Appena potete rispondetemi... Potete rispondermi anche per e-mail........ Grazie 1000 a tutti!!!!!!!!!!! :)

codino75
"luca260786":
Salve a tutti anche io sono nuovo e devo realizzare lo stesso programma dell'utente precedente ma mettendoci anche i numeri complessi, cioè le soluzioni ci sono anche se il delta è minore di 0........... Lo devo scrivere in linguaggio C come posso impostarlo? Gli input sono i coefficienti? Appena potete rispondetemi... Potete rispondermi anche per e-mail........ Grazie 1000 a tutti!!!!!!!!!!! :)


intanto leggi qui:
https://www.matematicamente.it/forum/pro ... 24881.html

luca260786
"codino75":
[quote="luca260786"]Salve a tutti anche io sono nuovo e devo realizzare lo stesso programma dell'utente precedente ma mettendoci anche i numeri complessi, cioè le soluzioni ci sono anche se il delta è minore di 0........... Lo devo scrivere in linguaggio C come posso impostarlo? Gli input sono i coefficienti? Appena potete rispondetemi... Potete rispondermi anche per e-mail........ Grazie 1000 a tutti!!!!!!!!!!! :)


intanto leggi qui:
https://www.matematicamente.it/forum/pro ... 24881.html[/quote]

L'ho letto solamente nel mio caso ci sono anche i numeri complessi ora ti scrivo l'enunciato: " Scrivere un programma ANSI C che acquisisce un polinomio di grado al più 2 e ne calcola le radici." se puoi mi puoi scrivere il codice, quello che puoi nn tutto nn preoccuparti lo finisco io.............. Grazie 1000........... :D

luca260786
"Sergio":
Preghiera
Non ponete lo stesso problema in più sezioni del forum!!! Questo è stato posto in "Algoritmi", "problema main" e "Aiuto programma".
Non si sa più dove rispondere, il discorso ne risulta spezzettato, non ci si capisce più niente.

Promessa
Come yoghi87 e luca260786 avranno notato, qui è pieno di gente pronta ad aiutare.
Per quanto mi riguarda, oggi sarò spesso a casa e terrò d'occhio la discussione pronto a rimettervi in carreggiata giusta se scantonate, a condizione che offriate materiale su cui lavorare. Ho già proposto una traccia qui e poi qui.
Provate a tirarne fuori qualcosa, cioè qualche linea di codice. Se lo farete, riceverete correzioni e/o integrazioni rapide.

Numeri complessi
[quote="luca260786"]L'ho letto solamente nel mio caso ci sono anche i numeri complessi

No problem.
Se il Delta è minore di zero, basta ricordare che, se $x<0$, $sqrt(x)=sqrt(-1)*sqrt(-x)=i*sqrt(-x)$ e cambiare come segue:

.....
c) funzione eq_2_grado():
1. calcola $Delta=b2-4ac$;
2. se $Delta<0$:
-- cambi il segno del Delta: $Delta=-Delta$;
-- calcoli $r=-b/(2a)$ (la parte reale), $i_1=sqrt(Delta)/(2a)$, $i_2=-sqrt(Delta)/(2a)$ (le parti immaginarie);
-- scrivi "soluzioni complesse: $r$+$i_1$i, $r$-$i_2$i";
ecc.

Per l'output si può usare: printf("soluzioni: %+lf%+lfi,%+lf%+lfi\n", r, i1, r, i2).[/quote]

Grazie 1000 Sergio!!!!!!!!!!! Una cosa se devo chiederti altre cose dove devo postare, qui o sulla sezione algoritmi? Grazie 1000 ancora ti farò sapere se sono riuscito ad impostare il programma!!!!!!!!

luca260786
"Sergio":
[quote="luca260786"]Grazie 1000 Sergio!!!!!!!!!!!

Prego ;-)
"luca260786":
Una cosa se devo chiederti altre cose dove devo postare, qui o sulla sezione algoritmi?

Direi di continuare qui.[/quote]

Ok va bene......... Grazie ancora!!!!! :D

luca260786
"luca260786":
[quote="Sergio"][quote="luca260786"]Grazie 1000 Sergio!!!!!!!!!!!

Prego ;-)
"luca260786":
Una cosa se devo chiederti altre cose dove devo postare, qui o sulla sezione algoritmi?

Direi di continuare qui.[/quote]

Ok va bene......... Grazie ancora!!!!! :D[/quote]

Ecco scusami ho già una domanda le x cioè le incognite e il delta li devo dichiare insime alle costanti a,b,c o no? Scusami forse è una domanda idiota ma è il mio primo programma!!!!!!!!!!

luca260786
"Sergio":
[quote="luca260786"]Ecco scusami ho già una domanda le x cioè le incognite e il delta li devo dichiare insime alle costanti a,b,c o no?

Dipende ;-)
La scelta fondamentale è: variabili globali oppure locali?
Se le vuoi globali (più semplice ma bruttino...) puoi impostare qualcosa del tipo:
#include <stdio.h>
#include <math.h>  /* serve per la funzione sqrt() */
/* "costanti" dal punto di vista matematico, ma "variabili" per il programma */
double a = 0;      /* meglio abituarsi ad inizializzare sempre le variabili */
double b = 0;
double c = 0;
/* discriminante per equazioi di 2^ grado */
double delta = 0;
/* soluzioni */
double r = 0;      /* la parte reale delle soluzioni complesse */
double x1 = 0;     /* prima soluzione reale o parte immaginaria della prima sol. complessa */
double x2 = 0;     /* seconda soluzione reale o parte immaginaria della seconda sol. complessa */

void immetti_coefficienti() {
    ...
}

void eq_1_grado() {
    ...
}

void eq_2_grado() {
    ...
}

int main() {
    immetti_coefficienti();
    if (a == 0) {
        printf("equazione di 1^ grado: %+lfx%+lf=0\n", b, c);
        eq_1_grado();
    } else {
        printf("equazione di 2^ grado: %+lfx^2%+lfx%+lf=0\n", a, b, c);
        eq_2_grado();
    }
    return 0;
}


Se invece preferisci variabili locali (una scelta meno semplice ma più "pulita"), avrai qualcosa del tipo:
#include <stdio.h>
#include <math.h>

void immetti_coefficienti(const double* a, const double* b, const double* c) {
    /* qui sono costanti gli indirizzi delle variabili, non i loro valori... */
    ...
}

void eq_1_grado(const double b, const double c) {
    /* qui a e b sono costanti... a tutti gli effetti */
    double x = 0;
    ...
}

void eq_2_grado(const double a, const double b, const double c) {
    /* anche qui a, b e c sono costanti... a tutti gli effetti */
    double delta = 0;
    double x1 = 0;
    double x2 = 0;
    double r = 0;
    ...
}    

int main() {
    /* variabili per la funzione main(), ma costanti per le funzioni da essa chiamate */
    double a = 0; /* inizializzare sempre le veriabli! */
    double b = 0;
    double c = 0;

    immetti_coefficienti(&a, &b, &c);
    if (a == 0) {
        printf("equazione di 1^ grado: %+lfx%+lf=0\n", b, c);
        eq_1_grado(b, c);
    } else {
        printf("equazione di 2^ grado: %+lfx^2%+lfx%+lf=0\n", a, b, c);
        eq_2_grado(a, b, c);
    }
    return 0;
}


Se trovi un po' misterioso il secondo listato, scegli pure il primo. Per cominciare può andare.

"luca260786":
Scusami forse è una domanda idiota ma è il mio primo programma!!!!!!!!!!

Tranquillo: abbiamo tutti cominciato da zero ;-)[/quote]

Grazie 1000!!!!!!!!!!!!!! Ti faccio sapere come va postandoti il codice del programma!!!!!!!!!!!!!!!!!

yoghi871
ma non deve essere definita prima la funzione main poi le altre funzioni? :?

yoghi871
ah OK grazie!
:-D

david_e1
@ Sergio

Una piccola provocazione... perche' hai messo la fase di input in una funzione esterna? Un neofita dell'Haskell come me si riempie di spavento quando un oggetto che ad un dato input non da necessariamente un output fissato (dato che dipende dalle azioni dell'utente) e che, quindi, non e' una funzione nel senso matematico del termine, viene dichiarata come funzione... :-D

david_e1
"Sergio":
[quote="david_e"]Una piccola provocazione... perche' hai messo la fase di input in una funzione esterna?

Premesso che mi sei simpatico, al punto che in altra sezione non ho cercato di spiegarti che emacs è molto meglio di vim ;-)
Premesso che ti sono grato, perché quasi tre anni fa mi hai aiutato a capire le matrici hessiane e io certe cose non le dimentico.
Tutto ciò premesso, le risposte sono tre:
1) perché in C non esiste una keyword procedure come in Pascal; in altri termini una funzione che "ritorna" void non è una funzione ma una procedura ;-)
2) perché, per semplicità, ho evitato i controlli sull'input; ad esempio, preferirei un ciclo che continuasse, consentendo di inserire più equazioni senza dover ogni volta rilanciare il programma, fino a quando la funzione di input non ritornasse $-1$ (in caso di pressione di invio "a vuoto", di $a,b,c$ tutti nulli, o simili);
3) perché... non ti fai i fatti tuoi? :-D :-D :-D[/quote]

:smt023

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.