Ir ao conteúdo
  • Cadastre-se

C Criar uma função que receba o primeiro caractere registrado na matriz


Yank Marsh

Posts recomendados

Olá pessoal do Clube do Hardware, estou aqui mais uma vez, mas dessa vez quero pedir que me guiem com essa matéria de programação pois é meu segundo programa.

Estou com problemas:

1 para Contar o número de ocorrências e lista-lo.

2. Criar uma função que receba o primeiro caractere registrado na matriz e dividi-lo por  10 caso maiúsculo, ou multiplicar por 2 caso minusculo.

3.png.185002b3d8391ef5b0ca93ec8ceabd23.png

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

  • Moderador

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

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

23 horas atrás, DiF disse:

Caro usuário,

 

Seja bem-vindo ao Clube do Hardware.

 

No intuito de servir como fonte de pesquisa no caso de instituições de ensino, informamos que incorrer no resolvimento por completo de questões relacionadas a disciplinas escolares de cursos técnicos e faculdades podem ser revistas e removidas pela Equipe de Moderação do Clube do Hardware.

 

Para sanar dúvidas sobre esse tipo de problema, por gentileza, publique o passo a passo do desenvolvimento da questão, projeto, monografia ou conteúdo em dúvida para que possamos analisar se a resposta está correta ou não, ou para que possa ser auxiliado com a dúvida no desenvolvimento do exercício.

 

Infelizmente, não há como resolver os trabalhos pelos usuários. O objetivo do Clube do Hardware é auxiliar seus usuários a encontrar soluções para que possam sanar suas dúvidas, e não de trazer soluções prontas para seus usuários. Além disso, copiar e colar respostas que não são de autoria própria do qualquer usuário é considerado plágio, o que é ilegal.

 

Esperamos que compreenda.

 

Atenciosamente,

Equipe Clube do Hardware

Eu tinha colocado uma foto do andamento do programa, mas creio que não baixou. Desculpe o erro.

adicionado 2 minutos depois

@devair1010  
Eu fiz até aqui olha, analisando você acha que como devo implementar?

Se você puder me direcionar melhor, creio que já tenho 1 for para M e ooutro para M.

Agora falta listar, vai precisar de mais 4 fors?

Onde exatamente devo colocar?

 

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

  • Moderador

@Yank Marsh

42 minutos atrás, Yank Marsh disse:

Eu tinha colocado uma foto do andamento do programa, mas creio que não baixou. Desculpe o erro.

Não é isso. Eu removi a "foto" do código.  Peço que poste o código em forma de texto usando o botão CODE contido no editor.

O google não indexa imagens. então só use elas para reforçar algo. O código precisa ser em modo texto

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

#include <stdio.h>
#include <stdlib.h>
  
  int main(){
	int i,j;
  	int matriz[9][9];
  
  printf("\nEntre com os numeros da matriz\n\n");
  for(i=0;i<9;i++){
     for(j=0;j<9;j++){
  
		printf("\nElemento [%d][%d] =");
  		scanf_s("%d", &matriz[0][0]);
  }
      
                    }
   system("pause");
  	return 0;
  }

 

adicionado 1 minuto depois
agora, Yank Marsh disse:

#include <stdio.h>
#include <stdlib.h>
  
  int main(){
	int i,j;
  	int matriz[9][9];
  
  printf("\nEntre com os numeros da matriz\n\n");
  for(i=0;i<9;i++){
     for(j=0;j<9;j++){
  
		printf("\nElemento [%d][%d] =");
  		scanf_s("%d", &matriz[0][0]);
  }
      
                    }
   system("pause");
  	return 0;
  }

@devair1010 Como continuar, pois estou perdido esse foi meu maximo.

 

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

é melhor começar dessa maneira

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

int main()
{
	
	srand(time(NULL));

    int i,j,linha,coluna;
    while(linha<1 || coluna<1 || linha>10 ||coluna>10 ){
    printf("Digite as linhas:\n");
    scanf("%d",&linha);
    printf("Digite as colunas:\n");
    scanf("%d",&coluna);
    
}

char mat[linha][coluna];

    for (i=0;i<linha;i++){
    	for (j=0;j<coluna;j++){
		//preenche a matriz com letras maiusculas
       mat[i][j]=rand()%25 + 65;
       //preenche a matriz com letras minusculas
       	mat[i][j]= rand()%25 + 97;
    }
}
    for (i=0;i<linha;i++){
    	for (j=0;j<coluna;j++){
    	if(j%coluna==0)
    	printf("\n");
     printf(" %c",mat[i][j]);
     
    }
}
}

 

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

