Skip to content

ej_verificaSuma #12

@pkorenblit

Description

@pkorenblit
// Hola, quería consultar si la idea del código esta bien y como se podría hacer para modularizar lo menor posible las funciones del código.Gracias. 
//El programa pasa los test de prueba. 
#include <stdio.h> 
#include <assert.h> 



int verificaSuma(unsigned int rows1, unsigned int cols1, unsigned int m1[][cols1], unsigned int rows2, unsigned int cols2, unsigned int m2[][cols2]); 
int verifica(unsigned int rows1, unsigned int cols1, unsigned int m1[][cols1], unsigned int rows2, unsigned int cols2, unsigned int m2[][cols2]); 
unsigned int sumar(unsigned int v[], unsigned int dim); 
int EstaIncluidaLaSuma(unsigned int suma, unsigned int rows, unsigned int cols, unsigned int m[][cols]); 


int main(void) {
    unsigned int m1[][4] = {{1, 1, 3, 3}, // la fila suma 8
    {2, 3, 5, 5}, // la fila suma 15
    {3, 3, 4, 2}}; // la fila suma 12
    unsigned int m2[][3] = {{2, 4, 6}, // la fila suma 12
    {3, 6, 3}, // la fila suma 12
    {6, 5, 4}}; // la fila suma 15

    assert(verificaSuma(3, 4, m1, 3, 3, m2)==2);
    assert(verificaSuma(3, 3, m2, 3, 4, m1)==1);
    // las sumas de las filas de m1 está incluidas en m3,
    // pero no a la inversa
    unsigned int m3[][1] = {{15}, {8}, {11}, {12}, {15}};
    assert(verificaSuma(3, 4, m1, 5, 1, m3)==1);
    assert(verificaSuma(4, 1, m3, 3, 4, m1)==2);
    puts("OK!\n");
    return 0;
}


int verificaSuma(unsigned int rows1, unsigned int cols1, unsigned int m1[][cols1], unsigned int rows2, unsigned int cols2, unsigned int m2[][cols2])
{
    if(verifica(rows1,cols1,m1,rows2,cols2,m2)) 
    {
        return 1; 
    }
    if(verifica(rows2, cols2, m2, rows1, cols1, m1))
    {
        return 2; 
    }
    return 0; 

}

int verifica(unsigned int rows1, unsigned int cols1, unsigned int m1[][cols1], unsigned int rows2, unsigned int cols2, unsigned int m2[][cols2])
{

    for(int i = 0; i < rows1; i++)
    {
        unsigned int suma = sumar(m1[i], cols1);

        if(!EstaincluidaLaSuma(suma, rows2, cols2, m2))
        {
            return 0; 
        }
    }
    return 1; 
}


unsigned int sumar(unsigned int v[], unsigned int dim)
{
    unsigned int sum = 0; 
    for(int i = 0; i < dim; i++)
    {
        sum += v[i]; 
    }
    return sum; 
}

int incluyeSuma(unsigned int suma, unsigned int rows, unsigned int cols, unsigned int m[][cols])
{
    for(int i = 0; i < rows; i++)
    {
        unsigned int sumAux = 0; 
        for(int j = 0; j < cols && sumAux <= suma; j++)
        {
            sumAux += m[i][j]; 
        }
        if(sumAux == suma)
        {
            return 1; 
        }
    }
    return 0; 
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions