
kgin
Membro Pleno-
Posts
386 -
Cadastrado em
-
Última visita
Tipo de conteúdo
Artigos
Selos
Livros
Cursos
Análises
Fórum
Tudo que kgin postou
-
@Dalmarg Isso está muito complicado, você deveria simplificar um pouco na hora de retirar as palavras. Recomendo você tentar dessa maneira. /* * Trabalhando com arquivos em C. * 09/15/2022 ás 08:24p.m */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define NOME_ARQUIVO "teste.txt" #define TAMANHO_BUFFER 512 int main(int argc, char *argv[]) { char buffer[TAMANHO_BUFFER] = {'\0'}; FILE *arquivo = fopen(NOME_ARQUIVO, "r+"); if (arquivo == NULL) { perror("não foi possível abrir o arquivo! "); exit(EXIT_FAILURE); } do { char *palavra = NULL; /* Pega uma linha do arquivo */ fgets(buffer, TAMANHO_BUFFER, arquivo); /* Separa em palavras */ palavra = strtok(buffer, " ;,._"); while (palavra != NULL) { printf("%s\n", palavra); /* Mostra as palavras */ palavra = strtok(0, " ;,._"); /* Pega a proxíma palavra */ } } while (!feof(arquivo) && !ferror(arquivo)); fclose(arquivo); return(0); } Versão online!
-
C++ Estou tendo dificuldades para criar um sistema de pontuação para o meu jogo.
kgin respondeu ao tópico de Danieldoss em C/C#/C++
@Danieldoss Seu algoritmo está meio complicado, tente simplificá-lo um pouco. Uma ideia para deixá-lo mais simples seria utilizar vetores para guardar as perguntas e respostas. Veja esse que eu já tinha e eu dei uma adaptada para o seus propósitos. Em C. #include <stdio.h> #include <string.h> #define T_BUFFER 256 #define Q_PERGUNTAS 10 #define T_PERGUNTA 100 #define Q_RESPOSTAS 3 #define T_RESPOSTAS 60 enum tipo_niveis { fácil = 0, difícil, Q_NIVEIS }; const char *REGRAS = { "\t\tREGRAS DO JOGO:\n\ - ESTE É UM JOGO DE PERGUNTAS E RESPOSTAS.\n\ - O JOGADOR DEVERÁ ESCOLHER DENTRE AS TRÊS ALTERNATIVAS, SOMENTE UMA, E EM SEGUIDA APERTAR O BOTÃO VERDE.\n\ - SERÃO 10 PERGUNTAS SOBRE O TEMA ESCOLHIDO PELO JOGADOR. \n\ - O JOGADOR DEVERÁ ACERTAR 7 RESPOSTAS OU MAIS, PARA PASSAR PARA A PRÓXIMA FASE. \n\n\n\t\t\t\ BOA SORTE!\n" }; const char *TIPOS_PEGUNTAS[Q_NIVEIS] = { "TERROR", "CONHECIMENTOS GERAIS" }; struct pergunta { char pergunta[T_PERGUNTA]; char respostas[Q_RESPOSTAS][T_RESPOSTAS]; int opcao_certa; }; void f_pausa(void) { char buffer[T_BUFFER]; fgets(buffer, T_BUFFER, stdin); } void inicia_perguntas(struct pergunta p[Q_NIVEIS][Q_PERGUNTAS]) { strcpy(p[fácil][0].pergunta, "Quando Michael Myers comete os crimes?"); strcpy(p[fácil][0].respostas[0], "11 de setembro"); strcpy(p[fácil][0].respostas[1], "31 de outubro"); strcpy(p[fácil][0].respostas[2], "25 de dezembro"); p[fácil][0].opcao_certa = 2; strcpy(p[fácil][1].pergunta, "De qual filme é a frase: (O mal esta assumindo várias formas)"); strcpy(p[fácil][1].respostas[0], "A freira"); strcpy(p[fácil][1].respostas[1], "O misterio do convento"); strcpy(p[fácil][1].respostas[2], "Invocacao do mal"); p[fácil][1].opcao_certa = 1; strcpy(p[fácil][2].pergunta, "De qual filme é a frase (O vento levou todo o circo e eu vim parar no esgoto)?"); strcpy(p[fácil][2].respostas[0], "It a coisa"); strcpy(p[fácil][2].respostas[1], "Hora do pesadelo"); strcpy(p[fácil][2].respostas[2], "O grito"); p[fácil][2].opcao_certa = 1; strcpy(p[fácil][3].pergunta, "Como o freddy krueguer mata as suas vitimas?"); strcpy(p[fácil][3].respostas[0], "Com uma serra"); strcpy(p[fácil][3].respostas[1], "Com um machado"); strcpy(p[fácil][3].respostas[2], "Pelos sonhos"); p[fácil][3].opcao_certa = 3; strcpy(p[fácil][4].pergunta, "Quem é o vilão de sexta feira 13?"); strcpy(p[fácil][4].respostas[0], "Jason voorhees"); strcpy(p[fácil][4].respostas[1], "Freddy krueger"); strcpy(p[fácil][4].respostas[2], "Michael myers"); p[fácil][4].opcao_certa = 1; strcpy(p[fácil][5].pergunta, "Qual o nome do assassino do filme Pânico?"); strcpy(p[fácil][5].respostas[0], "Leatherface"); strcpy(p[fácil][5].respostas[1], "Michael Myers"); strcpy(p[fácil][5].respostas[2], "Ghostface"); p[fácil][5].opcao_certa = 3; strcpy(p[fácil][6].pergunta, "Qual o nome do cachorro de jack em: O estranho mundo de jack?"); strcpy(p[fácil][6].respostas[0], "Bingo"); strcpy(p[fácil][6].respostas[1], "Zero"); strcpy(p[fácil][6].respostas[2], "Dafodil"); p[fácil][6].opcao_certa = 2; strcpy(p[fácil][7].pergunta, "Qual o demônio de: O Exorcista?"); strcpy(p[fácil][7].respostas[0], "Lilith"); strcpy(p[fácil][7].respostas[1], "Azazel"); strcpy(p[fácil][7].respostas[2], "Pazuzu"); p[fácil][7].opcao_certa = 3; strcpy(p[fácil][8].pergunta, "Onde foi a primeira aparição do Homem Torto?"); strcpy(p[fácil][8].respostas[0], "Invocação do mal"); strcpy(p[fácil][8].respostas[1], "A casa de cera"); strcpy(p[fácil][8].respostas[2], "Hush"); p[fácil][8].opcao_certa = 1; strcpy(p[fácil][9].pergunta, "Chucky é um boneco de qual linha?"); strcpy(p[fácil][9].respostas[0], "Bad guys"); strcpy(p[fácil][9].respostas[1], "Good guys"); strcpy(p[fácil][9].respostas[2], "Friend"); p[fácil][9].opcao_certa = 2; strcpy(p[difícil][0].pergunta, "Quem foi Antonio Carlos Jobim?"); strcpy(p[difícil][0].respostas[0], "Um compositor"); strcpy(p[difícil][0].respostas[1], "Um ator"); strcpy(p[difícil][0].respostas[2], "Um piloto de formula 1"); } void mostra_pergunta(struct pergunta p) { int contador; printf("\t%s\n", p.pergunta); for (contador = 0; contador < Q_RESPOSTAS; contador++) { printf("\t\t%i - %s\n", contador+1, p.respostas[contador]); } puts("\n\n"); printf("Qual e a resposta certa?\n"); } void mostra_linha(char adorno, char meio, int tamanho) { int contador; for (contador = 0; contador < tamanho; contador++) { if (contador == 0 || contador == tamanho-1) { printf("%c", adorno); } else { printf("%c", meio); } } printf("\n"); } void mostra_caixa(char *str, char adornos, char meios) { const int tamanho_caixa = strlen(str)+10; int contador; mostra_linha(adornos, meios, tamanho_caixa); for (contador = 0; contador < 5; contador++) { if (contador == 0) { printf("%c", adornos); } else { printf(" "); } } printf("%s", str); for (contador = 0; contador < 5; contador++) { if (contador == 5-1) { printf("%c", adornos); } else { printf(" "); } } printf("\n"); mostra_linha(adornos, meios, tamanho_caixa); } void banner_terror(void) { puts(" ▄▀▀▀█▀▀▄ ▄▀▀█▄▄▄▄ ▄▀▀▄▀▀▀▄ ▄▀▀▄▀▀▀▄ ▄▀▀▀▀▄ ▄▀▀▄▀▀▀▄ "); puts("█ █ ▐ ▐ ▄▀ ▐ █ █ █ █ █ █ █ █ █ █ █ "); puts("▐ █ █▄▄▄▄▄ ▐ █▀▀█▀ ▐ █▀▀█▀ █ █ ▐ █▀▀█▀ "); puts(" █ █ ▌ ▄▀ █ ▄▀ █ ▀▄ ▄▀ ▄▀ █ "); puts(" ▄▀ ▄▀▄▄▄▄ █ █ █ █ ▀▀▀▀ █ █ "); puts("█ █ ▐ ▐ ▐ ▐ ▐ ▐ ▐ "); puts("▐ ▐ "); } int menu_principal(void) { char buffer[T_BUFFER]; int opcao = 0; do { printf("1-Mostra regras\n"); printf("2-Inicia jogo\n"); printf("3-Sai do jogo\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao < 0 || opcao > 3) { printf("Opcao invalida!\n"); printf("Pressione enter para continuar...\n"); f_pausa(); } } while (opcao < 0 || opcao > 3); return(opcao); } int main(void) { int opcao = 0; int q_acertos; int contador; int resposta = 0; int fim_jogo = 0; int niveis = 0; struct pergunta perguntas[Q_NIVEIS][Q_PERGUNTAS] = {0}; inicia_perguntas(perguntas); char buffer[T_BUFFER]; do { opcao = menu_principal(); switch (opcao) { case 1: printf("%s", REGRAS); printf("Pressione enter para continuar...\n"); f_pausa(); break; case 2: printf("So estão disponiveis as perguntas de terror!\n"); printf("Pressione enter para continuar...\n"); f_pausa(); fim_jogo = 0; do { switch (niveis) { case 0: banner_terror(); break; case 1: printf("Perguntas de conhecimento geral\n"); break; } q_acertos = 0; for (contador = 0; contador < Q_PERGUNTAS; contador++) { char tmp[60] = {'\0'}; /* Encerra a rodada por falta de perguntas */ if (niveis == 1 && contador > 0) break; sprintf(tmp, "PERGUNTA %i - %s", contador+1, TIPOS_PEGUNTAS[niveis]); mostra_caixa(tmp, '+', '-'); mostra_pergunta(perguntas[niveis][contador]); do { fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &resposta); if (resposta < 1 || resposta > 3) { printf("Resposta invalida!\n"); printf("Digite uma das 3 alternativas\n"); } } while (resposta < 1 || resposta > 3); if (perguntas[niveis][contador].opcao_certa == resposta) { q_acertos++; } } if (q_acertos < 7) { printf("voce precisava acertar mais de 7 perguntas para passar de nivel\n"); fim_jogo = 1; } else { printf("voce passou para o proximo nivel\n"); niveis++; } printf("Pressione enter para continuar..."); f_pausa(); } while (!fim_jogo && niveis < 2); break; } } while (opcao != 3); return(0); } versão online! -
C Não consigo imprimir os valores acima da média dos vetores.
kgin respondeu ao tópico de VitorOliveiraVT em C/C#/C++
corrigido #include <stdio.h> #define TAMANHO_VETOR 10 #define T_BUFFER 256 int main(void) { char buffer[T_BUFFER] = {'\0'}; float valor1, valor2, mult, media, somatorio = 0; int num[TAMANHO_VETOR] = {0}, contador = 0, impar = 0, acima = 0; /*Solicitar, ao usuário, a digitação de números inteiros e ir armazenando, no vetor numeros[], apenas os números pares digitados até que o vetor esteja todo preenchido.*/ for (contador = 0; contador < TAMANHO_VETOR; contador++) { printf("\nDigite um numero: "); fgets(buffer, T_BUFFER, stdin); /* Pega a linha da entrada padrão */ sscanf(buffer, "%i", &num[contador]); /* Processa a linha e retira um inteiro */ if(num[contador] % 2 == 0) { somatorio += num[contador]; } if(num[contador] % 2 == 1) { impar++; } } media = somatorio / 10; /*Exibir, na tela, todo o conteúdo do vetor numeros[].*/ printf("\n%i = Vetor 1", num[0]); printf("\n%i = Vetor 2", num[1]); printf("\n%i = Vetor 3", num[2]); printf("\n%i = Vetor 4", num[3]); printf("\n%i = Vetor 5", num[4]); printf("\n%i = Vetor 6", num[5]); printf("\n%i = Vetor 7", num[6]); printf("\n%i = Vetor 8", num[7]); printf("\n%i = Vetor 9", num[8]); printf("\n%i = Vetor 10", num[9]); /*Exibir na tela a média dos vetores numeros[10] e também os valores acima da média.*/ printf("\n\nA media dos vetores e de: %0.2f", somatorio / 10); printf("\nOs numeros maiores que a media sao: "); for (contador = 0; contador < TAMANHO_VETOR; contador++) { if (num[contador] > media) printf("%d\t", num[contador]); } return(0); } -
@weslley334 Creio eu que você está reinventando a roda, não? Eu acho que o que você quer seja isso #include <stdio.h> #define T_BUFFER 256 int main(void) { int quantidade_alunos = 0, contador; float soma_notas1 = 0.0, soma_notas2 = 0.0, p1 = 0.0, p2 = 0.0; char buffer[T_BUFFER]; printf("Quantos alunos:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &quantidade_alunos); for (contador = 0; contador < quantidade_alunos; contador++) { printf("insira a nota do p1:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%f", &p1); printf("insira a nota do p2:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%f", &p2); soma_notas1 += p1; soma_notas2 += p2; } printf("Soma das notas p1:%.2f\n", soma_notas1); printf("Soma das notas p2:%.2f\n", soma_notas2); return(0); }
-
@weslley334 você pode usar o nome do mês inteiro só basta colocar o especificador de formato "%s" no printf. #include <stdio.h> #include <stdlib.h> #define T_BUFFER 256 void f_pausa(void) { char buffer[256]; /* Declara um buffer temporario */ /* Pega a linha da entrada padrão */ fgets(buffer, 256, stdin); } main(void) { char buffer[T_BUFFER]; int i; float salario[12] = {0}; float salario_total = 0; const char *mes[12] = { "janeiro", "fevereiro", "marco", "abril", "maio", "junho", "julho", "agosto", "setembro", "outubro", "novembro", "dezembro" }; /* { 'j', 'f', 'm', 'a', 'm', 'j', 'j', 'a', 's', 'o', 'n', 'd' }; */ printf("qual C) o salario dos meses\n"); for (i = 0; i < 12; i++) { printf("%s = ", mes[i]); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%f", &salario[i]); } puts("Mes Valor - R$"); for (i = 0; i < 12; i++) { printf("%s = ", mes[i]); printf("%.2f\n", salario[i]); salario_total = salario_total + salario[i]; } printf("total anual=%.2f\n\n", salario_total); f_pausa(); return(0); } e evite usar a função system ela vai te trazer problema com o tempo, use uma alternativa como eu fiz no código.
-
Recomendo usar um desses sites abaixo. OnlineGDB Replit Vai perder tempo com o devC++. Leia esses artigos aqui sobre. Geometria plana. Círculo e circunferência.
-
Delphi Exibição de Propriedades de um componente
kgin respondeu ao tópico de Wigori em Programação - outros
Na versão CE do delphi tem alguns objetos que não tem auto completar. Teste primeiro com Ctrl+espaço em um botão ou um form para ver se não é problema da IDE. Por padrão já era pra estar ativado. -
Arduino Hexadecimal em arduino, como fazer?
kgin respondeu ao tópico de Kaique_S.S em Microcontroladores
Se os valores não precisão de nenhum tratamento seria questão de só fazer algo assim. char *intToHex(int valor, char *conversao, int tamanho_maximo) { int contador1 = 0, contador2 = 0, contador3 = 0, resto = 0; char tmp_buffer[tamanho_maximo]; do { if (contador1 < tamanho_maximo) { resto = valor%16; valor /=16; if (resto < 10) { tmp_buffer[contador1] = resto+'0'; } else { tmp_buffer[contador1] = (resto-10)+'A'; } contador1++; } else { return(NULL); } } while (valor); contador3 = contador1-1; for (contador2 = 0; contador2 < contador1; contador2++) { conversao[contador2] = tmp_buffer[contador3]; contador3--; } conversao[contador2] = '\0'; return(conversao); } mas eu lembro que no objeto string tem uma função para converter para todas as outra bases. programa completo para tirar a colinha #include <stdio.h> #define T_BUFFER 40 char *intToHex(int valor, char *conversao, int tamanho_maximo) { int contador1 = 0, contador2 = 0, contador3 = 0, resto = 0; char tmp_buffer[tamanho_maximo]; do { if (contador1 < tamanho_maximo) { resto = valor%16; valor /=16; if (resto < 10) { tmp_buffer[contador1] = resto+'0'; } else { tmp_buffer[contador1] = (resto-10)+'A'; } contador1++; } else { return(NULL); } } while (valor); contador3 = contador1-1; for (contador2 = 0; contador2 < contador1; contador2++) { conversao[contador2] = tmp_buffer[contador3]; contador3--; } conversao[contador2] = '\0'; return(conversao); } int main(void) { int valor = 0; char valor_hex[20] = {'\0'}; char buffer[T_BUFFER]; do { do { printf("Digite um valor para ser convertido:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &valor); if (valor <= 0) { printf("Esse programa so converte numeros positivos!\n"); } } while (valor <= 0); if (intToHex(valor, valor_hex, 20) != NULL) { printf("O numero convertido para hexadecimal:%s\n", valor_hex); } else { printf("não foi possível converte o valor!\n"); } printf("Digite C para continuar convertendo:"); fgets(buffer, T_BUFFER, stdin); } while (buffer[0] == 'C' || buffer[0] == 'c'); return(0); } versão online! -
Bat Arquivo .BAT ler comandos de arquivo TXT externo.
kgin respondeu ao tópico de jun1orp1m3n7a em Programação - outros
Minha ideia seria o primeiro batch verificar na rede se tem alguma atualização dele mesmo, aí só bastaria ele atualizar e se auto executar. mantendo todas as atualizações do batch em uma maquina só. -
Bat Arquivo .BAT ler comandos de arquivo TXT externo.
kgin respondeu ao tópico de jun1orp1m3n7a em Programação - outros
Seu antivirus permite que um batch copie outro batch? -
VisualG Fonte do texto do programa não reconhece caracteres especiais.
kgin respondeu ao tópico de Nefang em Programação - iniciantes
Eu acho que a chave de registro é essa aqui HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Nls\Language\Default Ela deve estar com o valor entre 0407 a 0409 Já faz uns 15 anos que não uso o windows, então eu sugiro você abrir outro tópico na seção de sistemas operacionais. e não vai sair mudando o registro do windows de qualquer maneira, tem o risco de estragar o sistema operacional. Como você pode ver com a encodagem (essa palavra existe?) correta o programa fica normal, mas com a errada -
VisualG Lista de Exercícios para programador iniciante.
kgin respondeu ao tópico de Drelius em Programação - iniciantes
@Drelius Eu recomendo dar uma olhada no curso de algoritmo do curso em vídeo. E aprender outra linguagem de programação ao mesmo tempo. O visualg é meio limitado (não da para trabalhar com entrada, saída, áudio, vídeo e memória) deixando você meio limitado (não que isso seja ruim ). Uma linguagem como C,C++ ou javascript vai deixar você soltar mais a criatividade (recomendo ir de javascript!) fora que a maioria dos matérias para essas linguagens já contém uma tonelada de exercícios. -
VisualG Fonte do texto do programa não reconhece caracteres especiais.
kgin respondeu ao tópico de Nefang em Programação - iniciantes
@Nefitos Isso é um problema do idioma de exibição, acontecia muito isso comigo quando eu usava o windows e japonês ou mandarim. Siga essas instruções e tente configurar o sistema para português. https://support.microsoft.com/pt-br/windows/gerenciar-as-configurações-de-idioma-de-entrada-e-exibição-no-windows-12a10cb4-8626-9b77-0ccb-5013e0c7c7a2#WindowsVersion=Windows_10 Se não funcionar significa que tem algum programa modificando o registro do windows, e a única solução seria descobrir qual é o programa e desativar. -
Portugol Não consigo encerrar repita-ate no Visualg, estou tendo dificuldades em aprender
kgin respondeu ao tópico de jo12345 em Programação - iniciantes
Está faltando o fimEscolha na linha 69 algoritmo "Exercicios" var gabarito: vetor [1..10] de caractere opcaoMenu: caractere notaFinal: inteiro procedimento mostrarMenu() inicio Escreval("1 - cadastrar gabarito") escreval("2 - cadastrar prova") escreval("3 - sair") fimprocedimento procedimento cadastrarGabarito () var i: inteiro inicio para i de 1 ate 10 faca escreval ("informe a reposta da questão ",i) leia(gabarito[i]) fimpara fimprocedimento funcao verificarSituacao(nota: inteiro): caractere inicio se nota >= 7 retorne "Aprovado" senao retorna "Reprovado" fimse fimse fimfuncao procedimento notaFinal inicio para i de 1 ate 10 faca escreval ("informe a resposta da questão ", i) leia(resposta) se resposta = gabarito[i] então nota <-nota +1 fimse retorne nota fimprocedimento inicio repita mostrarMenu() escolha OpcaoMenu caso "1" cadastrarGabarito() caso "2" notaFinal <- cadastrarProva() escreval (verificarSituacao(notaFinal)) outrocaso escreval("opção invalida") fimescolha ate opcaoMenu = "3" fimalgoritmo no procedimento verificarSituacao você deveria usar uma função Exemplo funcao verificarSituacao(nota: inteiro): caractere inicio se nota >= 7 retorne "Aprovado" senao retorna "Reprovado" fimse fimfuncao e até onde eu usei o visualG, na minha versão não existe o tipo literal. você deveria usar o tipo caractere. Uma melhoria interessante seria no menu Exemplo funcao menuPrincipal:inteiro var opcao:inteiro inicio repita escreval("1-Cadastra gabarito") escreval("2-Cadastra prova") escreval("3-Sair") leia(opcao) se ((opcao < 1) ou (opcao > 3)) então escreval("Opcao Invalida") fimSe ate não ((opcao < 1) ou (opcao > 3)) retorne opcao fimFuncao Exemplo funcional do menu Algoritmo "exemplo" var opcao:inteiro funcao menuPrincipal:inteiro var opcao:inteiro inicio repita escreval("1-Cadastra gabarito") escreval("2-Cadastra prova") escreval("3-Sair") leia(opcao) se ((opcao < 1) ou (opcao > 3)) então escreval("Opcao Invalida") fimSe ate não ((opcao < 1) ou (opcao > 3)) retorne opcao fimFuncao inicio repita opcao <- menuPrincipal escolha opcao caso 1 escreval("Cadastro de gabarito") caso 2 escreval("Cadastro de prova") caso 3 escreval("Estamos saindo do programa!") fimEscolha ate opcao = 3 fimAlgoritmo -
Veja que aqui você está pegando como string ao invés ser como caractere. jeito "correto". scanf("%c", &sexo); de preferência a usar fgets ao invés scanf, ler a linha inteira e bem mais seguro do que só ler um caractere. exemplo #include <stdio.h> #include <ctype.h> /* Para utilizar a função toupper */ /* Constantes */ #define T_BUFFER 256 #define QUANTIDADE_CADASTROS 5 int main() { int contador, idade = 0, quantidade_homens = 0, media_homens = 0, quantidade_mulhers = 0, media_mulheres = 0, media_geral = 0; char buffer[T_BUFFER]; char sexo; /* ԅ(≖‿≖ԅ) */ for (contador = 0; contador < QUANTIDADE_CADASTROS; contador++) { printf("Digite sua idade: \n"); /* Checa se a idade é valida */ do { fgets(buffer, T_BUFFER, stdin); /* Prefira sempre pegar toda a linha */ sscanf(buffer, "%d", &idade); if (idade <= 0 || idade > 100) { printf("Idade invalida!\nDigite-a novamente\n"); } } while (idade <= 0 || idade > 100); /* media_geral = media_geral + idade; */ media_geral += idade; printf("Digite seu sexo: "); /* Checa se o sexo é valido */ do { fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%c", &sexo); if (toupper(sexo) != 'F' && toupper(sexo) != 'M') { printf("Sexo invalido!\nDigite novamente apenas F ou M\n"); } } while (toupper(sexo) != 'F' && toupper(sexo) != 'M'); if (toupper(sexo) == 'F') { /* quantidade_mulhers = quantidade_mulhers + 1; */ quantidade_mulhers++; } else { /* quantidade_homens = quantidade_homens + 1; */ /* media_homens = media_homens + idade; */ quantidade_homens++; media_homens += idade; } } printf("media: %d\n", media_geral/QUANTIDADE_CADASTROS); printf("mulheres cadastradas: %d\n", quantidade_mulhers); printf("homens cadastrados: %d\n", quantidade_homens); printf("A idade média dos homens cadastrados é de: %d", media_homens/QUANTIDADE_CADASTROS); return(0); } Versão online!
-
VisualG Implementar metodo de busca pelo nome
kgin respondeu ao tópico de Eduardo Nitsche em Programação - iniciantes
@Eduardo Nitsche Poste o código fonte atual. -
C Jogo 'adivinhe o numero', uma pequena questão.
kgin respondeu ao tópico de Ricardo José em C/C#/C++
@Ricardo José Você só precisa checar se o numero está na faixa definida. #include <stdio.h> #include <stdlib.h> #include <time.h> #define T_BUFFER 256 const char *NOME_NIVIEL[] = { "fácil", "intermediario", "difícil", "insano", "impossível" }; const char *FACES_TENTATIVAS[] = { "(╯° o °)╯︵ ┻━┻", "ಠ_ಠ", "⊙ ﹏ ⊙", "(´・ _ ・ `)", "◔_◔", "( ˇ෴ˇ )", "@_@" }; const char QUANTIDADE_FACES = 7; enum niveis_jogo { JOGO_FACIL = 0, JOGO_INTERMEDIARIO, JOGO_DIFICIO, JOGO_INSANO, JOGO_HELL, JOGO_QUANTIDADE_NIVIES }; struct faixa_tentativa { int inicio, fim; }; struct conteinder_tentativa { struct faixa_tentativa faixa; int quantidade; int numero; }; struct conteinder_tentativa NIVEIS[] = { {0, 10, 5, 0}, {0, 100, 10,0}, {0, 1000, 15,0}, {0, 1000, 3,0}, {0, 1000, 1,0} }; void pausa_msg(char *msg) { char buff[256]; if (msg != NULL) { printf("%s\n", msg); } printf("Pressione enter para continuar.\n"); fgets(buff, T_BUFFER, stdin); } int main(void) { struct conteinder_tentativa tentativa; char buffer[T_BUFFER]; int opcao; int vitoria = 0; do { printf("------------------------------------------------------------------------------\n"); printf("\t\t\t FOI GERADO UM NÚMERO\n"); printf("\t\t\t TENTE A SORTE\n"); printf("\t\t\t SERA QUE ELA ESTA AO SEU FAVOR? VEREMOS\n"); printf("------------------------------------------------------------------------------\n"); printf("(1) Nivel fácil! (5 Tentativas e o numero é de 0 ate 10)\n"); printf("(2) Nivel intermediario! (10 Tentativas e o numero é de 0 ate 100)\n"); printf("(3) Nivel difícil! (15 Tentativas e o numero é de 0 ate 1000)\n"); printf("(4) Nivel insano! (3 Tentativas e o numero é de 0 ate 1000)\n"); printf("(5) Nivel impossível! (1 Tentativa e o numero é de 0 ate 1000)\n"); printf("Escolha o nivel que deseja jogar: "); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao-1 < 0 || opcao-1 > JOGO_QUANTIDADE_NIVIES) { pausa_msg("Opcao invalida!"); } } while (opcao-1 < 0 || opcao-1 > JOGO_QUANTIDADE_NIVIES); tentativa = NIVEIS[opcao-1]; srand(time(NULL)); tentativa.numero = rand()%tentativa.faixa.fim; do { int numero = 0; printf("Tentativas restantes:%i\n", tentativa.quantidade); if (tentativa.quantidade < QUANTIDADE_FACES) { printf("%s\n", FACES_TENTATIVAS[tentativa.quantidade-1]); } else { printf("%s\n", FACES_TENTATIVAS[QUANTIDADE_FACES-1]); } do { printf("Digite o número: "); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &numero); } while (*buffer == '\n'); /* Verifica se está na faixa */ if (numero < tentativa.faixa.inicio || numero > tentativa.faixa.fim) { pausa_msg("O numero esta fora da faixa!"); } else if (numero == tentativa.numero) { pausa_msg("Parabens voce ganhou!"); vitoria = 1; } else if (numero > tentativa.numero) { pausa_msg("Chute um numero mais baixo da proxima vez ;)"); tentativa.quantidade--; } else { pausa_msg("Chute um numero mais alto da proxima vez ;)"); tentativa.quantidade--; } } while (tentativa.quantidade > 0 && vitoria != 1); if (vitoria) { printf("Parabens voce acaba de ganhar o jogo no niviel %s\n", NOME_NIVIEL[opcao-1]); pausa_msg(NULL); } else { pausa_msg("Que pena voce perdeu, mais sorte da proxima vez!"); } return(0); } Deve fica bem esquisito no windows :) Versão online! -
Dessa maneira que eu implementei você só precisaria salvar a posição que a carta está. Um vetor ou uma lista ligada já resolveria para servir de mão do jogador, bastando só ir incrementando uma variável para contar as cartas restantes no baralho.
-
@Ricardo José Eu dei uma recortada no que eu tinha aqui, mas vê se ajuda. #include <stdio.h> #include <stdlib.h> #include <time.h> #define Q_CARTAS 13 const char *NOMES_CARTAS[] = { "As", "Valete", "Dama", "Rei" }; const char *NOMES_NAIPES[] = { "Paus", "Ouros", "Copas", "Espadas" }; enum valores_naipes { PAUS = 0, OUROS, COPAS, ESPADAS, Q_NAIPES }; struct carta { unsigned char valor; enum valores_naipes naipe; }; /* Inicia um baralho françes de 52 cartas */ void inicia_baralho_frances(struct carta *baralho) { unsigned char valor_carta; enum valores_naipes valor_naipe; unsigned short int contador = 0; for (valor_naipe = 0; valor_naipe < Q_NAIPES; valor_naipe++) { for (valor_carta = 0; valor_carta < Q_CARTAS; valor_carta++) { baralho[contador].valor = valor_carta+1; baralho[contador].naipe = valor_naipe; contador++; } } } void embaralha_baralho(struct carta *baralho) { unsigned short int contador, indice; struct carta tmp = {0}; srand(time(NULL)); for (contador = 0; contador < Q_CARTAS*Q_NAIPES; contador++) { indice = rand()%(Q_NAIPES*Q_CARTAS); tmp = baralho[contador]; baralho[contador] = baralho[indice]; baralho[indice] = tmp; } } void mostra_carta(struct carta atual) { switch (atual.valor) { case 1: printf("|%c |", *NOMES_CARTAS[0]); break; case 11: printf("|%c |", *NOMES_CARTAS[1]); break; case 12: printf("|%c |", *NOMES_CARTAS[2]); break; case 13: printf("|%c |", *NOMES_CARTAS[3]); break; default: if (atual.valor < 10) printf("|%hhu |", atual.valor); else printf("|%hhu|", atual.valor); } printf("\n"); printf("|_%c|\n", *NOMES_NAIPES[atual.naipe]); } void pausa_msg(char *msg) { char buff[100]; if (msg != NULL) { printf("\t%s\n", msg); } fgets(buff, 100, stdin); } int main(void) { int contador; struct carta baralho[Q_CARTAS*Q_NAIPES] = {0}; inicia_baralho_frances(baralho); printf("Baralho organizado!\n"); for (contador = 0; contador < Q_NAIPES*Q_CARTAS; contador++) { static int n_cartas = 1; mostra_carta(baralho[contador]); if (n_cartas >= 13) { pausa_msg("Pressione enter para mostrar mais 13 cartas"); n_cartas = 1; } else { n_cartas++; } } embaralha_baralho(baralho); printf("Baralho embaralhado!\n"); for (contador = 0; contador < Q_NAIPES*Q_CARTAS; contador++) { static int n_cartas = 1; mostra_carta(baralho[contador]); if (n_cartas >= 13) { pausa_msg("Pressione enter para mostrar mais 13 cartas"); n_cartas = 1; } else { n_cartas++; } } return(0); } Versão online!
-
@LeGideon De uma olhada no meu https://replit.com/@KGin/JogoDaVelha#main.c
-
VisualG Como posso simplificar o código?
kgin respondeu ao tópico de Wendy Chagas em Programação - iniciantes
@Wendy Chagas Ao invés de simplificar já pensou em tornar mais genérico? Exemplo Algoritmo "parcelas" var valor_total:real valor_parcela:real quantidade_parcelas:inteiro nome_comprador, nome_produto:caractere opcao, contador:inteiro POR_ADIANTADA, POR_ATRASADA:real procedimento zera_dados inicio valor_total <- 0 valor_parcela <- 0 quantidade_parcelas <- 0 nome_comprador <- "" nome_produto <- "" fimProcedimento procedimento pega_dados inicio escreva("Digite o nome do comprador:") leia(nome_comprador) escreva("Digite o nome do produto:") leia(nome_produto) escreva("Digite o valor da parcela:") leia(valor_parcela) repita escreva("Digite a quantidade de parcelas:") leia(quantidade_parcelas) se quantidade_parcelas <= 1 entao escreval("Quantidade de parcelas invalido!") fimSe ate quantidade_parcelas > 1 fimProcedimento inicio // Porcentagem da parcela adiantada e atrasada POR_ADIANTADA <- 10.0 POR_ATRASADA <- 4.0 repita limpaTela zera_dados pega_dados para contador de 1 ate quantidade_parcelas faca limpaTela repita escreval("Digite uma das opções a baixo") escreval("A parcela ", contador," foi paga de que forma") escreval("1-Adiantada") escreval("2-Em dia") escreval("3-Em atraso") escreval("4-Para cancelar a operação") leia(opcao) se (opcao < 1) ou (opcao > 4) entao escreval("Opcao invalida!") fimSe ate (opcao >= 1)e(opcao <= 4) escolha opcao caso 1 valor_total <- valor_total+(valor_parcela-((valor_parcela*POR_ADIANTADA)/100)) caso 2 valor_total <- valor_total+valor_parcela caso 3 valor_total <- valor_total+(valor_parcela+((valor_parcela*POR_ATRASADA)/100)) caso 4 interrompa // Sai do laço de repetição fimEscolha fimPara se contador = quantidade_parcelas entao escreval("O compradaor ", nome_comprador," pagou um total de ", valor_total:2:2," no produto ", nome_produto) fimSe escreval("Deseja fazer outro calculo?") escreval("1-Sim, 2-não") leia(opcao) ate não (opcao = 1) fimAlgoritmo -
Portugol poste um exemplo deste exercicio
kgin respondeu ao tópico de luquinhas44 em Programação - iniciantes
programa { funcao inicio() { caractere opcao // Laço de repetição faca { // Seu codigo vai aqui! // Lê se o usuário deseja continuar. escreva("Deseja continuar (S/N):") leia(opcao) limpa() } enquanto (opcao == 'S' ou opcao == 's') // Finaliza o programa! } } -
@1hsouza1 Pelo o que eu pesquisei é isso mesmo, você declarou uma vetor de 10x10 de ponteiros. E isso excederia a quantidade máxima de memória do controlador. faça as contas 10*10*8=800 Bytes (cada ponteiro geralmente tem 8 bytes em c) e isso excede a quantidade máxima de memória do controlador, que é de apenas 368 bytes. Uma maneira de contornar isso seria declarando como constante para os valores da matriz serem escritos na memória flash do mc ao invés da memória RAM. em C seria assim #include <16F877A.h> #include <stdio.h> #include <stdlib.h> #use delay(clock = 20MHz) #use fast_io(b) unsigned int8 a, b, c, d, e; const unsigned char mat[10][10] = { {0, 16, 32, 48, 64, 80, 96, 112, 128, 144}, {1, 17, 33, 49, 65, 81, 97, 113, 129, 145}, {2, 18, 34, 50, 66, 82, 98, 114, 130, 146}, {3, 19, 35, 51, 67, 83, 99, 115, 131, 147}, {4, 20, 36, 52, 68, 84, 100, 116, 132, 148}, {5, 21, 37, 53, 69, 85, 101, 117, 133, 149}, {6, 22, 38, 54, 70, 86, 102, 118, 134, 150}, {7, 23, 39, 55, 71, 87, 103, 119, 135, 151}, {8, 24, 40, 56, 72, 88, 104, 120, 136, 152}, {9, 25, 41, 57, 73, 89, 105, 121, 137, 153} }; void main(void){ while(TRUE){ } } Exemplo online! Mas isso depende do compilador, Verifique na documentação qual a palavra correta para declarar constantes.
-
Outro Definir SSD M.2 NVMe como boot primário na placa-mãe ASUS P5G41T-M LX2/BR
kgin respondeu ao tópico de Willian_Marques em Placas-mãe
Se tiver um HD velho instale uma distro linux, depois configure o grub para iniciar o windows como padrão. -
VisualG Nota fiscal na tela final
kgin respondeu ao tópico de Marlon Gramacho em Programação - iniciantes
@Marlon Gramacho Se for o que eu postei aqui no visualg 3 tá funcionando. Poste o erro que você encontrou.
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