Salve , qui per chiedere aiuto in merito ad un codice in C .

di Bananna elettrica il
8 risposte

Questa la consegna :

Creare un programma che stampi il menù:
1) Risolvere l'equazione di secondo grado ax^2+bx+c=0
2) Risolvere l'equazione di primo grado ax+b=0
3) Esci

Creare una funzione che stampi il menù
Creare una funzione per il calcolo del Delta

Alla fine del calcolo il programma ripresenterà il menù fin quando non si selezioni 3.
a,b,c sono interi
Si prevedano le seguenti eccezioni:
1) se la scelta del menù è incompatibile con il menù (in questo caso segnale l'errore e ripresenta il menù)
2) nel caso dell'equazione di secondo grado:
        a) se a=0 (in questo caso richiederà di inserire "a" avvertendo dell'errore)
        b) se Delta è minore di zero (in questo caso indicherà che non esistono soluzioni reali e ripresenterà il menù)
3) nel caso equazione di primo grado se a=0 (in questo caso richiederà di inserire "a" avvertendo dell'errore)

io ho scritto questo fino ad ora ma deve esserci qualche problema perchè in base alla scelta mi da l'equazione di primo grado sempre e comunque la calcola in modo sbagliato . Non mi richiede nemmeno di inserire i coefficienti per l'equazione di primo grado .

#include <stdio.h>
#include <stdlib.h>
#include <math.h>


void coefficienti(a, b, c,  x1, x2)
{
printf("\ncoefficiente a:\n");
scanf("%f", &a);
printf("\ncoefficiente b:\n");
scanf("%f", &b);
printf("\ncoefficiente c:\n");
scanf("%f", &c);
}
void determinante(a,b,c,d)
	{
	d=b*b-4*a*c;
	}
void soluzioni(a,b,d,x1,x2)
{
	if(d<0)
	printf("\nnon possono esserci soluzioni reali");
		else if(d==0) {
		x1=(-b)/(2*a);
		printf("due soluzioni reali coincidenti x1 e x2 uguali a %f ",x1);
		}
	else
	{
	x1=(-b-sqrt(d))/(2*a);
	x2=(-b+sqrt(d))/(2*a);
	printf("due soluzioni reali distinte x1= %f e x2= %f ",x1,x2);
	}
}
void equazione_primo(b,c,x1)
{
	if((b==0)&&(c==0))
	printf("\nequazione indeterminata");
		else if(b==0)
		printf("\nequazione impossibile");
	else {
	x1=-c/b;
	printf("x= %f", x1);
	}	
}

void termini(f, e)
{
printf("immetti f: ");
scanf("%f",&f);
printf("immetti e: ");
scanf("%f",&e);
}
void risultati(e,f,y)
{
y=-e/f;
printf("il risultato dell'equazione di primo grado e': %f",y);
}



void main()
{
int scelta,a;
printf("*---------------------------------------*\n");
printf("| Menu A Scelta |\n");
printf("*---------------------------------------*\n");
printf("| 1 - equazione secondo grado |\n");
printf("| 2 - equazione primo grado |\n");
printf("| 3 - esci |\n");
scanf("%d", &scelta);

switch (scelta){
	case 1:
	coefficienti();
	if(a==0)
	equazione_primo();
	else {
	determinante();
	soluzioni();
	}
	case 2:	
	risultati();
		}
	}

8 Risposte

  • Ma almeno hai provato a compilare il codice?
    Perché a un primo sguardo vedo già qualcosa che non va.

  • Si ci ho provato e come ho detto ci sono degli errori specialmente per quanto riguarda l'equazione di primo grado . A me interessa più quello , perchè non riesco a inserirla come scelta . o meglio se la scelgo non mi fa inserire nemmeno i coefficienti e mi da già come risultato 0.

    sicuramente poi ci saranno altri errori 

  • Come faccio a distinguere la funzione per l'equazione di primo grado dal resto?

  • Prima di tutto, per come hai impostato il problema sembrerebbe che tu stia usando variabili globali, ma vanno prima definite fuori dal main, all'inizio del programma. 
    In un programma C le variabili vanno prima definite.
    Poi le tue funzioni, non ricevendo parametri vanno scritte con niente tra parentesi, o al più la parola chiave void.

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    float a, b, c,  x1, x2; // ecc. tutte le variabili che usi
    
    void coefficienti()
    {
    printf("\ncoefficiente a:\n");
    scanf("%f", &a);
    printf("\ncoefficiente b:\n");
    scanf("%f", &b);
    printf("\ncoefficiente c:\n");
    scanf("%f", &c);
    }
    
    // ecc. ecc.

    Comunque sarebbe meglio evitare l'uso di variabili globali e passare i valori tramite parametri nelle funzioni.

    Sembra che ti manchino le basi della programmazione C.

  • Dovresti pure modificare il titolo della discussione Bananna (o Banana) elettrica  

  • Allora ho provato a riscriverlo , credo ci siano ancora dei problemi ma almeno adesso funzionano entrambe le equazioni come scelta .

    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    int equazione_secondo_grado (int a,int b,int c,int d,int x1, int x2);
    int equazione_primo_grado  (int a,int b,int x);
    
    
    int equazione_secondo_grado (int a,int b,int c,int d,int x1, int x2)
    {
    
    	if(a==0)
    		{
    			if(b!=0)
    				{
    				x1 = - c / b;
    				printf("Una soluzione: x = %d\n", x1);
    				}
    					else
    					{
    						if(b==0)
    						{	
    						printf("Equazione indeterminata \n");
    						}
    							else
    							{
    							printf("Equazione impossibile \n");
    							}
    					}
    		}
    		
    		else
    		{
    		d = b*b - 4*a*c ;
    		printf("Il discriminante vale: %d\n",d);
    			if (d<0)
    			{
    			printf("Non ci sono soluzioni \n");
    			}
    				else if (d==0)
    				{
    				x1 = -b / (2*a) ;
    				printf("Una soluzione doppia: x=%d\n",x1);
    				}
    					else
    					{
    					x1=(-b-sqrt(d))/(2*a);
    					x2=(-b+sqrt(d))/(2*a);
    					printf("Due soluzioni: x = %d e x = %d\n", x1, x2 ) ;
    
    					}
    			
    			}
    
    			
    
    		}
    
    
    
    int equazione_primo_grado  (int a,int b,int x)
    {
    
    printf("immetti a: ");
    scanf("%d",&a);
    printf("immetti b: ");
    scanf("%d",&b);
    
    x=-b/a;
    printf("il risultato dell'equazione di primo grado e': %d",x);
    }
    
    
    void main()
    {
    int a,b,c,scelta;
    printf("*---------------------------------------*\n");
    printf("| Menu A Scelta |\n");
    printf("*---------------------------------------*\n");
    printf("| 1 - equazione secondo grado |\n");
    printf("| 2 - equazione primo grado |\n");
    printf("| 3 - esci |\n");
    scanf("%d", &scelta);
    
    switch (scelta){
    	case 1:
    		printf("\ncoefficiente a:\n");
    		scanf("%d", &a);
    		printf("\ncoefficiente b:\n");
    		scanf("%d", &b);
    		printf("\ncoefficiente c:\n");
    		scanf("%d", &c);
    			printf("il risultato dell'equazione di secondo grado e': %d",equazione_secondo_grado);
    			break;
    	case 2:	
    		printf("immetti a: ");
    		scanf("%d",&a);
    		printf("immetti b: ");
    		scanf("%d",&b);
    			printf("il risultato dell'equazione di primo grado e': %d",equazione_primo_grado);
    			break;
    		}
    	}
  • Perché visualizzi un risultato se l'equazione ne ha due?

    Usa un tipo void per le due funzioni

  • Hai mancato le eccezioni 2a e 3. Se a=0 perché procede a risolvere un'equazione di primo grado? Basta un while per ripetere un inserimento. 

Devi accedere o registrarti per scrivere nel forum
8 risposte