@Yank Marsh   creio que seja por que depois da chave que fecha a função main  , ainda haja algumas linhas de código . a partir da linha 21 .

   e para fazer a contagem da qtd de cada caractere , use quatro loop's , sendo um para as linhas e outro para as colunas , e dentro mais dois do mesmo jeito , para fazer as comparações , e coloque o caractere em um vetor do tipo  char , e em outro do tipo int vai incrementando a qtd .

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

Uma solução envolve no mínimo 3 funções, exceto main.

 

Função que é um algoritmo em C para preenche matriz de caracteres. 

 

Função que conta o número de ocorrências dos caracteres e lista o resultado: entende-se por exibir o resultado.

 

Função que recebe um caractere e retorna se caixa alta quociente de 10 senão produto de 2 .

 

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

Em 28/06/2020 às 13:56, Mauro Britivaldo disse:

Função que é um algoritmo em C para preenche matriz de caracteres

 

Como a matriz tem sempre duas dimensões (MxN), essa parte da questão resume-se em escrever uma função que receba o número de linhas,  colunas e o ponteiro. 

 

void * ler (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun])

 

Em 26/06/2020 às 19:10, Yank Marsh disse:

printf("\nEntre com os numeros da matriz\n\n");
for(i=0;i<9;i++){
  for(j=0;j<9;j++){
    printf("\nElemento [%d][%d] =");
    scanf_s("%d", &matriz[0][0]);
  }
}

 

C11

void * ler (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]){
	for (size_t l = 0; l < nlinh; ++l){
		for (size_t c = 0; c < ncolun; ++c){
			printf ("Elemento [%u][%u] = ", l, c); 
			scanf_s (" %c", &da_matriz [l][c]);
		}
	}
	return da_matriz;
}	

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

11 horas atrás, Mauro Britivaldo disse:

Função que conta o número de ocorrências dos caracteres e lista o resultado: entende-se por exibir o resultado.

 

void * ocorrencias (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]);

É quase uma regra que toda função que envolve percorrer a matriz pelos índices, não importando o motivo, tem sempre o número de instrução FOR igual o número de dimensões da matriz. Nessa função não é diferente, são 3 instruções FOR: Duas para a matriz de caracteres (FOR-LINHA e FOR-COLUNA), e para vetor de frequência (FOR-COLUNA).

 

FOR-LINHA contém, unicamente, FOR-COLUNA.

FOR-COLUNA da matriz contém os comandos que fazem cálculo e a verificação de frequência e define qual é o caractere de maior valor na matriz de caracteres. Depois de copiar o caractere no índice atual da matriz para uma variável, ela é usada no índice do vetor frequência, logo após o valor na frequência é incrementado. Em seguida essa mesma variável é comparada; o objetivo é determinar se seu valor é o maior já atingido e atualizar outra variável que tem o valor que supera todas as anteriores.

 

FOR-COLUNA do vetor de frequência contém os comandos que imprime o vetor com todas as frequências registradas percorrendo esse mesmo vetor; como o vetor frequência tem o comprimento igual ao limite do valor de um char sem-sinal UCHAR_MAX, torna-se importante saber qual é o maior valor atingido dos caracteres, com isso evitar percorrer o vetor completo (255 elementos) sem necessita. Para contorna esse problema use a variável determinada anteriormente como limitadora do índice de coluna. Como nada garante que existe intervalos sem ocorrências entre 0 e essa variável, é necessário testar se o valor no vetor, no índice atual, é diferente de 0 para só assim imprimir.

 

C11

