[ Foro de Pascal ]

Invertir solo las vocales de una cadena

02-May-2019 18:11
Invitado (UnEstudianteMas)
3 Respuestas

Hola soy estudiante de programación con Pascal, y deseo hacer un programa que al introducir una oración/frase/enunciado sin signos de puntuación y que termine en punto, me imprima una cadena modificada donde las palabras terminadas en vocal estén invertidas.
Ejemplo:
enunciado: Este es un ejemplo.
Resultado: etsE es un olpmeje.


02-May-2019 18:44
Nacho Cabanes (+84)

Ok. ¿Qué has conseguido hasta ahora?


04-May-2019 04:11
Invitado (UnEstudianteMas)



program prueba;
   uses 
   crt;

   var
   c1:String[255];c2,c3,c4:string[255];
   esp:string;
   i:Integer;
   

Begin

WriteLn('Escribe una frase con palabras separadas sin signos de puntuacion y que termine en "."');
Read(c1);

esp:=(' ');

for i:=1 to Length(c1) do
   begin
      c2:=(c1[i]+c2);
   end;

for i:=1 to Length(c2) do
   begin
      if (c2[i]=#32) or (c2[i]=#46) then
         begin
            if ((pos(c2[i],c2)+1)='a') or ((pos(c2[i],c2)+1)='e') or ((pos(c2[i],c2)+1)='i') or ((pos(c2[i],c2)+1)='o') or ((pos(c2[i],c2)+1)='u') then
               begin 
                  for (pos(c2[i],c2)+1) to ' ' do
                     begin
                        c3:=((' '[pos(c2[i],c2)+1])+c3);
                     end;
            else
               if (pos(c2[i],c2)+1)<>'a' or (pos(c2[i],c2)+1)<>'e' or (pos(c2[i],c2)+1)<>'i' or (pos(c2[i],c2)+1)<>'o' or (pos(c2[i],c2)+1)<>'u' then
                  begin
                     for (pos(c2[i],c2)+1) to ' ' do
                        begin
                           c3:=(c3+' '[pos(c2[i],c2)+1]);
                        end;
                  end;
            end;
         end;
    end;
for i:=1 to length(c3) do
   begin
      c4:=(c3[i]+c4);
   end;
                           
                               
     
writeln(c1);
writeln(c2);
writeln(c3);  
writeln(c4);
readKey()
end.


He hecho como 3-5 códigos pero en los primeros tuve errores tratando de validar el carácter después del espacio entonces, pensé en usar pos del espacio y sumarle 1 a esa posición pero me da error el pos ya que no acepta el c2[i] :(


21-May-2019 10:49
Nacho Cabanes (+84)

Disculpa el retraso en contestar.

Para que sea fácil de leer y no te cueste localizar los errores, yo optaría por crear alguna función auxiliar, como "esVocal", "extraerSiguientePalabra" e  "invertirPalabra".






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)