Jump to content
Fórum Script Brasil
  • 0

[AJUDA]Problema de matriz


lucasflerk

Question

[AJUDA]Loja de Artigos Infantis

Uma loja de artigos infantis precisa fazer um controle efetivo dos produtos que são regularmente comprados para compor o seu estoque, tendo em vista que foram detectadas falhas no registro de entrada de tais produtos. Considere que a loja vende apenas camisetas, shorts e meias. Esses produtos podem ser do tamanho pequeno (P), médio (M) ou grande (G).

Faça um programa em C que permita o cadastramento dos produtos comprados pela loja e registre em uma matriz 4 X 4 as quantidades adquiridas. Cada linha da matriz deve representar um produto e cada coluna um dos três possíveis tamanhos. A última coluna da matriz deve conter o somatório dos três tamanhos de um mesmo produto. A última linha deve conter o somatório de produtos por cada tamanho.

Quando o usuário desejar encerrar o cadastramento de novos produtos, o programa deve apresentar, em uma janela limpa, a matriz 4 X 4 contendo os dados cadastrados e os somatórios devidos, de acordo com o descrito acima.

Duas linhas abaixo da matriz, deve ser mostrada uma mensagem que indique o total de produtos adquiridos pela loja e qual o produto que tem mais itens em estoque. Em seguida deve ser perguntado ao usuário se ele deseja fazer outro cadastramento de compra. Em caso afirmativo todo o processo deve ser começado novamente para uma aquisição e em caso negativo o programa deverá encerrar após 5 segundos de execução.

Gente da uma luz aew pra eu começar esse programinhaa ; ]

obs: não posso usar variavel global.

Edited by lucasflerk
Link to comment
Share on other sites

10 answers to this question

Recommended Posts

  • 0

Basicamente, você deve alimentar a matriz com os valores. Você deve pedir para o usuário entrar com a quantidade de produtos dos tipos...

camiseta P

camiseta M

camiseta G

short P

short M

short G

meia P

meia M

meia G

Na matriz, armazene nas seguintes posições:

matriz[0][0] = camiseta P

matriz[0][1] = camiseta M

matriz[0][2] = camiseta G

matriz[0][3] = somatório de camisetas P, M e G

matriz[1][0] = short P

matriz[1][1] = short M

matriz[1][2] = short G

matriz[1][3] = somatório de shorts P, M e G

matriz[2][0] = meia P

matriz[2][1] = meia M

matriz[2][2] = meia G

matriz[2][3] = somatório de meias P, M e G

matriz[3][0] = somatório de todos os produtos P

matriz[3][1] = somatório de todos os produtos M

matriz[3][2] = somatório de todos os produtos G

matriz[3][3] = somatório de todos os produtos

Para exibir os resultados, limpe a janela com

system("CLS");
e para exibir a matriz, use um laço duplo:
for(i=0;i<4;i++){
     for(j=0;j<4;j++){
          printf("%d ", matriz[i][j]);
     }
     printf("\n");
}

O resto acredito que tu não necessite de ajuda.

Link to comment
Share on other sites

  • 0

então no caso , eu teria que criar uma variavel para cada produto e depois armazenar essas variaveis na matriz?

olha o meu codigo, pra ver se estou no caminho !

#include<stdio.h>

int calcularCamisa(int produtos);