#define UCHAR_MAX ((unsigned char)(-1))
void * ocorrencias (size_t nlinh, size_t ncolun, char (*da_matriz)[ncolun]){
	size_t frequencia_do [UCHAR_MAX] = {0};
	size_t caract = 0;
	size_t maior_caract = 0;

	for (size_t l = 0; l < nlinh; ++l){
		for (size_t c = 0; c < ncolun; ++c){
			caract = da_matriz [l][c];

			++ frequencia_do [caract];
			if (caract > maior_caract){
				maior_caract = caract;
	}	}	}
	for (size_t c = 0; c <= maior_caract; ++c){
		if (frequencia_do [c]){
			printf ("%ux { %c } \n", frequencia_do [c], c);
	}	}
	return da_matriz;
}

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

@Mauro Britivaldo  Esse seu código é para ser colocado onde código que tenho?

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

int main()
{
	
	srand(time(NULL));

    int i,j,linha,coluna;
    while(linha<1 || coluna<1 || linha>10 ||coluna>10 ){
    printf("Digite as linhas:\n");
    scanf("%d",&linha);
    printf("Digite as colunas:\n");
    scanf("%d",&coluna);
    
}

char mat[linha][coluna];

    for (i=0;i<linha;i++){
    	for (j=0;j<coluna;j++){
		//preenche a matriz com letras maiusculas
       mat[i][j]=rand()%25 + 65;
       //preenche a matriz com letras minusculas
       	mat[i][j]= rand()%25 + 97;
    }
}
    for (i=0;i<linha;i++){
    	for (j=0;j<coluna;j++){
    	if(j%coluna==0)
    	printf("\n");
     printf(" %c",mat[i][j]);
     
    }
}
}

 

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

 

Em 28/06/2020 às 13:56, Mauro Britivaldo disse:

Função que recebe um caractere e retorna se caixa alta quociente de 10 senão produto de 2 .

 

Basicamente com um parâmetro a função retorna dois produtos, sendo que um deles na verdade é uma divisão.

 

Se o valor no parâmetro é um caractere maiúsculo do alfabeto retorna seu valor numérico multiplicado pelo quociente de 1/10 senão multiplicado por 2. Uma alternativa a bloco de decisão IF-ELSE, chama-se operador ternário (?), ele é um operador que realiza tarefa semelhante ao bloco IF e com menos letras nas palavras chave. 

 

C11

#define CAIXA_ALTA(ch) (('A' - 1) < (ch) && (ch) < (1 + 'Z'))
#define 	R_SIM 0.1 //> Quociente de 10
#define 	R_NAO 2.0 //> Produto de 2
float caso (char var){
	return var * (CAIXA_ALTA(var)? R_SIM : R_NAO);
}

 

 

4 horas atrás, Yank Marsh disse:

Esse seu código é para ser colocado onde código que tenho?

 

São 3x funções definidas para a chamada dentro da função main, por isso, coloque-as no topo onde podem ser vistas por todo o código, antes de main. Tudo em um novo código porque essas funções não são adaptadas para o código atualmente em discussão, mas sim para teste de lógica, execução e se tudo estiver bem uma alternativa de solução para o exercício. 

 

Na função main do novo código, faça testes das 3 funções. Eu realizei poucos testes e todos os resultados saíram como esperado de uma entrada ideal. Teste você também! Compartilhe os resultados inesperados.

 

Estude o que cada uma das funções faz, e se estão de acordo, sem erros, monte uma solução que precisa como se fosse um quebra cabeça.

 

Exemplo de um Teste: ler 6 caracteres (sem espaço) e guarda na matriz.

int main (void){
	char matriz [10][10] = {0};

	printf ("Teste: Ler matriz! \n");
	ler (2, 3, matriz);
	
	return 0;
}

 

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

Basicamente, main é a função mediadora das funções.

 

A medida que se lê o enunciado, mais e mais funções surgem. Por mais tentado que é escrever toda a solução em um bloco de código para deixá-lo completinho "socado" e apertado na função main, essa é uma prática não recomendada. Não importa a complexidade do programa, a função main precisa do mínimo de instruções possíveis. Na qualidade de Central e comandante do código, main é a principal.

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

Em 28/06/2020 às 09:40, Yank Marsh disse:

asasa.png.cb4bccb7c11c0710c4e38d20a38acec5.png

 

Não suporta matrizes de comprimento variável.

Já que ele (o compilador) não se dá o trabalho de traduzir para a alocação dinâmica então faça tu mesmo!

 

