Restituire la cella che contiene il numero minore(vettore)

di il
5 risposte

Restituire la cella che contiene il numero minore(vettore)

Raga devo fare 1 programma molto semplice dato un vettore capire in che cella è contenuto il numero più piccolo il mio problema è che logicamente c'è qualcosa che non va perchè al massimo arriva alla posizione 3 e dice che oltre non ci sono numeri più piccoli vi posto tutto il codice compreso la parte del main



#include <stdio.h>
//calcola la posizione del numero più piccolo
void acquisisci(int[],int);
int pos_minore(int[],int);// calcolerà in che posizione si trova il numero più piccolo

int main()
{
    int vet[10],size,ris;
    
    size=10;
    acquisisci(vet,size);
    printf("l'elemento più piccolo si trova nella cella di posizione %d\n",ris=pos_minore(vet,size));
    
    return 0;
}


void acquisisci(int vet[],int lung){
    
    int i;
    
    
    for(i=0;i<lung;i++)
    {
    printf("inserisci l'elemento di posizione %d\n",i);
        scanf("%d",&vet[i]);
    }

}




int pos_minore(int vet[],int lung){

    int i,cont,minimo;
    
    
    cont=0;
    i=0;
    minimo=vet[i];
    for(i=1;i<=lung;i++){
        if(vet[i]<minimo){minimo=vet[i];
            cont++;
        }
    }
    return cont;
    }
    

grazie per chi trova il mio bug!

5 Risposte

  • Re: Restituire la cella che contiene il numero minore(vettore)

    Guarda qua cosa stai dicendo, nel ciclo for:
    
    int pos_minore(int vet[],int lung){
    
        int i,cont,minimo;
       
       
        cont=0;
        i=0;
        minimo=vet[i];
        for(i=1;i<=lung;i++){
            if(vet[i]<minimo){minimo=vet[i];
                cont++;
            }
        }
        return cont;
        }
    
    Se fai
    cont=i
    al posto di
     cont ++
    dovrebbe funzionare. Questo perchè se la prima entrata nell'if avviene per esempio quando sei al posto 5, cont verrebbe incrementato e assumerebbe il valore 1 (0+1). Se invece fai come ti ho detto, a cont viene assegnato esattamente il valore di i, quindi passerebbe da 0 a 5.

    Premetto che io il C non lo conosco (conosco solo il C++), però a logica dovrebbe andare

    Fammi sapere!
  • Re: Restituire la cella che contiene il numero minore(vettore)

    Grazie per il tuo suggerimento...molto probabilmente questo programma è stato sbagliato perché prima non l'ho provato carta e penna!! soluzione che io adotto spesso, ma questa volta avevo preso sotto gamba il problema e quindi ho commesso l'errore! grazie ancora
  • Re: Restituire la cella che contiene il numero minore(vettore)

    Un altro errore conosciuto come off-by-one:
    
    ...
    for(i=1;i<=lung;i++){
       if(vet[i]<minim  <------ cut --->
    ...
    
    Gli array vanno dall'elemento 0 all'elemento n-1.
  • Re: Restituire la cella che contiene il numero minore(vettore)

    Grazie!
  • Re: Restituire la cella che contiene il numero minore(vettore)

    Hai ragione ixamit, quello mi era sfuggito
Devi accedere o registrarti per scrivere nel forum
5 risposte