Array/bubble sort/ricerca binaria

di Anonimizzato32318 il
34 risposte

34 Risposte - Pagina 2

  • Deve essere come part

    struct posizione temp;
  • oregon ha scritto:


    Deve essere come part

    struct posizione temp;
    
    	struct posizione part[n_part];
    	struct posizione temp;
    
    cosi'? se è giusto poi mi da errore nel bubble, come devo modificarlo, o devo farne un altro solo per i nomi ma in questo caso in base a cosa lo riordino
  • Ti stai perdendo in un bicchier d'acqua

    1) ha un VETTORE
    2) ogni elemento del vettore e' formato da una ""scatoletta"" (una struct) contenente DUE informazioni: nome e tempi
    3) ogni elemento del vettore/scatoletta ha una POSIZIONE (un indice, che nel nostro caso inizia da ZERO 0)
    4) ora devi ordinare il VETTORE in base ai tempi, cioe in base ad UNA delle due informazioni contenute nella scatoletta
    5) saltando i passaggi intermedi, diciamo che stai confrontando il tempo della scatoletta "i" con quello della scatoletta "j" e scopri che devi SCAMBIARLI

    OVVIAMENTE

    NON SCAMBI solo i tempi, DEVI SCAMBIARE l"ITERO CONTENUTO DELLE SCATOLETTE !!!!!!!!

    Cioe' SIA i tempi CHE i nomi.

    Ci sono n-mila modi per farlo. Fallo nel modo PIU' SEMPLICE:

    A) SCAMBI i TEMPI
    B) SCAMBI i NOMI

    6) dopo di che continui con il bubblesort.

    Fine
  • Mostraci tutto il codice con le correzioni. Di quali errori parli?
  • oregon ha scritto:


    Mostraci tutto il codice con le correzioni. Di quali errori parli?
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    struct posizione{
    	char nome[10];
    	int tempo;
    };
    
    int main(){
    	int n_part;
    	printf("Inserisci il numero di partecipanti:\n");
    	scanf("%d", &n_part);
    	struct posizione part[n_part];
    	int i, j, trovato, temp;
    	char cerca[20];
    	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("\t\tCLASSIFICA\t\t\n\n");
    	for(i=0; i<3; i++){
    	printf("\t%d Classificato\n\t%s\t%d'\n", i+1, part[i].nome, part[i].tempo);
    	}
    	printf("\nInserisci il nome del partecipante da cercare:\n");
    	scanf("%s", &cerca);
    	trovato=0;
    	for(j=0;j<n_part;j++){
    		if(strcmp(part[j].nome, cerca)==0) {
    			printf("\n Partecipante trovato in posizione %d.\n Nome: %s\n Tempo: %d\n",j+1,part[j].nome, part[j].tempo);
    			trovato=1;
    		}	
    	}
    	if (!trovato) 
    		printf("\nPartecipante non trovato.\n");
    	return 0;
    }
    Sono arrivato fino a qui, funziona tutto, tranne l'ordinamento dei nomi che non riesco a capire
  • migliorabile ha scritto:


    Ti stai perdendo in un bichier d'acqua. Vabbe diciamo di birra, rossa, della Chimay

    1) ha un VETTORE
    2) ogni elemento del vettore e' formato da una ""scatoletta"" (una struct) contenente DUE informazioni: nome e tempi
    3) ogni elemento del vettore/scatoletta ha una POSIZIONE (un indice, che nel nostro caso inizia da ZERO 0)
    4) ora devi ordinare il VETTORE in base ai tempi, cioe in base ad UNA delle due informazioni contenute nella scatoletta
    5) saltando i passaggi intermedi, diciamo che stai confrontando il tempo della scatoletta "i" con quello della scatoletta "j" e scopri che devi SCAMBIARLI. Qui sta' la birra

    OVVIAMENTE

    NON SCAMBI solo i tempi, DEVI SCAMBIARE l"ITERO CONTENUTO DELLE SCATOLETTE !!!!!!!!

    Cioe SIA i tempi CHE i nomi.

    Ci sono n-mila modi per farlo. Fallo nel modo PIU' SEMPLICE:

    A) SCAMBI i TEMPI
    B) SCAMBI i NOMI

    6) dopo di che continui con il bubblesort.

    Fine della birra rossa.
    Bisogna passare ad una Scura, doppio malto
    E magari anche un bel piatto di patatine fritte
    Ho capito il ragionamento ma non riesco ad applicarlo
  • Adesso lavori sulla struttura quindi [Code] temp=part[i]; part[i]=part[j]; part[j]=temp;
  • oregon ha scritto:


    Adesso lavori sulla struttura quindi [Code] temp=part[i]; part[i]=part[j]; part[j]=temp;
    con la struttura sono riuscito ad arrivare fino a qui credo sia giusto [Code] temp=part[i]; part[i]=part[j]; part[j]=temp; Ma devo togliere il .tempo?
  • Certo che è giusto, te lo sto suggerendo...
  • oregon ha scritto:


    Certo che è giusto, te lo sto suggerendo...
    perfetto, mi manca solo il riordinamento dei nomi, non riesco a capire come
  • Che vuoi dire? Non hai capito..
    Così riordini tempi e nomi contemporaneamente
  • oregon ha scritto:


    Che vuoi dire? Non hai capito..
    Così riordini tempi e nomi contemporaneamente
    l'ho fatto ma mi dava errore adesso ti mando screen dell'errore
  • oregon ha scritto:


    Che vuoi dire? Non hai capito..
    Così riordini tempi e nomi contemporaneamente
    stesso errore in riga 29 30 31 32
    Allegati:
    32318_60abe991b942ca37589bfea0a627cc5e.png
    32318_60abe991b942ca37589bfea0a627cc5e.png
  • Non ti ho detto di cambiare la if
  • oregon ha scritto:


    Non ti ho detto di cambiare la if
    ma anche c'ho che c'è dentro l'if lo lascio come prima o è quello che devo cambiare?
Devi accedere o registrarti per scrivere nel forum
34 risposte