PROBLEMA DI VERIFICA SU ARRAY

di il
11 risposte

PROBLEMA DI VERIFICA SU ARRAY

Salve a tutti, ho un problema con il seguente codice. Il programma dovrebbe verificare se in un dato array esistono due numeri consecutivi pari ed almeno uno dei due è un multiplo di tre. Non riesco a capire dove sbaglio. Il programma deve contenere una funzione ricorsiva. Scusate ma nelle printf ho cercato di non riscrivere tutta la specifica del problema. Grazie in anticipo.

#include <stdio.h>
#include <stdlib.h>


int pariedUnMultiploDiTreRic(int *array, int lunghezza, int i){
int verificata;
if (lunghezza <=1)
verificata =0;
else {
if (((array) % 2 == 0)&&((array[i+1]) % 2 == 0)){
if(((array) % 3 == 0)||((array[i+1]) % 3 == 0))
verificata=1;
else
verificata=pariedUnMultiploDiTreRic(array,lunghezza,i+1);
}

}
return verificata;
}



int pariedUnMultiploDiTre(int *array, int lunghezza){
int i = 0;
int verifica;
verifica = pariedUnMultiploDiTreRic(array,lunghezza,i);
return verifica;
}

int main(){
int verifica=0;
int lunghezza;
int i;
printf("Salve, sono un programma che trova una coppia blablabla pari e multiplo di tre\n");
printf("quanto sara' lunga la tua stringa?\n");
scanf("%d", &lunghezza);
int array[lunghezza];
printf("itroduci i numeri\n");
for(i=0;i<=lunghezza-1;i++){
printf("inserisci il %d numero: ", i+1);
scanf("%d", &array);
}
int *punt=array;
verifica = pariedUnMultiploDiTre(punt,lunghezza);
if(verifica)
printf("yeah\n");
else
printf("niente da fare ciao\n");

}

11 Risposte

  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Inizia dicendoci cosa non funziona
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Qualsiasi vettore inserisco la verifica dà sempre esito true.
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Prova a mettere una condizione che smette di far ripetere la funzione di ricerca se i+1 >= lunghezza

    Edit

    Anzi scusa ho scritto male, te lo dico meglio: metti la condizione che fa continuarea ricorsione solo se alla prossima esecuzione sei sicuro che i non esca dai limiti dell'array. Praticamente devi continuare finché non finisci i numeri nell'array, sennò vai fuori e sballa tutto
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Ho risolto. Innanzitutto grazie ANDPRI per la tempestiva risposta. L'errore sta nel non inizializzare la variabile verificata=0 nella funzione ricorsiva.
    riporto il codice giusto cosicché in futuro magari possa essere di aiuto a qualcuno.
    
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int pariedUnMultiploDiTreRic(int *array, int lunghezza, int i){
        int verificata=0;
        if (lunghezza <=1)
            verificata =0;
            else {
                if (((array[i]) % 2 == 0)&&((array[i+1]) % 2 == 0)){
                    if(((array[i]) % 3 == 0)||((array[i+1]) % 3 == 0))
                    verificata=1;
                    else
                    verificata=pariedUnMultiploDiTreRic(array,lunghezza,i+1);
                } 
                
            }           
        return verificata;
    } 
            
          
    
    int pariedUnMultiploDiTre(int *array, int lunghezza){
        int i = 0;
        int verifica;
        verifica = pariedUnMultiploDiTreRic(array,lunghezza,i);
        return verifica;
    }
    
    int main(){
        int verifica=0;
        int lunghezza;
        int i;
        printf("Salve, sono un programma che trova una coppia blablabla pari e multiplo di tre\n");
        printf("quanto sara' lunga la tua stringa?\n");
        scanf("%d", &lunghezza);
        int array[lunghezza];
        printf("itroduci i numeri\n");
        for(i=0;i<=lunghezza-1;i++){
            printf("inserisci il %d numero: ", i+1);
            scanf("%d", &array[i]);
        }
        int *punt=array;
        verifica = pariedUnMultiploDiTre(punt,lunghezza);
                if(verifica)
                    printf("yeah\n");
                    else
                        printf("niente da fare ciao\n");
                        
    }
        
    [\code]
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Ma sei sicuro di aver risolto così? Leggi la risposta di prima, l'ho modificata perché avevo sbagliato
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Intendi cosi?
    
    
    
    #include <stdio.h>
    #include <stdlib.h>
    
    
    int pariedUnMultiploDiTreRic(int *array, int lunghezza, int i){
        int verificata=0;
        if (i+1>=lunghezza)
            verificata =0;
            else {
                if (((array[i]) % 2 == 0)&&((array[i+1]) % 2 == 0)){
                    if(((array[i]) % 3 == 0)||((array[i+1]) % 3 == 0))
                    verificata=1;
                    else
                    verificata=pariedUnMultiploDiTreRic(array,lunghezza,i+1);
                } 
                
            }           
        return verificata;
    } 
    
    [\code]
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    No. Devi metterla dopo, subito prima di chiamare la ricorsione. Perché così interrompi la ripetizione se i va oltre i limiti dell'array (comunque non è i+1>=lunghezza, ho sbagliato a scrivere. La condizione giusta cerca di trovarla da solo, pensando a come funziona la funzione)
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Credo di aver capito o almeno spero.:


    int pariedUnMultiploDiTreRic(int *array, int lunghezza, int i){
    int verificata=0;
    if (lunghezza <=1)
    verificata =0;
    else {
    if (((array) % 2 == 0)&&((array[i+1]) % 2 == 0)){
    if(((array) % 3 == 0)||((array[i+1]) % 3 == 0))
    verificata=1;
    else
    verificata=pariedUnMultiploDiTreRic(array,lunghezza-1,i+1);
    }

    }
    return verificata;
    }

    cosi facendo decremento la variabile lunghezza ad ogni ricorsione fino al caso base(lunghezza =1). Spero sia giusto il mio ragionamento.
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Ah non ci avevo pensato. Forse può funzionare anche così, io ho messo un if prima di chiamare la funzione ma penso vada bene lo stesso
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Niente da fare. Quando si tratta di array di massimo 3 di dimensione funziona; quando però ho provato a inserire questo array {1,2,3,4,6} mi ritorna false quando in teoria dovrebbe essere true; Non riesco a capire proprio dove sia il problema nonostante è un problema semplice .
    
    int pariedUnMultiploDiTreRic(int *array, int lunghezza, int i){
        int verificata=0;
        if (lunghezza <=1)
            verificata =0;
            else {
                if (((array[i]) % 2 == 0)&&((array[i+1]) % 2 == 0)){
                    if(((array[i]) % 3 == 0)||((array[i+1]) % 3 == 0))
                    verificata=1;
                    else 
                    verificata=pariedUnMultiploDiTreRic(array,lunghezza-1,i+1);
                } 
                
            }           
        return verificata;
    } 
      
    
  • Re: PROBLEMA DI VERIFICA SU ARRAY

    Non saprei, nel modo in cui l'ho modificato io funziona, comunque ti conviene unire quei due if consecutivi in un unico grande if che li verifica entrambi. E poi metti la condizione che se verificata chiama la funzione, sennò passa al return. Così è più ordinato e capisci meglio
Devi accedere o registrarti per scrivere nel forum
11 risposte