0

Como melhorar este código?

R
Renan Scarabelli

Criei este código como atividade para a faculdade, A solicitação era: Criar um código que leia 5 números e informe qual o maior e qual o menor entre eles, tive a ideia de fazer deste modo, mas sei que poderia ser melhor. Quem puder dar dicas, serão bem vindas.


#include <stdio.h>

#include <stdlib.h>

#include <locale.h>


int main (){

setlocale(LC_ALL, "");

int a, b, c, d, e, ma, me;

printf("Digite o primeiro número:");

scanf("%d",&a);

printf("Digite o segundo número:");

scanf("%d",&b);

printf("Digite o terceiro número:");

scanf("%d",&c);

printf("Digite o quarto número:");

scanf("%d",&d);

printf("Digite o quinto número:");

scanf("%d",&e);

printf("\n");

if (a>b){

ma = a;

}

else{

ma = b;

}

if (ma > c){

ma = ma;

}

else{

ma = c;

}

if (ma > d){

ma = ma;

}

else{

ma = d;

}

if (ma > e){

ma = ma;

}

else{

ma = e;

}

printf("O maior número entre %d, %d, %d, %d e %d é: %d\n\n", a, b, c, d, e, ma);

if (a<b){

me = a;

}

else{

me = b;

}

if (me < c){

me = me;

}

else{

me = c;

}

if (me < d){

me = me;

}

else{

me = d;

}

if (me < e){

me = me;

}

else{

me = e;

}

printf("O menor número entre %d, %d, %d, %d e %d é: %d\n", a, b, c, d, e, me);

system("pause");

return(0);

}

0
0

Comentários (6)

0
R

Renan Scarabelli

27/06/2021 12:41

É muito interessante ver as ideias, cada programador tem seu estilo e isso é visivel nos códigos. Obrigado pela interação pessoal, vou realizar alguns testes.

1
G

Gabriel Freitas

27/06/2021 07:42

Olá Renan,

Criar um laço de repetição para leitura desse 5 números talvez seria uma boa opção, diminuiria algumas linhas de códigos.

Para saber se é maior/menor, é só você colocar o primeiro número sempre como o maior/menor, depois disso é só fazer a condição de se o maior/menor número (que era o primeiro) foi maior/menor que o segundo, ele mantem, caso contrario, troca, e assim até o ultimo número;


Não sei se entendeu a explicação, mas qualquer duvida pergunta que estarei a disposição.

#include <stdio.h>


int main(){
    int maiorNumero = 0, menorNumero = 0, numeros = 0, aux = 0;
    for(int i = 0; i < 5; i++){
        printf("Digite o %dº numero: ", i+1);
        scanf("%d", &numeros);
        
        if(aux == 0){
            maiorNumero = numeros;
            menorNumero = numeros;
            aux++;
        }
        if(numeros > maiorNumero)
            maiorNumero = numeros;
        if(numeros < menorNumero)
            menorNumero = numeros;
    }
    printf("\nMaior numero: %d \nMenor numero: %d", maiorNumero, menorNumero);
}

Espero ter ajudado.

1
P

Paulo Careli

27/06/2021 03:31

Olá Renan!

Você pode por exemplo utilizar alguma estrutura de repetição (while, for, do...while....):


int qtd_numeros = 5, set_aux = 0;
int temp = 0;

for(int i=0;i<qtd_numeros;i++)
{
  printf("Digite o primeiro número:");
  scanf("%d",&temp);
  if(set_aux == 0) 
  {
    maior = temp;
    menor = temp;
    set_aux = 1;
  }
  if(temp > maior) maior = temp;
  if(temp < menor) menor = temp; 
}


Você pode ainda utilizar arrays caso queira guardar os valores e fazer algo depois:


int qtd_numeros = 5, set_aux = 0;
int a[5] = { };

for(int i=0;i<qtd_numeros;i++)
{
  printf("Digite o primeiro número:");
  scanf("%d",&a[i]);
  if(set_aux == 0) 
  {
    maior = a[i];
    menor = a[i];
    set_aux = 1;
  }
  if(a[i] > maior) maior = a[i];
  if(a[i] < menor) menor = a[i]; 
}


0
Rafael Santos

Rafael Santos

27/06/2021 03:27

