Ir ao conteúdo
  • Cadastre-se

vangodp

Membro Pleno
  • Posts

    1.752
  • Cadastrado em

  • Última visita

Tudo que vangodp postou

  1. busque algum tutorial para opengl no youtube. Acredito que seja a forma mais fácil de começar. adicionado 0 minutos depois Para esse jogo eu usaria SFML que é enfocada em 2d. Ou inclusive SDL2
  2. vangodp

    C++ Menu de opção invalida...

    Sempre é melhor switch para isso: #include <stdio.h> #include <stdlib.h> #include <stdbool.h> int main () { int opc; bool sair = false; while ( sair == false ) { printf ( "Digite qual opcao voce quer usar:\n" "1- Matematica basica\n" "2- Eletricidade basica\n" "3- Circuitos eletronicos\n" "0- Sair\n" "Opcao?> " ); scanf ( "%d%*c", &opc ); system ( "CLS" ); switch ( opc ) { case 1: printf ( "Escolhido opcao 1" ); break; case 2: printf ( "Escolhido opcao 2" ); break; case 3: printf ( "Escolhido opcao 3" ); break; case 0: sair = true; printf ( "Byebye!!" ); break; default: printf ( "Opcao invalida.\n" ); break; }//FIM SWITCH printf ( "\n\nSuprimir uma tecla para continuar.\n" ); getchar();//pausa antes de limpar tela(Importante ter buffer limpo ou não funcionará) system ( "CLS" ); } return 0; }
  3. Eu não disse que eles fossem fales, eu disse que o espaço não vai retornar, porque o sistema já considera esse espaço como "livre". Sorte
  4. Primeiro o que você precisa entender é o que acontece quando você elimina um arquivo, incluindo usando o SHIFT+DEL. Existe uma tabela que guarda a posição, permissão e um sem fim de dados sobre todos os arquivos do seu computador. Essa tabela se chama MFT(Master File Table). Quando você elimina um arquivo ele é marcado como "borrado", os outros programas e arquivos tem permissão para escrever em cima, o espaço é liberado. Para entender como funciona o processo de borrado deve entender como funciona seu disco duro. A mínima unidade de dados do disco duro é um bit, com ele você pode guardar 2 valores, 0 ou 1. Mas agrupando 8 desses bits você obtém 1 byte. Com um byte podemos representar 256 valores, também chamado tabela ASC2, que é muito mais que 2 valores(0 ou 1), todos esse valores você pode ver aqui: https://www.ricardoarrigoni.com.br/tabela-ascii-completa/ O fato é que todos os arquivos do disco duro estão ocupados por esses valores da tabela asc2, quando um dado é realmente borrado, todos os 8 bits que conformam um byte devem estar a zeros(Em binário seria 00000000), isso é representado pelo NULL, que é o primeiro valor da tabela ASC2. Se a um determinado byte lhe aplicamos NULL, automaticamente todos os bits se tornam NULL, e isso seria um "borrado". Porém realizar um borrado soma um custe em tempo e gasto de energia, para fazer um bit se tornar zero leva um tempo, e pior... Gasta energia!! Para borrar 1 bit realmente é ínfimo o que perderíamos de tempo e energia, porém se ficamos borrando todo o dia centos de milhares de bits a coisa muda. Então desde o ponto de vista da informática borrar um arquivo é contraproducente, pois seu computador ficaria mais lento e você pagaria mais dinheiro na conta de luz ao usar seu pc. Tem solução? Sim! Por que não simplesmente dizer para o computador que quando eu borro um arquivo ele realmente não é borrado, si não que o espaço que ele ocupava ficasse livre para outro programa, e que esse outro programa se encarregue de transformar todos esses zeros e uns conforme sua necessidade. TADAH!!! O que acontece é que você ta pensando que um lixeira é seu computador, e que quando você esvazia a lixeira seu computador pega um balde e esvazia o lixo, mas o que realmente acontece é que existem uma infinidade de coisas que ignoramos quando algo se produz dentro do pc. A conceito de lixeira foi criado para que seja mais fácil você usar um pc, mas realmente não existe lixo no seu pc, existem dados, arquivos não existem no seu pc, existem dados, e que essa analogia a arquivos, lixo, pastas, etc, é só para que tudo isso seja mais amigável para você que talvez não possua conhecimentos técnicos elevados sobre todo esse mundinho. Quando vemos nosso computador ignoramos muitas coisas, mas a partir de hoje você vai ver isso com outros olhos. Agora referente com seu problema... Se você tiver pensando que existe algum programa para liberar esses "200 gigas" você se engana esse espaço ja consta como espaço livre. O único que aconteceu é que esse tal programa examinou seu disco duro, e descobriu que pode trazer de volta esses 200 gigas de dados, NÃO que você vai ganhar de volta 200 gigas, esses gigas já são livres. Outros programas irão reescrever esses setores com o tempo e esses dados ficaram inúteis pois isso é o que seu computador faz o tempo todo, gravar e borrar dados no disco. Se tiver segredos melhor não guardar ele em um PC >_<, ou em todo caso, ative o sistema de encriptação de dados no windows, talvez isso ajude você a proteger melhor seus arquivos. Todos seus arquivos passaram a ser um montão de dados sem sentido ante os olhos de outros, porém com isso você anula toda a possibilidade de recuperar algo borrado acidentalmente do seu disco. Minha recomendação é não fazer nada no seu disco se você não tiver nada que esconder e não tiver outras pessoas usando seu pc, por isso ele se chama pc, de personal computer ou computador pessoal. XD Se tiver mais pessoas usando o mesmo pc melhor criar diferentes contas de usuário, e encriptar(cifrar) os dados do disco duro como falei antes, isso você pode buscar em google como fazer. Na maioria dos casos você não deveria fazer nada se for um usuário normal e corrente, e não usar o computador para espiar instituições governamentais HAHAHHA
  5. Explique melhor o que você quer dizer com: Aparecer onde? De exemplos. Explique melhor.
  6. Está! Infelizmente isso é C++, que é basicamente C, porém não é C. Foi nisso que pensei desdo começo quando falei ... Pode que no começo C++ fosse uma extensão de C, mas já faz um bom tempo que isso mudou. A linguagem foi completamente reescrita tomando corpo e alma próprio. De uma olhada por exemplo na Wikipedia. Na parte denominada "A evolução da linguagem" existe um parágrafo que diz o seguinte: "Por muito tempo, o C++ foi encarado como um superconjunto do C.[nota 1] Entretanto, em 1999 o novo padrão ISO para a linguagem C tornou as duas linguagens ainda mais diferentes entre si. Devido a essas incompatibilidades, muitas empresas que desenvolvem compiladores não oferecem suporte à versão mais recente da linguagem C." E se ainda não ficou claro vai para a parte denominada "Incompatibilidade com C" onde diz claramente o seguinte: "É incorreto considerar o C++ como um super conjunto de C, isto é, uma linguagem que implementa o C completamente e que adiciona novas funcionalidades.[25] Grande parte de código C pode ser perfeitamente compilado em C++...". Essa parte em que C pode ser compilado em C++ é matadora né XD O que vem a dizer que C++ suporta algo de C e não o contrario. Por isso cada linguagem tem seu próprio compilador. Uma pergunta... Por que manter compatibilidade com C? Que ganhamos com isso? Obviamente não foi o Brian Kernighan quem escreveu C++ e sim Bjarne Stroustrup. Para manter tanta compatibilidade com C, está a própria C. Por que não pode se melhorar C++, porque C++ tem que ser fiel a C? Onde está escrito isso? O fato é que hoje em dia C++ já cortou o cordão umbilical com C faz um bom tempo, o que ocorre é que tem muitos puristas como você que ainda não conseguem digerir isso, porque C realmente é eficiente e com ele você pode escrever praticamente qualquer programa, mas essa é a realidade, outra coisa é que seja efetivo escrever certos programas com C, mas não se preocupe, isso também acontece com C++ e java, e html, php, python....
  7. isrnick está correto. Classes e structs são em essência a mesma coisa(EM C++ XD). Para se fazer uma ideia, você pode usar construtores destrutores, listas de inicialização, etc, todos os mecanismos das classes, faça a prova. O único que muda é que por default os dados de uma struct são públicos.
  8. Use o botão <> para postar código, assim você facilita a vida de quem lhe vai ajudar "identando" o código já que ninguém aqui recebe nenhum centavo pela labor, todos o realizam de forma altruísta, por isso se você fizer a vida mais fácil aos companheiros do fórum, antes receberá ajuda. adicionado 4 minutos depois Aqui seu programa arrumado: #include <stdio.h> #define tl 5 void leituravetor ( int vetor[], int tam ) { int i; for ( i = 0; i < tam; i++ ) { printf ( "Entre com um valor: " ); scanf ( "%d", &vetor[i] ); } } void somavet ( int A[], int B[], int vetor[], int tam ) { int i; for ( i = 0; i < tam; i++ ) { vetor[i] = A[i] + B[i]; } } int main () { int vetorA[tl], vetorB[tl], soma[tl]; int tf, i; printf ( "Entre com o tamanho dos vetores: " ); scanf ( "%d", &tf ); printf ( "Leitura do Vetor 1\n" ); leituravetor ( vetorA, tf ); printf ( "Leitura do Vetor 2\n" ); leituravetor ( vetorB, tf ); somavet ( vetorA, vetorB, soma, tf ); printf ( "O vetor resultante da soma foi: \n" ); for ( i = 0; i < tf; i++ ) { printf ( "\n[%d] = %d", i, soma[i] ); } return 0; } adicionado 5 minutos depois Na linha printf ( "\n[%d] = %d", i, soma ); seu printf pedia 2 ints e você somente informou 1
  9. Dica... somente confira se o arquivo abriu uma só vez depois de abrir. E feche o arquivo justo depois de cada edição, só assim se guardarão as modificações que fizer no arquivo. A forma correta seria com w como modo mesmo: void imprimirPilha() { int i; FILE *pArq; if ( ( pArq = fopen ( "Historico.txt", "w" ) ) == NULL ) { perror ( "Erro: " ); getchar(); exit ( 1 ); } if ( top != 0 ) { printf ( "Conteudo da pilha:\n" ); for ( i = top - 1; i >= 0 ; i-- ) { printf ( "\"%s\"\n", pilha[i] ); fprintf ( pArq, "%s\n", pilha[i] ); } fclose ( pArq ); } else { printf ( "Conteudo da pilha:\n" ); printf ( "Vazia!\n\n" ); } } assim com w você reescreve o arquivo perdendo todo o anterior. Importante é NÃO ter o arquivo aberto em nehum editor, como por exemplo o notepad, eles pode impedir que se guardem as mudanças ao não permitir que outro programa manipule o arquivo ao mesmo tempo, existem editores que sim permitem, notepad++, codeblocks sim permitem, porém talvez seja necessário ativar alguma opção que permita a edição simultânea em múltiplos programas ao mesmo tempo. No codeblocks por exemplo pergunta se você quer recargar o arquivo. Já no notepad++ você precisa ativar: Com isso notepad++ não bloqueia o arquivo. Com isso tudo vemos que o tradicional notepad.exe não serve para programar. Seu programa depois de uns retoques ficaria assim: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #define MAX 5 #define TAM 100 char pilha[MAX][TAM] = {0}; //pilha de 5 strings de 100 caracteres cada. Ou seja... podemos empilhar 5 objetos(frases) de até 100 letras cada. Isso contando com que MAX tenha um valor de 5 claro int top = 0; //Empilha um elemento até que a pilha esteja cheia. Se estiver cheia mostra um aviso"Pilha Cheia!" void empilhar ( char endereco[TAM] ) { if ( top < MAX ) { strcpy ( pilha[top], endereco ); top++; } else { printf ( "Erro: Pilha Cheia! Tentou empilhar \"%s\" na posicao %d que nao se permite.\n\n", endereco, MAX + 1 ); } } //Imprime a pilha de abaixo para cima si a pilha não estiver vazia. Caso contrario, se a pilha estiver vazia, mostra "Pilha Vazia" void imprimirPilha() { int i; FILE *pArq; if ( ( pArq = fopen ( "Historico.txt", "w" ) ) == NULL ) { perror ( "Erro: " ); getchar(); exit ( 1 ); } if ( top != 0 ) { printf ( "Conteudo da pilha:\n" ); for ( i = top - 1; i >= 0 ; i-- ) { printf ( "\"%s\"\n", pilha[i] ); fprintf ( pArq, "%s\n", pilha[i] ); } fclose ( pArq ); } else { printf ( "Conteudo da pilha:\n" ); printf ( "Vazia!\n\n" ); } } //Desempilha um elemento. Caso não tenha nada mais que desempilhar mostra um aviso void desempilhar() { int i; if ( top > 0 ) { printf ( "Desempilhar posicao %d da pilha. Continha \"%s\"\n\n", top, pilha[top - 1] ); for ( i = 0; i < TAM ; i++ ) { pilha[top - 1][i] = 0; } top--; } else { printf ( "Erro: Tentando desempilhar pilha vazia\n\n" ); } } int main() { char endereco[100]; int i; bool dadosTeclado = false; // True si queremos ler desde o teclado. False si queremos usar um caso de teste automatico. Muito melhor para fazer provas. char lista[5][100] = { {"dir1"}, {"dir2"}, {"dir3"}, {"dir4"}, {"dir5"} }; if ( dadosTeclado == true ) { for ( i = 0; i < MAX; i++ ) { printf ( "Informe o endereco[%d]: ", i ); gets ( endereco ); empilhar ( endereco ); } } else { for ( i = 0; i < MAX; i++ ) { printf ( "Endereco automatico[%d]: ", i ); printf("%s\n", lista[i]); strcpy(endereco, lista[i]); empilhar ( endereco ); } } imprimirPilha(); desempilhar(); imprimirPilha(); }
  10. stack[top] é um vetor de inteiros e endereço é um vetor de chats? E você tenta atribuir um vetor de chats a um vetor de inteiros? Acho que você não entendeu muito bem o conceito de vetores. Para que você tenha uma pilha de strings(vetor de chars) você precisa de uma matriz, e não um vetor. O mais próximo do que você quer fazer seria isso: #include <stdio.h> #include <string.h> #define MAX 5 #define TAM 100 char pilha[MAX][TAM] = {0}; //pilha de 5 strings de 100 caracteres cada. Ou seja... podemos empilhar 5 objetos(frases) de até 100 letras cada. Isso contando com que MAX tenha um valor de 5 claro int top = 0; //Empilha um elemento até que a pilha esteja cheia. Se estiver cheia mostra um aviso"Pilha Cheia!" void empilhar ( char umaFrase[TAM] ) { if ( top < MAX ) { strcpy ( pilha[top], umaFrase ); top++; printf("Empilahndo \"%s\" na posicao %d da pilha.\n\n", umaFrase, top); }else{ printf("Erro: Pilha Cheia! Tentou empilhar \"%s\" na posicao %d que nao se permite.\n\n", umaFrase, MAX+1); } } //Imprime a pilha de abaixo para cima si a pilha não estiver vazia. Caso contrario, se a pilha estiver vazia, mostra "Pilha Vazia" void imprimirPilha() { int i; if(top != 0){ printf("Conteudo da pilha:\n"); for ( i = top-1; i >= 0 ; i-- ) { printf ( "\"%s\"\n", pilha[i] ); } putchar('\n'); }else{ printf("Conteudo da pilha:\n"); printf("Vazia!\n\n"); } } //Desempilha um elemento. Caso não tenha nada mais que desempilhar mostra um aviso void desempilhar() { int i; if ( top > 0 ) { printf("Desempilhar posicao %d da pilha. Continha \"%s\"\n\n", top, pilha[top-1] ); for ( i = 0; i < TAM ; i++ ) { pilha[top-1][i] = 0; } top--; }else{ printf("Erro: Tentando desempilhar pilha vazia\n\n"); } } int main() { //Empilhamos 2 elementos e mostramos empilhar ( "frase 1" ); empilhar ( "frase 2" ); imprimirPilha(); //Eliminamos 1 elemento e mostramos desempilhar(); imprimirPilha(); //Eliminamos mais 2 elementos. LOGICO QUE VAI DAR ERRO pois somente resta 1 elemento na pilha. Ao tentar //eliminar o segundo, mostra um aviso de que não resta elementos para desempilhar. Logo mostra a pilha vazia. desempilhar(); desempilhar(); //<- vai mostrar um aviso de que a pilha esta vazia. Não faz sentido desempilhar elementos que n existem imprimirPilha(); //Tentamos estourar a pilha empilhar ( "frase 1" ); empilhar ( "frase 2" ); empilhar ( "frase 3" ); empilhar ( "frase 4" ); empilhar ( "frase 5" ); empilhar ( "frase 6" ); //Este elemento estora a pilha. Mostra aviso "Pilha Cheia" imprimirPilha(); }
  11. Tem coisas que n entendo no seu programa. Como por exemplo no mesmo jogo pode se repetir 2 números no mesmo jogo?: Em fim... o grande erro acredito que esteja ao não atribuir um valor ao "contador" pois ao inicializar tem lixo na memoria. #include <iostream> #include <stdio.h> #include <conio.h> #include <stdlib.h> #include <time.h> /* run this program using the console pauser or add your own getch, system("pause") or input loop */ int main () { int jogos[32000][6], l, c, x, q, contador, quadra = 0, quina = 0, thegame = 0, lin, col; int conferir[32000][6]; srand ( time ( NULL ) ); scanf ( "%d", &x ); for ( l = 0; l < x; l++ ) { for ( c = 0; c < 6; c++ ) { jogos[l][c] = rand() % 60; } } //for ( l = 0; l < x; l++ ) { // printf ( "jogo da mega sena numero: %d \n \n", l+1 ); // // for ( c = 0; c < 6; c++ ) { // printf ( "Gerando resultado da Mega Sena sorteio L,C: %d", jogos[l][c] ); // printf ( "\n" ); // } // // printf ( "\n" ); // //} printf ( "quantos jogos deseja fazer para conferir?\n" ); scanf ( "%d", &q ); for ( lin = 0; lin < q; lin++ ) { for ( col = 0; col < 6; col++ ) { conferir[lin][col] = rand() % 60; } } contador = 0; for ( l = 0; l < x; l++ ) { for ( lin = 0; lin < q; lin++ ) { for ( c = 0; c < 6; c++ ) { for ( c = 0; c < 6; c++ ) { if ( jogos[l][c] == conferir[lin][col] ) { contador++; } } if ( contador == 4 ) { quadra++; } if ( contador == 5 ) { quina++; } if ( contador == 6 ) { thegame++; } } } } for ( lin = 0; lin < q; lin++ ) { printf ( "jogo numero : %d \n", lin ); for ( col = 0; col < 6; col++ ) { printf ( "Gerando resultado da Mega Sena sorteio lin,col: %d", conferir[lin][col] ); printf ( "\n" ); } } printf ( "o numero de resultados que deram em quadra foi: %d", quadra ); printf ( "\n" ); printf ( "\n" ); printf ( "o numero de resultados que deram em quina foi: %d", quina ); printf ( "\n" ); printf ( "\n" ); printf ( "o numero de resultados que deram completos foi: %d", thegame ); printf ( "\n" ); printf ( "\n" ); return 0; } Use o botão <> para postar códigos. Como pode ver simplesmente pondo contador = 0 funciona.
  12. Seu professor é o maior *****. Mas como manda ele, e não você... toma aqui: #include <SFML/Graphics.hpp> int main() { sf::RenderWindow window(sf::VideoMode(200, 200), "SFML works!"); sf::CircleShape shape(100.f); shape.setFillColor(sf::Color::Green); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::Closed) window.close(); } window.clear(); window.draw(shape); window.display(); } return 0; } Instale SFML e você poderá criar uma janela em modo gráfico adicionado 4 minutos depois Aqui um tutorial de como instalar no visual studio. https://www.sfml-dev.org/tutorials/2.5/start-você.php
  13. Nao me pergunte como isso funcionou HAHAHA #include <iostream> namespace nostd { struct cout_base { }; struct cout { bool alive; cout() : alive(true) { std::cout << "Iniciando" << std::endl; } cout(cout && rhs) : alive(true) { rhs.alive = false; } cout(cout const &) = delete; ~cout() { if (alive) std::cout << "Finalizando" << std::endl; } }; template <typename T> cout operator<< ( cout && o, T const & x ) { std::cout << x; return std::move ( o ); } template <typename T> cout operator<< ( cout_base &, T const & x ) { return std::move ( cout() << x ); } cout_base cout; // like the global std::cout }; using nostd::cout; std::ostream& endl ( std::ostream& os ){ os << std::endl; return os; } int main() { cout << "Ola, Mundo!" << endl; return 0; } Praticamente usei tudo o que você falou, "usando uma sobrecarga do operador <<, ou usando namespaces...". Criando uma classe cout dentro de outro namespace. O maior problema foi encontrar uma solução para o maldito endl pfff Isso dai nao é coisa minha nao, foi tirado de varias paginas até chegar nisso a base de provas ssuheusjushe. copia rápido antes que o moderador borre tudo heheh
  14. Informação do sistema: https://docs.microsoft.com/es-es/windows/desktop/SysInfo/system-information-functions hardware info https://docs.microsoft.com/en-us/windows/desktop/sysinfo/getting-hardware-information windows api
  15. poderia fazer isso para "simplificar" int segundos = 5; int milisegundos = 1000; int tempo = segundos*1000; sleep(tempo); >_<
  16. seria possivel mandar o código completo? adicionado 0 minutos depois info sobre sistema operativo, codificação do console e IDE usado adicionado 18 minutos depois você está enganado. O tamaño do caractere ç é de 1 byte... pelo menos é o que pude observar no pedaço que você postou. Seu problema é de codificação certamente, ou para ser mais claro "do prompt". Da uma olhada aqui onde respondi isso e talvez te ajude.
  17. Isso faz parte de algo que se chama "encapsulamento". As funções publicas são as que você pode chamar de fora das classes, e as privadas somente se pode chamar desde dentro da classe. Poderia explicar porém melhor veja esse video para entender: https://www.youtube.com/watch?v=hYp2Ki1u3ms E se tiver alguma duvida pergunte.
  18. não entendo sua consulta. Talvez você tenha entendido errado a finalidade da função fseek(). Sabe para que serve? A função fseek serve para mover o ponteiro X casinhas, para adiante ou para atras em um arquivo com relação a um determinado ponto, conforme o indicado nos parametros. Que você deseja fazer realmente?
  19. programas ativos? Se o codeblocks ta em englsh. Como se chama essa tal aba em inglês? Ou melhor... manda uma print adicionado 1 minuto depois A aba de abaixo se abre e fecha com F2. E a aba do lado esquerdo se abre/fecha com maiuscula+F2. Espero que seja isso
  20. Não só isso. Um double ocupa um espaço maior na memória. Muitas funções da biblioteca math.h trabalham com double. Tudo é questão de otimização, ou seja, da necessidade de que seu programa tiver. Si precisar usar uma só variável, talvez seja melhor usar um double, porém se precisar de 200k de variáveis do tipo real, talvez float seja melhor opção pois com float seu programa ocupa a metade da memória. adicionado 6 minutos depois Lembre que você sempre pode fazer um cast de menor a maior sem perder precisão porém não ao contrario.
  21. http://orwelldevcpp.blogspot.com/ O Dev c++ ta obsoleto. Deveria buscar outro.

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!