Ir ao conteúdo

Posts recomendados

Postado

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
  • Moderador
Postado

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
Postado
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
  • Moderador
Postado

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

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

@herbertbahia E ai amigo Herbert, estava escrevendo seu código e um erro não me deixa depurar  o programa.

é um Erro na Linha 21 E0028: A expressão deve possuir um valor constante. Esse erro aparece na matriz[linha][coluna];

asasa.png.cb4bccb7c11c0710c4e38d20a38acec5.png

  • Curtir 1
  • Obrigado 1
Postado

"Faça uma algoritmo em C que receba uma matriz de caractere [...] "

 

Uma matriz de caractere do tipo char é mais adequada porque  não desperdiça bytes de memória.

 

A máscara certa para leitura de caractere é "%c"

 

 

  • Curtir 3
Postado

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

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

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

 

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
Postado

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

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

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
Postado

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
Postado

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

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

@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

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!