Ir ao conteúdo

C Escrever um programa em C


Ir à solução Resolvido por devair1010,

Posts recomendados

Postado

Alguém poderia me ajudar. Escreva um programa em C que permite ao usuário digitar números reais maiores que 4.88 para preencher as matrizes A16 x 16 e matriz B16 x 16. Além disso, o programa deverá calcular e mostrar na sequência, os resultados dos itens a seguir:

 

Fazer o produto entre as duas matrizes e armazenar em uma 3a matriz;

multiplicar os elementos da diagonal principal da matriz A pela diagonal secundária da matriz B e armazenar na diagonal principal de uma 4a matriz. Os outros elementos serão da 3a matriz;

Calcular a média geral das matrizes resultantes dos itens I e II. Identificar e mostrar todos os elementos que são maiores 32% do que o valor da média de cada matriz resultante. Fazer os cálculos individualmente para cada matriz resultante dos itens I e II.

Cria um vetor do tamanho da matriz 3a do item I e preencher com todos os elementos dessa matriz na ordem crescente.

Cria um vetor do tamanho da matriz 4a do item II e preencher com todos os elementos dessa matriz na ordem decrescente.

Dividir os elementos da diagonal secundária da matriz 3a do item I por 4.88 se os elementos forem pares, caso contrário, divide por 8;  

Armazenar o resultado dos itens VI em um vetor 1 de tamanho adequado;

Identificar os elementos das colunas 8 e 16 da matriz 4a do item II que são maiores que 16 e armazenar no vetor 1, após os número do item VII.

 

Obs.: inicie mostrando os elementos das matrizes que foram digitados pelo usuário. Depois, cada item deve ter seu resultado mostrado antes de calcular o próximo item.

  • Obrigado 1
Postado

@maria paiva    esses números com casas decimais são do tipo float , e outros , como long , double , etc ...  ,  então crie a matriz com essa qtd de elementos , linha e coluna ,    pegue os dados do teclado com scanf ,  e o produto é multiplicar  cada elemento de uma matriz com o da outra matriz na mesma posição ,    e então poste o que você já conseguiu fazer desse exercício ,  e ajudaremos  .

  • Curtir 3
  • Obrigado 1
Postado

Qual a dificuldade?

A notação de 'array' é semelhante aquela que escrevemos e relativamente fácil de pegar, os ‘loops’ ou operadores são pouco para saber se ainda não sabe. Então, como seria essa "ajuda"?

 

 

 

  • Curtir 3
Postado

Escreva um programa em C que permite ao usuário digitar números reais maiores que 4.88 para preencher as matrizes A16 x 16 e matriz B16 x 16.  Como fazer isso nesse código?

 

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

int main()
{

    int i,j,k1,k2;
    int linA,colA,linB,colB;
    printf("PRODUTO DE MATRIZES A X B \n \n");
    printf("Quantidade de linhas da Matriz A = ");
    scanf("%d",&linA);
    printf("Quantidade de colunas da Matriz A = ");
    scanf("%d",&colA);
    printf("Quantidade de linhas da Matriz B = ");
    scanf("%d",&linB);
    printf("Quantidade de colunas da Matriz B = ");
    scanf("%d",&colB);

    float A[linA][colA];
    float B[linB][colB];
    float C[linA][colB];
    float temp;

    if(colA!=linB)
    {
        printf("A multiplicacao não pode ser realizada.\n");
        printf("A quantidade de colunas de A e diferente do numero de linhas de B.\n");
        return 0;
    }

    // Carregando matriz A
    printf(" \n CARREGAMENTO DA MATRIZ A \n \n");
    for(i=0;i<linA;i++)
    {
        for(j=0;j<colA;j++)  
        {
            printf("A[%d][%d] = ",i+1,j+1);
            scanf("%f",&A[i][j]);
        }
    }

    // Carregando matriz B
    printf(" \n CARREGAMENTO DA MATRIZ B \n \n");
    for(i=0;i<linB;i++)
    {
        for(j=0;j<colB;j++)
        {
            printf("B[%d][%d] = ",i+1,j+1);
            scanf("%f",&B[i][j]);
        }
    }

    // Imprimindo a matriz A

    printf("\n MATRIZ A \n \n");
    for(i=0;i<linA;i++)
    {
        for(j=0;j<colA;j++)
        {
            if(j!=(colA-1))
                printf("%.2f \t",A[i][j]);

            else
                printf("%.2f \n",A[i][j]);
        }
    }
    printf("\n \n");
    system("pause");

    // Imprimindo a matriz B

    printf("\n MATRIZ B \n \n");
    for(i=0;i<linB;i++)
    {
        for(j=0;j<colB;j++)
        {
            if(j!=(colB-1))
                printf("%.2f \t",B[i][j]);

            else
                printf("%.2f \n",B[i][j]);
        }
    }

    for(k1=0;k1<linA;k1++)
    {
        for(k2=0;k2<colB;k2++)
        {
            temp=0.0;
            for(i=0;i<colA;i++)
            {
                temp=temp+A[k1][i]*B[i][k2];
            }
            C[k1][k2]=temp;
        }
    }

    printf("\n \n");
    system("pause");

    printf("\n MATRIZ C = A x B \n \n");

    for(i=0;i<linA;i++)
    {
        for(j=0;j<colB;j++)
        {
            if(j!=(colB-1))
            {
                printf("%.2f \t",C[i][j]);
            }
            else
            {
                printf("%.2f \n",C[i][j]);
            }
        }
    }

    return 0;

}
 

  • Obrigado 1
