Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29

    [C] funzione: cerca più occorrenze in un vettore int

    ciao, ho riscontrato un problema in un esercizio dove bisogna scrivere una funzione in c che deve cercare un numero all'interno di un vettore e restituire tutte le sue occorrenze, ma quando chiamo la funzione nel main l'esecuzione si blocca e non riesco a capire dove sbaglio. La funzione che ho scritto è questa:


    codice:
    int *cerca (int *vettore,int elem,int n)
    {
        int i, *vett=(int*)malloc(n*sizeof(int)),j=0;/*dichiaro le variabili locali*/
        if (vett==NULL)
            return NULL;
        for(i=0;i<n;i++)
            vett[i]=-1;
        for (i=j=0;i<n;i++)/*faccio un ciclo che mi cerca l'elemento*/
            if (vettore[i]==elem) vett[j++]=i;
            
        return vett;        
    }

    vi posto anche il main:


    codice:
    int main()
    {
        int *vettore,n,i, elem, *vett;/*dichiaro le variabili locali al main e il puntatore*/
        /*chiedo e alloco il numero di elementi del vettore*/
        printf("Quanti numeri si vogliono nel vettore? ");
        scanf("%d",&n);
        vettore=(int*)malloc(n*sizeof(int));
        if (vettore==NULL){/*controllo che l'allocazione sia andata a buon fine*/
            printf("Errore nell\'allocazione");
            exit(EXIT_FAILURE);
        }
        /*genero casualmente il vettore*/
        printf("\n\nVettore generato casualmente:");
        srand(time(NULL));
        for(i=0;i<n;i++)
        {
            vettore[i]=(rand()%100);
            printf("%d ",vettore[i]);
        }
        /*chiedo che elemento si deve cercare all'interno del vettore*/
        printf("\n\nChe numero si desidera cercare?");
        scanf("%d",&elem);
        /*cerco l'elemento nel vettore non ordinato*/
        printf("\n\nLa posizione dell\'elemento inserito è: ");
        if((vett=cerca(vettore,elem,n)==NULL))
            {
                printf("Errore nell\'allocazione");
                return 1;
            }
        for(i=0;i<n &&  vett[i]!=-1;i++)
            printf(" %d",vett[i]+1);
        /*ordino il vettore attraverso la funzione "ordina" e lo stampo*/
        printf("\n\nVettore ordinato: ");
        ordina(vettore,n);
        for(i=0;i<n;i++)
            printf("%d ",vettore[i]);
        /*cerco l'elemento nel vettore ordinato attraverso la funzione "cerca_ordinato" e stampo la sua posizione*/
        printf("\nLa posizione del valore inserito è: %d",cerca_ordinato(vettore,elem,n));    
        /*dealloco il vettore*/
        free(vettore);
        
        return 0;
    }
    Ultima modifica di LeleFT; 14-11-2014 a 14:18 Motivo: Aggiunti i tag CODE

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,303
    @tr_gal: quando si posta del codice, lo si deve inserire all'interno degli appositi tag [CODE] ... [/CODE], in modo da mantenere indentazione e formattazione del codice e renderlo, così, leggibile a tutti.

    Ho modificato io.


    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
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29
    @LeleFT scusa sono nuova nel forum, grazie mille!

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    codice:
    if((vett=cerca(vettore,elem,n)==NULL))
    Qui è l'errore. == viene eseguito per primo. A quel punto assegni a vett un booleano.

    Comunque dovresti ottenere un warning in compilazione e in ogni caso bastava usassi il Debugger.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2014
    Messaggi
    29
    Ah ok risolto, grazie mille!!

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.