viernes, 16 de septiembre de 2011

Punteros a matrices

Ejemplo de punteros a matrices


#include "stdafx.h"
#include "iostream"
#include "conio.h"

using namespace std;

int tamaño()
{
int aux;

do{
cin>>aux;
}while(aux<=0 || aux>10);

return aux;
}

int ** crearMatriz(int fil, int col)
{
    int **M=NULL;
    int i, j;
    int mem=1;        /* flag para indicar que hay memoria para todas las filas */

M=(int **)calloc(fil, sizeof(int *));


    /* se reserva memoria para la tabla de punteros intermedia */
    if (M!=NULL)
{
        for (i=0; i<fil && mem; i++)
{
            if ((M[i]=(int *) calloc(col, sizeof(int)))==NULL)
{
                mem=0;
            }
        }

        if (!mem) {
            for(j=0; j<i-1; j++){
                free (M[j]);
            }

            free (M);
            M=NULL;     /* si no hay memoria se devuelve NULL */
        }
    }
    return M;
}

void llenarMatriz(int **p,int fil,int col)
{
for(int i=0;i<fil;i++)
{
cout<<endl;

for(int j=0;j<col;j++)
{
cout<<"V["<<i+1<<"]["<<j+1<<"] = ";
cin>>(*p)[j];
}
p++;
}
}

void mostrarMatriz(int **p,int fil,int col)
{
for(int i=0;i<fil;i++)
{
cout<<endl;

for(int j=0;j<col;j++)
cout<<(*p)[j]<<"   ";
p++;//Tambien podemos aumentar el valor de *p en otra línea de código
}
}

int mayorValor(int **p,int fil,int col)
{
int max=-99999;

for(int i=0;i<fil;i++)
{
for(int j=0;j<col;j++)
if((*p)[j]>max)
max=(*p)[j];
p++;
}

return max;
}

int menorValor(int **p,int fil,int col)
{
int min=99999;

for(int i=0;i<fil;i++)
{
for(int j=0;j<col;j++)
if((*p)[j]<min)
min=(*p)[j];
p++;
}

return min;
}

double promedio(int **p,int fil,int col)
{
double suma=0;

for(int i=0;i<fil;i++)
{
for(int j=0;j<col;j++)
{
suma+=(*p)[j];
}
p++;
}

return suma/(fil*col);
}

void ordenar(int **p,int fil,int col)
{
int aux;

for(int i=0;i<fil;i++)
{
for(int j=0;j<col-1;j++)
{
for(int k=j+1;k<col;k++)
{
if((*p)[j]>(*p)[k])
{
aux=(*p)[j];
(*p)[j]=(*p)[k];
(*p)[k]=aux;
}
}
}
p++;
}
}

void main()
{

int fil,col;

cout<<"Nro de filas: ";
fil=tamaño();

cout<<"Nro de Columnas: ";
col=tamaño();

int **M = crearMatriz(fil,col);

llenarMatriz(M,fil,col);

cout<<endl<<"Esta es su matriz: "<<endl;

mostrarMatriz(M,fil,col);

cout<<endl<<endl<<"Mayor Valor es "<<mayorValor(M,fil,col)<<endl;
cout<<"Menor Valor es "<<menorValor(M,fil,col)<<endl;
cout<<"Promedio es "<<promedio(M,fil,col)<<endl;

ordenar(M,fil,col);
cout<<endl<<"Matriz Ordenada:"<<endl;
mostrarMatriz(M,fil,col);

_getch();
}

No hay comentarios:

Publicar un comentario