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

    aiuto funzione linguaggio c

    ciao ragazzi devo consegnare un esercizio per l'università ma mi trovo in difficoltà essendo nuovo al mondo della programmazione. Devo scrivere una funzione che mi restituisca l'indice delle occorrenze di un elemento all'interno di un vettore. Ecco il codice:

    codice HTML:
    #include<stdio.h>
    #include<stdlib.h>
    #define d 10
    
    int funzione_cerca(int[], int, int);//prototipo della funzione
    //alla funzione verranno passati tre argomenti di tipo intero
    
    
    int main()
    {
    
        int array_1[d]={1,4,3,2,4,5,4,5,9,10};
        int elem; 
        
        printf("Inserisci un numero da 1 a 10 per vedere se e\'contenuto nel vettore:\n");
        while(scanf("%d",&elem)!=1 || elem<1 ||elem>10) { //controllo sulla scnaf
            printf("Inserisci un valore valido\n");
            fflush(stdin);
        }
        
        printf("Il numero inserito si trova nella posizione %d",funzione_cerca(array_1,d,elem)); 
        
        
        return 0;
    }
    
    
    int funzione_cerca(int array[], int dimensione, int elem)
    {
        int m=0;
          
        for(m=0; m<dimensione; m++)
        {
            if(array[m]==elem)
            {
            return m;
            }
         
        }
        return -1; //se il numero non è presente restituisco il valore -1
    }
    Così facendo riesco solo a far ritornare nel main l'indice della prima occorrenza (se inserisco il numero 4 mi ritorna la posizione 1). Come faccio a far ritornare l'indice di tutte le occorrenze nel main (quindi nel caso del numero quattro la posizione 1,4 e 6)? grazie mille dell'aiuto

  2. #2
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Puoi aggiungere alla funzione funzione_cerca un punto di partenza che varierà ad ogni nuova chiamata. Il ciclo terminerà quando avrai -1
    Per gli Spartani e Sparta usa spartan Il mio github

  3. #3
    Quote Originariamente inviata da linoma Visualizza il messaggio
    Puoi aggiungere alla funzione funzione_cerca un punto di partenza che varierà ad ogni nuova chiamata. Il ciclo terminerà quando avrai -1
    Una specie di passo base?

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2014
    residenza
    Voltati
    Messaggi
    913
    Puoi fare così:
    codice:
    int funzione_cerca(int array[], int dimensione, int elem, int cerca_da)
    {
        while (cerca_da < dimensione)
        {
            if (array[cerca_da] == elem)
            {
                return cerca_da;
            }
            cerca_da++;
        }
        return -1;
    }
    e richiamarla così:
    codice:
    int primo_indice = funczione_cerca(array, d, elem, 0);
    int secondo_indice = funzione_cerca(array, d, elem, primo_indice);

    (Non sono un programmatore c++, questo codice potrebbe non funzionare, ma hai capito l'idea?)
    No

  5. #5
    Utente di HTML.it L'avatar di linoma
    Registrato dal
    Mar 2010
    Messaggi
    1,346
    Credo sia + opportuno usare un costrutto for il compilatore saprà ottimizzarlo nella maniera opportuna.
    Per gli Spartani e Sparta usa spartan Il mio github

  6. #6
    Quote Originariamente inviata da tampertools Visualizza il messaggio
    Puoi fare così:
    codice:
    int funzione_cerca(int array[], int dimensione, int elem, int cerca_da)
    {
        while (cerca_da < dimensione)
        {
            if (array[cerca_da] == elem)
            {
                return cerca_da;
            }
            cerca_da++;
        }
        return -1;
    }
    e richiamarla così:
    codice:
    int primo_indice = funczione_cerca(array, d, elem, 0);
    int secondo_indice = funzione_cerca(array, d, elem, primo_indice);

    (Non sono un programmatore c++, questo codice potrebbe non funzionare, ma hai capito l'idea?)
    Si più o meno ho afferrato l'idea. In pratica devo passare alla funzione anche l'indice dell'array da cui iniziare a scorrere per trovare l'elemento. Se il valore è stato trovato con la prima chiamata alla funzione nella posizione 4, nella seconda chiamata dovrà partire ad analizzare l'array dalla posizione 5 ecc così fino ad arrivare all'ultimo elemento dell'array. La funzione ancora non va ma ti ringrazio molto per lo spunto

Tag per questa discussione

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.