Ir para conteúdo
Entre para seguir isso  
Andre0111

Dicas para melhor algoritmo--> números divisíveis por 2 e por 3

Recommended Posts

Pessoal,

Fiz esse algoritmo em C para receber 4 números inteiros e dizer quais são divisíveis por 2 e por 3. Algo simples, porém tem um detalhe.

Eu preciso que quando somente 1 número atenda essa condição, apareça apenas "O número tal é divisível por 2 e por 3" e quando for mais de 1 número, apareça:

"Os números divisíveis por 2 e por 3 são:

tal

tal

tal

..."

Eu consegui fazer isso, porém acho que deve existir uma forma mais simples de conseguir a mesma solução. Alguém conhece algo melhor para se fazer nesse caso?

Segue o código:

#include<stdlib.h>
#include<stdio.h>
#include<locale.h>
#include<conio.h>

//Algoritmo_divisivel_2_e_3

//var
int a,b,c,d,i=0,s=0;

main(){
	//locale
	setlocale(LC_ALL,"Portuguese");
	//input && processing && output
	printf("Informe 4 números inteiros: ");
	scanf("%d %d %d %d",&a,&b,&c,&d);
	
	printf("\n");
	
	
	if((a%2==0)&&(a%3==0) || (b%2==0)&&(b%3==0) || (c%2==0)&&(c%3==0) || (d%2==0)&&(d%3==0)){
		
		if((a%2==0)&&(a%3==0)){
			i=1; //i==> contador para uso do singular (O número %d é divisível por 2 e por 3)
			s=s+i; //s==> acumulador para uso do plural (Os números divisíveis por 2 e por 3 são:)
		}
		
		if((b%2==0)&&(b%3==0)){
			i=2;
			s=s+i;
		}	
		
		if((c%2==0)&&(c%3==0)){
			i=10;
			s=s+i;
		}	
		
		if((d%2==0)&&(d%3==0)){
			i=14;
			s=s+i;
		}	
	}
	
	else{
		printf("Nenhum dos números informados é divisível por 2 e por 3");
	}
	
	
	if((s==1) || (s==2) || (s==10) || (s==14)){
		
		if(i==1){
			printf("O número %d é divisível por 2 e por 3",a);	
		}
		if(i==2){
			printf("O número %d é divisível por 2 e por 3",b);	
		}
		if(i==10){
			printf("O número %d é divisível por 2 e por 3",c);	
		}
		if(i==14){
			printf("O número %d é divisível por 2 e por 3",d);	
		}	
	}
	else if((s==3) || (s==11) || (s==12) || (s==13) || (s>14)){
		
			//s==3 --> a e b / s==11--> a e c / s==12--> b e c / s==13--> a,b e c
			//s>14--> todas as outras combinações
			
			printf("Os números divisíveis por 2 e por 3 são: \n");
			if((a%2==0)&&(a%3==0)){
				printf("%d \n",a);
			}
			
			if((b%2==0)&&(b%3==0)){
				printf("%d \n",b);
			}	
			
			if((c%2==0)&&(c%3==0)){
				printf("%d \n",c);
			}	
			
			if((d%2==0)&&(d%3==0)){
				printf("%d \n",d);
			}		
		}	
	getch();
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Consegui melhorar o código, mas ainda acho que deve ter outra forma de fazer isso.

#include<stdlib.h>
#include<stdio.h>
#include<locale.h>
#include<conio.h>

//Divisível por 2 e por 3

//var
int a,b,c,d,i=0,ii=0,s=0,x,y,z,e,f;
main(){
	//locale
	setlocale(LC_ALL,"Portuguese");
	
	//input && processing && output
	printf("Informe 4 números inteiros para saber quais deles são divisíveis por 2 por 3: ");
	scanf("%d %d %d %d",&a,&b,&c,&d);
	
	
	if((a%2==0)&&(a%3==0) || (b%2==0)&&(b%3==0) || (c%2==0)&&(c%3==0) || (d%2==0)&&(d%3==0)){
		if((a%2==0)&&(a%3==0)){
			i=1;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		if((b%2==0)&&(b%3==0)){
			i=2;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		if((c%2==0)&&(c%3==0)){
			i=10;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		if((d%2==0)&&(d%3==0)){
			i=14;//contador para uso do singular
			s=s+i;//acumulador para uso do plural
		}
		
	}
	else{
		printf("Nenhum dos números informados é divisível por 2 e por 3");
	}
	
	
	if((s!=0)&&(i!=0)){
	
		if((s==i)){ //apenas 1 dos números é divisível por 2 e por 3
			if((a%2==0)&&(a%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",a);
			}
			if((b%2==0)&&(b%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",b);
			}
			if((c%2==0)&&(c%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",c);
			}
			if((d%2==0)&&(d%3==0)){
				printf("Somente o número %d é divisível por 2 e por 3",d);
			}
		
		}
		else{
			if((a%2==0)&&(a%3==0)){
				if((a==b)||(a==c)||(a==d)){
					x=1;
				}else{//(a!=b)&&(a!=c)&&(a!=d)
					y=1;
				}
			}
			if((b%2==0)&&(b%3==0)){ 
				if(b==a){
					x=1;
				}
				if(b==c){
					x=2;
				}
				if(b==d){
					x=10;
				}
				if((b!=a)&&(b!=c)&&(b!=d)){
					z=1;
				}
			}
			if((c%2==0)&&(c%3==0)){
				if(c==a){
					x=1;
				}
				if(c==b){
					x=2;
				}
				if(c==d){
					x=14;
				}
				if((c!=a)&&(c!=b)&&(c!=d)){
					e=1;
				}
			}
			if((d%2==0)&&(d%3==0)){
				if(d==a){
					x=1;
				}
				if(d==b){
					x=10;
				}
				if(d==c){
					x=14;
				}
				if((d!=a)&&(d!=b)&&(d!=c)){
					f=1;
				}
			}	
			if((x==1)||(y==1)){
				ii++;
			}
			if((x==2)||(z==1)){
				ii++;
			}
			if((x==14)||(e==1)){
				ii++;
			}
			if((f==1)||(x==10)){
				ii++;
			}
			
			if(ii==1){
				printf("O número divisível por 2 e por 3 é: \n");
			}else if(ii>1){
				printf("Os números divisíveis por 2 e por 3 são: \n");
			}
			
			if((x==1)||(y==1)){
				printf("%d \n",a);
			}
			if((x==2)||(z==1)){
				printf("%d \n",b);
			}
			if((x==14)||(e==1)){
				printf("%d \n",c);
			}
			if((f==1)||(x==10)){
				printf("%d \n",d);
			}
		}			
	}	
}

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 25/09/2016 at 18:45, Andre0111 disse:

Consegui melhorar o código, mas ainda acho que deve ter outra forma de fazer isso.

 

Tem. Segue abaixo:

int verifica(int *variavel, int *bandeira){
  if((((*variavel)%2)==0)&&(((*variavel)%3)==0))
    *bandeira=1;
  else
    *bandeira=0;
}

int main(){
  int a,b,c,d,bandeiraa,bandeirab,bandeirac,bandeirad,conta_bandeiras=0;
  printf("Informe 4 numeros:");
  scanf("%d%d%d%d",&a,&b,&c,&d);
  verifica(&a,&bandeiraa);
  verifica(&b,&bandeirab);
  verifica(&c,&bandeirac);
  verifica(&d,&bandeirad);
  if(bandeiraa)
    conta_bandeiras++;  
  if(bandeirab)
    conta_bandeiras++;
  if(bandeirac)
    conta_bandeiras++;
  if(bandeirad)
    conta_bandeiras++;
  if(conta_bandeiras==1){
    printf("O numero ");
    if(bandeiraa)
      printf("%d",a);
    else if(bandeirab)
      printf("%d",b);
    else if(bandeirac)
      printf("%d",c);
    else if(bandeirad)
      printf("%d",d);  
    printf(" e divisivel por 2 e por 3.");
  }
  else if(conta_bandeiras>1){
    printf("Os numeros divisiveis por 2 e por 3 sao:\n");
    if(bandeiraa)
      printf("%d\n",a);
    if(bandeirab)
      printf("%d\n",b);
    if(bandeirac)
      printf("%d\n",c);
    if(bandeirad)
      printf("%d\n",d);      
  }
  system("pause");    
}

 

Editado por Wilkyn Fernandes Taborda
Frase colada muito próximo a frase citada.

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
Entre para seguir isso  

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.