int main(){

int matriz[4][4];

int opcao=0;

int camisetaP=0,camisetaM=0,camisetaG=0,bermudaP,bermudaM,bermudaG,meiaP,meiaM,meiaG,soma=0;

matriz[0][0] = camisetaP

matriz[0][1] = camisetaM

matriz[0][2] = camisetaG

matriz[0][3] = somatório de camisetas P, M e G

matriz[1][0] = bermudaP

matriz[1][1] = bermudaM

matriz[1][2] = bermudaG

matriz[1][3] = somatório de shorts P, M e G

matriz[2][0] = meiaP

matriz[2][1] = meiaM

matriz[2][2] = meiaG

matriz[2][3] = somatório de meias P, M e G

matriz[3][0] = somatório de todos os produtos P

matriz[3][1] = somatório de todos os produtos M

matriz[3][2] = somatório de todos os produtos G

matriz[3][3] = somatório de todos os produtos

while (opcao != 11){

system("cls");

printf("CADASTRAMENTO DE PRODUTOS\n\n");

printf("1 - Cadastrar Camisa P \n");

printf("2 - Cadastrar Camisa M\n");

printf("3 - Cadastrar Camisa G\n");

printf("4 - Cadastrar bermuda P\n");

printf("5 - Cadastrar bermuda M\n");

printf("6 - Cadastrar bermuda G\n");

printf("7 - Cadastrar meia P\n");

printf("8 - Cadastrar meia m\n");

printf("9 - Cadastrar meia G\n");

printf("10 - mostrar produtos\n");

printf("11 - Sair\n");

printf("Opcao -> ");

scanf("%d",&opcao);

system("cls");

switch (opcao){

case 1:

printf("Informe a qtd -> ");

scanf("%d",&camisetaP);

system("pause");

break;

case 2:

printf("Informe a qtd -> ");

scanf("%d",&camisetaM);

system("pause");

break;

case 3:

printf("Informe a qtd -> ");

scanf("%d",&camisetaG);

system("pause");

break;

}

}

Link to comment
Share on other sites

  • 0

Amigo, porque você colocou essa parte

matriz[0][0] = camisetaP
matriz[0][1] = camisetaM
matriz[0][2] = camisetaG
matriz[0][3] = somatório de camisetas P, M e G
matriz[1][0] = bermudaP
matriz[1][1] = bermudaM
matriz[1][2] = bermudaG
matriz[1][3] = somatório de shorts P, M e G
matriz[2][0] = meiaP
matriz[2][1] = meiaM
matriz[2][2] = meiaG
matriz[2][3] = somatório de meias P, M e G
matriz[3][0] = somatório de todos os produtos P
matriz[3][1] = somatório de todos os produtos M
matriz[3][2] = somatório de todos os produtos G
matriz[3][3] = somatório de todos os produtos

?

Isto é apenas uma indicação de qual conteúdo vai para cada variável.

No momento estou em meio à miha aula (de programação, inclusive), mas quando chegar em casa lhe dou uns toques.

Link to comment
Share on other sites

  • 0

Opa, cheguei.

Seguinte, todo o programa deve estar dentro de um loop (preferencialmente do-while), e a condição de parada ocorre após a exibição da matriz. Se o usuário quiser continuar e fazer um novo cadastramento, continua, ao contrário, sai do loop.

É melhor fazer com funções, mas imagino que você queira a maneira menos complexa, então façamos tudo na 'main'.

Faça um menu em que o usuário possa escolher 4 opções: cadastrar camisas, shorts, meias e mostrar a matriz.

O usuário escolhe a opção e entra num 'switch'. Dentro do switch há os 4 casos, nos casos de cadastramento, o usuário deverá escolher um tamanho da peça (P, M ou G), e dependendo do caso, soma em determinado local da matriz.

Após o usuário digitar o valor e armazenar na matriz, segue o loop, limpa a tela e mostra novamente o menu.

Faça isto até o usuário escolher a opção 'mostrar Matriz'.

Nesta opção, é quando você deve fazer as somas e colocá-las nos locais certos, e após, exibir a matriz. Você também pode colocar essa soma em cada 'caso' no switch, mas eu gosto de loops, então deixo pra agora =)

Exiba a matriz do jeito que eu falei, com um lacinho básico duplo. De duas quebras de linha ("\n\n") e mostre o somatório geral. Você pode adquirir o somatório geral ao mesmo tempo que consegue os somatórios parciais de cada tipo, fica a dica.

A última tarefa é fornecer a opção para que o usuário possa escolher entre reiniciar o processo ou sair.

Se ele quiser continuar e reiniciar o processo de cadastramento, zere toda a matriz e siga o laço.

