Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Caricare/stampare dati usando array multidimensionali (linguaggio C)

    Non riesco a proseguire nella compilazione di un semplice programmino che ho dovuto creare come compito a casa d'informatica.
    Bisogna che il programma crei una tabella che non superi le 23 righe e le 5 colonne, poiché 23 sono i massimi alunni presenti nell'elenco e 5 sono i compiti in classe massimi per quadrimestre.
    In seguito bisogna caricare i nomi degli alunni e dei compiti, stamparli a video e calcolare la media tra i voti dei compiti in classe di ogni alunno.

    Non avevo mai utilizzato il linguaggio C ma è stato semplice impararlo, tanto che ci ho messo solo una serata per arrivare a scrivere buona parte di questo programma, ma ora sono ferma su caricare/stampare i dati della tabella poiché non riesco a capire come si fa ...
    Poi la prof, lasciamo perdere... non ha saputo spiegarmelo nemmeno lei :rollo:... (prof d'informatica?! ... mah...). Quindi datemi voi una mano, plz
    L'errore l'ho capito, ma non riesco a correggerlo:
    Per caricare i dati nella tabella ho creato un array monodimensionale di tipo char per scrivere i nomi degli alunni, e un array multidimensionale per i voti su cui non riesco a caricare i dati; infatti è proprio qui che va in crash in DOS.
    Questo è il programma:
    codice:
    #include <stdio.h> //libreria per le funzionealità basilari di input/output
    
    #define rmax 23 
    #define cmax 5 
    
    int main() 
    {
    int r,c;
    int i,j;
    int m[r][c];
    char n[r][25];
    for( ; ; ) //ciclo infinito
    {
    printf("Crea la tabella rispondendo alle richieste\n");   
    do
    {
    	printf("Inserisci il numero degli alunni\n");
    	scanf("%d", &r);
    	if (r < 1 || r > rmax) 
    	{
    		printf("Valore non consentito\n");
    	} 
    } while (r < 1 || r > rmax); //ripete l'operazione fino a che questa condizione non risulta vera
    do 
    {
    	printf("Inserisci il numero dei compiti in classe\n");
    	scanf("%d", &c);
    	if (c < 1 || c > cmax)
    	{
    		printf("Valore non consentito\n");
    	} 
    } while (c < 1 || c > cmax); //ripete l'operazione fino a che questa condizione non risulta vera
    for (i = 1; i < r + 1; i++)
    {
    	printf("Nome alunno %d\n", i);
    	scanf("%s", n[i]);
            for (j = 1; j < c + 1; j++)
            {
      		printf("Voto compito %d\n", j);
    		scanf("%d", m[i][j]);
    	} 
    }
    printf("Tabella creata con successo");
    for (i = 1; i < r + 1; i++)
    {
    	printf("\n", i, " ");
    	printf("%s", n[i]);
    	for (j = 1; j < c + 1; j++)
    	{
    		printf(" ", j, " ");
    		printf("%d", m[i][j]);   
    	}
    }
    printf("\n");
    }
    }
    Risulta compilato bene, ma si blocca in DOS...
    Aspetto il vostro aiuto,

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,464
    Ecco il tuo codice indentato correttamente e con le correzioni in grassetto (ho anche eliminato alcune parentesi superflue)

    codice:
    #include <stdio.h> //libreria per le funzionealità basilari di input/output
    
    #define rmax 23 
    #define cmax 5 
    
    int main() 
    {
       int r,c;
       int i,j;
       int m[rmax][cmax]; //  L'array deve essere dimensionato con le costanti 
       char n[rmax][25];  //  L'array deve essere dimensionato con le costanti 
    
       for( ; ; ) //ciclo infinito
       {
          printf("Crea la tabella rispondendo alle richieste\n");   
          do
          {
             printf("Inserisci il numero degli alunni\n");
             scanf("%d", &r);
             if (r < 1 || r > rmax) 
                printf("Valore non consentito\n");
          } while (r < 1 || r > rmax); //ripete l'operazione fino a che questa condizione non risulta vera
    
          do 
          {
             printf("Inserisci il numero dei compiti in classe\n");
             scanf("%d", &c);
             if (c < 1 || c > cmax)
                printf("Valore non consentito\n");
          } while (c < 1 || c > cmax); //ripete l'operazione fino a che questa condizione non risulta vera
    
          for (i = 0; i<r; i++)  // L'array e' in base 0
          {
             printf("Nome alunno %d\n", i+1); //  L'array e' in base 0
             scanf("%s", n[i]);
             for (j=0; j<c; j++) //  L'array e' in base 0
             {
                printf("Voto compito %d\n", j+1); //  L'array e' in base 0
                scanf("%d", &m[i][j]); // Devi indicare l'indirizzo dell'elemento dell'array
             } 
          }
    
          printf("Tabella creata con successo");
    		
          for (i=0; i<r; i++) //  L'array e' in base 0
          {
             printf("\n", i+1, " "); //  L'array e' in base 0
             printf("%s", n[i]);
             for (j=0; j<c; j++) //  L'array e' in base 0
             {
                printf(" ", j+1, " "); //  L'array e' in base 0
                printf("%d", m[i][j]);   
             }
          }
    		
          printf("\n");
       }
    }

  3. #3

    Re: Caricare/stampare dati usando array multidimensionali (linguaggio C)

    Originariamente inviato da perfectgirl963
    Non riesco a proseguire nella compilazione di un semplice programmino che ho dovuto creare come compito a casa d'informatica.
    Bisogna che il programma crei una tabella che non superi le 23 righe e le 5 colonne, poiché 23 sono i massimi alunni presenti nell'elenco e 5 sono i compiti in classe massimi per quadrimestre.
    In seguito bisogna caricare i nomi degli alunni e dei compiti, stamparli a video e calcolare la media tra i voti dei compiti in classe di ogni alunno.

    Non avevo mai utilizzato il linguaggio C ma è stato semplice impararlo , tanto che ci ho messo solo una serata per arrivare a scrivere buona parte di questo programma, ma ora sono ferma su caricare/stampare i dati della tabella poiché non riesco a capire come si fa ...
    Poi la prof, lasciamo perdere... non ha saputo spiegarmelo nemmeno lei :rollo:... (prof d'informatica?! ... mah...). Quindi datemi voi una mano, plz
    L'errore l'ho capito, ma non riesco a correggerlo:
    Per caricare i dati nella tabella ho creato un array monodimensionale di tipo char per scrivere i nomi degli alunni, e un array multidimensionale per i voti su cui non riesco a caricare i dati; infatti è proprio qui che va in crash in DOS.
    Ti consiglio di usare, per le variabili, dei nomi significativi e non r,s,n,m, etcc.
    Studiati bene la sintassi della scanf() e della printf().
    Attenzione! tutti gli array in c/c++ sono sempre indicizzati dall'elemeto 0 e non 1.
    codice:
    #include <stdio.h> //libreria per le funzionealità basilari di input/output
    
    #define MAX_ALUNNI  24 
    #define MAX_COMPITI 5 
    
    int main() 
    {
    	int numeroAlunni, numeroCompiti;
    	int i,j;
    	int compito[MAX_ALUNNI][MAX_COMPITI];
    	char nome[MAX_ALUNNI][30];
    	for( ; ; ) //ciclo infinito
    	{
    		printf("Crea la tabella rispondendo alle richieste\n\n");   
    		do
    		{
    			printf("Inserisci il numero degli alunni (1-%d): ", MAX_ALUNNI);
    			scanf("%d", &numeroAlunni);
    			if( numeroAlunni<1 || numeroAlunni>MAX_ALUNNI) 
    			{
    				printf("Valore non consentito (max=%d)\n", MAX_ALUNNI);
    			} 
    		} 
    		while( numeroAlunni<1 || numeroAlunni>MAX_ALUNNI); //ripete l'operazione fino a che questa condizione non risulta vera
    		do 
    		{
    			printf("Inserisci il numero dei compiti in classe (1-%d) : ", MAX_COMPITI);
    			scanf("%d", &numeroCompiti);
    			if( numeroCompiti<1 || numeroCompiti>MAX_COMPITI)
    			{
    				printf("Valore non consentito (max=%d)\n", MAX_COMPITI);
    			} 
    		} 
    		while( numeroCompiti<1 || numeroCompiti>MAX_COMPITI); //ripete l'operazione fino a che questa condizione non risulta vera
    		
    		for( i=0; i<numeroAlunni; i++)
    		{
    			printf("\nNome alunno %d : ", i+1);
    			scanf("%s", nome[i]);
    		   for( j=0; j<numeroCompiti; j++)
    		   {
    		  		printf("Voto compito %d : ", j+1);
    				scanf("%d", &compito[i][j]);
    			} 
    		}
    		printf("\nTabella creata con successo.\n");
    		for( i=0; i<numeroAlunni; i++)
    		{
    			printf("Alunno %2d %s", i+1, nome[i]);
    			for( j=0; j<numeroCompiti; j++)
    			{
    				printf(" %d ", compito[i][j]);   
    			}
    			printf("\n");
    		}
    		printf("\n\n");
    	}
    }
    01010011 01100001 01101101 01110101 01100101 01101100 01100101 01011111 00110111 00110000
    All errors are undocumented features waiting to be discovered.

  4. #4
    Grazie mille ad entrambi. Come ho detto è da pochi giorni che studio il linguaggio... comunque senza di voi non ce l'avrei mai fatta perché credo che la prof non ne capisca nulla... infatti poi ci sarà da ridere ... era stata lei a farmi indicizzare gli array su 1 :rollo: ...
    vabè... grazie, grazie, grazie grazie per i consigli e per avermi corretto gli errori.
    Corro a terminare l'ultima parte del programma (calcolare la media) e ancora grazie, ciaoo!!

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.