Compila ma non parte cosa sbaglio?

di Anonimizzato30151 il
20 risposte
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <time.h>

//definizione prptotipo//////////////

int controllo(int i,int x,int y);
int getnum(int x,int y);

////////////////////////////main////////////////////////////////////////////

int main(){
	
	int leyland[1000];
	int i=4,k=0,j,x,y;
	
	int seed;
	seed=time(0);
	srand48(seed);

	printf("Scrivere un programma che trovi i numeri di Leyland compresi tra 4 e 1000 e, una volta trovati, li classifica\n");
	
	x&&y==getnum(x,y);
	printf("%d,%d",x,y);
	
	do{
		leyland[k]=controllo(i,x,y);
		
		k++;
		i++;
		
		printf("leyland= %d ,k = %d,h =%d,\n", leyland[k],k,i);
		
	}while(i!=1000);
	
	printf("ciao\n");
	
	return 0;
	
	}
	




// definizione funzioni/////////////////////////

int controllo(int i,int x,int y){
	int j;
	
// verifico che i sia di leyland
		do{
			
			if(((pow(x,y)+pow(y,x))==i)&&(i%2==0)){
			j=i;
			}
			else{i++;
			}
		
		}while(j!=i);
	
	return(j);	
}

int getnum(int x,int y){
	
	do{
			x=((int)lrand48()/RAND_MAX)*(1000);
			y=((int)lrand48()/RAND_MAX)*(1000);
			
		}while(((x%2)!=0)&&((y%2)!=0)&&(1>y)&&(y>x));
		
		return (x&&y);
	
}

20 Risposte

  • Non fai prima a studiarti due pagine di un libro di programmazione in C? Perdi meno tempo...
  • Ho chiesto solo aiuto se non me lo vuoi dare non ti esprimere.
  • Sei molto lontano dalla soluzione, poi certe righe che hai scritto, tipo x&&y==getnum(x,y); richiedono che ti fermi un attimo per studiare le basi, ed è già il secondo thread. Poi fai quello che credi
  • #include <stdio.h>
    #include <stdlib.h>
    #include <math.h>
    #include <time.h>
    
    //definizione prptotipo//////////////
    
    int controllo(int i,int x,int y);
    
    ////////////////////////////main////////////////////////////////////////////
    
    int main(){
    	
    	int leyland[1000];
    	int i=4,k=0,j,x,y;
    	
    	int seed;
    	seed=time(0);
    	srand48(seed);
    
    	printf("Scrivere un programma che trovi i numeri di Leyland compresi tra 4 e 1000 e, una volta trovati, li classifica\n");
    	
    	do{
    			x=((int)lrand48()/RAND_MAX)*(1000);
    			y=((int)lrand48()/RAND_MAX)*(1000);
    			
    		}while(((x%2)!=0)&&((y%2)!=0)&&(1>y)&&(y>x));
    	
    	
    	do{
    		leyland[k]=controllo(i,x,y);
    		
    		k++;
    		i++;
    		
    		printf("leyland= %d ,k = %d,h =%d,\n", leyland[k],k,i);
    		
    	}while(i!=1000);
    	
    	printf("ciao\n");
    	
    	return 0;
    	
    	}
    	
    
    
    
    
    // definizione funzioni/////////////////////////
    
    int controllo(int i,int x,int y){
    	int j;
    	
    // verifico che i sia di leyland
    		do{
    			
    			if(((pow(x,y)+pow(y,x))==i)&&(i%2==0)){
    			j=i;
    			}
    			else{i++;
    			}
    		
    		}while(j!=i);
    	
    	return(j);	
    }
    inizialmente era così ma non parte lo stesso
  • Il programma compila e parte, ma si blocca nella funzione "controllo" in un ciclo infinito. Prova a mettere delle printf nell'if e vedi che succede:
    
    int controllo(int i,int x,int y){
    	int j;
    	
    // verifico che i sia di leyland
    	do{
    		if(((pow(x,y)+pow(y,x))==i)&&(i%2==0)){
    			j=i;
    			printf("si\n");
    		}
    		else{
    			i++;
    			printf("no\n");
    		}
    		
    	}while(j!=i);
    	
    	return(j);	
    }
    
  • Hai ragione viene un ciclo infinito nella else. è come se non entrasse mai nell'if
  • Se la if non risulta mai vera, chiediti perché.
  • int controllo(int i,int x,int y){
    	
    // verifico che i sia di leyland
    			
    	if(((pow(x,y)+pow(y,x))==i)&&((i%2)==0)){
    	return i;
    	}
    }
    provando a imporre la funzione controllo così escono fuori dei valori, ma la i che viene ritornata non è quella che mi aspettavo. dovrebbe ritornare un numero intero compreso tra 4 e 1000 che soddisfa la condizione della if. ma ritorna tutt'altro
  • Sia la k che la i incrementano (ho provato a fare delle print) ma quando vado a stampare l'array mi stampa tutti 0. il che è decisamente improbabile perchè l'ho riempito con tutte le i che soddisfano la condizione della funz. controllo.
  • Penso sia per lo stesso motivo di prima. ossia non entra nella if della funz. controllo perchè quando metto delle print nella if non le gira. ma non capisco il motivo per cui non ci entra
  • Nella if ci entra SOLO se la condizione viene soddisfatta, no?

    Quindi metti delle printf prima della if per controllare i valori che stai confrontando e dicci cosa ottieni. E capirai perché la if non viene soddisfatta.
  • Se stampo la i mi itera fino a 1000 ( e questo va bene) se stampo x,y (che dovrebbero essere generati casualmente tra 0 e 1000) mi esce sempre 0 per entrambi
  • La condizione che devo soddisfare è questa:
    x e y interi positivi con 1<y<=x
  • Quindi la mia condizione di uscita dalla while che genera x e y è:
    while(((x%2)!=0)&((y%2)!=0)&(1>y)&(y>x));
Devi accedere o registrarti per scrivere nel forum
20 risposte