elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  LLENAR UNA MATRIZ DISPERSA LISTA TRIPL
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: LLENAR UNA MATRIZ DISPERSA LISTA TRIPL  (Leído 5,124 veces)
deibenK

Desconectado Desconectado

Mensajes: 4


Ver Perfil
LLENAR UNA MATRIZ DISPERSA LISTA TRIPL
« en: 28 Marzo 2014, 06:47 am »

Que tal gente resulta que ando haciendo un programa para llenar, sumar, multiplicar, sacar el prom,etc. y cuando intento llenar los datos con sus columna y filas al finalizar antes de entrar al menú me saca del programa, me ayudan?

Código
  1. #include<iostream>
  2. #include<conio2.h>
  3. #include<stdio.h>
  4.  
  5. using namespace std;
  6. //parametrización
  7. void LLENAR_f(int [3][100],int ,int ,int );
  8. void SUAMAR_f(int [3][100]);
  9. void MULTIPLICAR_f(int [3][100]);
  10. void REDIMENCIONAR_f(int [3][100]);
  11. void PROM_FILA_f(int[3][100]);
  12. void CANTIDAD_IMPARES_f(int [3][100]);
  13.  
  14. int main()
  15. {  
  16.    int MDlistrip[3][100]={0};
  17.    float R[3][100]={0};
  18.    int NF,NC,ND;
  19.    short op;
  20.    cout<<"\nIngrese numero de Filas";
  21.    cin>>NF;
  22.    cout<<"\nIngrese numero de Columnas";
  23.    cin>>NC;
  24.    cout<<"\nIngrese numero de Datos";
  25.    cin>>ND;
  26.    LLENAR_f(MDlistrip,NF,NC,ND);
  27.    do
  28.    {
  29.        gotoxy(15,1);
  30.        cout<<"Menu Principal";
  31.        cout<<"\nSumar dos matrices dispersas 1:";
  32.        cout<<"\nMultiplicar dos matrices dispersas 2:";
  33.        cout<<"\nEncontrar la traspuesta de ambas matrices dispersas 3:";
  34.        cout<<"\nMostrar el promedio de cada fila 4:";
  35.        cout<<"\nMostrar la cantidad de impares de cada columna 5:";
  36.        cout<<"\nMostrar las matrices dispersas 6:";  
  37.        cout<<"\nIngrese dato del menu:";
  38.        cin>>op;
  39.        switch(op)
  40.        {
  41.            case 1 : SUAMAR_f(MDlistrip) ;break;
  42.            case 2 : MULTIPLICAR_f(MDlistrip);break;
  43.           // case 3 : TRASPUESTAS_f();break;
  44.            case 4 : PROM_FILA_f(MDlistrip);break;
  45.            case 5 : CANTIDAD_IMPARES_f(MDlistrip);break;
  46.            case 6 : ;break;  
  47.        }
  48.     }while(op>=1||op<=6);
  49.    system("PAUSE");
  50.  
  51.    return EXIT_SUCCESS;
  52. }
  53.  
  54. void LLENAR_f(int MDlistrip[3][100],int NF,int NC,int ND)
  55. {
  56.     float dat;
  57.     int f,c;
  58.     short i,j;
  59.     MDlistrip[0][0]=NF;
  60.     MDlistrip[0][1]=NC;
  61.     MDlistrip[0][3]=ND;
  62.     for(i=1;i<=MDlistrip[0][3]+1;i++)
  63.     {
  64.            cout<<"\nIngrese Filas";
  65.            cin>>MDlistrip[i][0];
  66.            cout<<"\nIngrese Columnas";
  67.            cin>>MDlistrip[i][1];
  68.            cout<<"\nIngrese Dato";
  69.            cin>>MDlistrip[i][2];  
  70.     }
  71. }
  72. void SUAMAR_f(int MDlistrip[3][100])
  73. {
  74.    int MDlistripB[3][100]={0};
  75.    int MDlistripR[3][100]={0};
  76.    int NF,NC,ND;
  77.    short k=1;
  78.    cout<<"\nIngrese numero de Filas de la matriz B";
  79.    cin>>NF;
  80.    cout<<"\nIngrese numero de Columnas de la matriz B";
  81.    cin>>NC;
  82.    cout<<"\nIngrese numero de Datos de la matriz B";
  83.    cin>>ND;
  84.    LLENAR_f(MDlistripB,NF,NC,ND);
  85.    while ((k<= MDlistripB[0][2]+1)&&(k<=MDlistrip[0][2]+1))
  86.    {
  87.          if((MDlistripB[k][0]==MDlistrip[k][0])&&(MDlistripB[k][1]==MDlistrip[k][1]))
  88.          {
  89.             MDlistripR[k][0]=MDlistrip[k][0];
  90.             MDlistripR[k][0]=MDlistrip[k][0];
  91.             MDlistripR[k][2]=MDlistrip[k][2]+MDlistripB[k][2];
  92.             k++;
  93.          }
  94.          else
  95.          {
  96.              if(MDlistrip[k][0]<MDlistripB[k][0])
  97.              {
  98.                   MDlistripR[k][0]=MDlistripB[k][0];
  99.                   MDlistripR[k][0]=MDlistripB[k][1];
  100.                   MDlistripR[k][0]=MDlistripB[k][2];
  101.                   k++;
  102.                   MDlistripR[k][0]=MDlistripB[k][0];
  103.                   MDlistripR[k][0]=MDlistripB[k][1];
  104.                   MDlistripR[k][0]=MDlistripB[k][2];
  105.                   k++;
  106.              }
  107.              else if (MDlistrip[k][0]>MDlistripB[k][0])
  108.              {
  109.                   MDlistripR[k][0]=MDlistripB[k][0];
  110.                   MDlistripR[k][0]=MDlistripB[k][1];
  111.                   MDlistripR[k][0]=MDlistripB[k][2];
  112.                   k++;
  113.                   MDlistripR[k][0]=MDlistripB[k][0];
  114.                   MDlistripR[k][0]=MDlistripB[k][1];
  115.                   MDlistripR[k][0]=MDlistripB[k][2];
  116.                   k++;
  117.              }
  118.          }
  119.  
  120.    }
  121. }
  122. void MULTIPLICAR_f(int MDlistrip[3][100])
  123. {
  124.    int MDlistripB[3][100]={0};
  125.    int MDlistripR[3][100]={0};
  126.    int NF,NC,ND;
  127.    short k=1;
  128.    cout<<"\nIngrese numero de Filas de la matriz B";
  129.    cin>>NF;
  130.    cout<<"\nIngrese numero de Columnas de la matriz B";
  131.    cin>>NC;
  132.    cout<<"\nIngrese numero de Datos de la matriz B";
  133.    cin>>ND;
  134.    LLENAR_f(MDlistripB,NF,NC,ND);
  135.    if ((MDlistripB[0][0]==MDlistripB[0][0])&&(MDlistripB[0][0]==MDlistripB[0][0]))
  136.    {
  137.        if((MDlistripB[k][0]==MDlistrip[k][0])&&(MDlistripB[k][1]==MDlistrip[k][1]))
  138.          {
  139.             MDlistripR[k][0]=MDlistrip[k][0];
  140.             MDlistripR[k][0]=MDlistrip[k][0];
  141.             MDlistripR[k][2]=MDlistrip[k][2]*MDlistripB[k][2];
  142.             k++;
  143.          }
  144.          else
  145.          {
  146.  
  147.          }
  148.    }
  149.    else
  150.    {
  151.        cout<<"\nNo se puede multiplicar las matrices";
  152.    }
  153. }
  154. void REDIMENCIONAR_f(int MDlistripR[3][100])
  155. {
  156.     int k;
  157.     float aux[3][100];
  158.     for (k=0;k<=(MDlistripR[0][2]+1);k++)
  159.     {
  160.         aux[k][0]=MDlistripR[k][0];
  161.         aux[k][1]=MDlistripR[k][1];
  162.         aux[k][2]=MDlistripR[k][2];
  163.     }
  164. }
  165.  
  166.  
  167. void PROM_FILA_f(int MDlistrip[3][100])
  168. {
  169.     int f;
  170.     short i,k;
  171.     float prom,ac=0;
  172.     cout<<"\nQue fila desea sacar el promedio?:\t";
  173.     cin>>f;
  174.     for (i=1;i<=(MDlistrip[0][2]+1);i++)
  175.     {
  176.         if(MDlistrip[i][0]=f)
  177.         {
  178.             for(k=i;k<=f;k++)
  179.             {
  180.                ac=ac+MDlistrip[i][2];
  181.             }
  182.  
  183.         }
  184.     }
  185.     prom=ac/MDlistrip[0][1];
  186.     cout<<prom;
  187. }
  188.  
  189. void CANTIDAD_IMPARES_f(int MDlistrip[3][100])
  190. {
  191.     int c, ac=0;
  192.     short i,k;    
  193.     cout<<"\nQue columna quiere ver impares?:\t";
  194.     cin>>c;
  195.     for (i=1;i<=(MDlistrip[0][2]+1);i++)
  196.     {
  197.         if(MDlistrip[i][1]=c)
  198.         {
  199.             for(k=i;k<=c;k++)
  200.             {
  201.                if(MDlistrip[k][2] %2 !=0 )
  202.                {
  203.                    ac=ac+1;
  204.                }
  205.             }
  206.  
  207.         }
  208.     }
  209.     cout<<"\nHay",ac,"impares en la columna",c;
  210.  
  211. }
  212. void MOSTRAR_f(int MDlistrip[3][100])
  213. {
  214.     short k;
  215.     for (k=0;k<=(MDlistrip[0][2]+1);k++)
  216.     {
  217.         cout<<MDlistrip[k][0],"\n";
  218.         cout<<MDlistrip[k][1],"\n";
  219.         cout<<MDlistrip[k][2],"\n";
  220.  
  221.     }
  222. }
  223.  


