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

    Function ricerca binaria ricorsiva, piccolo problemino

    Premetto sono alle prime armi..
    Salve, ho bisogno di un piccolissimo aiuto. Di questo programma in c mi è stato chiesto di eseguire una function che permetta la ricerca di un numero di telefono tra un elenco di numeri e informazioni di persone da me inserite in input. In caso affermativo, il programma dovrebbe stamparmi le informazioni (nome, cognome, indirizzo) del soggetto.
    Il problema è che quando vado ad eseguire la function per la ricerca di un numero tel. mi da sempre esito negativo.
    Sapreste trovarmi l'errore?


    #include <stdio.h>
    #include<string.h>
    #include<conio.h>
    #define SIZE 100
    #define SIZEV 3


    /*STRUCT PERSONA*/
    typedef struct
    {
    char nome[SIZE];
    char cognome[SIZE];
    char indirizzo[SIZE];
    char telefono[SIZE];
    } Persona;


    void caricaPersona ( Persona *p);
    void caricaVettore(Persona *p,int n);
    void ordinaVettore(Persona *p,int n);
    void stampaPersona (Persona p);
    void stampaVettore(Persona *p,int n);




    void caricaPersona(Persona *p)
    {
    printf ("********************\n");
    char invio;
    printf("Nome:");
    gets(p->nome);
    printf("Cognome:");
    gets(p->cognome);
    printf("Indirizzo:");
    gets(p->indirizzo);
    printf("Telefono: 081\\");
    gets(p->telefono);
    }

    /*Questa procedura carica il vettore*/
    void caricaVettore(Persona *p,int n)
    {
    int i;
    for(i=0;i<n;i++)
    {
    caricaPersona(&p[i]);
    }
    }


    /*Questa procedura ordina il vettore*/
    void ordinaVettore(Persona *p,int n)
    {
    int i,j;
    char buffer[SIZE];
    for(i=0; i<n-1; i++)
    {
    for(j=i+1; j<n; j++)
    {

    /*La strcmp prende come parametri due char* e restituisce 0 se le due stringhe sono uguali,
    >0 se la prima è maggiore della seconda,
    <0 se la prima è minore della seconda
    (lavorando con le stringhe parlando di maggiore e minore si intende
    il normale ordine lessicografico).*/

    if (strcmp(p[i].cognome,p[j].cognome)>= 1)
    {
    strcpy(buffer,p[i].cognome);
    strcpy(p[i].cognome,p[j].cognome);
    strcpy(p[j].cognome,buffer);
    strcpy(buffer,p[j].nome);
    strcpy(p[j].nome,p[i].nome);
    strcpy(p[i].nome,buffer);
    strcpy(buffer,p[j].indirizzo);
    strcpy(p[j].indirizzo,p[i].indirizzo);
    strcpy(p[i].indirizzo,buffer);
    strcpy(buffer,p[j].telefono);
    strcpy(p[j].telefono,p[i].telefono);
    strcpy(p[i].telefono,buffer);

    }
    }
    }
    }


    /*Questa procedura stampa il vettore in output*/
    void stampaPersona(Persona p)
    {
    printf("\nCognome:%s \nNome:%s \nIndirizzo: %s\nTelefono':%s\n",p.cognome,p.nome,p.indirizzo,p .telefono);
    }
    void stampaVettore(Persona *p,int n)
    {
    int i;
    for (i=0;i<n;i++)
    stampaPersona(p[i]);
    }

    /*Procedura ricerca binaria ricorsiva*/
    int ricerca_bin(Persona gente[],int first,int last,char tel[]){
    int med;
    if(first > last) /* caso in cui il vettore è terminato, ritorno il valore -1 ad indicare che l'elemento non esiste */
    return -1;
    else
    {
    med = (first + last)/2;
    if(tel==gente[med].telefono)
    return med;
    else
    if (strcmp(tel,gente[med].telefono)>0) /* nel caso in cui tel sia più grande di gente[med] */
    return ricerca_bin(gente,med+1,last,tel);
    else
    return ricerca_bin(gente,first,med-1,tel);
    }
    }



    //*CORPO DEL PROGRAMMA*//
    int main(void)
    {
    char ch;
    int i,j,eta;
    Persona p[SIZEV],buffer[SIZEV];
    printf ("\n****INSERISCI CONTATTI NELLE RUBRICA*****\n");
    caricaVettore(p,SIZEV);
    printf ("\n************RUBRICA ORDINATA*************\n");
    ordinaVettore(p,SIZEV);
    stampaVettore(p,SIZEV);

    /* ricerca binaria ricorsiva */
    int idx;
    char tel[50];
    printf ("\n \n");
    printf("Inserire il num da cercare:");
    scanf("%c",tel);
    idx = ricerca_bin(p,0,SIZEV,tel);
    if(idx == -1)
    printf("Siamo spiacente, ma il numero selezionato non e' stato trovato \n");
    else{
    printf ("numero selezionato trovato: \b");
    printf("\nNome:%s \n Cognome:%s \n Indirizzo: %s\n Telefono':%d\n",p[idx].nome,p[idx].cognome,p[idx].indirizzo,p[idx].telefono);
    }

    system("PAUSE");
    return 0;

    }

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

    Moderazione

    Per il futuro: posta il codice indentato (questo è privo di indentazione) all'interno degli appositi tag CODE (e non QUOTE, che servono ad altro).


    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

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.