Ir ao conteúdo
  • Cadastre-se

Portugol Função Troca Pares, se for ímpar a última letra inalterada


Posts recomendados

Bom dia pessoal, preciso de ajuda para uma função que não estou entendendo muito bem. Seguinte:

 

Escreva o algoritmo da função trocaPares(entradas: frase) que recebe uma string como parâmetro e retorna uma nova string em que os pares de letras consecutivas na string original são invertidas. Se a string de entrada tiver um número ímpar de letras, a última letra deve permanecer inalterada. A seguir, você pode ver um exemplo de teste da função:

programa exemplo
início
imprima trocaPares("exemplo")
imprima trocaPares("decantador")
imprima trocaPares("entre paredes")
fim

A saída do programa seria:

xemelpo
edactndaro
nert eapereds

 

Agradeço imensamente.

Maysa

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Maysa Ester    você cria a função troca_pares que recebe a palavra digitada pelo usuário como parâmetro e dentro da função você usa o comando compr para saber o tamanho da palavra e verifica se é par ou ímpar usando o comando mod  e usa esse tamanho em um loop ( para )  com passo de dois em dois para pegar cada caractere da palavra , e para isso você usa o comando copia , e uma variável auxiliar do tipo caractere para armazenar os caracteres trocados da palavra , assim você pega o segundo caractere da palavra e coloca na auxiliar e em seguida pega o primeiro caractere da palavra e adiciona à variável auxiliar , assim no final do loop a palavra estará com os pares de letras trocadas , então retorne a variável auxiliar para o loop principal e escreval a palavra trocada  .    poste o código que você já fez para vermos como está .

Link para o comentário
Compartilhar em outros sites

@Maysa Ester     bom começo ,   a função é quase isso mesmo ,  então ela poderia ser assim  :

//palavras reservadas não usam acentos nem cedilha e a função precisa do tipo também
funcao trocaPares ( frase : caractere) : caractere// dentro dos parenteses ,  primeiro a variável depois o tipo
var
  //frase : string  no visualg string é caractere
  aux      :  caratere
  tam , j  :  inteiro    // precisa dessas variáveis do tipo inteiro
inicio
  //frase <- comp    -----   aqui seria 
  tam := compr ( frase )
  //se (comp mod 2)=0 então    precisa comparar é o tamanho , se é par ou ímpar
  se tam mod 2  <>  0 entao  // se a quantidade de caracteres da frase é ímpar
    tam := tam - 1
  fimse
  //aqui o loop ( para )  que percorrerá toda frase pegando caractere por caractere
  // esse loop começa de 2 e vai ate o valor de tam  com passo 2 e dentro use o comando copia assim 
  aux := aux + copia ( frase ; coloque aqui a variavel de controle do loop      ; 1 caractere de cada vez )
  aux := aux + copia ( frase ; coloque aqui a variavel de controle do loop - 1 ; 1 caractere de cada vez )
    
  //depois do loop verifique novamente se o tamanho da frase  é par ou ímpar
  //se for ímpar precisa pegar o último caractere da frase que sobrou  assim 
  aux := aux + copia(frase ; tam ; 1)
  //e finalize a função
  //em seguida retorne essa vaiável aux para o loop principal
  //e a chamada da função precisa de uma outra vriável do tipo caractere que receberá o 
  //retorno da função  assim :    result :=   trocaPares ( frase_digitada_pelo_usuario )
  //em seguida imprimir a frase trocada que é a result 

 

Link para o comentário
Compartilhar em outros sites

  • Membro VIP

Olá.

 

@devair1010, vale ressaltar que esse exercício provavelmente NÃO É em Visualg. Vide:

12 horas atrás, Maysa Ester disse:

programa exemplo
início
imprima trocaPares("exemplo")
imprima trocaPares("decantador")
imprima trocaPares("entre paredes")
fim

 

Percebam que, por exemplo, usam-se imprima para "imprimir na tela"... no Visualg usam-se escreval() ou escreva().

 

 

Sobre:

1 hora atrás, devair1010 disse:

//palavras reservadas não usam acentos nem cedilha e a função precisa do tipo também

 

Cai na mesma questão... pois esse código não está em Visualg (que não aceita acento na maioria dos casos*), mas sim em um tal de PETEQS (ou algo do tipo) que, pelo que eu vi, chegam a usar acentos mesmo, ou seja, seria:

início

em vez de:

inicio

 

 

...me corrijam se estiver enganado.

 

 

obs.: creio eu que se trata desse mesmo contexto:

 

adicionado 2 minutos depois

RESUMINDO:
ou de fato implementam o código em PETEQS;

