Ir ao conteúdo

Posts recomendados

Postado

Estou com um quebra cabeça não consigo achar uma solução, para imprimir em ordem crescente, alguém experiente no assunto poderia ajudar.

quero deixar o modo aleatório e o modo ordem crescente impresso.

algoritmo "Algoritmo exercicio"
var
   vetor_30   :vetor [1..30] de inteiro //vetor armazena 30 posiçoes
   vetor_20 :vetor [1..20] de inteiro //vetor armazena 20 posições


   p       :inteiro  //auxiliar para posicionar o vetor
   i,j     :inteiro  //auxiliar para percorrer o vetor
   OK      :logico   //flag para verificar se a etapa foi realizada com sucesso
   aguardar:caracter //variável criada apenas para aguardar um ENTER na interação com o usuário
Inicio
//gera os 30 números do vetor inicial
escreval("OS 30 NÚMEROS INICIAIS...")
para p de 1 ate 30 faca
   vetor_30[p]:=p
fimpara
escreval("Tecle Enter")
leia(aguardar)
escreval("NÚMEROS COM SUCESSO!")

//exibe os 30 números gerados
escreval()
escreval("Aqui estão os 30 números iniciais")
p:=1
para i de 1 ate 10 faca //cada linha
   para j de 1 ate 3 faca //cada coluna
      escreva(vetor_30[p]:2," - ")
      p:=p+1
   fimpara
   escreval//para pular para a linha de baixo
fimpara


//os primeiro 20 números do vetor de 30 posições
escreval("Vamos Escolher Os Primeiros 20 Números")
para i de 1 ate 20 faca  // serão 20 números
  repita  // repite se precisar
    ok := verdadeiro
    p:=randi(30)+1  // gera um número aleatorio
    se vetor_30 [p]=0 ENTÃO//numero foi deletado
      ok := falso
    fimse
    para j de 1 ate 10 faca//verifica os trinta numeros no vetor_30
      se ok = verdadeiro ENTÃO //se o número não houver sido deletado
        se vetor_20[j] = vetor_30 [p] ENTÃO//se no vetor já haver o numero gerado
          ok := falso// b recebe o valor 2 para repetir e escolher outro numero
          interrompa
        fimse
      fimse
    fimpara
    se ok = verdadeiro ENTÃO
      vetor_20[i] := vetor_30 [p]
    fimse
  ate ok
fimpara
escreval("Os Primeiros 10 Números Foram Gerados Com Sucesso")
//escrevando os primeiros números gerados
escreval("Aqui Estão Os primeiros 20 Números Gerados Aleatórios")
p:=1
para i de 1 ate 5 faca
para j de 1 ate 4 faca
    escreva(vetor_20[p]," - ")
    p := p+1
  fimpara
  escreval//para pular para a linha de baixo
  fimpara
escreval("Tecle Enter")
leia(aguardar)
fimalgoritmo

 

  • Curtir 1
  • Membro VIP
Postado

Olá.

 

Dê uma pesquisada sobre o Bubble Sort. É o mais famoso... Entenda seu funcionamento... assista vídeos... leia artigos... aprenda a aprender coisas novas!!!

 

Depois tente implementar um algoritmo em Visualg.. Faça algo simples... Para facilitar, poderia utilizar o código abaixo:

Algoritmo "semnome"
var
   vet :vetor [1..10] de inteiro
   i   :inteiro
Inicio
//PREENCHE O VETOR QUE SERÁ ORDENADO
escreval("Digite os 10 números do vetor")
aleatorio 0,100 //para gerar os números automaticamenteo (entre 0 e 100)
para i de 1 ate 10 faca
   leia(vet[i])
fimPara
aleatorio OFF
//FIM PREENCHE O VETOR QUE SERÁ ORDENADO



//EXIBE OS DADOS DO VERTOR ORIGINAL
escreval()
escreva ("Vetor original: ")
para i de 1 ate 10 faca
   escreva (vet[i]," ")