Postado

@maria paiva @maria paiva    de acordo com esse enunciado , você não precisa pedir o tamanho das matrizes , pois já foi definido Que será 16 x 16 , e o Que pede mesmo é para preencher as matrizes A e B ,  com números reais e maiores que 4.88 ,  e o produto é multiplicar cada emento da matriz A por um elemento da matriz B na mesma posição ,  e pode ser assim  :

or (int i = 0; i < 16; i++)
    {
        for (int j = 0; j < 16; j++)
        {
            //temp = 0.0;
            /*for (i = 0; i < colA; i++)
            {
                temp = temp + A[k1][i] * B[i][k2];
            }*/
            C[i][j] = A[i][j] * B[i][j];
        }
    }

    printf("\n \n");
    system("pause");

    printf("\n MATRIZ C = A x B \n \n");

    for (int i = 0; i < linA; i++)
    {
        for (int j = 0; j < colB; j++)
        {
            if (j != (colB - 1))
            {
                printf("%.2f \t", C[i][j]);
            }
            else
            {
                printf("%.2f \n", C[i][j]);
            }
        }
    }

 

  • Curtir 3
Postado

obrigado pelas informações. Só, ainda, não compreendi em que parte entra  "usuário digitar números reais maiores que 4.88". Poderia me ajudar? Agradeço desde já

  • Obrigado 1
Postado
Em 22/01/2022 às 20:15, maria paiva disse:

Escreva um programa em C que permite ao usuário digitar números reais maiores que 4.88 para preencher as matrizes A16 x 16 e matriz B16 x 16.

 

Essa é a parcela mais 'chatinha' do exercício. Proponho que inicialmente não siga à risca, imagine ser 4x4.

Para valores do tipo 4.88 dados 'float' são suficientes, porém nada ti impede que sejam 'double', exceto se há uma discussão sobre uso de memória, pois double exige mais memória que float.

 

Simplifique a dimensão das matrizes quadrada através de uma constante.

Escreva a captura dos valores com ninho de ‘loops’: 1 “loop” para linhas e outro para as colunas, nesse último fica a rotina que captura o número real.

 

Proponho que escreva essa porção de código como se fosse um novo programa, após testado una ao programa principal.

Basicamente, declare duas matrizes, pegue seus valores e exiba-os.

Requisitos: FOR, SCANF, PRINTF, VARIÁVEIS E MATRIZES.

 

Conhece os requisitos? Se sim, então tem o necessário para programar.

E para testar será necessário digitar 16 números por matriz.

 

[:)] no aguardo.

  • Obrigado 2
  • Solução
Postado

