Algoritmo di ricerca, non ordinato e disgiunto in C

di il
5 risposte

Algoritmo di ricerca, non ordinato e disgiunto in C

Giorno a tutti! Dovrei fare un programma di ricerca che sia ordinato e disgiunto ma mi sono persa totalmente e non riesco a sistemarlo! L'inserimento lo deve fare direttamente in automatico quindi senza riceverlo in ingresso dall'utente, in ingresso devo inserire "x" che è l'elemento da cercare... e deve stampare se l'elemento è stato trovato e in quale posizione e se l'elemento non è stato trovato... Ho provato a crearlo ma funziona solo se l'elemento viene trovato se non viene trovato non stampa niente! Aiutooo!

Questo è il programma che ho creato ---->

//Non ordinato e ripetuto
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 100

void genera (int*, int);
int ricerca (int*, int *, int, int);
void stampa (int*, int, int);

int main()
{
    int v[MAX], a[MAX], n, x, j;
    do{
        printf("Inserisci la lunghezza del vettore: ");
        scanf("%d", &n);
    }while ((n<0) || (n>MAX));

    genera(v, n);

    do{
        printf("Inserisci il numero da cercare: ");
        scanf("%d", &x);
    }while ((x<0) || (x>MAX));

    j=ricerca(v,a,x,n);
    stampa(a,x,j);
    return 0;
}

void genera (int v[MAX], int n){
    int i=0;
    time_t t;
    srand((unsigned)time(&t));
    do{
        v[i]=(rand ()% 100)+1;
        printf("Elemento %d: %d \n",i, v[i]);
        i++;
    }while (i<n);

}

int ricerca (int v[MAX], int a[MAX], int x, int n){
    int i=0, j=0;
    while (i<n){
        if (v[i]==x){
            a[j]=i;
        j++;}
    i++;
    }
    return j;
}

void stampa (int a[MAX], int x, int j){
    int i=0;
    while (i<j){
        printf("Elemento %d trovato in posizione %d", x, a[i]);
        i++;
    }
}

5 Risposte

  • Re: Algoritmo di ricerca, non ordinato e disgiunto in C

    Se posso permettermi ho dei dubbi che questo programma l' abbia scritto tu. Se sei stata in grado di scrivere questo codice, il motivo per cui non stampa ti dovrebbe essere evidente.


    ...
    Vabbè! Ti do un aiutino, non stampa perchè non c' e niente da stampare il vettore è vuoto quindi ...
  • Re: Algoritmo di ricerca, non ordinato e disgiunto in C

    Si l'ho scritto io... e il problema che non sono riuscita a sistemare il programma in modo ad esempio da mettere "if" con un variabile tipo "Trovato" e se è uguale a 1 stampa altrimenti dice che non può stampare. Però non dove metterla di preciso...
  • Re: Algoritmo di ricerca, non ordinato e disgiunto in C

    Tanto non ci credo.

    Potresti mettere un test sul numero di elementi trovati dentro la funzione 'Stampa', senza bisogno di altre variabili. Oppure se vuoi, puoi settare una variabile 'trovato' dentro la funzione 'Ricerca'.
  • Re: Algoritmo di ricerca, non ordinato e disgiunto in C

    Noto alcune ambiguità tra definizione ed implementazione delle funzioni, inoltre in 'ricerca()' il conteggio mi sembra sbagliato, infatti devi uscire appena trovi l'elemento, cosa che 'ricerca()' non fa. E poi a cosa serve un ulteriore array 'a[]' ? prova a definire la funzione in questo modo:
    
    int ricerca(int *v,int n,int x);  //restituisce -1 se non esiste l'elemento 'x', l'indice in 'v' altrimenti
    
    una possibile implementazione potrebbe essere:
    
    int ricerca(int *v,int n,int x){
        for(int i = n-1 ; i >= 0 ; --i){
            if(v[i] == x) return i;
        }
        return -1;
    }
    
  • Re: Algoritmo di ricerca, non ordinato e disgiunto in C

    Ciao Vins3Xtreme

    Quello che dici è giusto, ma in realtà l' algoritmo (che non è stato scritto da eleonora94 ) non fà quello che dice lei, ma cerca tutte le occorrenze del numero dato, ne salva le posizioni in un array e restituisce in 'j' la dimesione dell' array.

    Chi ha scritto l' algoritmo non avrebbe problemi a mettere un bel 'if (j==0) nel posto giusto.
Devi accedere o registrarti per scrivere nel forum
5 risposte