Ir ao conteúdo
  • Cadastre-se

C Erro na lógica programa


Cristina2000
Ir à solução Resolvido por Ansi C,

Posts recomendados

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++;                                                     
                  }

 

Link para o comentário
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.

 

 

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

  • Solução

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