Ir ao conteúdo
  • Cadastre-se

C Matriz de caracteres que lista cada um diferente e quantas vezes foi digitado


Battata
Ir à solução Resolvido por Midori,

Posts recomendados

Basicamente é uma matriz de no maximo 10x10 que devia ser povoada com caracteres depois os caracteres diferentes deviam ser armazenados em um vetor[100] e quantas vezes cada caracter difrente foi digitado em outro vetor[100] para no final lista-los. E tambem uma função que verifica se o primeiro char da matriz foi maiusculo (retorna o valor da tabela ASCII dividido por 10) ou minusculo (retorna o valor da tabela ASCII multiplicado por 2). Mas não esta funcionando como devia esta dando varios erros e avisos, sou iniciante se alguem puder me ajudar a arrumar ficarei muito grato.

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


#define LINHA 10
#define COLUNA 10
int primeiroch(char ch);
int main()
{
	char Matriz[LINHA][COLUNA], c;
	int M, N;
	char contar[100];//armazenar diferentes caracteres que aparecem na matriz
	char vezes[100];//contar quantas vezes o mesmo caracter aparece
	int count_t = 0, k=0;
	do {
		printf("Digite o numero de linhas da matriz: ");
		scanf_s("%i", &M);
	} while ((M < 1) || (M > 10));

	do {
		printf("Digite o numero de colunas da matriz: ");
		scanf_s("%i", &N);
	} while ((N < 1) || (N > 10));

	for (int i = 0; i < M; i++)//linhas
	{
		for (int j = 0; j < N; j++)//colunas
		{
			printf("Digite o valor da matriz [%i][%i]", i, j);
			scanf_s("%c", &Matriz[i][j]);
			while ((c=getchar())!='\n'&&c!=EOF){}
			contar[count_t] = Matriz[i][j];
			count_t++;
		}
	}
	printf("Matriz\n");
	for (int i = 0; i < M; i++)//linhas
	{
		for (int j = 0; j < N; j++)//colunas
		{
			printf("%c\t", Matriz[i][j]);
		}
		printf("\n");
	}
	for (k = 0; k < count_t; k++) 
	{
		bool ver = false;
		int count_v = 0;
		char chv[2];
		chv[0] = contar[1];
		for (int i = 0; i < M; i++) 
		{
			for (int j = 0; j < N; j++) {
				if (chv[0] == tolower(Matriz[i][j]) && ((strchr(vezes, chv[0])) == NULL))
				{
					count_v++;
					ver = true;
				}
			}
		}
		strcat_s(vezes, chv);
		if (ver) {
			printf("%c foi encontrado %i na matriz\n", chv[0], count_v);
		}
	}
	printf("\nO total de caracteres da matriz é: %i\n", count_t);
	int re = primeiroch(Matriz[0][0]);
	printf("\nResultado:%i%c\n", re, re);
	system("pause");
	return 0;
}
int primeiroch(char ch)
{
	if (islower(ch))
	{
		printf("\n Minúsculo %i x 2\n", ch);
		return ch * 2;
	}
	else (isupper(ch))
		; {
		printf("\nMaiúsculo %i /10\n", ch);
		return ch / 10;
	}
}

error.jpg.6320cbc0d7854ed2d204954aec32b894.jpg

Link para o comentário
Compartilhar em outros sites

@Battata Acho que se você usar um vetor para representar a tabela ascii vai ficar mais fácil resolver. P.ex, a posição da letra no vetor caractere já será incrementada com a quantidade de vezes que for digitada, aí é só verificar qual é igual a 1 ou maior.

 

 

#include <stdio.h>

int main(){
    char matriz[10][10];
    int caractere[256] = {0};
    int i = 0, j = 0, m, n;

    printf("linhas e colunas: ");
    scanf("%d %d", &m, &n);

    while(i < m){
        j = 0;
        while(j < n){
            printf("Valor [%d][%d]: ",i,j);
            scanf(" %c*%c", &matriz[i][j]);
            caractere[matriz[i][j]]++;
            j++;
        }
        i++;
    }
    printf("\n");
    i = 0;
    while(i < 256){
        if(caractere[i]){
            printf("Caractere %c = %d\n",i,caractere[i]);
        }
        i++;
    }
    return 0;
}

 

 

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

@Midori obrigado, funcionou bem melhor! agora so tenho que arrumar essa função 

@Midori pode me ajudar com isso aqui? ta dando erro "um valor do tipo int char não pode ser atribuído para uma entidade do tipo char" e não sei se a função esta correta

  int MinMai(char pc);
	int main()
[...]
  matriz[0][0] = MinMai;
printf("Resultado do primeiro caracter:%i",matriz[0][0]);
    return 0;
}
int MinMai(char pc) {
    if (pc >= 97 || pc <= 122)
        pc / 10;
    else if (pc >= 65 || pc <= 90)
        pc * 2;
}
Link para o comentário
Compartilhar em outros sites

@Battata  Sua função não está retornando nada e na atribuição você não passou o argumento, p,ex

 

  matriz[0][0] = MinMai('A');
printf("Resultado do primeiro caracter:%i",matriz[0][0]);
    return 0;
}
int MinMai(char pc) {
    if (pc >= 97 || pc <= 122)
        return pc / 10;
    else if (pc >= 65 || pc <= 90)
        return pc * 2;
}

 

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

@Battata Só coloquei 'A' como exemplo de argumento, você tem que passar o valor conforme o propósito de ter criado essa função.

 

Aparentemente é o primeiro elemento da matriz já que você fez isso com uma função semelhante no primeiro post. Não seria isso?

 

printf("Resultado do primeiro caracter:%i",MinMai(matriz[0][0]));

 

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

@Battata  Talvez porque a função MinMai não está retornando o valor correto. No primeiro post diz que deve dividir a maiúscula por 10 e multiplicar a minúscula por 2, veja se com esta correção resolve (lembrando que como o tipo é int o resultado da divisão será arredondado).

 

Se não resolver coloque o código completo.

 

int MinMai(char pc){
    int m = 0;
    
    if(pc >= 97 && pc <= 122)
        m = pc * 2;
    if(pc >= 65 && pc <= 90)
        m = pc / 10;

    return m;
}

 

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

@Midori ainda da 0

#include <stdio.h>
int MinMai(char pc);
int main() {
    char matriz[10][10];
    int caractere[256] = { 0 };
    int i = 0, j = 0, m, n;

    do {
        printf("Digite o numero de linhas da matriz: ");
        scanf_s("%i", &m);
    } while ((m < 1) || (m > 10));
    do {
        printf("Digite o numero de colunas da matriz: ");
        scanf_s("%i", &n);
    } while ((n < 1) || (n > 10));


    while (i < m) {
        j = 0;
        while (j < n) {
            printf("Valor [%d][%d]: ", i, j);
            scanf_s(" %c*%c", &matriz[i][j]);
            caractere[matriz[i][j]]++;
            j++;
        }
        i++;
    }
    printf("\n");
    i = 0;
    while (i < 256) {
        if (caractere[i]) {
            printf("Caractere %c = %d\n", i, caractere[i]);
        }
        i++;
    }
    matriz[0][0] = MinMai('A');
    printf("Resultado do primeiro caracter:%i", MinMai(matriz[0][0]));
    return 0;
}
int MinMai(char pc) {
    int m = 0;

    if (pc >= 97 && pc <= 122)
        m = pc * 2;
    if (pc >= 65 && pc <= 90)
        m = pc / 10;

    return m;
}

 

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

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!