Ir ao conteúdo
  • Comunicados

    • Gabriel Torres

      Seja um moderador do Clube do Hardware!   12-02-2016

      Prezados membros do Clube do Hardware, Está aberto o processo de seleção de novos moderadores para diversos setores ou áreas do Clube do Hardware. Os requisitos são:   Pelo menos 500 posts e um ano de cadastro; Boa frequência de participação; Ser respeitoso, cordial e educado com os demais membros; Ter bom nível de português; Ter razoável conhecimento da área em que pretende atuar; Saber trabalhar em equipe (com os moderadores, coordenadores e administradores).   Os interessados deverão enviar uma mensagem privada para o usuário @Equipe Clube do Hardware com o título "Candidato a moderador". A mensagem deverá conter respostas às perguntas abaixo:   Qual o seu nome completo? Qual sua data de nascimento? Qual sua formação/profissão? Já atuou como moderador em algo outro fórum, se sim, qual? De forma sucinta, explique o porquê de querer ser moderador do fórum e conte-nos um pouco sobre você.   OBS: Não se trata de função remunerada. Todos que fazem parte do staff são voluntários.
    • DiF

      Poste seus códigos corretamente!   21-05-2016

      Prezados membros do Fórum do Clube do Hardware, O Fórum oferece um recurso chamado CODE, onde o ícone no painel do editor é  <>     O uso deste recurso é  imprescindível para uma melhor leitura, manter a organização, diferenciar de texto comum e principalmente evitar que os compiladores e IDEs acusem erro ao colar um código copiado daqui. Portanto convido-lhes para ler as instruções de como usar este recurso CODE neste tópico:  
viniciusv21

VisualG Dizer qual é o maior número

Recommended Posts

viniciusv21    3

Olá pessoal, poderiam dar uma olhada no meu código para avaliar como está? Segue:

É no VisualG:

 

Algoritmo "Dizer o maior número"

//-----------------------------------
funcao dizer_maior_numero (x,y: inteiro): inteiro

var
vetorA: vetor[1..5] de inteiro
j : inteiro
inicio

para j de 1 ate 5 faca
leia(vetorA[j])
fimpara

repita
  y := y + 1
se vetorA[x] > vetorA[y] então
  y := y
  x := x
senao
  x := y
fimse
ate y = 5

retorne vetorA[x]
fimfuncao
//-----------------------------------

var
a, n : inteiro
inicio

a := 1
n := 1

escreva(dizer_maior_numero(a,n))

Fimalgoritmo

Agradeço desde ja.

Editado por DiF
  • Curtir 1

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá.

 

Tem vários pontos que precisam ser revistos... vamos lá:

 

1) Utilização de parâmetros sem necessidade ou justificativa.

4 horas atrás, viniciusv21 disse:

a:=1
n:=1
escreva(dizer_maior_numero(a,n))

 

Você está passando os valores 1 e 1... logo, não faz sentido usar parâmetros... simplesmente use esses valores lá dentro da função.

 

 


2) "Cada um no seu quadrado"
Você está lendo os dados do vetor dentro da função que verificará qual o maior... deveria separar uma coisa dá outra...ou seja, a função deveria servi apenas para "retornar o maior". Ou fazia um outro procedimento para ler os dados, ou leria na parte principal do programa...

 

 

 

3) Leitura dos dados

4 horas atrás, viniciusv21 disse:

   para j de 1 ate 5 faca
      leia(vetorA[j])

 

Ao executar o programa, apenas fica uma tela piscando.. não tem iteração com o usuário... seria necessário escrever algo na tela solicitado os dados necessários.

 

 

 

4) Instrução desnecessária

 

4 horas atrás, viniciusv21 disse:

      se vetorA[x]>vetorA[y] ENTÃO
         y:=y
         x:=x

 

Dizer que algo é igual a si mesmo não tem alguma função... ou seja, esse se não está servindo para nada.

 

...

 

Por enquanto é isso..  qualquer coisa tenta corrigir e posta o novo código aqui.

 

No aguardo.

  • Curtir 2

Compartilhar este post


