Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    c - conservazione del valore delle variabili

    Ciao! Allora il problema del compilatore è risolto
    ne sorge uno didattico, e come al solito mi appello alla vostra saggezza....
    Ovvero, io ho una procedura ricorsiva, tipo

    int faiqualcosa(mio *uno)
    { static int ris = 0;
    if (.....)
    return ris;
    if (...............)
    return ++ris;
    if (...) faiqualcosa(mio *altro)
    else faiqualcosa(mio *altroaltro) }

    e la prima volta il risultato è corretto, perchè static conserva il valore della variabile ris anche tra + di una chiamata della funzione a cui appartiene, e questo va bene nella ricorsione.
    Solo che lo conserva anche quando richiamo faiqualcosa anche in altre parti del programma con parametri diversi!!
    Qualcuno sa un tipo di dato o un algoritmo x poter avere zero come valore di ris in partenza anche quando chiamo faiqualcosa non da se stessa e non per la prima volta?
    Grazie10000!

  2. #2
    Static lì non serve. dichiarala normalmente. E' chiaro che se la metti static te la conserva anche fuori da quella funzione. Per usare la ricorsione non serve static.
    .:: Zetra.it - Web. ads . multimedia . graphix ::.
    Realizzazione siti web - Carte Magic ai prezzi più bassi d'italia
    - Comuni e Città

  3. #3
    all'inizio avevo fatto così... poi ho visto che ad ogni chiamata ricorsiva veniva
    ridefinito il valore della variabile risettandola a zero e rovinando tutto!
    o magari l'errore era altrove?

  4. #4
    Originariamente inviato da PunkIvi
    Static lì non serve. dichiarala normalmente. E' chiaro che se la metti static te la conserva anche fuori da quella funzione. Per usare la ricorsione non serve static.
    Non sono daccordo: per la ricorsione può essere indispensabile avere variabili statiche, ma...

    Dipende dall'algoritmo!

    Se non ci spieghi l'algoritmo del tuo codice, o almeno non ce lo fai vedere completo, è difficil e che ti si possa aiutare...

    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  5. #5
    Più che altro: ci sarà di certo un momento in cui la tua funzione ricorsiva decide di non effettuare un'altra ricorsione: in quel momento devi anche azzerare la variabile statica.

    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  6. #6
    i nodi fanno parte di un albero binario
    int controlla (nodo *r, nodo *s)
    { static int ris = 0;

    if ( s == foglia )
    return ris;

    if (!(possibile(r,s)))
    { ris = ris + (s->filtro.ph.y);
    return ris; }

    if (r->lx > s->max)
    {
    controlla(r,s->right); }
    else {
    controlla(r,s->left);
    controlla(r,s->right); }
    }

  7. #7
    Prova così:

    codice:
    int controlla (nodo *r, nodo *s) 
    	{
    	static int ris = 0;
    	int ris2 = 0;
    	
    	if ( s == foglia )
    		{
    		ris2=ris;
    		ris=0;
    		return ris2;
    		}
    
    	if (!(possibile(r,s)))
    		{
    		ris = ris + (s->filtro.ph.y);
    		return ris;
    		}
    
    	if  (r->lx > s->max)
    		{
    		controlla(r,s->right);
    		}	
    	else
    		{ 
    		controlla(r,s->left); 
            	controlla(r,s->right);
            	}
            
    	}
    Ciao!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

  8. #8
    FUNZIONA!!!
    grazie!!!!!!!!

    off topic: ti offro una birra!

  9. #9
    Di nulla!
    "Le uniche cose che sbagli sono quelle che non provi a fare."
    Atipica

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.