Equazione secondo grado C

di il
1 risposte

Equazione secondo grado C

Ciao a tutti sono uno studente di ingegneria informatica al primo anno e mi è stato assegnato un esercizio che mi chiede di compilare un programma in linguaggio C che risolva un'equazione di secondo grado. La consegna è: Scrivere un programma in linguaggio C che, dati tre valori interi a, b e c rappresentanti i coefficienti dell'equazione di secondo grado ax^2 + bx + c=0, calcoli e visualizzi le soluzioni di tale equazione, considerando anche i casi particolari in cui qualche coefficiente (a oppure a e b) siano pari a 0.
Sono riuscito a scrivere il programma che risolve l'equazione ma non so come mettere i casi in cui a o b siano 0 e il caso in cui lo sono entrambi. Vi lascio di seguito il codice che ho scritto io fin'ora. Vi ringrazio in anticipo.
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main(void) {
	int a, b, c;
	float delta, reale, immaginaria;
	printf("Calcolare la soluzione dell'equazione ax^2 + bx + c dopo aver inserito i coefficienti.\n");
	printf("\nInserisci a: ");
	scanf("%d", &a);
	printf("\nInserisci b: ");
	scanf("%d", &b);
	printf("\nInserisci c: ");
	scanf("%d", &c);
	printf("\n");
		delta = b*b - 4 * a * c;
		if (delta > 0) {
			printf("L'equazione ammette due soluzioni distinte.\n");
			printf("Soluzione 1: %f\n", (-b + sqrt(delta)) / (2 * a));
			printf("Soluzione 2: %f\n", (-b - sqrt(delta)) / (2 * a));
		}
		else {
			if (delta == 0) {
				printf("L'equazione ammette due soluzioni coincidenti.\n");
				printf("Soluzione: %f\n", -b / (2 * a));
			}
			else {
				printf("L'equazione ammette due soluzioni immaginarie.\n");
				reale = (float)-b / (2 * a);
				immaginaria = sqrt(fabs(delta)) / (2 * a);
				printf("Soluzione 1: %f+i %f\n", reale, immaginaria);
				printf("Soluzione 2: %f+i %f\n", reale, immaginaria);
			}
		}
	system("PAUSE");
	return 0;
	}

1 Risposte

  • Re: Equazione secondo grado C

    Prima un consiglio: ELIMINA la lettura da tastiera mediante scanf, ma USA la sintassi completa della funzione main:
     int main(int argc, char**argv){ ... }
    in 'argc' c'e' il numero di stringhe in 'argv' ed un 'argv' ci sono i parametri che hai passato al programma da linea di comando:
    
    > secondogrado 1 2 3
    
    Fai qualche prova e ci arrivi da solo sul come utilizzare argc e argv.
    In questo modo ti semplifichi lo sviluppo in modo bestiale

    Secondo: hai gia' usato l'if, quindi basta che aggiungi ulteriori controlli

    Secondo consiglio: codice scritto bene non e' mai eccessivamente identato.
    Questo puo' essere uno di quei casi in cui l'uso del goto ha senso.
    Invece di scrivere
    
    if (cond1) {
        ...
        if (cond2) {
            ...
        }
    }
    
    potresti scrivere
    
    if (!cond1) goto end;
    
    /// codice per con1 a true
    
    if (!cond2) goto end
    
    /// codice per cond2 a true
    
    ...
    
    end:
    /// esci dal programma
    
    Il goto NON E' il diavolo e' solo che va usato con MOLTA CAUTELA, la stessa che ha un riccio quando fa quella cosa li

    Il problema e' che il programmatore alle prime armi ne abusa, ma in QUESTO PARTICOLARE CASO, cioe' nella situazione in cui hai uscite multiple, puo' essere utilizzato.

    Ma ricordati del riccio

    Il perche' di questo consiglio lo capirai nel momento in cui aggiungerai gli ulteriori controlli che ti servono
Devi accedere o registrarti per scrivere nel forum
1 risposte