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
2 horas atrás, Igor Lima Kock disse:

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

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.

 

2 horas atrás, 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.

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.

 

2 horas atrás, 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

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.

 

2 horas atrás, 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;

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

 

3 horas atrás, Igor Lima Kock disse:

A seguir, o programa deve ler outros 1000 valores inteiros

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
19 minutos atrás, 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.

 

 

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
14 horas atrás, 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

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.

 

14 horas atrás, herbertbahia disse:

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

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:
 

20 horas atrás, 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."

 

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

 

16 horas atrás, Igor Lima Kock disse:

Foi isso mesmo!

Muito Obrigado

 

que o código do @herbertbahia

 

17 horas atrás, 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);
}

 

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.

Spoiler

 


 35	 92	 18	 23	 66	 69	 44	 88	 93	 68
 17	 97	 79	 99	 48	 81	 46	 45	 95	 85
 35	 23	 39	 78	 49	 25	  6	 38	 63	 34
 41	 98	 25	 58	 20	 91	 27	 64	 78	 20
 31	 94	 16	 10	 92	 63	 90	 38	  8	 85
 22	 42	  8	 61	 19	 56	 86	 25	 93	 48
 58	 34	 45	 83	 91	 65	 73	 18	 28	 50
 37	 59	 44	 52	 69	 36	 14	 58	 73	 22
 42	 95	 63	 50	 55	 82	  5	 40	  7	 98
 88	 64	 31	 33	 46	 22	 97	 19	 39	 25
 68	 75	 84	 12	 27	 52	 47	 41	  9	 19
 62	 51	 14	 25	100	 68	  7	  5	  8	 13
  2	 95	 76	 33	 28	 22	 54	 24	 40	 92
 49	  8	 67	 32	 20	 93	 83	 66	 33	 92
 85	 95	 43	 98	 19	 43	 66	 25	 47	 73
 37	 49	 68	 13	 81	 95	 35	 34	 19	 75
 26	 68	 83	 92	 99	  2	 85	 82	 67	 18
 74	 51	 12	 16	 49	 30	 59	 14	 55	  5
 87	 91	 53	 54	  4	 34	 49	 38	 67	 67
 12	 92	 34	 94	 84	 33	 96	 69	 15	 62
 86	 89	 13	 97	  4	 61	 27	 63	 74	 81
 67	 60	 72	 20	 14	 75	 54	 62	 13	 20
 29	 25	 12	 63	 19	 96	 96	 14	 64	 10
 75	 49	 98	 87	 46	  2	 48	 73	 64	 21
 53	 31	 81	 24	 51	 94	 99	  4	 56	 11
 24	 84	 35	 36	 47	 53	 31	 42	 66	 95
 52	 41	 44	 50	 28	 89	 52	 75	 61	 16
 95	 14	 47	 76	 38	 97	 70	 36	  1	 25
 47	 24	  9	 81	 59	 55	 34	 90	 97	100
 84	 48	 41	 27	 98	 68	 16	 49	 42	 77
 64	 37	 90	 10	 12	 27	  7	 82	 63	  7
  6	  9	 31	 15	 90	 90	 70	 23	 79	 66
 23	 63	 14	 63	 89	 11	 31	  5	 60	 72
 81	 24	  9	 70	 34	 21	 97	 40	  2	 59
 47	  8	 67	 78	 22	 57	 67	 91	 80	 46
 56	  2	  8	 70	 65	 96	 80	 95	100	 40
 67	 81	 63	 75	 50	 96	 95	 47	 36	 96
  6	 82	  4	 72	 60	 25	 29	 26	 16	  8
 71	 71	  9	 78	 41	 74	 74	 21	 68	 74
 60	 34	 54	 23	  8	  4	 18	  3	 50	 53
 99	 55	 35	  2	 27	 94	 27	 55	 20	 42
 62	 90	 13	 71	 68	 53	 44	 41	 73	 12
 14	 33	 46	 68	 55	 53	 71	 73	 56	 21
 26	 54	 76	 60	 56	  2	 54	 82	 57	 74
 24	 19	 63	 36	 90	 31	 88	 34	 72	 61
 45	 85	 94	 90	 53	 48	 43	 23	 20	 99
 44	 45	 53	 19	  5	  8	 21	 59	 90	 78
 32	 13	 96	 95	 48	 86	 25	 36	 19	 96
 97	 64	 81	 90	 54	 34	 38	 97	 57	 58
 96	100	  3	 48	 18	  8	 56	 39	 66	 45
 16	 98	 58	 12	 93	  5	 97	 17	 41	 16
 13	 38	 79	 94	 28	 33	 27	 65	 30	 84
 23	 25	 83	 25	 72	  1	 33	 27	 39	 99
 72	 54	 96	 29	 65	 88	 34	 61	  5	 74
 76	 18	 12	 55	 12	 39	 88	 39	  4	 17
 22	 26	 41	  4	 51	 13	  4	 84	 39	 43
 82	 10	 96	 78	 38	 60	 65	 72	 21	 70
 45	 97	 88	 57	 52	 99	 95	 39	 38	 99
 55	 59	 25	 96	 63	 75	  8	 67	 59	 47
  9	 40	 57	  4	 17	 95	 64	 82	 66	 85
 52	 11	 82	 39	 67	 33	 38	 62	 71	 75
 60	 26	 34	 84	 22	 96	 59	 30	 62	 17
 76	 71	 57	 33	 74	 74	 27	 38	 55	 92
 23	  6	  3	  4	 45	 69	 36	 82	 31	  7
 57	 90	 33	 90	 74	 54	 85	 33	 83	 47
 50	 59	 17	  6	 91	 91	 79	 18	 29	 34
 10	 51	 40	 12	 54	 85	 81	 90	 66	 11
 97	 22	  1	 29	 11	 75	 82	 96	  7	 65
 42	 57	 24	 58	 63	 15	 49	 42	 32	 77
 75	 42	 27	 15	 53	 81	 99	 33	 71	 64
 44	 67	 86	 45	 96	 97	 19	 78	 93	 26
 42	 34	 82	 66	 92	 44	 80	 40	 85	 12
 17	 60	 53	 43	 74	  6	 24	 73	 38	 95
 37	 82	 62	 22	 26	 57	 19	 45	 34	 11
 70	 76	 45	 52	 41	 37	 96	 20	 77	 81
 32	 93	 41	 84	 36	 15	 89	 59	 87	 27
 54	 23	  9	 15	 45	 35	 71	 64	 79	  4
 74	 49	 79	 19	  1	 19	 55	 96	 39	 31
 77	 71	 23	 17	 54	 58	 31	 43	 17	 18
 70	 70	 40	 78	 84	 85	 12	 55	 48	 91
 58	 22	 39	 37	 40	 39	 56	 95	 35	 95
 26	 12	 65	 49	 28	 18	  6	 59	 61	 23
 76	 30	 93	 16	  8	 77	100	 20	 31	 48
 10	 89	 69	 48	 26	  9	 87	 81	  3	 22
 75	 28	 33	 39	 76	 61	 57	 82	 19	 18
  5	 95	 48	 98	 11	 55	 74	 11	 74	  5
 58	 83	 94	 27	 31	 19	 35	 18	100	 38
 39	 74	 66	 71	 13	 42	 32	 70	 24	 51
 88	 28	 45	 35	 25	 56	 89	 99	 67	 63
  4	 25	 46	 97	 51	 76	 16	 86	 94	 15
 23	 32	 88	 89	  3	  1	 30	 34	 71	 53
 84	 58	 80	 29	 92	  5	 85	 81	  4	 51
 44	  7	 75	 89	  4	 26	 64	 19	 11	 58
 33	 33	 89	 21	 21	 92	 21	 51	 26	 92
  3	 10	 49	 83	 39	 41	 87	 23	 22	 91
 74	 65	 97	 48	 53	  1	 73	 17	 19	 84
 74	 51	 17	 63	 71	 38	 55	 92	 88	 80
 83	 90	 90	 32	 72	 28	 73	 59	 51	 94
 49	 24	 58	 46	 72	 11	 46	 45	 27	 65
 28	  1	 15	 44	 63	 86	 81	 17	 78  22

Gerado via https://www.4devs.com.br/gerador_de_numeros_aleatorios.
Obs.: lá acho que só vai até 999. Gerei outro e inseri na lista.


 

Postado
1 hora atrás, Simon Viegas disse:

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

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

 

1 hora atrás, Simon Viegas disse:

Poderia ser via teclado,

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

 
1 hora atrás, Simon Viegas disse:

Há várias formas de interpretar

Entretanto, dentre todas apenas uma é a certa.

  • Curtir 1
  • Membro VIP
Postado
23 minutos atrás, Mauro Britivaldo disse:
2 horas atrás, Simon Viegas disse:

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

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:

 

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:

23 minutos atrás, Mauro Britivaldo disse:

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

 

C:\programa.exe < arquivo.txt

 

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

 

 

23 minutos atrás, 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.

 

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
47 minutos atrás, 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

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
Postado
19 minutos atrás, Igor Lima Kock disse:

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

Acho que não dessa maneira; Escolha sua melhor resposta "e vida que segue".

  • Membro VIP
Postado
45 minutos atrás, Igor Lima Kock disse:

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

 

@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:

 

20 horas atrás, 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);
}

 

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

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