+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 6 su 6

[C] Moltiplicazione matrice vettore

  1. #1
    Reddi non Ŕ in linea Novello
    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.

    /* 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.

  2. #2
    L'avatar di bottomap
    bottomap non Ŕ in linea Amanuense
    Ciao,

    Procediamo con ordine:

    1) Il ciclo che hai scritto in cima rimane in esecuzione finchÚ non riceve una sceltÓ corretta (compresa tra zero e quattro). Quella porzione di codice pu˛ andare, ma riguarda esclusivamente una scelta. Dopo questo il tuo programma opera in base alla scelta effettuata e termina. Non c'Ŕ niente che mantenga in loop l'esecuzione e permetta di effettuare nuove scelte (se ho capito cosa vuoi ottenere).

    2) A quale operazione ti riferisci esattamente? Il prodotto matrice x vettore? In tal caso qualsiasi libro di testo (ma anche qualsiasi materiale in rete - guarda semplicemente anche su wiki: http://it.wikipedia.org/wiki/Moltipl...per_un_vettore) che tratti le matrici dovrebbe spiegare dettagliatamente il prodotto in questione, i suoi elementi, e la matrice risultante. La dimensione della matrice e del vettore (ovviamente devono essere in relazione) sono ininfluenti allo sviluppo della funzione che effettua il prodotto. Piuttosto potrebbe essere utile, sia come esercizio che in generale, sviluppare il prodotto in una funzione separata.

    3) Mi pare che vada bene... da queste parti si Ŕ visto ben di peggio (leggi: roba completamente priva di ogni traccia di indentazione). FinchÚ mantieni la struttura del codice ben evidente (e commenti adeguatamente, in particolare quando si pu˛ rischiare di perdere il filo) sei sulla buona strada. Se proprio vogliamo andare a cercare il capello, hai indentato tutto eccetto il contenuto del do..while

    Ciaociao
    Ultima modifica di bottomap; 09-01-2013 17:51 
    ℹ️ Leggi di pi¨ su bottomap ...

  3. #3
    Reddi non Ŕ in linea Novello
    Grazie per avermi risposto.

    Ma io vorrei appunto capire come fare a non far terminare il programma dopo che l' utente sceglie il punto 2.
    Dovrebbe essere cosi : utente sceglie 1 , compila, appare di nuovo il men¨, fa ad esempio il 2 e via avanti. CŔ viene fuori il men¨ dopo ogni scelta.

    Riguardanti al prodotto matrice x vettore non ho trovato nulla in internet fatto con funzioni base, ho trovato solo cose e righe che non capivo assolutamente.
    Riusciresti a dirmi come sviluppare i punti ?


    Grazie mille ancora !

  4. #4
    L'avatar di bottomap
    bottomap non Ŕ in linea Amanuense
    Ciao,

    Riguardo al primo punto il suggerimento mi pare chiaro... hai un loop che serve a scegliere l'elemento corretto (0-4), ma manca un loop che reiteri l'operazione. Ci sono diverse strade per ottenere quello che vuoi, tutte piuttosto semplici da immaginare. Magari ti servirÓ una ulteriore voce di men¨ (5 - Esci) piuttosto.

    Riguardo al prodotto, se trovi il codice precotto e pronto al copia-incolla cosa ne ricavi? Quelle "cose e righe" sono cenni di base del calcolo matriciale. Conviene forse che effettui degli esercizi (su carta! con un buon libro di testo alla mano) riguardo a questo genere di cose, e solo dopo provi a trasporre in un progarmma quello che hai imparato. Ti assicuro che una volta che riesci a risolvere un esercizio di prodotto matrice x vettore, la maniera di sviluppare il programma (anzi la funzione che vuoi realizzare) viene da sÚ.
    ℹ️ Leggi di pi¨ su bottomap ...

  5. #5
    Reddi non Ŕ in linea Novello
    Riguardo alle matrici, ci lavorer˛ su e vedr˛ di impararci qualcosa.

    Riguardo alle vie per il problema del men¨, non riesco a capire concretamente cosa devo fare. Scusami davvero ma programmo da pochissimi mesi e questa Ŕ la seconda volta che ci danno da fare un programma ...

  6. #6
    neobaumuth non Ŕ in linea Scolaretto
    Ciao, per reiterare l'esecuzione del tuo programma, puoi fare cosý:
    /* 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;
    while (1){               /*In questo modo crei un loop infinito*/
    
    	 /*        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 
    	
    
    }   //Graffa del while (1)
    }
    
    ℹ️ Leggi di pi¨ su neobaumuth ...

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. Risposte: 8
    Ultimo Post: 22-04-2011, 19:52
  2. Prodotto vettore per matrice
    Da suchigno nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 27-08-2009, 18:08
  3. [C/C++] da matrice a vettore
    Da Betta83 nel forum C/C++
    Risposte: 2
    Ultimo Post: 06-02-2008, 15:29
  4. Verificare Matrice (o vettore) Vuota
    Da TorrediPisa nel forum Visual Basic 6
    Risposte: 5
    Ultimo Post: 23-11-2006, 07:10
  5. La moltiplicazione?!?!
    Da Fabivs nel forum Microsoft Word
    Risposte: 2
    Ultimo Post: 29-12-2005, 10:31