Ir ao conteúdo
  • Cadastre-se

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


Ir à solução Resolvido por Midori,

Posts recomendados

Postado

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

Postado

@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
Postado

@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;
}
Postado

@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
Postado
10 minutos atrás, Midori disse:

matriz[0][0] = MinMai('A');

o que siginifica o 'A'?

é por causa dele que o resultado da sempre 6 independe da letra?

 

Postado

@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
Postado

@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
Postado

@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;
}

 

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