SoloCodigo

Programación General => Pascal => Mensaje iniciado por: Deiv en Viernes 12 de Enero de 2007, 15:27

Título: Suprimir Vocales Repetidas De Una Cadena
Publicado por: Deiv en Viernes 12 de Enero de 2007, 15:27
Hola,
¿Cuál sería la Función para quitar vocales repetidas (unidas) de una cadena de manera que se convierta en una sola?
Por ejemplo:

'Arribaa en la mooontaña se divisabaa una llama que reecorría su traayectoo'

El resultado deberá ser

'Arriba en la montaña se divisaba una llama que recorría su trayecto'

En realidad las consonantes no deben afectarse, solo las vocales repetidas (seguidas).

Pregunto a manera de practicar y saber como aplicarlo para el objetivo que tengo. Ya sé que por ejemplo si se quita a "Coordinado" se vería mal como "Cordinado", pero como dije otro es el objetivo, y me bastará con vuestras orientaciones de las vocales para darme cuenta.
Un Saludo
Título: Re: Suprimir Vocales Repetidas De Una Cadena
Publicado por: Saiyan1 en Miércoles 17 de Enero de 2007, 11:39
Como empezarias el ejercicio?
Título: Re: Suprimir Vocales Repetidas De Una Cadena
Publicado por: Deiv en Miércoles 17 de Enero de 2007, 13:50
Haber Yo pensaba utilizar la funcion Copy por ejemplo de manera que vaya comparando la cadena si en una cierta posición esta "x-vocal" comparar con la posición[i-1] si tiene el mismo contenido, y ahí no sé quizá con la procedure Delete ir quitando esos repetidos.
Título: Re: Suprimir Vocales Repetidas De Una Cadena
Publicado por: _.B._ en Miércoles 17 de Enero de 2007, 15:27
Mi primer impulso?

Crear una nueva variable (en caso de archivos, un nuevo archivo), y añadirle, caracter a caracter, todo caracter que no sea una vocal repetida.

Algo como:

Código: Text
  1. original: string;
  2. copia: string;
  3. ...
  4. copia[1] := original[1];
  5. tam := 1;
  6. cont := 2;
  7. mientras cont <= tamaño de original hacer
  8.     si original[cont] es vocal Y si original[cont] = copia[cont - 1]
  9.         continuar con ciclo;
  10.     si no
  11.         copia[tam] := original[cont];
  12.         inc(tam);
  13.     inc(cont);
  14. ...
  15.  

Espero te sirva :comp:
Título: Re: Suprimir Vocales Repetidas De Una Cadena
Publicado por: Vila1989 en Viernes 27 de Abril de 2007, 22:38
Hola amigo. Aunque este problema fue planteado en enero, fue ayer cuando me inscribí en este sitio, así que anoche mismo escribí esta funcioncita en Turbo Pascal (que lo mismo sirve para Delphi). Quizás ya hayas resuelto el problema, pero como un problema puede tener múltiples soluciones, pues esta te servirá de seguro. Procuré optimizarla al máximo.

function EliminaRepeticiones(s:string):string;
var
   i:integer;
begin
   i:=2;
   while i<=length(s) do
      if (s in ['a','e','i','o','u']) and
         (s=s[i-1]) then
         delete(s,i,1)
      else
         inc(i);
   EliminaRepeticiones:=s;
end;


La función recibe como parámetro de entrada la cadena con las repeticiones y la devuelve ya sin ellas. Un ejemplo de programa principal que la use es el sgte:

var
   t:string;
begin
   write('Teclee cadena: ');
   readln(t);
   writeln;
   writeln(EliminaRepeticiones(t));
   readln;
end.


Espero te sea útil.