Ir ao conteúdo
  • Cadastre-se

C Exercicio Repetição em C


julialilia

Posts recomendados

Olá pessoal, fiz esse programa mas ele tem alguns erros, não consegui entender bem a logica dele, se vocês poderem me dizer onde esta o erro e como poderia fazer para funcionar me digam por favor e sim eu sei que está errado, mas como disse a cima eu estou com dificuldade em repetição, se poder ajudar, obrigada. A questão é essa :     

.) Faça um programa que leia um número inteiro positivo de três dígitos (de 100 a 999).


Gere três números formados pelos dígitos do número lido (exiba cada número em uma linha) e em seguida:

 

a) Encontre e exiba o maior valor dos três números digitados.

b) Some os dois maiores números e divida pelo menor número.

c) Pare o programa quando o número lido estiver fora do intervalo proposto.

 

E o meu programa é este :

<#include <iostream>
main (){
    int x,y,z, media, maior=0, numerolido, i;
    for (i=1; i>3; i++){
        
    printf ("Numero Lido:\n");
    scanf("%d",&numerolido);
    
    
    if (x == numerolido) {
        x = numerolido;
        printf ("X: %d \n", x);
    
    }
    if (y == numerolido){
        y = numerolido;
        printf ("Y: %d \n", y);
    }
    
    if  (z == numerolido){
        z = numerolido;
            printf ("Z: %d \n", z);
    }
    else if (maior > numerolido){
        printf ("Maior : %d \n", maior);
    }
    else {
        printf ("Media : %d \n", media);
    }
        
    }
    
    
    
}>

 

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

Você colocou for (i=1; i>3;i++) esse é o problema você está dizendo repita o código enquanto i for maior que 3 e nunca vai ser pois está iniciando em 1, faça for(i=1;i<3;i++). Você possivelmente ainda está aprendendo a programar e não tem problema mais sempre evite repetir código (está cheio de if) um bom programador sabe como otimizar isso da melhor forma.

adicionado 2 minutos depois

* não é enquanto é até que, desculpe a confusão

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

Poderia colocar os dígitos dentro de um vetor e ordenar ele, assim você saberia onde encontrar o menor e o maior número. Algo assim:

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

int main() {
    const int quantidade = 3;   // Quantidade de digitos
    int digitos[quantidade];    // Digitos separados

    int entrada = 0;            // Entrada do usuario
    int maior = 0;              // Maior digito (exercicio A)

    double divisao = 0.0;       // Resultado da divisao (exercicio B)

    // Pega os dados do usuario
    printf("Digite um numero com tres algarismos (100 - 999): ");
    scanf(" %i%*c", &entrada);

    // Valida o valor inserido (exercicio C)
    if (entrada < 100 || entrada > 999) {
        fprintf(stderr, "[ E ]: Numero fora do intervalo. \n");
        return EXIT_FAILURE;
    }

    // Separa os numeros em digitos
    digitos[0] = entrada / 100;
    digitos[1] = (entrada / 10) % 10;
    digitos[2] = entrada % 10;

    // Coloca os digitos em ordem DECRESCENTE
    for (int i = 0; i < quantidade - 1; ++i) {
        for (int j = quantidade - 1; j > i; --j) {
            if (digitos[i] < digitos[j]) {
                int temp = digitos[i];
                digitos[i] = digitos[j];
                digitos[j] = temp;
            }
        }
    }

    // Resolver exercicio A)
    maior = digitos[0];

    // Resolver exercicio B)
    divisao = (digitos[2] != 0)
              ? (double) (digitos[0] + digitos[1]) / digitos[2]
              : 0.0;

    // Exibe tudo
    printf("-------------------------------- \n");
    printf("  Maior: %i \n", maior);
    printf("Divisao: %.2f \n", divisao);
    printf("Digitos: [");
    for (int i = 0; i < quantidade; ++i) {
        printf("%i", digitos[i]);
        if (i + 1 < quantidade) printf(", ");
    }
    printf("] \n");
    printf("-------------------------------- \n");

    return EXIT_SUCCESS;
}

 

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

@AdrianoSiqueira ordenação funciona, e na prática em matrizes volumosas é ainda melhor.

 

 

@julialilia Querendo, use duas funções de uma linha cada que resolve de outro jeito.

int imaior (int a, int b){ return a > b ? a : b; }
int imenor (int a, int b){ return a < b ? a : b; }

 

Para determinar o maior e menor de 3 valores int, sem se preocupar com os detalhes.

int primeiro = imaior (imaior (a, b), c);
int terceito = imenor (imenor (a, b), c);

 

E o segundo ?

int segundo = (a + b + c) - (primeiro + terceiro);

 

 

Aritmética "de maçãs". 

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