ou passam a utilizar o Visualg, mas que no caso seria outra "psudo-linguagem de programação".

 

Creio que deve ser feito no primeiro, mas vá saber...

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@devair1010  continuei assim, mas claro que tá errado. Pode corrigir pra mim:

funcao trocaPares ( frase : caractere) : caractere
var
  aux      :  caractere
  tam , j  : inteiro
inicio
    tam := compr ( frase )
    se tam mod 2  <>  0 entao 
    tam := tam - 1
  fimse
para j := 1 até tam faça
  aux := aux + copia ( frase ; tam; 1)
fimpara
  aux := aux + copia ( frase ; tam - 1 ; 1 caractere de cada vez )
  aux := aux + copia(frase ; tam ; 1)
    result :=   trocaPares (frase)

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

@Maysa Ester     agora melhorou um pouco ,   e já está quase pronto , então seu código pode ser assim  :

Algoritmo "função troca pares"
Var
  j,tam,flag    : inteiro
  frase,aux,res : caractere
funcao trocaPares(palavra : caractere) : caractere
inicio
  tam := compr(frase)
  se tam mod 2 <> 0 entao
    tam  := tam-1
    flag :=     1
  fimse
  para j de 2 ate tam passo 2 faca
    aux := aux + copia(frase;j  ;1)
    aux := aux + copia(frase;j-1;1)
  fimpara
  se flag = 1 entao
    aux := aux + copia(frase;tam+1;1)
  fimse
  retorne aux
fimfuncao
Inicio
  escreva("Digite Uma Palavra ")
  leia(frase)
  res := trocaPares(frase)
  escreval("A Palavra Trocada é -> ",res)
Fimalgoritmo

 

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

  • Membro VIP

1#

Sobre:

5 horas atrás, Maysa Ester disse:

@devair1010 qual programa posso usar para testar esse código? 


Como citado na outro tópico do mesmo exercício, encontrei esse "sistema".

Versão é online:

https://leonnasc.github.io/ipeteqsJS/

 

Link para download:

https://github.com/LeonNasc/ipeteqsJS

(abre o arquivo index.html)

 

 

 

2#

5 horas atrás, devair1010 disse:

@Maysa Ester    essa area do forum onde voce postou  eh sobre visualg , entao por isso minha ideia eh usar o visuslg3 , com ele funcionaria bem.  .

 

Não, não vai. São pseudolinguagens distintas. :rezando:

 

Um código em "PETEQS" não roda em Visualg e vice-versa. Como citado:

 

22 horas atrás, Simon Viegas disse:

RESUMINDO:
ou de fato implementam o código em PETEQS;

ou passam a utilizar o Visualg, mas que no caso seria outra "psudo-linguagem de programação"

 

Se exercício foi proposto em PETEQS, este deveria ser feito em PETEQS.... OU devem-se "negociar" a possibilidade de mudar... é uma princípio implícito.

 

Seria como está estudando a "fórmula de Bhaskara", mas ai resolveu pegar as resposta do enunciado e substituir nas equação para encontrar a resposta, ou seja, NÃO É O RESULTADO QUE IMPORTA, MAS SIM O MÉTODO UTILIZADO PARA ENCONTRAR A RESPOSTA!!! Se está estudando X, vai utilizar X como base!

 

Outra analogia: entrou na autoescola para tirar a carteira para motorista de carro, mas está ai quer treinar em uma moto!!! Os 2 servem para dar um rolé na cidade, mas cada veículo tem a sua própria categoria individual (B e A)😄

 

 

 

3#

Vejam, o enunciado já deu um exemplo de código!!!:

 

Em 30/10/2018 às 10:05, Maysa Ester disse:

programa exemplo
início
imprima trocaPares("exemplo")
imprima trocaPares("decantador")
imprima trocaPares("entre paredes")
fim

 

Esse código está em PETEQS, ou algo do gênero, não sei o nome "oficial"... mas de  forma alguma isso servirá no Visualg.

obs.: para esse trecho acima funcionar, ANTES devem ser implementado no código a função trocaPares().

 

 

Exemplo de código em PETEQS:

programa exemplo
início
imprimaln "Esse código rodou aqui no site!!! mas não vai rodar no Visualg."
imprimaln "O PETEQS tem uma sintaxe própria, já o Visualg tem uma outra diferente."
imprimaln "Apenas ambos são em português... apenas isso!"
fim

Testem nessa página:

https://leonnasc.github.io/ipeteqsJS/

 

 

 

***

 

@Maysa Ester, de onde surgiu esse exercício? é de alguma apostila que resolver estudar por contra própria; ou seria de algum curso ou algo do tipo? No estudos, cita algo como algum programa para rodar ou é uma "linguagem de programação" para ser feita no papel? Por favor, contextualiza mais de onde é esse exercício!

 