Contudo, dessa vez siga igual recomenda na mensagem. Visto que, o máximo valor nas dimensões é 10x10.

char mat [10][10] = {0};

Tem o máximo disponível, necessário ou não.

 

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

@Mauro Britivaldo Cara eu não consegui implementar seu código, pois não entendi. É  que sou iniciante ainda, fiz poucos programas, será que você poderia Copiar o código que o @herbertbahia fez e fazer mudanças nele? Ou pode ser um código novo que funcione no visual studio. Eu mesmo não consigo fazer isso não.

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

int main()
{
	
	srand(time(NULL));

    int i,j,linha,coluna;
    while(linha<1 || coluna<1 || linha>10 ||coluna>10 ){
    printf("Digite as linhas:\n");
    scanf("%d",&linha);
    printf("Digite as colunas:\n");
    scanf("%d",&coluna);
    
}

char mat[linha][coluna];

    for (i=0;i<linha;i++){
    	for (j=0;j<coluna;j++){
		//preenche a matriz com letras maiusculas
       mat[i][j]=rand()%25 + 65;
       //preenche a matriz com letras minusculas
       	mat[i][j]= rand()%25 + 97;
    }
}
    for (i=0;i<linha;i++){
    	for (j=0;j<coluna;j++){
    	if(j%coluna==0)
    	printf("\n");
     printf(" %c",mat[i][j]);
     
    }
}
}

 

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

image.png.e96bf8e8b14c372d3901a7dee3174a64.png

 

O compilador foi direto ao assunto, em bom português: a expressão deve possuir um valor constante. a linha pode ser variável, um troço que é chamado VLA em C99 mas não é comum. Mas coluna tem que ser constante. Só isso. Nada tem a ver com o compilador. É apenas a definição.

 

Ou você declara

char mat[30][34];

ou você declara

char* mat[34];

ou você declara

char** mat;

Mas nunca

char mat[linha][coluna];

E onde estão os asteriscos quer dizer que são ponteiros para uma área que você vai criar quando o programa estiver rodando, porque quando está escrevendo o programa você não sabe ainda o valor de que vai precisar. E não quer declarar nem mais nem menos.
 

Em resumo: ou você declara valores no programa:

  • que o compilador já sabe o que são
  • ou que serão conhecidos na hora em que o programa está rodando: vê o tamanho certo, por exemplo lendo os valores de linha e coluna, e aloca memória de acordo.

Alocação dinâmica ou estática são chamadas essas opções.

 

Em 28/06/2020 às 09:52, herbertbahia disse:

parece que você ta usando visual studio e ele é bem chatinho mesmo, mas depois vou da uma olhada pra ver se consigo resolver nele. aconselho usar code blocks 20.03 ou dev c++

 

Forum é mesmo para discussão. :) Eu por outro lado recomendo muito fugir de Code::blocks em especial. E dev-C++ apesar de ser rápido. 

 

Visual Studio é sólido e confiável e não era opção enquanto era muito caro. Só por isso. Mas há anos tem a versão Community que é grátis. E em termos de funcionalidade não tem como comparar com nada, talvez pela simples diferença de orçamento de quem desenvolve.
 

A Microsoft usa Visual Studio, a Boeing usa, a NASA usa, o BRADESCO usa. Todos os bancos e financeiras usam, muitas (todas) universidades usam. Se você usa isso e for trabalhar na Polônia o IDE não vai ser seu problema. Agora se você usa Code::Blocks é outra parada. A interface é antiquada, a atualização é eventual, os recursos minimalistas. Nunca fui em uma empresa que usasse isso, por exemplo. E foram muitas :) 

 

Se quer por alguma razão usar algo não-MicroSoft em Windows, use Eclipse ou NetBeans. Clion é muito bom, mas caro pra caramba. JetBrains sabe escrever essas ferramentas.
 

E se Visual Studio não for opção, então Visual Studio Code é muito flexível e moderno e o editor é uma beleza e dá pra usar com Linux e Mac e dá pra usar vários compiladores e compilar no Linux sem sair do Windows. Tipo mágica. É uma opção. 

 

9 horas atrás, Yank Marsh disse:

Ou pode ser um código novo que funcione no visual studio

 

