Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

@ORION@

VisuAlg... problema!

Recommended Posts

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

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

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

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

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

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

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.