Ir ao conteúdo
  • Cadastre-se

Benjamin Breeg

Membro Pleno
  • Posts

    230
  • Cadastrado em

  • Última visita

Tudo que Benjamin Breeg postou

  1. Então cara eu não sou familiarizado com Linux mas o que parece é que você instalou a versão mais antiga do SDL.. tente instalar o SDL2. Veja se esse vídeo ajuda.
  2. Esse código que você postou parece não estar em conformidade com o SDL2, provável que seja SDL1 ou algum versão bem inicial do SDL2. Na própria pagina do SDL2 tem um exemplo de como desenhar um triangulo. https://wiki.libsdl.org/SDL_RenderDrawLines #include "SDL2/SDL.h" #define POINTS_COUNT 4 static SDL_Point points[POINTS_COUNT] = { {320, 200}, {300, 240}, {340, 240}, {320, 200} }; int main(int argc, char* argv[]) { if (SDL_Init(SDL_INIT_VIDEO) == 0) { SDL_Window* window = NULL; SDL_Renderer* renderer = NULL; if (SDL_CreateWindowAndRenderer(640, 480, 0, &window, &renderer) == 0) { SDL_bool done = SDL_FALSE; while (!done) { SDL_Event event; SDL_SetRenderDrawColor(renderer, 0, 0, 0, SDL_ALPHA_OPAQUE); SDL_RenderClear(renderer); SDL_SetRenderDrawColor(renderer, 255, 255, 255, SDL_ALPHA_OPAQUE); SDL_RenderDrawLines(renderer, points, POINTS_COUNT); // ou diretamente com RenderDrawLine sem usar essa struct bidimensional SDL_Point. // SDL_RenderDrawLine(renderer, 320, 200, 300, 240); // SDL_RenderDrawLine(renderer, 300, 240, 340, 240); // SDL_RenderDrawLine(renderer, 340, 240, 320, 200); SDL_RenderPresent(renderer); while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { done = SDL_TRUE; } } } } if (renderer) { SDL_DestroyRenderer(renderer); } if (window) { SDL_DestroyWindow(window); } } SDL_Quit(); return 0; }
  3. O erro esta no ; que você colocou no while(n <=100); Isso é chamado de comando vazio ou seja um comando que não faz nada e por ser uma construção totalmente valida em C++ o compilador não vai te alertar e nem gerar algum código de erro. Se você colocar o ; em if, for, while.. tudo que esta dentro do bloco {} não vai ser executado.
  4. Depende do seu nível de conhecimento dentro da linguagem... Não sei o quanto você já avançou nos seus estudos de C++ mas se já compreende e sabe como utilizar tipos de dados(int, float...) criar e inicializar variáveis, operadores(matemáticos, relacionais ...), entrada e saída de dados(cin, cout...), estruturas de controle (if, for, while ...) e como trabalhar com números aleatórios pelo menos de forma básica já é possível fazer jogos. Comece com jogos simples tipo o jogo do papel, pedra e tesoura, adivinhar o numero. Esses dois jogos já são um belo exercício desses pontos que citei acima. A media que você for avançando aprendendo strings e vetores por exemplo já é possível criar ate um jogo de aventura com texto, jogo da forca, da velha etc etc. Bibliotecas gráficas só são recomendadas se você possui um conhecimento mais amplo da linguagem como funções, passagem de parâmetros, alocação de memoria, ponteiros, classes e objetos etc etc.
  5. Tem alguns erros no seu código. Para declarar uma variável em C o correto é tipo da variável nome da variável: int mes; C não permite usar acentuação ao declarar variáveis, você usou "mês" o correto é "mes" Para inicializar um especificador de formato você usa % antes do tipo de dado que deseja scanf("%d",&mes); & é um operador que retorna o endereço da variável mas como você ainda não estudou sobre ponteiros para não confundir apenas tenha em mente que o scanf precisa dessa informação. Quanto ao exercício acho que para facilitar é melhor você usar uma tabelinha não levando em conta os dias exatos que as estações começam visto que o exercício pede apenas o mês. Algo assim: Janeiro (1): Verão Fevereiro (2): Verão Março (3): Verão Abril (4): Outono Maio (5): Outono Junho (6): Outono Julho (7): Inverno Agosto (8): Inverno Setembro (9): Inverno Outubro (10): Primavera Novembro (11): Primavera Dezembro (12): Primavera
  6. Pode ser feito assim. #include <iostream> #include <string> #include <ctime> using namespace std; int main() { const int NUM_PALAVRAS = 5; const string PALAVRAS[NUM_PALAVRAS] = { {"Programacao"}, {"C++"}, {"Hello"}, {"Notebook"}, {"Relogio"} }; srand(static_cast<unsigned int>(time(0))); int NUMERO = (rand() % NUM_PALAVRAS); string PALAVRASECRETA = PALAVRAS[NUMERO]; int TAM = PALAVRASECRETA.size(); for(int i = 0;i < TAM; i++) { int INDICE = (rand() % TAM); char TEMP = PALAVRASECRETA[INDICE]; PALAVRASECRETA[INDICE] = TEMP; } cout << PALAVRASECRETA << endl; return 0; }
  7. Tente usar o gerador de números aleatórios do C++ o mt19937 não tem limtes entre 0 e RAND_MAX como rand(). #include <iostream> #include <random> #include <chrono> using namespace std; int main() { unsigned seed = chrono::system_clock::now().time_since_epoch().count(); mt19937 gen(seed); uniform_int_distribution<unsigned int> dist(1, 10000000); int random = dist(gen); cout << random << '\n'; }
  8. Ate tem como você fazer um for estilo Python e Pascal mas é algo um tanto complexo porque envolve templates, sobrecarga de operadores etc etc. O C++ a partir da versão 11 ate tem um for que é baseado em ranges mas ele precisa iterar a partir de alguma coisa, array ou vector. std::string str = "clubedohardware"; for (char c : str) std::cout << c << ' '; Olha esse código retirado do stackoverflow com o for estilo Python. #include <iostream> template <typename T> class Range { public: class iterator { public: explicit iterator(T val, T stop, T step) : m_val(val), m_stop(stop), m_step(step) { } iterator& operator ++ () { m_val += m_step; if ((m_step > 0 && m_val >= m_stop) || (m_step < 0 && m_val <= m_stop)) { m_val = m_stop; } return *this; } iterator operator ++ (int) { iterator retval = *this; ++(*this); return retval; } bool operator == (iterator other) const { return m_val == other.m_val; } bool operator != (iterator other) const { return !(*this == other); } T operator * () const { return m_val; } private: T m_val, m_stop, m_step; }; explicit Range(T stop) : m_start(0), m_stop(stop), m_step(1) { } explicit Range(T start, T stop, T step = 1) : m_start(start), m_stop(stop), m_step(step) { } iterator begin() const { return iterator(m_start, m_stop, m_step); } iterator end() const { return iterator(m_stop, m_stop, m_step); } private: T m_start, m_stop, m_step; }; template <typename T> Range<T> range(T stop) { return Range<T>(stop); } template <typename T> Range<T> range(T start, T stop, T step = 1) { return Range<T>(start, stop, step); } int main() { for (auto i : range(10)) { std::cout << " " << i; } std::cout << std::endl; for (auto i : range(4, 10, 2)) { std::cout << " " << i; } std::cout << std::endl; for (auto i : range(0.5, 1.0, 0.1)) { std::cout << " " << i; } std::cout << std::endl; }
  9. Cara esta funcionando #include <stdio.h> #include <time.h> //int main(void) //{ // char url[]="char.txt"; // char ch; // FILE *arq; // // printf("num: "); // ch=getchar(); // // arq = fopen(url, "w"); // if(arq == NULL) // printf("Erro, nao foi possivel abrir o arquivo\n"); // else{ // fputc(ch, arq); // fclose(arq); // } // // return 0; //} int random(); void dicas(int num, int password, int tentativas); void main() { int continuar=1, password, tentativas, num; do { system("cls || clear"); printf("Sorteando numero entre 1 e 1000...\n"); password = random(); printf("Comecou! Tente adivinhar o numero!\n\n"); tentativas = 0; do { tentativas++; printf("Tentativa %d: ", tentativas); scanf("%d", &num); dicas(num,password,tentativas); } while( num != password); printf("Digite 0 para sair, ou qualquer outro numero para continuar: "); scanf("%d", &continuar); } while(continuar); } int random() { srand( (unsigned)time(NULL) ); return (1 + rand()%1000); } void dicas(int num, int password, int tentativas) { if(num > password) printf("O numero sorteado e menor que %d\n\n", num); else if(num < password) printf("O numero sorteado e maior que %d\n\n", num); else printf("Parabens! voce acertou o numero em %d tentativas!\n\n", tentativas); } Não sei o que você tentou fazer naquela função main secundaria mas deve ser algo relacionado a guardar informações da jogada como uma especie de recorde de menor tentativa, tente implementar isso agora.. faça uma função recorde ou algo parecido.
  10. Olhando por alto o principal erro é que você declarou 2 funções main, o programa em c deve ter apenas uma função main para indicar onde inicia a execução do programa. Não sei dizer se em C ainda é uma boa pratica abrir a função main com void main() ou int main(void) apesar de ambos funcionarem.
  11. Você tentou declarar um array, na pratica daria um erro porque o que delimita o final de uma string é um caractere NULL, ela começa e termina com zero mas esse zero conta, o certo seria operacao[2] = "a"; o C++ permite apenas char, int ou tipo enumerado no switch, ponteiros e array de char ou strings não funcionam, declare apenas como char operacao ou se quiser inicializar char operacao = 'a' mas não é preciso porque a variável vai receber o valor logo abaixo.
  12. Não seria melhor usar o ofstream do C++ ? Algo assim... #include <iostream> #include <locale.h> #include <fstream> using namespace std; struct Clientes{ char nome[120]; char empresa[120]; char email[300]; char endereco[120]; int celular,fixo; }; int main(int argc, char** argv) { setlocale(LC_ALL, "Portuguese"); ofstream arquivo; arquivo.open("clientes.txt", ios::out | ios::app); Clientes Cliente; cout << "Digite o nome do cliente : "; cin.getline(Cliente.nome,120); arquivo << "Cliente: " << Cliente.nome << endl; cout << "Digite o nome da empresa do cliente: "; cin.getline(Cliente.empresa,120); arquivo << "Empresa: " << Cliente.empresa << endl; cout << "Digite o e-mail de contato do cliente: "; cin.getline(Cliente.email,300); arquivo << "E-mail: " << Cliente.email << endl; cout << "Digite o celular do cliente: "; cin >> Cliente.celular; cin.ignore(); arquivo << "Celular: " << Cliente.celular << endl; cout << "Digite o telefone fixo do cliente: "; cin >> Cliente.fixo; cin.ignore(); arquivo << "Fixo: " << Cliente.fixo << endl; cout << "Digite o endereço do cliente: "; cin.getline(Cliente.endereco, 120); arquivo << "Endereço: " << Cliente.endereco << endl; arquivo.close(); system("pause"); return 0; }
  13. O MinGW é o GCC(GNU Compiler Collection) dos sistemas Unix/Linux portado para Windows, a versão do MinGW/GCC usada pelo DevCpp 4.9.9.2 se não me engano é a 3 e no Codeblocks é a 4. O grupo de trabalho do C parece estar parado mas tivemos o C11 em 2007 que atualizou e acrescentou muitos recursos na linguagem e no ano passado saiu a versão C18 com correções e melhorias técnicas. Vale a pena dar uma atualizada nas ferramentas de compilação.
  14. Aceitar ate aceita mas pode ter muitos problemas de incompatibilidade referente a escrita e verificação de tipos principalmente em versões de C++ apos a padronização da linguagem. Agora se você usa um compilador muito antigo realmente não deve ter muitos problemas em escrever código C. Acredito que a principal versão de C usada aqui no BR ainda seja a versão 89 e usar código portado dessa versão pra versões mais modernas do C++ realmente vai ser um tiro no pe, vai ter muita coisa que você consegue fazer sem problemas no C que não vai funcionar sem algum tipo de adequação no C++. Nem sempre C é um subconjunto de C++ hehe
  15. Entendi.. Bom aqui esta o problema traduzido em português: https://translate.google.com/translate?hl=en&sl=en&tl=pt&u=https%3A%2F%2Fwww.urionlinejudge.com.br%2Fjudge%2Fpt%2Fproblems%2Fview%2F2904 Não posso te ajudar a resolver porque essas estruturas de dados e algoritmos mais complexos estão um tanto fora da minha realidade ainda hehe mas certamente alguém vai te ajudar por aqui.
  16. Isso é um trabalho que você tem que fazer mesmo ou esta tentando fazer por conta própria? Porque para resolver esses problemas vai exigir um conhecimento bastante razoável de estrutura de dados, algorítimos e matemática. Difícil acreditar que qualquer professor passaria esse tipo de problema para um total iniciante de qualquer linguagem.
  17. Acho que nesse artigo tem o que você procura. https://solarianprogrammer.com/2018/11/19/cpp-reading-writing-bmp-images/
  18. Esse aqui usa uma versão do opengl bem antiga mas acredito que pode ser um bom ponto de partida para seus estudos. Testado no CodeBlocks -> Create new Project -> Glut Project. // Glut_ttt.c // By Eric Stringer 2003 version 0.2 // Tic Tac Toe or X's and O's. // Keyboard input // 'v' = view ortho/perspective // 'l' = lighting on/off #include <GL/glut.h> // glut (gl utility toolkit) basic windows functions, keyboard, mouse. #include <stdio.h> // standard (I/O library) #include <stdlib.h> // standard library (set of standard C functions #include <math.h> // Math library (Higher math functions ) // lighting GLfloat LightAmbient[]= { 0.5f, 0.5f, 0.5f, 1.0f }; GLfloat LightDiffuse[]= { 0.5f, 0.5f, 0.5f, 1.0f }; GLfloat LightPosition[]= { 5.0f, 25.0f, 5.0f, 1.0f }; GLfloat mat_specular[] = { 1.0, 1.0, 1.0, 1.0 }; // mouse variables: Win = windows size, mouse = mouse position int mouse_x, mouse_y, Win_x, Win_y, object_select; // state variables for Orho/Perspective view, lighting on/off static int view_state = 0, light_state = 0; // Use to spin X's and O's int spin, spinboxes; // Win = 1 player wins, -1 computer wins, 2 tie. // player or computer; 1 = X, -1 = O // start_game indicates that game is in play. int player, computer, win, start_game; // alingment of boxes in which one can win // We have 8 posiblities, 3 accross, 3 down and 2 diagnally // // 0 | 1 | 2 // 3 | 4 | 5 // 6 | 7 | 8 // // row, colunm, diagnal information static int box[8][3] = {{0, 1, 2}, {3, 4, 5}, {6, 7, 8}, {0, 3, 6}, {1, 4, 7}, {2, 5, 8}, {0, 4, 8}, {2, 4, 6}}; // Storage for our game board // 1 = X's, -1 = O's, 0 = open space int box_map[9]; // center x,y location for each box int object_map[9][2] = {{-6,6},{0,6},{6,6},{-6,0},{0,0},{6,0},{-6,-6},{0,-6},{6,-6}}; // quadric pointer for build our X GLUquadricObj *Cylinder; // Begin game routine void init_game(void) { int i; // Clear map for new game for( i = 0; i < 9; i++) { box_map[i] = 0; } // Set 0 for no winner win = 0; start_game = 1; } // Check for three in a row/colunm/diagnal // returns 1 if there is a winner int check_move( void ) { int i, t = 0; //Check for three in a row for( i = 0; i < 8; i++) { t = box_map[box[i][0]] + box_map[box[i][1]] + box_map[box[i][2]]; if ( (t == 3) || ( t == -3) ) { spinboxes = i; return( 1 ); } } t = 0; // check for tie for( i = 0; i < 8; i++) { t = t + abs(box_map[box[i][0]]) + abs( box_map[box[i][1]]) + abs( box_map[box[i][2]]); } if ( t == 24 ) return( 2 ); return( 0 ); } // Do we need to block other player? int blocking_win(void) { int i, t; for( i = 0; i < 8; i++) { t = box_map[box[i][0]] + box_map[box[i][1]] + box_map[box[i][2]]; if ( (t == 2) || ( t == -2) ) { // Find empty if (box_map[box[i][0]] == 0) box_map[box[i][0]] = computer; if (box_map[box[i][1]] == 0) box_map[box[i][1]] = computer; if (box_map[box[i][2]] == 0) box_map[box[i][2]] = computer; return( 1 ); } } return( 0 ); } // check for a free space in corner int check_corner(void) { int i; if ( box_map[0] == 0) { box_map[0] = computer; i = 1; return( 1 ); } if ( box_map[2] == 0) { box_map[2] = computer; i = 1; return( 1 ); } if ( box_map[6] == 0) { box_map[6] = computer; i = 1; return( 1 ); } if ( box_map[8] == 0) { box_map[8] = computer; i = 1; return( 1 ); } return( 0 ); } // Check for free space in row int check_row(void) { if ( box_map[4] == 0) { box_map[4] = computer; return( 1 ); } if ( box_map[1] == 0) { box_map[1] = computer; return( 1 ); } if ( box_map[3] == 0) { box_map[3] = computer; return( 1 ); } if ( box_map[5] == 0) { box_map[5] = computer; return( 1 ); } if ( box_map[7] == 0) { box_map[7] = computer; return( 1 ); } return( 0 ); } // logic for computer's turn int computer_move() { if ( blocking_win() == 1) return( 1 ); if ( check_corner() == 1) return( 1 ); if ( check_row() == 1) return( 1 ); return( 0 ); } // I use this to put text on the screen void Sprint( int x, int y, char *st) { int l,i; l=strlen( st ); // see how many characters are in text string. glRasterPos2i( x, y); // location to start printing text for( i=0; i < l; i++) // loop until i is greater then l { glutBitmapCharacter(GLUT_BITMAP_TIMES_ROMAN_24, st[i]); // Print a character on the screen } } // This creates the spinning of the cube. static void TimeEvent(int te) { spin++; // increase cube rotation by 1 if (spin > 360) spin = 0; // if over 360 degress, start back at zero. glutPostRedisplay(); // Update screen with new rotation data glutTimerFunc( 10, TimeEvent, 1); // Reset our timmer. } // Setup our Opengl world, called once at startup. void init(void) { glClearColor (1.0, 1.0, 1.0, 0.0); // When screen cleared, use black. glShadeModel (GL_SMOOTH); // How the object color will be rendered smooth or flat glEnable(GL_DEPTH_TEST); // Check depth when rendering // Lighting is added to scene glLightfv(GL_LIGHT1 ,GL_AMBIENT, LightAmbient); glLightfv(GL_LIGHT1 ,GL_DIFFUSE, LightDiffuse); glLightfv(GL_LIGHT1 ,GL_POSITION, LightPosition); glEnable(GL_LIGHTING); // Turn on lighting glEnable(GL_LIGHT1); // Turn on light 1 start_game = 0; win = 0; // Create a new quadric Cylinder = gluNewQuadric(); gluQuadricDrawStyle( Cylinder, GLU_FILL ); gluQuadricNormals( Cylinder, GLU_SMOOTH ); gluQuadricOrientation( Cylinder, GLU_OUTSIDE ); } void Draw_O(int x, int y, int z, int a) { glPushMatrix(); glTranslatef(x, y, z); glRotatef(a, 1, 0, 0); glutSolidTorus(0.5, 2.0, 8, 16); glPopMatrix(); } void Draw_X(int x, int y, int z, int a) { glPushMatrix(); glTranslatef(x, y, z); glPushMatrix(); glRotatef(a, 1, 0, 0); glRotatef(90, 0, 1, 0); glRotatef(45, 1, 0, 0); glTranslatef( 0, 0, -3); gluCylinder( Cylinder, 0.5, 0.5, 6, 16, 16); //glutSolidCone( 2.5, 3.0, 16, 8 ); glPopMatrix(); glPushMatrix(); glRotatef(a, 1, 0, 0); glRotatef(90, 0, 1, 0); glRotatef(315, 1, 0, 0); glTranslatef( 0, 0, -3); gluCylinder( Cylinder, 0.5, 0.5, 6, 16, 16); //glutSolidCone( 2.5, 3.0, 16, 8 ); glPopMatrix(); glPopMatrix(); } // Draw our world void display(void) { char txt[30]; int ix, iy; int i; int j; glClear (GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); //Clear the screen glMatrixMode (GL_PROJECTION); // Tell opengl that we are doing project matrix work glLoadIdentity(); // Clear the matrix glOrtho(-9.0, 9.0, -9.0, 9.0, 0.0, 30.0); // Setup an Ortho view glMatrixMode(GL_MODELVIEW); // Tell opengl that we are doing model matrix work. (drawing) glLoadIdentity(); // Clear the model matrix glDisable(GL_COLOR_MATERIAL); glDisable(GL_LIGHTING); glColor3f(0.0, 0.0, 1.0); if ( start_game == 0 ) { Sprint(-2, 0, "Tic Tac Toe"); Sprint(-3, -1, "To Start press"); Sprint(-3, -2, "right button for X's"); Sprint(-3, -3, "and left for O's"); } if (win == 1) Sprint( -2, 1, "You win"); if (win == -1) Sprint( -2, 1, "Computer win"); if (win == 2) Sprint( -2, 1, "Tie"); // Setup view, and print view state on screen if (view_state == 1) { glColor3f( 0.0, 0.0, 1.0); Sprint(-3, 8, "Perspective view"); glMatrixMode (GL_PROJECTION); glLoadIdentity(); gluPerspective(60, 1, 1, 30); glMatrixMode(GL_MODELVIEW); glLoadIdentity(); }else { glColor3f( 0.0, 0.0, 1.0); Sprint(-2, 8, "Ortho view"); } // Lighting on/off if (light_state == 1) { glDisable(GL_LIGHTING); glDisable(GL_COLOR_MATERIAL); }else { glEnable(GL_LIGHTING); glEnable(GL_COLOR_MATERIAL); } gluLookAt( 0, 0, 20, 0, 0, 0, 0, 1, 0); // Draw Grid for( ix = 0; ix < 4; ix++) { glPushMatrix(); glColor3f(1,1,1); glBegin(GL_LINES); glVertex2i(-9 , -9 + ix * 6); glVertex2i(9 , -9 + ix * 6 ); glEnd(); glPopMatrix(); } for( iy = 0; iy < 4; iy++ ) { glPushMatrix(); glColor3f(1,1,1); glBegin(GL_LINES); glVertex2i(-9 + iy * 6, 9 ); glVertex2i(-9 + iy * 6, -9 ); glEnd(); glPopMatrix(); } glColorMaterial(GL_FRONT, GL_AMBIENT); glColor4f(0.5, 0.5, 0.5, 1.0); glColorMaterial(GL_FRONT, GL_EMISSION); glColor4f(0.0, 0.0, 0.0, 1.0 ); glColorMaterial(GL_FRONT, GL_SPECULAR); glColor4f(0.35, 0.35, 0.35, 1.0); glColorMaterial(GL_FRONT, GL_DIFFUSE); glColor4f(0.69, 0.69, 0.69, 1.0); //glDisable(GL_COLOR_MATERIAL); glColor3f( 1.0, 0.0, 1.0); // Cube color //glEnable(GL_COLOR_MATERIAL); // Draw object in box's for( i = 0; i < 9; i++) { j = 0; if (abs( win ) == 1 ) { if ( (i == box[spinboxes][0]) || (i == box[spinboxes][1]) || (i == box[spinboxes][2])) { j = spin; }else j = 0; } if(box_map[i] == 1) Draw_X( object_map[i][0], object_map[i][1], -1, j); if(box_map[i] == -1) Draw_O( object_map[i][0], object_map[i][1], -1, j); } //glDisable(GL_COLOR_MATERIAL); glutSwapBuffers(); } // This is called when the window has been resized. void reshape (int w, int h) { Win_x = w; Win_y = h; glViewport (0, 0, (GLsizei) w, (GLsizei) h); glMatrixMode (GL_PROJECTION); glLoadIdentity (); } // Read the keyboard void keyboard (unsigned char key, int x, int y) { switch (key) { case 'v': case 'V': view_state = abs(view_state -1); break; case 'l': case 'L': light_state = abs(light_state -1); break; case 27: exit(0); // exit program when [ESC] key presseed break; default: break; } } void mouse(int button, int state, int x, int y) { // We convert windows mouse coords to out openGL coords mouse_x = (18 * (float) ((float)x/(float)Win_x))/6; mouse_y = (18 * (float) ((float)y/(float)Win_y))/6; // What square have they clicked in? object_select = mouse_x + mouse_y * 3; if ( start_game == 0) { if ((button == GLUT_RIGHT_BUTTON) && (state == GLUT_DOWN)) { player = 1; computer = -1; init_game(); return; } if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN)) { player = -1; computer = 1; init_game(); computer_move(); return; } } if ( start_game == 1) { if ((button == GLUT_LEFT_BUTTON) && (state == GLUT_DOWN)) { if (win == 0) { if (box_map[ object_select ] == 0) { box_map[ object_select ] = player; win = check_move(); if (win == 1) { start_game = 0; return; } computer_move(); win = check_move(); if (win == 1) { win = -1; start_game = 0; } } } } } if ( win == 2 )start_game = 0; } // Main program int main(int argc, char** argv) { glutInit(&argc, argv); glutInitDisplayMode (GLUT_DOUBLE | GLUT_RGB | GLUT_DEPTH); glutInitWindowSize (500, 500); glutInitWindowPosition (10, 10); glutCreateWindow (argv[0]); glutSetWindowTitle("X's and O's 3D"); init (); glutDisplayFunc(display); glutReshapeFunc(reshape); glutKeyboardFunc(keyboard); glutMouseFunc(mouse); glutTimerFunc( 10, TimeEvent, 1); glutMainLoop(); return 0; }
  19. Da uma olhada nesse vídeo para você ter o entendimento de como ler as cores, os múltiplos, a tolerância etc etc A explicação do professor é bem didática ate mesmo para quem não é da área de eletrotécnica compreender.
  20. Eu não tinha usado exceções ainda mas entendi se a função encontra um erro que não pode tratar, ela não vai usar o retorno convencional com return, ela usa o thrown para lançar a exceção que vai indicar o que provocou o erro para ser capturado com o catch que vai acionar um ou mais "tratadores" dentro daquele bloco especifico.. Exemplo bobo que achei com o clássico erro de divisão por zero usando exceções. #include <iostream> using namespace std; float divide(float x, float y) { if (y == 0) { throw 1; } else { return x/y; } } int main() { int a, b; bool error = false; cout << "Digite os valores: "; cin >> a >> b; do { try { cout << divide(a, b); error = false; } catch(int erro) { if (erro == 1) { cout << "Erro por divisao por zero. Digite outro valor: "; cin >> b; } error = true; } } while (error); return 0; } Consegui baixar o programa e os links que você enviou. Muito obrigado.
  21. Bom opinião de um estudante e entusiasta na área de programação... Acho que o C++ é uma das poucas linguagens que não permite "miguelar", geralmente a empresa que vai te contratar opera com aplicações financeiras (como a bolsa), sistemas embarcados como programas para controlar maquinas, aplicações gráficas que exigem grande velocidade e alto nível de otimização como engine de jogos, basicamente tudo que precisa envolver sistemas de alta performance esta no nicho do C++ e isso creio eu não sera conseguido com um "programador C++" que precisa ir nos Stack Overflow da vida digitar como eu faço isso ou aquilo ou aquele que copia e cola do tutorial do fulano de tal no youtube. Pode parecer exagero mas muita gente trabalha no mercado usado "metodologias" como esta e obtêm ate um certo sucesso no retorno financeiro hehe.
  22. Rapaz é realmente incrível o que se pode fazer sobrecarregando o << para formatar texto pelo ostream, esse sem duvida é um operador que vale a pena sobrecarregar, ele produz uma diferença bastante significativa para o código. Notei que você adotou o uso mais convencional dos operadores, como + para soma, * para multiplicação, isso melhora bem o entendimento do programa, imagina o furdúncio que deve ser ver algo que vai contra a notação matemática e pelo que entendi o C++ permite esse uso de "operadores obscuros". Muito obrigado por compartilhar seu conhecimento, material assim não é fácil conseguir ainda mais no nosso idioma.
  23. Realmente aprender C++ pode vir a ser uma experiencia bastante confusa, estamos falando de uma linguagem com mais de 40 anos e de la pra ca muita coisa foi mudada, aperfeiçoada e implementada. Os posts do @arfneto foram mais esclarecedores que muita coisa que achei por ai na internet, difícil encontrar quem realmente entende a filosofia do C++, a maioria da uns exemplos como esse que você citou, o cara sabe a sintaxe de como fazer isso ou aquilo mas provavelmente não sabe colocar um exemplo útil de fato. Pelo que entendi sobrecarregar operadores para criar novos tipos não é obrigatório mas é bem útil pra tornar código mais legível ou obter uma saída diferenciada. Somar objetos por ex para obter uma media pode ser interessante colocar a função diretamente no + do que usar um método tradicional, vale lembrar que o "operator" nesse contexto também é uma função Ai ao invés de querer entender o que o compilador faz por de traz da cortina, o que pode ser um tiro no pé para um iniciante é melhor ter em mente que você e o compilador sabem como funciona o "+" e como é usado. resultado = 2 + 2; <- Isso aqui esta ok pro compilador e pra nos seres humanos objeto3 = objeto1 + objeto2; <- ai complicou pro lado do compilador, ele não tem ideá de como isso funciona Então você precisa instrui-lo a "interpretar" o tipo que você esta criando. Agora o que vai dizer quando usar e pra que usar vai depender da sua experiencia e conhecimento na linguagem.
  24. É preciso tomar cuidado quando se vai ler um char com o scanf. No seu programa o primeiro input é lido corretamente, porém o segundo vai ler o enter(nova linha) que fica armazenado no buffer stdin, lembre-se que o ENTER também é um caractere. Agora você pode se perguntar porque quando faço a leitura de vários valores numéricos isso não acontece, simplesmente porque são números. Para contornar esse problema você pode deixar um espaço antes do %c, isso faz com o que scanf ignore automaticamente espaços em brancos e caracteres especiais como o enter ou fazer como o @devair1010 sugeriu. printf ("Qual operacao deseja realizar? \n '+' soma.\n '-' subtracao.\n '*' multiplicacao.\n '/' divisao.\n\n operacao:"); scanf (" %c", &operacao); // <-note o espaço
  25. Ou então testar quem é o menor... #include <stdio.h> int maior(int a, int b, int c) { if (a < b) a = b; if (a < c) a = c; return a; } int main() { int a, b, c; printf("\n Digite um valor para A: "); scanf("%d", &a); printf("\n Digite um valor para B: "); scanf("%d", &b); printf("\n Digite um valor para C: "); scanf("%d", &c); printf("\n O maior numero entre todos eh: %d", maior(a,b,c)); }

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!