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

    [C] ricerca elemento in vettore di interi

    ciao ho bisogno di un aiuto per questo esercizio,il testo dice:

    "Si scriva una funzione in C, denominata cerca, che ricerchi la presenza di un elemento in un vettore di interi. La funzione riceve in ingresso tre parametri: 1. un vettore di interi vettore[] nel quale ricercare il valore; 2. un valore intero dimensione che indica quanti elementi contiene il vettore; 3. il valore intero elem che deve essere ricercato. La funzione deve restituire: 1. se il valore elem è presente nel vettore, allora la funzione restituisce l’indice della posizione nella quale si trova tale valore; 2. se il valore elem è presente più volte, si restituisca l’indice di tutte le occorrenze; 3. se il valore elem non è presente nel vettore, si restituisca -1."

    io ho scritto il codice in questo modo:
    codice:
    # include <stdio.h>
    # include <stdlib.h>
    # define MAX 100
    
    
    //Funzione cerca
    int cerca(int vettore[10], int elem, int dimensione) {
        int i;
        int posizione;
        for (i = 0; i < dimensione; i++) {                                  //scorro il vettore
            if (vettore[i] == elem) {
                posizione = i;
                return(posizione);
            }
        }
           return(-1);
     }
    
    
    
    
    int main() {
    
    
        //Dichiarazioni
    
    
        int vettore[MAX];
        int i;
        int dimensione, elem;
        int risultato_ricerca;
    
    
        printf("inserisci la dimensione del vettore\n");
        scanf_s("%d", &dimensione);
        if (dimensione > 100 || dimensione < 0){
            printf("grandezza inserita non valida\n");
            scanf_s("%d", &dimensione);
        }
    
    
        printf("inserisci dei valori nel vettore:\n");
        for (i = 0; i < dimensione; i++){
            scanf_s("%d",&vettore[i]);
        }
        printf("Vettore:\n");
        for (i = 0; i < dimensione; i++) {
            printf("%d ,", vettore[i]);
        }
    
    
        printf("valore da cercare:\n");
        scanf_s("%d", &elem);
        printf("elem = %d\n", elem);
        risultato_ricerca = cerca(vettore,dimensione,elem);
        printf("%d\n",risultato_ricerca);
    
    
            system("pause");
            return(0);
    }
    il problema che mi trovo ad avere è che non mi stampa l'indice della posizione,anzi nel caso che l'elemento sia presente o meno mi restituisce sempre il valore -1,per cui come posso risolvere??
    grazie a tutti

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    La tua funzione riceve i seguenti parametri esattamente in questo ordine: vettore, elemento da cercare, dimensione vettore

    Tu la richiami in questo modo:

    codice:
    cerca(vettore,dimensione,elem);

    Cioè, mettendo prima la dimensione e poi l'elemento da cercare. Ovviamente non va bene.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Grazie mille per la spiegazione,ora il programma funziona.

  4. #4
    un altra cosa però, così come ho scritto io la funzione mi restituisce l'indice della prima occorrenza del valore che vado a cercare,me se è presente più di una volta avrei bisogno che mi restituisse gli indici di tutte le occorrenze pertanto io ho modificato il codice in questo modo:

    codice:
    int cerca(int vettore[10], int elem, int dimensione) {
    	int i;
    	int posizione;
    	for (i = 0; i < dimensione; i++) {                                  //scorro il vettore
    	
    			do{
    				posizione = i + 1;
    				printf("il valore cercato si trova in posizione:\n");
    				return(posizione);
    			  } while (vettore[i] == elem);
    	   } 
    	
    	printf("il valore inserito non si trova nel vettore dato\n");
    	return(-1);
    }
    soltanto che è sbagliato perchè pur inserendo un vettore in cui ripeto il numero che vado a cercare ,il valore di ritorno mi dà che è sempre 1. qualcuno mi dice dov'è che sbaglio??

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    2 considerazioni:

    1) L'istruzione "return" fa terminare la funzione, ritornando, appunto, ciò che è il suo argomento. Da qui dovresti capire perchè quel codice non ha alcun senso, anzi è completamente sbagliato.

    2) Se vuoi che una funzione ritorni "più valori", allora il suo valore di ritorno (perchè, sia matematicamente che a livello di programmazione, una funzione ha uno ed un solo valore di ritorno, altrimenti, per definizione, non sarebbe una funzione) non può essere un intero (perchè un intero è, per definizione, uno solo numero), ma dovrebbe essere un "vettore di interi". Nel vettore andranno memorizzate tutte le posizioni trovate.


    Dal codice che hai postato mi sembra evidente che ti manchi la base di cosa sia una funzione (a livello matematico e a livello di programmazione) e di come queste funzionino (scusa il gioco di parole).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    ok non sono un genio in programmazione ma ci sto provando sul serio quindi ti chiedo un altra dritta..
    per quanto riguarda il valore di ritorno quello che hai scritto è giusto pertanto ho pensato di fare restituire alla mia funzione un puntatore ad array dinamico e sperando che l'idea sia corretta ho modificato il codice in questo modo:

    codice:
    # include <stdio.h>
    # include <stdlib.h>
    # define MAX 100
    
    
    //Funzione cerca
    int *cerca(int vettore[10], int elem, int dimensione,int*p) {
        int i, j = 0;
        for (i = 0; i < dimensione; i++) {                                  //scorro il vettore
            if (vettore[i] == elem) {
                p[j] = i;
                j++;
            }
        }
        return(p);
    }
    
    
    int main() {
    
    
        //Dichiarazioni
    
    
        int vettore[MAX];
        int i,*p;
        int dimensione, elem;
        int risultato_ricerca;
    
    
        printf("inserisci la dimensione del vettore\n");
        scanf_s("%d", &dimensione);
        if (dimensione > 100 || dimensione < 0){
            printf("grandezza inserita non valida\n");
            scanf_s("%d", &dimensione);
        }
        p = (int*)malloc(dimensione*sizeof(int));    //allocazione dell'array in modo dinamico la cui dimensione sarà uguale a vettore[10] nel caso limite in cui quest'ultimo contenga un solo numero 
        if (p == NULL) {
            exit(1);
        }
    
    
        printf("inserisci dei valori nel vettore:\n");
        for (i = 0; i < dimensione; i++){
            scanf_s("%d", &vettore[i]);
        }
        printf("Vettore:\n");
        for (i = 0; i < dimensione; i++) {
            printf("%d ,", vettore[i]);
        }
    
    
        printf("valore da cercare:\n");
        scanf_s("%d", &elem);
        printf("elem = %d\n", elem);
            risultato_ricerca = *cerca(vettore, elem, dimensione,p);
            printf("%d\n", risultato_ricerca);
        
    
    
        system("pause");
        return(0);
    }
    però non funziona lo stesso...come posso fare?
    Ultima modifica di mauro86; 19-01-2015 a 12:58

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 © 2024 vBulletin Solutions, Inc. All rights reserved.