Link para o post
Compartilhar em outros sites
viniciusv21    3
  • Autor do tópico
  • achei um pouco rude a resposta, mas obrigado ...

    adicionado 1 minuto depois
    16 minutos atrás, Simon Viegas disse:

    Olá.

     

    Tem vários pontos que precisam ser revistos... vamos lá:

     

    1) Utilização de parâmetros sem necessidade ou justificativa.

     

    Você está passando os valores 1 e 1... logo, não faz sentido usar parâmetros... simplesmente use esses valores lá dentro da função.

     

     


    2) "Cada um no seu quadrado"
    Você está lendo os dados do vetor dentro da função que verificará qual o maior... deveria separar uma coisa dá outra...ou seja, a função deveria servi apenas para "retornar o maior". Ou fazia um outro procedimento para ler os dados, ou leria na parte principal do programa...

     

     

     

    3) Leitura dos dados

     

    Ao executar o programa, apenas fica uma tela piscando.. não tem iteração com o usuário... seria necessário escrever algo na tela solicitado os dados necessários.

     

     

     

    4) Instrução desnecessária

     

     

    Dizer que algo é igual a si mesmo não tem alguma função... ou seja, esse se não está servindo para nada.

     

    ...

     

    Por enquanto é isso..  qualquer coisa tenta corrigir e posta o novo código aqui.

     

    No aguardo.

    .

    Editado por viniciusv21
    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    3 horas atrás, viniciusv21 disse:

    achei um pouco rude a resposta, mas obrigado ...

    adicionado 1 minuto depois

     

    Desculpe... não foi a intenção...

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    devair1010    441

    @viniciusv21    você colocou alguns comandos que não precisa e outros no lugar errado, então apenas coloquei comentário no lugar desses comandos, veja como ficaria seu código :

    Algoritmo "Dizer o maior número"
    var
     a,n : inteiro
    //-----------------------------------
    funcao dizer_maior_numero (x,y: inteiro): inteiro
    var
      vetorA : vetor[1..5] de inteiro
      j      : inteiro
    inicio
      para j de 1 ate 5 faca
        escreva("Digite O",j,"º Número ")
        leia(vetorA[j])
      fimpara
      repita
        //y := y + 1
        //x := vetorA[y]
        se y = 1 ENTÃO
          x := vetorA[y]
        fimse
        se vetorA[y] > x ENTÃO//vetorA[y] ENTÃO
          x := vetorA[y]
          //y := y
          //x := x
        //senao
          //x := y
        fimse
        y := y+1
      ate y > 5
      retorne x
    fimfuncao
    //-----------------------------------
    inicio
    //var
      //a, n : inteiro
    //inicio
      a := 1
      n := 1
      escreva("O Maior Número é --> ",dizer_maior_numero(a,n))
    Fimalgoritmo

     

    • Curtir 1

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá todos.

     

    15 horas atrás, devair1010 disse:

    @viniciusv21    você colocou alguns comandos que não precisa e outros no lugar errado, então apenas coloquei comentário no lugar desses comandos, veja como ficaria seu código :

    
    Algoritmo "Dizer o maior número"
    var
     a,n : inteiro
    //-----------------------------------
    funcao dizer_maior_numero (x,y: inteiro): inteiro
    var
      vetorA : vetor[1..5] de inteiro
      j      : inteiro
    inicio
      para j de 1 ate 5 faca
        escreva("Digite O",j,"º Número ")
        leia(vetorA[j])
      fimpara
      repita
        //y := y + 1
        //x := vetorA[y]
        se y = 1 ENTÃO
          x := vetorA[y]
        fimse
        se vetorA[y] > x ENTÃO//vetorA[y] ENTÃO
          x := vetorA[y]
          //y := y
          //x := x
        //senao
          //x := y
        fimse
        y := y+1
      ate y > 5
      retorne x
    fimfuncao
    //-----------------------------------
    inicio
    //var
      //a, n : inteiro
    //inicio
      a := 1
      n := 1
      escreva("O Maior Número é --> ",dizer_maior_numero(a,n))
    Fimalgoritmo

     

     

    Pelo que citei no comentário anterior, alguns pontos estão com os mesmo critérios...

     

     

    Baseado nesse código, sugeriria algo assim:

    Algoritmo "Dizer o maior número"
    
    //Função que retorna o maior número dentre os números do vetor
    funcao maiorNumero(): inteiro
      var
         vetorA :vetor[1..5] de inteiro
         i      :inteiro
         maior  :inteiro
    inicio
       para i de 1 ate 5 faca
          escreva("Digite o",i,"º número ")
          leia(vetorA[i])
       fimpara
    
       repita
          se i = 1 ENTÃO //se primeira posição
             maior:=vetorA[i] //atualiza o maior (será o primeiro)
          senao
             se vetorA[i] > maior ENTÃO //se posição atual é maior que o maior
                maior:=vetorA[i] //atualiza o maior (será o atual)
             fimSe
          fimSe
          i:=i+1
       ate i > 5
       retorne maior
    fimfuncao
    
    inicio
    escreva("O Maior Número é --> ",maiorNumero())
    fimAlgoritmo

     

     

    Como o laço é fixo, poderia substituir tb o repita por para... e outros detalhes, ex.:
     

    Algoritmo "Dizer o maior número"
    
    const
      MAX = 10 //máximo de números do vetor
    
    //Função que retorna o maior número dentre os números do vetor
    funcao maiorNumero(): inteiro
       var
          i      :inteiro //obs.: esse "i" não é o mesmo lá do programa principal!
          maior  :inteiro //maior númer do vetor
       inicio
       maior:=vetorA[1] //inicializa o maior com o primeiro
       para i de 2 ate MAX faca //do segundo em diante
          se vetorA[i] > maior ENTÃO //se posição atual é maior que o maior
             maior:=vetorA[i] //atualiza o maior (será o atual)
          fimSe
       fimPara
       retorne maior
    fimfuncao
    
    var
       vetorA :vetor[1..MAX] de inteiro //vetor que armazenará os números
       i      :inteiro                //variável auxiliar para percorrer o vetor
          
    inicio
    ALEATORIO ON  //recurso utilizado para gerar número automaticamente
       ALEATORIO 1,99 //faixa de número que será sorteado
       //leitura dos dados (preencher o vetor)
       para i de 1 ate MAX faca
          escreva("Digite o ",i:2,"º número ")
          leia(vetorA[i]) //obs.: se tiver com o ALETORIO ON, será preenchido automaticamente!
       fimpara
    ALEATORIO OFF //desabilita o gerador do dados (caso não queeira, remova as linhas ALEATORIO)
    escreva("O Maior Número é --> ",maiorNumero())
    fimAlgoritmo


    Caso queria também colocar a leitura num procedimento... sugeriria algo assim:

    Algoritmo "Dizer o maior número"
    const
      MAX = 5 //máximo de números do vetor
    
    var
       vetorA :vetor[1..MAX] de inteiro //vetor que armazenará os números
    
    //Procedimento para efetuar a leitura dos dados (preencher o vetor)
    procedimento lerDados()
       var
          i :inteiro //auxiliar para percorrer o vetor
       inicio
       para i de 1 ate MAX faca
          escreva("Digite o ",i:2,"º número ")
          leia(vetorA[i])
       fimpara
    fimProcedimento
    
    //Função que retornar o maior número dentre os números do vetor
    funcao maiorNumero(): inteiro
       var
          i      :inteiro //auxiliar para percorrer o vetor (osb.: não é o mesmo do procedimento acima)
          maior  :inteiro //maior número do vetor
       inicio
       maior:=vetorA[1] //inicializa o maior com o primeiro
       para i de 2 ate MAX faca //do segundo em diante
          se vetorA[i] > maior ENTÃO //se posição atual é maior que o maior
             maior:=vetorA[i] //atualiza o maior (será o atual)
          fimSe
       fimPara
       retorne maior
    fimfuncao
    
    inicio
    lerDados()
    escreva("O Maior Número é --> ",maiorNumero())
    fimAlgoritmo

    obs.: No Procedimento eu não consegui fazer funcionar o comando "ALEATORIO"... ai, para testar, tem que ser na mão dura...
     

     

     

    A ideia seria comparar os códigos e analisar as mudanças... o que acham? As minhas principais argumentações estão meio que lá no primeiro comentário...

     

     

    No aguardo.

    • Curtir 2

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites
    viniciusv21    3
  • Autor do tópico
  • Em 27/08/2017 às 16:14, viniciusv21 disse:

     

     

    Em 27/08/2017 às 16:14, viniciusv21 disse:
    Em 27/08/2017 às 16:00, Simon Viegas disse:

    2) "Cada um no seu quadrado"
    Você está lendo os dados do vetor dentro da função que verificará qual o maior... deveria separar uma coisa dá outra...ou seja, a função deveria servi apenas para "retornar o maior". Ou fazia um outro procedimento para ler os dados, ou leria na parte principal do programa...

    Olá tentei colocar o procedimento lervetor para ler os dados, mas não funciona porque quando passa pelo fimprocedimento os dados somem e não podem ser aproveitados na função dizer_maior_numero. Veja: 

     

    Algoritmo "Dizer o maior número"
    procedimento lervetor (b : inteiro)
    var
    vetorA: vetor[1..5] de inteiro
    p : inteiro
    inicio
    para p de 1 ate 5 faca
    escreva("Digite um valor:", "[" , p , "de 5]")
    leia(vetorA[p])
    fimpara
    fimprocedimento
    //-----------------------------------
    funcao dizer_maior_numero (): inteiro
    var
    x, y : inteiro
    inicio
    
    x := 1
    para y de 2 ate 5 faca
    se lervetor(x) < lervetor(y) então // Verifica o número da frente. Se x menor que
      x := y                       // Se x menor q y, x recebe o valor de y
    fimse                          // e continua verificando o próximo da frente
    fimpara                        // até chegar ao último.
    
    retorne vetorA[x]
    fimfuncao
    //-----------------------------------
    
    var
    
    inicio
    
    escreva("O maior número é:", dizer_maior_numero())
    
    Fimalgoritmo

     

     

    Em 27/08/2017 às 16:14, viniciusv21 disse:
    Em 27/08/2017 às 16:00, Simon Viegas disse:

     

     

     

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Olá @viniciusv21.

     

    1) ESCOPO DE VARIÁVEIS

    22 horas atrás, viniciusv21 disse:
    
    procedimento lervetor (b : inteiro)
       var
          vetorA: vetor[1..5] de inteiro
          p : inteiro

     

    Ao declarar o vetor vetorA dentro do procedimento lervetor() você estipulou o seu escopo como local, ou seja, é só "enxergada" para quem está dentro do procedimento. É a famosa "variável local".

     

    Para que o vetor seja utilizável em outros procedimentos ou funções é necessário que a variável esteja declarada como "variável global".

     

    Para que uma variável global interaja nos procedimentos tem pelo menos 2 formas:

     

    1) passa a variável pelo parâmetro;

    2) usa ela diretamente, aproveitando do escopo global.

     

    Então, como no seu contexto está utilizando vetores, a primeira opção não é válida... ou pelo menos eu não sei como faz para declarar uma variável lá nos parâmetros do procedimento...

     

    Para a segunda opção, basta que a declaração da variável, lá no var, esteja acima do procedimento, ou seja, a declaração dessa variável que vai ser usada dentro dos procedimentos deve ser declara antes da declaração do procedimento em si.

     

     

    Esse trecho poderia ficar mais ou menos assim:

    Algoritmo "Dizer o maior número"
    
    var //variáveis em escopo GLOBAL
       vetorA: vetor[1..5] de inteiro 
    
    //Procedimento para efetuar a leitura dos dados (preencher o vetor)
    procedimento lervetor()
       var //variáveis em escopo local ("só existem" dentro do procedimento)
          {vetorA: vetor[1..5] de inteiro} //passou a ser global
          {p : inteiro} //por convenção, é comum utilizar o "i" para essa atividade
          i :inteiro //auxiliar para percorrer o vetor
       inicio
       para i de 1 ate 5 faca
          {escreva("Digite um valor:", "[" , p , "de 5]")} //abaixo pequenos ajustes...
          escreva("Digite um valor: [",i," de 5 ]: ")
          leia(vetorA[i])
       fimpara
    fimprocedimento
    
    inicio
    lerVetor()
    Fimalgoritmo

     

    Já na função:

    23 horas atrás, viniciusv21 disse:
    
    funcao dizer_maior_numero (): inteiro
       var
          x, y : inteiro
       inicio
       x := 1
       para y de 2 ate 5 faca
          se lervetor(x) < lervetor(y) então // Verifica o número da frente. Se x menor que
            x:=y                             // Se x menor q y, x recebe o valor de y
          fimse                              // e continua verificando o próximo da frente
       fimpara                               // até chegar ao último.
       retorne vetorA[x]
    fimfuncao

     

     

    Você está usando o procdimento letvetor() de forma incompatível de como ela foi projetada... então, como o letvetor() funciona? A "assinatura" do seu procedimento estava assim:

     

    22 horas atrás, viniciusv21 disse:
    
    procedimento lervetor (b : inteiro)

     

    Ou seja, b recebe um valor inteiro de fora... mas perceba que em nenhum momento você está utilizando b dentro da função. Na prática essa informação não está tendo utilidade.

     

    Ainda nesse procedimento, como o restante do procedimento se comporta?

     

    Lá tem:

     

    23 horas atrás, viniciusv21 disse:
    
    para p de 1 ate 5 faca
       escreva("Digite um valor:", "[" , p , "de 5]")
       leia(vetorA[p])
    fimpara

    Ou seja, vai preencher todo as 5 posições do vetor... a funcionalidade do letvetor() seria ler os 5 números que o vetor conterá... resumindo: ao fim do procedimento, o vetor estará com as 5 posições preenchidas.

     

    Mas lá na função você tenta usar:

    23 horas atrás, viniciusv21 disse:
    
    se lervetor(x) < lervetor(y) então

     

    Ou seja, como se lervetor() estivesse retornando o valor da posição, mas como citado acima, ela não foi programada para funcionar assim!

     

    Para esse contexto poderia usar algo assim:
     

    se vetorA[x] < vetorA[y]) ENTÃO

    Percebeu a diferença?

     

     

    RESUMINDO:

    - lervetor() irá preencher o vetorA.

    - dizer_maior_numero() irá retornar o maior valor do vetorA.

     

    Logo, para usar o segundo, tem que antes usar o primeiro.

     

     

    No aguardo.

    Compartilhar este post


    Link para o post
    Compartilhar em outros sites

    Crie uma conta ou entre para comentar

    Você precisar ser um membro para fazer um comentário






    Sobre o Clube do Hardware

    No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações 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

    ×