Ir ao conteúdo
  • Cadastre-se
Cristina2000

C RESOLVIDO Erro na lógica programa

Recommended Posts

Olá 

Bom Dia

Estou com um problema neste programa. 

Deve-se entrar com quantos números a sequência deve ter (n) O programa deve parar de aceitar novas entradas

quando chegar a n e mostrar quantos números iguais essa sequencia tem:

Ex:  n=8          55533322  A sequencia tem 3 numeros iguais a 5

                                         A sequencia tem 3 numeros iguais a 3

                                         A sequencia tem 2 numeros iguais a 2

O contador não está funcionando. Ele não para com n numeros. 

int n, num, num1=0, cont=0, cont1=1;
    printf("Digite n\n");
    scanf("%d", &n);
    printf("Digite %d numeros\n", n);
    while(cont<n){
                  scanf("%d", &num);                
                  if(num==num1)
                  cont1++;                               
                  else
                  printf("A sequencia tem %d numeros iguais a %d\n", cont1, num);
                  num1=num;
                  cont++;                                                     
                  }

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

O que acontece aí é que as sequencias podem ter algarismos diferentes

Por exemplo

55533555, tem 8 algarismos

teríamos 1 sequencia de 5 com 3 algarismos

1 sequencia de 3 com 2 algarismos

1 sequencia de 5 com 3 algarismos

 

Primeiro, recomendaria trocar o while por um for, pois você já sabe exatamente quantas iterações serão feitas (n).
Segundo, detectar a mudança de algarismo, que determina o início de uma nova sequencia. Cada vez que uma nova sequencia começar o contador deve ser reinicializado. Como detectar que a sequencia iniciou ? Ou mudou ? Se o algarismo da  iteração anterior é diferente do algarismo corrente. Inicialize uma variável seq_ant com -1 e toda vez que for diferente do atual, começou uma nova sequencia. Reinicie o contador, atualize o seq_ant que passa a ser o atual, exiba o resultado parcial (fim de uma sequencia e início de outra.


Eis a dica. Se precisar de mais apoio, é só gritar.

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

adicionei mais comandos ao código e explicitei melhor a sua lógica@Cristina2000

#include <stdio.h>
int main( void ){
int n, num, 
		num1=0, 
		cont=0, 
		cont1=1;
		
    printf( "Digite n\n" );
    scanf( "%d", &n );
    
    printf("Digite %d numeros\n", n);
    scanf( "%d", &num );
    num1 = num;
    cont++;
    
    while( cont < n ){
    	scanf( "%d", &num );             
        if( num == num1 )
        	cont1++;
        else{
        	if( cont1 > 1 ){
        		printf( "A sequencia tem %d numeros iguais a %d\n", cont1, num );
        		cont1 = 1;
        		}
        	num1 = num;       
            }
         cont++;
         }
	return 0;
    }

Testei para: 4 1 2 2 1 a resposta foi {2 e 1} então funcionou para esse caso 50% certo. Pense qual foi o erro mais quais outros encontrar.

  • 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

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

×