Visualizzazione dei risultati da 1 a 3 su 3
  1. #1
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775

    [C] - Ricerca Dicotomica



    disperazione!
    domani ho la verifica sui puntatori e le funzioni ricorsive, ho questo programma da consegnare (su cui studiare) ma non funziona.. anzi, mi da errore alla riga 39 (riguardante la funzione ricerca)..

    qualcuno riesce ad aiutarmi?
    ho provato a mettere l'asterisco anche a a dati (essendo il vettore), ma da ancora più errori..

    codice:
    #include <stdio.h>
    
    int insVett(int *dati,int lung){
    	int i,num;
    	for(i=0;i<lung;i++){
    		printf("Inserisci il numero %d di %d: ",i+1,lung);
    		scanf("%d",& num);
    		*dati++=num;
    	}
    }
    
    //ordina i valori in modo Crescente
    int ordinaVett(int *dati,int lung){
    	int scambio=1,i,app;
    	while(scambio){
    		scambio=0;
    		for(i=0;i<lung-1;i++){
    			if(*(dati+i)>*(dati+i+1)){
    				app=*(dati+i);
    				*(dati+i)=*(dati+i+1);
    				*(dati+i+1)=app;
    				scambio=1;
    			}
    		}
    	}
    }
    
    //visualizza vettore
    int visVett(int *dati,int lung){
    	int i;
    	for(i=0;i<lung;i++){
    		printf("[ %d ]",*dati);
    		*dati++;
    	}
    	printf("\n");
    }
    
    //effettua la ricerca
    int ricerca(dati,dato,*indiceSup,*indiceInf){
    	if(*indicieInf>*indiceSup){
    		return 1;
    	}else{
    		*indiceMedio=*indiceSup-(*indiceInf)/2;
    		if(*(dati+indiceMedio)>dato){
    			ricerca(dati,dato,*indiceInf-1,*indiceSup);
    		}else{
    			if(*(dati+indiceMedio)<dato){
    				ricerca(dati,dato,*indiceInf+1,*indiceSup);
    			}else{
    				return 1;
    			}
    		}
    	}
    }
    
    int main(){
    	int lung1=0,val,test=-1,scelta;
    	
    	printf("Inserisci il numero di valori da inserire: ");
    	scanf("%d",&lung1);
    	int vett1[lung1];
    	
    	printf("Inserisci il numero da cercare: ");
    	scanf("%d",&val);
    	
    	insVett(vett1,lung1);
    	ordinaVett(vett1,lung1);
    	visVett(vett1,lung1);
    	
    	ricerca(vett1,val);
    
    	getchar();
    }
    Grazie mille a tutti..

  2. #2
    Utente bannato
    Registrato dal
    Oct 2010
    Messaggi
    1,219
    Coraggio
    Ti ho scritto dei suggerimenti nei commenti del codice:
    codice:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    #include <time.h>
    
    
    #include <stdio.h>
    
    int insVett(int *dati,int lung){
    	int i,num;
    	for(i=0;i<lung;i++){
    		printf("Inserisci il numero %d di %d: ",i+1,lung);
    		scanf("%d",& num);
    		*dati++=num;
    	}
    }
    
    //ordina i valori in modo Crescente
    int ordinaVett(int *dati,int lung){
    	int scambio=1,i,app;
    	while(scambio){
    		scambio=0;
    		for(i=0;i<lung-1;i++){
    			if(*(dati+i)>*(dati+i+1)){
    				app=*(dati+i);
    				*(dati+i)=*(dati+i+1);
    				*(dati+i+1)=app;
    				scambio=1;
    			}
    		}
    	}
    }
    
    //visualizza vettore
    int visVett(int *dati,int lung){
    	int i;
    	for(i=0;i<lung;i++){
    		printf("[ %d ]",*dati++);
    	}
    	printf("\n");
    	// GLI DEVI FAR RITORNARE UN VALORE
    }
    
    //effettua la ricerca
    int ricerca(dati,dato,*indiceSup,*indiceInf)  // DEVI SPECIFICARE IL TIPO DI DATI esempio: int dati, ecc...
    {
    	if(*indicieInf>*indiceSup){
    		return 1;
    	}else{
    		*indiceMedio=*indiceSup-(*indiceInf)/2;
    		if(*(dati+indiceMedio)>dato){
    			ricerca(dati,dato,*indiceInf-1,*indiceSup);
    		}else{
    			if(*(dati+indiceMedio)<dato){
    				ricerca(dati,dato,*indiceInf+1,*indiceSup);
    			}else{
    				return 1;
    			}
    		}
    	}
    }
    
    int main(){
    	int lung1=0,val,test=-1,scelta;
    
    	printf("Inserisci il numero di valori da inserire: ");
    	scanf("%d",&lung1);
    	int vett1[lung1];
    
    	printf("Inserisci il numero da cercare: ");
    	scanf("%d",&val);
    
    	insVett(vett1,lung1);
    	ordinaVett(vett1,lung1);
    	visVett(vett1,lung1);
    
    	ricerca(vett1,val);  // RICERCA PRENDE 4 ARGOMENTI, NON DUE
    
    	return 0;
    }
    Se la correggi però non so se poi farà quello che gli vuoi far fare.
    Puoi farmi un riassunto di qual'è lo scopo di tutte le funzioni?

  3. #3
    Utente di HTML.it L'avatar di Buzzz
    Registrato dal
    Jan 2009
    Messaggi
    775
    ora ci provo, grazie..

    comunque lo scopo è quello della ricerca dicotomica, ovvero trovare se un valore esiste o meno nel vettore.. o almeno io l'ho capita così..
    anche perchè a scuola abbiamo fatto solo la funzione "ricerca", che tra l'altro ha degli errori..
    quindi il resto l'ho fatto io, ho dovuto arrangiarmi in qualche modo ma non so se è tutto fatto nel verso giusto..

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.