Ir ao conteúdo
  • Cadastre-se

Benjamin Breeg

Membros Plenos
  • Total de itens

    198
  • Registro em

  • Última visita

  • Qualificações

    N/D

Reputação

210

3 Seguidores

Informações gerais

  • Cidade e Estado
    Rio de Janeiro/RJ
  • Sexo
    Masculino
  1. 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; }
  2. 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.
  3. 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.
  4. 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.
  5. 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; }
  6. 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.
  7. 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
  8. 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.
  9. 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.
  10. Acho que nesse artigo tem o que você procura. https://solarianprogrammer.com/2018/11/19/cpp-reading-writing-bmp-images/
  11. 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; }
  12. 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.
  13. 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.
  14. 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.
  15. 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.

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

×
×
  • Criar novo...