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

    [C]Ricerca di elemento in array

    Salve, sto sbattendo la testa su questo codice da ieri sera...in poche parole, quello che dovrebbe fare e' questo:

    leggere elementi di un vettore dati in input dall'utente.
    leggere un numero k dato dall'utente
    dire quale dei numeri presente dentro al vettore e' piu prossimo a k.

    codice:
    #include<stdio.h>
    
    #include<stdlib.h>
    
    #define MAX 10
    
    #define SUP_MAX 1000
    
    int i,vet[MAX],k,q,r=0,val_minori[MAX],val_massimi[MAX]; //MAX dev'essere uguale sia per vet che per vet_ris !!!
    
    int val_minimo_max=0,val_massimo_min=SUP_MAX,cont1=0,cont2=0,lol1=0,lol2=0;
    
    main()
    
    
    
    {
    
    
    
    printf("Riempire il vettore. Max 10 elementi. -1 Per stoppare il riempimento.\n");
    
    for(i=0;i<MAX;i++) {
    
    	scanf("\n%d", &q);
    
    	getchar();
    
    	if(q>=SUP_MAX) {
    
    		printf("\nValore TROPPO GRANDE ! ritenta...\n"); 
    
    		continue; 
    
    	}
    
    	if(q!=-1) {
    
    		vet[i]=q;
    
    		++r; 
    
            }
    
    	else break;
    
        }
    
    
    
    printf("\nInserire un numero.Vi diro' quale numero nel vet e' piu vicino ad esso\n");
    
    scanf("%d", &k);
    
    getchar();
    
    
    
    /*Cerco nel vettore se c'e' il numero uguale a quello da ricercare (cioe' k),nel caso,stampo a video ed esco dal progr.*/
    
    for(i=0;i<r;i++) {
    
    	if(k==vet[i]) {  
    
    	printf("%d = %d ...e' quindi il numero piu' vicino\n", k, vet[i]);
    
    	exit(0);
    
    	   }
    
          }
    
    
    
    for(i=0;i<r;i++) {
    
    	if(k>vet[i]) { 
    
    	val_minori[i]=vet[i]; 
    
    	++lol1; }                //salva in un'array i valori minori di k
    
            if(k<vet[i]) {
    
    	val_massimi[i]=vet[i];   //salva in un'array i valori maggiori di k
    
    	++lol2;
    
    	}
    
       }	                         
    
    for(i=0;i<lol1;i++) { 	
    
    	if(val_minori[i]>=val_minori[i+1]) 
    
    	val_minimo_max=val_minori[i]; //tra i valori piu bassi di k, trovo il piu alto
    
            }
    
    for(i=0;i<lol2;i++) {	
    
    	if(val_massimi[i]<=val_massimi[i+1]) 
    
    	val_massimo_min=val_massimi[i]; //tra i valori piu alti di k,trovo il piu basso
    
    	}
    
    
    
    for( ;val_minimo_max==k;val_minimo_max++) //conto quanto sono distante da k 
    
    	++cont1; //aggiorno cont (la mia variabile contatore di ciclo)
    
    for( ;val_massimo_min==k;val_massimo_min--) //faccio lo stesso, conto quanto son dist da k 
    
    	++cont2;	//aggiorno un'altra variabile contatore di ciclo
    
    
    
    //controllo quale dei due cicli qua sopra, ha ciclato di piu incrementando la var contatore...quello che ha ciclato meno
    
    //conteneva il num piu vicino a sto benedetto numero k del ****.
    
    if(cont1==cont2) printf("\nI numeri piu vicini a %d sono %d e %d\n\n",k,val_minimo_max-cont1,val_massimo_min+cont2); 
    
    if(cont1>cont2) printf("\nIl numero piu vicino a %d e' %d\n\n",k,val_massimo_min+cont2);
    
    else printf("\nIl numero piu vicino a %d e' %d\n\n",k,val_minimo_max-cont1);
    
    //nono...non funziona un **** ..
    
    
    
    }
    Cioe' non riesco proprio a trovare sto benedetto numero all'interno del vettore che sia piu prossimo a k...

    Okay certamente esistera' un algoritmo migliore e sopratutto funzionante, pero' vorrei davvero capire perche' la schifezza che ho scritto non funziona... poi se qualcuno ha un 'idea per implementare il tutto in a "better way", son tutto orecchie !

    grazie !

    p.s. mi scuso per il pessimo codice e le pessime variabili...in effetti sembro uno schizzofrenico con crisi epilettiche :-)
    "This is our world now...the world of the electron and the switch, the beauty of the baud..."

    Mentor

  2. #2
    Utente di HTML.it
    Registrato dal
    Jun 2006
    Messaggi
    569
    Qualcosa del genere:

    codice:
    #include<stdio.h>
    #include<stdlib.h>
    
    #define MAX 10
    
    int main ( void )
    { 
        int i,indice;
        int differenza=0;
        int diff_minima=0;
        int vet[MAX]={46,1,21,13,24,15,7,38,9,4};
        int k=5;
    
        
        diff_minima = abs( vet[0]-k );       // inizializzazione
        indice=0;                                 //     variabili 
        
        for ( i=0 ; i<MAX ; i++ )
        {   
            differenza = abs( vet[i]-k );
            
            if ( differenza < diff_minima )
            {   
                diff_minima=differenza;
                indice=i;
                }
           
           }
               
         printf ("\nL'elemento piu' vicino e': %d\n\n", vet[indice] );
         system("pause");
    
      return 0;
    }

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.