Outra coisa, você tem alguma apostila sobre o tal PETEQS para compartilhar ou parte do material que está estudando?

 

Eu dei uma procurada em materiais, mas só encontrei uma apostila do SENAI. Infelizmente para baixar tinha que cadastrar o cartão de crédito, ai lenhou :(

 

No aguardo.

adicionado 6 minutos depois

UPDATE:

Sobre:

4 minutos atrás, devair1010 disse:

@Maysa Ester     agora melhorou um pouco ,   e já está quase pronto , então seu código pode ser assim  :

 

No caso, poderiam utilizar esse código como base SE FOR ACEITO "CONVERTER" PARA VISUALG. ;)

 

 

adicionado 40 minutos depois

UPDATE 2

4#
@devair1010, você está usando frase  (variável global), em vez de palavra (variável local) na função.

 

Ou seja, em vez de:

16 minutos atrás, devair1010 disse:

funcao trocaPares(palavra : caractere) : caractere
inicio
  tam := compr(frase)
  se tam mod 2 <> 0 entao
    tam  := tam-1
    flag :=     1
  fimse
  para j de 2 ate tam passo 2 faca
    aux := aux + copia(frase;j  ;1)
    aux := aux + copia(frase;j-1;1)
  fimpara
  se flag = 1 entao
    aux := aux + copia(frase;tam+1;1)
  fimse
  retorne aux
fimfuncao

 

Seria algo como:

funcao trocaPares(palavra:caractere) : caractere
   inicio
   tam := compr(palavra)
   se tam mod 2 <> 0 entao
      tam  := tam-1
      flag :=     1
   fimse
   para j de 2 ate tam passo 2 faca
      aux := aux + copia(palavra;j  ;1)
      aux := aux + copia(palavra;j-1;1)
   fimpara
   se flag = 1 entao
      aux := aux + copia(palavra;tam+1;1)
   fimse
   retorne aux
fimfuncao

 

 

 

5#

Como aux é uma variável "acumulativa", ou seja, utiliza o seu próprio valor mais alguma coisa, tecnicamente seria necessário inicializá-la. Sobretudo quando é dentro de uma função. Algo como:

funcao trocaPares(palavra:caractere) : caractere
   inicio
   aux := "" //inicializa a variável
   tam := compr(palavra)
   se tam mod 2 <> 0 entao
   ...

 

 

 

6#

Sobre o que foi pedido no enunciado:

Em 30/10/2018 às 10:05, Maysa Ester disse:

Exemplo de teste da função:


programa exemplo
início
imprima trocaPares("exemplo")
imprima trocaPares("decantador")
imprima trocaPares("entre paredes")
fim

 

Poderia ficar algo assim:

inicio
escreval(trocaPares("exemplo"))
escreval(trocaPares("decantador"))
escreval(trocaPares("entre paredes"))
fimalgoritmo

 

 

7#

Segue o código do @devair1010 completo, com essas sugestões e alguns comentários sobre as etapas:

algoritmo "Função troca pares"
var
   j,tam,flag :inteiro
   frase,aux  :caractere
funcao trocaPares(entradas:caractere):caractere
   inicio
   aux <- "" //inicializa a variável que conterar a palavras com as trocas
   tam <- compr(entradas) //copia o tamanho da palavra
   se tam mod 2 <> 0 entao //se tamanho da palavra não for par (se é ímpar)
      tam  <- tam-1 //retira a última posição do processo de troca
      flag <-     1 //usa a "bandeira" que não é par (usada posteriormente)
   fimSe
   para j de 2 ate tam passo 2 faca //para cada um dos pares a serem trocados
      aux <- aux + copia(entradas;j  ;1) //copia a posição da direita
      aux <- aux + copia(entradas;j-1;1) //copia a posição da esquerda
   fimpara
   se flag = 1 entao //se a 'bandeira" indica que não é par
      aux := aux + copia(entradas;tam+1;1) //copia a letra que sobrou no final
   fimSe
   retorne aux //retorna a palavra com a "troca de pares"
fimFuncao
inicio
escreval(trocaPares("exemplo")) //invoca função e imprime o resultado
escreval(trocaPares("decantador"))
escreval(trocaPares("entre paredes"))
fimAlgoritmo

 

 

 

8#

Apenas como demonstração, se fizer por exemplo isso:

escreval(trocaPares(trocaPares("entre paredes")))

A frase sairá igual :D

  • Curtir 1
Link para o comentário
Compartilhar em outros sites

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...