Ao contrário, atribua á sua variável de controle o valor correspondente á condição de parada do laço (o tal do-while que eu havia sugerido).

Soa meio complicado, mas em 5 minutinhos dá para fazer.

Eu fiz aqui, se tu ficar meio perdido, dá uma olhada.

#include <stdio.h>

int main(){
    unsigned short int opcao, i, j;
    int matriz[4][4], aux;
    char tam;

    for(i=0;i<4;i++){
        for(j=0;j<4;j++){
            matriz[i][j] = 0;
        }
    }

    do{
        system("cls");
        printf("CADASTRAMENTO DE PRODUTOS\n\n");
        printf("1 - Cadastrar Camisa\n");
        printf("2 - Cadastrar bermuda\n");
        printf("3 - Cadastrar meia\n");
        printf("4 - Mostrar produtos\n");
        scanf("%hu", &opcao);

        system("CLS");

        switch(opcao){
            case 1:

                printf("Qual o tamanho de Camisa voce deseja cadastrar? (P, M ou G)\n");

                do{
                    scanf("%c", &tam);
                    tam -= (tam>96 && tam<126) ? 32 : 0;
                } while(tam != 'P' && tam != 'M' && tam != 'G');

                printf("Digite a quantidade de camisas '%c' voce deseja cadastrar: ", tam);
                if(tam == 'P'){
                    scanf("%d", &aux);
                    matriz[0][0] += aux;
                } else if(tam == 'M'){
                    scanf("%d", &aux);
                    matriz[0][1] += aux;
                } else {
                    scanf("%d", &aux);
                    matriz[0][2] += aux;
                }
            break;

            case 2:
                printf("Qual o tamanho de Short voce deseja cadastrar? (P, M ou G)\n");
                do{
                    scanf("%c", &tam);
                    tam -= (tam>96 && tam<126) ? 32 : 0;
                } while(tam != 'P' && tam != 'M' && tam != 'G');

                printf("Digite a quantidade de Shorts '%c' voce deseja cadastrar: ", tam);
                if(tam == 'P'){
                    scanf("%d", &aux);
                    matriz[1][0] += aux;
                } else if(tam == 'M'){
                    scanf("%d", &aux);
                    matriz[1][1] += aux;
                } else {
                    scanf("%d", &aux);
                    matriz[1][2] += aux;
                }
            break;

            case 3:
                printf("Qual o tamanho de Meia voce deseja cadastrar? (P, M ou G)\n");

                do{
                    scanf("%c", &tam);
                    tam -= (tam>96 && tam<126) ? 32 : 0;
                } while(tam != 'P' && tam != 'M' && tam != 'G');

                printf("Digite a quantidade de Meias '%c' voce deseja cadastrar: ", tam);
                if(tam == 'P'){
                    scanf("%d", &aux);
                    matriz[2][0] += aux;
                } else if(tam == 'M'){
                    scanf("%d", &aux);
                    matriz[2][1] += aux;
                } else {
                    scanf("%d", &aux);
                    matriz[2][2] += aux;
                }
            break;

            case 4:
                for(i=0;i<3;i++){
                    for(j=0;j<3;j++){
                        matriz[i][3] += matriz[i][j];
                        matriz[3][i] += matriz[j][i];
                        matriz[3][3] += matriz[i][j];
                    }
                }

                for(i=0;i<4;i++){
                    for(j=0;j<4;j++){
                        printf("%6d", matriz[i][j]);
                    }
                printf("\n");
                }

                printf("\n\nTotal de produtos adquiridos pela loja: %d.\n", matriz[3][3]);
                printf("Voce deseja fazer outro cadastramento de compra? (S ou N):\n");

                do{
                    scanf("%c", &tam);
                    tam -= (tam>96 && tam<126) ? 32 : 0;
                } while(tam != 'S' && tam != 'N');

                if(tam == 'S'){
                    for(i=0;i<4;i++){
                        for(j=0;j<4;j++){
                            matriz[i][j] = 0;
                        }
                    }
                } else {
                    opcao = 0;
                }

            break;

            default:
                printf("Você não digitou um numero valido.\n");
            break;
        }

    } while (opcao != 0);

    return(0);
}

