voglio eseguire la matrice trasposta con un unico ciclo for come nell'esempio sottostante...
quando vado a stampare il primo indirizzamento per righe riesce a stamparmi l'indice i 0,1,2,3 ecc.. mentre il secondo indirizzamento per colonne mi stampa l'indice sempre 0,0,0,0 ecc...sapete il perchè?
for(i=0;i<n;i++)
{
*(mat+0*n+i)=i;
*(mat+i*n+0)=i; <-------non funzionante
}
codice:
#include <stdio.h>
#include <stdlib.h>
void costr_mat(int mat[9][9],int n);
void visualizza(int mat[9][9],int n);
void vedi_nodo(int mat[9][9],int n);
int main()
{
int *mat;
int n;
int i,j;
int scelta;
printf("Inserisci la grandezza della tabella (MAX 8) = ");
scanf("%d",&n);
n++;
mat=calloc(n,sizeof(int));
/* Metto i nodi */
for(i=0;i<n;i++)
{
*(mat+0*n+i)=i;
*(mat+i*n+0)=i;
}
costr_mat(mat,n);
printf("\nLa Prima riga e la Prima colonna visualizzano i nodi creati, nodo 0 non esiste\n\n");
do
{
printf("\n\n");
printf("0 - Esci\n");
printf("1 - Vedi info nodo\n");
printf("2 - Visualizza MATRICE\n");
scanf("%d",&scelta);
printf("\n\n");
switch(scelta)
{
case 0:
printf("Grazie per aver usufruito del nostro programma\n\n");
break;
case 1:
vedi_nodo(mat,n);
break;
case 2:
visualizza(mat,n);
break;
}
}while(scelta != 0);
system("pause");
}
void costr_mat(int mat[9][9],int n)
{
int i,j;
printf("Inserisci gli elementi, 1 e 0\n");
for(i=1;i<n;i++)
{
for(j=i;j<n;j++) /* Inserisco dalla diagonale in su (triangolo superiore) */
{
printf("mat[%d][%d] = ",i,j);
scanf("%d",&mat[i][j]);
}
}
}
void vedi_nodo(int mat[9][9],int n)
{
int i,j,cont=0;
printf("\nQuale nodo preferisci visualizzare le informazioni? ");
scanf("%d",&i); /* Controllo sulla riga */
for(j=1;j<n;j++)
if(mat[i][j] == 1) /* Conto quante connessioni ci sono */
cont++;
printf("\nIl nodo e' collegato con %d nodi\n\n",cont);
}
void visualizza(int mat[9][9],int n)
{
int i,j;
printf("\nEcco la matrice\n");
for(i=0;i<n;i++)
{
printf("\n");
for(j=0;j<n;j++)
printf("%d ",mat[i][j]);
}
}