• Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.

vangodp

Membros Plenos
  • Total de itens

    902
  • Registro em

  • Última visita

  • Qualificações

    0%

Reputação

269

6 Seguidores

Sobre vangodp

  • Data de Nascimento 16-02-1977

Informações gerais

  • Cidade e Estado Málaga/Espanã
  • Sexo Masculino
  1. Simplesmente você "imagina" o que não é. Para você entender... Na seguinte declaração com atribuição você será capaz de me dizer o que está acontecendo?: float f = 1.2; Se sua resposta é que estou tentando atribuir um double a um float, você acertou, caso contrario você precisa estudar mais... muito mais. >_< Igualmente a seguinte atribuição... O que acontece se eu fizer: int n = 1.2; Se sua resposta é que eu to tentando atribuir um double a um int você acertou, porém em parte. Na realidade n simplesmente tomou o valor 1 perdendo a parte fracionaria, pois um int jamais poderá guardar 1.2, acontece uma conversão implícita de tipos de double a int com perda de dados de por meio. É a mesma coisa que acontece quando você tenta multiplicar um double por um int (1.2*ataque1). Ao tentar multiplicar um double por um int você perde a parte fracionaria, e por isso geram resultados incorretos. Total... falha de lógica devido a um mal domínio da linguagem. Sempre quando for realizar uma operação entre diferentes tipos de dados, certifique-se que não há perdas de dados por realizar operações entre tipos diferentes, por isso lhe aconselhei que usa-se cast explicito.
  2. transforma esse 3.5 em uma string e substitua o ponto pela letra 'v' e imprima. para isso use as funções sscanf e fprintf
  3. você esta multiplicando valores entre varios tipos diferentes de dados, e esta acontecendo conversões implícitas dedados. procure demonstrar com claridade de que se trata cada tipo de dado tipo: printf("%d", (int)((double)1.2 * (int)10) ); adicionado 8 minutos depois ataque1[i] = 1.2*ataque1[i]; por exemplo é como se fosse int = double*int . Talvez seja o que você busca: ataque1[i] = (int)( (float)1.2*(int)ataque1[i]);
  4. O operador =(atribuição) em C/C++ é um caractere que serve para atribuir um valor a uma variável, então no caso você esta esta atribuindo a c, o valor binário(true o false) de comparar 'H' com 'h' usando o operador ||(or), que gera um true neste caso, pois tanto 'H' como 'h' tem um valor positivo, que você pode averiguar na tabela asc2, o "'H'||'h'" é como afirmar "O 'H' é verdadeiro ou o 'h' é verdadeiro?",um pouco sem sentido mas... logicamente ambos são verdadeiros já que o 'H' ocupa o numero 72 na tabela, e o 'h' ocupa o numero 104. O operador or(||) quer saber se apenas um dos 2 H/h são verdadeiros, e ambos são verdadeiros neste caso, já que em C, somente o zero é considerado falso, e o resto é considerado verdadeiro, incluindo os números negativos. Então o resultado de c=(('H')||('h')) é como atribuir 1 a c. porém como c é um char, o que se atribui a c é o caractere 1 da tabela asc2, se tentar imprimir isso vai sair uma carinha feliz como você pode ver abaixo: Isso é o mesmo que acontece quando você tenta imprimir 1 como se fosse um char: printf("%c", 1); porém se tentar imprimir o c como um int você vera a magia: Isso prova que o valor que guarda c é o caractere 1 da tabela asc2. Com isso você ja sabe para que serve o operador =. Agora vamos ao operador ==. O operador == igual que o || serve para comparar um valor porém com outros critérios. Por enquanto que o operador or(||) quer saber se pelo menos um dos valores é verdadeiro, o operador quer saber se ambos valores são identicos, cada um tem sua aplicação no seu devido caso conforme o que queiramos saber, igual que com outros operadores como &&, <, >, etc. Cada operador desses tem sua aplicação, porém todos tem algo em comum... todos geram true ou false e você pode provar isso fazendo: int a = 10; int b = 10; printf("%d", ( a==b )); //a é igual a b? Se sim, gera 1(true), se não, gera um 0 (false). printf("%d", ( a||b )); //Pelo menos um deles é verdadeiro? Se sim, gera 1(true), se não, gera um 0 (false). printf("%d", ( a<b ));//a é menor que b? Se sim, gera 1(true), se não, gera um 0 (false). printf("%d", ( a>b ));//a é maior que b? Se sim, gera 1(true), se não, gera um 0 (false). printf("%d", ( a&&b ));//Ambas variaveis são verdadeiras? Se sim, gera 1(true), se não, gera um 0 (false). ... Como você pode ver, dependendo do valor de a e b conforme o operador aplicado, se pode dizer que o operador é o contexto, e que conforme esse contexto se gera 1 ou 0. Por o operador de negação '!' adiante inverte a resposta, tipo se a resposta seria sim, a saída será não, e se a saída será não invertida será sim. int a = 10; int b = 10; printf("%d", !( a==b )); //a é igual a b? Se sim, gera 0(false), se não, gera um 1(true). printf("%d", !( a||b )); //Pelo menos um deles é verdadeiro? Se sim, gera 0(false), se não, gera um 1(true). printf("%d", !( a<b ));//a é menor que b? Se sim, gera 0(false), se não, gera um 1(true). printf("%d", !( a>b ));//a é maior que b? Se sim, gera 0(false), se não, gera um 1(true). printf("%d", !( a&&b ));//Ambas variaveis são verdadeiras? Se sim, gera 0(false), se não, gera um 1(true). ... Agora bem... com o anterior você ja sabe para que serve ==, igualemnte a &&, <, >, ||, etc, servem para comparar. A resposta a sua pergunta é: O '=' serve para atribuir, e '==' serve para comparar! Agora existe outra pergunta.... P or que seu programa falha nesse ponto? A toma de decisão if, o único que quer saber é se um valor é verdadeiro o false, para saber se entra ou não dentro do corpo onde está seu código. Em teoria if(1) funciona. Por quê? Porque 1 é true! O if(0) por outro lado falha. Ja sabe por quê? Claro... 0 é false. E if(-32)? Antes falei que qualquer numero diferente a zero é true, incluído os negativos e positivos. OK? Então ja da para saber p q seu programa falha? Claro que sim... O if (c=(('H')||('h'))) como ja sabemos acontece a atribuição do valor positivo 1 a c a causa da comparação de 'H' com 'h' conforme o contexto or(||) que quer saber se pelo menos um dos valores é verdadeiro, e como ambos são verdadeiros pois essa comparação gera um true, e esse true e atribuido a c. Que precisa if para funcionar? Um true! E ele tem esse true pois c guarda um true. TADAH!!! Falho descoberto!!! ushuehsheush vou embora to cansado de escrever suheushe sorte!
  5. Nessa linha por exemplo: if (tecla=='d') x++; você esta incrementando x constantemente, sem se importar se ele atropela ou não a linha. O x somente deveria incrementar até atingir 43 que é até onde a nave pode chegar sem atropelar a linha . Igual a:if ( tecla == 'a' ) x--; Somente deveria decrementar até que x seja maior que 0: troque: if (tecla=='d') x++; if ( tecla == 'a') x--; por: if ( tecla == 'a' && x > 1) x--; if ( tecla == 'd' && x < 43 ) x++; Veja a magia funcionar. >_< #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <windows.h> void gotoxy ( int x, int y ) { COORD p = {0, 0}; p.X = x; p.Y = y; SetConsoleCursorPosition ( GetStdHandle ( STD_OUTPUT_HANDLE ), p ); } void nave ( int x, int y ); void rajada ( int x, int y ); void rajada2 ( int x, int y ); void rajada3 ( int x, int y ); void rajada4 ( int x, int y ); void main() { char tecla; int x, y, vida, c; tecla = 0; x = 35; y = 30; vida = 10; for ( c = 0; c < 50; c++ ) { gotoxy ( 0, c ); printf ( "%c", 219 ); } for ( c = 0; c < 50; c++ ) { gotoxy ( c, 0 ); printf ( "%c", 219 ); } for ( c = 0; c < 80; c++ ) { gotoxy ( 50, c ); printf ( "%c", 219 ); } for ( c = 0; c < 80; c++ ) { gotoxy ( c, 50 ); printf ( "%c", 219 ); } while ( tecla != 'x' ) { tecla = getch(); if ( tecla == 'a' && x > 1) x--; //aqui a diferença if ( tecla == 'd' && x < 43 ) x++; //aqui a diferença if ( tecla == 's' ) y++; if ( tecla == 'w' ) y--; if ( tecla == '1' ) rajada ( x, y ); if ( tecla == '2' ) rajada2 ( x, y ); if ( tecla == '3' ) rajada3 ( x, y ); if ( tecla == '4' ) rajada4 ( x, y ); nave ( x, y ); gotoxy ( 0, 0 ); printf ( "vida=%d", vida ); gotoxy ( x + 2, y - 1 ); printf ( " " ); gotoxy ( x + 2, y + 3 ); printf ( " " ); gotoxy ( x + 1, y + 3 ); printf ( " " ); gotoxy ( x + 4, y + 3 ); printf ( " " ); gotoxy ( x + 3, y + 3 ); printf ( " " ); gotoxy ( x + 5, y + 3 ); printf ( " " ); } } //subrotina nave void nave ( int x, int y ) { system ( "color 0F" ); gotoxy ( x + 2, y ); printf ( " ^ " ); gotoxy ( x + 1, y + 1 ); printf ( " ($) " ); gotoxy ( x, y + 2 ); printf ( " /___\\ " ); } //subrotina das rajadas void rajada ( int x, int y ) { system ( "color 8C" ); int z; for ( z = 3; z < 30 ; z++ ) { gotoxy ( x + 2, y - z ); printf ( " D " ); gotoxy ( x + 2, y - z + 1 ); printf ( " " ); gotoxy ( x, y - z < 30 ); printf ( " " ); Beep ( 1000, 30 ); } } void rajada2 ( int x, int y ) { system ( "color 8D" ); int c; for ( c = 3; c < 30 ; c++ ) { gotoxy ( x + 2, y - c ); printf ( " O " ); gotoxy ( x + 2, y - c + 2 ); printf ( " " ); gotoxy ( x, y - c < 30 ); printf ( " " ); Beep ( 3000, 30 ); } } void rajada3 ( int x, int y ) { system ( "color B" ); int v; for ( v = 3; v < 30 ; v++ ) { gotoxy ( x + 2, y - v ); printf ( " L " ); gotoxy ( x + 2, y - v + 1 ); printf ( " " ); gotoxy ( x, y - v < 30 ); printf ( " " ); Beep ( 5000, 30 ); } } void rajada4 ( int x, int y ) { system ( "color 8E" ); int b; for ( b = 3; b < 30 ; b++ ) { gotoxy ( x + 2, y - b ); printf ( " A " ); gotoxy ( x + 2, y - b + 1 ); printf ( " " ); gotoxy ( x, y - b < 30 ); printf ( " " ); Beep ( 8000, 30 ); } }
  6. Para que funcione você tem que usar uma fonte true type. você pode identificar as fontes true type da seguinte forma: Qualquer dessas funciona perfeitamente. você pode até buscar alguma personalizada para programação.
  7. Tenho como fonte a consolas.
  8. A ver, vamos passar a ação... Antes de ficar supondo coisas, e buscar "soluções inúteis", mande-me o seu código, e escreva exatamente o que você está esperando que seu programa faça. Capturas de tela, fragmentos de códigos, referencias a paginas que tiver, qualquer coisa. Muitas vezes você acha que pode fazer uma coisa e está limitado por algum problema "invisível". Mande uma foto do seu teclado se puder, idioma usado no sistema operativo etc etc. Vamos ver se resolvemos ou não. Não instale nada mais no seu computador, primeiro vamos ver do que se trata. Aguardo resposta.
  9. Prove setlocale(LC_ALL, "portuguese-brazilian"); e nos diga aqui se funcionou seu programa. Primeiro vamos esclarecer qual a versão do devc++ você tem. Se não me engano o dev c++ que funciona em windows 7 adiante é o devc++ ORWELL que é justo a que lhe recomenda @TYSQUARE89. A ultima versão deste programa nesta pagina vem com MinGW 4.8.1.7z, realmente não está mal. Ja ultima versão do compilador do codeblocks oficial vem com TDM-GCC (version 4.9.2, 32 bit, SJLJ) que é algo mais atual porém também não é a ultima versão do compilador atualmente. Se quiser as ultimas versões do compilador você terá de baixar manualmente e integrar-lhe ao seu IDE. Eu por exemplo uso essa versão aqui, que é a 6.2, porém como falei, descarrego ela separadamente do IDE. Atualmente uso codeblocks junto com MinGW-W64 6.2.0. Codeblocks tem uma versão que você pode baixar sem compilador e lhe permite você o integrar com outros compiladores mais atuais. Em realidade, não vejo necessidade de você passar pelo mesmo processo que eu faço, pois o processo de integração de um compilador com o IDE é algo relativamente complicado se não tiver ideia do que esta fazendo. Usando o compilador que vem com as ultimas versões de codeblocks ou devc++Orwell é mais que suficiente para a maioria, e se não todos os programas que você quer compilar, a diferença pode estar em coisas como fix de bugs importantes ou não tanto, suporte ao um novo padrão da linguagem, como c++17, etc, mas porém os padrões c++11, c++14 e mais antigos são os mesmos e n4ao mudaram. Poucas pessoas fazem uso do ultimo padrão da linguagem atualmente, quando eles(Os criadores dos IDEs) acharem pertinente, certamente incluirão uma versão do compilador mais atualizada e por isso você não precisa esquentar a cabeça. Procure saber a diferença que tem entre uma versão e outra do compilador que você esta usando e assim determinar se necessita ou não a ultima versão de um compilador. A diferença entre mingw 4.9 e 6.3 esta entre o fix de erros, inclusão de novas funcionalidades, e a inclusão do padrão c++17 na versão 6. Por outro lado a versão 4 tem suporte para c++11 e experimentalmente para c++14. isso é o que diz aqui: https://gcc.gnu.org/gcc-4.9/changes.html https://gcc.gnu.org/gcc-6/changes.html Na sua pagina oficial você pode ver todos os padroes https://gcc.gnu.org/. Por exemplo o ultimo padrão que estão trabalhando é o 7.1 que tem suas diferenças esclarecidas em https://gcc.gnu.org/gcc-7/changes.html Necessitas uma versão moderna? >_< Prove primeiro com o comando setlocale(LC_ALL, "portuguese-brazilian"), pode que funcione. adicionado 3 minutos depois Ja estão trabalhando atualmente na versão 8. Se é que não da tempo por uma, e ja tem outra. Não esquente a cabeça com isso, se você estiver estudando procure saber o padrão que você está aprendendo primeiro para saber se precisa buscar um compilador mais atualizado. Levo anos programando e apenas faço uso do padrão c++11. >_<
  10. Claro! Aprenda soquetes para comunicação entre aplicações.
  11. basicamente o que o operador > faz é "redirigir" a saída para um arquivo de texto ao invés da saída ser feita no console, que posteriormente poderia ser lido pelo mesmo programa para fazer comprovações e outras coisas mais.
  12. system("arp -a > arquivo.txt") igual você faria no prompt. talvez você tenha que usar path ou a rota completa tipo c:\uma pasta\ outra pasta.... arquivo.txt
  13. O primeiro de tudo é saber passar de decimal para binário como você pode ver nesse vídeo aqui a teoria. https://www.youtube.com/watch?v=TJRYW-lSocU Depois de ter aprendido a passar de decimal a binário como no vídeo anterior você pode ver a teoria de como somar binários neste outro vídeo: https://youtu.be/7igvEoqSby8 Se quiser um conversor de decimal a binário em C de uma olhada nesse vídeo daqui: https://www.youtube.com/watch?v=JkFoJLLuZTU&feature=youtu.be Como você pode ver nesse exemplo você pode gerar um numero binário que nada mais é que um array de inteiros no qual posteriormente você pode aplicar operações como somar, restar, etc. É coisa de praticar e buscar mais informação.
  14. E o que faz esse msg aqui? Não seria mais producente buscar o subforum de arduino, ou html/javascript? Em fim... não duvido que aqui, alguém tenha exp com isso, só acho que no seu subforum correto a resposta apareça mais rápido. também não sei se existe subforum de arduino, mas deve haver.
  15. http://www.directxtutorial.com/Lesson.aspx?lessonid=11-4-5