Seria interessante utilizar um array de 5 posições do tipo int, ao invés de 5 variáveis diferentes, para armazenar os números lidos. Fazendo uso do array, a leitura dos dados de entrada poderia ser feita em um loop for ou while, onde a cada iteração incrementa-se a posição do vetor em que será armazenado o valor lido da entrada de dados. Também poderia ser bom usar nomes de variáveis mais claros (maior no lugar de ma, e troque me por menor), tentar melhorar a indentação do código e também modificar os condicionais utilizados, visto que um comando como "ma = ma;" não realiza nenhuma modificação de fato no código. Inclusive, para avaliar o maior número, seria interessante realizar isso também em loop, estabelecendo o maior valor inicial como aquele da primeira posição do vetor, e iterando sobre as demais posições para encontrar o maior valor dentre os números do vetor. De forma parecida, realizar esse processo no caso de encontrar o menor valor. Se tiver qualquer dúvida, só perguntar aqui.

1
C

Caio Brone

27/06/2021 03:23

Antes do print(\n) eu faria assim

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

int tamanho(int numero){
    return (int)sizeof(numero) + 1;
}

int capturaValor(char* posicao){
    int valor;
    printf("Digite o %s número --->\t", posicao);
    scanf("%d",&valor);
    return valor;
}

int maxTwoNumbers(int numero1, int numero2){
    if (numero1 > numero2){
        return numero1;
    }
    return numero2;
}

int minToNumbers(int numero1, int numero2){
    if (numero1 < numero2){
        return numero1;
    }
    return numero2;
}

int max(int* array){
    int maior;
    maior = maxTwoNumbers(array[0], array[1]);
    for (int i=2; i< tamanho(array);i++) {
        maior = maxTwoNumbers(array[i], maior);
    }
    return maior;
}

int min(int* array){
    int menor;
    menor = minToNumbers(array[0], array[1]);
    for (int i=2; i< tamanho(array);i++) {
        menor = minToNumbers(array[i], menor);
    }
    return menor;
}

int main (){
    setlocale(LC_ALL, "");
    int numero[5];
    numero[0] = capturaValor("primeiro");
    numero[1] = capturaValor("segundo");
    numero[2] = capturaValor("terceiro");
    numero[3] = capturaValor("quarto");
    numero[4] = capturaValor("quinto");

    printf("\n");

    printf("O maior número entre %d, %d, %d, %d e %d é: %d\n\n", numero[0], numero[1], numero[2], numero[3], numero[4], max(numero));
    printf("O menor número entre %d, %d, %d, %d e %d é: %d\n", numero[0], numero[1], numero[2], numero[3], numero[4], min(numero));
    system("pause");

    return(0);

}


Mexi com C pouco, mas para dar uma mexida, eu usei uma pegada mais funcinal, esse nomes ai que coloquei ficaram meio mééé.

0
R

Rafael Araújo

27/06/2021 03:16

Partindo seu código, dá pra por exemplo reduzir a quantidade de if - else, como fiz abaixo, mas a melhor forma de se fazer isso é usando for e um vetor, dessa forma você reduziria bem mais a quantidade de linhas de código e variáveis.


Outra alteração que fiz, foi trocar o nome das variáveis para ficar mais legível.


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

int main (){

setlocale(LC_ALL, "");

int n1, n2, n3, n4, n5, ma, me;

printf("Digite o primeiro número:");

scanf("%d",&n1);


printf("Digite o segundo número:");


scanf("%d",&n2);


printf("Digite o terceiro número:");


scanf("%d",&n3);


printf("Digite o quarto número:");


scanf("%d",&n4);


printf("Digite o quinto número:");


scanf("%d",&n5);


printf("\n");


if (n1>n2){


ma = n1;
me = n2;
}
else if (n1<n2){


ma = n2;
me = n1;
} 
else if(ma < n3){


ma = n3;


}


else if (ma < n4){


ma = n4;


}  if (ma<n5){


ma = n5;


} else if(me>n3){
    me = n3;
}


else if(me>n4){
    me = n4;
}


else if(me>n5){
    me = n5;
}


printf("O maior número entre %d, %d, %d, %d e %d é: %d\n\n", n1, n2, n3, n4, n5, ma);
printf("O menor número entre %d, %d, %d, %d e %d é: %d\n", n1, n2, n3, n4, n5, me);


system("pause");


return(0);


}

None

Brasil