No geral não há qualquer diferença entre um código no Visual Studio e um código no Linux nesse tipo de programa. Nada.


Tem uma diferença no uso de scanf() e outras funções desse tipo, que são consideradas não-seguras. E a Microsoft criou uma família de versões seguras mas nunca conseguiu que elas fossem aprovadas pelo comitê para inclusão no padrão da linguagem. E assim tem esse pesadelo do compilador reclamar desas funções sempre. Claro, basta incluir uma linha, e que aparece claramente descrita a cada vez que você tenta usar isso, mas como vemos aqui nem sempre se lê as mensagens de erro.

Tem uma diferença no tratamento de clock() e umas funções de temporização que são um pesadelo, mas dificilmente vai aparecer em programas para iniciantes.

 

De volta ao seu programa

 

Considere todos os exemplos que tem aqui, e faça seu programa aos poucos.. Apenas comece lendo a matriz e mostrando na tela, antes de prosseguir. E poste o código e podemos ajudar com mais precisão.

 

 

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

A matriz está funcionando,MAS:

1 não gera letras maiusculas.

2 Não conta o numero de cada ocorrencia de caracteres, e não lista eles.

A solução vai ser tirar o gerador de letras. "mat[j]=rand()%25 + 65;" e colocar o usuario para digitar todos os caracteres da matriz. Pegar o número de vezes que cada caractere aparece na matriz e imprimir no final. Como você faria? se possivel use o codigo abaixo. Muito obrigado mesmo pela sua ajuda amigo desenvolvedor, eu estou quase terminando o programa, já estamos em 50%.

 

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

int main()
{

    srand(time(NULL));

    int i, j, linha=0, coluna=0;
    while (linha < 1 || coluna < 1 || linha>10 || coluna>10) { // funçao enquanto 
        printf("Digite as linhas:\n");     //digite as linhas
        scanf_s("%d", &linha);              // salva linhas
        printf("Digite as colunas:\n");    // digite as colunas
        scanf_s("%d", &coluna);          //salva as colunas

    }

    char mat[10][10];       //cria matriz de caracteres

    for (i = 0; i < linha; i++) {        //contador de linhas
        for (j = 0; j < coluna; j++) {    //contador de colunas
            //preenche a matriz com letras maiusculas
            mat[j] = rand() % 25 + 65;
            //preenche a matriz com letras minusculas
            mat[j] = rand() % 25 + 97;
        }
    }
    for (i = 0; i < linha; i++) {        //contador de linhas
        for (j = 0; j < coluna; j++) { //contador de colunas
            if (j % coluna == 0)      //coluna nao pode ser falso
                printf("\n");           //imprime tela vazia
            printf(" %c", mat[j]);   // imprime linhas e colunas

        }
    }
}

 

 

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

