lunes, 19 de noviembre de 2012

Suma del triángulo inferior más el triángulo superior de una matriz cuadrada

Haga un programa que calcule la suma del triángulo inferior más el triángulo superior de
una matriz cuadrada de n X n, dejando el resultado en el triángulo inferior de otra matriz cuadrada de
dimensión n X n. La matriz resultante tendrá 0 en la diagonal y en el triángulo superior. Por ejemplo, si la matriz que proporciona el usuario es:

 

Entonces la matriz resuelta es:




#include<iostream>
#include<cstdlib>
#include<windows.h>
using namespace std;

void leer(int [][100], int &, int &);
void escribir(int [][100], int [][100], int [], int &, int &);
void diagonal_principal(int [][100], int [], int &);
void sum(int [][100], int [][100], int [], int &, int &);

int main()
{
    int matriz1[100][100], matriz2[100][100], vector[100], filas, columnas;

    do{
        do{
            cout<<endl<<"\t indique la cantidad de filas que tendra la matriz: ";
            cin>>filas;

            if((filas<1)||(filas>100))
            {
                cout<<endl<<"\t el numero de filas no puede ser menor que 1 o mayor a 100"<<endl;
                Sleep(1500);
                system("cls");
            }
        }while((filas<1)||(filas>100)); //valida la cantidad de filas que tendra la matriz

        do{
            cout<<endl<<"\t indique la cantidad de columnas que tendra la matriz: ";
            cin>>columnas;

            if((columnas<1)||(columnas>100))
            {
                cout<<endl<<"\t el numero de columnas no puede ser menor que 1 o mayor a 100"<<endl;
                Sleep(1500);
                system("cls");
            }
        }while((columnas<1)||(columnas>100)); //valida la cantidad de columnas que tendra la matriz

        if(filas!=columnas)
        {
            cout<<endl<<"\t las filas y las columnas deben ser iguales"<<endl;
            Sleep(700);
            system("cls");
        }

    }while(filas!=columnas); //valida que la matriz sea cuadrada

    system("cls");

    leer(matriz1, filas, columnas); //llama a la funcion leer()
    diagonal_principal(matriz1, vector, filas); //llama a la funcion diagonal_principal()
    sum(matriz1, matriz2, vector, filas, columnas); //llama a la funcion sum()
    escribir(matriz1, matriz2, vector, filas, columnas); //llama a la funcion escribir()

    cin.get(); cin.get();
    return 0;
}

void leer(int matriz1[100][100], int &filas, int &columnas)
{
    int i, j;

    cout<<endl;

    for(i=0; i<filas; i++)
    {
        for(j=0; j<columnas; j++)
        {
            cout<<"\t "<<"["<<i<<"]"<<"["<<j<<"]"<<" indique dato: ";
            cin>>matriz1[i][j];
        }
        cout<<endl;
    }

    system("cls");
} //fin funcion leer()

void diagonal_principal(int matriz1[100][100], int vector[100], int &filas)
{
    int i;

    for(i=0; i<filas; i++)
    {
        vector[i]=matriz1[i][i]; //almacena la diagonal principal en un vector
    }
} //fin funcion diagonal_principal()

void sum(int matriz1[100][100], int matriz2[100][100], int vector[100], int &filas, int &columnas)
{
    int i, j, k=0;

    for(i=0; i<filas; i++)
    {
        for(j=0; j<columnas; j++)
        {
            matriz2[i][j]=matriz1[i][j]; //copia el contenido de la matriz1 en la matriz2

            if(matriz2[j][j]==vector[j]) //compara la diagonal principal
            {
                matriz2[j][j]=0; //excluye la diagonal principal
            }

            matriz2[i][j]+=matriz2[j][i]; //suma las filas con las columnas
            matriz2[j][i]=0; //excluye los valores de la triangular superior
        }
    }
} //fin funcion sum()

void escribir(int matriz1[100][100], int matriz2[100][100], int vector[100], int &filas, int &columnas)
{
    int i, j;

    cout<<endl<<"\t Matriz original"<<endl<<endl;

    for(i=0; i<filas; i++)
    {
        cout<<"\t ";
        for(j=0; j<columnas; j++)
        {
             if((matriz1[i][j]<10)&&(matriz1[i][j]<100))
            {
                cout<<"00";
            }
            else
                {
                    if((matriz1[i][j]>9)&&(matriz1[i][j]<100))
                    {
                        cout<<"0";
                    }
                }
            cout<<matriz1[i][j]<<" ";
        }
        cout<<endl;
    }

    cout<<endl<<"\t Diagonal principal"<<endl<<endl;
    cout<<"\t | ";

    for(i=0; i<filas; i++)
    {
        cout<<vector[i]<<" | ";
    }

    cout<<endl<<endl<<"\t Matriz resuelta"<<endl<<endl;

    for(i=0; i<filas; i++)
    {
        cout<<"\t ";
        for(j=0; j<columnas; j++)
        {
            if((matriz2[i][j]<10)&&(matriz2[i][j]<100))
            {
                cout<<"00";
            }
            else
                {
                    if((matriz2[i][j]>9)&&(matriz2[i][j]<100))
                    {
                        cout<<"0";
                    }
                }
            cout<<matriz2[i][j]<<" ";
        }
        cout<<endl;
    }
} //fin funcion escribir()


Descargar Código


0 comentarios:

Publicar un comentario