@maria paiva   você pode usar o comando  IF para comparar o número digitado pelo usuário , com o valor 4.88 , e assim determinar o que fazer ,  pois se precisam ser maiores de 4.88 então creio que o certo seria voltar e pegar outro número e para isso você pode usar o comando goto para ir para uma determinada parte do código do programa ,   e seu código poderia ser assim  :

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
int main()
{
    int linA = 4, colA = 4;
    float A[16][16];
    for (int i = 0; i < linA; i++)                  // variavel i só existe dentro desse loop
    {
        for (int j = 0; j < colA; j++)              // variavel j só existe dentro desse loop
        {
            printf("A[%d][%d] = ", i + 1, j + 1);   // informa a posicao na Matriz
        Label_1:                                    // Label do comando Goto , volta para esse ponto do programa
            int r = scanf("%f", &A[i][j]);          // 
            if (A[i][j] <= 4.88)                    // se num digitaDo for menor que 4.8 volta aoLabel_1 , para pegar outro
            {
                printf("DigitOu menor Que 4.88 , tente novamente\n");
                goto Label_1;                       // vai para o ponto informado pelo Label
            }
        }
    }
    return 0;
}

 

  • Curtir 1
  • Obrigado 1
Postado

Essa primeira parte conseguir fazer. Segue abaixo o programa. 

Agora como introduzir nesse programa o seguinte esquema:

"multiplicar os elementos da diagonal principal da matriz A pela diagonal secundária da matriz B e armazenar na diagonal principal de uma 4a matriz. Os outros elementos serão da 3a matriz"

 

 

#include <stdio.h>
#include <stdlib.h>
#define linA 2
#define colA 2
#define linB 2
#define colB 2

int main()
{

    int i,j,k1,k2;
    

    float A[linA][colA];
    float B[linB][colB];
    float C[linA][colB];
    float temp;

    // Carregando matriz A
    printf(" \n CARREGAMENTO DA MATRIZ A \n \n");
    for(i=0;i<linA;i++)
    {
        for(j=0;j<colA;j++)
        
        {
            printf("A[%d][%d] = ",i+1,j+1);
            Label_1:                            // Label do comando Goto , volta para esse ponto do programa
            
            scanf("%f",&A[i][j]);
            if (A[i][j] <= 4.88) 
            {
            printf("Digitou menor Que 4.88 , tente novamente\n");
            goto Label_1;                      // vai para o ponto informado pelo Label
        }
    }
}
    // Carregando matriz B
    printf(" \n CARREGAMENTO DA MATRIZ B \n \n");
    for(i=0;i<linB;i++)
    {
        for(j=0;j<colB;j++)
        {
            printf("B[%d][%d] = ",i+1,j+1);
            Label_2:                            // Label do comando Goto , volta para esse ponto do programa
            scanf("%f",&B[i][j]);
            if (B[i][j] <= 4.88) 
            {
            printf("Digitou menor Que 4.88 , tente novamente\n");
            goto Label_2;                      // vai para o ponto informado pelo Label
        }
    }
}
        
    // Imprimindo a matriz A

    printf("\n MATRIZ A \n \n");
    for(i=0;i<linA;i++)
    {
        for(j=0;j<colA;j++)
        {
            if(j!=(colA-1))
                printf("%.2f \t",A[i][j]);

            else
                printf("%.2f \n",A[i][j]);
        }
    }
    printf("\n \n");
   

    // Imprimindo a matriz B

    printf("\n MATRIZ B \n \n");
    for(i=0;i<linB;i++)
    {
        for(j=0;j<colB;j++)
        {
            if(j!=(colB-1))
                printf("%.2f \t",B[i][j]);

            else
                printf("%.2f \n",B[i][j]);
        }
    }

    for(k1=0;k1<linA;k1++)
    {
        for(k2=0;k2<colB;k2++)
        {
            temp=0.0;
            for(i=0;i<colA;i++)
            {
                temp=temp+A[k1][i]*B[i][k2];
            }
            C[k1][k2]=temp;
        }
    }

    printf("\n \n");
   

    printf("\n MATRIZ C = A x B \n \n");

    for(i=0;i<linA;i++)
    {
        for(j=0;j<colB;j++)
        {
            if(j!=(colB-1))
            {
                printf("%.2f \t",C[i][j]);
            }
            else
            {
                printf("%.2f \n",C[i][j]);
            }
        }
    }

    return 0;}
 

  • Obrigado 1
