[Consulta] Matriz triangular inferior y superior en C++

Iniciado por romybe, 20 Julio 2015, 20:21 PM

0 Miembros y 1 Visitante están viendo este tema.

romybe

Hola gente! Estoy haciendo un ejercicio que me pide determinar si una matriz cuadrada es triangular inferior, superior o ninguna de las dos. Realicé el siguiente código en C++:

#include <stdio.h>
#include <iostream>

int leer_matriz(int M[][100],int &cf);
int definir_triangular(int M[][100],int cf);
int imprimir(int M[][100],int cf);

main ()
{
    int M[100][100];
    int cant_filas;
    leer_matriz(M,cant_filas);
    definir_triangular(M,cant_filas);
    imprimir(M,cant_filas);
    printf ("\n");
    system ("pause");
}

int leer_matriz(int M[][100],int &cf)
{
   do
   {
                   printf ("Ingrese la cantidad de filas de la matriz: ");
                   scanf ("%d", &cf);
                   printf ("\n");
   } while (cf>100);
   for (int i=0;i<cf;i++)
   {
       for (int j=0;j<cf;j++)
       {
           printf ("Ingrese el elemento %d %d de la matriz: ", i, j);
           scanf ("%d", &M[i][j]);
           printf ("\n");
       }
   }
}

int definir_triangular(int M[][100],int cf)
{
   int trian_inf=0, trian_sup=0;
   int i=1, j=0;
   while (i<cf)
   {
         while ((j<i)||(trian_inf=0))
         {
               if (M[i][j]==0)
                  j++;
               else
                   trian_inf=1;
         }
         i++;
   }
   int f=0, c=1;
   while (f<cf)
   {
         while ((c<cf)||(trian_sup=0))
         {
               if (M[f][c]==0)
                  c++;
               else
                   trian_sup=1;
         }
         f++;
   }
   if (trian_inf==0)
      printf ("La matriz es triangular inferior.\n\n");
   if (trian_sup==0)
      printf ("La matriz es triangular superior.\n\n");
   if ((trian_inf==1)&&(trian_sup==1))
      printf ("La matriz no es triangular inferior ni superior.\n\n");
}

int imprimir(int M[][100],int cf)
{
   for (int i=0;i<cf;i++)
   {
       for (int j=0;j<cf;j++)
       {
           printf ("  %d  ", M[i][j]);
       }
       printf ("\n");
   }
}

El problema es que no me está haciendo la parte de verificar si es triangular pero no veo el error. Espero que me puedan ayudar.
Muchas gracias!

romybe

Ya lo solucioné por si a alguno le sirve dejo el código.

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <iostream>

int leer_matriz(int M[][100],int &cf);
int definir_triangular(int M[][100],int cf);
int imprimir(int M[][100],int cf);

main ()
{
     int M[100][100];
     int cant_filas;
     
     leer_matriz(M,cant_filas);
     definir_triangular(M,cant_filas);
     imprimir(M,cant_filas);
     
     printf ("\n");
     system ("pause");
}

int leer_matriz(int M[][100],int &cf)
{
    do
    {
                    printf ("Ingrese la cantidad de filas de la matriz: ");
                    scanf ("%d", &cf);
                    printf ("\n");
    } while (cf>100);

    for (int i=0;i<cf;i++)
    {
        for (int j=0;j<cf;j++)
        {
            printf ("Ingrese el elemento %d %d de la matriz: ", i, j);
            scanf ("%d", &M[i][j]);
            printf ("\n");
        }
    }
}

int definir_triangular(int M[][100],int cf)
{
    int trian_inf=0, trian_sup=0;
    int i=1;
   
    while (i<cf)
    {
          int j=0;
         
          do
          {
                if (M[i][j]==0)
                   j++;
                else
                    trian_inf=1;
          } while ((j<i)&&(trian_inf==0));

          i++;
    }
   
    int f=0, c=1;
   
    while (f<cf)
    {
         
          do
          {
                if (M[f][c]==0)
                   c++;
                else
                    trian_sup=1;
          } while ((c<cf)&&(trian_sup==0));
         
          f++;
    }
   
    if (trian_inf==0)
       printf ("La matriz es triangular inferior.\n\n");
       
    if (trian_sup==0)
       printf ("La matriz es triangular superior.\n\n");
       
    if ((trian_inf==1)&&(trian_sup==1))
       printf ("La matriz no es triangular inferior ni superior.\n\n");
}

int imprimir(int M[][100],int cf)
{
    for (int i=0;i<cf;i++)
    {
        for (int j=0;j<cf;j++)
        {
            printf ("  %d  ", M[i][j]);
        }
       
        printf ("\n");
    }
}