fimPara
//FIM EXIBE OS DADOS DO VERTOR ORIGINAL



//ORDENDA O VETOR UTILIZANDO O MÉTODO BUBBLE SORT
//aqui você implementa o Bubble Sort
//FIM ORDENDA O VETOR UTILIZANDO O MÉTODO BUBBLE SORT



//EXIBE OS DADOS DO VERTOR APÓS ORDENAR
escreval()
escreva ("Vetor ordenado: ")
para i de 1 ate 10 faca
   escreva (vet[i]," ")
fimPara
//FIM EXIBE OS DADOS DO VERTOR APÓS ORDENAR

Fimalgoritmo

 

Qual dúvida é só postar.

 

No aguardo.

  • Curtir 2
Postado

@Vengefull    seu código está funcionando bem ,  mas  precisa de uma melhor identação e organização,  então apenas reorganizei algumas linhas e seu código ficou assim :

algoritmo "numeros aleatorio e ordenação sound of sorting"
var
   vetor_30 : vetor [1..30] de inteiro  //vetor armazena 30 posiçoes
   vetor_20 : vetor [1..20] de inteiro  //vetor armazena 20 posições
   p,ascii  : inteiro                   //auxiliar para posicionar o vetor
   i,j,aux  : inteiro                   //auxiliar para percorrer o vetor
   OK       : logico                    //flag para verificar se a etapa foi realizada com sucesso
   aguardar,numeros : caracter          //variável criada apenas para aguardar um ENTER na interação com o usuário
Inicio
  //gera os 30 números do vetor inicial
  para p de 1 ate 30 faca
    vetor_30[p] := p
  fimpara
  //exibe os 30 números gerados
  escreval()
  escreval("----  Aqui Estão Os 30 Números Iniciais    -------")
  escreval
  para p de 1 ate 30 faca
    escreva(vetor_30[p]:2)
    se p < 30 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval//para pular para a linha de baixo
  escreval
  escreval("-------    Tecle Enter     --------")
  leia(aguardar)
  //os 20 números escolhido do vetor_30
  escreval
  para i de 1 ate 20 faca    // serão 20 números
    repita                   // repite se precisar
      ok := verdadeiro
      p:=randi(30)+1         // gera um número aleatorio
      se vetor_30[p]=0 ENTÃO//numero foi deletado
        ok := falso
      fimse
      para j de 1 ate 20 faca//verifica os trinta numeros no vetor_30
        se vetor_20[j] = vetor_30[p] ENTÃO//se no vetor já haver esse  numero escolhido
          ok := falso        // ok recebe o valor falso para repetir e escolher outro numero
          interrompa         //interrompe a execução e sai desse loop
        fimse
      fimpara
      se ok = verdadeiro ENTÃO
        vetor_20[i] := vetor_30[p]
      fimse
    ate ok
  fimpara
  escreval("----   Os Primeiros 20 Números Foram Escolhidos Com Sucesso    ----")
  escreval
  //escrevando os primeiros números gerados
  escreval("-----------   Modo Aleatório   -----------------")
  escreval("Aqui Estão Os primeiros 20 Números Escolhidos Aleatoriamente")
  escreval
  para i de 1 ate 20 faca
    escreva(vetor_20[i])
    se i < 20 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval
  escreval
  escreval("--------  Tecle Enter  --------")
  leia(aguardar)
  escreval("-----------   Modo Ordem Crescente   ------------")
  escreval
  escreval("Aqui Estão Os primeiros 20 Números Escolhidos Aleatoriamente")
  escreval("e Colocados Em Ordem Crescente")
  escreval
         .
         .
     aqui faça a ordenação do vetor usando dois loop 
     um dentro do outro, como mostra esse vídeo abaixo
         .
         .   
  para i de 1 ate 20 faca
    escreva(vetor_20[i])
    se i < 20 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval//para pular para a linha de baixo
  escreval
  escreval("--------  Tecle Enter  ---------")
  leia(aguardar)
