Ir ao conteúdo
  • Cadastre-se

kgin

Membro Pleno
  • Posts

    380
  • Cadastrado em

  • Última visita

Tudo que kgin postou

  1. @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.
  2. 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
  3. kgin

    C media em linguagem c

    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!
  4. @Eduardo Nitsche Poste o código fonte atual.
  5. @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!
  6. 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.
  7. @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!
  8. kgin

    C Tirar scanf do loop

    @LeGideon De uma olhada no meu https://replit.com/@KGin/JogoDaVelha#main.c
  9. @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
  10. 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! } }
  11. @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. Se tiver um HD velho instale uma distro linux, depois configure o grub para iniciar o windows como padrão.
  13. @Marlon Gramacho Se for o que eu postei aqui no visualg 3 tá funcionando. Poste o erro que você encontrou.
  14. Você pode fazer com vetores algoritmo "Padaria" const MAXIMO_PRODUTOS = 10 tipo tproduto=registro nome:caractere codigo:inteiro valor:real fimRegistro var produtos:vetor [1..MAXIMO_PRODUTOS] de tproduto pedidos:vetor [1..MAXIMO_PRODUTOS] de inteiro deveContinuarPerguntando:logico clienteConsumiuMais:caractere valor_total:real contador:inteiro codigo, quantidade, n_produtos:inteiro procedimento inicia_produtos inicio produtos[1].nome <- "Pão de queijo" produtos[1].codigo <- 100 produtos[1].valor <- 5.20 produtos[2].nome <- "Bauru simples" produtos[2].codigo <- 101 produtos[2].valor <- 7.30 produtos[3].nome <- "Quibe" produtos[3].codigo <- 102 produtos[3].valor <- 6.50 produtos[4].nome <- "Coxinha de frango" produtos[4].codigo <- 103 produtos[4].valor <- 6.70 produtos[5].nome <- "Torta de Frango (fatia)" produtos[5].codigo <- 104 produtos[5].valor <- 11.10 produtos[6].nome <- "Empada de bacalha" //WTF -_- produtos[6].codigo <- 105 produtos[6].valor <- 9.50 produtos[7].nome <- "Pão delícia" produtos[7].codigo <- 106 produtos[7].valor <- 5.80 produtos[8].nome <- "Esfirra" produtos[8].codigo <- 107 produtos[8].valor <- 8.40 produtos[9].nome <- "Rissole de queijo" produtos[9].codigo <- 108 produtos[9].valor <- 10.60 produtos[10].nome <- "Croquete" produtos[10].codigo <- 109 produtos[10].valor <- 9.10 fimProcedimento procedimento zera_produtos var contador:inteiro inicio para contador de 1 ate MAXIMO_PRODUTOS faca pedidos[contador] <- 0 fimPara fimProcedimento funcao checa_codigo(codigo:inteiro):logico var contador:inteiro inicio retorne falso para contador de 1 ate MAXIMO_PRODUTOS faca se codigo = produtos[contador].codigo entao retorne verdadeiro interrompa fimSe fimPara fimFuncao funcao posicao_codigo(codigo:inteiro):inteiro var contador:inteiro inicio para contador de 1 ate MAXIMO_PRODUTOS faca se codigo = produtos[contador].codigo entao retorne contador interrompa fimSe fimPara fimFuncao procedimento barra_s(tamanho:inteiro; adorno:caractere) var contador:inteiro inicio para contador de 1 ate tamanho faca escreva(adorno) fimPara escreval fimProcedimento procedimento faz_pausa var tmp:caractere inicio escreval("Pressione enter para continuar.") leia(tmp) fimProcedimento inicio // Inicia todos os produtos inicia_produtos deveContinuarPerguntando <- verdadeiro // Zera a lista de pedidos zera_produtos n_produtos <- 0 valor_total <- 0 repita barra_s(80, "_") escreval(" Delicatessen Veneza") barra_s(80, "_") escreval escreval(" Olá, seja Bem Vindo a Delicatessen Veneza") escreval(" O que vamos consumir hoje?") barra_s(80, "_") escreval repita escreva("Digite o codigo de um salgado que o cliente consumiu: ") leia(codigo) se checa_codigo(codigo) = falso entao escreval("Codigo invalido") fimSe ate não(checa_codigo(codigo) = falso) escreva("Digite a quantidade desse salgado que o cliente consumiu: ") leia(quantidade) // Coloca na lista de pedidos pedidos[posicao_codigo(codigo)] <- pedidos[posicao_codigo(codigo)]+quantidade escreval("O cliente consumiu mais algum salgado? Digite S(SIM) OU N(NÃO)") leia(clienteConsumiuMais) se clienteConsumiuMais = "S" entao deveContinuarPerguntando := verdadeiro seNao deveContinuarPerguntando := falso fimse ate não deveContinuarPerguntando para contador de 1 ate MAXIMO_PRODUTOS faca se pedidos[contador] > 0 entao escreval(produtos[contador].nome, "-", pedidos[contador], "*", produtos[contador].valor:2:2, "=", pedidos[contador]*produtos[contador].valor:2:2) n_produtos <- n_produtos+1 valor_total <- valor_total+(produtos[contador].valor*pedidos[contador]) fimSe fimPara escreval("Total de produtos pedidos ", n_produtos) escreval("O cliente deve pagar: R$", valor_total:6:2) escreval(" Obrigado volte sempre!") fimAlgoritmo
  15. @luquinhas44 Eu acho que você não está usando a versão do portugol studio de pc, é sim a versão online. eu recomendo você baixar a versão para o seu sistema operacional e ver a ajuda do programa que é bem mais completa do que a versão online. Eu declarei um vetor com a constante MAX_CARTEIRAS, quando o interpretador passar pela constante MAX_CARTEIRAS ele vai substituir pelo numero 4327. Veja a parte sobre vetores e constantes da ajuda do portugol ide. Veja bem, se eu fizesse assim enquanto (não(numero_atual >= 1 e numero_atual <= MAX_CARTEIRAS)) seria bem mais difícil de entender do que enquanto (numero_atual < 1 ou numero_atual > MAX_CARTEIRAS) É uma regra básica da proposição na simplificação de expressões lógicas para satisfazer uma condição lógica, porque o comando enquanto precisa que a expressão seja verdadeira para repetir os comandos. Leia a documentação do portugol studio, lá tem todas as respostas.
  16. @Gabriel213412 Não tá ruim, só está meio desorganizado. no caso de editar só uma linha. você pode fazer outro arquivo com a linha nova já editada pegando tudo do arquivo anterior. depois você apaga o arquivo velho é renomeia o arquivo novo para o nome do arquivo velho. Se você tiver replit entra na sala https://replit.com/join/reyknuezzm-kgin
  17. @Gabriel213412 Poste o enunciado e utilize o botão code para postar o código. Já pensou em refazer novamente e tentar fazer de outro modo?
  18. Delphi e o nome do programa. a linguagem utilizada e o object pascal até a versão 10 você poderia usar todas as extensões do pascal clássico (compatível com o turbo pascal de certo modo), Mas a partir do Alexandria não é mais possível utilizar todas as extensões do pascal. mas ainda e pascal!
  19. @VNtox Recomendo você procurar um livro chamado C completo e total. O autor do livro disponibilizou o livro gratuitamente na internet. Veja os seguintes tópicos. Matrizes e string. pagina 92 ponteiros. pagina 113 Estruturas, Uniões, enumerações e tipos definidos pelo usuário. pagina 167 procure por uma coisa chamada zlib que vai te ajudar também. Depois de estudar tudo isso, volte e de uma olhada no meu algoritmo /* Venda de ingressos */ #include <stdio.h> #include <string.h> /* Estados da poltrona */ #define POLTRONA_VAZIA 0 #define POLTRONA_OCUPADA 1 /* Quantidade de linhas e colunas do cinema */ #define Q_LINHAS_POLTRONAS 4 #define Q_COLUNAS_POLTRONAS 5 /* Tamanho maxímo do nome */ #define T_NOME 100 #define T_BUFFER 250 struct sessão { char nome[T_NOME]; int poltronas[Q_LINHAS_POLTRONAS][Q_COLUNAS_POLTRONAS]; }; void inicia_sessao(struct sessão *atual, char *nome) { int linhas, colunas; /* Coloca o nome da sessão */ strcpy(atual->nome, nome); /* Inicia as poltronas */ for (linhas = 0; linhas < Q_LINHAS_POLTRONAS; linhas++) { for (colunas = 0; colunas < Q_COLUNAS_POLTRONAS; colunas++) { atual->poltronas[linhas][colunas] = POLTRONA_VAZIA; } } } void mostra_sessao(struct sessão *atual) { int linhas, colunas; printf("\tNome da sessão:%s\n", atual->nome); printf(" |"); for (colunas = 0; colunas < Q_COLUNAS_POLTRONAS; colunas++) { printf("%i", colunas+1); if (colunas < Q_COLUNAS_POLTRONAS-1) { printf(" |"); } } printf("\n"); for (linhas = 0; linhas < Q_LINHAS_POLTRONAS; linhas++) { printf("%i |", linhas+1); for (colunas = 0; colunas < Q_COLUNAS_POLTRONAS; colunas++) { switch (atual->poltronas[linhas][colunas]) { case POLTRONA_VAZIA: printf("V"); break; case POLTRONA_OCUPADA: printf("O"); break; } if (colunas < Q_COLUNAS_POLTRONAS-1) { printf(" |"); } } printf("\n"); } printf("V = Vazio\nO = Ocupado\n"); } int main(void) { struct sessão filme; char buffer[T_BUFFER]; inicia_sessao(&filme, "Blame!"); do { int linha, coluna; mostra_sessao(&filme); printf("Digite a linha da poltrona desejada:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &linha); printf("Digite a coluna da poltrona desejada:"); fgets(buffer, T_BUFFER, stdin); sscanf(buffer, "%i", &coluna); if (linha-1 >= 0 && linha-1 < Q_LINHAS_POLTRONAS && coluna-1 >= 0 && coluna-1 < Q_COLUNAS_POLTRONAS) { if (filme.poltronas[linha-1][coluna-1] == POLTRONA_VAZIA) { filme.poltronas[linha-1][coluna-1] = POLTRONA_OCUPADA; printf("A poltrona foi ocupada!\n"); } else { printf("A poltrona ja esta ocupada!\n"); } } else { printf("poltrona invalida!\n"); } printf("Digite S para sair ou C para continuar\n"); fgets(buffer, T_BUFFER, stdin); } while (buffer[0] == 'C' || buffer[0] == 'c'); return(0); } Veja a relação dos dados e das poltronas com essa planilha poltronas.xlsx Depois tente entender como tudo foi implementado. Versão do código online!
  20. Não irei corrigir o seu algoritmo, mas, sim apontar o erro. programa { funcao inicio() { inteiro variaveis[7] faca { escreva ("\nDigite o numero da carteira de motorista: ") leia (variaveis[4]) escreva ("Digite o numero de multas: ") leia (variaveis[1]) escreva ("Digite o valor da multa: ") leia (variaveis[2]) variaveis[5] = variaveis[1] variaveis[6] = variaveis[4] se (variaveis[5] > variaveis[4]){ escreva ("O maior numero de multas é para a carteira: ", variaveis[5]) se (variaveis[6] > variaveis[1]) escreva ("O maior numero de multas é: ", variaveis[6]) } /* Falta a chave para fechar o bloco faca{..}enquanto() "}" */ enquanto (variaveis[0] > 0) /* Falta a chave "}" para fechar o bloco da função */ } Recomendo uma estratégia melhor para fazer o algoritmo. programa { inclua biblioteca Matematica // Quantidade maxima de carteiras de motorista const inteiro MAX_CARTEIRAS = 4327 funcao inicio() { // Salva o numero da carteira de motorista inteiro numero_carteira[MAX_CARTEIRAS] // Valor de debitos por carteira real multas_carteira[MAX_CARTEIRAS] // Quantindade de multas e carteiras pegas inteiro q_cadastrados = 0 caractere opcao faca { // Numero atual pego da carteira de motorista inteiro numero_atual = 0 // Quantidade de multas a serem pegas inteiro q_numero_multas // Multa atual real multa_atual = 0.0 // Soma de multas de cada motorista real soma_multas = 0.0 // Pega o numero da carteira de motorista // -O número da carteira de motorista (de 1 a 4327) faca { escreva("Digite o numero da carteira:") leia(numero_atual) limpa() se (numero_atual < 1 ou numero_atual > MAX_CARTEIRAS) { escreva("O numero da carteira não pode ser menor que 1 ou maior que ", MAX_CARTEIRAS,"\n") } } enquanto (numero_atual < 1 ou numero_atual > MAX_CARTEIRAS) // Salva o numero da carteira numero_carteira[q_cadastrados] = numero_atual escreva("Digite o numero de multas a serem pegas:") leia(q_numero_multas) limpa() // Pega todas as multas para (inteiro contador = 0; contador < q_numero_multas; contador++) { escreva("Digite o valor da multa [", contador+1, "]:") leia(multa_atual) limpa() soma_multas = soma_multas+multa_atual } // Salva a soma das multas da carteira atual multas_carteira[q_cadastrados] = soma_multas // Incrementa a quantidade de carteiras pegas q_cadastrados = q_cadastrados+1 // Pergunta se quer cadastra outra carteira escreva("Deseja cadastrar outra carteira?\n") escreva("S/N:") leia(opcao) } enquanto (opcao == 'S' ou opcao == 's') // Mostra a soma de todas as multas de cada carteira para (inteiro contador = 0; contador < q_cadastrados; contador++) { escreva("Divida da carteira ", numero_carteira[contador], " e ", Matematica.arredondar(multas_carteira[contador], 2), "\n") } } } É apenas um esboço do algoritmo!
  21. Recomendo você declarar dessa maneira algoritmo "aprovados" const Q_TURMAS = 4 Q_ALUNOS = 25 var notas_alunos:vetor [1..Q_TURMAS, 1..Q_ALUNOS] de real nomes_alunos:vetor [1..Q_TURMAS, 1..Q_ALUNOS] de caractere maiores_turma:vetor [1..Q_TURMAS] de inteiro turmas, alunos: inteiro maior_nota:real posicao_nota:inteiro nomes:vetor [1..5] de caractere sob_nomes:vetor [1..5] de caractere inicio // Inicia os nomes nomes[1] <- "Jose" nomes[2] <- "Maria" nomes[3] <- "Michellin" nomes[4] <- "Ronaldo" nomes[5] <- "Ivanildo" sob_nomes[1] <- " Machado" sob_nomes[2] <- " Do Allamo" sob_nomes[3] <- " Santana" sob_nomes[4] <- " Pinto" sob_nomes[5] <- " Soares" // Pega os nomes e as notas para turmas de 1 ate Q_TURMAS faca escreval("Digite os nomes e as notas dos alunos da turma ", carac(asc("A")+(turmas-1))) para alunos de 1 ate Q_ALUNOS faca escreval("Digite o nome do aluno [", alunos, "]") //leia(nomes_alunos[turmas, alunos]) nomes_alunos[turmas, alunos] <- nomes[randi(5)+1]+sob_nomes[randi(5)+1] escreval(nomes_alunos[turmas, alunos]) escreval("Digite a nota do aluno") //leia(notas_alunos[turmas, alunos]) notas_alunos[turmas, alunos] <- (rand*9)+1 escreval(notas_alunos[turmas, alunos]:2:2) fimPara fimPara para turmas de 1 ate Q_TURMAS faca maior_nota <- 0.0 para alunos de 1 ate Q_ALUNOS faca // Checa o aluno com a maior nota se maior_nota < notas_alunos[turmas, alunos] entao maior_nota <- notas_alunos[turmas, alunos] posicao_nota <- alunos fimSe fimPara maiores_turma[turmas] <- posicao_nota fimPara escreval("Maiores notas de cada turma") para turmas de 1 ate Q_TURMAS faca escreval("Maior nota da turma ", carac(asc("A")+(turmas-1))) escreval("Aluno ", nomes_alunos[turmas, maiores_turma[turmas]]) escreval("Nota ", notas_alunos[turmas, maiores_turma[turmas]]:2:2) fimPara fimAlgoritmo
  22. @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!
  23. #include <stdio.h> #include <ctype.h> #define Q_VOGAIS 5 #define TAM_FRASE 512 int main(void) { const char VOGAIS[Q_VOGAIS] = {'A', 'E', 'I', 'O', 'U'}; char frase[TAM_FRASE] = {'\0'}; int contador1, contador2, q_vogais_frase = 0; printf("Digite uma frase:"); fgets(frase, TAM_FRASE, stdin); for (contador1 = 0; frase[contador1]&&contador1 < TAM_FRASE; contador1++) { for (contador2 = 0; contador2 < Q_VOGAIS; contador2++) { if (toupper(frase[contador1]) == VOGAIS[contador2]) { q_vogais_frase++; break; } } } printf("A frase %s tem %i vogais\n", frase, q_vogais_frase); return(0); }
  24. @Nicolas Stevan tá meio complicado o seu algoritmo, e ele também tá com um erro que eu não estou conseguindo visualizar uma solução. Erro apresentado Poste o código com o botão <> code no fórum. ter que ficar copiando do fórum muda a formatação do código.

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!