Postado

@maria paiva    uai !  ,     o que você está fazendo na matriz  C  ? ?:   ,   não  é isso Que o enunciado pede , não  ,   e seria então multiplicar cada um elemento da matriz A por um elemento da matriz B na mesma posição ,  pois do jeito que você colocou , isso vai é multiplicar os elementos e acumular o valor total  de cada Linha em cada uma das posições de uma Linha da matriz c , e ainda invertendo as linhas e colunas ,     basta multiplicar um único elemento pelo outro , 

for(k1=0; k1<linA; k1++)
{
    for(k2=0; k2<colA; k2++)             // as matrizes tem  qtd de Linhas e colunas iguais
    {
        /*
        temp=0.0;                       // não precisa dessa Linha
        for(i=0;i<colA;i++)             // não precisa dessa Linha
        {                               // não precisa dessa Linha
        temp=temp+A[k1][i]*B[i][k2];    // não precisa dessa Linha
        }                               // não precisa dessa Linha
        */          
        C[k1][k2] = A[k1][k2]  *  B[k1][k2];
    }
}
printf("\n\n");

e a diagonaL principal e secundária seriam essas aqui

607991924_diagonaisdematrizes.thumb.JPG.657e9098bcec4fe89889e887783eec9f.JPG

tente postar seu código editado no formato code <> 

#include <stdio.h>
#include <stdlib.h>
#define linA 2
#define colA 2
#define linB 2
#define colB 2
int main()
{
    int i, j, k1, k2;

    float A[linA][colA];
    float B[linB][colB];
    float C[linA][colB];
    float temp;

    // Carregando matriz A
    printf(" \n CARREGAMENTO DA MATRIZ A \n \n");
    for (i = 0; i < linA; i++)
    {
        for (j = 0; j < colA; j++)

        {
            printf("A[%d][%d] = ", i + 1, j + 1);
        Label_1:                            // Label do comando Goto , volta para esse ponto do programa

            scanf("%f", &A[i][j]);
            if (A[i][j] <= 4.88)
            {
                printf("Digitou menor Que 4.88 , tente novamente\n");
                goto Label_1;                      // vai para o ponto informado pelo Label
            }
        }
    }
    // Carregando matriz B
    printf(" \n CARREGAMENTO DA MATRIZ B \n \n");
    for (i = 0; i < linB; i++)
    {
        for (j = 0; j < colB; j++)
        {
            printf("B[%d][%d] = ", i + 1, j + 1);
        Label_2:                            // Label do comando Goto , volta para esse ponto do programa
            scanf("%f", &B[i][j]);
            if (B[i][j] <= 4.88)
            {
                printf("Digitou menor Que 4.88 , tente novamente\n");
                goto Label_2;                      // vai para o ponto informado pelo Label
            }
        }
    }

    // Imprimindo a matriz A

    printf("\n MATRIZ A \n \n");
    for (i = 0; i < linA; i++)
    {
        for (j = 0; j < colA; j++)
        {
            if (j != (colA - 1))
                printf("%.2f \t", A[i][j]);

            else
                printf("%.2f \n", A[i][j]);
        }
    }
    printf("\n \n");


    // Imprimindo a matriz B

    printf("\n MATRIZ B \n \n");
    for (i = 0; i < linB; i++)
    {
        for (j = 0; j < colB; j++)
        {
            if (j != (colB - 1))
                printf("%.2f \t", B[i][j]);

            else
                printf("%.2f \n", B[i][j]);
        }
    }

    for (k1 = 0; k1 < linA; k1++)
    {
        for (k2 = 0; k2 < colB; k2++)
        {
            C[k1][k2] = A[k1][k2]  * B[k1][k2];
        }
    }

    printf("\n \n");
    printf("\n MATRIZ C = A x B \n \n");

    for (i = 0; i < linA; i++)
    {
        for (j = 0; j < colB; j++)
        {
            if (j != (colB - 1))
            {
                printf("%.2f \t", C[i][j]);
            }
            else
            {
                printf("%.2f \n", C[i][j]);
            }
        }
    }
    printf("\n\n\n");
    return 0;
}

 

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...