Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543

    errore di "primary esxpression" [C++]

    Buon pomeriggio,
    sono alle prese con la compilazione di un porgramma che dovrebbe fare tali cose: "Date due frazioni, espresse nella forma di due coppie di numeri interi positivi < num1; den1 >,
    e < num2; den2 > , de¯nire una funzione che, senza l'uso della divisione reale (cioe' tra
    numeri in virgola mobile) restituisca:
    ² 1 o 2 per segnalare quale delle due frazioni e' maggiore dell'altra
    ² una terza frazione < num3; den3 > pari alla piu' grande delle due, ridotta ai minimi
    termini
    Ad esempio la funzione dovr restituire 2 se le frazioni in ingresso sono < 1; 3 > e < 5; 10 >,
    con l'assegamento alla terza frazione < num3; den3 > della coppia < 1; 2 >"

    Io avrei scritto il programma in questo modo
    codice:
    #include <iostream>
    #include <cmath>
    using namespace std;
    
    double MCD (int num, int den)
       {    
            int MCD;
            int r = num % den;
            if (r == 0)
            {
                MCD = den;
                cout << "Il MCD e' "<< MCD <<" \n";
            }
            else
            {
                while (r != 0)
                {
                   num = den;
                   den = r;
                   r = num % den;
                }
                MCD = den;
                cout << "il MCD e' "<< MCD <<" \n";
            }
        }
    double confronto (int x, int y, int z, int w)
        {
            int maggiore; //maggiore è la variabile che indica la frazione maggiore tra le due\\
            if(x * w > z * y)
            {
                maggiore = 1;
                cout<< "La frazione maggiore e' la prima " << maggiore << "\n";
            }
            else if(x * w < z * y)    
            {
                maggiore = 2;
                cout << "La frazione maggiore e' la seconda " << maggiore;
            }
    
    int main()
    {
        int a, b, c, d;
        cout << "Inserisci numeratore 1 \n";
        cin >> a;
        cout << "Inserisci denominatore 1\n"; 
        cin >> b;
        cout << "Inserisci numeratore 2 \n";
        cin >> c;
        cout << "Inserisci denominatore 2 \n"; 
        cin >> d;
        confronto (a, b, c, d);
        if (maggiore = 1)
        {
            MCD (a, b);
        }
        else
            MCD (c, d);
       
        system("pause");
        return 0;
    }
    solo che durante la compilazione mi da un errore in double confronto (int x, int y, int z, int w).
    Non chiedo la soluzione, ma solo cercare di capire dov'è l'errore per poi riuscire autonomamente e far funzionare il programma.
    Grazie in anticipo per la Vostra collaborazione.
    "To iterate is human, to recurse, divine." (R.(Heller))

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462

    Re: errore di "primary esxpression" [C++]

    Ti da' un errore ... ma potresti anche dire "quale errore" ...

    Comunque ... la funzione non e' chiusa correttamente, manca il return del double ....

  3. #3
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    in effetti mancava anche l'altra parentesi di chiusura alla fine double confronto.
    L''errore è il seguente In function `double confronto(int, int, int, int)':
    expected primary-expression before "else" ;
    expected `;' before "else" ;
    cannot convert `double (*)(int, int, int, int)' to `double' in return
    . Questi sono gli errori piu importanti e comunque in ordine. Ho provato a compilarlo anche dopo aver aggiunto return confronto e la parentesi, non funziona ugualmente: come mai?
    "To iterate is human, to recurse, divine." (R.(Heller))

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Intanto, alla fine della riga

    int maggiore; //maggiore è la variabile che indica la frazione maggiore tra le due\\

    togli le ultime due barre

    int maggiore; //maggiore è la variabile che indica la frazione maggiore tra le due

    e poi, ricontrolla il codice nel main perche' nella riga

    if (maggiore = 1)

    utilizzi una variabile mai dichiarata nel main (quella usata nella funzione confronto non e' visibile nel main ...) e poi utilizzi in una if il simbolo = che e' di assegnazione ... quello di confronto e' ==

  5. #5
    Utente di HTML.it L'avatar di the-bit
    Registrato dal
    Feb 2005
    Messaggi
    543
    Innanzitutto grazie,
    allora:
    1) ho tolto le le due barre '\\' e mi piacerebbe capire perchè non andavano messe; 2) ho messo == in if (accidenti, non me ne ero proprio accorto - è proprio vero che gli occhi vedono solo quello che vogliono vedere);
    3) la variabile MCD è ben dichiarata in double
    codice:
    ........
    double MCD (int num, int den)
       {    
            int MCD;
    ..........
    non capisco cosa altro sto sbagliando.
    "To iterate is human, to recurse, divine." (R.(Heller))

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Originariamente inviato da the-bit
    Innanzitutto grazie,
    allora:
    1) ho tolto le le due barre '\\' e mi piacerebbe capire perchè non andavano messe;
    Il simbolo \ e' usato per indicare che la riga continua nella successiva ... e dato che avevi iniziato il commento con // allora stavi dicendo che anche la riga successiva era un commento ...

    3) la variabile MCD è ben dichiarata in double
    codice:
    ........
    double MCD (int num, int den)
       {    
            int MCD;
    ..........
    non capisco cosa altro sto sbagliando.
    Non mi riferivo a MCD (che fra l'altro non e' corretto perche' utilizzi lo stesso nome per la funzione e per la variabile locale ...) ma alla variabile

    maggiore

    che usi nella if ...

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.