Apuntes recur clase 2

9
Modelo 7 : Invertir una cadena 1. Modelo 8: Invertir cadena desde el centro 2. Modelo 9: Eliminar un carácter de la cadena 3. Modelo 10: La palabra mas larga de una oracion 4. Ejemplos Cadenas: step by step Apuntes Recur página 1

Transcript of Apuntes recur clase 2

Page 1: 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

Page 2: Apuntes recur clase 2

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

Page 3: Apuntes recur clase 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

Page 4: Apuntes recur clase 2

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

Page 5: Apuntes recur clase 2

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

Page 6: Apuntes recur clase 2

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

Page 7: Apuntes recur clase 2

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

Page 8: Apuntes recur clase 2

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

Page 9: Apuntes recur clase 2

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