Controllo veloce...

di il
10 risposte

Controllo veloce...

Ragazzi... devo programmare una semplice calcolatrice in C, che svolga calcoli in forma prefissa (esempio: +(2,3) = 5)
Ho realizzato questo codice per somma, differenza e prodotto ma non funziona. Mi aiutereste a capire dove sia l'errore?
#include <stdio.h>
#include <stdlib.h>

int sum (int, int);
int diff (int, int);
double prod (int, int);


int main() {
	int x;
	int y;
	int a, z;
	
	printf("Inserisci i due numeri\n");
	scanf("%d%d", &x, &y);
	printf("Cosa vuoi calcolare? Inserisci\n");
	printf("+ per somma: +(%d, %d)\n", x, y);
	printf("- per differenza -(%d, %d)\n", x, y);
	printf("* per prodotto *(%d, %d)\n", x, y);
	scanf("%s", &z);
	
	switch (z) 
	{case '+': sum(x, y); break;
	case '-': diff(x, y); break;
	case '*': prod (x, y); break;}
    
	printf("\nIl risultato è %d", a);

	return 0;
}

int sum (int x, int y)
{
	int a;
	a= x+y;
	return a
};

int diff (int x, int y)
{
	int a;
	if (x<y){
		printf("Impossibile svolgere l'operazione\n");}
	else{
	return a = x-y;
	}
};


double prod (int x, int y)
{
	double a;
	a = x*y;
	return a;
}

10 Risposte

  • Re: Controllo veloce...

    Magari potresti dirci cosa non funziona...
    Da una rapida letta vedo che fai una scanf() per leggere una stringa ma la piazzi in una variabile intera.
  • Re: Controllo veloce...

    Questa non va bene dato che z è un valore intero

    scanf("%s", &z);

    E anche la return della differenza è sbagliata.
  • Re: Controllo veloce...

    Z deve essere di tipo char, in quanto devo inserire i simboli di operazione (+, -, *).... char z
    Invece, la return della differenza, devo inserire l'operazione differenza (x -y) che associo al valore a.... no?
  • Re: Controllo veloce...

    L'ho modificato inserendo un array di tipo char per il simbolo di operazione. Non so se ho scritto bene lo switch. Il programma non calcola per nulla le operazioni. Mi dice sempre che il risultato è 55...
    #include <stdio.h>
    #include <stdlib.h>
    
    int somma(int x, int y);
    int differenza(int x, int y);
    
    char z[1];
    	
    int main() {
    	int x;
    	int y;
    	int a;
    	
    	printf("Inserisci i due numeri\n");
    	scanf("%d%d", &x, &y);
    	printf("Cosa vuoi calcolare? Premi:\n");
    	printf("+ per la somma prefissa +(%d, %d)\n", x, y);
    	printf("- per la differenza in forma prefissa -(%d, %d)\n", x, y);
    	scanf("%s", &z[1]);
    	
    	switch(*z){
    		case '+': somma(x, y);
    		       break;
    		case '-': differenza(x, y);
    		       break;
    		default: break;
    		}
    		
    	printf("\nIl risultato sia %d", a);
    	system("pause");
    	return 0;
    }
    
    int somma(int x, int y){
    	int a;
    	a = x+y;
    	return a;
    }
    
    
    int differenza(int x, int y){
    	int a;
    	a=x-y;
    	return a;
    }
    
  • Re: Controllo veloce...

    Linee da correggere

    char z[2];

    scanf("%s", z);

    switch(z[0]){

    case '+': a=somma(x, y);

    case '-': a=differenza(x, y);
  • Re: Controllo veloce...

    Grazie.. ora funziona. Non mi è chiaro però perché devo dichiarare un Array di dimensione 2...
  • Re: Controllo veloce...

    Ho completato la calcolatrice.
    È corretto il codice, secondo voi?
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    
    void somma(int x, int y);
    void differenza(int x, int y);
    void prodotto(int x, int y);
    void divisione_intera(int x, int y);
    void resto(int x, int y);
    void potenza(int x, int y);
    
    char z[1];
    	
    int main() {
    	int x;
    	int y;
    	int a;
    	
    	printf("Inserisci i due numeri\n");
    	scanf("%d%d", &x, &y);
    	printf("Cosa vuoi calcolare? Premi:\n");
    	printf("+ per la somma prefissa +(%d, %d)\n", x, y);
    	printf("- per la differenza in forma prefissa -(%d, %d)\n", x, y);
    	printf("* per il prodotto in forma prefissa *(%d, %d)\n", x, y);
    	printf("/ per la divisione intera in forma prefissa /(%d, %d)\n", x, y);
    	printf("~ per il resto della divisione intera in forma prefissa -(%d, %d)\n", x, y);
    	printf("^ per la potenza in forma prefissa ^(%d, %d)\n", x, y);
    	scanf("%s", z);
    	
    	switch(z[0]){
    		case '+': somma(x, y);
    		       break;
    		case '-': differenza(x, y);
    		       break;
            case '*': prodotto(x, y);
    		       break;
    		case '/': divisione_intera(x, y);
    		       break;
    		case '~': resto(x, y);
    		       break;
    		case '^': potenza(x, y);
    		       break;
    		default: printf("Errore di simbolo\n");
    		}
    	
    	system("pause");
    	return 0;
    }
    
    void somma(int x, int y){
    	int a;
    	a = x+y;
    	printf("Il valore ottenuto: %d\n", a);
    }
    
    
    void differenza(int x, int y){
    	int a;
    	a=x-y;
    	printf("Il valore ottenuto: %d\n", a);
    }
    
    void prodotto(int x, int y){
    	double a;
    	a=x*y;
    	printf("Il valore ottenuto: %d\n", a);
    }
    
    void divisione_intera(int x, int y){
    	int a;
    	if (y!=0){
    	a = x/y;
    	printf("Il valore ottenuto: %d\n", a);}
    	else {
    		printf("Divisione impossibile da svolgere\n");
    	}
    }
    
    void resto(int x, int y){
    	int a;
    	a=x%y;
    	printf("Il valore ottenuto: %d\n", a);
    }
    
    void potenza(int x, int y){
    	double a;
    	a=pow(x,y);
    	printf("Il valore ottenuto: %d\n", a);
    }
  • Re: Controllo veloce...

    No...Questa

    case '+': somma(x, y);

    te l'avevo corretta ... e anche le altre ...
  • Re: Controllo veloce...

    Ho reso tutte le funzioni void, perché non mi ritrovavo poi col risultato per la divisione... nel caso y=0, infatti, oltre la printf, dava anche un risultato inventato: 55...
  • Re: Controllo veloce...

    Non ha senso utilizzare void per le funzioni ... per la divisione basta controllare il denominatore
Devi accedere o registrarti per scrivere nel forum
10 risposte