Ir ao conteúdo

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

LANÇAMENTO!

eletronica2025-popup.jpg


CLIQUE AQUI E BAIXE AGORA MESMO!