Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
diogo moura

C Não estou conseguindo zerar os valores do vetor

Recommended Posts

Bom dia, eu consegui desenvolver a logica da questão, o problema é que depois de mostrar os valores, eu tenho que apagar o que há no vetor, para não utilizar o resultado anterior  no próximo caso de teste

 

Link da questão

 

 

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

int main(void)
{
	int i, j, vetor[12], c = 0, teste, k;
	char nome[100];
	char primeiro[7] = {'a', 'k', 'u', 'G', 'Q'}, segundo[7] = {'b', 'l', 'v', 'I', 'S'};
	char terceiro[7] = {'E', 'O', 'Y', 'c', 'm', 'w'}, quarto[7] = {'F', 'P', 'Z', 'd', 'n', 'x'};
	char quinto[6] = {'J', 'T', 'e', 'o', 'y'}, sexto[7] = {'D', 'N', 'X', 'f', 'p', 'z'};
	char setimo[6] = {'A', 'K', 'U', 'g', 'q'}, oitavo[6] = {'C', 'M', 'W', 'h', 'r'};
	char nono[6] = {'B', 'L', 'V', 'i', 's'}, deimo[5] = {'H', 'R', 'j', 't'};

	scanf("%d", &teste);
	for(k = 0; k < teste; k++)
	{
		setbuf(stdin, NULL);
		gets(nome);
		int tam = strlen(nome);
		for(i = 0; i < tam; i++)
		{
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == primeiro[j])
				{
					vetor[c++] = 0;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == segundo[j])
				{
					vetor[c++] = 1;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == terceiro[j])
				{
					vetor[c++] = 2;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == quarto[j])
				{
					vetor[c++] = 3;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == quinto[j])
				{
					vetor[c++] = 4;
				}
			}
			for(j = 0; j < 7; j++)
			{
				if(nome[i] == sexto[j])
				{
					vetor[c++] = 5;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == setimo[j])
				{
					vetor[c++] = 6;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == oitavo[j])
				{
					vetor[c++] = 7;
				}
			}
			for(j = 0; j < 6; j++)
			{
				if(nome[i] == nono[j])
				{
					vetor[c++] = 8;
				}
			}
			for(j = 0; j < 5; j++)
			{
				if(nome[i] == deimo[j])
				{
					vetor[c++] = 9;
				}
			}
		}
		for(i = 0; i < 12; i++)
		{
			printf("%d", vetor[i]);
		}
		printf("\n");
		for(i = 0; i < 12; i++)
		{
			vetor[i] = 0;
		}/* quando eu faço isso só o primeiro resultado é o certo,
			            os outros resultados são apenas zeros/*

	}
	return 0;
}

 

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

pra zerar um vetor/array você pode fazer assim --> 

 

ZeroMemory(vetor, 10); // o vetor a ser zerado e o tamanho dele em bytes

ou 

memset(vetor, 0, 10); // o vetor a ser preenchido, o vetor será preenchido com esse valor (0 no caso)
                      // e o tamanho do vetor em bytes

 

ambos fazem exatamente a mesma coisa, ZeroMemory é implementado com memset..

  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites
  • Autor do tópico
  • Continua o mesmo problema utilizei o que você falou, e continua dando o mesmo erro, o primeiro valor que mostra é o que  sempre o que fica

    @Derleyvolt

    5a67aca9ee752_Semttulo.png.fc3dd0a10e90dcf1ec70d5c3b7619292.png

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    int main()
    {
    	int vetor[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
    
    	memset(vetor, 0, sizeof(vetor));
    
    	for ( size_t i = 0; i < sizeof(vetor) / 4; i++ )
    	{
    		std::cout << vetor[i] << std::endl;
    	}
    
    	system("pause");
    	return 0;
    }

    compile isso e verá que o vetor é zerado.. o problema provavelmente é na sua implementação, mostre o source desse seu segundo exemplo, se puder.

     

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Bom eu consegui zerar o vetor.

    Olha ai imagem ai, só que o vetor não recebe mais valores, só fica mostrando zeros.

    ojfsof.png.e180d6d996d690f943de2ea53fda9f2b.png

    adicionado 2 minutos depois

    Zerei o valor do vetor depois de mostrar na tela, vou colocar a parte do meu código que fiz a alteração

     

    for(i = 0; i < 12; i++)
    {
    	printf("%d", vetor[i]);
    }
    printf("\n");
    memset(vetor, 0, sizeof(vetor));
    

     

    Será que utilizei memset(vetor, 0, sizeof(vetor)); no lugar errado? @Derleyvolt

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    o código está correto, primeiro ele mostra o conteúdo do vetor, ou seja, joga o conteúdo na tela e depois zera o valor.. essa seria a sua intenção, não? caso não, eu ainda entendi qual a real dúvida, a dúvida inicial era como zerar o conteúdo de um array/vetor.. poste o código completo com as alterações que você fez, e me diga como você espera/quer que ele funcione. tenho a noite toda, sem pressa.

    Editado por Derleyvolt
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Eu comentei o código, do que ele vai fazer.

     

    /*Bom o objetivo dessa questão e que cada letra tem um determinado numero*/
    
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main(void)
    {
    	int i, j, vetor[100], c = 0, teste, k;  /*vetor[100] dando do tamanho vetor, c, contador para incrementar
    	o valor, quando encontar uma letra que tem na frase dado a letra ele vai atriburi o valor para o vetor*/
    	char nome[100];
    	char primeiro[7] = {'a', 'k', 'u', 'G', 'Q'}, segundo[7] = {'b', 'l', 'v', 'I', 'S'};
    	char terceiro[7] = {'E', 'O', 'Y', 'c', 'm', 'w'}, quarto[7] = {'F', 'P', 'Z', 'd', 'n', 'x'};
    	char quinto[6] = {'J', 'T', 'e', 'o', 'y'}, sexto[7] = {'D', 'N', 'X', 'f', 'p', 'z'};
    	char setimo[6] = {'A', 'K', 'U', 'g', 'q'}, oitavo[6] = {'C', 'M', 'W', 'h', 'r'};
    	char nono[6] = {'B', 'L', 'V', 'i', 's'}, deimo[5] = {'H', 'R', 'j', 't'};
    
    	//preenchendo o vetor com as letrar
    
    
    	scanf("%d", &teste);
    	for(k = 0; k < teste; k++)
    	{
    		setbuf(stdin, NULL);
    		gets(nome);
    		int tam = strlen(nome);
    		for(i = 0; i < tam; i++)
    		{
    			for(j = 0; j < 7; j++)
    			{
    				if(nome[i] == primeiro[j])  /*aqui eu comparo se na frase tem determinada letra, se ela tiver
    											vai ser atribuido um valor numerico para o vetor, c++, para incrementar*/
    				{
    					vetor[c++] = 0;
    				}
    			}
    			for(j = 0; j < 7; j++)
    			{
    				if(nome[i] == segundo[j])
    				{
    					vetor[c++] = 1;
    				}
    			}
    			for(j = 0; j < 7; j++)
    			{
    				if(nome[i] == terceiro[j])
    				{
    					vetor[c++] = 2;
    				}
    			}
    			for(j = 0; j < 7; j++)
    			{
    				if(nome[i] == quarto[j])
    				{
    					vetor[c++] = 3;
    				}
    			}
    			for(j = 0; j < 6; j++)
    			{
    				if(nome[i] == quinto[j])
    				{
    					vetor[c++] = 4;
    				}
    			}
    			for(j = 0; j < 7; j++)
    			{
    				if(nome[i] == sexto[j])
    				{
    					vetor[c++] = 5;
    				}
    			}
    			for(j = 0; j < 6; j++)
    			{
    				if(nome[i] == setimo[j])
    				{
    					vetor[c++] = 6;
    				}
    			}
    			for(j = 0; j < 6; j++)
    			{
    				if(nome[i] == oitavo[j])
    				{
    					vetor[c++] = 7;
    				}
    			}
    			for(j = 0; j < 6; j++)
    			{
    				if(nome[i] == nono[j])
    				{
    					vetor[c++] = 8;
    				}
    			}
    			for(j = 0; j < 5; j++)
    			{
    				if(nome[i] == deimo[j])
    				{
    					vetor[c++] = 9;
    				}
    			}
    		}
    		for(i = 0; i < 12; i++)
    		{
    			printf("%d", vetor[i]);
    		}
    		printf("\n");  //mostro o vetor
    		memset(vetor, 0, sizeof(vetor));
    		/*Queria limpar o vetor para que eu pudese realizar os proximos testes*/
    		/*Só que depois que o zero o valor do vetor ele não recebe mais nenhum valor*/
    
    	}
    	return 0;
    }

    @Derleyvolt

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diogo moura    e a variável   c  você não zerou ela, ainda não testei seu  código mas vi isso que parece ser o problema .

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Okay.. primeiro, a variável contadora, c, precisa ser zerada..

               

    segundo, dependendo do seu compilador, o vetor virá com lixo de memória, você precisa zerar ele, assim ->

     

    int vetor[100] = {}; // isso zera o vetor. se tiver usando uma versão mais antiga, provavelmente não vai funcionar

    ou 

    int vetor[100];
    
    memset(vetor, 0, sizeof(vetor));

     

    Editado por Derleyvolt
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Bom zerei o contador c, porém os resultados sairão iguais o da questão como a imagem mostra, porém quando fui enviar a questão deu 10 % de erro.jsbbsjfsbfb.png.ecf7252805916ad270582f60c050fe60.png@devair1010 @Derleyvolt

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diogo moura Você quer fazer isso?

     

    #include <cstdio>
    #include <cstdlib>
    
    #define TAMANHO 10
    
    int main()
    {
    	int vetor[10] = { 1,1,1,1,1,1,1,1,1,1};
    
    
        printf("Vetor Inicial: ");
    	for ( int i = 0; i < TAMANHO; i++ )
    	  printf(" %d", vetor[i]);
    
    	//zera vetor
    	for ( int i = 0; i < TAMANHO; i++ )
    	  vetor[i] = 0;
    
    	printf("\n\nVetor Zerado: ");
    	for ( int i = 0; i < TAMANHO; i++ )
    	  printf(" %d", vetor[i]);
    
    	return 0;
    }

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Sim, depois reutilizar o vetor, o problema agora é que o resultados que a questão está fornecendo eu consigo encontrar, só que o juiz está acusando 10 % de erro, sendo que já testei todos os nomes possiveis, e deram certo@CiroboyBR

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diogo moura    o código está certo funciona bem,  mas o uri não aceita, pelo jeito é apenas um detalhe mínimo que ainda não percebemos o que é, tentei com esse outro código, mas também deu 10% de erro . esse código aqui :

    #include <string.h>
    #include <stdio.h>
    int main(){
        char s[200];
        int n,i,k,l;
        scanf("%d",&n);
        while(n--){
            fflush(stdin);
            gets(s);
            l=strlen(s);
            for(i=0,k=0; i<l&&k<12; i++){
                if     (s[i]=='G'||s[i]=='Q'||s[i]=='a'||s[i]=='k'||s[i]=='u'           ) printf("0");
                else if(s[i]=='I'||s[i]=='S'||s[i]=='b'||s[i]=='l'||s[i]=='v'           ) printf("1");
                else if(s[i]=='E'||s[i]=='O'||s[i]=='Y'||s[i]=='c'||s[i]=='m'||s[i]=='w') printf("2");
                else if(s[i]=='F'||s[i]=='P'||s[i]=='Z'||s[i]=='d'||s[i]=='n'||s[i]=='x') printf("3");
                else if(s[i]=='J'||s[i]=='T'||s[i]=='e'||s[i]=='o'||s[i]=='y'           ) printf("4");
                else if(s[i]=='D'||s[i]=='N'||s[i]=='X'||s[i]=='f'||s[i]=='p'||s[i]=='z') printf("5");
                else if(s[i]=='A'||s[i]=='K'||s[i]=='U'||s[i]=='g'||s[i]=='q'           ) printf("6");
                else if(s[i]=='C'||s[i]=='M'||s[i]=='W'||s[i]=='h'||s[i]=='r'           ) printf("7");
                else if(s[i]=='B'||s[i]=='L'||s[i]=='V'||s[i]=='i'||s[i]=='s'           ) printf("8");
                else if(s[i]=='H'||s[i]=='R'||s[i]=='j'||s[i]=='t'                      ) printf("9");
                if(s[i]!=' ')
                    k++;
            }
            printf("\n");
        }
        return 0;
    }

    @diogo moura    qual compilador você está usando ?  eu uso o codeblock que é bom , mas ele é todo em inglês, e pela imagem que você postou seu compilador parece ser em português , creio que seria  melhor .

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Cara eu tõ começando a acreditar que essa questão é impossível do uri aceitar, por que todas as resposta estão certos.@devair1010

     

    Eu utilizo o Falcon C++@devair1010

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Bom dia pessoa,

    Esse problema de simples scan, porém quando envolve conceitos e principalmente quando distorce-os a coisa fica complicada depois de 5 falhas de 10% finalmente percebi a jogada. :thumbsup:

     

     

    Dica: Caracteres em branco não conta!

    GG!

    Capturar.PNG

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
  • Autor do tópico
  • Nossa, já tinha desistido dessa questão, você falou que Caracteres em branco não contam, como eu faria isso, para ler uma string eu só conheço scanf("%s"), scanf("%[^\n]"), gets(), fgest(), qual você ultilizou@Mauro Britivaldo

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    @diogo moura Eu fiz a minha própria MyScanf usando fgetc( stdin ); Porém você pode usar qualquer uma dessas aí.

    Quando tiver de conta a quantidade de caracteres capturados, não conte os espaços em braco, nesta conta não vale os caracteres de espaço.

    32 minutos atrás, diogo moura disse:

    você falou que Caracteres em branco não contam, como eu faria isso

    Retire os espaços da string capturada, exemplo:

    ENTRE: o rato roeu a roupa de margarida
    GRAVE: oratoroeuaroupademargarida 

     

     

     

    Spoiler: Código da Solução

     :thumbsup:

    Editado por Mauro Britivaldo
    Código Fonte
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×