Ir ao conteúdo
  • Cadastre-se

eliumoraes

Membro Pleno
  • Posts

    42
  • Cadastrado em

  • Última visita

Tudo que eliumoraes postou

  1. Saudações galera, estou tentando resolver mais um problema no URI e meu código funciona perfeitamente para todos os casos de teste, mas quando envio para o URI ele retorna com um "Runtime Error". Já tentei fazer de diversas formas diferentes, mas sempre com este problema. Talvez um olhar diferente poderia me ajudar, segue o código comentado: #include <stdio.h> #include <math.h> #include <stdlib.h> int * dectobin(); int vect(int z); int main() { int *x,*y,*z,i,l,n,u,a,b,res,aa,bb,cont; while((scanf("%d %d",&a,&b))!=EOF){ if(a==0){ printf("%d\n",b ); } else{ if (b==0){ printf("%d\n",a); } else{ // Transforma em binários res = 0; x = dectobin(a,&aa); y = dectobin(b,&bb); //Verifica o tamanho do maior para o último digito da conta p/ o tamanho do vetor z if(aa>bb){ i = aa; n = 1; } else{ if(aa<bb){ i = bb; n = 2; } else{ n = 0; i = aa; } } //Cria o vetor Z z = (int*) malloc((i)*sizeof(int)); //Preenche o vetor Z com o modo MOFIZ for (l=0;l<(i);l++){ if (x[l]==1 && y[l]==1){ z[l] = 0; } else{ if(x[l]==0 && y[l]==0){ z[l] = 0; } else z[l] = 1; } } n = aa; u = bb; for (l=i;l>(-1);l--){ // printf("%d\n",l); if(n==(-1)){ z[l]=y[u]; } if(u==(-1)){ z[l]=x[n]; } if(y[u]==0 && x[n]==0){ z[l] = 0; } else{ if(y[u]==1 && x[n]==1){ z[l] = 0; } else z[l] = 1; } n--; u--; } /* printf("\n"); for (l=0;l<aa+1;l++){ printf("%d ",x[l]); } printf("\n"); for (l=0;l<bb+1;l++){ printf("%d ",y[l]); } printf("\n"); for (l=0;l<i+1;l++){ printf("%d ",z[l]); } printf("\n\n"); */ cont = 0; for(;;){ if(cont==i+1) break; // printf("CONT: %d\n",(cont) ); // printf("RES = 2^%d * %d + %d\n",cont,z[i-cont],res); res = ((pow(2,cont))*z[i-cont]) + res; cont++; } printf("%d\n",res ); } } } return 0; } int * dectobin(int x, int *k){ // para retornar um vetor, coloco um asterisco antes da função int i=0,z,n,*v; long int pot; // Estou utilizando long int %li porque aqui cabem mais de 31 bits. //Verifica o tamanho do binário (quantidade de casas é igual a número de bits i = vect(x); v = (int*) malloc((i+1)*sizeof(int)); // Cria o vetor de inteiros. z = 0; // Esse será o contador. //Prenche o vetor com os binários for(n=i;n>=0;n--){ pot = (pow(2,n)); if (pot<=x){ v[z] = 1; x = x - pot; } else{ v[z]=0; } z++; } *k = i; return v; } int vect(int z){ int i=0; for(;;){ i++; if(z==1) break; else z = z/2; } return i; } Para testar é só criar um arquivo com as entradas e indicar ele para o programa, ex: teste.exe < entradas.txt
  2. Muito obrigado pessoal, deu certinho. Como eu faço para colocar o status resolvido aqui no tópico?
  3. Olá pessoal, Acabei descobrindo como fazer. Na verdade quando eu executo ele no terminal costumo fazer: ./2029.out Para indicar o arquivo com as entradas eu deveria ter feito: ./2029.out < 2029.txt Onde o 2029.out é o programa compilado e o 2029.txt contém os dados de entrada fornecidos. O que vocês me mostraram é certo, o problema é que eu não soube me expressar direito, pois queria simular o que o servidor do URI faz.
  4. @ScreenBlack Então, mas no caso eu não posso passar esse comando dentro do programa. Tenho que passar por fora, como argumento na hora da execução dentro do terminal. Isso acontece porque eu não tenho ideia do nome do arquivo que o URI vai passar para o programa executar.
  5. Bom dia pessoal, Estou utilizando o Linux para fazer meus programas em C e não sei como indicar um arquivo para fazer testes em casos que preciso utilizar EOF. Por exemplo, no problema (https://www.urionlinejudge.com.br/judge/pt/problems/view/2029) eu preciso testar com EOF e fiz o seguinte código: #include <stdio.h> int main(){ double v,h,a,d; while((scanf("%lf %lf",&v,&d))!=EOF){ a = 3.14*(d/2)*(d/2); h = v/a; printf("ALTURA = %.2lf\n",h); printf("AREA = %.2lf\n",a); } return 0; } Para compilar utilizei o comando : gcc 2029.c -o 2029.out . E para executar geralmente uso: ./2029.out Mas como esse problema exige a indicação de um arquivo para o teste de EOF eu não sei como devo mostrar o arquivo de entrada ao programa.
  6. @vangodp , acho que a confusão é porque ele sempre demonstra utilizando o J, mas para cada I é como se ele tivesse uma contagem diferente. Eu observei que em cada vez que ele acrescenta 0.2 o I é repetido 3 vezes já o J é como se fosse três J diferentes, um que conta de 1 a 3, outro de 2 a 4 e um último de 3 a 5. @CiroboyBR Muito obrigado, na verdade eu faço Mecatrônica, mas irei perguntar ao professor sobre isso.
  7. @CiroboyBR Muito obrigado pela ajuda. Tentei fazer do jeito que você falou, descobri que se for double não funciona e se for float ele conta errado, então tive que aumentar fazer contar de 0 até 2.2 para dar 2: #include <stdio.h> int main(){ int ii,c; float i,j=1,la,lb; for(i=0;i<=2.2;i=(i+0.2)){ for(c=0;c<3;c++){ ii = i; la = i - 0.100; lb = i + 0.100; if(ii>la && ii<lb){ printf("I=%.0f J=%.0f\n",i,j+c+i); } else{ printf("I=%.1f J=%.1f\n",i,j+c+i); } } } return 0; } Mesmo que o problema tenha sido resolvido lá no URI eu não consegui entender o motivo de ter que contar assim e o motivo do double não dar certo.
  8. Saudações galera, Meu professor pediu para resolver todos os problemas de iniciante no URI e faz alguns dias que estou batendo a cabeça com o ex(https://www.urionlinejudge.com.br/judge/pt/problems/view/1098). Minha dificuldade é para transformar o double em int e fazer a comparação, eu tentei resolver utilizando "for", ele até funciona nos dois primeiros casos, quando i vale zero e quando i vale um, porém no terceiro caso ele não entra na condicional, quando i vale 2: #include <stdio.h> #include <math.h> int main(){ int ii, jj, c; double i,j=1; for(i=0;i<=2;i=(i+0.2)){ for(c=0;c<3;c++){ ii = (int)round(i); jj = (int)round(j); if(i==ii){ printf("I=%d J=%d\n",ii,jj+c+ii); } else{ printf("I=%.1lf J=%.1lf\n",i,j+c+i); } } } return 0; } Para tentar entender o problema eu fiz um pequeno código que vai subindo de zero até 2, somando sempre 0.2 e verificando se a parte decimal (double) é exatamente igual a parte inteira (int), mas o código diz que 2.00 não é igual a 2, como podem ver no exemplo: #include <stdio.h> #include <math.h> int main(){ double a; int b,c; for(a=0;a<=2;a=(a+0.2)){ for(c=0;c<3;c++){ b = (int)floor(a); if(b>=a) printf("IGUAL:\n"); printf("A = %.2lf\n",a); printf("B = %d\n\n",b); } } } A transformação eu tentei com floor e round, mas o erro continua em ambos os casos. Alguém poderia me ajudar por gentileza?
  9. Muito bom hahahaha! Era exatamente esse jogo que eu estava procurando. Obrigado pela ajuda!
  10. Galera preciso de ajuda. Tem um jogo antigo que eu gostava muito e há tempos tento me lembrar o nome mas não consigo. Era um jogo de FPS, porém em vez de humanos eram bolas com armas e você via o jogo de cima, como se fosse um labirinto, visto de cima, você controlava uma bola e podia escolher entre várias armas, tinha também uma granada. Você podia até personalizar a cor da sua esfera (personagem). Ou ter uma esfera com desenhos. E o mais legal de tudo é que o game era online, então você entrava com seus amigos e se matava a noite inteira. Eu gostava muito, dava pra jogar a granada por cima do muro e se acertasse explodia os inimigos e tinha muito sangue. Além de muitos jogadores também. Isso é só pra quem é velhão mesmo, das antigas, jogo do tempo do epa, um dos primeiros fps's online. Por favor me ajudem a lembrar, porque gostaria muito de jogar um pouco esse jogo pra matar a saudade
  11. E aí galera! Feliz ano novo para todos. Seguinte, tem uma dúvida remoendo aqui. Comprei um SSD para meu brinquedo e formatei meu computador colocando as coisas mais importantes lá. Acontece que quando clico com o botão direito e olho nas propriedades, diz que tem 135GB de espaço usado. Porém se eu selecionar todos os arquivos (incluindo os ocultos) ele diz que tem apenas 72,2GB de espaço em disco sendo utilizado. E a informação que 135GB estão sendo utilizados é que está errada. Logo tem 62,8GB faltando no meu SSD. Como descubro o que aconteceu? Ah sim! Um detalhe, eu removi todos os pontos de restauração, exclui o arquivo de paginação, configurei pra não guardar cache, fiz limpeza de disco, removi as cópias de atualizações, basicamente tentei vários procedimentos para ver se encontrava o que estava ocupando esse espaço, mas nada até agora. Oh! Descobri aqui senhores o problema era o arquivo hiberfil.sys que estava me incomodando. Removi ele e problema resolvido. Se alguém tiver esse mesmo problema no futuro é só instalar o WinDirStat e ele vai mostrar o que está ocupando espaço. Esse arquivo em questão serve para hibernar o sistema. Como eu não utilizo hibernação não vai fazer falta.
  12. Oi preciso que alguém me ajude pois toda vez que vou jogar GTA o meu monitor fica preto e aparece escrito HZ dentro de um quadrado e na frente aparece um ponto de interrogação tipo assim: HZ ? Preciso que alguém me de uma luz, meu pc tem 1gb de memória e uma gforce 256mb de vídeo. Monitor simples 17" Tentei mudar a taxa de atualização de tela mas não adiantou nadinha

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!