Visualizzazione dei risultati da 1 a 8 su 8
  1. #1
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255

    algoritmo in C sulla ricerca

    Ciao chi mi aiuta ((((
    In C devo fare una lista ordinata e trovare la posizione del numero della lista che sto cercando.

    #include<stdio.h>
    void main()
    {
    int lista[]={1,2,3,4,5,6,7,8,9};
    int media;
    int posizione=-1;
    int numero=3;
    int ultimo=0;
    int primo=0;

    media=(primo+ultimo)/2;
    if(lista[media]==numero){
    posizione=media;
    if (lista[media]>numero)
    ultimo=media;
    else
    primo=media;
    }
    printf("%d",posizione);

    }
    In questo algoritmo il numero da cercare è il 3 e alla fine devo visualizzare la posizione nella lista del numero 3.
    grazie

  2. #2
    Cosi' controlli un numero soltanto.
    Devi iterare (while, for) o rientrare (richiamare la stessa funzione, tramite la ricorsione).
    Su, dai, riprova...
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Mar 2002
    Messaggi
    255
    Ho innestato il ciclo while,nelle compilazione nn mi da errori,xò nn funziona lo stesso.cos'è il metodo ricorsivo?

    #include<stdio.h>
    void main()
    {
    int n=0;
    int lista[]={1,2,3,4,5,6,7,8,9};
    int media;
    int posizione=-1;
    int numero=3;
    int ultimo=0;
    int primo=0;
    while (primo!=ultimo)
    media=(primo+ultimo)/2;
    if(lista[media]==numero){
    posizione=media;
    if (lista[media]>numero)
    ultimo=media;
    else
    primo=media;
    }
    printf("%d",posizione);

    }

  4. #4
    cos'è il metodo ricorsivo?
    Qualcosa da non usare a meno che non ti ci costringono le circostanze.
    Spesso le circostanze prendono l'aspetto di insegnanti di Informatica... :rollo:

    Ora guardo il tuo programma.
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  5. #5
    codice:
     int ultimo=0;
    VVoVe:
    Folle e' l'uomo che parla alla luna.
    Stolto chi non le presta ascolto.

  6. #6
    Utente di HTML.it L'avatar di infinitejustice
    Registrato dal
    Nov 2001
    residenza
    Barcelona
    Messaggi
    772
    int cerca( int *lista, int numero, int primo, int ultimo){

    int i = 1;

    for(; i <= ultimo; i++)
    if(numero == lista[i])
    return i;

    return -1;
    }


    (ricerca binaria)

    int cerca2( int *lista, int numero, int primo, int ultimo){

    int medio = 0;

    while(ultimo >= 1){

    medio = (primo + ultimo) / 2;

    if(numero == lista[medio])
    return medio;

    if(numero < lista[medio])
    ultimo = (medio - 1);
    else
    primo = (medio + 1);
    }
    return -1;
    }


    il main()

    void main(){

    int nr = 3, pos = -1;
    int lista[]={1, 2, 3, 4, 5, 6, 7, 8, 9};

    pos = cerca(lista, 3, 1, 9);
    //oppure pos = cerca2(lista, 3, 1, 9);

    if(pos == -1)
    printf("Il numero %d non e\' nella lista.\n", nr);
    else
    printf("Il numero %d si trova in posizione %d.\n", nr, pos);
    }


    in entrambi i casi l'output è Il numero 3 si trova in posizione 2. (parte da 0)

    Live fast. Troll hard.
    Pythonist | Djangonaut | Puppeteer | DevOps | OpenStacker | Lost in malloc
    Team Lead @Gameloft Barcelona

  7. #7
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354
    contemporaneamente a infinitejustice lo stavo facendo anche io.

    se può esserti utile io ho risolto il problema cosi:
    codice:
    #include<stdio.h> 
    main() 
    { 
      //int n=0; 
      int lista[]={1,2,3,4,5,6,7,8,9};
      int i,j,tmp;
      for(i = 0; i < 9; i++)
        for(j=i+1; j < 8; j++)
          if(lista[i]>lista[j])
          {
            tmp=lista[i];
            lista[i]=lista[j];
            lista[j]=tmp;
          }
      for(i=0; i < 9; i++)
        printf("%d ", lista[i]);
      int numero=3,pos; 
      printf("\nLa posizione di %d e': ",numero);
      for(i=0; i < 9; i++)
        if(lista[i]==numero)
          pos=i+1;
      printf("%d",pos);  
    
        
      /*int media; 
      int posizione=-1; 
      int numero=3; 
      int ultimo=0; 
      int primo=0; 
      while (primo!=ultimo) 
        media=(primo+ultimo)/2; 
        if(lista[media]==numero){ 
          posizione=media; 
          if (lista[media]>numero) 
            ultimo=media; 
          else 
          primo=media; 
        } 
      printf("%d",posizione);*/ 
    }
    ma credo che quello di infinitejustice è fatto meglio!

  8. #8
    Utente di HTML.it L'avatar di unit1
    Registrato dal
    Feb 2004
    Messaggi
    354

    Re: algoritmo in C sulla ricerca

    Originariamente inviato da s_p_81
    Ciao chi mi aiuta ((((
    In C devo fare una lista ordinata e trovare la posizione del numero della lista che sto cercando.

    non ho capito male, vero?

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