Edited by mJi
Link to comment
Share on other sites

  • 0

Vlww aew cara ; ]

#include<stdio.h>

int somaProduto(int matriz[4][4]);

int somaTotalProduto(int matriz[4][4]);

int main(){

int matriz[4][4];

int opcao=0,i=0,j=0;

char tam;

for(i=0;i<4;i++){

for(j=0;j<4;j++){

matriz[j] = 0;

}

}

do{

system("cls");

printf("CADASTRAMENTO DE PRODUTOS\n\n");

printf("1 - Cadastrar Camisa \n");

printf("2 - Cadastrar Bermuda \n");

printf("3 - Cadastrar Meia \n");

printf("4 - Mostrar matriz\n");

printf("Opcao -> ");

scanf("%d",&opcao);

system("CLS");

switch (opcao){

case 1:

printf("Qual o tamanho da camisa que deseja cadastrar ?(P,M,G) \n");

do{

scanf("%c", &tam);

} while(tam != 'P' && tam != 'M' && tam != 'G');

printf("Digite a quantidade de camisas '%c' voce deseja cadastrar: ", tam);

if(tam == 'P'){

scanf("%d",&matriz[0][0]);

somaProduto(matriz);

}

else if(tam == 'M'){

scanf("%d",&matriz[0][1]);

somaProduto(matriz);

}

else{

scanf("%d",&matriz[0][2]);

somaProduto(matriz);

}

system("pause");

break;

case 2:

printf("Qual o tamanho de bermuda que deseja cadastrar ?(P,M,G) \n");

do{

scanf("%c", &tam);

} while(tam != 'P' && tam != 'M' && tam != 'G');

printf("Digite a quantidade de bermudas '%c' voce deseja cadastrar: ", tam);

if(tam == 'P'){

scanf("%d",&matriz[1][0]);

somaProduto(matriz);

}

else if(tam == 'M'){

scanf("%d",&matriz[1][1]);

somaProduto(matriz);

}

else{

scanf("%d",&matriz[1][2]);

somaProduto(matriz);

}

system("pause");

break;

system("pause");

break;

case 3:

printf("Qual o tamanho de meia que deseja cadastrar ?(P,M,G) \n");

do{

scanf("%c", &tam);

} while(tam != 'P' && tam != 'M' && tam != 'G');

printf("Digite a quantidade de meias '%c' voce deseja cadastrar: ", tam);

if(tam == 'P'){

scanf("%d",&matriz[2][0]);

somaProduto(matriz);

}

else if(tam == 'M'){

scanf("%d",&matriz[2][1]);

somaProduto(matriz);

}

else{

scanf("%d",&matriz[2][2]);

somaProduto(matriz);

}

system("pause");

break;

case 4:

somaTotalProduto(matriz);

for(i=0;i<4;i++){

for(j=0;j<4;j++){

printf("%d \t", matriz[j]);

}

printf("\n");

}

printf("\n\nTotal de produtos adquiridos pela loja: %d.\n", matriz[3][3]);

printf("Voce deseja fazer outro cadastramento de compra? (S ou N):\n");

do{

scanf("%c", &tam);

} while(tam != 'S' && tam != 'N');

if(tam == 'S'){

for(i=0;i<4;i++){

for(j=0;j<4;j++){

matriz[j] = 0;

}

}

} else {

opcao = 0;

}

system("pause");

break;

default:

printf("Você não digitou um numero valido.\n");

break;

}

}while (opcao != 0);

}

int somaProduto(int matriz[4][4]){

int aux=0;

aux += matriz[4][4];

return aux;

}

