Ir ao conteúdo
  • Cadastre-se

kgin

Membro Pleno
  • Posts

    380
  • Cadastrado em

  • Última visita

Tópicos solucionados

  1. O post de kgin em Criacao de jogo da velha foi marcado como solução   
    Boa noite!
     
    O problema principal é que você declarou todos os tipos caractere como caractere
    e a outros problemas pontuais que tornam meio difícil consertar o algoritmo.
    recomendaria começar de novo e focar só no jogo em si por enquanto.
  2. O post de kgin em É possível definir o tamanho do vetor utilizando constante em portugol? foi marcado como solução   
    Não porque você tem que especificar qual é a primeira posição do vetor, mas essa lógica é valida em C e C++ pelo fato da primeira posição do vetor ser sempre a posição "0".
    exemplo em C
    #include <stdio.h> #define TAMANHO_STR 30 enum tipos_frutas { TF_ABACAXI = 0, TF_BANANA, TF_CEREJA, TF_DAMASCO, TF_EMBUABA, TF_QUANTIDADE_FRUTAS }; int main(void) { char buffer[256]; /* Utilizado para pegar a entrada padrão! */ int contador; /* Declara e inicia a matriz */ char nome_frutas[TF_QUANTIDADE_FRUTAS][TAMANHO_STR] = { "Abacaxi", "Banana", "Cereja", "Damasco", "Embuaba" }; /* Mostra o nome das frutas */ for (contador = 0; contador < TF_QUANTIDADE_FRUTAS; contador++) { printf("[%i]-%s\n", contador, nome_frutas[contador]); } /* Salta uma linha */ printf("\n"); /* Mostra a primeira e a ultima fruta */ printf("A primeira fruta e %s\n", nome_frutas[TF_ABACAXI]); printf("A ultima fruta e %s\n", nome_frutas[TF_EMBUABA]); /* Pausa o programa */ printf("Pressione enter para continuar!\n"); fgets(buffer, 256, stdin); return(0); } Experimente online!
     
    Você poderia contornar isso declarando a primeira posição do vetor e a ultima.
    Exemplo
    Algoritmo "Tipos_de_fruta" const QF_INICIO = 1 QF_FIM = 5 var nome_frutas: vetor [QF_INICIO..QF_FIM] de caractere contador:inteiro inicio // Inicia o vetor! nome_frutas[1] <- "Abacaxi" nome_frutas[2] <- "Banana" nome_frutas[3] <- "Cereja" nome_frutas[4] <- "Damasco" nome_frutas[5] <- "Embauba" // Mostra o nome das frutas limpaTela escreval("Nomes das frutas no sistema!") para contador de QF_INICIO ate QF_FIM faca escreval("[", contador, "]-", nome_frutas[contador]) fimPara fimAlgoritmo Em pascal (a linguagem pai do visualG) isso é uma declaração bem útil, mas no visualG não tem muito sentido fazer isso pelo fato da linguagem ser bem mais limitada.
  3. O post de kgin em Como colocar Vetores Dentro de Função? foi marcado como solução   
    Ficaria mais fácil usando vetores
    exemplo
    algoritmo "reserva_lugares" const QUANTIDADE_LINHAS = 10 QUANTIDADE_COLUNAS = 10 LUGAR_VAZIO = 0 LUGAR_RESERVADO = 1 var lugares: vetor [1..QUANTIDADE_LINHAS, 1..QUANTIDADE_COLUNAS] de inteiro btecla: caractere fileira: caractere cadeira: inteiro procedimento limpa_lugares var linhas, colunas:inteiro inicio para linhas de 1 ate QUANTIDADE_LINHAS faca para colunas de 1 ate QUANTIDADE_COLUNAS faca lugares[linhas, colunas] <- LUGAR_VAZIO fimPara fimPara fimProcedimento procedimento mostra_lugares var linhas, colunas:inteiro inicio escreva("-") para colunas de 1 ate QUANTIDADE_COLUNAS faca se colunas < QUANTIDADE_COLUNAS então escreva(colunas) seNao escreval(colunas) fimSe fimPara para linhas de 1 ate QUANTIDADE_LINHAS faca escreva(carac(asc("A")+(linhas-1))) escreva(" |") para colunas de 1 ate QUANTIDADE_COLUNAS faca se lugares[linhas, colunas] = LUGAR_VAZIO então se colunas < QUANTIDADE_COLUNAS então escreva("-|") seNao escreva("-") fimSe seNao se colunas < QUANTIDADE_COLUNAS então escreva("B|") seNao escreva("B") fimSe fimSe fimPara escreval("|") fimPara fimProcedimento inicio limpa_lugares limpaTela mostra_lugares escreval("Digite a fileira desejada") leia(fileira) escreval("Digite a cadeira desejada") leia(cadeira) lugares[(asc(maiusc(fileira))-asc("A"))+1, cadeira] <- LUGAR_RESERVADO mostra_lugares fimAlgoritmo  
  4. O post de kgin em distinguir letras e digitos foi marcado como solução   
    você pode usar as funções da biblioteca ctype.h para distinguir entre caractere (isalpha) ou números (isalnum)
    ou você pode comparar diretamente o caractere.
    Exemplo
    /* * Numero correspondente ao caractere */ #include <stdio.h> #define T_BUFFER 256 int main(void) { char caractere; char buffer[T_BUFFER]; do { printf("Digite \"@\" para encerrar o programa:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%c", &caractere); printf("%c e", caractere); if (caractere >= 'a' && caractere <= 'z') { printf(" uma letra do alfabeto minuscula\n"); } else if (caractere >= 'A' && caractere <= 'Z') { printf(" uma letra do alfabeto maiuscula\n"); } else if (caractere >= '0' && caractere <= '9') { printf(" um numeral\n"); } else { printf(" um caractere qualquer da tabela ascii\n"); } printf("e seu codigo correspondente na tabela ascii e:%d\n", caractere); printf("Pressione enter para continuar.\n"); fgets(buffer, T_BUFFER, stdin); } while (caractere != '@'); } versão online!
  5. O post de kgin em Programa que acaba quando repete um numero foi marcado como solução   
    @jorge.b Exemplo
    #include <stdio.h> #include <stdlib.h> #define T_BUFFER 256 int main(int q_arg, char *v_arg[]) { char buffer[T_BUFFER]; int n_atual = 0, n_anterior = 0; do { n_anterior = n_atual; printf("Digite o numero anteriormente digitado para encerrar\n>"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &n_atual); } while (n_atual != n_anterior); return(0); } Versão online!
  6. O post de kgin em Print mostrando resposta errada foi marcado como solução   
    Você errou na sintaxe do if o correto seria
    if(resto[i] == 10){ printf("A"); } else if(resto[i] == 11){ printf("B"); } else if(resto[i] == 12){ printf("C"); } else if(resto[i] == 13){ printf("D"); } else if(resto[i] == 14){ printf("E"); } else if(resto[i] == 15){ printf("F"); } else { printf("%d",resto[i]); }  
    Nessa parte também está errada
    Só vai criar um vetor de tamanho 0, em C não há vetores dinâmicos sem reservar memória para tal estrutura.
     
    O algoritmo funcionando
    #include <stdio.h> #include <stdlib.h> // Transforme um numero decimal em hexadecimal int main(){ int i=0; int resto[100]; int num; int depois; char buff[100]; printf("Digite um numero: \n"); fgets(buff, 100, stdin); sscanf(buff, "%d", &num); depois = num; while(num >= 16){ resto[i] = num % 16; num = num / 16; i++; } resto[i] = num; printf("\nO numero %d em hexadecimal eh: \n",depois); while(i>=0){ if(resto[i] == 10){ printf("A"); } else if(resto[i] == 11){ printf("B"); } else if(resto[i] == 12){ printf("C"); } else if(resto[i] == 13){ printf("D"); } else if(resto[i] == 14){ printf("E"); } else if(resto[i] == 15){ printf("F"); } else { printf("%d",resto[i]); } i--; } printf("\n\n"); fgets(buff, 100, stdin); // system("pause"); a piada já perdeu a graça :/ } versão online!
  7. O post de kgin em Não consigo imprimir os valores acima da média dos vetores. foi marcado como solução   
    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); }  
  8. O post de kgin em Fonte do texto do programa não reconhece caracteres especiais. foi marcado como solução   
    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

  9. O post de kgin em Não consigo encerrar repita-ate no Visualg, estou tendo dificuldades em aprender foi marcado como solução   
    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  
  10. O post de kgin em Como posso simplificar o código? foi marcado como solução   
    @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  
  11. O post de kgin em Matriz em CCS C Compiler foi marcado como solução   
    @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.
  12. O post de kgin em Registro de vacina e com sistema de Busca "CPF" foi marcado como solução   
    @Vitor.MP4 Recomendo você parar de usar fflush().
    Eu dei uma organizada e implementei uma maneira de fazer a busca.
    De uma olhada
    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define T_BUFFER 512 #define T_NOME 80 #define T_CPF 16 #define T_VACINA 100 #define T_DATA 15 #define Q_MAXIMO_VACINADOS 200 struct registro_vacinado { char nome[T_NOME]; char cpf[T_CPF]; char vacina[T_VACINA]; char data[T_DATA]; int lote; }; void msg_pausa(char *msg) { char buffer[T_BUFFER]; if (msg != NULL) { printf("%s\n", msg); } printf("Pressione enter para continuar!\n"); fgets(buffer, T_BUFFER, stdin); } void barra_simples(int tamanho, char chr) { int contador; for (contador = 0; contador < tamanho; contador++) putchar(chr); putchar('\n'); } int menu_principal(void) { char buffer[T_BUFFER] = {'\0'}; int opcao; do { barra_simples(20, '='); printf("1-Registrar Vacinado.\n"); printf("2-Listar Aplicacoes.\n"); printf("3-Buscar CPF.\n"); printf("4-Sair.\n"); barra_simples(20, '='); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao < 1 || opcao > 4) { printf("Opcao invalida!\n"); } } while (opcao < 1 || opcao > 4); return(opcao); } int main(void) { struct registro_vacinado vacinados[Q_MAXIMO_VACINADOS]; int q_registros = 0, opcao = 0, contador, n_busca = 0; char buffer[T_BUFFER]; do { opcao = menu_principal(); switch (opcao) { case 1: do { struct registro_vacinado tmp; do { printf("Insira seu nome:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.nome, buffer); printf("Insira seu CPF sem tracos ou pontos:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.cpf, buffer); printf("Insira nome da Vacina:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.vacina, buffer); printf("Insira a Data:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.data, buffer); printf("Insira numero do lote:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &tmp.lote); barra_simples(40, '-'); printf("Nome:%s\n", tmp.nome); printf("CPF:%s\n", tmp.cpf); printf("Nome da vacina:%s\n", tmp.vacina); printf("Data da vacinacao:%s\n", tmp.data); printf("Numero do lote:%i\n", tmp.lote); barra_simples(40, '-'); printf("As informações estão corretas?\n1\\Sim ou 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao == 2) { printf("Insira as informações novamente!\n"); } } while (opcao == 2); printf("Salvar o cadastro?\n1\\Sim 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao == 1) { vacinados[q_registros] = tmp; q_registros++; } printf("Fazer outro cadastro?\n1\\Sim 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); } while (opcao == 1); opcao = 0; break; case 2: for (contador = 0; contador < q_registros; contador++) { printf("Exibindo cadastros\n"); printf("Nome:%s\n", vacinados[contador].nome); printf("CPF:%s\n", vacinados[contador].cpf); printf("Nome da Vacina:%s\n", vacinados[contador].vacina); printf("Data:%s\n", vacinados[contador].data); printf("Numero do lote:%i\n", vacinados[contador].lote); msg_pausa(NULL); } break; case 3: printf("Digite o cpf para ser encontrado:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; for (contador = 0; contador < q_registros; contador++) { if (strcmp(vacinados[contador].cpf, buffer) == 0) { n_busca = contador; break; } } if (contador < q_registros) { printf("Registro de vacina encontrado!\n"); printf("O cpf %s e da pessoa %s\n", vacinados[n_busca].cpf, vacinados[n_busca].nome); } else { printf("Registro não encontrado!\n"); } msg_pausa(NULL); break; case 4: msg_pausa("O programa sera finalizado!"); } } while (opcao != 4); return(0); } Versão online!
  13. O post de kgin em Registro de vacina e com sistema de Busca "CPF" foi marcado como solução   
    @Vitor.MP4 Recomendo você parar de usar fflush().
    Eu dei uma organizada e implementei uma maneira de fazer a busca.
    De uma olhada
    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define T_BUFFER 512 #define T_NOME 80 #define T_CPF 16 #define T_VACINA 100 #define T_DATA 15 #define Q_MAXIMO_VACINADOS 200 struct registro_vacinado { char nome[T_NOME]; char cpf[T_CPF]; char vacina[T_VACINA]; char data[T_DATA]; int lote; }; void msg_pausa(char *msg) { char buffer[T_BUFFER]; if (msg != NULL) { printf("%s\n", msg); } printf("Pressione enter para continuar!\n"); fgets(buffer, T_BUFFER, stdin); } void barra_simples(int tamanho, char chr) { int contador; for (contador = 0; contador < tamanho; contador++) putchar(chr); putchar('\n'); } int menu_principal(void) { char buffer[T_BUFFER] = {'\0'}; int opcao; do { barra_simples(20, '='); printf("1-Registrar Vacinado.\n"); printf("2-Listar Aplicacoes.\n"); printf("3-Buscar CPF.\n"); printf("4-Sair.\n"); barra_simples(20, '='); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao < 1 || opcao > 4) { printf("Opcao invalida!\n"); } } while (opcao < 1 || opcao > 4); return(opcao); } int main(void) { struct registro_vacinado vacinados[Q_MAXIMO_VACINADOS]; int q_registros = 0, opcao = 0, contador, n_busca = 0; char buffer[T_BUFFER]; do { opcao = menu_principal(); switch (opcao) { case 1: do { struct registro_vacinado tmp; do { printf("Insira seu nome:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.nome, buffer); printf("Insira seu CPF sem tracos ou pontos:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.cpf, buffer); printf("Insira nome da Vacina:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.vacina, buffer); printf("Insira a Data:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.data, buffer); printf("Insira numero do lote:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &tmp.lote); barra_simples(40, '-'); printf("Nome:%s\n", tmp.nome); printf("CPF:%s\n", tmp.cpf); printf("Nome da vacina:%s\n", tmp.vacina); printf("Data da vacinacao:%s\n", tmp.data); printf("Numero do lote:%i\n", tmp.lote); barra_simples(40, '-'); printf("As informações estão corretas?\n1\\Sim ou 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao == 2) { printf("Insira as informações novamente!\n"); } } while (opcao == 2); printf("Salvar o cadastro?\n1\\Sim 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao == 1) { vacinados[q_registros] = tmp; q_registros++; } printf("Fazer outro cadastro?\n1\\Sim 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); } while (opcao == 1); opcao = 0; break; case 2: for (contador = 0; contador < q_registros; contador++) { printf("Exibindo cadastros\n"); printf("Nome:%s\n", vacinados[contador].nome); printf("CPF:%s\n", vacinados[contador].cpf); printf("Nome da Vacina:%s\n", vacinados[contador].vacina); printf("Data:%s\n", vacinados[contador].data); printf("Numero do lote:%i\n", vacinados[contador].lote); msg_pausa(NULL); } break; case 3: printf("Digite o cpf para ser encontrado:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; for (contador = 0; contador < q_registros; contador++) { if (strcmp(vacinados[contador].cpf, buffer) == 0) { n_busca = contador; break; } } if (contador < q_registros) { printf("Registro de vacina encontrado!\n"); printf("O cpf %s e da pessoa %s\n", vacinados[n_busca].cpf, vacinados[n_busca].nome); } else { printf("Registro não encontrado!\n"); } msg_pausa(NULL); break; case 4: msg_pausa("O programa sera finalizado!"); } } while (opcao != 4); return(0); } Versão online!
  14. O post de kgin em Registro de vacina e com sistema de Busca "CPF" foi marcado como solução   
    @Vitor.MP4 Recomendo você parar de usar fflush().
    Eu dei uma organizada e implementei uma maneira de fazer a busca.
    De uma olhada
    #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define T_BUFFER 512 #define T_NOME 80 #define T_CPF 16 #define T_VACINA 100 #define T_DATA 15 #define Q_MAXIMO_VACINADOS 200 struct registro_vacinado { char nome[T_NOME]; char cpf[T_CPF]; char vacina[T_VACINA]; char data[T_DATA]; int lote; }; void msg_pausa(char *msg) { char buffer[T_BUFFER]; if (msg != NULL) { printf("%s\n", msg); } printf("Pressione enter para continuar!\n"); fgets(buffer, T_BUFFER, stdin); } void barra_simples(int tamanho, char chr) { int contador; for (contador = 0; contador < tamanho; contador++) putchar(chr); putchar('\n'); } int menu_principal(void) { char buffer[T_BUFFER] = {'\0'}; int opcao; do { barra_simples(20, '='); printf("1-Registrar Vacinado.\n"); printf("2-Listar Aplicacoes.\n"); printf("3-Buscar CPF.\n"); printf("4-Sair.\n"); barra_simples(20, '='); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao < 1 || opcao > 4) { printf("Opcao invalida!\n"); } } while (opcao < 1 || opcao > 4); return(opcao); } int main(void) { struct registro_vacinado vacinados[Q_MAXIMO_VACINADOS]; int q_registros = 0, opcao = 0, contador, n_busca = 0; char buffer[T_BUFFER]; do { opcao = menu_principal(); switch (opcao) { case 1: do { struct registro_vacinado tmp; do { printf("Insira seu nome:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.nome, buffer); printf("Insira seu CPF sem tracos ou pontos:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.cpf, buffer); printf("Insira nome da Vacina:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.vacina, buffer); printf("Insira a Data:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; strcpy(tmp.data, buffer); printf("Insira numero do lote:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &tmp.lote); barra_simples(40, '-'); printf("Nome:%s\n", tmp.nome); printf("CPF:%s\n", tmp.cpf); printf("Nome da vacina:%s\n", tmp.vacina); printf("Data da vacinacao:%s\n", tmp.data); printf("Numero do lote:%i\n", tmp.lote); barra_simples(40, '-'); printf("As informações estão corretas?\n1\\Sim ou 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao == 2) { printf("Insira as informações novamente!\n"); } } while (opcao == 2); printf("Salvar o cadastro?\n1\\Sim 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); if (opcao == 1) { vacinados[q_registros] = tmp; q_registros++; } printf("Fazer outro cadastro?\n1\\Sim 2\\não\n"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &opcao); } while (opcao == 1); opcao = 0; break; case 2: for (contador = 0; contador < q_registros; contador++) { printf("Exibindo cadastros\n"); printf("Nome:%s\n", vacinados[contador].nome); printf("CPF:%s\n", vacinados[contador].cpf); printf("Nome da Vacina:%s\n", vacinados[contador].vacina); printf("Data:%s\n", vacinados[contador].data); printf("Numero do lote:%i\n", vacinados[contador].lote); msg_pausa(NULL); } break; case 3: printf("Digite o cpf para ser encontrado:"); fgets(buffer, T_BUFFER, stdin); buffer[strlen(buffer)-1] = '\0'; for (contador = 0; contador < q_registros; contador++) { if (strcmp(vacinados[contador].cpf, buffer) == 0) { n_busca = contador; break; } } if (contador < q_registros) { printf("Registro de vacina encontrado!\n"); printf("O cpf %s e da pessoa %s\n", vacinados[n_busca].cpf, vacinados[n_busca].nome); } else { printf("Registro não encontrado!\n"); } msg_pausa(NULL); break; case 4: msg_pausa("O programa sera finalizado!"); } } while (opcao != 4); return(0); } Versão online!
  15. O post de kgin em Como criar um OS em C++? foi marcado como solução   
    Quase todos os compiladores fazem, mas isso depende das bibliotecas que você está usando.
    para fazer isso no GCC basta fazer isso.
    $ gcc -c testes.c $ objcopy -O binary -j .text testes.o binfile esse comando vai pegar só o conteúdo executável do binário.
     
    Se você quer entrar nessa empreitada de fazer um sistema operacional eu recomendo aprender assembly,
    mas mais precisamente assembly do x86 16-bits.
    Alguns links úteis.
    Tutorial de assmebly do Adam hyde em português PC-GPE (PC Game Programmer's Encyclopedia) Baixe o dosbox, tasm e turbo C e crie um ambiente de programação em dos para brincar um pouco.
    Depois tente algo mais serio como fazer um bootloader.
    minimal bootloader
     
    Esse vídeo explica bem os passos mínimos para construir um sistema operacional.
     
    E mais uma porrada de links que valem dar uma olhada.
    Boot sector games AquilaOS sistema operacional feito em C e assembly GhostOS sistema operacional feito em C, C++ e assembly. ToaruOS 2.0
    Sortix
    Barebone OS
    Writing an Operating System from Scratch: From Assembly to C
    Eh eu recomendo você aprender a usar o qemu para rodar seus testes ao invés de uma maquina real.
  16. O post de kgin em Como criar um OS em C++? foi marcado como solução   
    Quase todos os compiladores fazem, mas isso depende das bibliotecas que você está usando.
    para fazer isso no GCC basta fazer isso.
    $ gcc -c testes.c $ objcopy -O binary -j .text testes.o binfile esse comando vai pegar só o conteúdo executável do binário.
     
    Se você quer entrar nessa empreitada de fazer um sistema operacional eu recomendo aprender assembly,
    mas mais precisamente assembly do x86 16-bits.
    Alguns links úteis.
    Tutorial de assmebly do Adam hyde em português PC-GPE (PC Game Programmer's Encyclopedia) Baixe o dosbox, tasm e turbo C e crie um ambiente de programação em dos para brincar um pouco.
    Depois tente algo mais serio como fazer um bootloader.
    minimal bootloader
     
    Esse vídeo explica bem os passos mínimos para construir um sistema operacional.
     
    E mais uma porrada de links que valem dar uma olhada.
    Boot sector games AquilaOS sistema operacional feito em C e assembly GhostOS sistema operacional feito em C, C++ e assembly. ToaruOS 2.0
    Sortix
    Barebone OS
    Writing an Operating System from Scratch: From Assembly to C
    Eh eu recomendo você aprender a usar o qemu para rodar seus testes ao invés de uma maquina real.
  17. O post de kgin em Como criar um OS em C++? foi marcado como solução   
    Quase todos os compiladores fazem, mas isso depende das bibliotecas que você está usando.
    para fazer isso no GCC basta fazer isso.
    $ gcc -c testes.c $ objcopy -O binary -j .text testes.o binfile esse comando vai pegar só o conteúdo executável do binário.
     
    Se você quer entrar nessa empreitada de fazer um sistema operacional eu recomendo aprender assembly,
    mas mais precisamente assembly do x86 16-bits.
    Alguns links úteis.
    Tutorial de assmebly do Adam hyde em português PC-GPE (PC Game Programmer's Encyclopedia) Baixe o dosbox, tasm e turbo C e crie um ambiente de programação em dos para brincar um pouco.
    Depois tente algo mais serio como fazer um bootloader.
    minimal bootloader
     
    Esse vídeo explica bem os passos mínimos para construir um sistema operacional.
     
    E mais uma porrada de links que valem dar uma olhada.
    Boot sector games AquilaOS sistema operacional feito em C e assembly GhostOS sistema operacional feito em C, C++ e assembly. ToaruOS 2.0
    Sortix
    Barebone OS
    Writing an Operating System from Scratch: From Assembly to C
    Eh eu recomendo você aprender a usar o qemu para rodar seus testes ao invés de uma maquina real.
  18. O post de kgin em Verificar se valor de entrada é um dígito hexadecimal foi marcado como solução   
    @Lim4 Eu acho que uma melhoria seria usar uma função, e também não ficar comparando um por um.
    Exemplo
    #include <stdio.h> #include <ctype.h> int is_digit(char digito) { return((digito >= '0' && digito <= '9') || (toupper(digito) >= 'A' && toupper(digito) <= 'F')); } int main() { char digit; printf("Insert the digit: "); scanf("%c", &digit); printf("Is it a hexa digit? "); if (is_digit(digit)) { printf("yes\n"); } else { printf("no\n"); } return 0; } Macros tendem a ser difíceis de debugging pelo fato que eles acontecem antes de compilar o código. 
  19. O post de kgin em Aumentar o tamanho da matriz sem deixar o Código imenso foi marcado como solução   
    Você pode fazer uma matriz só para os nomes da matriz e uma matriz só para os valores.
    int valores[linhas][colunas]; char nomes[linhas][colunas][64];  
    eh minha praia e outra, tô mais pra programação de jogos e embarcados 😕
  20. O post de kgin em Algoritmo quadrado de N foi marcado como solução   
    @gcrestudante Meu matematiquês tá meio ruim, mas eu acho que seria algo assim 😕
    #include <stdio.h> int main(void) { int numero, maiorQ, quadrado = 0; /* Escreva um algoritmo que leia um número inteiro, positivo N */ do { printf("Informe N\n"); scanf("%i%*c", &numero); if (numero < 0) { printf("Digite um numero positivo!\n"); } } while (numero < 0); /* calcule e mostre o maior quadrado menor ou igual a N */ maiorQ = 0; while (maiorQ < numero) { maiorQ = quadrado*quadrado; printf("%i=%i*%i\n", maiorQ, quadrado, quadrado); if (maiorQ < numero) { quadrado++; } else if ( maiorQ > numero) { quadrado--; } } printf("O maior quadrado calculavel é %i\n", quadrado); printf("%i=%i*%i\n", quadrado*quadrado, quadrado, quadrado); return(0); }  
  21. O post de kgin em Por que esse código não está rodando apropriadamente? foi marcado como solução   
    tem muitos, muitos erros.
    Mas o principal é aqui
    Você não reservou a memória para o próximo elemento na pilha.
  22. O post de kgin em Crie um programa, em linguagem C, que receba 10 registros contendo: Nome, RU foi marcado como solução   
    @Alexandre Xisto Eu recomendo você começar novamente e dar uma boa lida no tópico do @mauro_b
     
    A ideia do algoritmo e basicamente isso.
    Pegue todos os 10 registros do usuário Salve o registro usando RU como nome do arquivo Faça o passo 2 novamente até completar os 10 registros Se não compreendeu muito bem, então veja o executável final que eu fiz para demonstrar
    testes.zip
     
    Se você puder trocar de ferramenta recomendo fortemente, o visual studio não suporta (não sei ao certo, já faz tempo que eu testei) nenhuma versão decente da linguagem C.
    agora quanto ao erro foi porque você usou o fopen_s() igual ao fopen()
    veja a sintaxe correta aqui fopen_s, _wfopen_s
     
  23. O post de kgin em ponteiros com output estranho foi marcado como solução   
    não sei C++, mas eu acho que você se deparou com uma coisa herdada do C.
    Creio eu que o objeto cout reconheça o ponteiro como uma string do tipo C terminada com null.
    para contornar isso você pode fazer uma promoção (cast) no ponteiro para void.
    exemplo
    #include <iostream> using namespace std; int main () { char first[10] = "abc"; char *purl; purl = first; cout << (void *) purl << '\n' << *purl << endl; }  
  24. O post de kgin em esperava encontrar o fimalgoritmo foi marcado como solução   
    Ele está assim porque você errou na hora de utilizar o comando escolha, ele em varias partes do seu algoritmo foi utilizado como o comado se..então.
  25. O post de kgin em Mostrar o mesmo valor inserido no comando Leia. foi marcado como solução   
    @Mr. Ariel  Seria isso que você queria fazer?
     
    Algoritmo "retanguloCalc" Var base,altura : real Inicio Escreva("Insira valor para base: ") Leia (base) Escreva ("Insira valor para altura: ") Leia (altura) Escreval("Você digitou para a base e ", base," para a altura. Seu retângulo possui uma área de", base*altura) Fimalgoritmo  

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...

Ebook grátis: Aprenda a ler resistores e capacitores!

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!