Diagonale secondaria

di il
11 risposte

Diagonale secondaria

Cosa sbaglio?
void calcolaDiagonaleSecondaria(matrice m , int r, int c,vettore & v){

	int i=0;
	for (int j=c;j>0;j--){
		if(j==c-i)
			v[i]=m[i][j];
		i++;
	}
	cout <<"\n La diagonale secondaria è :\n";
	for (int i=0;i<r;i++)
		cout<< v[i]<<" ";

}
mi riporta valori sballati

11 Risposte

  • Re: Diagonale secondaria

    O meglio
    
    void calcolaDiagonaleSecondaria(matrice m , int r, int c,vettore & v){
    
    	for (int i=0;i<r;i++){
    	for (int j=c;j>0;j--)
    		if(j==c-i)
    			v[i]=m[i][j];
    	
    	}
    	cout <<"\n La diagonale secondaria è :\n";
    	for (int i=0;i<r;i++)
    		cout<< v[i]<<" ";
    
    	
    	}
    
  • Re: Diagonale secondaria

    Secondo me il problema è nell'if praticamente si verifica solo la prima volta. mettiamo il caso che c sia 9 di conseguenza j=9 e all'inizio i=0

    j==c-i e l'if è vero
    j=8 c=9 i=0

    j==c-i e da qui in poi l'if sarà sempre falso anche quando si aumenta i.
    non so se mi hai capito xD forse è una cosa voluta non so come funziona il programma. Per avere risposte certe aspetta i più esperti xD
  • Re: Diagonale secondaria

    Credo di non aver capito se j =9
    vuol dire che il secondo ciclo parte da 9 (in alto a dx nella matrice ) e si decrementa di uno quindi
    j=9 i=0 -->ok
    j=8 i=1 --->9-1 =8=j --->ok
    j=7 i=2--->9-2=7=j---->ok
    .
    .
    .
    .
    j=0 i=9 ---->9-9=0=j--->ok così dovrebbe essere
  • Re: Diagonale secondaria

    Ah si giusto xD allora... che valori dovrebbe restituirti e che valori ti restituisce? (sicuro che l'errore è qui?)
  • Re: Diagonale secondaria

    Ti allego il file

    non sono riuscito ad allegare la cartella zappata qui, quindi l'ho caricata su :

    http://www.4shared.com/zip/m1e9Lk3z/massimo_della_matrice.html?
  • Re: Diagonale secondaria

    Mhh ma la diagonale secondaria è quella che va da sopra a destra a sotto a sinistra?
    facendo così va? (io non riesco a compilare >.< xD)
    void calcolaDiagonaleSecondaria(matrice m , int r, int c,vettore & v){
    
    	int i=-1;
    	for (int j=c;j>0;j--){
    		i++;
    		v[i]=m[i][j];
    	}

    se è come penso io (cioè che serve solo per le matrici quadrate xD) qui potresti alleggerire il programma.
    invece di:
    	for (int i=0;i<r;i++){
    		for (int j=0;j<c;j++)
    			if(i==j)
    				v[i]=m[i][j];
    potresti fare:
    int i=-1;
    for (int j=0;j<c;j++)
    {
    i++;
    v[i]=m[i][j];
    }
  • Re: Diagonale secondaria

    È uguale , ri ridà gli stessi valori , a te non compila perché l mio è un progetto di x code, prova ad aprire il tuo compilatore e creati un progetto con 3 file e li chiami come li ho chiamati io
  • Re: Diagonale secondaria

    Ecco il problema
    void calcolaDiagonaleSecondaria(matrice m , int r, int c,vettore & v){
    
    	  int i=-1;
    
       for (int j=(c-1);j>-1;j--){
          i++;
          v[i]=m[i][j];
       }
    

    praticamente partivi con j=3 ma nella matrice non c'è il 3 xD il massimo è m[2][2] perchè si parte da 0. poi ho messo j>-1 perchè mettendo j>0 appena j=0 il ciclo si ferma e nel cout manca m[2][0] fine spero di esserti stato utile
  • Re: Diagonale secondaria

    È verooo !

    grazie mille !!
  • Re: Diagonale secondaria

    Oppure mettendo l'uguale allo zero
    for (int j = (c-1); j >- 1 ; j-- )--------->for ( int j = c - 1 ; j > = 0 ; j -- )
  • Re: Diagonale secondaria

    poel ha scritto:


    è verooo !

    grazie mille !!

    prego
Devi accedere o registrarti per scrivere nel forum
11 risposte