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

di il
8 risposte

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

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

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

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

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

    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 

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

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

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

    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.

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

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

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

    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;
    		}
    	}
  • Re: Salve , qui per chiedere aiuto in merito ad un codice in C .

    Perché visualizzi un risultato se l'equazione ne ha due?

    Usa un tipo void per le due funzioni

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

    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