int somaTotalProduto(int matriz[4][4]){

int aux=0,aux2=0,aux3=0,ProP=0,ProM=0,ProG=0,todoPro=0;

aux = matriz[0][0] + matriz[0][1] + matriz[0][2];

matriz[0][3]+= aux;

aux2 = matriz[1][0] + matriz[1][1] + matriz[1][2];

matriz[1][3]+= aux2;

aux3 = matriz[2][0] + matriz[2][1] + matriz[2][2];

matriz[2][3]+= aux3;

ProP = matriz[0][0] + matriz[1][0] + matriz[2][0];

matriz[3][0] += ProP;

ProM = matriz[0][1] + matriz[1][1] + matriz[2][1];

matriz[3][1] += ProP;

ProG = matriz[0][2] + matriz[1][2] + matriz[2][2];

matriz[3][2] += ProG;

todoPro = matriz[0][3]+ matriz[1][3]+matriz[2][3];

matriz[3][3] += todoPro;

}

olha aii como eu montei o meu !

mas o codigo está dando erro na função de somar, vê se encontra o erro ai pra mim.

Grato !

Link to comment
Share on other sites

  • 0
olha aii como eu montei o meu !

mas o codigo está dando erro na função de somar, vê se encontra o erro ai pra mim.

Grato !

Qual é o erro?

Esse tanto de variável auxiliar, você não precisa. Pode somar diretamente na posição que quiser.

Ou use um for() básico, é bem melhor:

for(i=0;i<3;i++){
    for(j=0;j<3;j++){
        matriz[i][3] += matriz[i][j];
        matriz[3][i] += matriz[j][i];
        matriz[3][3] += matriz[i][j];
    }
}

Edited by mJi
Link to comment
Share on other sites

  • 0

O erro é na seguinte parte do código :

int somaProduto(int matriz[4][4]){

int aux=0;

aux += matriz[4][4];

return aux;

}

a função não esta funcionando !

essa função faz a soma da quantidade dos produtos, pra depois armazenar na matriz.

se você olhar la no meu código, eu chamo essa função sempre que vou fazer a soma, pra armazenar na matriz :

case 1:

printf("Qual o tamanho da camisa que deseja cadastrar ?(P,M,G) \n");

do{

scanf("%c", &tam);

} while(tam != 'P' && tam != 'M' && tam != 'G');

printf("Digite a quantidade de camisas '%c' voce deseja cadastrar: ", tam);

if(tam == 'P'){

scanf("%d",&matriz[0][0]);

somaProduto(matriz);

}

else if(tam == 'M'){

scanf("%d",&matriz[0][1]);

somaProduto(matriz);

}

else{

scanf("%d",&matriz[0][2]);

somaProduto(matriz);

}

system("pause");

break;

Link to comment
Share on other sites

  • 0

O erro é na seguinte parte do código :

int somaProduto(int matriz[4][4]){

int aux=0;

aux += matriz[4][4];

return aux;

}

A 'matriz' não possui uma posição [4][4]. Você está acessando um local fora da matriz na memória, por isso dá erro.

Sua matriz foi declarada como matriz[4][4], isso significa que seus indices vão de 0 até 3. Você só pode acessar as posições

matriz[0][0]

matriz[0][1]

matriz[0][2]

matriz[0][3]

matriz[1][0]

matriz[1][1]

matriz[1][2]

matriz[1][3]

matriz[2][0]

matriz[2][1]

matriz[2][2]

matriz[2][3]

matriz[3][0]

matriz[3][1]

matriz[3][2]

matriz[3][3]

Link to comment
Share on other sites

  • 0

Não tem nada a ver somar dentro ou fora da função... isso não faz diferença, vetores/matrizes são sempre passados por referência.

O que eu quis dizer é que alí, você está somando 'matriz[4][4]'. Essa posição da matriz não existe. A declaração da matriz é matriz[4][4], mas isso significa que ela terá 4 posições em cada dimensão, e não que os índices irão até o elemento 4; eles irão de 0 até 3.

Confira o algoritmo que eu fiz nos posts acima, leia com atenção e você entenderá.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...