Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    8

    Problema semplice programma in C

    Salve a tutti, sto iniziando a studiare il C e questo è un esercizio che consiste nel creare un programma con 3 numeri dati, il programma moltiplica i primi due e li divide per il terzo. poi da vari messaggi nel caso il terzo sia minore di zero o i primi due numeri siano negativi...
    Purtroppo mi da errore, secondo voi dove ho sbagliato?
    Questo è il mio semplice programmino:

    codice:
    #include <stdio.h>
    
    float Divisione (float x, float y, float z);
    
    int main (int argc, char *argv[]) {
    	float a=3, b=3, c=2;
    	float soluzione= Divisione (a, b, c);
    	if (c!=0){
    		float Divisione (a, b, c);
    		printf ("%f*%f/%f e' uguale a %f\n" a, b, c, soluzione);
    	}
    	else if (c<0){
    		printf ("%f e' un numero negativo.\n" c);
    	}
    	else if (a&&b<0){
    		printf ("%f e %f sono numeri negativi.\n" a, b);
    	}
    	getchar();
    	return 0;
    }
    
    float Divisione (float x, float y, float z) {
    	return x*y/z;
    }

  2. #2

    Re: Problema semplice programma in C

    Originariamente inviato da jac22v
    Purtroppo mi da errore, secondo voi dove ho sbagliato?
    Quale errore ti dà? Quando posti del codice, usa i tag CODE.

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    8
    Ecco gli errori:


    1>------ Build started: Project: Divisionecdiversodazero, Configuration: Debug Win32 ------
    1>Build started 22/03/2012 20:24:36.
    1>InitializeBuildStatus:
    1> Touching "Debug\Divisionecdiversodazero.unsuccessfulbui ld".
    1>ClCompile:
    1> Divisionecdiversodazero.cpp
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(9): error C2078: too many initializers
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(10): error C2146: syntax error : missing ')' before identifier 'a'
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(10): error C2059: syntax error : ')'
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(13): error C2146: syntax error : missing ')' before identifier 'c'
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(13): error C2059: syntax error : ')'
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(16): error C2146: syntax error : missing ')' before identifier 'a'
    1>c:\users\jac\documents\visual studio 11\projects\divisionecdiversodazero\divisionecdive rsodazero\divisionecdiversodazero.cpp(16): error C2059: syntax error : ')'
    1>
    1>Build FAILED.
    1>
    1>Time Elapsed 00:00:00.08
    ========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========

  4. #4
    Originariamente inviato da jac22v
    Ecco gli errori:
    Bene. Come vedi ci sono i numeri di riga e una breve spiegazione degli errori di compilazione. Quindi è facile rintracciarli. Fondamentalmente ci sono due problemi, il primo è questa "istruzione":

    codice:
    float Divisione (a, b, c);
    che oltre ad essere sbagliata, direi che non serve a nulla (la funzione l'hai chiamata poco prima).

    Il secondo, sono le varie printf che hai:

    codice:
    printf ("%f*%f/%f e' uguale a %f\n", a, b, c, soluzione);
    Perchè manca la virgola per separare il primo ed il secondo parametro.

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    8
    Grazie, ora funziona!

    Avevo messo quella "istruzione" perché in un programma simile l'avevo messa e andava.

    codice:
    #include <stdio.h>
    
    int Quadrato (int x);
    int Cubo (int x);
    
    int main (int argc, char *argv []) {
    	int n=6;
    	int xquadro = Quadrato (n);
    	int xcubo = Cubo (n);
    	if (n<6) {
    		Quadrato (n);
    		printf ("%d e' minore di 6 quindi il suo quadrato e': %d\n", n, xquadro);
    	}
    	else if (n>6) {
    		Cubo (n);
    		printf ("%d e' maggiore di 6 quindi il suo cubo e': %d\n", n, xcubo);
    	}
    	else {
    		printf ("Il numero e' 6, mi stai prendendo in giro?\n");
    	}
    	getchar();
    	return 0;
    
    }
    
    int Quadrato (int x) {
    	return x*x;
    }
    
    int Cubo (int x) {
    	return x*x*x;
    }
    In questa ripeto

    codice:
    Quadrato (n);
    e non senza la "n" eppure andava, perchè? XD

  6. #6
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    codice:
    #include <stdio.h>
    
    float Divisione (float x, float y, float z);
    
    int main (int argc, char *argv[]) {
    float a=3, b=3, c=2;
    float soluzione= Divisione (a, b, c);
    if (fabs(c)>fabs(0.0+2.0e-10.0) ) // nota 1
    {
    float Divisione (a, b, c); // errore, stai ri-dichiarando la funzione in mezzo al main
    printf ("%f*%f/%f e' uguale a %f\n" a, b, c, soluzione);
    }
    else if (c<0){
    printf ("%f e' un numero negativo.\n" c);
    }
    else if (a&&b<0){
    printf ("%f e %f sono numeri negativi.\n" a, b);
    }
    getchar();
    return 0;
    nota 1: I floating point vengono rappresentati con una certa precisione, che dipende
    dal numero di bit che si usano per rappresentare la mantissa, ma anche dall' esponente, che più è alto, più "sacrifica" la precisione.
    Errore che può aumentare con le varie operazioni che si fanno.
    Allora c'è un errore sul dato reale, per cui non si fa il confronto direttamente dicendo "if(c!=0)", ma si controlla che sia al di fuori da un certo intervallo, tipo [0,0+], dove 0+ è "quasi zero".

    A parte questi errori manca l' indentazione.
    Dopo ogni graffa che si apre aggiungi 4 spazi, dopo ogni graffa che si chiude torni indietro di 4 spazi:
    codice:
    if(<condizione>)
    {
        <istruzioni>
        <istruzioni>
    }

  7. #7
    Originariamente inviato da jac22v
    In questa ripeto

    codice:
    Quadrato (n);
    e non senza la "n" eppure andava, perchè? XD
    Beh prima di tutto è inutile anche in questo caso. E poi qui la sintassi è corretta, prima avevi messo il tipo e quindi in pratica era un ridefinizione. Attenzione anche ai confronti sui float (come ti hanno già segnalato) e poi metterei per sicurezza un controllo su un'ipotetica divisione per zero.

  8. #8
    Utente di HTML.it
    Registrato dal
    Sep 2011
    Messaggi
    8
    Ok, grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.