En línea

leosansan


Desconectado Desconectado

Mensajes: 1.314


Ver Perfil
Re: LLENAR UNA MATRIZ DISPERSA LISTA TRIPL
« Respuesta #1 en: 28 Marzo 2014, 08:28 am »


A simple vista observo varios errores:

* Declaras las dimensiones de las matrices antes de introducir sus dimensiones, NF y NC.

* Pides ingresar el número de dato ND cuando éste está fijado por las dimensiones de la matriz: NFxNC. Lo que tendrías es que introducir los datos.

* En la función LLENAR para introducir los datos tienes que usar dos bucles o for para ir llenando filas y columnas. El for que tienes ahí es una locura.

* Antes de sumar o multiplicar deberías comprobar si las dimensiones de las dos matrices permiten esa operación.

****** Vete arreglando esas cosas y luego hablamos.


¡¡¡¡ Saluditos! ..... !!!!





En línea

eferion


Desconectado Desconectado

Mensajes: 1.248


Ver Perfil
Re: LLENAR UNA MATRIZ DISPERSA LISTA TRIPL
« Respuesta #2 en: 28 Marzo 2014, 08:51 am »

* Si usas C++ no pongas includes de C ( los que acaban en .h) y más aún si estos includes no son necesarios.

* Deberías utilizar el mismo tipo de dato en las diferentes matrices:

