Array/bubble sort/ricerca binaria

di il
34 risposte

Array/bubble sort/ricerca binaria

Preso l’elenco dei partecipanti ad una gara inserire i nomi e i tempi di arrivo in secondi,
ordinare poi l’elenco dei nomi in base all’ordine di arrivo e visualizzare il podio.
Come algoritmo di ordinamento utilizzare il bubble sort.
Cercare i nomi di chi ha impiegato una certa quantità di tempo usando la ricerca binaria.

#include <stdio.h>
#include <stdlib.h>
int main(){
	char nomi[10];
	int  n_part, i, tempo;
	printf("Inserisci il numero di partecipanti:\n");
	scanf("%d", &n_part);
	for(i=0; i<n_part; i++){
		printf("Inserisci il nome del %d partecipante:\n", i+1);
		scanf("%s", &nomi);
		printf("Inserisci il tempo di %s:\n", nomi);
		scanf("%d", &tempo);
	}
}
Sono arrivato fino a qui e non riesco ad andare avanti, mi blocco con array/ordinamento/ricerca qualcuno può aiutarmi perpiacere, grazie

34 Risposte

  • Re: Array/bubble sort/ricerca binaria

    Usa i tag code per inserire il codice nel forum.

    Comunque adesso non sai neanche iniziare l'ordinamento? Devi almeno provarci
  • Re: Array/bubble sort/ricerca binaria

    oregon ha scritto:


    Usa i tag code per inserire il codice nel forum.

    Comunque adesso non sai neanche iniziare l'ordinamento? Devi almeno provarci
    no, ci ho provato, ma sapendo che era sbagliato l'ho tolto perchè era pieno di errori
  • Re: Array/bubble sort/ricerca binaria

    E quindi? Vuoi che lo scriviamo noi al posto tuo?

    Facci vedere cosa hai iniziato a scrivere, Imposta i due for uno nell'altro, imposta la if per il controllo e le istruzioni per scambiare gli elementi del vettore. Provaci anche sbagliando.

    In rete esistono mille esempi di bubble sort, fai una piccola ricerca e prendi spunti
  • Re: Array/bubble sort/ricerca binaria

    oregon ha scritto:


    E quindi? Vuoi che lo scriviamo noi al posto tuo?

    Facci vedere cosa hai iniziato a scrivere, Imposta i due for uno nell'altro, imposta la if per il controllo e le istruzioni per scambiare gli elementi del vettore. Provaci anche sbagliando.

    In rete esistono mille esempi di bubble sort, fai una piccola ricerca e prendi spunti
    Ho provato a farlo cosi, ci sono dei problemi ( se metto più di 4 partecipanti non li ordina, la ricerca non funziona, e se metto più di 4 partecipanti quando devo inserire i dati del quinto si ferma il programma. non riesco a capire perchè.
    
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct posizione{
    	char nome[10];
    	int tempo;
    };
    int main(){
    	int n_part;
    	struct posizione part[n_part];
    	int i, n, j, trovato, temp=0;
    	char cerca[20];
    	printf("Inserisci il numero di partecipanti:\n");
    	scanf("%d", &n_part);
    	for(i=0; i<n_part; i++){
    		printf("Inserisci il nome del %d partecipante:\n", i+1);
    		scanf("%s", &part[i].nome);
    		printf("Inserisci il tempo di %s:\n", part[i].nome);
    		scanf("%d", &part[i].tempo);
    	}
    	for(i=0; i<n_part-1; i++){
            for(j=i+1; j<n_part; j++){
                if(part[i].tempo>part[j].tempo){
                    temp=part[i].tempo;
                    part[i].tempo=part[j].tempo;
                    part[j].tempo=temp;
                }
            }
        }
        printf(" \n");
    	for(i=0; i<n_part; i++){
        	printf("%s e' arrivato %d con un tempo di %d\n", part[i].nome, i+1, part[i].tempo);
    	}
    	printf("\nInserisci il nome del partecipante da cercare:\n");
    	scanf("%s", &cerca);
    	trovato=0;
    	for(j=0;j<n;j++){
    		if(strcmp(part[i].nome, cerca)==0) {
    			printf("\nAlunno trovato in posizione %d.\n Nome: %s\nTempo: %d\n",j+1,part[i].nome, part[i].tempo);
    			trovato=1;
    		}	
    	}
    	if (!trovato) 
    		printf("\nPartecipante non trovato.\n");
    	return 0;
    }
    
  • Re: Array/bubble sort/ricerca binaria

    Non è il bubble che è sbagliato.
    
    int n_part;
    struct posizione part[n_part];
    
    Qui n_part quanto vale?
    
    temp=part[i].tempo;
    part[i].tempo=part[j].tempo;
    part[j].tempo=temp;
    
    Questo funziona, però così scambi solo i tempi.
  • Re: Array/bubble sort/ricerca binaria

    Alexv ha scritto:


    Non è il bubble che è sbagliato.
    
    int n_part;
    struct posizione part[n_part];
    
    Qui n_part quanto vale?
    
    temp=part[i].tempo;
    part[i].tempo=part[j].tempo;
    part[j].tempo=temp;
    
    Questo funziona, però così scambi solo i tempi.
    
    int n_part;
    struct posizione part[n_part];
    
    n_part qui vale il numero che inserisce l'utente
    
    temp=part[i].tempo;
    part[i].tempo=part[j].tempo;
    part[j].tempo=temp;
    
    e ma se n_part vale più di 4 non va non so il perchè
  • Re: Array/bubble sort/ricerca binaria

    Ma lì utente non ha ancora inserito n_part, ma il vettore è già creato, e rimarrà tale anche se dopo cambi n_part.
  • Re: Array/bubble sort/ricerca binaria

    Alexv ha scritto:


    Ma lì utente non ha ancora inserito n_part, ma il vettore è già creato, e rimarrà tale anche se dopo cambi n_part.
    e come devo fare?, credevo che cosi n_part era l'insieme dei partecipanti e poi il vettore assumeva la sua dimensione, no?
  • Re: Array/bubble sort/ricerca binaria

    AK1312 ha scritto:


    e come devo fare?
    Dichiari l'array di una dimensione conosciuta, per esempio 100, poi lavori solo sui primi n_part elementi, accertandoti che l'utente non dia numeri oltre 100. Puoi usare una costante per definire la lunghezza massima.

    Oppure usi l'allocazione dinamica per creare un vettore di lunghezza personalizzata a seconda della scelta dell'utente.
  • Re: Array/bubble sort/ricerca binaria

    Alexv ha scritto:


    AK1312 ha scritto:


    e come devo fare?
    Dichiari l'array di una dimensione conosciuta, per esempio 100, poi lavori solo sui primi n_part elementi, accertandoti che l'utente non dia numeri oltre 100. Puoi usare una costante per definire la lunghezza massima.

    Oppure usi l'allocazione dinamica per creare un vettore di lunghezza personalizzata a seconda della scelta dell'utente.
    provo a usare l'allocazione dinamica, ma non so cosa sia non l'ho ancora fatta
  • Re: Array/bubble sort/ricerca binaria

    Ho sistemato il bubble sort, ora riordina tutto sempre, ora l'unico problema che mi rimane è la ricerca binaria che mi dice sempre partecipante non trovato, conosci una suluzione? grazie
    printf("\nInserisci il nome del partecipante da cercare:\n");
    	scanf("%s", &cerca);
    	trovato=0;
    	for(j=0;j<n;j++){
    		if(strcmp(part[i].nome, cerca)==0) {
    			printf("\nAlunno trovato in posizione %d.\n Nome: %s\nTempo: %d\n",j+1,part[i].nome, part[i].tempo);
    			trovato=1;
    		}	
    	}
    	if (!trovato) 
    		printf("\nPartecipante non trovato.\n");
  • Re: Array/bubble sort/ricerca binaria

    Alexv ha scritto:


    
    temp=part[i].tempo;
    part[i].tempo=part[j].tempo;
    part[j].tempo=temp;
    
    Questo funziona, però così scambi solo i tempi.
    cavolo hai ragione l'ho appena notato, come faccio a scambiare anche i nomi e mostrarli tipo classifica coi tempi
  • Re: Array/bubble sort/ricerca binaria

    Nella ricerca hai usato le variabili sbagliate (i e n).
    Sull'altra domanda
    
    temp=part[i];
    part[i]=part[j];
    part[j]=temp;
    
    Così scambi tutto. Temp deve essere di tipo struct partecipante.
  • Re: Array/bubble sort/ricerca binaria

    Alexv ha scritto:


    Nella ricerca hai usato le variabili sbagliate (i e n).
    Sull'altra domanda
    
    temp=part[i];
    part[i]=part[j];
    part[j]=temp;
    
    Così scambi tutto. Temp deve essere di tipo struct partecipante.
    1.(modifico) ho sistemato la ricerca, ora funziona , devo solo capire ora come ordinare i nomi
    2.come lo metto di tipo struct partecipante (sto studiando per il debito è per questo che faccio fatica)
Devi accedere o registrarti per scrivere nel forum
34 risposte