Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269

    Passare funzione come parametro di input

    Salve ragazzi, ho il seguente codice:

    codice:
    /* sommo le chiavi */
    int sumKey(tree *root, int sum){
        if( root == NULL ){
            return sum;
        } else {
            sumKey(root->left);
            sum=sum+root->info;
            sumKey(root->right);
            sum=sum+root->info;
        }
    }
    
    
    /* foo */
    int Sum_After_Level_k(tree *root, int levels, int k, int sum){
        if ( levels < k ){
            Sum_After_Level_k(root->left, levels+1, k, sum);
            Sum_After_Level_k(root->right, levels+1, k, sum);
        } else {
            SumKey(root, sum);
            Sum_After_Level_k=SumKey(root, sum);
        }
    }
    Non riesco a passare la funzione "SumKey" a "Sum_After_Level_k".

    Il compilatore mi dà questi errori:
    codice:
    Compiling: C:\Users\Gaten\Desktop\Untitled1.cpp
    C:\Users\Gaten\Desktop\Untitled1.cpp: In function 'int sumKey(tree*, int)':
    C:\Users\Gaten\Desktop\Untitled1.cpp:92: error: too few arguments to function 'int sumKey(tree*, int)'
    C:\Users\Gaten\Desktop\Untitled1.cpp:96: error: at this point in file
    C:\Users\Gaten\Desktop\Untitled1.cpp:92: error: too few arguments to function 'int sumKey(tree*, int)'
    C:\Users\Gaten\Desktop\Untitled1.cpp:98: error: at this point in file
    C:\Users\Gaten\Desktop\Untitled1.cpp: In function 'int Sum_After_Level_k(tree*, int, int, int)':
    C:\Users\Gaten\Desktop\Untitled1.cpp:110: error: 'SumKey' was not declared in this scope
    Process terminated with status 1 (0 minutes, 0 seconds)
    5 errors, 0 warnings
    Come faccio a passare la function "SumKey" come parametro di input alla function "Sum_After_Level_k"???

    Grazie anticipatamente.
    Con i sogni possiamo conoscere il futuro...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Il problema non è chiaro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    Ho provato a risolvere così:

    Ho creato un puntatore a funzione:
    codice:
    typedef int (*treeInInt) (tree, int);
    Ecco le functions:
    codice:
    /* sommo le chiavi */
    int sumKey(tree *root, int sum){
        if( root == NULL ){
            return sum;
        } else {
            sumKey(root->left);
            sum=sum+root->info;
            sumKey(root->right);
            sum=sum+root->info;
        }
    }
    
    
    /* sumKey */
    int Sum_After_Level_k(tree *root, int levels, int k, int sum, treeInInt sumKey){
        if ( levels < k ){
            Sum_After_Level_k(root->left, levels+1, k, sum, sumKey);
            Sum_After_Level_k(root->right, levels+1, k, sum, sumKey);
        } else {
            sumKey(root, sum);
            Sum_After_Level_k=sumKey(root, sum);
        }
    }
    Questi sono i prototipi delle funzioni:
    codice:
    int sumKey(tree *root, int sum);
    int Sum_After_Level_k(tree *root, int levels, int k, int sum, treeInInt sumKey);
    Ma ho questi errori dal compilatore, che non riesco a risolvere:
    codice:
    Compiling: C:\Users\Gaten\Desktop\Untitled1.cpp
    C:\Users\Gaten\Desktop\Untitled1.cpp: In function 'int main()':
    C:\Users\Gaten\Desktop\Untitled1.cpp:47: error: invalid conversion from 'int (*)(tree*, int)' to 'int'
    C:\Users\Gaten\Desktop\Untitled1.cpp:20: error: too few arguments to function 'int Sum_After_Level_k(tree*, int, int, int, int (*)(tree, int))'
    C:\Users\Gaten\Desktop\Untitled1.cpp:47: error: at this point in file
    C:\Users\Gaten\Desktop\Untitled1.cpp: In function 'int sumKey(tree*, int)':
    C:\Users\Gaten\Desktop\Untitled1.cpp:96: error: too few arguments to function 'int sumKey(tree*, int)'
    C:\Users\Gaten\Desktop\Untitled1.cpp:100: error: at this point in file
    C:\Users\Gaten\Desktop\Untitled1.cpp:96: error: too few arguments to function 'int sumKey(tree*, int)'
    C:\Users\Gaten\Desktop\Untitled1.cpp:102: error: at this point in file
    C:\Users\Gaten\Desktop\Untitled1.cpp: In function 'int Sum_After_Level_k(tree*, int, int, int, int (*)(tree, int))':
    C:\Users\Gaten\Desktop\Untitled1.cpp:114: error: conversion from 'tree*' to non-scalar type 'tree' requested
    C:\Users\Gaten\Desktop\Untitled1.cpp:115: error: conversion from 'tree*' to non-scalar type 'tree' requested
    Process terminated with status 1 (0 minutes, 0 seconds)
    9 errors, 0 warnings
    Con i sogni possiamo conoscere il futuro...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Mica ho ancora capito cosa vuoi fare ...

    Vuoi passare un "puntatore alla funzione sumKey" come parametro della Sum_After_Level_k ?

    E perché?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    In ogni caso, il typedef è sbagliato: hai scritto tree invece di tree *
    codice:
    typedef int (*treeInInt) (tree *, int);
    Amaro C++, il gusto pieno dell'undefined behavior.

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Sì, ma poi con questo

    Sum_After_Level_k=sumKey(root, sum);

    cosa si vuole ottenere?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it L'avatar di gaten
    Registrato dal
    Jul 2007
    Messaggi
    1,269
    oregon, devo praticamente sommare gli elementi dell'albero a partire dal livello dopo k, esempio se k=2, devo sommare gli elementi che stanno dopo il livello 2.
    La function sumKey, mi visita l'albero in symmetric order, e mi somma gli elementi.
    Sum_After_Level_k scorre l'albero fino ad arrivare a k, per poi richiamare sumKey.
    Il mio problema stà nel passare sumKey a Sum_After_Level_k.

    codice:
    Sum_After_Level_k=sumKey(root, sum);
    Con questo voglio ottenere la somma degli elementi dopo il livello k.
    Con i sogni possiamo conoscere il futuro...

  8. #8
    Scusami ma gli errori che da il compilatore sono abbastanza chiari
    Mi riferisco al codice del primo messaggio:

    qui dichiari:

    codice:
    int sumKey(tree *root, int sum){
        //ecc..
    }
    ma poi nella funzione stessa fai:

    codice:
    ..
    if( root == NULL ){
            return sum;
        } else {
            sumKey(root->left);
            sum=sum+root->info;
            sumKey(root->right);
            sum=sum+root->info;
        }
    Non ti sembra che manchi qualche argomento nelle chiamate di sumKey?

    E infatti:

    codice:
    C:\Users\Gaten\Desktop\Untitled1.cpp:92: error: too few arguments to function 'int sumKey(tree*, int)'
    L'altro errore è qua:
    codice:
    else {
            SumKey(root, sum);
            Sum_After_Level_k=SumKey(root, sum);
        }
    Usi "SumKey" mentre la funzione si chiame "sumKey"... La maiuscola!
    Chiaramente il compilatore non trovava nessuna funzione chiamata "SumKey" e infatti:

    codice:
    C:\Users\Gaten\Desktop\Untitled1.cpp error: 'SumKey' was not declared in this scope
    Salute a voi, da Laikius!

    --> Faber est suae quisque fortunae <--

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 © 2025 vBulletin Solutions, Inc. All rights reserved.