Problema con programma in c , matrice x vettore

Reddi

Nuovo Utente
2
0
Buon pomeriggio a tutti.
Sono in terza informatica, programmiamo giusto da qualche mesetto, quindi le funzioni sono quelle basi, switch,if,do,while,array ...
Dovrei fare questo programma, che permette di fare una moltiplicazione tra una matrice(scritta dall utente) per un vettore.
Dal codice capirete meglio le richieste.

Codice:
/* Programma per la moltiplicazione di matrici per vettori */

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

int main(){

int scelta;
int righe, colonne;
int nrighe, ncolonne;
int n;

     /*        Menù          */

    do{
        system("clear");  // Ripulisce lo schermo
        printf("\t\t<<< Matrice x Vettore >>>\n\n");  // Titolo
        printf("\t0 -> Esci dal programma\n");
        printf("\t1 -> Inserire le dimensioni della matrice\n");
        printf("\t2 -> Inserire valori matrice e vettori oppure inserimento automatico casuale\n");
        printf("\t3 -> Visualizza matrice e vettore\n");  
        printf("\t4 -> Calcolo e visualizzazione del risultato\n");
        scanf("%d",&scelta);
    } while(scelta<0 || scelta>4);
    
    switch(scelta){  // Scelta

/* 0 */    case 0:        // Esci dal programma
        system("clear");
        printf("*** Programma terminato ***\n\n");
        return 0;
        break; // Uscire dal contesto

/* 1 */    case 1: // Inserimento dimensioni matrice
        system("clear");
    
        do{
            printf("\t*** Inserimento delle dimensioni della matrice ***");
            printf("\n\nInserire numero righe: ");
            scanf("%d",&nrighe);
            if(nrighe<0 || nrighe>10){    
             printf("\n** Error **\n");
             printf("-> Inserire un numero di righe compreso fra 0 e 10\n\n");
            }     
        } while(nrighe<0 || nrighe>10);

        do{
            // printf("\t*** Inserimento delle dimensioni della matrice ***");
            printf("\nInserire numero colonne: ");
            scanf("%d",&ncolonne);
            if(ncolonne<0 || ncolonne>10){    
             printf("\n** Error **\n");
             printf("-> Inserire un numero di colonne compreso fra 0 e 10\n\n");
            } // Graffa if    
        } while(ncolonne<0 || ncolonne>10);

        break; 
    
/* 2 */    case 2: // Inserire valori matrice e vettore oppure random
        printf("\t*** Inserimento dei valori della matrice e vettore ***");

/* 3 */    case 3:
        printf("\t*** Visualizzazione della matrice e del vettore ***");


/* 4 */    case 4:
        printf("\t*** Calcolo e visualizzazione del risultato ***");

 
    
        /* While del menù */
        // while(scelta<0 || scelta>4);   // Grazie a questa condizione non devo usare il default alla fine
                    // Se il numero inserito nel menù non è compreso tra 0 e 4, non viene accettato.

    }  // Graffa dello switch 
    

return 0;
}

Ecco i miei problemi/domande.
1)Non riesco a capire come posizionare in modo corretto il do-while del menù. Nel senso, una volta scelta un opzione nel menù, mi esce del tutto e quindi questo ciclo do-while non mi funziona !
2)Devo ancora capire come si fa questa operazione, sono bloccato.
3)Come vi sembra la mia scrittura/indentazione/commenti ?

Ringrazio davvero chiunque riesce a darmi una mano, anche solo spiegarmi due cose riguardanti questo programma.
 

matteoc91

Utente Attivo
158
17
Partiamo dall'inizio :)
Prima cosa, il do-while così non ti serve molto perché come giustamente noti, il ciclo ti propone una scelta iniziale che poi però, o itera su se stessa (e quindi ti viene riproposto di scegliere), o termina mantenendo in memoria l'ultima scelta fatta. Il problema è che hai creato un ciclo per il menù e a parte quello per l'elaborazione della scelta, quando in realtà questi dovrebbero essere relazionati (in particolare il secondo dovrebbe stare dentro il primo). In sostanza dentro il do-while dovresti sia presentare il menù che far partire il costrutto switch (e poi appunto chiudere il do-while al fondo).

Cmq se vuoi un consiglio ti direi di pensare alla costruzione del programma in modo diverso perché per come lo hai progettato io posso benissimo tentare di inserire elementi nella matrice o nel vettore prima ancora che questi siano inizializzati (e quindi causare errore a run time).

A seconda di come vuoi implementare il tutto hai due possibilità; la prima è fare una pre-inizializzazione di array e matrice (ad esempio di dimensione 0), in questo modo l'utente anche se cercasse di inserire i dati, non ci riuscirebbe perché i due elementi hanno dimensione 0 (e quindi non consentono l'inserimento di elementi). La seconda è evitare di inserire l'inizializzazione di array e matrice all'interno del menù e farla prima del do-while, in questo modo l'utente avrà già qualcosa di inizializzato e non avrai errore a run time.

Se hai già fatto array e matrici, l'inserimento e la visualizzazione dei dati non dovrebbero essere un problema :)
Per quanto riguarda la moltiplicazione, dipende cosa vuoi fare; se ad esempio vuoi moltiplicare ogni riga della matrice per il vettore basta che ti comporti come quando visualizzi gli elementi della matrice e, al posto di visualizzarlo, lo moltiplichi per il corrispettivo elemento del vettore (poi sta a te e a quello che vuoi fare decidere se memorizzarlo in una nuova matrice, nella stessa, o semplicemente stampare il risultato a run time sullo schermo) ;)
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili