Ir ao conteúdo

Posts recomendados

Postado

Olá!

Estou com um problema nesta questão: "Escreva um programa que leia um valor inteiro N. A seguir, o programa deve ler outros 1000 valores inteiros, e mostrar na tela quantos destes valores são maiores, iguais ou menores que N."

O problema é que não importa o numero que eu digite sempre vai dar que há 999 maiores do que n, 1000 menores do que n e 1 iguais a n.

Segue o código abaixo

#include <stdio.h>

int main(){
    int num=0, num1=0, num2=0, num3=0;
    printf("Digite um numero: ");
    scanf("%d", &num);
    while(num < 1000){
        num++;
        printf("%d\n", num);
    }
    num1 = num + 1;
    num2 = num - 1;
    num3 = num - (num - 1);
    printf("\nHa %d maiores que n\n", num1);
    printf("Ha %d menores que n\n", num2);
    printf("Ha %d iguais a n\n", num3);
}

Quem poder ajudar agradeço.

Postado
  Em 20/04/2020 às 17:28, Igor Lima Kock disse:

Escreva um programa que leia um valor inteiro N [...]

Expandir  

Atenha-se aos fatos crus do enunciado e não coloque em prática nada além do que pede o exame. Dito isso, mensagens de interface do usuário do tipo "Digite ... " não acrescenta.

 

  Em 20/04/2020 às 17:28, Igor Lima Kock disse:

[...] A seguir, o programa deve ler outros 1000 valores inteiros, e mostrar na tela quantos destes valores são maiores, iguais ou menores que N.

Expandir  

Nesse etapa processamento qualquer um vai precisar no máximo de 5 variáveis para que tudo fique bem descritivo: Contador de Loop, O Inteiro,  Contador de maiores que N, Contador de menores que N e por último Contador de iguais N.

 

  Em 20/04/2020 às 17:28, Igor Lima Kock disse:

O problema é que não importa o numero que eu digite sempre vai dar que há 999 maiores do que n, 1000 menores do que n e 1 iguais a n

Expandir  

Estrutura de controle e decisão são importantes para essa etapa do processo. No caso, blocos IF ou IF ELSE é que melhor resolve fluxo de decisão. Com relação controle de repetição, recomenda-se estrutura do tipo FOR quando é fixa a quantidade de iteração.

 

  Em 20/04/2020 às 17:44, Matheus Lopes Marques disse:

coloque o resto do código dentro do while, pois assim voce está fazendo o loop, e utilizando apenas o ultimo valor.

 

num3 = num - (num - 1);

é o mesmo que

num3 = num;

Expandir  

Verdade, digo mais, imprimir contador de loop não é parte do exame e desnecessário. A expressão resolvida é num3 = +1 também desnecessária. 

 

Bons Estudos.

Postado

 

  Em 20/04/2020 às 17:28, Igor Lima Kock disse:

A seguir, o programa deve ler outros 1000 valores inteiros

Expandir  

sera que essa leitura não é de usuário?

se não é, então porque o programa não pode gerar n também?  aff

enfim eu nem entendi o enunciado mas acho que você imaginou algo tipo assim:

#include <stdio.h>

int main(){
    int i=0,contmaior=0,contmenor,contigual,num;
    printf("Digite um numero: ");
    scanf("%d", &num);
    
    while(i<1000){
    ++i;
    printf("%d\n", i);
     
	 if (i==num){
     contigual=contigual+1;
    }
	 else if(i<num&&i!=num){
	 contmenor=contmenor+1;
    }
	 else if(i>num&&i!=num){
	 contmaior=contmaior+1;
	}
	}
    printf("\nMenores: %d \n", contmenor);
    printf("Maiores: %d \n", contmaior);
    printf("Iguais: %d \n", contigual);
}

 

 

uma ideia boa também é gerar 1000 números aleatórios compará-los ou até mesmo usar um intervalo diferente para não ficar tão básico pesquise estas coisas para melhorar seu desenvolvimento.

 

 

Postado
  Em 20/04/2020 às 21:06, herbertbahia disse:

 

sera que essa leitura não é de usuário?

se não é, então porque o programa não pode gerar n também?  aff

enfim eu nem entendi o enunciado mas acho que você imaginou algo tipo assim:

#include <stdio.h>

int main(){
    int i=0,contmaior=0,contmenor,contigual,num;
    printf("Digite um numero: ");
    scanf("%d", &num);
    
    while(i<1000){
    ++i;
    printf("%d\n", i);
     
	 if (i==num){
     contigual=contigual+1;
    }
	 else if(i<num&&i!=num){
	 contmenor=contmenor+1;
    }
	 else if(i>num&&i!=num){
	 contmaior=contmaior+1;
	}
	}
    printf("\nMenores: %d \n", contmenor);
    printf("Maiores: %d \n", contmaior);
    printf("Iguais: %d \n", contigual);
}

 

 

uma ideia boa também é gerar 1000 números aleatórios compará-los ou até mesmo usar um intervalo diferente para não ficar tão básico pesquise estas coisas para melhorar seu desenvolvimento.

 

 

Expandir  

Foi isso mesmo!

Muito Obrigado

Postado

Pode fazer assim também:

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

int main() {
    int numero = 0;
    int entrada = 0;
    int menores = 0;
    int iguais = 0;
    int maiores = 0;

    int quantidade = 10;

    printf("Digite um numero: ");
    scanf(" %i%*c", &numero);

    while (quantidade > 0) {
        printf("Digite um valor: ");
        scanf(" %i%*c", &entrada);

        if (entrada < numero) {
            menores += 1;
        } else if (entrada > numero) {
            maiores += 1;
        } else {
            iguais += 1;
        }

        quantidade -= 1;
    }

    printf("-------------------------------------- \n");
    printf("    Numero: %i \n", numero);
    printf("   Menores: %i \n", menores);
    printf("    Iguais: %i \n", iguais);
    printf("   Maiores: %i \n", maiores);
    printf("-------------------------------------- \n");

    return EXIT_SUCCESS;
}

 

Postado
  Em 20/04/2020 às 21:06, herbertbahia disse:

sera que essa leitura não é de usuário?

se não é, então porque o programa não pode gerar n também?  aff

Expandir  

Porque nesses novos termos o exercício é um outro de programa diferente. O primeiro programa não é pra digitação de 1000 número inteiros.

 

Por exemplo: Como se trata de somente ler; o fluxo padrão é redirecionado para um arquivo de 1000 inteiros do avaliador.

 

  Em 20/04/2020 às 21:06, herbertbahia disse:

uma ideia boa também é gerar 1000 números

Expandir  

Verdade, mas fora do escopo global do exércicio ou seja, um arquivo comum pra teste, se o problema é a quantidade expressiva, um programa que funciona bem pra 10, funciona pra 1000.

 

 

  • Obrigado 1
  • Membro VIP
Postado

 Segue meu entendimento:

 

@Mauro Britivaldo, o texto do enunciado:
 

  Em 20/04/2020 às 17:28, Igor Lima Kock disse:

 "Escreva um programa que leia um valor inteiro N. A seguir, o programa deve ler outros 1000 valores inteiros, e mostrar na tela quantos destes valores são maiores, iguais ou menores que N."

Expandir  

 

Não a qualquer referência sobre uso ou não de arquivos. Poderia ser via teclado, tanto via arquivos, tanto gerando aleatórios ("lendo valores de uma função", por exemplo). Há várias formas de interpretar. Apesar de possível, creio que uso de arquivos seja algo "avançado" de mais para o contexto (iniciantes). 

 

 

Em fim... o problema todo está na "precisão do enunciado". Por exemplo... o @Igor Lima Kock confirmou

 

  Em 20/04/2020 às 21:25, Igor Lima Kock disse:

Foi isso mesmo!

Muito Obrigado

Expandir  

 

que o código do @herbertbahia

 

  Em 20/04/2020 às 21:06, herbertbahia disse:
#include <stdio.h>

int main(){
    int i=0,contmaior=0,contmenor,contigual,num;
    printf("Digite um numero: ");
    scanf("%d", &num);
    
    while(i<1000){
    ++i;
    printf("%d\n", i);
     
	 if (i==num){
     contigual=contigual+1;
    }
	 else if(i<num&&i!=num){
	 contmenor=contmenor+1;
    }
	 else if(i>num&&i!=num){
	 contmaior=contmaior+1;
	}
	}
    printf("\nMenores: %d \n", contmenor);
    printf("Maiores: %d \n", contmaior);
    printf("Iguais: %d \n", contigual);
}
Expandir  

 

está correto... então será que seria algo como tendo relação com "entre 1 e 1000, quantos números estão abaixo e quantos estão acima?". Se for, poderia ser algo assim então:

 

#include <stdio.h>

int main(){
    int num;
    
    printf("Digite um numero: ");
    scanf("%d", &num);
    
    printf("Menores: %d \n", num-1);
    printf("Maiores: %d \n", 1000-num);
    printf("Iguais : %d \n", 1);
}

Simples e direto. (claro que suponho que só vai digitar valores entre 1 e 1000, inclusos)

 

 

Se eu fosse o aluno, faria as 3 formas 😆:

  1. lendo 10 números assim como sugerido pelo @AdrianoSiqueira;
  2. gerando 1000 número aleatórios. Basta escolher uma faixa. Poderia ser números aleatórios entre 1 e 100 mesmo;
  3. utilizando arquivos. Gera 1000 números aleatórios de alguma forma (pode ser online. A faixa poderia ser de 1 a 100 também). 

Daí pergunta o professor qual a forma correta (vai está pronto para qualquer uma).

*Exemplo de 1000 números entre 1 e 1000. Se for usar arquivo, poderia testar com estes. Daí dá para ter uma referência única, assim como sugerido por @Mauro Britivaldo.

  Mostrar conteúdo oculto


 

Postado
  Em 21/04/2020 às 14:09, Simon Viegas disse:

Não a qualquer referência sobre uso ou não de arquivos.

Expandir  

Não há requesito avançado pra essa tarefa, pelo contrário, é trivial como:

 

C:\programa.exe < arquivo.txt

 

