Ir ao conteúdo
  • Cadastre-se

C++ Iniciante - Exercício EOF Faculdade


MyL

Posts recomendados

Olá.
Estou cursando o 1° Período de Sistema de Informação, estou aprendendo a programar ainda. Foi passado em forma de um trabalho semestral alguns exercícios de programação no URI, mas estou encontrando algumas dificuldades em um exercício em especial. Se alguém puder me ajudar, agradeço muito.
https://www.urionlinejudge.com.br/judge/pt/problems/view/2551
O primeiro código não usei o EOF, o segundo sim, mesmo não entendendo seu uso corretamente, mas ambos me retornam 10% de erro.

 

#include <iostream>
int main() {
int N,I[30],F,FF, R1=0, Dist, T;
float M ,J=0;
scanf("%d",&N);
/* N = Numero de casos de teste
F = Dias
M= Media
J= Record
Dist = Distancia
T = Tempo
R1 = Quantidade de dias que o J "Record" foi batido
I[R1] = Dias que o record foi batido
*/
if ((N>0)&&(N<=30))
{
for (F=0;F<N;F++){
scanf("%d%d",&T,&Dist);

M=((Dist*1000)/(T*60))*3.6;

if (M>J){
J=M;
I[R1] = F+1;
R1++; 
} 
}
for(FF=0;FF < R1;FF++){
printf("\n%d",I[FF]);
}
}
return 0;
}

//Mesmo não entendendo bem o EOF, eu tentei usar no fim da entrada.

#include <iostream>
using namespace std;
int main() {
int N,I[30],F,FF, R1=0, Dist,V=0 ,T;
float M ,J=0;
while (scanf("%f", &N) != EOF) {
for (F=0;F<N;F++){
scanf("%d%d",&T,&Dist);

M=((Dist*1000)/(T*60))*3.6;

if (M>J){
J=M;
I[R1] = F+1;
R1++; 
} 
}
for(FF=0;FF < R1;FF++){
printf("\n%d",I[FF]); 
}
}
return 0;
} 

 

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

@MyL    o EOF  ( END OF FILE)  é usado para trabalhar com arquivos, para saber se o arquivo chegou no fim, então como você não está usando nenhum arquivo, esse EOF fará um loop infinito pois nunca achagará o fim do arquivo e com isso o loop continuará indefinidamente, então modificando seu código ficaria assim :

#include <iostream>
using namespace std;
int main(){
    int N,I[30],F,FF, R1=0, Dist,V=0 ,T;
    float M ,J=0;
    printf("digite um valor ");
    scanf("%d",&N);
    while (N != 0) {
        for (F=0;F<N;F++){
            printf("informe o %d numero ",F+1);
            scanf("%d",&T);
            printf("informe outro numero ");
            scanf("%d",&Dist);
            M=((Dist*1000)/(T*60))*3.6;
            if (M>J){
                J=M;
                I[R1] = F+1;
                if(R1<31)R1++;
            }
        }
        for(FF=0;FF < R1;FF++){
            printf("%d\n",I[FF]);
        }
        printf("quer contunuar 2=sim   0=nao ");
        scanf("%d",&N);
    }
    return 0;
}

 

Link para o comentário
Compartilhar em outros sites

Obrigado devair1010, mas sempre que coloco:
    while (N != 0) 
        ou
    while (N != EOF)  o site me retorna "Time limit exceeded"
Tentei fazer While(scanf("%d",&N) != EOF) assim ele não me da "Time limit exceeded", mas diz que meu código esta 60% errado. Colocando mais aquele scanf para verificar se o loop continua", a plataforma me retorna 70%.
Vou postar o código em que ele me retornou somente 10% de erro e o outro que esta me retornando 60%.
https://www.urionlinejudge.com.br/judge/pt/problems/view/2551

10% de erro:

#include <iostream>
using namespace std;

int main() {
	int I[30],F,FF, R1=0, Dist,V=0 ,T, N;
	float M ,J=0;
scanf("%d", &N);
		for (F=0;F<N;F++){
			scanf("%d",&T);
			scanf("%d", &Dist);
			M=((Dist*1000)/(T*60))*3.6;
			if (M>J){
				J=M;
				I[R1] = F+1;
				R1++;	
			}	
		}
		for(FF=0;FF < R1;FF++){
				printf("%d\n",I[FF]);
		}
	
		return 0;
}

60% de erro:
#include <iostream>
using namespace std;

int main() {
	int I[30],F,FF, R1=0, Dist,V=0 ,T, N;
	float M ,J=0;

   while (scanf("%d",&N) != EOF) {
		for (F=0;F<N;F++){
			scanf("%d",&T);
			scanf("%d", &Dist);
			M=((Dist*1000)/(T*60))*3.6;
			if (M>J){
				J=M;
				I[R1] = F+1;
				R1++;	
			}	
		}
		for(FF=0;FF < R1;FF++){
				printf("%d\n",I[FF]);
		}

}
		return 0;
}


 

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

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!