fimalgoritmo

para fazer a ordenação você  pode aprender vendo essa aula no youtube que explica muito bem  :

 

  • Curtir 2
  • 3 semanas depois...
Postado

Boa noite voltando aos estudos tentei fazer me perdi na logica e da erro 

algoritmo "numeros aleatorio e ordenação sound of sorting"
var
   vetor_30 : vetor [1..30] de inteiro  //vetor armazena 30 posiçoes
   vetor_20 : vetor [1..20] de inteiro  //vetor armazena 20 posições
   p,ascii  : inteiro                   //auxiliar para posicionar o vetor
   i,j,aux,x  : inteiro                   //auxiliar para percorrer o vetor
   OK       : logico                    //flag para verificar se a etapa foi realizada com sucesso
   aguardar,numeros : caracter          //variável criada apenas para aguardar um ENTER na interação com o usuário
Inicio
  //gera os 30 números do vetor inicial
  para p de 1 ate 30 faca
    vetor_30[p] := p
  fimpara
  //exibe os 30 números gerados
  escreval()
  escreval("----  Aqui Estão Os 30 Números Iniciais    -------")
  escreval
  para p de 1 ate 30 faca
    escreva(vetor_30[p]:2)
    se p < 30 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval//para pular para a linha de baixo
  escreval
  escreval("-------    Tecle Enter     --------")
  leia(aguardar)
  //os 20 números escolhido do vetor_30
  escreval
  para i de 1 ate 20 faca    // serão 20 números
    repita                   // repite se precisar
      ok := verdadeiro
      p:=randi(30)+1         // gera um número aleatorio
      se vetor_30[p]=0 ENTÃO//numero foi deletado
        ok := falso
      fimse
      para j de 1 ate 20 faca//verifica os trinta numeros no vetor_30
        se vetor_20[j] = vetor_30[p] ENTÃO//se no vetor já haver esse  numero escolhido
          ok := falso        // ok recebe o valor falso para repetir e escolher outro numero
          interrompa         //interrompe a execução e sai desse loop
        fimse
      fimpara
      se ok = verdadeiro ENTÃO
        vetor_20[i] := vetor_30[p]
      fimse
    ate ok
  fimpara
  escreval("----   Os Primeiros 20 Números Foram Escolhidos Com Sucesso    ----")
  escreval
  //escrevando os primeiros números gerados
  escreval("-----------   Modo Aleatório   -----------------")
  escreval("Aqui Estão Os primeiros 20 Números Escolhidos Aleatoriamente")
  escreval
  para i de 1 ate 20 faca
    escreva(vetor_20[i])
    se i < 20 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval
  escreval
  escreval("--------  Tecle Enter  --------")
  leia(aguardar)
  escreval("-----------   Modo Ordem Crescente   ------------")
  escreval
  escreval("Aqui Estão Os primeiros 20 Números Escolhidos Aleatoriamente")
  escreval("e Colocados Em Ordem Crescente")
  escreval
  // ordenando os numeros 
         para i de 1 ate 19 faca
        para x de i ate 20 faca
        se vet[x] < vetor_20[i] então
    	 aux    <= vet[x]
   	 vet[x] <= vetor_20[i]
   	 vetor_20[i] <= aux 
   fimse
fimpara
fimpara  
  para i de 1 ate 20 faca
    escreva(vetor_20[i])
    se i < 20 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval//para pular para a linha de baixo
  escreval
  escreval("--------  Tecle Enter  ---------")
  leia(aguardar)
fimalgoritmo

a parta do codigo implementado

 

 // ordenando os numeros 
         para i de 1 ate 19 faca
        para x de i ate 20 faca
        se vet[x] < vetor_20[i] então
    	 aux    <= vet[x]
   	 vet[x] <= vetor_20[i]
   	 vetor_20[i] <= aux 
   fimse
