@ORION@ 0 Denunciar post Postado Maio 8, 2013 Bem gente to com um problema com o visualg, o professor passo um desafio para a gente... o desafio era o seguinte solicitar ao usuário um numero de 1 à 1 milhão e escrever este numero por extenso. o professor disse q o deveria ter no maximo 150 linhas.... eu quero saber como dexar meu algoritmo menor.... ( meu algoritmo fico com cerca de 330 linhas ) algoritmo "desafio" var numero:inteiro inicio escreval ("Diga o número inteiro a ser escrito: ") leia(numero) repita escolha numero caso 901000 ate 999999 escreva ("Novecentos e ") numero:= numero - 900000 caso 900000 ate 900999 escreva ("Novecentos mil e ") numero:= numero - 900000 caso 801000 ate 899999 escreva ("Oitocentos e ") numero:= numero - 800000 caso 800000 ate 800999 escreva ("Oitocentos mil e ") numero:= numero - 800000 caso 701000 ate 799999 escreva ("Setecentos e ") numero:= numero - 700000 caso 700000 ate 700999 escreva ("Setecentos mil e ") numero:= numero - 700000 caso 601000 ate 699999 escreva ("Seiscentos e ") numero:= numero - 600000 caso 600000 ate 600999 escreva ("Seiscentos mil e ") numero:= numero - 600000 caso 501000 ate 599999 escreva ("Quinhentos e ") numero:= numero - 500000 caso 500000 ate 500999 escreva ("Quinhentos mil e ") numero:= numero - 500000 caso 401000 ate 499999 escreva ("Quatrocentos e ") numero:= numero - 400000 caso 400000 ate 400999 escreva ("Quatrocentos mil e ") numero:= numero - 400000 caso 301000 ate 399999 escreva ("Trezentos e ") numero:= numero - 300000 caso 300000 ate 300999 escreva ("Trezentos mil e ") numero:= numero - 300000 caso 201000 ate 299999 escreva ("Duzentos e ") numero:= numero - 200000 caso 200000 ate 200999 escreva ("Duzentos mil e ") numero:= numero - 200000 caso 101000 ate 199999 escreva ("Cento e ") numero:= numero - 100000 caso 100000 ate 100999 escreva ("Cem mil e ") numero:= numero - 100000 caso 91000 ate 99999 escreva ("Noventa e ") numero:= numero - 90000 caso 90000 ate 90999 escreva ("Noventa mil e ") numero:= numero - 90000 caso 81000 ate 89999 escreva ("Oitenta e ") numero:= numero - 80000 caso 80000 ate 80999 escreva ("Oitenta mil e ") numero:= numero - 80000 caso 71000 ate 79999 escreva ("Setenta e ") numero:= numero - 70000 caso 70000 ate 70999 escreva ("Setenta mil e ") numero:= numero - 70000 caso 61000 ate 69999 escreva ("Sessenta e ") numero:= numero - 60000 caso 60000 ate 60999 escreva ("Sessenta mil e ") numero:= numero - 60000 caso 51000 ate 59999 escreva ("Cinquenta e ") numero:= numero - 50000 caso 50000 ate 50999 escreva ("Cinquenta mil e ") numero:= numero - 50000 caso 41000 ate 49999 escreva ("Quarenta e ") numero:= numero - 40000 caso 40000 ate 40999 escreva ("Quarenta mil e ") numero:= numero - 40000 caso 31000 ate 39999 escreva ("Trinta e ") numero:= numero - 40000 caso 30000 ate 30999 escreva ("Trinta mil e ") numero:= numero - 30000 caso 21000 ate 29999 escreva ("Vinte e ") numero:= numero - 20000 caso 20000 ate 20999 escreva ("Vinte mil e ") numero:= numero - 20000 caso 19000 ate 19999 escreva ("Dezenove mil e ") numero:= numero - 19000 caso 18000 ate 18999 escreva ("Dezoito mil e ") numero:= numero - 18000 caso 17000 ate 19999 escreva ("Dezessete mil e ") numero:= numero - 17000 caso 16000 ate 19999 escreva ("Dezesseis mil e ") numero:= numero - 16000 caso 15000 ate 19999 escreva ("Quinze mil e ") numero:= numero - 15000 caso 14000 ate 19999 escreva ("Quatorze mil e ") numero:= numero - 14000 caso 13000 ate 19999 escreva ("Treze mil e ") numero:= numero - 13000 caso 12000 ate 19999 escreva ("Doze mil e ") numero:= numero - 12000 caso 11000 ate 19999 escreva ("Onze mil e ") numero:= numero - 11000 caso 10000 ate 10999 escreva ("Dez mil e ") numero:= numero - 10000 caso 9000 ate 9999 escreva ("nove mil e ") numero:= numero - 9000 caso 8000 ate 8999 escreva ("Oito mil e ") numero:= numero - 8000 caso 7000 ate 7999 escreva ("Sete mil e ") numero:= numero - 7000 caso 6000 ate 6999 escreva ("Seis mil e ") numero:= numero - 6000 caso 5000 ate 5999 escreva ("Cinco mil e ") numero:= numero - 5000 caso 4000 ate 4999 escreva ("Quatro mil e ") numero:= numero - 4000 caso 3000 ate 3999 escreva ("Três mil e ") numero:= numero - 3000 caso 2000 ate 2999 escreva ("Dois mil e ") numero:= numero - 2000 caso 1001 ate 1999 escreva ("Mil e ") numero:= numero - 1000 caso 901 ate 999 escreva ("Novecentos e ") numero:= numero - 900 caso 900 escreva ("Novecentos ") numero:= numero - 900 caso 801 ate 899 escreva ("Oitocentos e ") numero:= numero - 800 caso 800 escreva ("Oitocentos ") numero:= numero - 800 caso 701 ate 799 escreva ("Setecentos e ") numero:= numero - 700 caso 700 escreva ("Setecentos ") numero:= numero - 700 caso 601 ate 699 escreva ("Seiscentos e ") numero:= numero - 600 caso 600 escreva ("Seiscentos ") numero:= numero - 600 caso 501 ate 999 escreva ("Quinhentos e ") numero:= numero - 500 caso 500 escreva ("Quinhentos ") numero:= numero - 500 caso 401 ate 999 escreva ("Quatrocentos e ") numero:= numero - 400 caso 400 escreva ("Quatrocentos ") numero:= numero - 400 caso 301 ate 999 escreva ("Trezentos e ") numero:= numero - 300 caso 300 escreva ("Trezentos ") numero:= numero - 300 caso 201 ate 999 escreva ("Duzentos e") numero:= numero - 200 caso 200 escreva ("Duzentos") numero:= numero - 200 caso 101 ate 999 escreva ("Cento e") numero:= numero - 100 caso 100 escreva ("Cem ") numero:= numero - 100 caso 91 ate 99 escreva ("Noventa e ") numero:= numero - 90 caso 90 escreva ("Noventa ") numero:= numero - 90 caso 81 ate 89 escreva ("Oitenta e ") numero:= numero - 80 caso 80 escreva ("Oitenta ") numero:= numero - 80 caso 71 ate 79 escreva ("Setenta e ") numero:= numero - 70 caso 70 escreva ("Setenta ") numero:= numero - 70 caso 61 ate 69 escreva ("Sesseenta e ") numero:= numero - 60 caso 60 escreva ("Sessenta ") numero:= numero - 60 caso 51 ate 59 escreva ("Cinquenta e ") numero:= numero - 50 caso 50 escreva ("Cinquenta ") numero:= numero - 50 caso 41 ate 49 escreva ("Quarenta e ") numero:= numero - 40 caso 40 escreva ("Quarenta ") numero:= numero - 40 caso 31 ate 39 escreva ("Trinta e ") numero:= numero - 30 caso 30 escreva ("Trinta ") numero:= numero - 30 caso 21 ate 29 escreva ("Vinte e ") numero:= numero - 20 caso 20 escreva ("Vinte") numero:= numero - 20 caso 19 escreva ("Dezenove") numero:= numero - 19 caso 18 escreva ("Dezoito") numero:= numero - 18 caso 17 escreva ("Dezessete") numero:= numero - 17 caso 16 escreva ("Dezesseis") numero:= numero - 16 caso 15 escreva ("Quinze") numero:= numero - 15 caso 14 escreva ("Quatorze") numero:= numero - 14 caso 13 escreva ("Treze") numero:= numero - 13 caso 12 escreva ("Doze") numero:= numero - 12 caso 11 escreva ("Onze") numero:= numero - 11 caso 10 escreva ("Dez") numero:= numero - 10 caso 9 escreva ("Nove") numero:= numero - 9 caso 8 escreva ("Oito") numero:= numero - 8 caso 7 escreva ("Sete") numero:= numero - 7 caso 6 escreva ("Seis") numero:= numero - 6 caso 5 escreva ("Cinco") numero:= numero - 5 caso 4 escreva ("Quatro") numero:= numero - 4 caso 3 escreva ("Três") numero:= numero - 3 caso 2 escreva ("Dois") numero:= numero - 2 caso 1 escreva ("Um") numero:= numero - 1 fimescolha ate numero <= 1 fimrepita fimalgoritmo by: ORION Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Maio 13, 2013 Olá amigo. Acredito que você poderia trabalhar com vetores para simplificar esse processo. Poderia ter um vetor para: - Unidades; - Dezenas; - Centenas; - Milhares; De acordo com o número digitado você verifica a qual desses vetores ele pertence, e vai montando sua expressão. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
Cristianoferr 32 Denunciar post Postado Maio 13, 2013 1. Crie uma função que retorna um valor em extenso um valor de 0 a 999. 2. Jogue o número em uma string e faça um loop pegando as últimas 3 casas e escrevendo por extenso de acordo com o passo 1 mais um sufixo. 3. Sufixo vai depender da iteração, na 1a é vazio, na segunda é mil, na 3a é milhão e assim por diante. 4. Ao final do loop, tire essas 3 casas, e mude o o sufixo de acordo com a iteração. 5. Some todas as saídas em uma string única separando cada iteração com uma vírgula. Logo, uma entrada tipo: 2.593.120 (note que o "." demarca cada iteração, eu sugiro remover o ponto no algoritmo final para normalizar o input) ficaria: iteração 1: "cento e vinte" + "" iteração 2: "quinhentos e noventa e três" + "mil" iteração 3: "2" + "milhões" resultado final: 2 milhões, quinhentos e noventa e três mil, cento e vinte. Simples. Sem falar que como o Eisenheim falou, colocar os valores em vetores facilita muito. Compartilhar este post Link para o post Compartilhar em outros sites
@ORION@ 0 Denunciar post Postado Maio 14, 2013 okay, gente muito obrigado, eu ainda nao aprendi a usar vetores, mas eu vo fazer uma pesquisa agora mesmo pra aprender e eu posto o resultado aki :) Compartilhar este post Link para o post Compartilhar em outros sites
@ORION@ 0 Denunciar post Postado Maio 16, 2013 Nossa, nao consigui aprende vetor ja mais de 2 dias tentando aprender e nada, nao consigo entender como que se atribiu numero a uma soh variavel... eu tentei refazer o algoritmo e deu nisso: algoritmo "semnome"varnumero,a,cont:inteiroinicioescreval ("Diga um numero: ")leia( numero)para cont de 1 ate 2 faca a:= numero se ( numero > 999) entao se ( numero >= 100000 ) entao numero := numero % 100000 fimse se ( numero >= 10000) e ( numero < 100000) entao se ( cont < 2 ) entao numero := numero \ 10000 senao numero := numero % 1000000 fimse fimse se (numero >= 1000) e (numero < 10000) entao se ( cont < 2 ) entao numero := numero \ 1000 senao numero := numero % 100000 fimse fimse fimse se (( numero >= 100 ) e ( numero < 1000)) ou ( cont >= 2 ) entao escolha numero caso 900 ate 999 escreva ("Novecentos ") caso 800 ate 899 escreva ("Oitocentos ") caso 700 ate 799 escreva ("Setecentos ") caso 600 ate 699 escreva ("Seiscentos ") caso 500 ate 599 escreva ("Quinhentos ") caso 400 ate 499 escreva ("Quatrocentos ") caso 300 ate 399 escreva ("Trezentos ") caso 200 ate 299 escreva ("Duzentos ") caso 101 ate 199 escreva ("Cento ") fimescolha se ( numero % 100 <> 0 ) entao escreva ("e ") numero := numero % 100 fimse fimse se ( numero < 100 ) entao escolha numero caso 90 ate 99 escreva ("Noventa ") caso 80 ate 89 escreva ("Oitenta ") caso 70 ate 79 escreva ("Setenta ") caso 60 ate 69 escreval ("Sessenta ") caso 50 ate 59 escreva ("Cinquenta ") caso 40 ate 49 escreva ("quarenta ") caso 30 ate 39 escreva ("trinta ") caso 20 ate 29 escreva ("Vinte ") fimescolha se ( numero % 10 <> 0 ) e ( numero > 19 ) entao escreva ("e ") numero := numero % 10 fimse escolha numero caso 19 escreva ("Dezenove") caso 18 escreva ("Dezoito") caso 17 escreva ("Dezessete") caso 16 escreva ("Dezesseis") caso 15 escreva ("Quinze") caso 14 escreva ("Quatorze") caso 13 escreva ("Treze") caso 12 escreva ("Doze") caso 11 escreva ("Onze") caso 10 escreva ("Dez") caso 9 escreva ("Nove") caso 8 escreva ("Oito") caso 7 escreva ("Sete") caso 6 escreva ("Seis") caso 5 escreva ("Cinco") caso 4 escreva ("Quatro") caso 3 escreva ("Três") caso 2 escreva ("Dois") caso 1 escreva ("Um") fimescolha fimse se ( a >999 ) e ( cont < 2 ) entao escreva (" Mil ") fimsefimparafimalgoritmo so q ele nao está funcionando corretamente Compartilhar este post Link para o post Compartilhar em outros sites
Eisenheim 67 Denunciar post Postado Maio 17, 2013 Olá amigos. Vetores - Pense neles como variáveis especiais. A diferença entre essa variável especial de uma variável comum, cuja mesma você está acostumado a utilizar, é que enquanto essa variável comum pode guardar apenas uma informação, a variável especial pode guardar várias informações. Exemplo - Uma variável especial chamada Agenda que é do tipo vetor com tamanho de 3 posições do tipo caractere. var Agenda: vetor[1..3] de caractere inicio Agenda[1] <- "001" Agenda[2] <- "Eisenheim" Agenda[3] <- (XX)9999-9999 fimalgoritmo De forma bem resumida, essa é a minha definição pessoal de um vetor. Até a próxima. :thumbsup: Compartilhar este post Link para o post Compartilhar em outros sites
@ORION@ 0 Denunciar post Postado Junho 18, 2013 uhn, gostei bastante da sua explicação, consigui entender na teoria... muito obrigado vcs ja estao ajudando bastante nessa minha luta rsrs gente muito obrigado, pra quem achou q desisti de fazer esse algoritmo e abandonei o site, estava enganado ( nao so do tipo de criar conta e pegar oq quero e nunca mais voltar no site ) entao voltei pra dizer, eu CONSIGUI fazer esse algoritmo agradeço mtuh a voces vo postar ele aki // Autor: ORION algoritmo "extenso" var numero, p, m: inteiro a: caracter mil: logico inicio repita escreva("Digite um número entre 1 e 1000000 ( um milhão ): ") leia(numero) se ((numero <= 0) ou (numero >= 1000000)) entao escreval("escreva um numero entre Um e Um Milhão! ") fimse ate ((numero > 0) e (numero < 1000000)) enquanto (numero > 0) faca se (numero >= 1000) entao m := numero % 1000 numero := numero \ 1000 mil := verdadeiro fimse se (numero > 20) entao se (numero > 99) entao p := (numero \ 100) * 100 senao p := (numero \ 10) * 10 fimse senao p := numero fimse escolha p caso 1 a := "um" caso 2 a := "dois" caso 3 a := "tres" caso 4 a := "quatro" caso 5 a := "cinco" caso 6 a := "seis" caso 7 a := "sete" caso 8 a := "oito" caso 9 a := "nove" caso 10 a := "dez" caso 11 a := "onze" caso 12 a := "doze" caso 13 a := "treze" caso 14 a := "quatorze" caso 15 a := "quinze" caso 16 a := "dezesseis" caso 17 a := "dezessete" caso 18 a := "dezoito" caso 19 a := "dezenove" caso 20 a := "vinte" caso 30 a := "trinta" caso 40 a := "quarenta" caso 50 a := "cinquneta" caso 60 a := "sessenta" caso 70 a := "setenta" caso 80 a := "oitenta" caso 90 a := "noventa" caso 100 se (numero = 100) entao a := "cem" senao a := "cento" fimse caso 200 a := "duzentos" caso 300 a := "trezentos" caso 400 a := "quatrocentos" caso 500 a := "quinhentos" caso 600 a := "seiscentos" caso 700 a := "setecentos" caso 800 a := "oitocentos" caso 900 a := "novecentos" fimescolha escreva(a, " ") se ((numero > 20) e (numero <> p)) entao escreva("e ") fimse numero := numero - p se ((numero = 0) e (mil = verdadeiro)) entao escreva("mil ") se ((m > 0) e ((m <= 100) ou ((m0) = 0))) entao escreva("e ") fimse mil := falso numero := m fimse fimenquanto fimalgoritmo ~ORION Obrigado !! 1. Crie uma função que retorna um valor em extenso um valor de 0 a 999. 2. Jogue o número em uma string e faça um loop pegando as últimas 3 casas e escrevendo por extenso de acordo com o passo 1 mais um sufixo. 3. Sufixo vai depender da iteração, na 1a é vazio, na segunda é mil, na 3a é milhão e assim por diante. 4. Ao final do loop, tire essas 3 casas, e mude o o sufixo de acordo com a iteração. 5. Some todas as saídas em uma string única separando cada iteração com uma vírgula. Logo, uma entrada tipo: 2.593.120 (note que o "." demarca cada iteração, eu sugiro remover o ponto no algoritmo final para normalizar o input) ficaria: iteração 1: "cento e vinte" + "" iteração 2: "quinhentos e noventa e três" + "mil" iteração 3: "2" + "milhões" resultado final: 2 milhões, quinhentos e noventa e três mil, cento e vinte. Simples. Sem falar que como o Eisenheim falou, colocar os valores em vetores facilita muito. vc me aajudo MTTUH , obg Compartilhar este post Link para o post Compartilhar em outros sites