@Yank Marsh    para fazer a contagem de ocorrência de cada caractere use mais dois loop's , e uma matriz auxiliar , e seu código poderia ser assim  :

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
int main(){
    srand(time(NULL));
    int i,t,j,w,k,c=0,linha=0, coluna=0,
        achou=0, v_c[100], v_i[100]={0};
    while (linha < 1 || coluna < 1 ||
           linha>10 || coluna>10   ){     // funçao enquanto
        printf("Digite as linhas: ");     // digite as linhas
        scanf("%d", &linha);              // salva linhas
        printf("Digite as colunas: ");    // digite as colunas
        scanf("%d", &coluna);             // salva as colunas
    }
    char mat[linha][coluna];              // cria matriz de caracteres
    char mat_aux[linha][coluna];          // cria matriz auxiliar para preservar a Original
    for( i=0; i<linha; i++ ){             // contador de linhas
        for( j=0; j<coluna; j++ ){        // contador de colunas
            printf("Elemento[%d][%d] ",i+1,j+1);
            fflush(stdin);                // comando não recomendável mas necessário
            scanf("%c",&mat[i][j]);       // armazena o caractere na matriz
            mat_aux[i][j] = mat[i][j];    // armazena também na matruiz auxiliar
                                          // t eh um caractere que não pode ter na martriz
            if( achou )t++;               // nao pode ser esse caractere
            achou = 0;                    // vai scolher outro caractere
            if( ! i && ! j )t=mat[i][j];  // inicializa a variável t com o primeiro caractere da matriz
            if(mat[i][j] == (char)t)      // t é um caractere que não pode estar na matriz
                achou = 1;
        }
    }
    for( i=0; i<linha; i++ ){             //contador de linhas
        for( j=0; j<coluna; j++ ){        //contador de colunas
            v_c[c] = mat[i][j];           // pega um caractere da matriz
            mat_aux[i][j]=(char)t;        // coloca um caractere para marcar como já lido
            v_i[c]++;                     // incrementa em huma unidade a qtd de ocorrência desse caractere
            for(w=0; w<linha; w++){       // vai comparar com todas as linhas
                for(k=0; k<coluna; k++){  // vai comparar com todas as colunas
                    if(v_c[c] == mat_aux[w][k] ){
                        v_i[c]++;         // incrementa em huma unidade a qtd de ocorrência desse caractere
                        mat_aux[w][k] = (char)t;// caractere já lido nessa matriz auxiliar
                    }
                }
            }
            c++;
            if (j % coluna == 0)          //coluna nao pode ser falso
                printf("\n");             //imprime tela vazia
            printf(" %c", mat[i][j]);     // imprime linhas e colunas
        }
    }
    printf("\n\nOcorrencia dos Careacteres\n\n");
    for(i=0;i<linha*coluna; i++ ){
        if(v_c[i] != (char)t)
            printf("O Caractere  < %c >  Apareceu %d Vezes . . . !\n",
                                                       v_c[i],v_i[i]);
    }
    printf("\n\n");
    return 32768;
}

 

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

@devair1010 Muito obrigado meu parceiro Devair você me ajudou a concluir 75% do projeto, seu código está Maravilhoso!!

Gostaria de agradecer sua ajuda e a de todos aqui, pois sem vcs não daria pra fazer isso.

Agora só falta 25%: 1 Pegar o primeiro caractere digitado na matriz e transforma-lo Se maiusculo  Caractere/10, Senão Caractere*2. Agradeço quem puder ajuda, pois eu tentei fazer no Final deste código, mas não está dando certo!!

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
int main(){
    srand(time(NULL));
    int i,t,j,w,k,c=0,linha=0, coluna=0,
        achou=0, v_c[100], v_i[100]={0};
    while (linha < 1 || coluna < 1 ||
           linha>10 || coluna>10   ){     // funçao enquanto
        printf("Digite as linhas: ");     // digite as linhas
        scanf("%d", &linha);              // salva linhas
        printf("Digite as colunas: ");    // digite as colunas
        scanf("%d", &coluna);             // salva as colunas
    }
    char mat[10][10];              // cria matriz de caracteres
    char mat_aux[10][10];
    for( i=0; i<linha; i++ ){             // contador de linhas
        for( j=0; j<coluna; j++ ){        // contador de colunas
            //preenche a matriz com letras maiusculas
            printf("Elemento[%d][%d] ",i+1,j+1);
            fflush(stdin);
            scanf("%c",&mat[i][j]);
            mat_aux[i][j] = mat[i][j];
            // t eh um caractere que não pode ter na martriz
            if( achou )t++;               // nao pode ser esse caractere
            achou = 0;                    // vai scolher outro caractere
            if( ! i && ! j )t=mat[i][j];  // inicializa a variável t com o primeiro caractere da matriz
            if(mat[i][j] == (char)t)      // t é um caractere que não pode estar na matriz
                achou = 1;
        }
    }
    for( i=0; i<linha; i++ ){             //contador de linhas
        for( j=0; j<coluna; j++ ){        //contador de colunas
            v_c[c] = mat[i][j];           // pega um caractere da matriz
            mat_aux[i][j]=(char)t;
            v_i[c]++;
            for(w=0; w<linha; w++){       // vai comparar com todas as linhas
                for(k=0; k<coluna; k++){  // vai comparar com todas as colunas
                    if(v_c[c] == mat_aux[w][k] ){
                        v_i[c]++;
                        mat_aux[w][k] = (char)t;// caractere excluido
                    }
                }
            }
            c++;
            if (j % coluna == 0)          //coluna nao pode ser falso
                printf("\n");             //imprime tela vazia
            printf(" %c", mat[i][j]);     // imprime linhas e colunas
        }
    }
    printf("\n\nOcorrencia dos Careacteres\n\n");//imprime na tela numero de ocorrencias
    for(i=0;i<linha*coluna; i++ ){   //laço para contar numero de ocorrencias
        if(v_c[i] != (char)t) //verifica a condição 
            printf("O Caractere  < %c >  Apareceu %d Vezes . . . !\n",  //imprime na tela as ocorrencias
                                                       v_c[i],v_i[i]); 
    }
      char recebe=mat[1][1]; //criar funçao que recebe a primeira posiçao da matriz
      if(recebe==uppercase){ //testa se o caractere e maiusculo
              recebe = recebe/ 10;
                            printf("\n o valor do Caractere divido por 10 e: %c / 10", recebe);
                            }
                            else{
                            recebe= recebe*2;
                            printf("O valor da variavel multiplicado por 2 é %c * 2", recebe);
                            }
                            
    printf("\n\n");
    return 32768;
}

 

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

