Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636

    problema ordinamento studenti (in C)

    ciao a tutti
    ho fatto questo nuovo programmino
    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #define maxcar 25
    #define massimo 100
    /*
     * 
     */
    int main() {
    
        struct studente {
            char cognome[maxcar];
            char nome[maxcar];
            int scritto;
            int orale;
            int media;
           } studenti[massimo];
    
    
           int i, j;
           int n;
    
           printf ("inserisci numero studenti : \n");
           scanf ("%d", n);
    
           if ( n >= 3){
               for (i = 0; i <= massimo; i++){
                   printf ("cognome : ");
                   scanf ("%s", studenti[i].cognome);
                   printf ("nome : ");
                   scanf ("%s", studenti[i].nome);
                   printf ("scritto : ");
                   scanf ("%d", &studenti[i].scritto);
                   printf ("orale : ");
                   scanf ("%d", &studenti[i].orale);
               }
    
               for (j = 0; j <= massimo; j++){
                   studenti[j].media = (studenti[j].scritto + studenti[j].orale) / 2;
                   if (studenti[j].media >= 18){
                       printf ("studenti con media >= 18\n");
                       printf ("%30s%30s%30s%30s%30s","cognome","nome","scritto","orale","media");
                       printf ("%s%s%d%d%d", studenti[i].cognome, studenti[i].nome, studenti[i].scritto, studenti[i].orale, studenti[j].media);
                   }
               }
                 for (j = 0; j <= massimo; j++){
                   
                  
                       printf ("studenti con media >= 18\n");
                       printf ("%30s%30s%30s%30s%30s","cognome","nome","scritto","orale","media");
                       printf ("%s%s%d%d%d", studenti[i].cognome, studenti[i].nome, studenti[i].scritto, studenti[i].orale, studenti[j].media);
                   }
               }else{
               printf ("n è minore di 3");
               }
    
    
           
         return 0;
    }
    quando eseguo mi fa inserire 'n', dopodichè si blocca
    che errore faccio?

  2. #2
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    scanf("%d", &n);
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    grazie
    esiste una funzione per approssimare un numero con virgola all'intero superiore?

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da jurij7
    esiste una funzione per approssimare un numero con virgola all'intero superiore?
    EDIT:

    http://www.cplusplus.com/reference/c...math/ceil.html
    every day above ground is a good one

  5. #5
    Utente di HTML.it L'avatar di KrOW
    Registrato dal
    Feb 2009
    Messaggi
    281
    Non credo che esista una funzione del genere nella libreria standard . . . Comunque dovrebbe essere facile implementarla (anche se non ho capito molto bene quello che vorresti fare) . . .
    EDIT: come non detto . . .
    C++ 4ever
    496e2062696e6172696f206e6f6e2063692061767265737469 206e656d6d656e6f2020726f7661746f203a29

  6. #6
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ma non credo possa utilizzarlo per i miei scopi
    cioè quello che voglio considerare non è un numero ma bensì questo

    codice:
    printf ("\n\nriepilogo voti\n");
               printf ("\n%10s%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE","MEDIA");
                 for (j = 0; j <= massimo && j <= n - 1; j++){
                    printf ("\n%10s%10s%10d%10d%.1lf", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale, ceil (studenti[j].media);
                   }

  7. #7
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Scusa ma cosa devi fare? Se devi

    approssimare un numero con virgola all'intero superiore
    quella funzione va benissimo. Se non è quello, specifica cosa è che ti interessa fare.

    In ogni caso, nel codice che hai postato innanzitutto manca una parentesi tonda, e poi devi modificare il codice di formato per la stampa della media:

    codice:
    ...
    printf ("\n%10s%10s%10d%10d%.lf", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale, ceil (studenti[j].media));
                   }
    every day above ground is a good one

  8. #8
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    ok questo è tutto il codice

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    
    #include <math.h>
    
    #define maxcar 25
    #define massimo 100
    /*
     * 
     */
    int main() {
    
        struct studente {
            char cognome[maxcar];
            char nome[maxcar];
            int scritto;
            int orale;
            int media;
           } studenti[massimo];
    
    
           int i, j;
           int n;
    
           printf ("inserisci numero studenti : \n");
           scanf ("%d", &n);
    
           if ( n >= 3){
               for (i = 0; i <= massimo && i <= n - 1; i++){
                   printf ("cognome : ");
                   scanf ("%s", studenti[i].cognome);
                   printf ("nome : ");
                   scanf ("%s", studenti[i].nome);
                   printf ("scritto : ");
                   scanf ("%d", &studenti[i].scritto);
                   printf ("orale : ");
                   scanf ("%d", &studenti[i].orale);
               }
    
               printf ("\nstudenti con media >= 18\n");
               printf ("\n%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE");
               for (j = 0; j <= massimo && j <= n - 1; j++){
                   studenti[j].media = (studenti[j].scritto + studenti[j].orale) / 2;
                   if (studenti[j].media >= 18){
                       
                       printf ("\n%10s%10s%10d%10d", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale);
                   }
               }
               printf ("\n\nriepilogo voti\n");
               printf ("\n%10s%10s%10s%10s%10s\n","COGNOME","NOME","SCRITTO","ORALE","MEDIA");
                 for (j = 0; j <= massimo && j <= n - 1; j++){
                    printf ("\n%10s%10s%10d%10d%10.lf", studenti[j].cognome, studenti[j].nome, studenti[j].scritto, studenti[j].orale, ceil (studenti[j].media));
                   }
               }else{
               printf ("n minore di 3\n");
               }
    
    
           
         return 0;
    }
    quello che intendo è che devo fare la media di scritto e orale
    ovviamente questa media (2 valori interi positivi) potra essere un intero oppure un numero in virgola quindi sempre " XX,5"
    se utilizzo quella funziona di conseguenza la approssimazione verrà fatta sempre per difetto mentre io vorrei che deve sempre essere approssimato per eccesso all'intero superiore
    quindi se ho per esempio due voti : 23 e 24 --> 23 + 24 = 47 ---47 / 2 = 23,5 --> 24

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    mentre io vorrei che deve sempre essere approssimato per eccesso all'intero superiore
    quindi se ho per esempio due voti : 23 e 24 --> 23 + 24 = 47 ---47 / 2 = 23,5 --> 24
    Ma ceil() fa esattamente questo

    Se compili questo codice

    codice:
    #include <stdio.h>
    #include <math.h>
    
    int main(void) {
        
        double array[5] = { 3.4, 11.1, 3.491, 2.99, 7.19};
        short i;
        
        for ( i = 0; i < 5; i++ )
           printf("%.3lf -> %.lf\n", array[i], ceil (array[i]) );
           
        return 0;
    }
    ed esegui il programma ottieni questo output

    codice:
    3.400 -> 4
    11.100 -> 12
    3.491 -> 4
    2.990 -> 3
    7.190 -> 8
    che penso sia proprio quello che vuoi ottenere tu... o no?
    every day above ground is a good one

  10. #10
    Utente di HTML.it
    Registrato dal
    Jun 2007
    Messaggi
    636
    si esatto..è proprio quello che voglio
    ma la cosa stranissima è che compilando il mio codice..mi aprrossima esattamente alla cifra e sempre..alla cifra inferiore

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.