Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Problema ciclo for  [C++]
Forum - C/C++ - Problema ciclo for [C++]

Avatar
AlesPalla (Normal User)
Rookie


Messaggi: 25
Iscritto: 23/11/2008

Segnala al moderatore
Postato alle 19:43
Martedý, 02/06/2009
Premetto che ho iniziato oggi a programmare in c++.
Ho incontrato un errore che francamente non capisco in un ciclo for. Questo Ŕ il codice:
Codice sorgente - presumibilmente C++

  1. int main(int argc, char *argv[])
  2. {
  3.   for(int n=1;n <= 100;n++){
  4.           if (fun(n)) printf("%d \n",n);              
  5.           }        
  6.   system("PAUSE");  
  7.   return 0;
  8. }



fun() Ŕ una funzione di  un integer che da true o false a seconda di quale numero inserisco..
Facciamo un esempio:
Se tolgo il ciclo for e creo un programma fatto in queto modo:
Codice sorgente - presumibilmente C++

  1. int main(int argc, char *argv[])
  2. {
  3.           if (fun(atoi(argv[1]))) printf("%d \n",atoi(argv[1]));                      
  4.   system("PAUSE");  
  5.   return 0;
  6. }


la funzione funziona(scusate :)) in maniera egregia per esempio stampando i valori 1,2,3 e 5 mentre non stampa il 4.Perfetto.
Ma quando faccio partire quella con il ciclo for mi visualizza solo 1,2 e 3 come se il ciclo, una volta che ha visto che con 4 non doveva stampare nulla, saltasse l'istruzione if facendo si che il 5 non venga visualizzato!!

Non ci st˛ capendo pi¨ nulla!!! Dove stÓ l'errore?Grazie in anticipo x le risposte

Ultima modifica effettuata da AlesPalla il 02/06/2009 alle 19:44


...
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 21:07
Martedý, 02/06/2009
La possiamo vedere questa funzione fun ?


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
gigisoft (Member)
Guru


Messaggi: 695
Iscritto: 11/10/2008

Segnala al moderatore
Postato alle 10:33
Mercoledý, 03/06/2009
Testo quotato

Postato originariamente da theprogrammer:

La possiamo vedere questa funzione fun ?



Beh... si la cosa piu' probabile e' che in qualche modo la funzione modifichi il valore di n con un intero maggiore di 100, causando l'uscita dal ciclo.


Le cose si fanno per bene o non si fanno affatto
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 11:15
Mercoledý, 03/06/2009
Testo quotato

Postato originariamente da gigisoft:


Beh... si la cosa piu' probabile e' che in qualche modo la funzione modifichi il valore di n con un intero maggiore di 100, causando l'uscita dal ciclo.



Esatto ... e' per questo che ho chiesto di vedere la fun ...


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
AlesPalla (Normal User)
Rookie


Messaggi: 25
Iscritto: 23/11/2008

Segnala al moderatore
Postato alle 15:14
Mercoledý, 03/06/2009
La funzione fun Ŕ questa:
Codice sorgente - presumibilmente C++

  1. bool fun(int c) {
  2. bool a,b;
  3. int k=1;
  4.  
  5. while(k<9) {
  6.   k++;
  7.   if(k==c) {
  8.    a=true;    
  9.   } else {      
  10.    if ((c%k)==0) {
  11.     a=false;
  12.    } else {
  13.     a=true;
  14.    }  
  15.    b=b&&a;              
  16.   }    
  17. }  
  18.  return  b;    
  19. }


E' presa da un progetto di questo sito. Volevo vedere come funzionava...
Comunque ho risolto aggiungendo un printf inutile al ciclo for(in poche parole non stampa nulla!!!) Ora vi posto il codice completo.
Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <stdlib.h>
  3.  
  4. using namespace std;
  5.  
  6. bool fun(int c) {
  7. bool a,b;
  8. int k=1;
  9.  
  10. while(k<9) {
  11.   k++;
  12.   if(k==c) {
  13.    a=true;    
  14.   } else {      
  15.    if ((c%k)==0) {
  16.     a=false;
  17.    } else {
  18.     a=true;
  19.    }  
  20.    b=b&&a;              
  21.   }    
  22. }  
  23.  return  b;    
  24. }    
  25.  
  26. int main(int argc, char *argv[])
  27. {
  28.   for(int n=1;n <= 100;n++){
  29.   printf("");
  30.           if (fun(n)) printf("%d \n",n);              
  31.           }        
  32.   system("PAUSE");  
  33.   return 0;
  34. }


Il fatto Ŕ che non capisco perchŔ serva quel printf(ma ho notato che funziona lo stesso a condizione di mettere un pezzo di codice nel ciclo for svincolato dall'if!!)


...
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 16:28
Mercoledý, 03/06/2009
All'interno della funzione la variabile b DEVE essere inizializzata ... ad esempio

bool a, b = true;


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote