Ir ao conteúdo
  • Cadastre-se

Benjamin Breeg

Membros Plenos
  • Total de itens

    147
  • Registro em

  • Última visita

  • Qualificações

    N/D

Reputação

140

3 Seguidores

Informações gerais

  • Cidade e Estado
    Rio de Janeiro/RJ
  • Sexo
    Masculino
  1. Por padrão um valor em ponto flutuante é escrito com um total de seis dígitos usando o formato general(Default) ou seja o número é arredondado para dar a melhor aproximação que possa ser escrita usando apenas seis dígitos. Ex: 1234.567 é escrito como 1234.57 1.2345678 é escrito como 1.23457 Quanto você seta o floatfield em fixed a saída passa a usar notação de ponto fixo, a parte decimal vai assumir de forma restrita o valor do setprecision.
  2. Seu programa esta correto apesar de um tanto confuso. Pela imagem é possível ver que ele abre a janela e não da nenhum erro referente ao carregamento da imagem. Se ele não esta abrindo a imagem verifique se o arquivo é valido ou se o SFML foi instalado corretamente. Organizei o código para você dar uma olhada. #include "SFML/Graphics.hpp" #include <iostream> using namespace sf; const int x = 400, y = 400; int main() { RenderWindow w( VideoMode(x, y), "Window"); sf::Texture t; if (!t.loadFromFile("Grr.png")) { std::cout << "Erro! Arquivo nao encontrado" << std::endl; } Sprite s(t); while (w.isOpen()) { Event e; while (w.pollEvent(e)) { switch (e.type) { case Event::Closed: w.close(); break; } } w.clear(); w.draw(s); w.display(); } }
  3. Acho que no nosso idioma não existe nenhum livro que abrange computação gráfica em C/C++. Se a língua inglesa não for um problema, existem dois livros que são bem renomados sobre o assunto. Computer Graphics: Principles and Practice in C (2nd Edition) e o Computer Graphics: Principles and Practice (3rd Edition) Esse ultimo inclusive em sua primeira edição, segundo um twitter do John Carmack( co-fundador da id software) foi a "bíblia" pra ele no final dos anos 80.
  4. Esse assunto é estudado em álgebra linear, aqui tem uma explicação sobre o produto escalar de vetores https://pt.khanacademy.org/math/linear-algebra/vectors-and-spaces/dot-cross-products/v/vector-dot-product-and-vector-length
  5. Você uso o tipo errado ali no menu, no c/c++ o operador de igualdade é == e ali quando você mostra o resultado da formula t1 você não precisa usar o operador de endereço &. int main() { float t1,q2,r3,l4; float base,altura,lado,diagma,diagmen; int forma; printf("Selecione a forma geométrica que deseja calcular a area"); printf("\n1 para Triangulo"); printf("\n2 para Quadrado"); printf("\n3 para Retangulo"); printf("\n4 para Losangulo\n"); scanf("%i",&forma); if (forma == 1) { printf("\nDigite o tamanho da base: "); scanf("%f",&base); printf("Valor declarado para base: %2.2f",base); printf("\nDigite o tamanho da altura: "); scanf("%f",&altura); t1 = (base * altura) / 2; printf("%2.2f", t1); } }
  6. Nesse caso não é necessário, string e bool por ex são tipos nativos do C++. O <string> você só usa quando vai programar orientado a objetos. http://www.cplusplus.com/reference/string/string/ No C++ você pode fazer comparações, atribuições diretamente com os operadores por ex.. em c você teria que usar o string.h if(nota > maiorNota) { maiorNota = nota; strcpy(melhorAluno, nome); } No C++ você não precisa usar cstring. if(maiorNota > nota) { nota = maiorNota; nome = melhorAluno; } C++ da muita liberdade de você programar do jeito que quer mas é interessante aprender como o C++ trabalha se esta programando nele.
  7. char para string é sintaxe de C, no caso ali você pode usar string Ficaria assim: //C04EX12.CPP #include <iostream> using namespace std; int main(void) { string SEXO; string NOME; cout << "Insira seu nome: "; cin >> NOME; cout << "Insira seu sexo: "; cin >> SEXO; if (SEXO == "M" || SEXO == "m") { cout << "llmo Sr." << NOME; } else if (SEXO == "F" || SEXO == "f") { cout << "llma Sra." << NOME; } else { cout << "Sexo invalido"; } return 0; }
  8. Benjamin Breeg

    Jogo Snake

    Tem um vídeo bem interessante de um cara no youtube que fez o Snake usando os recursos da STL do C++. Fiz uma modificação no código para poder rodar no CodeBlocks, inclusive tem uma função bem interessante que cria um buffer de tela pra evitar aquele pisca pisca na tela. Pode ser um bom ponto de partida para entender melhor os aspectos um pouco mais avançados do C++. #include <iostream> #include <list> #include <thread> using namespace std; #ifndef UNICODE #define UNICODE #define UNICODE_WAS_UNDEFINED #endif #include <Windows.h> #ifdef UNICODE_WAS_UNDEFINED #undef UNICODE #endif int nScreenWidth = 120; int nScreenHeight = 30; struct sSnakeSegment { int x; int y; }; int main() { // Create Screen Buffer wchar_t *screen = new wchar_t[nScreenWidth*nScreenHeight]; for (int i = 0; i < nScreenWidth*nScreenHeight; i++) screen[i] = L' '; HANDLE hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL); SetConsoleActiveScreenBuffer(hConsole); DWORD dwBytesWritten = 0; while(1) { // Reset to known state list<sSnakeSegment> snake = { {60,15},{61,15},{62,15},{63,15},{64,15},{65,15},{66,15},{67,15},{68,15},{69,15} }; int nFoodX = 30; int nFoodY = 15; int nScore = 0; int nSnakeDirection = 3; bool bDead = false; bool bKeyLeft = false, bKeyRight = false, bKeyLeftOld = false, bKeyRightOld = false; while (!bDead) { // Frame Timing, compensate for aspect ratio of command line auto t1 = chrono::system_clock::now(); while ((chrono::system_clock::now() - t1) < ((nSnakeDirection % 2 == 1) ? 120ms : 200ms)) { // Get Input, bKeyRight = (0x8000 & GetAsyncKeyState((unsigned char)('\x27'))) != 0; bKeyLeft = (0x8000 & GetAsyncKeyState((unsigned char)('\x25'))) != 0; if (bKeyRight && !bKeyRightOld) { nSnakeDirection++; if (nSnakeDirection == 4) nSnakeDirection = 0; } if (bKeyLeft && !bKeyLeftOld) { nSnakeDirection--; if (nSnakeDirection == -1) nSnakeDirection = 3; } bKeyRightOld = bKeyRight; bKeyLeftOld = bKeyLeft; } // ==== Logic // Update Snake Position, place a new head at the front of the list in // the right direction switch (nSnakeDirection) { case 0: // UP snake.push_front({ snake.front().x, snake.front().y - 1 }); break; case 1: // RIGHT snake.push_front({ snake.front().x + 1, snake.front().y }); break; case 2: // DOWN snake.push_front({ snake.front().x, snake.front().y + 1 }); break; case 3: // LEFT snake.push_front({ snake.front().x - 1, snake.front().y }); break; } // Collision Detect Snake V Food if (snake.front().x == nFoodX && snake.front().y == nFoodY) { nScore++; while (screen[nFoodY * nScreenWidth + nFoodX] != L' ') { nFoodX = rand() % nScreenWidth; nFoodY = (rand() % (nScreenHeight-3))+3; } for (int i = 0; i < 5; i++) snake.push_back({ snake.back().x, snake.back().y }); } // Collision Detect Snake V World if (snake.front().x < 0 || snake.front().x >= nScreenWidth) bDead = true; if (snake.front().y < 3 || snake.front().y >= nScreenHeight) bDead = true; // Collision Detect Snake V Snake for (list<sSnakeSegment>::iterator i = snake.begin(); i != snake.end(); i++) if (i != snake.begin() && i->x == snake.front().x && i->y == snake.front().y) bDead = true; // Chop off Snakes tail :-/ snake.pop_back(); // ==== Presentation // Clear Screen for (int i = 0; i < nScreenWidth*nScreenHeight; i++) screen[i] = L' '; // Draw Stats & Border for (int i = 0; i < nScreenWidth; i++) { screen[i] = L'='; screen[2 * nScreenWidth + i] = L'='; } wsprintf(&screen[nScreenWidth + 5], L"www.OneLoneCoder.com - S N A K E ! ! SCORE: %d", nScore); // Draw Snake Body for (auto s : snake) screen[s.y * nScreenWidth + s.x] = bDead ? L'+' : L'O'; // Draw Snake Head screen[snake.front().y * nScreenWidth + snake.front().x] = bDead ? L'X' : L'@'; // Draw Food screen[nFoodY * nScreenWidth + nFoodX] = L'%'; if (bDead) wsprintf(&screen[15 * nScreenWidth + 40], L" PRESS 'SPACE' TO PLAY AGAIN "); // Display Frame WriteConsoleOutputCharacter(hConsole, screen, nScreenWidth * nScreenHeight, { 0,0 }, &dwBytesWritten); } // Wait for space while ((0x8000 & GetAsyncKeyState((unsigned char)('\x20'))) == 0); } return 0; }
  9. Se você esta programando em C++, tente fazer as coisas sem usar a sintaxe do C.. #include<iostream> #include<string> using namespace std; int main() { cout << "Digite o os primeiros 9 digitos para calcular os dois ultimos numeros do CPF:\n"; string CPF = "???"; getline(cin,CPF); cout << "CPF: " << CPF << '\n'; }
  10. Cara se tem que indentar seu código, tem vários erros de logica, o for esta vazio, colocou " ; " no if, isso é erro que apesar de ser um código totalmente valido para o C++ o if fica sem função, não importa o teste. Abre os { }, faz os recuos direitinho ou use uma ide, notepad++ pelo menos para facilitar tua vida. int i; for(i=1;i<=10;i++) { printf("%i. Devo indentar meu codigo. \n",i); }
  11. Você pode usar tanto if ou switch if (opcao == 'v') // else if (opcao == 'c') // else cout << "opcao invalida!\n"; ou switch(opcao) { case 'c': // break; case 'v': // break; default: cout << "opcao invalida!\n"; break; }
  12. Isso é verdade mesmo geralmente quem programa usando VCL tipo Delphi (object pascal) ou C++ Builder(c++) raramente usa somente recursos da própria IDE, na maioria das vezes usam componentes ou bibliotecas para estender as capacidades. Saber exatamente o que o programador original usou não é tarefa fácil, somente com experiencia nas tecnológicas envolvidas, muitas vezes programadores experientes pagam os pecados tentando descobrir o que outro fez, imagina uma pessoa totalmente leiga.. Realmente o melhor mesmo é falar pro seu chefe tirar o escorpião do bolso e contratar mão de obra qualificada hehe.
  13. Alias desculpa pesquisando aqui encontrei isso... What is a BPR file? Project file created by Borland C++Builder 6, an older IDE now replaced by Embarcadero C++ Builder; saves the project information for a C++ development project; cannot be converted to the newer C++Builder format without performing the conversion manually. Esse projeto pelo vista usa uma versão do antigo C++ Builder da Borland, segundo o texto o projeto dessa versão não é compatível com o nova versão da Embarcadero, ai vai ser necessário caso você queira usar essa nova IDE fazer a migração manualmente.
  14. O que de fato da pra fazer com assembly moderno? Porque praticamente qualquer coisa que você tentar fazer no Windows, relacionado a gráfico, memoria o próprio te da uma msg dizendo "NÃO!". Alguns compiladores deixam você usar assembly junto do C/C++ (inline assembly), acho que é difícil alguém programar puramente em assembly. Fiz esse exemplo no visual studio. #include <iostream> using namespace std; int main() { int a, b, c; cin >> a; cin >> b; _asm { mov eax, a add eax, b mov c, eax }; cout << c << endl; cin.get(); return 0; }

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

×