fimpara
fimpara

 

 

  • Curtir 1
Postado

@Vengefull      essa ordenação que você fez está certa , mas você colocou uma variável que não foi declarada que é a vet e  no segundo loop a ele começa da variável do primeiro loop mais 1 e sempre no mesmo vetor, e por isso não está funcionando, e de preferência coloque o comando ENTÃO usando letras maiúsculas, pois na postagem continuará do mesmo jeito que foi escrito e não dará erro   . então é só acertar essa variável e seu código fica assim :

// ordenando os numeros
para i de 1 ate 20 faca
  para x de i+1 ate 20 faca
    se vetor_20[x] <  vetor_20[i] ENTÃO
      aux          := vetor_20[x]
      vetor_20[x]  := vetor_20[i]
      vetor_20[i]  := aux
    fimse
  fimpara
fimpara

 

  • Curtir 2
  • Membro VIP
Postado

Olá.

 

@Vengefull, sobre:

18 horas atrás, Vengefull disse:

Boa noite voltando aos estudos tentei fazer me perdi na logica e da erro 

Se perdeu em qual parte?

Que erro está dando? de sintaxe ou no resultado final ou outra coisa?

 

Então, ao rodar o código, é apresentado alguns erros. Vamos  tentar analisar passo a passo...

 

1#

Ao rodar, dá erro na linha 72.

18 horas atrás, Vengefull disse:

         se vet[x] < vetor_20[i] ENTÃO

Analisando, vemos que o vetor vet[] não existe no seu algoritmo. De qualquer forma, o correto seria o vetor_20[] (mesmo se o vet[] existisse, não seria ele). Ficando algo como:

   // ordenando os numeros
   para i de 1 ate 19 faca
      para x de i ate 20 faca
         se vetor_20[x] <  vetor_20[i] ENTÃO
            aux         <= vetor_20[x]
            vetor_20[x] <= vetor_20[i]
            vetor_20[i] <= aux
         fimse
      fimpara
   fimpara

 

 

 

2#

Ao rodar novamente, dá erro na linha 73.

18 horas atrás, Vengefull disse:

            aux         <= vetor_20[x]

Você utilizou "<=" para comando de atribuição, mas o correto seria "<-" ou ":=".

 

Ficando algo como:

   para i de 1 ate 19 faca
      para x de i ate 20 faca
         se vetor_20[x] <  vetor_20[i] ENTÃO
            aux         <- vetor_20[x]
            vetor_20[x] <- vetor_20[i]
            vetor_20[i] <- aux
         fimse
      fimpara
   fimpara

 

 

***

 

Pronto, corrigindo esses dois itens, resolve o problema de sintaxe.

 

 

BONUS

Sobre o método de ordenação, temos:

 

3#

Seu algoritmo de ordenação estaria assim:

18 horas atrás, Vengefull disse:

   para i de 1 ate 19 faca
      para x de i ate 20 faca
         se vetor_20[x] <  vetor_20[i] ENTÃO
            aux         <- vetor_20[x]
            vetor_20[x] <- vetor_20[i]
            vetor_20[i] <- aux
         fimse
      fimpara
   fimpara

Teoricamente o código está funcional (não tem erro de sintaxe, e faz o que promete, ou seja, ordena o vetor), apenas não está otimizado ou podem-se dizer que está com erro na implementação da lógica. Seria basicamente o quê @devair1010 comentou:

 

15 horas atrás, devair1010 disse:

// ordenando os numeros
para i de 1 ate 20 faca
  para x de i+1 ate 20 faca
    se vetor_20[x] <  vetor_20[i] ENTÃO
      aux          := vetor_20[x]
      vetor_20[x]  := vetor_20[i]
      vetor_20[i]  := aux
    fimse
  fimpara

 