Código
  1. void REDIMENCIONAR_f(int MDlistripR[3][100])
  2. {
  3.     int k;
  4.     float aux[3][100];
  5.     for (k=0;k<=(MDlistripR[0][2]+1);k++)
  6.     {
  7.         aux[k][0]=MDlistripR[k][0];
  8.         aux[k][1]=MDlistripR[k][1];
  9.         aux[k][2]=MDlistripR[k][2];
  10.     }
  11. }

Ahí recibes una matriz de tipo int y la copias en... una matriz de tipo float?? además, aux se pierde una vez sales de la función. Esta función por ejemplo no hace nada productivo.

* La definición de matriz es valores=cifras*columnas. Dicho esto, no tiene ningún sentido el tratamiento que le das en partes del código como:

Código
  1.    cout<<"\nIngrese numero de Filas";
  2.    cin>>NF;
  3.    cout<<"\nIngrese numero de Columnas";
  4.    cin>>NC;
  5.    cout<<"\nIngrese numero de Datos";
  6.    cin>>ND;

o:

Código
  1. for(i=1;i<=MDlistrip[0][3]+1;i++)
  2.     {
  3.            cout<<"\nIngrese Filas";
  4.            cin>>MDlistrip[i][0];
  5.            cout<<"\nIngrese Columnas";
  6.            cin>>MDlistrip[i][1];
  7.            cout<<"\nIngrese Dato";
  8.            cin>>MDlistrip[i][2];  
  9.     }

