Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Ing99 en 3 Octubre 2017, 04:54 am



Título: Matrices Dispersas En C++
Publicado por: Ing99 en 3 Octubre 2017, 04:54 am
Hola amigos, esta es mi primera publicacion, estoy dando estructuras de datos I y quisiera compartir con ustedes, se que algunos se confunden y aquí les paso para que se guien, si me va bien con esta publicacion sigo subiendo mas.

Este programa crea una matriz dispersa desde otra matriz y a la vez puede decir si es una triangular superior inferior o identidad desde la matriz dispersa, es solo una aplicacion de operaciones basicas.  ;D

Código
  1. #include <iostream>
  2.  
  3. int m,n;
  4.  
  5. using namespace std;
  6.  
  7. int main(){
  8. cout<<"Cuantas filas tiene su matriz: ";
  9. cin>>m;
  10. cout<<"Cuantas columnas tiene su matriz: ";
  11. cin>>n;
  12.  
  13. int matriz[m][n];
  14.  
  15. //Es obvio...
  16. cout<<"\n\n";
  17. for(int i=0; i<m; i++){
  18. for(int j=0; j<n; j++){
  19. cout<<"Ingrese el dato en posicion ["<<i+1<<"]["<<j+1<<"]: ";
  20. cin>>matriz[i][j];
  21. }
  22. }
  23.  
  24. //Reviso si hay ceros en la matris para no contarlos en la fila de la dispersa...
  25. int a=m*n;
  26. int aux=0;
  27. for(int i=0; i<m; i++){
  28. for(int j=0; j<n; j++){
  29. if(matriz[i][j]==0){
  30. aux++;
  31. }
  32. }
  33. }
  34.  
  35. //Hallo la matriz dispersa...
  36. a=a-aux;
  37. int fil=1;
  38. int col=0;
  39. int c, d;
  40. cout<<"\n\n";
  41. int dispersa[a+2][3];
  42. dispersa[0][0]=m-1;
  43. dispersa[0][1]=n-1;
  44. dispersa[0][2]=a;
  45. for(int i=0; i<m; i++){
  46. for(int j=0; j<n; j++){
  47. if(matriz[i][j]!=0){
  48. dispersa[fil][col]=i;
  49. dispersa[fil][col+1]=j;
  50. dispersa[fil][col+2]=matriz[i][j];
  51. fil++;
  52. }
  53. d=j;
  54. }
  55. c=i;
  56. }
  57. dispersa[fil][col]=c+1;
  58. dispersa[fil][col+1]=d+1;
  59. dispersa[fil][col+2]=0;
  60.  
  61. //Muestro las matrices...
  62.  
  63. //Primero la matriz normal...
  64. cout<<"Matriz:\n";
  65. for(int i=0; i<m; i++){
  66. cout<<endl;
  67. for(int j=0; j<n; j++){
  68. cout<<matriz[i][j]<<" ";
  69. }
  70. }
  71. cout<<"\n\n";
  72.  
  73. //Ahora la dispersa...
  74. cout<<"Matriz dispersa:\n";
  75. for(int i=0; i<a+2; i++){
  76. cout<<endl<<"   "<<dispersa[i][0]+1<<" "<<dispersa[i][1]+1<<" "<<dispersa[i][2];
  77. }
  78.  
  79. //Compruebo si la matriz puede ser triangular superior o identidad con una pregunta...
  80. int aux1=0;
  81. int aux2=0;
  82. int aux3=0;
  83. int aux4=0;
  84. if(m==n){
  85.  
  86. //Para ver si es triangular superior...
  87. for(int i=0; i<a+2; i++){
  88. if(dispersa[i][0]>dispersa[i][1]){
  89. aux1=1;
  90. }
  91. }
  92. //Para ver si es triangular inferior...
  93. for(int i=0; i<a+2; i++){
  94. if(dispersa[i][0]<dispersa[i][1]){
  95. aux2=1;
  96. }
  97. }
  98. //para ver si es identidad...
  99. if(m==a){
  100. for(int i=0; i<a+2; i++){
  101. for(int j=0; j<3; j++){
  102. if(i==j){
  103. if(dispersa[i][j]==1){
  104. aux4=1;
  105. }
  106. else{
  107. aux4=0;
  108. }
  109. }
  110. }
  111. }
  112. }
  113. }
  114. if(aux4==1){
  115. cout<<"\nLa matriz es identidad...\n\n";
  116. }
  117. else{
  118. if(aux1==0){
  119. cout<<"\nLa matriz es triangular superior...\n\n";
  120. }
  121. else if(aux2==0){
  122. cout<<"\nLa matriz es triangular inferior...\n\n";
  123. }
  124. }
  125. cout<<"\n\n";
  126. system("pause");
  127. }
  128.  


· Los códigos deben ir en etiquetas GeSHi
· No hagas doble post (la respuesta fue borrada)
>aquí las reglas del foro (http://foro.elhacker.net/reglas.htm)
-Engel Lex