Ou seja, ao não usar o "+1", no primeiro loop do segundo para, estará comparando uma posição com ela mesma, pois x=i. Seria, por exemplo, algo como:

se vetor_20[1] <  vetor_20[1] ENTÃO

Entende? É uma perda de tempo... a "lógica de método de ordenação" diz que deve comparar "um posição com todos os seus SUCESSORES".... logo, devem-se utilizar "i+1".

 

Obs.: apenas retificando o primeiro para, que estava correto no seu código. Ficando algo assim:

   {para i de 1 ate 20 faca} //a posição 20 já estará ordenada (e não existe a posição 21 para o x)
   para i de 1 ate 19 faca
      para x de i+1 ate 20 faca
         se vetor_20[x] <  vetor_20[i] ENTÃO
            aux         := vetor_20[x]
            vetor_20[x] := vetor_20[i]
            vetor_20[i] := aux
         fimse
      fimpara
   fimpara

 

 

***

 

No aguardo.

 

 

  • Curtir 2
Postado

Boa noite,obrigado @devair1010 @Simon Viegas pelos exemplos, e mostrar onde está os erros.

minha duvida e por que não consigo imprimir 5 coluna e 4 linhas, e já contém 

 


 

// ordenando os numeros
para i de 1 ate 20 faca
  para x de i+1 ate 20 faca
    se vetor_20[x] <  vetor_20[i] ENTÃO
      aux          := vetor_20[x]
      vetor_20[x]  := vetor_20[i]
      vetor_20[i]  := aux
    fimse
  fimpara
fimpara

  para i de 1 ate 5 faca // 5 colunas

  para j de 1 ate 4 faca // 4 linhas 
    escreva(vetor_20[i])
    se i < 20 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval//para pular para a linha de baixo
  escreval
  escreval("--------  Tecle Enter  ---------")

//Conversor oct hex dec bin 
  leia(aguardar)

 

a parte modificado e adicionado é 

 

  para i de 1 ate 5 faca // 5 colunas

  para j de 1 ate 4 faca // 4 linhas 
    escreva(vetor_20)
    se i < 20 ENTÃO
      escreva(" - ")
    fimse
  fimpara
  escreval//para pular para a linha de baixo
  escreval

 

 

Obrigado desde já agradeço uma Boa noite.

  • Curtir 1
Postado

@Vengefull    você quer imprimir os números em ordem crescente em colunas ?   então seu código pode ser assim :

  p:=1
  para j de 1 ate 4 faca  //primeiro se refere as linhas
    para i de 1 ate 5 faca//o segundo se refere as colunas
      se vetor_20[p] < 10 ENTÃO
        escreva(" ") //para organizar as colunas na mesma direção
      fimse
      escreva(vetor_20[p])
      se i < 5 ENTÃO   //porque são cinco colunas
        escreva(" - ")
      fimse
      p:=p+1
    fimpara
    escreval
  fimpara

 

  • Curtir 1
  • 4 semanas depois...
Postado

Obrigado pelo exemplo @devair1010 voltei aos estudos  e vou pegar um bom tempo firme testei seu exemplo e funcionou,

só que ao repetir por exemplo o processo de imprimir 5 vezes em vez de ele imprimir um embaixo do outro imprimir um do lado do outro 5 para não perder digamos a massa ta tela.

 

uma outra duvida é possível aumentar os números ou letras controlar os tamanhos ?

 

Obrigado desde de já pela sua ajuda um grande abraço.

  • Curtir 1
Postado

@Vengefull      para imprimir em apenas uma coluna  modifique o valor dois dois loop  assim :

  p:=1
  para j de 1 ate 20 faca  //primeiro se refere as linhas
    para i de 1 ate 1 faca//o segundo se refere as colunas
      se vetor_20[p] < 10 ENTÃO
        escreva(" ") //para organizar as colunas na mesma direção
      fimse
      escreva(vetor_20[p])
      se i < 5 ENTÃO
        escreva(" - ")
      fimse
      p:=p+1
    fimpara
    escreval
  fimpara
  escreval//para pular para a linha de baixo
  escreval