@Yank Marsh     esse código que postei acima ficou com um erro , então aqui ele corrigido e com a função :

#include <stdio.h>
#include <string.h>
#include <time.h>
#include <stdlib.h>
float funcao_recebe(char A);
int main(){
    srand(time(NULL));
    int i,t,j,w,k,c=0,linha=0, coluna=0,
        achou=0, v_c[100], v_i[100]={0};
    while (linha < 1 || coluna < 1 ||
           linha>10 || coluna>10   ){     // funçao enquanto
        printf("Digite as linhas: ");     // digite as linhas
        scanf("%d", &linha);              // salva linhas
        printf("Digite as colunas: ");    // digite as colunas
        scanf("%d", &coluna);             // salva as colunas
    }
    char mat[linha][coluna];              // cria matriz de caracteres
    char mat_aux[linha][coluna];
    for( i=0; i<linha; i++ ){             // contador de linhas
        for( j=0; j<coluna; j++ ){        // contador de colunas
            //preenche a matriz com letras maiusculas
            printf("Elemento[%d][%d] ",i+1,j+1);
            fflush(stdin);
            scanf("%c",&mat[i][j]);
            mat_aux[i][j] = mat[i][j];
            // t eh um caractere que não pode ter na martriz
            if( achou )t++;               // nao pode ser esse caractere
            achou = 0;                    // vai scolher outro caractere
            if( ! i && ! j )t=mat[i][j];  // inicializa a variável t com o primeiro caractere da matriz
            if(mat[i][j] == (char)t)      // t é um caractere que não pode estar na matriz
                achou = 1;
        }
    }
    for( i=0; i<linha; i++ ){             //contador de linhas
        for( j=0; j<coluna; j++ ){        //contador de colunas
            v_c[c] = mat_aux[i][j];       // pega um caractere da matriz
            mat_aux[i][j]=(char)t;
            v_i[c]++;
            for(w=0; w<linha; w++){       // vai comparar o caractere com todos nessas linhas
                for(k=0; k<coluna; k++){  // vai comparar o caractere com todos nessas colunas
                    if(v_c[c] == mat_aux[w][k] ){
                        v_i[c]++;
                        mat_aux[w][k] = (char)t;// caractere excluido dessa matriz auxiliar
                    }
                }
            }
            c++;
            if (j % coluna == 0)          // coluna nao pode ser falso
                printf("\n");             // imprime tela vazia
            printf(" %c", mat[i][j]);     // imprime linhas e colunas
        }
    }
    printf("\n\nOcorrencia dos Careacteres\n\n");
    for(i=0;i<linha*coluna; i++ ){
        if(v_c[i] != (char)t)
            printf("O Caractere  < %c >  Apareceu %d Vezes . . . !\n",
                                                       v_c[i],v_i[i]);
    }
    printf("\n");
    printf("O Caractere Enviado para a funcao = %.2f", funcao_recebe( mat[0][0] ) );
    printf("\n\n");
    return 32768;
}
float funcao_recebe(char A){
    char B = toupper(A);
    printf("valor decimal do char = %d\n",A);
    if( B == A )return (float) A/10;
    else        return (float) A*2;
}

 

  • Curtir 1
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...