Apuntes recur clase 2
-
Upload
mary-lopez -
Category
Education
-
view
422 -
download
5
Transcript of Apuntes recur clase 2
Modelo 7 : Invertir una cadena1.
Modelo 8: Invertir cadena desde el centro2.
Modelo 9: Eliminar un carácter de la cadena3.
Modelo 10: La palabra mas larga de una oracion4.
Ejemplos Cadenas: step by step
Apuntes Recur página 1
Algoritmo para invertir una cadena de caracteres
Análisis del Algoritmo1.
holaPara invertir una cadena
Tipo: Función o Procesoi.
Tipos de datos que entran1)Tipo de dato que retorna si es Función.2)
Parámetrosii.
Perfil del método: Identificar a.
String cad = InvCad ( String cadena)
Tamaño de la cadena = 1 --> Este es el caso base1)length(cadena)=1
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine en algún momento
i.
Caso General : El método se llama a si mismoii.
Análisis de casosb.
InvCad Inv
1
InvCad(cadena.SubString(1,cadena.Length()-1))
cadena.Length()=1 ;
cadena.Length()>1
Codificación en C++c.
IF (pregunta por el caso base)
//Caso Base
else
// Paso Recursivo
String InvCad(String cadena)String res;if(cadena.Length()==1)
return cadena;else
res=InvCad(cadena.SubString(1,cadena.Length()-1)); res=cadena.LastChar()+res; return res;
Validación del algoritmo : Observar si termina y resuelve el problemad.
Diseño del Algoritmo2.
Metodología:
Modelo 7: Invertir una cadenaviernes, 21 de marzo de 201411:32
Apuntes Recur página 2
Validación del algoritmo : Observar si termina y resuelve el problemad.
InvCad «(Hola»)
InvCad «(Hol»)
res=loH
InvCad «(Ho»)
res=oH
InvCad «(H»)
res=H
res=aloH
H
oH
olH
aloH
Secuenciación en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ahí se guarda (dirección de memoria + valor del parámetros)
1.
Aquí se refleja lo que pasa en cada RETURN2.Comienza desde el caso base el des Apilado.3.
Apuntes Recur página 3
Algoritmo para invertir una cadena de caracteres
Análisis del Algoritmo1.
holaPara invertir una cadena
Tipo: Función o Procesoi.
Tipos de datos que entran1)Tipo de dato que retorna si es Función.2)
Parámetrosii.
Perfil del método: Identificar a.
String cadena = InvCadMed ( String cad,int ini, int fin)
Ini >=fin --> Este es el caso base1)Ini => arranca en posicion 0 y avanza aumentando de 1 en unoFin => arranca en posicion final y disminuye de uno en uno
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine en algún momento
i.
Caso General : El método se llama a si mismoii.
InvCad (cad) 1 Ini>=fin;InvCadMed(cad,ini+1,fin-1) ini<fin;
Análisis de casosb.
Codificación en C++c.
IF (pregunta por el caso base)
//Caso Base
else
// Paso Recursivo
String InvCadMed(String cad,int ini,int fin)char x[1] ;if(ini>=fin)
return cad;
x[1]=cad[fin] ; cad[fin]=cad[ini]; cad[ini]=x[1]; return InvCadMed(cad,ini+1,fin-1);
else
Validación del algoritmo : Observar si termina y resuelve el problemad.
Diseño del Algoritmo2.
Metodología:
Modelo 8: Invertir una cadena desde el centroviernes, 21 de marzo de 201411:32
Apuntes Recur página 4
InvCadMed («Hola»,0,3)
InvCadMed («aolH»,1,2)
Cad=»aloH»Ini=2Fin=2
aloH
aloH Cad=»aolH»Ini=1Fin=2
Secuenciación en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ahí se guarda (dirección de memoria + valor del parámetros)
1.
Aquí se refleja lo que pasa en cada RETURN2.Comienza desde el caso base el des Apilado.3.
Apuntes Recur página 5
Algoritmo para eliminar un carácter de la cadena
Análisis del Algoritmo1.
holasPara eliminar un carácter de la cadena
Tipo: Función o Procesoi.
Tipos de datos que entran1)Tipo de dato que retorna si es Función.2)
Parámetrosii.
Perfil del método: Identificar a.
String cadena = EliCad ( String cad, String car, int pos)
Tamaño de la cadena = 1 --> Este es el caso base1)length(cad)=1
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine en algún momento
i.
Caso General : El método se llama a si mismoii.
EliCad (cad) 1 pos>cad.Length() ;EliCad(cad,car,pos+1) pos<=cad.Length();
Análisis de casosb.
Codificación en C++c.
IF (pregunta por el caso base)
//Caso Base
else
// Paso Recursivo
String EliCad(String cad,String car,int pos)String res;if(pos>cad.Length())
return cad;
cad=cad.Delete(pos,1);pos=pos-1; //La longitud es menos 1 caracter
if(cad[pos]==car[1])
res=EliCad(cad,car,pos+1); return res;
else
Validación del algoritmo : Observar si termina y resuelve el problemad.
Diseño del Algoritmo2.
Metodología:
Modelo 9: Eliminar un carácter de la cadenaviernes, 21 de marzo de 201411:32
Apuntes Recur página 6
Validación del algoritmo : Observar si termina y resuelve el problemad.
EliCad («Holas»,»s»,0)
EliCad («Holas»,»s»,1)
Cad=»Holas»Car=»s»Pos=2
Res=Hola
Hola
Hola
Cad=»Holas»car=»s»Pos=1
Res=Hola
Cad=»Holas»Car=»s»Pos=3
Res=Hola
Cad=»Holas»Car=»s»Pos=4
Res=Hola
Hola
Hola
EliCad («Holas»,»s» ,2)
EliCad («Holas»,»s»,3)
Cad=»Holas»Car=»s»Pos=4
Res=Hola
EliCad («Holas»,»s»,4)
Hola
Secuenciación en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ahí se guarda (dirección de memoria + valor del parámetros)
1.
Aquí se refleja lo que pasa en cada RETURN2.Comienza desde el caso base el des Apilado.3.
Apuntes Recur página 7
Algoritmo para encontrar la palabra mas larga de una oraciòn
Análisis del Algoritmo1.
Hola mundo xxx 1 ==> mundo Para la frase
Tipo: Función o Procesoi.
Tipos de datos que entran1)Tipo de dato que retorna si es Función.2)
Parámetrosii.
Perfil del método: Identificar a.
String cadena = BusLarga ( String cad, String &clon)
Tamaño de la cadena = 0 --> Este es el caso base1)length(cad)=0
Caso Base : El algoritmo no se llama a si mismo. Permite que el algoritmo termine en algún momento
i.
Caso General : El método se llama a si mismoii.
Análisis de casosb.
BusLarga (cad,clon) 1 cad.Length() =0;BusLarga(cad.Trim,clon) cad.Length()>0;
Codificación en C++c.
IF (pregunta por el caso base)
//Caso Base
else
// Paso Recursivo
void __fastcall TForm1::PalabraLarga1Click(TObject *Sender)String cad=InputBox("PALABRA LARGA","Introduzca una cadena de palabras","0");int tam=0;String car="";String larga=BusLarga(cad,car);ShowMessage(larga);
String ObtPalabra(String cad,int pos)String x;if (pos >cad.Length()) return cad;elsex=cad[pos];x=x.Trim() ;
Diseño del Algoritmo2.
Metodología:
Modelo 10: Palabra mas larga de una oraciónviernes, 21 de marzo de 201411:32
Apuntes Recur página 8
x=x.Trim() ;String cad1;if (x.IsEmpty()) cad1=cad.SubString(1,pos-1);else
cad1=ObtPalabra(cad,pos+1);return cad1;
;
String BusLarga(String cad,String &clon)if(cad.Length()==0) return cad ;else
int pos=1; String pal=ObtPalabra(cad,pos); if(pal.Length()>clon.Length())clon=pal; cad=cad.Delete(1,pos); cad=BusLarga(cad.TrimLeft(),clon); return clon;
Validación del algoritmo : Observar si termina y resuelve el problemad.
Secuenciación en clase:
Mostrar la pila que se forma por cada llamada recursiva. Esta sirve para ver que ahí se guarda (dirección de memoria + valor del parámetros)
1.
Aquí se refleja lo que pasa en cada RETURN2.Comienza desde el caso base el des Apilado.3.
Apuntes Recur página 9