Ir ao conteúdo
  • Cadastre-se

Aquiles Augusto

Membro Júnior
  • Posts

    13
  • Cadastrado em

  • Última visita

Tudo que Aquiles Augusto postou

  1. olá, estou implementando um sudoku em C. Para verificar se o usuário terminou o jogo, eu criei a seguinte função bool verificar(void) { for (int i = 0; i < 9; i++) { int k [9]; for (int a = 9; a < 9; a++) k [a] = 0; for (int j = 0; j < 9; j++) { if (g.board[i][j] == '.') { return false; } k[g.board[i][j]-1] += 1; } for (int j = 0; j < 9; j++) if (k[j] > 1) { for (int j = 0; j < 9; j++) mvaddch(16, 38 + j, k[j]); beep(); return false; } } for (int i = 0; i < 9; i++) { char k [9]; for (int a = 9; a < 9; a++) k [a] = 0; for (int j = 0; j < 9; j++) { if (g.board[j][i] == '.') { return false; } k[g.board[j][i]-1] += 1; } for (int j = 0; j < 8; j++) if (k[j] > 1) { for (int j = 0; j < 9; j++) mvaddch(16, 38 + j, k[j]); beep(); return false; } } return true; } eu estou usando a biblioteca ncurses para criar um interface diferente, onde fica o jogo, por isso uso mvaddch o array que representa o tabuleito é o g.board o que eu queria era que verificasse se havia todos os números de 1 a 9 em cada linha e coluna (ainda não implementei o teste de quadrantes 3x3) assim: 1: cria um array de inteiros e o define para "000000000" (9 zeros) 2: testa se não há nenhum espaço em branco (que no tabuleiro fica como um ".") 3: testa cada posição da linha: se encontrar um número '1' adiciona +1 na primeira posição do array K, se encontrar um número '2' faz o mesmo com a segunda posição. portanto, quando verificasse as 9 posições da linha, se algum número se repetisse, um dos números do array K seria maior que um, se não seria igual a 1. 4: então verifica as posições do array K, e se algum for diferente de 1 retorna false e imprime o array em uma posição da tela (apenas para meus testes), alem de emitir um "som de erro". 5: se não, faz a mesma coisa com a próxima linha, e se todas as linhas estiverem certas , faz a mesma coisa com colunas. se tudo estiver certo retorna true. porém ocorreu um erro: sempre retornava falso na primeira vez que executava o 4 passo. então em imprimi o array K em uma posição da tela e apareceu diferentes caracteres, mais ou menos assim �~��^^^A. qual o meu erro?
  2. Estou fazendo um programa em C, especificamente um Sudoku. Estou usando a biblioteca Ncurses para criar uma interface diferente da do terminal, e lá fazer o jogo, alocando em lugares específicos cada coisa. Desejo que o tabuleiro já venha com alguns números, claro, e que estes números venham "coloridos", porém os que o usuário digitar não. Além disso nos espaços em branco (onde o usuário poderá substituir por números) deverá haver um ponto. Pra isso criei a função draw_numbers, que "desenha" e redesenha(quando o usuário substituir alguma casa) os números, e que na primeira vez que é usada, quando desenha os números que vem com o tabuleiro, ela colore somente os números, porém quando o usuário fizer uma alteração não, para o usuário saber o que ele pode e o que não pode alterar. A função é assim(g.col_ini = 0): void draw_numbers(int tp, int lt)// tp e lt são cordenadas do centro do tabuleiro { for (int i = 0; i < 9; i++) for (int j = 0; j < 9; j++) { char c = (g.board[i][j] == 0) ? '.' : g.board[i][j] + '0'; //board é o array global de chars que representa os números e os pontos do tabuleiro if (has_colors() && g.col_ini == 0 && g.board[i][j] != '.')// verifica se é possível ligar as cores, e se é a primeira vez que a função é executada attron(COLOR_PAIR(PAIR_LOGO)); //liga a cor (definida anteriormente para vermelho) mvaddch(tp + i + 1 + i/3, lt + 2 + 2*(j + j/3), c); //imprime o caractere em uma coordenada na tela refresh();//atualiza a tela if (has_colors()) attroff(COLOR_PAIR(PAIR_LOGO)); // desliga as cores } g.col_ini += 1; } O funcionamento esperado era imprimir todos os caracteres nos lugares certos, e caso fosse a primeira vez que a função foi usada (col_ini seria 0) e o caractere não for um ponto, o programa ligava as cores para imprimir colorido. porém ele nunca liga as cores. O problema é no col_ini pois quando eu tiro ele da função ela imprime todos os números coloridos (até os que o usuário digitou). como faço para resolver?
  3. @devair1010 sim. ontem estava funcionando numa boa até certa hora
  4. Olá. Estou estudando a linguagem C e estou usando o editor Visual Studio Code. Os problemas do meu código não estão aparecendo na aba de problemas. mesmo existindo um erro no programa. ontem estava funcionando bem mas uma hora parou. Como resolvo?
  5. Seria fazer o "Z" se tornar "[" caso a chave fosse 1, por exemplo? Este programa é para um curso que estou fazendo e lá pede para retornar para A, por isso fiz assim. Ah, estou enfrentando outro problema, o scanf não atribui espaços a strings. Você conhece outra função que o faça?
  6. Estou fazendo um código de criptografia básico, onde o usuário entra com uma chave e um texto e o programa imprime o texto criptografado(soma a chave a cada letra do texto). Estou interessado que o programa funcione da seguinte forma: Chave: 1 Texto: ABZabz Texto criptografado: BCAbca quero que quando a chave mais a letra passe de Z a criptografia retorne para A. O código é o seguinte: #include<stdio.h> #include<string.h> int main (void) { int c; char t[201]; printf("Chave: "); scanf("%d", &c); //chave para somar às letras na criptografia if (c<1) { printf("\nMe dê um numero positivo.\n"); return 1; //caso o número seja 0 ou menos o programa encerra } if (c >= 26) { c = c % 26; // se a chave for maior que 26 (numero de letras no alfabeto) transftransforma a chave no resto da divisao entre os dois } if (c == 0) { printf("Essa chave é um múltiplo de 26 (ou 26), portanto, o texto não será criptografado.$ return 2; } printf("%d", c); printf("Texto a ser criptografado (máximo 200 caracteres) : "); scanf("%s", t); int i=0, n=strlen(t); while (i < n) { if ((int)t[i] < 90 && ((int)t[i] + c) > 90) { t[i] = (((int)t[i] + c) % 90) + 64; //caso a letra de número i da string mais a chave passe de Z, a criptografia retorna para A (aqui está o erro) } else if ((int)t[i] < 96 && (int)t[i] + c > 122) { t[i] = (((int)t[i] + c) % 122) + 96; } t[i] = ((int)t[i] + c); //criptografa cada letra da string i=i+1; } t[i]='\0'; printf("Texto criptografado: %s\n", t); return 0; } Mas por algum motivo o código não executa os ifs dentro do while mesmo quando as condições são verdadeiras. Qual o meu erro?
  7. Estou fazendo um código de criptografia básico, onde o usuário dá uma chave e um texto e o programa retorna o texto criptografado(Somando a chave com a letra) . Exemplo: Chave:1 Texto a ser criptografado (máximo de 200 caracteres): Az Texto criptografado: B{ Mais tarde vou editar para que o "z" vire um "a". O código é o seguinte: #include<stdio.h> #include<string.h> int main (void) { int c; char t[201]; char tc[201]; printf("Chave: "); scanf("%d", &c); //chave para somar às letras na criptografia if (c<1) { printf("\nMe dê um numero positivo.\n"); return 1; //caso o número seja 0 ou menos o programa encerra } printf("Texto a ser criptografado (máximo 200 caracteres) : "); scanf("%s", t); int p=0, i, n, tn[202]; for(i = 0, n=strlen(t); i < n; i++); { p=i; tn[i] = ((int)t[i] + c); //criptografa cada letra da string } tc[p]='\0'; printf("Texto criptografado: "); printf("%s\n", tc); return 0; } Mas ocorre um erro, o programa imprime "��". Qual o meu erro? (acredito que seja na transição de float para int como diz o título) Também estou aberto a sugestões de como simplificar o código e coisas do tipo
  8. Eu estou estudando C e fiz o seguinte código: #include <string.h> #include <stdio.h> void main() { float q,c,s,v,t; int bq,bc,bs,bv; printf("\nEstá tendo uma festa em uma casa. Quantas pessoas tem em cada comodo?"); printf("\nQuarto: "); scanf("%f", &q); printf("\nCozinha: "); scanf("%f", &c); printf("\nSala "); scanf("%f", &s); printf("\nVaranda: "); scanf("%f", &v); t=(q+c+s+v); bq=q/t*50; //*50 para as barras terem no máximo 50 caracteres bc=c/t*50; bs=s/t*50; bv=v/t*50; char sq[102]; // strings que depois serão imprimidas para formarem as barras char sc[102]; char ss[102]; char sv[102]; for(int lq=0; lq<bq; lq++) //colocando um caracter até a porcentagem da barra { sq[lq]='|'; } for(int lc=0; lc<bc; lc++) { sc[le]='!'; } for(int ls=0; ls<bs; ls++) { ss[ls]='I'; } for(int lv=0; lv<bv; lv++) { sv[lv]='+'; } printf("|=Quarto (%d%%)\n!=Cozinha (%d%%)\nI=Sala (%d%%)\n+=Varanda(%d%%)\n\n",(bn*2),(be*2),(bi*2),(bp*2)); //o *2 é para mostrar a porcentagem certa printf("%s\n%s\n%s\n%s\n", sq, sc, ss, sv); strcat(sq,sc); strcat(sq, ss); strcat(sq, sv); printf("%s\n", sq); } O funcionamento esperado seria perguntar a quantidade de pessoas e imprimir um "gráfico de barras" com as porcentagens, assim: Está tendo uma festa em uma casa. Quantas pessoas tem em cada cômodo? Quarto: 2 Cozinha: 4 Sala: 3 Varanda: 1 |=Quarto (20%) !=Cozinha (40%) I=Sala (30%) +=Varanda (10%) |||||||||| !!!!!!!!!!!!!!!!!!!! IIIIIIIIIIIIIII +++++ ||||||||||!!!!!!!!!!!!!!!!!!!!IIIIIIIIIIIIIII+++++ (sei que em alguns casos a soma das porcentagens podem dar até 96% mas não estou me importando muito com isso) Mas a segunda e a terceira barra ficam com alguns símbolos como �� na hora de imprimir (fica IIIIIIIIIIIIIIIIIIIIIIIIII��) . Qual o meu erro?
  9. Olá. Eu estou estudando C e estou precisando fazer algo do tipo: #include <stdio.h> void main() { char str[100]; str [1] [50]='|';//estou interessado que isso colocaria o caracter "|" do ponto 1 até o ponto 50 da string printf("%s\n", str); } Mas esse código não funciona. O que seria equivalente a esse (str [1] [50]='|';) ?|
  10. @Leonardoapj funcionou sem, mas vou colocar de qualquer jeito
  11. Eu estou iniciando programação e comecei em C. Estou enfrentando um problema na sequência de if e else. Meu código é o seguinte: #include <stdio.h> #include<string.h> #include<stdlib.h> void main() { char jo[7]="joao"; char ca[7]="carlos"; char n[11]; printf("Me diga seu primeiro nome:\n"); scanf("%c", n); int ret= strcmp(jo,n); int ret_= strcmp(ca,n); if (ret==0){ printf("Seu sobrenome eh Silva.\n"); } else if (ret_==0){ printf("Seu sobrenome eh Santos..\n"); } else printf("Nao te conheco.\n"); } O funcionamento esperado seria: Perguntar o nome do usuário e, caso fosse carlos ou joao, imprimir seu sobrenome na tela. Mas se fosse qualquer outro imprimiria "nao te conheço". Mas independente do nomo escrito o programa sempre imprime "nao te conheço". Alguém pode me dizer onde está o problema no meu código, por favor?

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!