Ir para conteúdo
Fórum Script Brasil

Ricardo Martins

Membros
  • Total de itens

    35
  • Registro em

  • Última visita

Tudo que Ricardo Martins postou

  1. Ricardo Martins

    recursividade

    Tem uma coisinha nesse código que eu estou estranhando. Não sei se tem a ver com o erro que você tá falando, mas dá uma olhada nesse ponto e vírgula depois do "else if (ini > fim)". Do jeito que tá, você tá dizendo que se início é maior que fim então não é pra fazer nada. Se você tirar o ponto e vírgula, aí sim, quer dizer que se início é maior que fim então retorna 1.
  2. Vamos supor que eu queira fazer o seguinte programa: Quando o usuário segura uma tecla, a mensagem "Uma tecla está sendo segurada" aparece na tela e permanece enquanto a tecla estiver sendo pressionada. Quando o usuário soltar a tecla, a tela volta a ficar limpa. Com os comandos que eu conheço, eu consigo fazer a mensagem piscar na tela, e não permanecer. Então, que comandos eu uso pra tratar os eventos do teclado como apertar, segurar e soltar?
  3. Exemplo de como eu imprimo uma string no modo gráfico: #include <conio.h> #include <graphics.h> void main () { int adaptador_grafico= DETECT, modo_grafico; initgraph (&adaptador_grafico, &modo_grafico, ""); outtext ("Esse texto é um exemplo."); getch (); } Infelizmente, os comandos de impressão de texto no modo gráfico (outtext e outtextxy) não aceitam '\n' e '\t' assim como o printf e puts. Sendo assim, como é que eu faço? Existe alguma maneira de pular linha e dar tabulação no modo gráfico?
  4. Quando eu quero imprimir uma string no modo gráfico eu faço assim: Impressão de uma string armazenada numa variável: #include <conio.h> #include <graphics.h> void main () { int adaptador_grafico= DETECT, modo_grafico; char texto[]= {"Esse texto é um exemplo."}; initgraph (&adaptador_grafico, &modo_grafico, ""); outtext (texto); getch (); } Impressão de uma string armazenada no buffer: #include <conio.h> #include <graphics.h> void main () { int adaptador_grafico= DETECT, modo_grafico; initgraph (&adaptador_grafico, &modo_grafico, ""); outtext ("Esse texto é um exemplo."); getch (); } No modo gráfico eu uso os comandos outtext e outtextxy. Só que com esses comandos não é possível imprimir o valor de uma variável da mesma forma que se faz com o printf. O que eu estou querendo é imprimir o valor de uma variável do tipo inteiro. Mas e então, como é que eu faço? E tem mais outra coisa. Esses comandos não aceitam \n, \t, \b (pular linha, tabulação e retrocesso respectivamente). Como eu faço pra poder usar esses recursos em modo gráfico?
  5. No modo texto é bem fácil. Vamos supor que eu queira imprimir o valor de x. int x= 10; printf ("O valor de x é %d", x); A mesma coisa vale se eu quiser imprimir um caractere. char x= 'z'; printf ("O caractere de x é %d", z); No modo gráfico eu uso os comandos outtext e outtextxy pra imprimir mensagens, mas esses comandos não imprimem valores de variáveis, exceto uma string. Sendo assim, como é que eu faço então?
  6. Procurei na net e não consegui achar. O pouco que eu achei era um conteúdo meio confuso. Preciso desses códigos pra fazer um menu de seleção.
  7. Gostaria de saber se dá pra programar uma função que depois de concluir todas as operações retornam mais de um valor. Ex.: Eu programo uma função que faz diversas operações usando as variáveis a, b e c. Quando a função termina eu quero guardar os valores de a, b e c pra usar em outra função. No meu caso, usar variáveis globais pra esse caso atrapalharia as coisas mais pra frente, então não dá certo. Se for possível fazer uma função retornar mais de um valor, como se faz? Também gostaria de saber se existe algum comando pra abortar uma função da mesma forma que um break aborta um for, while ou do while.
  8. Minha professora da faculdade tava ensinando a gente a mexer com alguns comandos da biblioteca string. Uns desses comandos era strlen, strcat, strcpy, strcmp, strupr, strlwr, entre outros. Daí eu dei uma olhada, só por curiosidade, nos outros comandos dessa mesma biblioteca e vi lá _fstrcat, _fstrcpy, _fstrlen, _fstrlwr, _fstrupr. Entrei nos tópicos de ajuda referentes à esses comandos e tudo o que era dito de diferente era que esses comandos era o "far version" dos comandos citados anteriormente. Ex.: _fstrcat é o "far version" do strcat, _fstrcpy é o "far version" do strcpy, _fstrlen é o "far version" do strlen, e assim por diante. Eu até usei um deles e não vi diferença nenhuma. Afinal, o que esses comandos chamados de "far version" tem de diferente?
  9. Eu fiz um Sudoku em C que tá funcionando perfeitamente com exceção do problema com as células da tabela que já começam com o valor definido, ou mais conhecidas como "dicas". O objetivo do Sudoku é você completar toda a tabela usando somente e tão somente raciocínio e dedução lógica. Ou seja, nunca, jamais precisando de adivinhação. Mas com esse programa que eu fiz, na grande maioria das vezes o usuário precisa recorrer à adivinhação, e isso é errado. A solução pra isso é mudar a programação fazendo com que quando o jogo começa, a disposição dessas células que já começam com o valor preenchido permita que o usuário chegue até o final sem que precise adivinhar nada. Mas como eu faço isso? Segue o meu algoritmo: Obs.: Um jogo desse numa revistinha ou jornal costuma começar com 25 à 30 dicas iniciais. O meu tem 36 e ainda dá esse problema (veja a seção do algoritmo escrito "Definido os números dado pelo jogo"). Obs. 2: Fiz esse algoritmo no Turbo C. Obs. 3: Execute em tela cheia, senão fica horrível! #include <conio.h> #include <stdlib.h> void main () { unsigned char dialogo1[1078], dialogo2[1196], tela[8000], i, j, k, l, x, y; randomize (); /*Parte visual do algoritmo*/ /*Guardando as caixas de di logo em vari veis*/ textattr (1<< 4 | 6); clrscr (); _setcursortype (_NOCURSOR); textbackground (0); window (2, 2, 48, 10); clrscr (); window (2, 12, 45, 22); clrscr (); window (3, 7, 44, 19); cputs (" im ao\n\n\n\n\n\n\rParab‚ns! Vocˆ ‚ muito" " foda! Varou o jogo!\n Gostaria de come‡ar um novo jogo?\n\n\n\n\r " " im ao"); textcolor (4); gotoxy (13, 1); cputs ("S"); gotoxy (31, 1); cputs ("N"); gotoxy (12, 13); cputs ("S"); gotoxy (29, 13); cputs ("N"); gettext (1, 1, 49, 11, dialogo1); gettext (1, 11, 46, 23, dialogo2); /**/ /*Guardando a tela principal numa vari vel*/ window (1, 1, 80, 50); clrscr (); textcolor (6); window (23, 2, 57, 7); cputs ("ÜÛÛÛÛ Û Û ÛÛÛÜ ÜÛÛÛÜ Û Û Û ÛÛ Û Û Û ÛÜ Û Û Û ÜÛß Û " "ÛßÛÛÛÜ Û Û Û Û Û Û ÛÛÛ Û Û Û Û Û Û Ûß Û Û Û ßÛÜ Û ÛÛÛÛÛß" " ßÛÛÛß ÛÛÛß ßÛÛÛß Û Û ßÛÛÛß"); window (1, 8, 19, 48); textcolor (7); cputs ("\nO objetivo do jogo ‚ completar toda a tabela de modo que todas as " "linhas, colunas e blocos 3x3 contenham todos os n£meros de 1 … 9 sem que " "qualquer um deles repitem ou faltem\n\n\n\n\r C‚lula " "selecionada pelo usu rio\n\n\n\r Linha, coluna e bloco " " correspondentes … c‚lula selecionada pelo usu rio\n\n\n\n\r C‚lula com " "n£mero dado pelo jogo\n\n\n\r C‚lulacom n£mero certeza " "ajustado pelo usu rio\n\n\n\r N£mero iluminado pela " " ferramenta \"Iluminar todos\""); gotoxy (6, 1); textcolor (1); cputs ("OBJETIVO\n\n\n\n\n\n\n\n\n\n\n\n\r LEGENDA\n\r"); textcolor (11); cputs (" C‚lula com borda vermelha:\n\n\n\n\r C‚lula com borda pontilhada:" "\n\n\n\n\n\n\r C‚lula com cor de fundo amarela:\n\n\n\n\r C‚lula com cor " "de fundo verde:\n\n\n\n\n\rN£mero iluminado de vermelho:"); window (61, 9, 80, 25); textcolor (7); cputs ("\n\n\n Inserir/remover n£mero possibilidade\n\r " "Inserir n£mero certeza\n\n\r Limpar c‚lula\n\n\r " " Acessar ferramenta \"Iluminar todos\"\n\n\r Ligar/desligar " "\"Iluminar todos\""); gotoxy (7, 1); textcolor (1); cputs ("COMANDOS\n\r"); textcolor (11); cputs (" 1 … 9:\n\n\n\n\rAlt + 1 … 9:\n\n\n\r Delete:\n\n\n\r Tab:" "\n\n\n\n\r I:"); textattr (1<< 4 | 6); window (20, 8, 60, 48); clrscr (); window (62, 28, 79, 47); clrscr (); window (1, 50, 80, 50); clrscr (); cputs (" Novo Jogo Reiniciar jogo " "Sair"); textcolor (4); gotoxy (8, 1); cputs ("F2"); gotoxy (32, 1); cputs ("F3"); gotoxy (63, 1); cputs ("ESC"); textattr (11); window (22, 10, 32, 21); cputs (" Û Û Û Û Û Û ÛÛÛÛÛÛÛÛÛÛÛ Û Û Û Û " "Û Û ÛÛÛÛÛÛÛÛÛÛÛ Û Û Û Û Û Û "); gettext (22, 10, 32, 20, tela); puttext (35, 10, 45, 20, tela); puttext (48, 10, 58, 20, tela); gettext (22, 10, 58, 20, tela); puttext (22, 23, 58, 33, tela); puttext (22, 36, 58, 46, tela); window (63, 29, 78, 46); clrscr (); cputs ("\n\n\n\n ÛÛÛÛÛ Û Û Û Û Û Û " " ÛÛÛÛÛ\n\n\r ÛÛÛ\n\r Û Û\n\r ÛÛÛ\n\n\r ÛÛÛ\n\r Û Û\n\r ÛÛÛ"); textcolor (6); gotoxy (2, 2); cputs ("Iluminar todos os n£meros:"); gotoxy (6, 12); cputs ("Ligado"); gotoxy (6, 16); cputs ("Desligado"); gettext (1, 1, 80, 50, tela); /**/ /**/ /*L¢gica central do algoritmo*/ inicio: unsigned char sud[81][10], resp[81]; /*Atribuindo todos os n£meros possibilidades pras c‚lulas*/ for (i= 0; i< 81; i++) { sud[i][0]= 10; for (j= 1; j< 10; j++) sud[i][j]= j; } /**/ /*Sorteando um n£mero certeza pra cada c‚lula*/ for (i= 0; i< 81; i++) { if (!sud[i][2]) continue; if (sud[i][0]> 2) sud[i][1]= sud[i][random (sud[i][0]-1)+1], sud[i][0]= 2; /**/ /*Eliminando os n£meros possibilidades das outras c‚lulas*/ /*Na linha*/ if (i%9< 6) for (j= i+1; j%9; j++) { if (j%9/3== i%9/3) continue; for (k= 1; k< sud[j][0]; k++) if (sud[j][k]== sud[i][1]) { sud[j][0]--, sud[j][k]= sud[j][sud[j][0]]; break; } } /**/ /*Na coluna*/ if (i/9< 6) for (j= i+9; j< 81; j+= 9) { if (j/9/3== i/9/3) continue; for (k= 1; k< sud[j][0]; k++) if (sud[j][k]== sud[i][1]) { sud[j][0]--, sud[j][k]= sud[j][sud[j][0]]; break; } } /**/ /*No bloco*/ if (i%9%3< 2) j= i+1; else j= i+7; for (; j/9/3== i/9/3;) { for (k= 1; k< sud[j][0]; k++) if (sud[j][k]== sud[i][1]) { sud[j][0]--, sud[j][k]= sud[j][sud[j][0]]; break; } if ((j+1)%3) j++; else j+= 7; } /**/ /**/ /*Procurando c‚lulas com s¢ um n£mero possibilidade*/ for (j= i+1; j< 81; j++) { if (sud[j][0]== 2 && sud[j][2]) { sud[j][2]= 0; /**/ /*Eliminando os n£meros possibilidades das outras c‚lulas*/ /*Na linha*/ for (k= j/9*9; k%9 || k== j/9*9; k++) { if (sud[k][0]< 2 || !sud[k][2] || k%9/3== j%9/3) continue; for (x= 1; x< sud[k][0]; x++) if (sud[k][x]== sud[j][1]) { sud[k][0]--, sud[k][x]= sud[k][sud[k][0]]; break; } } /**/ /*Na coluna*/ for (k= j%9; k< 81; k+= 9) { if (sud[k][0]< 2 || !sud[k][2] || k/9/3== j/9/3) continue; for (x= 1; x< sud[k][0]; x++) if (sud[k][x]== sud[j][1]) { sud[k][0]--, sud[k][x]= sud[k][sud[k][0]]; break; } } /**/ /*No bloco*/ for (k= j/9/3*27+j%9/3*3; k/9/3== j/9/3;) { if (sud[k][0]> 1 && sud[k][2]) for (x= 1; x< sud[k][0]; x++) if (sud[k][x]== sud[j][1]) { sud[k][0]--, sud[k][x]= sud[k][sud[k][0]]; break; } if ((k+1)%3) k++; else k+= 7; } /**/ /**/ j= i; } else if (sud[j][0]== 1) goto inicio; } } /*Copiando o resultado final pra matriz resp*/ for (i= 0; i< 81; i++) resp[i]= sud[i][1], sud[i][0]= 0; /**/ /*Definindo os n£meros dados pelo jogo*/ for (i= 0; i< 36;) if (sud[j= random (81)][0]!= 61) sud[j][0]= 61, i++; /**/ /**/ /*Jogo jogado*/ for (i= 40, x= 0, y= 11;;) { /*Imprimindo a tela principal*/ puttext (1, 1, 80, 50, tela); window (1, 1, 80, 50); gotoxy (70, 35); textattr (6); cprintf ("%d", y%10); gotoxy (65, y/10*4+40); textcolor (4); cputs ("Û"); /**/ /*Imprimindo os n£meros da tabela*/ for (j= 0; j< 81; j++) { window (22+j%9*4+j%9/3*1, 10+j/9*4+j/9/3*1, 24+j%9*4+j%9/3*1, 13+j/9*4+j/9 /3*1); textbackground (sud[j][0]/10); if (sud[j][0]< 10) textcolor (6); else textcolor (0); for (k= 1; k< sud[j][0]%20+1 || k== 1; k++) { if (!sud[j][0]) cputs (" "); else if (sud[j][0]%20== 1) cputs (" "); else if (((sud[j][0]== 2 || sud[j][0]== 3) && k== 1) || (sud[j][0]== 4 && k== 3) || (sud[j][0]== 6 && k== 4)) cputs (" "); else if (sud[j][0]== 2 || (sud[j][0]== 4 && !(k%2)) || (sud[j][0]== 5 && k!= 1) || (sud[j][0]== 7 && (k== 4 || k== 5)) || (sud[j][0]== 8 && k== 5)) cputs (" "); if (sud[j][0] && sud[j][k]!= y) cprintf ("%d", sud[j][k]); else if (sud[j][0]) { textbackground (4); cprintf ("%d", sud[j][k]); textbackground (sud[j][0]/10); } if (sud[j][0]%20== 1) cputs (" "); else if ((sud[j][0]== 2 && k!= 1) || (sud[j][0]== 3 && k== 3)) cputs (" "); } } /**/ /*Usu rio na tabela*/ if (i< 81) /*Destacando a c‚lula selecionada e a linha, coluna e bloco correspondentes … essa c‚lula*/ { textattr (1<< 4 | 6); window (21+i%9/3*13, 9+i/9/3*13, 33+i%9/3*13, 22+i/9/3*13); cputs ("úúúúúúúúúúúúúú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú" "\n\rúúúúúúúúúúúúú"); window (33+i%9/3*13, 10+i/9/3*13, 33+i%9/3*13, 21+i/9/3*13); cputs ("úúúúúúúúúúú"); window (21+i%9*4+i%9/3*1, 9, 25+i%9*4+i%9/3*1, 48); cputs ("úúúúúú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\r" "ú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú" "\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rú\n\rúúúúú"); window (25+i%9*4+i%9/3*1, 10, 25+i%9*4+i%9/3*1, 47); cputs ("úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú"); window (21, 9+i/9*4+i/9/3*1, 59, 14+i/9*4+i/9/3*1); cputs ("úúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúúú\n\rú\n\rú\n\rúúúúúúúúúúú" "úúúúúúúúúúúúúúúúúúúúúúúúúúúú"); window (59, 10+i/9*4+i/9/3*1, 59, 13+i/9*4+i/9/3*1); cputs ("úúú"); textcolor (4); window (21+i%9*4+i%9/3*1, 9+i/9*4+i/9/3*1, 25+i%9*4+i%9/3*1, 14+i/9*4+i/9/ 3*1); cputs ("ÛÛÛÛÛÛ\n\rÛ\n\rÛ\r\nÛÛÛÛÛ"); window (25+i%9*4+i%9/3*1, 10+i/9*4+i/9/3*1, 25+i%9*4+i%9/3*1, 13+i/9*4+i/9 /3*1); cputs ("ÛÛÛ"); /**/ /*Conferindo a quantidade de acertos*/ for (j= 0, k= 0; j< 81; j++) if (sud[j][0]%20== 1 && sud[j][1]== resp[j]) k++; /**/ /*Jogo varado*/ if (k== 81) for (i= 1;;) { /*Imprimindo caixa de di logo de jogo varado*/ puttext (18, 19, 63, 31, dialogo2); for (j= 0; j< 2; j++) { if (j== i) textcolor (4); else textcolor (11); window (29+j*17, 25, 35+j*17, 30); cputs ("ÛÛÛÛÛÛÛÛ\n\rÛ\n\rÛ\r\nÛÛÛÛÛÛÛ"); window (35+j*17, 26, 35+j*17, 30); cputs ("ÛÛÛ"); } /**/ /*Comandos no jogo varado*/ for (k= 0; j= getch (), j!= 13 && j!= 115 && j!= 110 && j!= 83 && j!= 78;) if (!j) { k= getch (); if (k== 75 || k== 77 || k== 107) break; else k= 0; } if ((j== 13 && i) || j== 110 || j== 78 || k== 107) exit (0); else if (k) i= (i+1)%2; else goto inicio; /**/ } /**/ /*Comandos na tabela*/ if (!x) { for (k= 0; j= getch (), (!(j> 48 && j< 58) && j!= 27 && j!= 9 && j!= 105 && j!= 8 && j!= 63 && j!= 170 && j!= 73 && j!= 189 && j!= 156 && !(j> 250 && j< 254)) || (((j> 48 && j< 58) || j== 8 || j== 63 || (j> 250 && j< 254) || j== 170 || j== 189 || j== 156) && sud[i][0]== 61) || (j== 8 && !sud[i][0]) || ((((j== 63 || j== 251) && sud[i][1]== 1) || (j== 170 && sud[i][1]== 6) || (j== 189 && sud[i][1]== 5) || (j== 156 && sud[i][1]== 4) || (j== 252 && sud[i][1]== 3) || (j== 253 && sud[i][1]== 2)) && sud[i][0]== 21);) if (!j) { k= getch (); if (k== 75 || k== 77 || k== 72 || k== 80 || ((k> 120 && k< 129) && sud[i][0]!= 61 && (sud[i][0]!= 21 || k-119!= sud[i][1])) || (k== 83 && sud[i][0]!= 61 && sud[i][0]) || k== 60 || k== 61 || k== 107) break; else k= 0; } if (k== 75) if (i%9) i--; else i+= 8; else if (k== 77) i= i/9*9+(i+1)%9; else if (k== 72) if (i/9) i-= 9; else i+= 72; else if (k== 80) i= (i+9)%81; else if ((k> 120 && k< 129) || j== 63 || (j> 250 && j< 254) || j== 170 || j== 189 || j== 156) { if (k> 120 && k< 129) sud[i][1]= k-119; else if (j== 63 || j== 251) sud[i][1]= 1; else if (j== 170) sud[i][1]= 6; else if (j== 189) sud[i][1]= 5; else if (j== 156) sud[i][1]= 4; else if (j== 252) sud[i][1]= 3; else sud[i][1]= 2; sud[i][0]= 21; } else if (j> 48 && j< 58) { for (l= 1; l< sud[i][0]%20+1; l++) if (j-'0'== sud[i][l]) break; if (l== sud[i][0]%20+1) sud[i][0]= sud[i][0]%20+1, sud[i][sud[i][0]]= j-'0'; else { for (; l< sud[i][0]%20+1; l++) sud[i][l]= sud[i][l+1]; sud[i][0]= sud[i][0]%20-1; } } else if (j== 27) x= 1; else if (j== 9) i+= 81; else if (j== 105 || j== 73) y= (y+10)%20; else if (j) sud[i][0]= sud[i][0]%20-1; else if (k== 83) sud[i][0]= 0; else if (k!= 107) x= k-58; else exit (0); } /**/ } /**/ /*Usu rio no "Iluminar todos"*/ else { /*Selecionando a c‚lula do "Iluminar todos"*/ textcolor (4); window (68, 33, 72, 38); cputs ("ÛÛÛÛÛÛ\n\rÛ\n\rÛ\n\rÛÛÛÛÛ"); window (72, 34, 72, 38); cputs ("ÛÛÛ"); /**/ /*Comandos no "Iluminar todos"*/ for (k= 0; j= getch (), (!(j> 48 && j< 58) && j!= 9 && j!= 27 && j!= 105 && j!= 73) || (j-48== y);) if (!j) { k= getch (); if (k== 60 || k== 61 || k== 107) break; else k= 0; } if (j> 48 && j< 58) y= j-'0'; else if (j== 27 || j== 9) i-= 81; else if (k== 60) x= 2; else if (k== 61) x= 3; else if (k) exit (0); else y= (y+10)%20; /**/ } /**/ /*Usu rio nas caixas de di logo*/ if (x) for (l= 0; x;) /*Imprimindo uma caixa de di logo*/ { puttext (16, 20, 64, 30, dialogo1); window (18, 22, 63, 22); textattr (6); if (x== 1) cputs (" Tem certeza de que quer sair do jogo?"); else if (x== 2) cputs ("Tem certeza de que quer come‡ar um novo jogo?"); else cputs (" Tem certeza de que quer reiniciar o jogo?"); for (j= 0; j< 2; j++) { if (j== l) textcolor (4); else textcolor (11); window (28+j*18, 24, 34+j*18, 29); cputs ("ÛÛÛÛÛÛÛÛ\n\rÛ\n\rÛ\r\nÛÛÛÛÛÛÛ"); window (34+j*18, 25, 34+j*18, 29); cputs ("ÛÛÛ"); } /**/ /*Comandos nas caixas de di logo*/ for (k= 0; j= getch (), j!= 13 && j!= 27 && j!= 115 && j!= 110 && j!= 83 && j!= 78;) if (!j) { k= getch (); if (k== 75 || k== 77 || k== 107) break; else k= 0; } if ((j== 13 && !l) || j== 115 || j== 83 || k== 107) { if (x== 1 || k== 107) exit (0); else if (x== 2) goto inicio; else { for (i= 0; i< 81; i++) if (sud[i][0]!= 61) sud[i][0]= 0; i= 40, x= 0, y= 11; } } else if (j) x= 0; else l= (l+1)%2; /**/ } /**/ } /**/ }
×
×
  • Criar Novo...