as letras são fixas no visualg  e não podem ser alteradas nem a cor e nem o tamanho ,   em alguns compiladores, ou IDE, mais avançados como o delphi 7 em pascal  ou  net beans  em java  você conseguiria  alterar a cor e o tamanho das letras   .

  • Curtir 1
Postado

Boa noite, obrigado pela resposta Sr @devair1010, mais não é desta forma, eu tentei imaginar, arrumar uma maneira 

não conseguir pensar mais eu acho que eu errei na explicação ao tentar expressar a maneira que eu queria então ,

fiz uma representação simples com imagem 

 

observe que aqui foi adicionado mais 2 vetores de 20 posições 

resumindo repetiu 2 vez ao invés dele imprimir um embaixo do outro, imprimir  um do lado do outro 

Imagem original

imagem1.png

 

Imagem modificada de como eu queria não consegui pensar uma maneira sei que é possível 

imagem2.png

 

 

Duvida: Visualg da para salvar arquivos em texto e abrir arquivos texto ? 

Obrigado desde já pela ajuda um grande abraço.

 

  • Curtir 1
Postado

@Vengefull sim, tem como salvar um arquivo txt no visualg, porém é bem limitado pois só pode ter um arquivo, você pode ter mais informações aqui nesse link : https://pt.stackoverflow.com/questions/248299/como-salvar-dados-em-arquivo-txt-no-visualg/248324#248324

  para imprimir um do lado do outro você precisa observar que o comando escreva vai escrever as letras da esquerda para a direita e de cima para baixo, então você precisa fazer o código prevendo o que você irá imprimir em cada linha, e assim imprimir tudo que quiser na linha até o limite que é de 160 caracteres, pois depois que passar para linha de baixo não tem como voltar lá em cima para imprimir outra coisa .

  • Curtir 1
  • Membro VIP
Postado

Olá.

 

1#

@Vengefull, sobre:

Em 02/05/2018 às 21:01, Vengefull disse:

Duvida: Visualg da para salvar arquivos em texto e abrir arquivos texto ?

 

Complementando o que @devair1010 apresentou... o uso de arquivo no Visualg se resumiria assim:

Numa execução do programa temos, em relação ao comando leia().
- OU você somente escreve os dados no arquivo, ou seja, o que é lido do teclado no leia(), é escrito no arquivo;

- OU você somente ler os dados do arquivo, ou seja, o comando leia() vai lendo os dados do arquivo até acabar, após volta a ler do teclado.

 

Não dá para fazer as duas coisas numa mesma execução de programa. OU escreve, OU ler.
 

 

RESUMINDO:

O uso de arquivo é bem limitado e sua funcionalidade é pouco estranha... Nesse sentido, sugiro que não tente mexer com arquivos por enquanto... Será pouco viável para seu contexto. Mais pra frente, quando todo o programa tiver concluído, ou num estágio bem evoluído, ai poderia voltar a esse tema.

 

 

 

 

 

 

 

 

  • Curtir 2
  • Membro VIP
Postado

2#
Sobre:

15 horas atrás, Vengefull disse:

Boa noite, obrigado pela resposta e ajuda mais ainda não entendi e nem sai do lugar vou parar por aqui mesmo.


Não entendeu qual parte? Se for em relação ao arquivo, sugiro por enquanto não mexer com isso... mas pra frente, caso necessite ou queira tentar implementar, nós ajudamos.

 

Então, por favor, poste o seu código atual e onde está com dúvidas ou em qual parte quer fazer as alterações... que ai analisamos e tentamos ajudar.

 

No aguardo.

  • Curtir 2

Crie uma conta ou entre para comentar

Você precisa ser um usuário para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar agora

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: Aprenda a Ler Resistores e Capacitores

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!