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

Discussione: programmazione c

Hybrid View

  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,589
    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,589
    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,589
    • 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
    Utente di HTML.it L'avatar di Alex'87
    Registrato dal
    Aug 2001
    residenza
    Verona
    Messaggi
    5,802
    La funzione è dichiarata come

    void BubbleSort(float valore, int n)

    ma poi hai scritto

    void BubbleSort(float valore[], int n)
    SpringSource Certified Spring Professional | Pivotal Certified Enterprise Integration Specialist
    Di questo libro e degli altri (blog personale di recensioni libri) | ​NO M.P. TECNICI

  8. #8
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Certo che non li ascolti i consigli e continui di testa tua:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct
    {
        char luogo[30];
        float valore;
    }rilevazioni;
    
    void sort(rilevazioni *a, int size) {
        int i, j;
        rilevazioni temp;
        for(i = size - 1; i > 0; i--) {
            for(j = 0; j < i; j++) {
                if(a[j].valore < a[j+1].valore) {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
    }
    
    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;
        }
       
        sort(dati, size);
    
        int i;
        printf("\n\n");
        for(i = 0; i < size; i++) {
            if(dati[i].valore < 33) break;
            printf("Luogo: %s\t\tTasso d'Inquinamento: %f\n", dati[i].luogo, dati[i].valore);
        }
        free(dati);
        return 0;
    }
    "Quid enim est, quod contra vim sine vi fieri possit?" - Cicerone, Ad Familiares

  9. #9
    Quote Originariamente inviata da Scara95 Visualizza il messaggio
    Certo che non li ascolti i consigli e continui di testa tua:
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    
    typedef struct
    {
        char luogo[30];
        float valore;
    }rilevazioni;
    
    void sort(rilevazioni *a, int size) {
        int i, j;
        rilevazioni temp;
        for(i = size - 1; i > 0; i--) {
            for(j = 0; j < i; j++) {
                if(a[j].valore < a[j+1].valore) {
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
    }
    
    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;
        }
       
        sort(dati, size);
    
        int i;
        printf("\n\n");
        for(i = 0; i < size; i++) {
            if(dati[i].valore < 33) break;
            printf("Luogo: %s\t\tTasso d'Inquinamento: %f\n", dati[i].luogo, dati[i].valore);
        }
        free(dati);
        return 0;
    }
    non c'è un modo senza utilizzare size???

  10. #10
    Utente di HTML.it L'avatar di Scara95
    Registrato dal
    Jul 2009
    residenza
    Zimella (VR)
    Messaggi
    2,589
    Quote Originariamente inviata da lukafulmine Visualizza il messaggio
    non c'è un modo senza utilizzare size???
    Che problemi ti da? Il nome? Cambialo...
    È una normale variabile int che contiene la grandezza...
    Tu nel tuo codice l'hai chiamata n, ma hai sbagliato perché hai chiesto all'utente di inserire il numero di elementi (oltre agli altri errori più gravi).
    Secondo me tu hai bisogno di ristudiare tutto dalle basi.
    "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 © 2026 vBulletin Solutions, Inc. All rights reserved.