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

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

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

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

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

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

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

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

×