Si tu programa maneja dos matrices deberías diseñar una estructura que gestione la matriz y utilizarla para manejar las dos matrices. No se, algo tal que:

Código
  1. struct Matriz
  2. {
  3.  int filas;
  4.  int columnas;
  5.  int* datos;
  6. };
  7.  
  8. // Sin memoria dinámica
  9. struct Matriz2
  10. {
  11.  int filas;
  12.  int columnas;
  13.  int datos[MAX_FILAS][MAX_COLUMNAS];
  14.  

O, si quieres aprovechar un poco las capacidades de programación orientada a objetos:

Código
  1. class Matriz
  2. {
  3.  public:
  4.    Matriz( int filas, int columnas );
  5.  
  6.    ~Matriz( );
  7.  
  8.    void SetDato( int fila, int columna, int dato );
  9.  
  10.    int Dato( int fila, int columna ) const;
  11.  
  12.    int Filas( ) const;
  13.  
  14.    int Columnas( ) const;
  15.  
  16.  private:
  17.  
  18.    int _filas;
  19.    int _columnas;
  20.  
  21.    // Esta se puede sustituir por una matriz fija para evitar el uso de memoria dinamica
  22.    int* _datos;
  23. };

Tú estás creando una matriz de una forma muy extraña que no te garantiza celdas duplicadas o inexistentes y que, además, no te permite trabajar con dos matrices para hacer las operaciones básicas.

En serio, no termino de entender por qué generas una terna( fila, columna, dato ). ¿Qué sucede si el usuario repite los valores de fila y columna? ¿Y si hay una dupla fila-columna que se olvida de indicar? ¿Y si tengo, por ejemplo, una matriz de 2x2 e intento rellenar un dato de la fila 4, columna 20? ¿Y si indico una fila / columna negativa?

El modelo que propones es demasiado propenso a errores y es bastante complejo de gestionar y de usar. Hay formas mucho más sencillas:

Código
  1. #include <iostream>
  2.  
  3. #define MAX_FILAS 20
  4. #define MAX_COLUMNAS 20
  5.  
  6. struct Matriz
  7. {
  8.  int filas;
  9.  int columnas;
  10.  int datos[MAX_FILAS][MAX_COLUMNAS];
  11.  
  12.  Matriz( ) : filas( 0 ), columnas( 0 )
  13.  { }
  14. };
  15.  
  16. Matriz Sumar( const Matriz& matriz1, const Matriz& matriz2 )
  17. {
  18.  Matriz resultado;
  19.  
  20.  if ( matriz1.filas == matriz2.filas && matriz1.columnas == matriz2.columnas )
  21.  {
  22.    resultado.filas = matriz1.filas;
  23.    resultado.columnas = matriz1.columnas;
  24.  
  25.    for ( int i=0; i<resultado.filas; i++ )
  26.    {
  27.      for ( int j=0; j<resultado.columnas; j++ )
  28.        resultado.datos[ i ][ j ] = matriz1.datos[ i ][ j ] + matriz2.datos[ i ][ j ];
  29.    }
  30.  }
  31.  
  32.  return resultado;
  33. }
  34.  
  35. void Imprimir( const Matriz& matriz )
  36. {
  37.  for ( int i = 0; i < matriz.filas; i++ )
  38.  {
  39.    for ( int j = 0; j < matriz.columnas; j++ )
  40.      std::cout << matriz.datos[ i ][ j ] << " ";
  41.  
  42.    std::cout << std::endl;
  43.  }
  44. }
  45.  
  46. int main( )
  47. {
  48.  Matriz matriz1, matriz2;
  49.  
  50.  matriz1.filas = 2;
  51.  matriz1.columnas = 2;
  52.  
  53.  for ( int i=0; i<matriz1.filas; i++ )
  54.  {
  55.    for ( int j=0; j<matriz1.columnas; j++ )
  56.      matriz1.datos[ i ][ j ] = j - i;
  57.  }
  58.  
  59.  matriz2.filas = 2;
  60.  matriz2.columnas = 2;
  61.  for ( int i=0; i<matriz1.filas; i++ )
  62.  {
  63.    for ( int j=0; j<matriz2.columnas; j++ )
  64.      matriz2.datos[ i ][ j ] = 2* i + j;
  65.  }
  66.  
  67.  // Sumamos las matrices
  68.  if ( matriz1.filas == matriz2.filas && matriz1.columnas == matriz2.columnas )
  69.  {
  70.    Matriz resultado;
  71.    resultado.filas = matriz1.filas;
  72.    resultado.columnas = matriz1.columnas;
  73.  
  74.    for ( int i=0; i<resultado.filas; i++ )
  75.    {
  76.      for ( int j=0; j<resultado.columnas; j++ )
  77.        resultado.datos[ i ][ j ] = matriz1.datos[ i ][ j ] + matriz2.datos[ i ][ j ];
  78.    }
  79.  }
  80.  
  81.  Matriz resultado = Sumar( matriz1, matriz2 );
  82.  
  83.  std::cout << "Matriz1:" << std::endl;
  84.  Imprimir( matriz1 );
  85.  
  86.  std::cout << "Matriz2:" << std::endl;
  87.  Imprimir( matriz2 );
  88.  
  89.  std::cout << "Resultado:" << std::endl;
  90.  Imprimir( resultado );
  91.  return 0;
  92. }

Aún así, insisto, queda mejor con clases que con estructuras... pero creo que es preferible que te manches un poco las manos y no dártelo todo hecho ;)
En línea

