Ir ao conteúdo

Posts recomendados

Postado

Preciso fazer um programa em C no URI que receba um numero inteiro N, baseado neste numero ele deve receber mais X números inteiros, logo em seguida testar quanto desses números X digitados estão dentro do intervalo 10-20.

Resultei nesse código, porém sempre ao efetuar o envio do código a seguinte mensagem é exibida "Wrong answer (10%)", já não consigo mais imaginar o que pode ser.

Alguém pode me dar uma luz ?

 

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

int main()
{
    int N, i, in=0, out=0;
    scanf("%d",&N);
    int X[N];
    for(i=0; i<N; i++)
    {
        scanf("%d",&X[i]);
        if(X[i]>=10)
        {
            if (X[i]<=20)
                in++;
        }
        else
            out++;
    }
    printf("%d in\n",in);
    printf("%d out\n",out);

    return 0;
}

 

  • Curtir 1
Postado

@lcN1 , Olá!

 

O problema lógico está na primeira estrutura de decisão.

 

Observe que para valores maior que 10 a primeira decisão é verdadeira, entretanto, para valores maiores também que 20 não se observa uma decisão que trata essa situação como fora (out) que incremente o contador, logo a resposta para esse caso em particular não existe caracterizando os 10% de erro na resposta como indicado, eu presumo!

 

Realizando teste de mesa somente nas estruturas de decisão

  Xi     | EXPRESSA | LOGICO

100    |     >= 10       | VERDADEIRO

100    |     <= 20       | FALSO

 

????

 

 

  Xi     | EXPRESSA | LOGICO

011    |     >= 10       | VERDADEIRO

011    |     <= 20       | VERDADEIRO

 

INCREMENTAR IN

 

 

  Xi     | EXPRESSA | LOGICO

009    |     >= 10       | FALSO

 

INCREMENTAR OUT

 

 

Note que o uso de vetor para entrada não acrescenta ao algoritmo podendo ser substituído por uma variável.


Algoritmo pseudocódigo intervalos_uri

Spoiler

Inicio

        numero_entradas: inteiro

        entrada: inteiro   // Variável e não vetor

        out: inteiro          // N. FORA do intervalo

        in: inteiro            // N. DENTRO do intervalo

 

        entrada= 0;

        out= 0;

        in= 0;

 

        ler(numero_entradas);

 

        ENQUANTO 0 < numero_entradas FAÇA

                        ler(entrada)

                        SE 10 <= entrada ENTÃO

                                        SE entrada <= 20 ENTÃO

                                                        in= in + 1;

                                        SENÃO

                                                        out= out + 1;

                                        SEFIM

                        SENÃO

                                         out= out + 1;

                        SEFIM

                        numero_entradas= numero_entradas - 1;

        ENQUANTOFIM

 

        escrever(in," in\n");

        escrever(out," out\n");

Fim


 

Ainda sim é preciso o enunciado completo do exercício para ter certeza de que nada falta.

  • Curtir 1
Postado
Em 04/08/2019 às 14:55, lcN1 disse:

um numero inteiro N, baseado neste numero ele deve receber mais X números inteiros, logo em seguida testar quanto desses números X digitados estão dentro do intervalo 10-20.

Resultei nesse código, porém sempre ao efetuar o envio do código a seguinte mensagem é exibida "Wrong answer (10%)", já não consigo mais imaginar o que pode ser

 

Olá!

 

Seu programa sugere que o inteiro N é o total de valores digitados X. Talvez fosse melhor ver também o enunciado. Imaginando que seja isso, e que só precise dizer quantos números dos N digitados estão dentro do intervalo, podia imaginar uma saída assim

Entre com o total N de valores: 5
Agora entre com os 5 valores, um por linha

[1 de 5]: 9
[2 de 5]: 10
[3 de 5]: 11
[4 de 5]: 20
[5 de 5]: 21

Dos 5 valores 3 estão dentro do intervalo desejado 10<=N<=20

Assim teria alguma orientação para o usuário ir entrando com os valores e do que se trata a resposta.

Se é só isto que o enunciado requer não há razão para armazenar os valores todos, por exemplo. Tampouco tem razão para imprimir os valores que estão fora do intervalo, e algo assim serviria:

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

int main(int argc, char** argv)
{
	int N;
	int noIntervalo = 0;
	int umValor;
	printf("Entre com o total N de valores: ");
	scanf("%d", &N);
	printf("Agora entre com os %d valores, um por linha\n\n", N);
	for (int i = 1; i <= N; i++)
	{
		printf("[%d de %d]: ", i, N);
		scanf("%d", &umValor);
		if (umValor < 10) continue; // le o proximo
		if (umValor > 20) continue; // le o proximo
		noIntervalo = noIntervalo + 1;
	}	// end for
	printf("\nDos %d valores %d estão dentro do intervalo desejado 10<=N<=20\n", N, noIntervalo);
	return 0;
}	// end main()

Esse gera exatamente a saída acima. Claro que há incontáveis maneiras de escrever isso...

 

O que é URI? Se é uma plataforma automatizada de testes para os exercícios deve imprimir somente o total de valores no intervalo e nada mais
 

  • Curtir 1
Postado
3 horas atrás, devair1010 disse:

 uri é um site com exercícios de programação , :

https://www.urionlinejudge.com.br/judge/pt/login

 

Obrigado! Imaginei que fosse algo assim. E muitos cliques depois desse do login temos a informação adicional de que URI é Universidade Regional Integrada do Alto Uruguai e das Missões, afinal em https://www.reitoria.uri.br/pt:D 

  • Amei 1

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!