marcoshuck icon

Matriz dinámica con cálculo de promedio

marcoshuck | PRO | 12/15/16 01:58:17 PM UTC | 0 ⭐ | 396 👁️ | Never ⏰ | []
C++ |

2.76 KB

|

None

|

0 👍

/

0 👎

/*
 
CONSIGNA:
---------
 
Mátriz dinámica promedio
 
A partir de una matriz dada de n filas por m columnas, la cual contiene números aleatorios menores a 20; 
se desea calcular otra matriz con las mismas dimensiones pero con la particularidad que, salvo su primer y ultimo elemento, 
el valor de cada uno de sus elementos es el resultado del promedio de la suma del elemento anterior, el actual y el siguiente.
 
Desarrolle un programa que sea capaz de generar la matriz original a partir de las dimensiones asignadas por el usuario, 
calcule la matriz resultado y la muestre por pantalla.
 
*/
 
#include <stdio.h>
#include <stdlib.h>
 
#define MAX_VAL 20
#define MIN_VAL 0
 
int generar_matriz(int ** m, int filas, int cols);
int resolver_matriz(float ** pr, int filas, int cols);
void mostrar_matriz(void ** m, int filas, int cols);
 
int main(int argc, char *argv[])
{
    // Variables
    unsigned int filas, cols;
    
    // Acumuladores
    unsigned int i;
    
    // Matrices (original y promedio)
    int ** m;
    float ** pr;
    
    // Inicio de la app
    printf("Matriz dinamica aleatoria\n-------------------------\n");
    
    // Cantidad de filas
    printf("Ingrese cantidad de filas: ");
    scanf("%u", &filas);
    
    // Cantidad de columnas
    printf("Ingrese cantidad de columnas: ");
    scanf("%u", &cols);
    
    // Inicializacion de las matrices
    m = (int **)calloc(filas, sizeof(int *));
    pr = (float **)calloc(filas, sizeof(float *));
    
    // Verificar si fue correcta la inicialización
    if(m == NULL || pr == NULL)
    {
        printf("Error: No hay memoria disponible para la asignacion.\n");
        system("PAUSE");
        return -1;
    }
    
    // Asignación de filas y columnas
    for(i = 0; i < filas; i++)
    {
        m[i] = (int *)calloc(cols, sizeof(int));
        pr[i] = (float *)calloc(cols, sizeof(float));
        if(m[i] == NULL || pr[i] == NULL)
        {
            for(j = 0; j < i; j++)
            {
                free(m[j]);
                free(pr[j]);
            }
        }
    }
    
    // Generar matriz (original)
    generar_matriz(m, filas, cols);
    
    // Mostrar matriz (original)
    mostrar_matriz((int **)m, filas, cols);
    
    
    system("PAUSE");    
    return 0;
}
 
int generar_matriz(int ** m, int filas, int cols)
{
    unsigned int i, j;
    for(i = 0; i < filas; i++)
    {
        m[i] = (int *)calloc(cols, sizeof(int));
        if(m[i] == NULL)
        {
            free(m[i]);
        }
    }
    srand(time(0));
    for(i = 0; i < filas; i++)
        for(j = 0; j < filas; j++)
            m[i][j] = (rand()%MAX_VAL) + MIN_VAL;
}
 
void mostrar_matriz(void ** m, int filas, int cols)
{
    // Completar
}

Comments