Ir ao conteúdo
  • Cadastre-se

C Faça um algoritmo em linguagem C que receba como dado de entrada uma matriz de c


Renata Sousa

Posts recomendados

Olá galera, 

Estou tentando desenvolver um programa que resolva essa questão:

 

Faça um algoritmo em linguagem C que receba como dado de entrada uma matriz de caracteres. Cada posição da matriz deve armazenar um caractere. A dimensão da matriz deverá ser MxN, onde M e N são dados de entrada escolhidos pelo usuário. Declare a matriz como sendo de dimensão máxima 10x10, e valide os valores de M e N, que devem estar entre 1 e 10, incluindo 1 e 10. Para a validação, o usuário deve ficar preso no programa enquanto não digitar um número válido para M e para N. Após escolhida a dimensão da matriz e povoado ela com caracteres. Faça: • Conte o número de ocorrências de cada caractere que aparece na matriz. Após a contagem, liste cada caractere digitado e o número de ocorrências; • Crie uma função que receba como parâmetro o primeiro caractere cadastrado na matriz. A função deve retornar um dado numérico. Se o caractere for maiúsculo, retorne na função o resultado deste caractere dividido por 10. Caso contrário, retorne o resultado do caractere multiplicado por 2;

 

Porém não consigo ver onde estou errando no meu código, poderiam me dar uma ajuda por gentileza?

<>CODE

#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>

/*Função: Primeiro Caracter*/
int primeiroch(char ch) 
{
    /*Condiçãoque faz a verificação se o caracter é minúsculo*/
    if (islower(ch)) {
        printf("Caracter minúsculo %iX2\n", ch);
        /*Retorno que indica a multiplicação do caractere por 2*/
        return ch * 2;
    }
    /*Condiçãoque faz a verificação se o caracter é maiscúlo*/
    else if(isupper(ch)){
        printf("Caracter maiscúlo %i/10\n", ch);
        /*Retorno que indica a divisão do caractere por 10*/
            return ch / 10;
    }
    else {
        /*Em caso de não ser uma letra, retorno que indica a multiplicação do caractere por 2*/
        return ch*2;
    }

}



#include <stdio.h>
#include <stdlib.h>
#include <locale.h>
#include <ctype.h>
#include <stdbool.h>
#include <string.h>

int primeiroch(char ch); /*Chamamento do função*/

int main()/*Função Principal*/
{
    setlocale(LC_ALL, "portuguese");/*Permite acentuação em portugues*/

    /*Declaração de variavéis*/

    int m = 0;
    int n = 0;
    char matriz[10][10];/*Criação da Matriz*/
    char Contar[100]; /*Vetor que será utilizado para contar caracteres repetidos*/
    char ch; /*Variavel utilizada para o preenchimento da matriz*/
    int count_t = 0;/*Variavel utilizada para contar os caracteres*/
    int r = 0;
    int contar;
    int ver;


    if ((m >= 1) && (m <= 10)) { /*Condição estabelecida para que M receba um valor válido nos intervalos de 1 a 10*/
        printf("Digite um valor para M, sendo este de 1 a 10\n");
        scanf_s("%d", &m);/*Recebe do usuario o valor de M*/
    }
    if ((n >= 1) && (n <= 10)) { /*Condição estabelecida para que N receba um valor válido nos intervalos de 1 a 10*/
        printf("Digite um valor para N, sendo este de 1 a 10\n");
        scanf_s("%d", &n);/*Recebe do usuario o valor de N*/
        printf(" Matriz criada MXN %dX%d\n", m, n);
    }

    /*Condição criada para preenchimento da matriz*/
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            printf(" Digite %dX%d um caractere qualquer:",(i + r),(j + r));/*Mensagem referente a qual posição da matriz o caractere digitado pelo usuario ocupará/*/
            scanf_s("%c", &ch);

            matriz[j] = ch;/*Preenche a matriz com o valor digitado pelo usuário*/
            Contar[count_t] = ch;/*Preenche o vetor de char com caractere digitado pelo usuário*/
            count_t++; /*Contador de caractere*/
        }
    }
    printf("Matriz\n");
    /*Condição que mostra a matriz*/
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {
            printf("%c" , matriz[j]); /*Mostra um caractere da matriz*/

        }
    }
    printf("\n"); /*Salta linha*/

    char contar2[100]; /*Vetor utilizado para contar caracteres repetidos*/

    /*Condição utilizada para contar caracteres*/
    for (int r = 0; r < count_t; r++) {
        bool ver=false; /*Variavel lógica usada para verificar se determinado caractere já apareceu*/
    }
    int count_ch = 0; /* Vetor que irá armazenar 1 char contador que será usado na verificação para saber quantos dos caracteres são repetidos*/
    char chv[2]; 
    chv[0] = contar[r];
    chv[0] = tolower(chv[0]);/*Transforma o caracter em minuscúlo para não contar separado*/

    /*Condição usada para contar caracteres e comparar a chv com a matriz*/
    for (int i = 0; i < m; i++) {
        for (int j = 0; j < n; j++) {

            /*Condição para veirificar se chv é igual ao caracter da matriz*/
            if (chv[0] == tolower(matriz[j]) && ((strchr(contar2, chv[0])) == NULL)) {
                count_ch++; /*Adiciona mais 1*/
                ver=true; /*Será utilizado para exibir na tela o caractere*/
            }
        }
    }
    /*Condição para exibir a mensagem, caso verdadeira*/
    if (ver){
        /* Exibe a mensagem mostrando a quantidade de caracteres repetidos na matriz*/
        printf("%c foi encontrado %d na matriz\n", chv[0], count_ch);
    }
    printf(" O total de caracteres da matriz é %d\n:", count_t); /*Mostra o total de caracteres*/

    /*Chama a função e recebe o retorno*/
    int re = primeiroch(matriz[0][0]);
        printf("Resultado %d %c:\n", re, re);/*Exibe o retorno do primeiro caractere em inteiro e char*/

    system("pause");
    return 0;
}

 

  • Amei 1
