Ir ao conteúdo
  • Cadastre-se

Benjamin Breeg

Membro Pleno
  • Posts

    230
  • Cadastrado em

  • Última visita

Tudo que Benjamin Breeg postou

  1. Em C++ pode ser feito desta maneira... #include <iostream> using namespace std; string parOuImpar(int num) { if (num%2 == 0) return "verdadeiro"; return "falso"; } int main() { cout << parOuImpar(3) << endl; cout << parOuImpar(46) << endl; cout << parOuImpar(19) << endl; } É isso que não entendi direito no enunciado se ele quer que diga se é par ou impar ou se apenas tem que retornar true false. Se for isso também da pra representar o booleano na forma de texto com boolalpha. bool parOuImpar(int num) { if (num%2 == 0) return true; return false; } int main() { cout << boolalpha; cout << parOuImpar(3) << endl; cout << parOuImpar(46) << endl; cout << parOuImpar(19) << endl; }
  2. Pra fazer esse tipo de launcher pra jogos tu precisa aprender alguma API para criação de aplicativos desktop. O C++ tem varias, algumas mais usados são: Qt Creator, wxWidgets, FLTK ou se aventurar na Windows API para criar as janelas e formulários na "unha " hehe O principio é +/- esse:
  3. Tem um cara no youtube que criou uma biblioteca para criar jogos usando o console do windows, só que ele meio que elevou o nível da coisa hehe. Você que esta estudando pra criar um framework próprio pode ser interessante dar uma olhada. Deve ter as funções ou algo parecido com o que você procura. https://github.com/OneLoneCoder/videos/blob/master/olcConsoleGameEngine.h Alguns jogos que ele ensinou com o framework RPG FPS Plataforma
  4. Isso ai é um tanto estranho mesmo.. esse int parece ser uma convenção apenas.. um argumento "fictício" apenas para diferenciar incremento pre pos... segundo palavras do stroustrup criador do C++ para ficar mais "fofo". https://code-examples.net/es/q/e89b3e Vai entender o que passa na cabeça desses gênios hehe
  5. Você também pode usar um segundo loop para validar as opções #include <iostream> #include <tchar.h> using namespace std; int main() { _tsetlocale(LC_ALL, "portuguese"); bool fim = false; while ( !fim ) { cout << endl << "------------------" << endl; cout << "Escolha a opção" << endl; cout << "1: Imprimir o somatório de seus elementos" << endl; cout << "2: Imprimir a média de seus elementos" << endl; cout << "3: Imprimir a média e o somatório" << endl; cout << "4: Substituir por zero todos os valores negativos e imprimir a média" << endl; cout << "5: Substituir por zero todos os valores repetidos e imprimir a média e o somatório" << endl; cout << "6: mostrar o vetor ordenado" << endl; cout << "0: Sair da aplicação" << endl; int opc; cin >> opc; while ( opc != 1 && opc != 2 && opc != 3 && opc != 4 && opc != 5 && opc != 6 && opc != 0 ) { cout << "Opcao invalida! Escolha a opcao: "; cin >> opc; } if ( opc == 1 ) { cout << "opcao 1"; } else if ( opc == 2 ) { cout << "opcao 2"; } else if ( opc == 3 ) { cout << "opcao 3"; } else if ( opc == 4 ) { cout << "opcao 4"; } else if ( opc == 5 ) { cout << "opcao 5"; } else if ( opc == 6 ) { cout << "opcao 6"; } else if ( opc == 0 ) { fim = true; } } return 0; }
  6. Eu uso aqui a RLUTIL, é bem simples de usar apenas um arquivo .h, ela é usada para criar jogos de texto em modo console mas aparentemente é um sucessor espiritual da antiga conio2.h. Tem todos os recursos e mais alguns e funciona em C e C++. https://github.com/tapio/rlutil Exemplo de um programinha pra mover um "personagem" sem aquele lag de input. #include <iostream> #include "rlutil.h" int main() { int x = 5; int y = 5; rlutil::hidecursor(); rlutil::cls(); rlutil::locate(x,y); std::cout << '@' << std::endl; while (true) { if (kbhit()) { char k = getch(); rlutil::locate(x,y); std::cout << " "; if (k == 'a') --x; else if (k == 'd') ++x; else if (k == 'w') --y; else if (k == 's') ++y; else if (k == ' ') break; rlutil::locate(x,y); std::cout << '@'; } std::cout.flush(); } rlutil::showcursor(); return 0; } Outros exemplo de cor e jogos.
  7. Eu acho que não tem nada no C parecido com o count() da biblioteca padrão do C++ Basicamente a função procura por ocorrências de um determinado elemento numa sequencia que pode ser string, array, vector etc etc #include<algorithm> #include<iostream> using namespace std; int main() { string str = "clubedohardware"; cout << count(str.begin(), str.end(), 'a'); return 0; } Ele vai percorrer a string e mostrar quantas vezes o caractere 'a' apareceu.
  8. Você pode usar uma expressão matemática equivalente ao %, por ex 9 % 2 a divisão inteira da o resultado 4, pega esse valor e multiplica por 2 que vai dar 8, ai subtrai 8 de 9 para obter o resto da divisão que é 1. Não podemos dar o exercício mastigado mas com essa logica você consegue fazer uma formula equivalente.
  9. Não é muito simples o vector é um tipo de array dinâmico que abstrai a manipulação de memoria do programador, para fazer algo semelhante no C é preciso saber manipular as estruturas na memoria de forma manual. Da uma olhada nesse artigo: Dynamic Arrays in C Quanto ao sort da biblioteca algorithm você precisa fazer manualmente usando algum algorítimo de ordenação tipo bubble sort, insertion sort, merge sort etc etc.
  10. Simon Viegas tentei dar uma melhorada seguindo suas recomendações. O jogo agora esta mais intuitivo, mostra as letras que foram digitas, diferencia maiúscula e minúscula, gera avisos caso você digite uma letra que não existe ou tenta usar uma letra que já foi usada, modifiquei a parte que fazia a contagem dos erros e usei uma nomenclatura mais clara para as variáveis. Acho que agora esta funcionando corretamente. #include <iostream> #include <string> #include <algorithm> using namespace std; int main() { int chances = 6; int erros = 0; string palavraSecreta = ""; string letrasDigitadas = ""; cout << "Fale para o seu amigo tampar" << endl; cout << "os olhos e digite a palavra secreta: " << endl; cin >> palavraSecreta; transform(palavraSecreta.begin(), palavraSecreta.end(), palavraSecreta.begin(), ::toupper); string letrasReveladas(palavraSecreta.size(), '-'); system("cls"); while ((erros < chances) && (letrasReveladas != palavraSecreta)) { cout << "\n\nChances restantes: " << (chances - erros); cout << "\n\nLetras digitadas: " << letrasDigitadas; cout << "\n\nPalavra secreta: " << letrasReveladas; char letra; cout << "\n\nDigite uma letra: "; cin >> letra; letra = toupper(letra); while (letrasDigitadas.find(letra) != string::npos) { cout << "\nVoce ja digitou a letra: " << letra << endl; cout << "\nDigite uma letra: "; cin >> letra; letra = toupper(letra); } letrasDigitadas += letra; if (palavraSecreta.find(letra) != string::npos) { for (unsigned int i = 0; i < palavraSecreta.length(); i++) { if (palavraSecreta[i] == letra) { letrasReveladas[i] = letra; } } } else { cout << "\nVoce errou! A letra " << letra << " nao existe na palavra secreta!"; erros++; } } if (erros == chances) cout << "\n\nVoce perdeu! A palavra era " << palavraSecreta << endl; else cout << "\n\nParabens voce venceu!" << endl; return 0; }
  11. Cara se é positivo ou não pode render uma boa discussão hehe Na minha opinião é melhor tentar aprender uma sintaxe de C++ mais moderna pelo menos C++11 e usar mais a biblioteca padrão do C++ ao invés das funções do C. Por exemplo para manipular strings no C++ podemos usar as funções membro da classe string e operadores como +, += ao invés de usar funções da biblioteca padrão do C strlen, strcat etc etc. Aqui tem um bom tutorial com comparações e exemplos de como manipular strings no C++. https://pt.wikibooks.org/wiki/Programar_em_C%2B%2B/Manipulando_strings Seu programa tentando usar mais a sintaxe do C++ #include <iostream> #include <string> using namespace std; int main() { int chances = 6; bool acerto = false; string palavra; cout << "Fale para o seu amigo tampar" << endl; cout << "os olhos e digite a palavra palavra: " << endl; cin >> palavra; system("CLS"); int acertos = 0; string secreta(palavra.size(), '-'); while ((acertos < chances) && (secreta != palavra)) { cout << "\n\nChances restantes: " << chances; cout << "\n\nPalavra secreta: " << secreta << endl; char letra; cout << "\nDigite uma letra: "; cin >> letra; for (unsigned int i = 0; i < palavra.length(); i++) { if (palavra[i] == letra) { acerto = true; secreta[i] = letra; acertos++; } } if(!acerto) { chances--; } acerto = false; system("CLS"); } system("CLS"); if (acertos == chances) cout << "\nVoce perdeu!"; else cout << "\nVoce venceu!"; return 0; }
  12. o long long int em C se não me engano so foi adicionado na versão C99. Dependendo da versão do seu compilador basta você retirar o cabeçalhos específicos do C++ Mais ou menos isso... #include <stdio.h> int verificaDescolado(long long X) { if (X == 1) return 0; int primo = 1; for (long long i = 2; i <= sqrt(X); i++) { if (X % (i*i) == 0) return 0; if (X % i == 0) primo = 0; } return !primo; } int main() { long long N; scanf("%lld", &N); int ans = 0; for (long long i = 1; i <= sqrt(N); i++) { if (N % i == 0) { ans += verificaDescolado(i); if (i != N/i) ans += verificaDescolado(N/i); } } printf("%d", ans); } Agora programa automático que converte o código de um para outro desconheço, geralmente quando se precisa programar em C partindo do C++ vai ter que lidar com uma serie de limitações do C. Compilador usado: gcc (x86_64-win32-seh-rev0, Built by MinGW-W64 project) 8.1.0
  13. Você pode usar as próprias bibliotecas do C++ ao invés da windows.h. Usando <thread> para o sleep_for e <chrono> para ajustar o tempo usando o exemplo do devair1010. // Incluir os header #include <thread> #include <chrono> // Modificar o for for(int i=0; i<6; i++){ std::this_thread::sleep_for (std::chrono::milliseconds(500)); cout << titulo[i]; }
  14. Teve um cara que portou o dirent.h para sistemas windows https://github.com/tronkko/dirent Fora isso você pode usar a WinAPI, a documentação é bem rica e tem muitos exemplos. https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea
  15. Então agora esta funcionando como uma estrutura pilha, o primeiro exemplo de lista que você enviou foi usando vetor mas não fica dinâmico como ele queria, a pilha pode ser implementada usando vetores ou listas encadeadas. Uma forma de fazer uma lista usando classes e new do c++ ao invés de malloc é +/- assim #include <iostream> using namespace std; template<typename T> class Lista { private: class No { public: No* prox; T elem; No(T elem, No* prox = nullptr) { this->elem = elem; this->prox = prox; } ~No() { delete this->prox; } }; No* prim; int nos; public: Lista() { this->prim = nullptr; this->nos = 0; } ~Lista() { delete this->prim; } void push(T elem) { if(this->prim == nullptr) { this->prim = new No(elem); } else { No* novo = this->prim; while(novo->prox != nullptr) novo = novo->prox; novo->prox = new No(elem); } this->nos++; } void mostra() { cout << "Mostrando os Elementos\n"; No *ptr = prim; for(No *ptr = prim; ptr != nullptr; ptr = ptr->prox) cout << ptr->elem << "\n"; } }; int main() { Lista<int> lista1; Lista<string> lista2; lista1.push(1); lista1.push(2); lista1.push(3); lista2.push("Um"); lista2.push("Dois"); lista2.push("Tres"); lista1.mostra(); lista2.mostra(); system("PAUSE"); return 0; } O template é para usar a lista com mais de um tipo.
  16. Não é apenas uma lista encadeada, o que esta sendo implementado é uma estrutura pilha usando lista encadeada.
  17. Como assim ao contrario.. esta certo.. ta exibindo do ultimo elemento empilhado ao primeiro, o primeiro elemento que foi inserido na pilha é o último a ser removido.
  18. Cara no C++ você pode alocar a memoria de uma forma + simples.. Você só precisa criar um struct que vai ser servir de lista encadeada para a pilha e ai fazer a alocação de memoria. Modifiquei o seu exemplo por alto para você entender melhor. Eu não sou familiarizado com C para implementar listas encadeadas e alocar memoria mais em C++ é +/- isso. #include <stdio.h> #include <stdlib.h> #include <iostream> #include <locale> using namespace std; struct no{ int elem; struct no *prox; }; struct no* topo = NULL; void push(int valor) { struct no* novoNo = (struct no*) malloc(sizeof(struct no)); novoNo->elem=valor; novoNo->prox=topo; topo=novoNo; } void pop() { if (topo==NULL) cout << "A pilha está vazia - Underflow" << endl; else { cout<<"Elemento removido: "<< topo->elem <<endl; topo = topo->prox; } } int main() { int escolha, valor; while(escolha!=5){ cout <<"Empilhar" << endl; cout <<"Desempilhar" << endl; cin >> escolha; switch(escolha){ case 1: cout <<"Insira o valor:\n"; cin >> valor; push(valor); break; case 2: pop(); break; } } return 0; }
  19. Cara para entender de fato você teria que estudar os fluxos de entrada e saida do c++ e como manipular outras classes que controlam esses fluxos. Basicamente na sua forma básica o operador "<<" le para objetivos os tipos padrão da linguagem (int, float) etc etc. Só que você pode sobrecarregar o operador << para outras classes, o que eu fiz fiu usar um objeto ostringstream da classe stringstream e usar a habilidade que esse objeto tem de formatação da saída usando uma unica string a partir de um buffer de string. Perceba que não usei nenhuma função da classe somente usei o operador << sobrecarregado por ela.
  20. Uma solução seria você usar um define e usar uma classe qualquer que sobrecarrega o operador << #include <iostream> #include <sstream> using namespace std; #define cout cout << "iniciando\nOla, Mundo!\nfinalizando\n"; ostringstream str; str int main() { cout << "Ola, Mundo!" << endl; }
  21. Sim questão de preferência mesmo, estou usando o Visual Studio desde a versão 2015 ai já me acostumei com ele.
  22. Se você usa visual studio uma alternativa é instalar o componente CLR e construir as aplicações em c++ utilizando formulários, arrastando botões de diversos tipos, caixa de texto, painéis etc etc. Dessa forma tu se livra de ter que montar "na unha" as interfaces gráficas usando diretamente a API do windows, alem disso existe vasto material sobre Windows Form na documentação da microsoft e também no youtube.
  23. Para entender o exercício tu precisa lembrar o que aprendeu sobre classes e ordens numéricas. Lembrando que: Se temos números com um (1) algarismo o chamamos de UNIDADE, logo 1,2,3,4,5,6,7,8,9,0 são unidades. Se temos números com dois (2) algarismos chamamos de DEZENA, logo 10,20,34,56,78,89,90... Todos os números de 10 a 99 são dezenas. Se temos números com três (3) algarismos o chamamos de CENTENA, logo todos os números de 100 a 999 são centenas. Se temos números com quatro (4) algarismos o chamamos de MILHAR, logo todos os números de 1000 a 9999 são milhares. Combinando as DEZENAS com os MILHARES teremos as DEZENAS DE MILHAR que vão desde 10000 até 99999, são cinco (5) algarismos. Combinando as CENTENAS com os MILHARES teremos as CENTENAS DE MILHAR que vão desde 100000 até 999999, são seis (6) algarismos. O ideal pro exercício é você validar a faixa do valor digitado para não ter que ir ate números de 13 algarismos (CENTENAS DE TRILHÕES) ou mais, lembrando que os números são infinitos. Logicamente isso é uma abordagem para quem esta dando os primeiros passos em programação e ainda não estudou vetores, estruturas de repetição, ponteiros, biblioteca padrão do c++ etc etc. Por ex: if (n < 1 || n > 9999) cout << "Fora da faixa permitida!" << endl; else if (n < 10) cout <<"Algarismos: 1"<<endl; else if (n < 100) cout << "Algarismos: 2" <<endl; else if (n < 1000) cout << "Algarismos: 3" <<endl; else if (n < 10000) cout << "Algarismos: 4" <<endl;
  24. Que estranho cara, você esta usando todos os arquivos que enviei no pacote? o libbgi.a gerado pela compilação, o graphics.h veja se não esta aproveitando nenhum arquivo antigo de alguma outra instalação. Porque existem algumas correções feitos pela comunidade visto que o autor original do projeto abandonou ele em 2005. Vou te enviar uma libbgi.a compilada num MinGW mais antigo, aparentemente você esta usando o windows XP. Veja se funciona. Se nada resolver recomendo fortemente que você tenta atualizar suas ferramentas de compilação ou ate mesmo tentar outra versão de MinGW como a TDM-GCC libbgi.zip
  25. Você tem que usar extensão de arquivo .cpp do C++. Faz essas configurações no seu projeto... -lbgi -lgdi32 -lcomdlg32 -luuid -loleaut32 -lole32 Código para testar: Salve com extensão .cpp (c++ projeto) /* putpixel example */ #include <graphics.h> #include <stdlib.h> #include <stdio.h> #include <conio.h> #include <dos.h> #define random(range) (rand() % (range)) #define PIXEL_COUNT 1000 #define DELAY_TIME 100 /* in milliseconds */ int main() { /* request autodetection */ int gdriver = DETECT, gmode, errorcode; int i, x, y, color, maxx, maxy, maxcolor, seed; /* initialize graphics and local variables */ initgraph(&gdriver, &gmode, ""); /* read result of initialization */ errorcode = graphresult(); if (errorcode != grOk) { /* an error occurred */ printf("Graphics error: %s\n", grapherrormsg(errorcode)); printf("Press any key to halt:"); getch(); exit(1); /* terminate with an error code */ } maxx = getmaxx() + 1; maxy = getmaxy() + 1; maxcolor = getmaxcolor() + 1; while (!kbhit()) { /* seed the random number generator */ seed = random(32767); srand(seed); for (i=0; i<PIXEL_COUNT; i++) { x = random(maxx); y = random(maxy); color = random(maxcolor); putpixel(x, y, color); } delay(DELAY_TIME); srand(seed); for (i=0; i<PIXEL_COUNT; i++) { x = random(maxx); y = random(maxy); color = random(maxcolor); if (color == getpixel(x, y)) putpixel(x, y, 0); } } /* clean up */ getch(); closegraph(); return 0; }

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!