Diagonale secondaria

di Anonimizzato9570 il
11 risposte
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

  • 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]<<" ";
    
    	
    	}
    
  • 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
  • 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
  • Ah si giusto xD allora... che valori dovrebbe restituirti e che valori ti restituisce? (sicuro che l'errore è qui?)
  • 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];
    }
  • È 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
  • 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
  • È verooo !

    grazie mille !!
  • Oppure mettendo l'uguale allo zero
    for (int j = (c-1); j >- 1 ; j-- )--------->for ( int j = c - 1 ; j > = 0 ; j -- )
  • poel ha scritto:


    è verooo !

    grazie mille !!

    prego
Devi accedere o registrarti per scrivere nel forum
11 risposte