Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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
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.
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 :)
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"
var
numero,a,cont:inteiro
inicio
escreval ("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 ")
fimse
fimpara
fimalgoritmo
so q ele nao está funcionando corretamente
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:
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
Olá amigo.
Acredito que você poderia trabalhar com vetores para simplificar esse processo.
Poderia ter um vetor para:
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: