miércoles, 15 de mayo de 2019

Ejercicio completo en C. Revisión. Matrices y Cálculo

Buen ejemplo de práctica en C.



/*
 
 El ejercicio va a consistir en:
 1. Multiplicar las columnas de una Matriz 3x3
 2. Dado un número cualquiera, deberemos calcular los digitos que tiene y sumarlos
 */

#include <stdio.h>;
#include <stdlib.h>


void Muestra_Matriz (int [3][3], int f, int c);
void Multiplica_Columnas(int m[3][3], int f, int c, int *m0, int *m1, int *m2);
void Calcula_Digitos (int numero, int **digitos, int *longitud);
void Muestra_Digitos (int *digitos, int longitud);
void Calcula_Suma (int *digitos, int longitud, int *suma);

int main () {
    int f=0, c=0, numero;
    int m0, m1, m2;
    int *digitos;
    int longitud;
    int suma;
    
    int m[3][3]={10,20,30,40,50,60,70,80,90};
    
    Muestra_Matriz (m,f,c);
    Multiplica_Columnas (m,f,c, &amp;m0, &amp;m1, &amp;m2);
    
    printf ("El resultado de la columna [1] es: %d \n",m0);
    printf ("El resultado de la columna [2] es: %d \n",m1);
    printf ("El resultado de la columna [3] es: %d \n",m2);

    printf ("Introduce un número :");
    scanf ("%d",&amp;numero);
    
    Calcula_Digitos (numero, &amp;digitos, &amp;longitud);
    printf ("El numero tiene  %d números", longitud);
    Muestra_Digitos(digitos, longitud);
    Calcula_Suma (digitos,longitud,&amp;suma);
    printf ("La suma es: %d",suma);
    return 0;
}

void Calcula_Suma (int *digitos, int longitud, int *suma) {
    int i;
    int tmp=0;
    
    for (i=0; i &lt; longitud; ++i) {
        tmp += digitos[i];
    }
    
    *suma=tmp;
}

void Muestra_Digitos (int *digitos, int longitud) {
    int i;
    printf ("\n");
    for (i=longitud-1; i&gt;=0; --i) {
        printf ("%d",digitos[i]);
    }
    printf ("--\n");
        
}

void Calcula_Digitos (int numero, int **digitos, int *longitud) {
    int n, l;
    int *tmp = NULL;
    
    for (n = numero, l=0; n &gt; 0 ; n = n/10)
    {
        l += 1;
    }
    *longitud = l;

    tmp=calloc(*longitud, sizeof(int));
    
    for (n = numero, l = 0; l &lt; *longitud; n /= 10, ++l) {
        tmp[l]= n % 10;
    }

    *digitos = tmp;
}

void Muestra_Matriz (int m[3][3], int f, int c) {
    for (f=0;f&lt;3;f++) {
        for (c=0;c&lt;3;c++) {
            printf ("[%d]",m[f][c]);
        } printf ("\n");
    }
    
}

void Multiplica_Columnas (int m[3][3], int f, int c, int *m0, int *m1, int *m2) {
    int c0[3];
    int c1[3];
    int c2[3];
    
    for (f=0;f&lt;3;f++) {
        for (c=0;c&lt;3;c++) {
            if (c == 0)
                c0[f]=m[f][c];
            if (c == 1)
                c1[f]=m[f][c];
            if (c == 2)
                c2[f]=m[f][c];
        }
    }
    *m0=c0[0]*c0[1]*c0[2];
    *m1=c1[0]*c1[1]*c1[2];
    *m2=c2[0]*c2[1]*c2[2];
}