Eternal Idol
Kernel coder
Moderador
***
Desconectado Desconectado

Mensajes: 5.958


Israel nunca torturó niños, ni lo volverá a hacer.


Ver Perfil WWW
Re: LLENAR UNA MATRIZ DISPERSA LISTA TRIPL
« Respuesta #3 en: 28 Marzo 2014, 11:14 am »

Por favor traten de mantener el codigo al minimo, que lo escriban los que tienen el problema y no los demas participantes del foro.
En línea

La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Llenar una matriz con primos al azar! :S
Java
Electoniko- 4 8,765 Último mensaje 10 Mayo 2012, 06:43 am
por baspetro
llenar matriz con Random en Dev C
Programación C/C++
binaryum 5 28,045 Último mensaje 20 Julio 2010, 04:26 am
por MIG80
llenar una matriz en c++
Programación C/C++
gak-f5 1 44,044 Último mensaje 28 Mayo 2012, 15:43 pm
por STANHMAL
programa en c que al llenar una matriz 4x4 no me acepte valores repetidos
Programación C/C++
sanchez2011 1 10,464 Último mensaje 4 Junio 2012, 04:17 am
por STANHMAL
¿Cómo llenar una matriz o cuadricula en Java (Código)?
Java
jpfuen 1 2,622 Último mensaje 26 Junio 2018, 21:10 pm
por ThunderCls
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines