Matrici

di il
12 risposte

Matrici

Ciao a tutti, ho scritto un programma che stampa TUTTE le sottomatrici della matrice data, l'esercizio però mi chiede di trovare la somma degli elementi sulla diagonale, e quelli sull'antidiagonale, e conforntarli: se la somma degli elementi sulla diagonale è maggiore di quelli sull'antidiagonale stampare 1, ma questa non è la parte difficile. Quella difficile è trovare le somme di ciascuna matrice. Ho trovato un metodo un po' particolare che consiste nel sommare al primo elemento di ciascuna matrice n (=ordine sottomatrice)+1, e così via fino all'ultima riga. Per quanto riguarda invece la somma degli elementi sull'antidiagonale partire dal primo elemento a sx della sottomatrice e sottrargli (n+1), (n è sempre l'ordine della sottomatrice), ma non saprei come implementarlo. Tra l'altro il codice presenta un errore che non riesco a trovare: stampa delle sottomatrici in più, ho cercato errori nelle condizioni dei cicli, ma non ne ho trovati.
Sarei grata a chiunque potesse aiutarmi, grazie in anticipo
#include <iostream>
using namespace std;

int main () {
	int matrix [4][6]= {
	{8, 26, 15, 8, 9, 9},
	{1, 5, -4, 3, 5, 17},
	{5, 3, 2, 5, 8, 6},
	{3, 14, 5, 4, 2, -18}
	};
	int c_righe=0;
	int c_colonne=0;
	int c;
	cout<<"Inserisci dimensione sottomatrici"<<endl;
	cin>>c;
	int r=c;
	int l=c;
	
	do {
		for(int i=c_righe;i<r;i++) {				//stampa di ciascuna sottomatrice
			for(int j=c_colonne;j<l;j++) {
				cout<<matrix[i][j]<<"  ";
			}
			cout<<endl;
		}
		c_colonne++;							//incremento indici ciclo for, con i fisso
		l++;
		if (c_colonne>5) {						//se ciclo for arriva all'ultima colonna incremento i per ripartire dalla seconda riga
			c_colonne=0;
			l=c;
			c_righe++;
			r++;
		}
	} while (c_righe<=3);
	
	}

12 Risposte

  • Re: Matrici

    Lasciamo stare per il momento la parte relativa alle diagonali e concentriamoci sulla definizione di sottomatrice:
    - la matrice data è in generale rettangolare di dimensioni RxC, mentre le sottomatrici devono essere quadrate di ordine N, giusto?
    - l'ordine della generica sottomatrice può variare nell'intervallo [2 ; MIN(R,C)], giusto?
    - per sottomatrice intendi semplicemente una matrice ottenuta da quella data rimuovendo R-N righe e C-N colonne? Ossia, detto in altre parole, l'ordine relativo tra righe e tra colonne non può essere cambiato, giusto?

    Mi perdonerai per le domande, ma vorrei prima capire bene quali sono i termini del problema!
  • Re: Matrici

    @Nippolo

    Ci mancherebbe.. sì, l'ordine della sottomatrice varia nell'intervallo [2 ; MIN(R,C)],e per sottomatrici intendo tutte le sottomatrici ,dell'ordine inserito dall'utente, che si trovano all'interno della matrice iniziale, in ordine.. quindi data la mia matrice e inserito l'ordine 2, sarebbero le sottomatrici
    {8 26 {26 15 {15 8
    1 5} 5 -4} -4 3} e così via fino all'ultima riga.. il programma me le stampa tutte.. ma verso la fine mi stampa delle sottomatrci con elementi casuali, disordinati e che non sono presenti all'interno della matrice..
  • Re: Matrici

    Divide et impera.

    Questo é il segreto.

    Cerca di fare una cosa alla volta.

    1) Fai una funzione che calcola la somma degli elementi sulla diagonale di una matrice qualsiasi (ovviamente quadrata nxn).

    É semplice basta che sommi gli elementi matrice[0][0] + matrice[1][1] + ... + matrice[n-1][n-1]

    2) Funzione che fa la somma degli elementi sull'antidiagonale:

    matrice[0][n-1] + matrice[1][n-2] + ... + matrice[n-1][0]

    3) Porzione di codice che "estrae" da una matrice qualsiasi RxC tutte le sottomatrici quadrate KxK e su ognuna di esse, dopo averla stampata, calcola la somma degli elementi della diagonale e la somma degli elementi dell'antidiagonale (utilizzi le funzioni dei punti 1 e 2).

    P.S. Scusa se non sono stato molto esaustivo ma sono da mobile.
  • Re: Matrici

    Chiaro, ma non ho capito qual è la risposta alla mia terza domanda:

    Nippolo ha scritto:


    - per sottomatrice intendi semplicemente una matrice ottenuta da quella data rimuovendo R-N righe e C-N colonne? Ossia, detto in altre parole, l'ordine relativo tra righe e tra colonne non può essere cambiato, giusto?
    Per esempio relativamente a quella matrice, se inserisci ordine 4 quante sottomatrici ti aspetti? Quante invece per ordine 3?
  • Re: Matrici

    @Nippolo

    se ad esempio dovessi inserire 3 dovrebbe trovare 8 sottomatrici, 3 nel caso dovessi inserire un ordine 4
  • Re: Matrici

    @driverfury

    Ok, però volevo scoprire un modo per far fare il tutto da un'unica funzione
  • Re: Matrici

    Partendo da una matrice 4x6 mi aspetterei più di 3 sottomatrici 4x4 ottenibili rimuovendo 2 delle 6 colonne. In particolare (ogni coppia di valori indica le colonne rimosse): 1-2, 1-3, 1-4, 1-5, 1-6, 2-3, 2-4, 2-5, 2-6, 3-4, 3-5, 3-6, 4-5, 4-6, 5-6. Per un totale quindi di 15 sottomatrici di ordine 4.
    Vale la pena far notare che C(6,2)=15, dove C sono le combinazioni semplici.

    Sei d'accordo o sbaglio io qualcosa?
  • Re: Matrici

    No, scusami, sono io che faccio troppo schifo a spiegarmi , ti faccio un esempio concreto :

    Matrice 4x6:

    3 4 5 6 7 2
    3 5 8 9 2 1
    4 6 5 7 8 2
    4 0 1 4 8 7

    Inserisci ordine sottomatrice nxn
    4

    3 4 5 6
    3 5 8 9
    4 6 5 7
    4 0 1 4


    4 5 6 7
    5 8 9 2
    6 5 7 8
    0 1 4 8


    5 6 7 2
    8 9 2 1
    5 7 8 2
    1 4 8 7
  • Re: Matrici

    Questo invece, se l'ordine fosse stato 3:

    Matrice 4x6:

    3 7 9 2 1 5
    7 9 8 3 2 0
    9 7 6 3 4 6
    1 6 4 6 8 4

    Inserisci ordine sottomatrice nxn
    3

    3 7 9
    7 9 8
    9 7 6


    7 9 2
    9 8 3
    7 6 3


    9 2 1
    8 3 2
    6 3 4


    2 1 5
    3 2 0
    3 4 6


    7 9 8
    9 7 6
    1 6 4


    9 8 3
    7 6 3
    6 4 6


    8 3 2
    6 3 4
    4 6 8


    3 2 0
    3 4 6
    6 8 4
  • Re: Matrici

    Matrice 4x6:

    3 4 5 6 7 2
    3 5 8 9 2 1
    4 6 5 7 8 2
    4 0 1 4 8 7

    Inserisci ordine sottomatrice nxn
    4

    3 4 5 6
    3 5 8 9
    4 6 5 7
    4 0 1 4


    4 5 6 7
    5 8 9 2
    6 5 7 8
    0 1 4 8


    5 6 7 2
    8 9 2 1
    5 7 8 2
    1 4 8 7
    Perchè per esempio la matrice

    3 4 6 2
    3 5 9 1
    4 6 7 2
    4 0 4 7

    ,ottenuta rimuovendo le colonne 3 e 5, non potrebbe essere considerata una sottomatrice valida?
    Ovviamente dipende da quello che uno vuole fare, ma se parli di sottomatrici la definizione è la seguente:

    Wikipedia ha scritto:


    Una sottomatrice di una matrice A di dimensione nXm , con n e m interi non negativi, è una matrice B di dimensione rXs, con r e s interi tali che 0<=r<=n e 0<=s<=m, ottenuta da A rimuovendo n-r righe e m-s colonne.
  • Re: Matrici

    Hai ragione, non ho specificato, perchè l'esercizio richiedeva di stampare le coordinate delle sottomatrici individuate senza cancellare righe e/o colonne
  • Re: Matrici

    Scusa, ma anche le 3 matrici che hai postato si ottengono da quella iniziale rimuovendo rispettivamente le coppie di colonne 5-6, 1-6 e 1-2... non trovi?

    Poi cosa intendi con coordinate?
Devi accedere o registrarti per scrivere nel forum
12 risposte