Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25

Discussione: programmazione c

  1. #1

    programmazione c

    Si realizzi un programma in c che chiede all'utente una sequenza di dati relativi a rilevazioni da sensori
    e li memorizza in un'opportuna struttura dati. All'utente viene chiesta una stringa, indicante un luogo,
    e un valore reale di concentrazione di inquinanti, una luogo e un valore reale, e cosi' via, finche' il luogo non
    e' il valore "end". Man mano che vengono letti, i dati sono inseriti in un array di strutture (nome, dato),
    che va quindi ordinato per valori crescenti del dato, ad esempio con l'algoritmo bubble sort.
    Alla fine si devono stampare tutti i luoghi e i valori per cui il dato e' maggiore di 33.

  2. #2
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    E quindi?
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  3. #3
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    E quindi?
    quindi mi servirebbe la trasposizione in c di questo problema....

  4. #4
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Quote Originariamente inviata da lukafulmine Visualizza il messaggio
    quindi mi servirebbe la trasposizione in c di questo problema....
    Hai sbagliato forum o per lo meno sezione del forum, leggi il regolamento: qui non si svolgono esercizi altrui.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  5. #5
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Hai sbagliato forum o per lo meno sezione del forum, leggi il regolamento: qui non si svolgono esercizi altrui.
    difatti io l'esercizio ho cercato di svolgerlo ma arrivo a questo punto:

    #include <stdio.h>
    #include <stdlib.h>


    typedef struct
    {
    char luogo[30];
    float valore;
    }rilevazioni;


    int main()
    {
    rilevazioni*dato=NULL;
    int i=0,n=0, END=0;


    printf("quante rilevazioni vuoi inserire?");
    scanf("%d", &n);


    dato=(rilevazioni*)malloc(n*sizeof(rilevazioni));


    for(i=0;i<n;i++)
    {
    do
    {
    printf("inserisci luogo:");
    scanf("%s", dato[i].luogo);
    printf("inserisci valore:");
    scanf("%f", &dato[i].valore);
    }while(dato[i].luogo!=END);
    }
    return 0;
    }

  6. #6
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    • Usa i tag CODE
    • Il testo non dice che devi chiedere la dimensione, ma che devi fermarti quando l'utente inserisce "end"
    • I tuoi due cicli annidati non hanno un significato: ripeti n volte un inserimento che dovrebbe fermarsi quando l'indirizzo della stringa dato[i].luogo è diverso da 0
    • 2 sono i metodi: allocare un vettore sovradimensionato di strutture o riallocare il vettore quando ti serve più spazio che, nel caso più semplice, significa riallocarlo ad ogni inserimento per contenere un elemento in più (Nota che questo meccanismo è inefficiente)


    Questa è la struttura base, vedi di capire come funziona e completa con quello che manca
    codice:
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
    
    
    
    
    typedef struct
    {
    	char luogo[30];
    	float valore;
    }rilevazioni;
    
    
    
    
    int main()
    {
    	rilevazioni *dati=NULL;
    	int size = 0;
    	char luogo[30];
    	while(1)
    	{
    		printf("Inserisci luogo: ");
    		scanf("%s", luogo);
    		if(strcmp(luogo, "end")==0) break;
    		dati = (rilevazioni *)realloc(dati, sizeof(rilevazioni)*(size+1));
    		strcpy(dati[size].luogo, luogo);
    		printf("Inserisci tasso d'inquinamento: ");
    		scanf("%f", &dati[size].valore);
    		size += 1;
    	}
    	
    	int i;
    	printf("\n\n");
    	for(i = 0; i < size; i++)
    		printf("Luogo: %s\t\tTasso d'Inquinamento: %f\n", dati[i].luogo, dati[i].valore);
    	free(dati);
    	return 0;
    }
    P.s. il testo ti dice esplicitamente di usare un vettore, a me parrebbe più efficiente e più adatta alla situazione una lista con inserimento ordinato.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  7. #7
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    • Usa i tag CODE
    • Il testo non dice che devi chiedere la dimensione, ma che devi fermarti quando l'utente inserisce "end"
    • I tuoi due cicli annidati non hanno un significato: ripeti n volte un inserimento che dovrebbe fermarsi quando l'indirizzo della stringa dato[i].luogo è diverso da 0
    • 2 sono i metodi: allocare un vettore sovradimensionato di strutture o riallocare il vettore quando ti serve più spazio che, nel caso più semplice, significa riallocarlo ad ogni inserimento per contenere un elemento in più (Nota che questo meccanismo è inefficiente)


    Questa è la struttura base, vedi di capire come funziona e completa con quello che manca
    codice:
    #include <stdio.h>#include <stdlib.h>
    #include <string.h>
    
    
    
    
    typedef struct
    {
        char luogo[30];
        float valore;
    }rilevazioni;
    
    
    
    
    int main()
    {
        rilevazioni *dati=NULL;
        int size = 0;
        char luogo[30];
        while(1)
        {
            printf("Inserisci luogo: ");
            scanf("%s", luogo);
            if(strcmp(luogo, "end")==0) break;
            dati = (rilevazioni *)realloc(dati, sizeof(rilevazioni)*(size+1));
            strcpy(dati[size].luogo, luogo);
            printf("Inserisci tasso d'inquinamento: ");
            scanf("%f", &dati[size].valore);
            size += 1;
        }
        
        int i;
        printf("\n\n");
        for(i = 0; i < size; i++)
            printf("Luogo: %s\t\tTasso d'Inquinamento: %f\n", dati[i].luogo, dati[i].valore);
        free(dati);
        return 0;
    }
    P.s. il testo ti dice esplicitamente di usare un vettore, a me parrebbe più efficiente e più adatta alla situazione una lista con inserimento ordinato.

    come posso implementare la funzione bubble sort e stampare a video i valori superiori a 33??? codice pls

  8. #8

    Moderazione

    Quote Originariamente inviata da lukafulmine Visualizza il messaggio
    codice pls
    Come ti è già stato detto, qui non si fornisce la "pappa pronta" (che non serve a niente), ma si cerca di indirizzare nella direzione giusta, correggendo il lavoro svolto e eventualmente dando indicazioni utili.

    Nel caso specifico, per il bubble sort trovi milioni di descrizioni in pseudocodice su Internet, quindi il primo passo è cercare di capire la descrizione dell'algoritmo e tradurla in C; prova a fare questo, posta il codice ottenuto e se incontri problemi cercheremo di correggerli insieme.

    Per stampare a video i valori superiori a 33, basta un for che cicla su tutto l'array e un if all'interno per vedere se l'elemento corrente è superiore a 33...
    Amaro C++, il gusto pieno dell'undefined behavior.

  9. #9
    Quote Originariamente inviata da MItaly Visualizza il messaggio
    Come ti è già stato detto, qui non si fornisce la "pappa pronta" (che non serve a niente), ma si cerca di indirizzare nella direzione giusta, correggendo il lavoro svolto e eventualmente dando indicazioni utili.

    Nel caso specifico, per il bubble sort trovi milioni di descrizioni in pseudocodice su Internet, quindi il primo passo è cercare di capire la descrizione dell'algoritmo e tradurla in C; prova a fare questo, posta il codice ottenuto e se incontri problemi cercheremo di correggerli insieme.

    Per stampare a video i valori superiori a 33, basta un for che cicla su tutto l'array e un if all'interno per vedere se l'elemento corrente è superiore a 33...
    questo è quello che ho provato :
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct
    {
        char luogo[30];
        float valore;
    }rilevazioni;
    
    int main()
    {
        rilevazioni *dati=NULL;
        int size = 0;
        int i, j, temp, n ;
        char luogo[30];
        while(1)
        {
            printf("Inserisci luogo: ");
            scanf("%s", luogo);
            if(strcmp(luogo, "end")==0) break;
            dati = (rilevazioni *)realloc(dati, sizeof(rilevazioni)*(size+1));
            strcpy(dati[size].luogo, luogo);
            printf("Inserisci tasso d'inquinamento: ");
            scanf("%f", &dati[size].valore);
            size += 1;
        }
             for(size=1;size<n;size++)
         {
              for(i=0; i<n; i++)
              {
                   if(dati[i]>dati[i+1])
                   {
                         temp=dati[i];
                         dati[i]=dati[i+1];
                         dati[i+1]=temp;
                   } 
              }
         }
    
    
        
         printf ( "\n\nArray dopo sistemazione:\n") ;
        
         for ( i = 0 ; i <n ; i++ )
         printf ( "%d\t", dati[i] ) ;
         getch();
     }
    }
    Ultima modifica di MItaly; 10-12-2013 a 02:39 Motivo: tag CODE

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,590
    Non hai inizializzato n.
    size non lo devi toccare in quanto contiene la dimensione attuale del tuo array.
    L'algoritmo di ordinamento non è propriamente giusto.
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

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