leandro318 0 Denunciar post Postado Maio 19, 2015 Olá galera estou fazendo um algoritmo de um sistema de cadastro de usuários, o sistema deverá sempre perguntar o que o usuário deseja fazer, se deseja cadastrar um novo usuário, se deseja imprimir os usuários já cadastrados, ou se deseja sair. O sistema já está praticamente pronto, só encontrei um problema, quando digito 3 que é o número da opção para sair do programa, ele não sai, mesmo eu tendo colocado o comando "interrompa", ele volta para o procedimento pedindo os dados do usuário ao invés de sair. O código está assim: var nome: vetor [1..8] de literal data_nasc: vetor [1..8] de literal rg: vetor [1..8] de literal cont, cont2, aux, opcao: inteiro procedimento ler inicio enquanto (cont <= 8) faca cont <- cont + 1 escreval ("Digite o nome") leia (nome[cont]) escreval ("Digite a data de nascimento") leia (data_nasc[cont]) escreval ("Digite o RG") leia (rg[cont]) aux <- cont menu fimenquanto fimprocedimento procedimento escrever inicio escreval ("Usuários cadastrados: ") escreval ("") para cont2 de 1 ate aux faca escreval ("Usuário", cont2," Nome: ",nome[cont2]," Data de nascimento: ",data_nasc[cont2]," RG: ",rg[cont2]) fimpara menu fimprocedimento procedimento menu inicio escreval ("O que deseja fazer?") escreval ("") escreval ("1 - Cadastar usuário") escreval ("2 - Imprimir usuários já cadastrados") escreval ("3 - Sair") leia (opcao) enquanto (opcao <> 3) faca escolha (opcao) caso 1 ler caso 2 escrever caso 3 escreval ("Obrigado pela preferência, volte sempre!") interrompa outrocaso escreval ("Opção inválida!!") fimescolha escreval ("O que deseja fazer?") escreval ("") escreval ("1 - Cadastar usuário") escreval ("2 - Imprimir usuários já cadastrados") escreval ("3 - Sair") leia (opcao) fimenquanto fimprocedimento inicio cont <- 0 menu fimalgoritmo Diante disso, gostaria de saber qual comando devo colocar dentro do "caso 3" para que quando o usário pressionar o 3, o programa encerrar imediatamente e só exibir a mensagem "Obrigado pela preferência, volte sempre!". Compartilhar este post Link para o post Compartilhar em outros sites
uesley.melo 0 Denunciar post Postado Maio 19, 2015 acontece o seguinte: toda vez que você faz uma chamada a outro procedimento você cria o que é chamado "pilha de execução", um procedimento nao termina enquanto o procedimento que ele chamou não terminar. no seu caso, quando você chama o procedimento ler dentro de menu, ele executa o ler e quando encerra volta para menu, mas observa que no procedimento ler você tem um laço de execução chamando o procedimento menu 8 vezes. ou seja quando você executa o procedimento ler, ele chama o procedimento menu, e só depois de sair desse menu ele volta a ler pois ainda nao terminou o laço de ler; em resumo o que seu código está fazendo é ler os 8 registros de uma vez. alterei um pouco seu código e acredito que o comportamento que você esperava do seu código na verdade seja mais parecido com este: var nome: vetor [1..8] de literal data_nasc: vetor [1..8] de literal rg: vetor [1..8] de literal cont, cont2, aux, opcao: inteiro procedimento ler inicio cont <- cont + 1 escreval ("Digite o nome") leia (nome[cont]) escreval ("Digite a data de nascimento") leia (data_nasc[cont]) escreval ("Digite o RG") leia (rg[cont]) aux <- cont fimprocedimento procedimento escrever inicio escreval ("Usuários cadastrados: ") escreval ("") para cont2 de 1 ate aux faca escreval ("Usuário", cont2," Nome: ",nome[cont2]," Data de nascimento: ",data_nasc[cont2]," RG: ",rg[cont2]) fimpara fimprocedimento procedimento menu inicio escreval ("O que deseja fazer?") escreval ("") escreval ("1 - Cadastar usuário") escreval ("2 - Imprimir usuários já cadastrados") escreval ("3 - Sair") leia (opcao) enquanto (opcao <> 3) faca escolha opcao caso 1 ler caso 2 escrever caso 3 escreval ("Obrigado pela preferência, volte sempre!") interrompa outrocaso escreval ("Opção inválida!!") fimescolha escreval ("O que deseja fazer?") escreval ("") escreval ("1 - Cadastar usuário") escreval ("2 - Imprimir usuários já cadastrados") escreval ("3 - Sair") leia (opcao) fimenquanto fimprocedimento inicio cont <- 0 menu fimalgoritmo abraços Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Maio 19, 2015 Mude o Procedimento MENU para: procedimento menu inicio enquanto (opcao <> 3) faca escreval ("O que deseja fazer?") escreval ("") escreval ("1 - Cadastar usuário") escreval ("2 - Imprimir usuários já cadastrados") escreval ("3 - Sair") leia (opcao) escolha opcao caso 1 ler caso 2 escrever caso 3 escreval ("Obrigado pela preferência, volte sempre!") interrompa outrocaso escreval ("Opção inválida!!") fimescolha fimenquanto fimprocedimento Nunca seria exibida a mensagem da opção 3, pois enquanto for diferente de 3, o código é executado e sempre a opção era lida antes do loop. Compartilhar este post Link para o post Compartilhar em outros sites
leandro318 0 Denunciar post Postado Maio 28, 2015 Infelizmente, o programa fica dando erro, pedindo fimse não sei porque, modifiquei o código e está assim: procedimento menu inicio enquanto (opcao <> 6) faca escreval ("Menu Principal - Nome do Banco") escreval ("") timer (1000) on timer (0) off escreval ("Cadastro de usuário/senha ----- Digite 1") escreval ("Efetuar Login ----------------- Digite 2") escreval ("Saque ------------------------- Digite 3") escreval ("Saldo ------------------------- Digite 4") escreval ("Depósito ---------------------- Digite 5") escreval ("Sair -------------------------- Digite 6") leia (opcao) escolha (opcao) caso 1 cadastro caso 2 login caso 3 fazersaque caso 4 versaldo caso 5 fazerdeposito fimescolha fimenquanto se (opcao = 6) entao escreval ("Tem certeza que deseja sair? (S/N)") leia (confirmacao) se (confirmacao = "s") entao escreval ("Obrigado pela preferência, volte sempre!") fimalgoritmo senao menu fimse senao escreval ("Opção inválida!!") menu fimse fimprocedimento Alguém sabe porque ele fica dando erro pedindo fimse? Percebi uma coisa: se eu retirar o "fimalgoritmo" de dentro do "se", ele não dá mais esse erro, porém não sai do programa como preciso que aconteça. Também tentei com o "interrompa", mas também dá o mesmo erro. O que posso alterar para ele sair do programa como deveria? Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Maio 29, 2015 Este erro do "fimse" deve ser dentro de algum outro procedimento. O programa pode não entender corretamente um "senao se", o correto seria colocar o "se" na linha de baixo, e fechar todos os "se", até os que estão dentro do "senao". Compartilhar este post Link para o post Compartilhar em outros sites
leandro318 0 Denunciar post Postado Maio 30, 2015 Este erro do "fimse" deve ser dentro de algum outro procedimento. O programa pode não entender corretamente um "senao se", o correto seria colocar o "se" na linha de baixo, e fechar todos os "se", até os que estão dentro do "senao". Não é isso, pois se eu tirar o "fimalgoritmo" o programa roda 100%, não dá nenhum erro, porém não finaliza quando o usuário digitar 6, o erro só ocorre quando coloco o "fimalgoritmo" ou o "interrompa" para encerrar o programa quando o usuário digitar 6. Fiz algumas modificações e agora está assim: procedimento menu inicio enquanto (opcao <> 6) faca escreval ("Menu Principal - Nome do Banco") escreval ("") timer (1000) on timer (0) off escreval ("Cadastro de usuário/senha ----- Digite 1") escreval ("Login ------------------------- Digite 2") escreval ("Saque ------------------------- Digite 3") escreval ("Saldo ------------------------- Digite 4") escreval ("Depósito ---------------------- Digite 5") escreval ("Sair -------------------------- Digite 6") leia (opcao) escolha (opcao) caso 1 cadastro caso 2 login caso 3 fazersaque caso 4 versaldo caso 5 fazerdeposito caso 6 escreval ("Obrigado pela preferência, volte sempre!") fimalgoritmo outrocaso escreval ("Opção inválida!!") fimescolha fimenquanto fimprocedimento Porém o erro continua. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Maio 31, 2015 Opção 6 sai do loop, dessa forma não precisa de mais nada, quando for para a próxima iteração o enquanto vai ver que a opção é 6 e acaba. Compartilhar este post Link para o post Compartilhar em outros sites
leandro318 0 Denunciar post Postado Maio 31, 2015 Opção 6 sai do loop, dessa forma não precisa de mais nada, quando for para a próxima iteração o enquanto vai ver que a opção é 6 e acaba. Mas esse é o problema, ele sai do loop, mas executa o próximo procedimento, preciso que ele saia totalmente do programa. Compartilhar este post Link para o post Compartilhar em outros sites
lokaodomau 61 Denunciar post Postado Junho 4, 2015 Talvez o problema seja você chamar várias vezes o procedimento "menu". Quando você chama qualquer outro procedimento dentro do menu, ao chegar em seu final, volta para o menu. Por exemplo, dentro do procedimento "menu", eu escolho a opção de login, o algoritmo vai executar o procedimento "login", quando finalizar, vai retornar ao menu, executando a instrução após a chamada do procedimento "login". algoritmo "entender recursao" // Função : Tentando entender recursao // Autor : Lokaodomau // Data : 03/06/2015 // Seção de Declarações var entendeu: literal // procedimento procedimento recursao inicio escreval("Isto é recursão, entendeu? (S/N)") leia(entendeu) se nao( entendeu = "S" ) entao // entenda recursao recursao fimse fimprocedimento // algoritmo inicio // Seção de Comandos recursao fimalgoritmo Compartilhar este post Link para o post Compartilhar em outros sites
YumalaySc 2 Denunciar post Postado Junho 4, 2015 Ola Leandro, tudo certo? Fiz o algoritmo para lhe dar uma ideia, o mesmo nao trabalha com vetor, apenas soma dos dados (trabalhar com vetor e mais fácil, porem apenas quis lhe dar uma "luz". Se precisar de algo ou se meu código não condizer com oque deseja, só falar ) Obs Tem apenas cadastro de nome de usuário, para demais opções apenas adicione no codigo algoritmo "semnome" // Função : cadastrar novo user, imprimir os existentes // Autor : Eduardo Cipriani // Data : 04/06/2015 // Seção de Declarações var cont , validacao :inteiro uc , usuario : caracter inicio escreval("Programa Iniciado") escreval("Oque deseja fazer? informe o numero para realizar a operaçao") escreval("1° Cadastrar novo usuario?") escreval("2° Imprimir os existentes") escreval("3°Sair do programa") leia(validacao) // o usuario informe oque quer executar repita //comando repita (ele ira repetir ate o user digitar 3 olha no fim do comando) se(validacao = 1)entao // Se digitar 1 ele ira dar a opcao de cadastrar user escreval("Informe o nome do usuario") leia(usuario) // le o nome do usuario uc <- uc + " e " + usuario //"pega o usuario cadastrado e soma com os ja existentes e joga na variavel uc (usuarios cadastrados) cont <- cont + 1 // para validar se ja foram cadastrados usuario Ve na "validacao = 2" abaixo escreval("Deseja executar novamente? informe o numero correspondente") // leia(validacao) // valida se quer executar novamente fimse se(validacao = 2)entao // valida para que se o user digitar 2 imprima os usuarios cadastrados se(cont > 0)entao // valida para ver se tem algum user cadastrado escreval("Usuarios Cadastrados;") escreval(uc) //mostrar os usuarios cadastrados escreval("Deseja executar novamente? informe o numero correspondente") leia(validacao) // valida se quer executar novamente senao escreval("Nenhum usuario cadastrado") escreval("Deseja executar novamente? informe o numero correspondente") leia(validacao) // valida se quer executar novamente fimse fimse se(validacao = 3)entao // Se for digitado 3 exibe a mensagem abaixo escreval("Obrigado por utilizar o programa") fimse ate validacao = 3 // Se o usuario digitar 3 o programa e finalizado //espero que tenha lhe ajudado. qualquer duvida so pedir. escreval("Programa finalizado") fimalgoritmo Comentei o código inteiro, espero que ajude. Compartilhar este post Link para o post Compartilhar em outros sites