Com relação a falta de referência então eu sou a referência esperada, pois é assim que redireciono a entrada pra um arquivo e quem tem windows/linux também entende.

 

Depuração se faz resumidamente com 10 inteiros ou menos pra não perde mais tempo e por último um arquivo de 1000 inteiros...

 

  Em 21/04/2020 às 14:09, Simon Viegas disse:

Poderia ser via teclado,

Expandir  

Verdade, eu não substimo a estúpidez do ser humano!

 
  Em 21/04/2020 às 14:09, Simon Viegas disse:

Há várias formas de interpretar

Expandir  

Entretanto, dentre todas apenas uma é a certa.

  • Curtir 1
  • Membro VIP
Postado
  Em 21/04/2020 às 15:46, Mauro Britivaldo disse:
  Em 21/04/2020 às 14:09, Simon Viegas disse:

Não a qualquer referência sobre uso ou não de arquivos.

Expandir  

Quem usa o arquivo é o avaliador, o programa ler da entrada padrão comum (stdio). Não há requesito avançado pra essa tarefa, pelo contrário, é trivial como:

Expandir  

 

Eu entendi o que você está propondo, apenas supus que não seja o caso (uso de arquivos). E, de qualquer forma, poderia fazer das 3 formas... já que "apenas" iria muda a "fonte dos dados" (a lógica será a mesma) :). Eu acho que valeria a pena tentar.

 

Sobre:

  Em 21/04/2020 às 15:46, Mauro Britivaldo disse:

Não há requesito avançado pra essa tarefa, pelo contrário, é trivial como:

 

C:\programa.exe < arquivo.txt

Expandir  

 

O avançado que me refiro é na implementação, não no uso do programa... ou seja: inicialmente existiria uma dificuldade na lógica da verificação (o cerne seria o como verificar e contar). Ao utilizar arquivo, inseriria uma "complexidade" extra.. tipo: quem já chegou no nível de ter aulas com uso de arquivos, teoricamente não teria dúvidas sobre esta lógica... (a dúvida tenderia ao uso do arquivos).

 

A referencia que sugeri era em relação ao texto do enunciado. Para uso de arquivos, acredito que seria mais natural o próprio enunciar citar... ou o autor dizer algo como "o avaliador pediu para utilizar um arquivo que ele disponibilizou. Mas para testar, eu comecei fazer comparando de 1 até 1000".

 

 

  Em 21/04/2020 às 15:46, Mauro Britivaldo disse:

Já um possível depuração se faz resumidamente com 10 inteiros pra não perde mais tempo e por último um arquivo de 1000 pra finalizar.

Expandir  

 

Perfeito! utilizaria 10 apenas nas fases de testes... na hora de entregar, teria que colocar 1000... pois foi com 1000 que foi pedido (sendo com um arquivo, sendo gerando automaticamente, sendo lendo do teclado um a um ou de outra forma/interpretação que venha a surgir).

 

Postado
  Em 21/04/2020 às 16:08, Simon Viegas disse:

O avançado que me refiro é na implementação, não no uso do programa... ou seja: inicialmente existiria uma dificuldade na lógica da verificação

Expandir  

A implementação é a mesma pra ambos sem mudanças no código. O programa continua lendo do fluxo padrão só que a fonte é um arquivo. Para simplica ainda mais, é o mesmo que colar na entrada.

  • Curtir 1
  • Membro VIP
Postado
  Em 21/04/2020 às 16:47, Igor Lima Kock disse:

Se o admin quiser pode fechar o tópico que já foi resolvido

Expandir  

 

@Igor Lima Kock, poste teu código completo para reanalisarmos e, eventualmente, também servir de base para outros visitante.

 

 

Se estiver se baseando pelo código do @herbertbahia:

 

  Em 20/04/2020 às 21:06, herbertbahia disse:
#include <stdio.h>

int main(){
    int i=0,contmaior=0,contmenor,contigual,num;
    printf("Digite um numero: ");
    scanf("%d", &num);
    
    while(i<1000){
    ++i;
    printf("%d\n", i);
     
	 if (i==num){
     contigual=contigual+1;
    }
	 else if(i<num&&i!=num){
	 contmenor=contmenor+1;
    }
	 else if(i>num&&i!=num){
	 contmaior=contmaior+1;
	}
	}
    printf("\nMenores: %d \n", contmenor);
    printf("Maiores: %d \n", contmaior);
    printf("Iguais: %d \n", contigual);
}
Expandir  

 

Aproveite para já corrigir as sentenças dos últimos 2 if, ex.:

if (i<num && i!=num)

Se é menor, necessariamente é diferente. Logo, seria uma erro de lógica a segunda verificação.

 

 

 

adicionado 5 minutos depois

Ah! E colocar o igualdade

if (i==num)

para ser verificado por último, pois é naturalmente bem mais provável que seja menor ou maior (deixando em cima, será uma verificação a mais a cada loop).

 

Obs.: independente da ordem, a última verificação não precisa ser feita, pois se não for uns dos 2 primeiros, necessariamente será o terceiro. 

 

 

 

 

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

Mostrar 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

Mostrar mais  
×
×
  • Criar novo...

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!