Ir ao conteúdo

Posts recomendados

Postado

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
Postado

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
  • 2 meses depois...
Postado

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;

}

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!