Link para o comentário
Compartilhar em outros sites

Seu programa tem vários problemas ainda para compilar :( 

Você tem um livro? Um manual? Uma apostila?

 

scanf_s() precisa de mais um parâmetro. Esse é o _s da função: para ler %c ou %s ou %[] você precisa passar o tamanho da área...
 

Direto da documentação:

char s[10];
scanf_s("%9s", s, (unsigned)_countof(s)); // buffer size is 10, width specification is 9

matriz[j] = ch;
 

Você não pode escrever isso. Veja a declaração: 

	    char matriz[10][10];/*Criação da Matriz*/

Então matriz[j] é char[10] e não pode receber um char. Acha que precisava mesmo desse comentário?

 

contar vs Contar

 

São variáveis diferentes e você está usando ao contrário. Precisa mesmo usar duas variáveis assim parecidas? Achava que não ia confundir? Confundiu ...

 

    for (int r = 0; r < count_t; r++) {
 

Tem certeza que quer declarar outro r? Já tem essa variável fora do loop. Podia usar nomes mais expressivos para variáveis que não são apenas índices.

 

        bool ver = false; /*Variavel lógica usada para verificar se determinado caractere já apareceu*/
 

Declarou isso dentro de um for então ela só vale aí dentro. Mas tentou usar depois.

 

Corrija essas coisas

 

Seu programa parece complicado demais. Já pensou em escrever mais funções e testar uma a uma?

 

 

  • Obrigado 2
Link para o comentário
Compartilhar em outros sites

  • 2 meses depois...

boa tarde galera, estou com uma situação bem parecida...

olhem o meu código, quando mando imprimir a primeira letra da matriz fica em branco...

estou trabalhando no Visual Studio, sou novo nisso e nesse código quero entrar com uma matriz de até dez linhas e dez colunas, usando apenas um caractere para preencher.

 

#include<stdio.h> // BIBLIOTECA PADRÃO.
#include<stdlib.h>
#include<conio.h>
#include<string.h>
#include<locale.h>


int main(void)
{
    
    char matriz[10][10] = { 0 };// MATRIZ COM ATÉ 10 LINHAS E 10 COLUNAS
    int colunas, linhas;
    char c;
    int i, j;

    printf("Digite o tamanho das linhas: "); //IMPRIME A FRASE ENTRE PARENTESES.
    scanf_s("%d", &linhas); //ARMAZENA O NUMERO DIGITADO ACIMA NA VARIAVEL "LINHAS".

    while ((linhas < 1) || (linhas > 10)) // VERIFICA SE O NUMERO DIGITADO ESTA ENTRE 1 E 10, CASSO CONTRARIO PEDE NOVAMENTE AS INFORMÇOES A BAIXO
    {
        printf("Digite o tamanho das linhas: "); //IMPRIME A FRASE ENTRE PARENTESES.
        scanf_s("%d", &linhas); //ARMAZENA O NUMERO DIGITADO ACIMA NA VARIAVEL "LINHAS".

    }

    printf("Digite o tamanho das colunas: "); //IMPRIME A FRASE ENTRE PARENTESES.
    scanf_s("%d", &colunas); //ARMAZENA O NUMERO DIGITADO ACIMA NA VARIAVEL "COLUNAS".

    while ((colunas < 1) || (colunas > 10)) // VERIFICA SE O NUMERO DIGITADO ESTA ENTRE 1 E 10, CASSO CONTRARIO PEDE NOVAMENTE AS INFORMÇOES A BAIXO
    {
        printf("Digite o tamanho das colunas: "); //IMPRIME A FRASE ENTRE PARENTESES.
        scanf_s("%d", &colunas); //ARMAZENA O NUMERO DIGITADO ACIMA NA VARIAVEL "COLUNAS".

    }

    for ( i = 0; i < linhas; i++) // FAZ UMA CONTAGEM DE 0 ATE A QUANTIDADE DE LINHAS DIGITADAS.
    {
        for ( j = 0; j < colunas; j++) // FAZ UMA CONTAGEM DE 0 ATE A QUANTIDADE DE COLUNAS DDIGITADAS.
        {
            printf("Digite o elemento da matriz (%d,%d):", i, j);
            scanf_s("%c", &matriz[i][j]);
            while ((c = getchar()) != '\n' && c != EOF) {};

        }
    } 

    for ( i = 0 ; i < linhas ; i++ )// FAZ UMA CONTAGEM DE 0 ATE A QUANTIDADE DE LINHAS DIGITADAS.
    {
        for ( j = 0 ; j < colunas ; j++ )// FAZ UMA CONTAGEM DE 0 ATE A QUANTIDADE DE LINHAS DIGITADAS.
        {
            printf("%c\t", matriz[i][j]); // IMPRIME NA TELA AS MATRIZES DIGITADAS
            printf("\n");
        }
        
    }


    system("pause");
    return 0;

}

Link para o comentário
Compartilhar em outros sites

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...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!