Esercizio su Matrici

di il
2 risposte

Esercizio su Matrici

Salve, allora la traccia dell'esercizio è la seguente :

Utilizzate una matrice per risolvere il seguente problema. Un'azienda ha quattro venditori (numerati da 1 a 4) che vendono cinque differenti prodotti (numerati da 1 a 5). Una volta al giorno, ognuno dei venditori fornisce un tagliando per ogni tipo di prodotto venduto. Ogni tagliando contiene:
1. Il numero del venditore
2. Il numero del prodotto
3. Il valore totale del venduto giornaliero di quel prodotto
Di conseguenza, ogni venditore fornisce tra 0 e 5 tagliandi al giorno. Supponete che siano disponibili i dati dei tagliandi dell'ultimo mese. Scrivete un programma che legga le suddette informazioni, riguardanti il venduto dell'ultimo mese, e sommi le vendite totali per venditore e per prodotto. Tutti i totali dovranno esse immagazzinati nella matrice sales. Dopo avere elaborato tutte le informazioni dell'ultimo mese, visualizzate i risultati in formato tabulare in modo che le colonne rappresentino i vari venditori e le righe rappresentino i singoli prodotti. Sommate ogni riga, in modo da ottenere le vendite totali dell'ultimo mese per ognuno dei prodotti; sommate ogni colonna, in modo da ottenere il totale delle vendite dell'ultimo mese per ognuno dei venditori. La vostra stampa tabulare dovrà includere i suddetti totali a destra delle righe e in fondo alle colonne.

Io l'ho svolto in questo modo :
#include <stdio.h>
#define PRODOTTI 5
#define VENDITORI 4

void stampaMatrice(const int matrice[][4], int righe, int colonne);

int main()
{
    int vendite[PRODOTTI][VENDITORI] = {{100,54,89,210},{120,200,342,20},{300,10,270,34},{160,234,67,89},{140,301,22,143}};

    printf("\nRESOCONTO SULLE VENDITE DEL MESE UTILIZZANDO UNA MATRICE\n");
    printf("\ni venditori sono rappresentati dalle colonne (4) mentre i prodotti dalle righe (5)\n");

    stampaMatrice(vendite, PRODOTTI, VENDITORI);

    printf("\n\n");
   
    return 0;
}

void stampaMatrice(const int matrice[][4], int righe, int colonne)
{
    int i;
    int j;
    int somma_righe;
    int somma_colonne;
    int vett[colonne];

    printf("\nla matrice e' la seguente : \n\n");

    for(i=0; i<righe; i++)          
    {   
    	somma_righe = 0;
    	somma_colonne = 0;

    	for(j=0; j<colonne; j++)    
    	{
            somma_righe = somma_righe + matrice[i][j];
            somma_colonne = somma_colonne + matrice[j][i];
    		printf("%d\t", matrice[i][j]);
    	}
        
        somma_colonne = somma_colonne + matrice[4][i];
        vett[i] = somma_colonne;
    	printf("-> %d", somma_righe);
    	printf("\n");
    }
    
    printf("\n");
    printf("|\t|\t|\t|\t\n");
    printf("v\tv\tv\tv\t\n");
    for(i=0; i<colonne; i++)
    {
       printf("%d\t", vett[i]);
    }
    return;
}
I dati della matrice VENDITE rappresentano le vendite totali di ciascun prodotto (riga) per ogni venditore (colonna).
Vorrei sapere se è svolto bene. Considerando poi che al momento non ho ancora affrontato gli argomenti su puntatori e strutture vorrei sapere se senza questi è possibile svolgere questo esercizio in modo migliore (ammesso che il mio sia corretto ). Grazie a tutti per le eventuali risposte.

2 Risposte

  • Re: Esercizio su Matrici

    Per sapere se un programma é fatto bene esiste un unico modo: eseguirlo. Se fa quello che deve é, per definizione, giusto. Poi puoi porti le mille seghe mentali su i tecnicismi e gli stili (fare più o meno funzioni, uso o non uso variabili globali, funzioni con una o più return, uso un while o un for ecc...). Comunque senza particolari dictat ognuno si sceglie il suo stile, e la cosa é secondaria
  • Re: Esercizio su Matrici

    Io non sono d'accordo in questo caso.

    La soluzione è confusionaria: c'è l'indice j che è pensato per le colonne, poi però lo usa per le righe quando deve fare la sommatoria delle colonne, solo che ovviamente non basta e deve aggiungere il termine matrice[4][ i ]. Così la funzione, che è pensata per dei generi int righe e int colonne, in realtà funziona ad hoc proprio per il caso particolare dell'esercizio.

    Con questo modo di procedere, non appena la complessità aumenta si rischia di non saper più come risolvere gli esercizi.

    Io proverei a riscrivere tutto separando la parte di sommatoria delle righe dalla parte di sommatoria delle colonne
Devi accedere o registrarti per scrivere nel forum
2 risposte