ALGORITMOS: REPRESENTACIN, INSTRUCCIONES, ESTRUCTURAS BSICAS DE
TRATAMIENTO, PSEUDOCDIGO. Introduccin Este documento pretende ser un refuerzo para aquellas personas a las que les cueste un poco ms entender cmo descr!"!r al#or!tmos de forma comprens!"le para los ordenadores$ por med!o de d!a#ramas de flu%o & pseudocd!#o fundamentalmente. Suele ser un entrenam!ento pre'!o ef!caz que perm!te resol'er el pro"lema de forma mu& s!m!lar a como lue#o se 'a a (acer con un pro#rama$ pero s!n neces!dad de tener que preocuparnos de respetar los detalles de s!nta)!s de cualqu!er len#ua%e de pro#ramac!n que tan *en#orrosos+ resultan cuando estamos comenzando & no dom!namos a,n d!c(o len#ua%e. -"re la s!mulac!n que se ad%unta$ de nom"re Pseudocodigo_R!.s"#$ con el na'e#ador. En ella puedes encontrar tres representac!ones d!ferentes del m!smo al#or!tmo & comparar cada uno de los pasos del al#or!tmo en cada una de las representac!ones. De ellas$ los d!a#ramas N-S se usan poco$ & cas! se presentan slo a modo de cur!os!dad. A$ esc%i&i% cu'$(uie% '$go%i)*o +', (ue )e-e% e- cue-)': En cada momento slo se puede e%ecutar una acc!n .o sentenc!a o !nstrucc!n/. Dentro de las sentenc!as del al#or!tmo pueden e)!st!r *pala"ras reser'adas+$ es dec!r$ pala"ras a las que se les da un determ!nado s!#n!f!cado$ & que no podremos usar para nada d!st!nto. S! estamos ut!l!zando pseudocd!#o tenemos tam"!0n que usar la !ndentac!n .d!st!ntos n!'eles de san#r1as del te)to/$ &a que aumenta la le#!"!l!dad del pro"lema para que se pueda entender me%or. Diagramas de flujo o flujogramas. En la presentac!n anter!or (emos menc!onado tres formas de representar los al#or!tmos. La pr!mera de ellas son los d!a#ramas de flu%o. No so- *.s (ue u-' +e%%'*ie-)' g%.#ic', u-' -o)'ci/- g%.#ic' es).-d'% (ue 0osi&i$i)' $' co*0%e-si/- de $os 0'sos , e$ o%de- e- (ue +', (ue d'%$os 0'%' %eso$1e% u- 0%o&$e*' 2'$go%i)*o3. Se "asa en la ut!l!zac!n de unos s1m"olos #rf!cos que denom!namos ca%as$ en las que escr!"!mos las acc!ones que t!ene que real!zar el al#or!tmo. De"en ser le1dos de arr!"a a"a%o$ & de !zqu!erda a derec(a. T!enen la 'enta%a de proporc!onar una representac!n mu& '!sual$ que perm!te entender de un solo #olpe de '!sta la estructura del al#or!tmo$ el t!po de acc!ones que se real!zan & el orden en que se real!zan. Son mu& adecuados para al#or!tmos que no requ!eren d!a#ramas mu& #randes$ pero se (acen d!f1c!les de mane%ar cuando un solo d!a#rama ocupa muc(as p#!nas. -dems$ resultan en#orrosos de corre#!r cuando se detectan errores.
Las ca%as estn conectadas entre s1 por l1neas & eso nos !nd!ca el orden en el que tenemos que e%ecutar las acc!ones. En todo al#or!tmo s!empre (a"r una ca%a de !n!c!o & otra de f!n$ para el pr!nc!p!o & f!nal del al#or!tmo. Smbolos usados en los diagramas de flujo. - cont!nuac!n t!enes la an!mac!n Pseudocodigo_R4.s"#. 2"rela con el na'e#ador & 'ers que de forma !nteract!'a 'a a perm!t!rte consultar rp!damente cada uno de los s1m"olos ut!l!zados en los d!a#ramas de flu%o & qu0 s!#n!f!ca. - cont!nuac!n te presentamos un cuadro de la clas!f!cac!n de los s1m"olos ut!l!zados en los d!a#ramas de flu%o. Son los m!smos que aparecen en la presentac!n anter!or$ pero (emos pensado que te puede ser ,t!l que adems los ten#as todos aqu1 ms a mano$ para que ut!l!ces el s!stema que me%or se adapte a tu forma de estud!ar. P%o&$e*' e5e*0$o: En los apartados anter!ores (emos comentado las caracter1st!cas de los d!a#ramas de flu%o$ & los s1m"olos que usan. Es el momento de que 'eamos un e%emplo. 3ueremos +'$$'% e$ 0%oduc)o de 1'%ios -6*e%os 0osi)i1os i-)%oducidos 0o% )ec$'do , e$ 0%oceso )e%*i-' cu'-do se i-)%oduce u- -6*e%o -eg')i1o. Los pasos necesar!os son los s!#u!entes4 5. In!c!al!zar la 'ar!a"le del producto .ase#urarnos de que 'ale 5/. 6. Leer el pr!mer n,mero. 7. Pre#untar s! el n,mero le1do es pos!t!'o. 4. S! el n,mero le1do es pos!t!'o$ mult!pl!camos el producto acumulado por el n,mero le1do$ lue#o leemos un nue'o n,mero$ & se 'uel'e al paso 7. 8. S! por el contrar!o el n,mero le1do es ne#at!'o$ escr!"!mos el producto acumulado & term!namos. El d!a#rama de flu%o que representa esa soluc!n es el s!#u!ente4 Puede 'erse dos e%emplos de la e%ecuc!n de este flu%o#rama en la s!mulac!n conten!da en el arc(!'o Pseudocodigo_R7.00) que se ad%unta. - cada cl!c de ratn se !r e%ecutando el al#or!tmo$ de forma que puedes comparar la e%ecuc!n de cada paso en dos representac!ones d!ferentes .flu%o#rama & pseudocd!#o/. De"er1as !ntentar ant!c!parte a cada paso antes de a'anzar al s!#u!ente. PARA SABER MS 9na (erram!enta para (acer d!a#ramas de flu%o$ 'l!da para plataformas :!ndo;s & L!nu) $ es la apl!cac!n DI-$ un #enerador de d!a#ramas de flu%o mu& ,t!l. En esta p#!na puedes encontrar una "re'e descr!pc!n & al#unos enlaces !nteresantes4 D!a#ramas de <lu%o (ttp4=="ulma.net="od&.p(tml>nIdNot!c!a?574@ Pseudocdigo. Por f!n lle#amos a la forma de representar un al#or!tmo que por otra parte es la ms com,nmente usada. Es una forma !ntermed!a entre el $e-gu'5e -')u%'$ & el $e-gu'5e de 0%og%'*'ci/- para la descr!pc!n de la soluc!n de un pro"lema$ que e'!ta las am"!#Aedades del len#ua%e natural & no entra en los detalles de si-)'8is de un len#ua%e de pro#ramac!n concreto. Lenguaje natural Lenguaje de programacin Pseudocdigo Representacin algoritmos Es un len#ua%e de espec!f!cac!n de al#or!tmos$ pero mu& parec!do a cualqu!er len#ua%e de pro#ramac!n. Su traducc!n a cualqu!er len#ua%e concreto es mu& senc!lla. No se r!#e por las normas de un len#ua%e en part!cular$ no (a& que tener en cuenta la s!nta)!s concreta de cada sentenc!a$ s!no que podemos (acerlo cas! como queramos$ s!empre que lo que escr!"amos no sea am"!#uo & sea claro. Se centra ms en la l#!ca del pro"lema que en los detalles de s!nta)!s. No es tan '!sual como los d!a#ramas de flu%o. Son "astante ms fc!les de (acer & de corre#!r que las representac!ones #rf!cas$ &a que son slo te)to. El pseudocd!#o tam"!0n 'a a ut!l!zar una ser!e de pala"ras cla'e o pala"ras espec!ales que 'an !nd!cando lo que de"e (acer el al#or!tmo. Estructura de un algoritmo en !seudocdigo. Bemos comentado que el pseudocd!#o es parec!do a cualqu!er len#ua%e de pro#ramac!n$ & por ello t!ene una estructura ms o menos def!n!da$ como los pro#ramas. C3u0 partes componen esa estructura> En pseudocd!#o el al#or!tmo t!ene tres partes4 la c'&ece%'$ la 9o-' de dec$'%'ci/- de co-s)'-)es , 1'%i'&$es & el cue%0o. La c'&ece%' cont!ene el nom"re del al#or!tmo. La 9o-' de dec$'%'cio-es de 'ar!a"les & constantes esta"lece qu0 'ar!a"les & constantes 'amos a usar$ !nd!cando %unto al nom"re el t!po de las m!smas & el 'alor en el caso de las constantes. El cue%0o del al#or!tmo es el que cont!ene las !nstrucc!ones que !nd!can las acc!ones a real!zar por el pro#rama. Com!enza con la pala"ra In!c!o & term!na con la pala"ra <!n .o pala"ras s!m!lares/. El aspecto f!nal del al#or!tmo es al#o s!m!lar al s!#u!ente esquema$ en el que los corc(etes an#ulares !nd!can que lo que 'a dentro se sust!tu!r por un nom"re concreto$ un t!po concreto$ etc. Algoritmo <nombre alg> Const <nombre>: <tipo>, <nombre>: <tipo>, Var <nombre>: <tipo>, <nombre>: <tipo>, Inicio <Instrucciones> Fin En el cuerpo$ para que quede ms le#!"le$ (a& que usar la !ndentac!n & s! es necesar!o (a& que usar comentar!os !dent!f!cados como tales por al#,n s1m"olo$ tal como lla'es$ o entre =D D=$ que es &a cas! un estndar. Las d!st!ntas estructuras de control de flu%o que se pueden usar en un al#or!tmo son las s!#u!entes4 Estructura de Control Descripcin 1. Inicio y Fin Por donde emp!eza & aca"a el al#or!tmo. 6. Si <condicin> Entonces <acciones1> Si no <acciones2> Fin-Si E%ecuc!n cond!c!onal de la acc!n. 7. Mientras <condicin> hacer <acciones> Fin-Mientras Eepet!c!n de la acc!n m!entras que la cond!c!n sea 'erdadera. 4. Repetir <acciones> hasta <condicin> Eepet!c!n de la acc!n (asta que la cond!c!n sea 'erdadera. 8. Desde <Variable = alor inicial> hasta <alor !inal> paso <incre"ento> hacer <acciones> Fin-Desde Eepet!c!n de la acc!n depend!endo de una 'ar!a"le de control que emp!eza tomando el 'alor !n!c!al$ & tras cada 'uelta se !ncrementa sumndole !ncremento$ (asta que se alcance o supere el 'alor f!nal. F. Se#$n Sea <e%presin> Se comprue"a el 'alor de la e)pres!n$ & se#,n sea &aso <alor1>' <acciones1> &aso <alor2>' <acciones2> ( &aso <alor)>' <acciones)> *+tro &aso ' <acciones,orDe!ecto>- Fin-Se#$n su 'alor$ se e%ecuta la acc!n que le corresponda. Los corc(etes normales !nd!can que el otro caso es opc!onal$ puede no ponerse. Pode*os '#i%*'% (ue e$ 0seudoc/digo es: 9na forma !ntermed!a entre el len#ua%e natural & el len#ua%e de pro#ramac!n para la descr!pc!n de la soluc!n de un pro"lema$ que e'!ta las am"!#Aedades del len#ua%e natural & no entra en los detalles de s!nta)!s de un len#ua%e de pro#ramac!n concreto. Estructuras b"sicas de control de flujo. Bemos menc!onado anter!os las estructuras de control de flu%o que se usan en pseudocd!#o. CSon las ,n!cas pos!"les> CSon todas ellas !mpresc!nd!"les> En real!dad no todas son !mpresc!nd!"les$ pero s1 representan a cas! todas las pos!"les$ al menos a todas las que son recomenda"les. Cualqu!er pro"lema se resuel'e (ac!endo uso de un con%unto l!m!tado de es)%uc)u%'s de co-)%o$ de$ #$u5o de e%ecuc!n de las sentenc!as. -qu1 presentamos estas estructuras. Gatemt!camente es pos!"le demostrar que 0'%' )odo 0%o&$e*' co- so$uci/- puede descr!"!rse un al#or!tmo que lo soluc!one us'-do s/$o $'s )%es es)%uc)u%'s de co-)%o$ de #$u5o &.sic's. Esas estructuras son las s!#u!entes4 Secue-ci'$. Cons!ste en escr!"!r o representar las sentenc!as una detrs de otra %usto en el orden en que de"en e%ecutarse. Co-dicio-'$ o se$ec)i1'. Cons!ste en la e%ecuc!n o no de unas sentenc!as depend!endo del 1'$o% de 1e%d'd de una cond!c!n. En todos los len#ua%es e)!sten d!st!ntas sentenc!as correspond!entes a la estructura cond!c!onal. C:c$ic', i)e%')i1' o %e0e)i)i1'. Cons!ste en e%ecutar repet!damente unas sentenc!as m!entras se cumpla una cond!c!n. Tam"!0n e)!sten en todos los len#ua%es d!st!ntas sentenc!as correspond!entes a la estructura c1cl!ca. El (ec(o de que los len#ua%es !nclu&an 'ar!as sentenc!as de cada t!po responde ms al deseo de proporc!onar una 'ar!edad de sentenc!as que se adapten me%or a los d!st!ntos casos pos!"les & que fac!l!ten la pro#ramac!n$ que al (ec(o de que sean realmente necesar!as. De (ec(o$ ser1a pos!"le constru!r cualqu!er pro#rama usando un solo t!po de sentenc!a cond!c!onal & un solo t!po de sentenc!a c1cl!ca. Estructura secuencial S!empre que ten#as que !nd!car una ser!e de pasos que de"en darse en el orden que se !nd!can$ de"ers usar esta estructura. Es cu'-do u-' i-s)%ucci/- sigue ' o)%' e- secue-ci', esc%i)'s e- e$ o%de- e- (ue 1'- ' e5ecu)'%se. En pseudocd!#o es la estructura4 Sentencia1 Sentencia2 Sentencia. ( sentencia) Como e%emplo puedes 'er cmo se representa la m!sma estructura secuenc!al en los dos s!stemas de representac!n de al#or!tmos que (emos '!sto4 <lu%o#rama & pseudoc#!do. Estructura condicional# selecti$a o alternati$a. CTenemos que compro"ar al#una cond!c!n antes de dec!d!r qu0 sentenc!a es la que de"emos e%ecutar> En ese caso la estructura cond!c!onal es la adecuada. Se e1'$6' $' co-dici/- , e- #u-ci/- de$ %esu$)'do se e5ecu)' u- co-5u-)o de i-s)%uccio-es u o)%o. Ba& tres t!pos de sentenc!as select!'as4 Co-dicio-'$ si*0$e. Co-dicio-'$ do&$e. Se$ec)i1' *6$)i0$e. En el caso de la select!'a m,lt!ple$ lo que se e'aluar es una e)pres!n$ que dar un 'alor de un t!po d!screto .dado un 'alor$ sa"emos cual es el s!#u!ente/. Depend!endo del 'alor resultante$ se e%ecutar una u otra sentenc!a. Es dec!r$ cada uno de los 'alores pos!"les tendr asoc!ada su prop!a sentenc!a$ que ser la ,n!ca que se e%ecutar cuando la e)pres!n tome ese 'alor. Condicional simple. S! neces!tas (acer al#una sentenc!a slo en el caso de que se cumpla al#una cond!c!n$ el cond!c!onal s!mple es la estructura adecuada. E1'$u'*os $' co-dici/- , si es 1e%d'de%' e5ecu)'*os e$ co-5u-)o de se-)e-ci's 'soci'd's '$ e-)o-ces, , si es #'$so, -o +'ce*os -'d' , co-)i-u'*os co- $' se-)e-ci' (ue +',' ' co-)i-u'ci/-. En pseudocd!#o es la estructura4 Condicional doble. S! t!enes que ele#!r entre dos pos!"les alternat!'as$ depend!endo de que se cumpla o no al#una cond!c!n$ de"es ut!l!zar el cond!c!onal do"le. Se e1'$6' $' co-dici/- , si es 1e%d'd se e5ecu)'- e$ co-5u-)o de 'ccio-es 'soci'd's ' $' 0'%)e e-)o-ces, , si es #'$so se e5ecu)'- e$ co-5u-)o de 'ccio-es 'soci'd's ' $' 0'%)e si-o 2se e$ige u-o de $os dos c'*i-os , se desc'%)' e$ o)%o3. La cond!c!n se e'al,a una ,n!ca 'ez$ por lo que las acc!ones que correspondan se e%ecutarn una ,n!ca 'ez. En pseudocd!#o esta estructura es4 S/ <condicin> entonces <acciones1> Si no <acciones2> Fin-S/ Alternativa mltiple o selectiva mltiple: S! t!enes un caso en el que (a& m,lt!ples 'alores pos!"les para una e)pres!n$ & cada uno de ellos requ!ere efectuar un con%unto prop!o de acc!ones$ la estructura ms !nd!cada ser la alternat!'a o select!'a m,lt!ple. Se e'al,a una e)pres!n que puede tomar m,lt!ples 'alores. Se#,n el 'alor que la e)pres!n ten#a en cada momento .se#,n el caso de que se trate/ se e%ecutan las acc!ones correspond!entes al 'alor. Si <condicin> entonces <acciones> Fin-S/ En real!dad equ!'ale a un con%unto de cond!c!ones an!dadas. En cualqu!er len#ua%e suele usarse con las pala"ras Case o S;!tc(. Es la estructura4 Se#$n Sea <e%presin> &aso <Valor1>' <acciones1> &aso <alor2>' <acciones2> ... &aso <alor)>' <acciones)> *<+tro &aso>' <acciones,orDe!ecto>- Fin-Se#$n
O)%o C'so4 Las acc!ones asoc!adas a la et!queta HOtro CasoI se e%ecutan cuando la e)pres!n no toma n!n#uno de los 'alores pre'!stos en las dems et!quetas$ & suele ser opc!onal. o)+e%"ise, e$se, de#'u$) son pala"ras que se usan frecuentemente para esta alternat!'a. Los 'alores que se pueden poner como et!quetas .como alternat!'as a compro"ar/ 'an a depender de los len#ua%es. -l#unos len#ua%es perm!ten usar cualqu!er e)pres!n que de'uel'a un t!po ordenado & d!screto$ & en las et!quetas perm!ten poner 'alores !nd!'!duales o ran#os de 'alores$ e !ncluso cond!c!ones que determ!nen ran#os de 'alores. Otros$ como es el caso de Ja'a$ slo perm!te usar e)pres!ones de t!po entero$ & como et!quetas slo 'alores !nd!'!duales$ aunque queramos que se (a#an las m!smas acc!ones para 'ar!os de ellos. Como cas! s!empre$ un e%emplo puede a&udar "astante a entender esto. E5e*0$o: Bacer un pro#rama que pueda d!"u%ar una recta$ un punto o un rectn#ulo. Algoritmo Dibujo Var op' car0cter Escribir 12Introd3ce 3na opcin4 15 ,3nto 25 Recta .5 Rect0n#3lo46 7eer op Se#$n Sea op 214' 89dib3:ar p3nto98 555555555 224' 89dib3:ar recta98 5555555555 2.4' 89dib3:ar rect0n#3lo98 5555555555 2otro4' escribir 2opcin errnea4 Fin-Se#$n O)%o E5e*0$o: Bacer un al#or!tmo para leer una nota num0r!ca & escr!"!r en pantalla la cal!f!cac!n asoc!ada4 Algoritmo LeerNotaEscribirCalificacin Var nota' entero 7eer nota Se#$n Sea nota 155;' escribir 12s3spenso46 <55=' escribir 12aprobado46 >55?' escribir 12)otable46 @' escribir 12Sobresaliente46 1A' escribir 12Matric3la de honor46 +tro &aso' escribir 12)ota errnea5 Slo se ad"iten notas entre 1 y 1A46 Fin-Se#$n Inicio Leer nota Leer nota opcin Escribir uspenso! Escribir notable! Escribir aprobado! Escribir sobresaliente! "in Escribir #. $onor! Escribir nota errnea 1..% &..' (..) * +tro caso 1, En al#unos len#ua%es se perm!te poner una cond!c!n que determ!ne un ran#o. -l#o como lo que se !nd!ca a cont!nuac!n4 Se#,n sea nota nota I?5 & nota H?44 escr!"!r *suspenso+ K Puedes 'er la ela"orac!n de este al#or!tmo en la s!mulac!n del arc(!'o Pseudocodigo_R;.00) en la que cada paso es comentado para que comprendas lo que p!ensa el pro#ramador al d!seLar un al#or!tmo. En pseudocd!#o supondremos que no se pueden poner cond!c!ones de este t!po en las sentenc!as select!'as m,lt!ples$ &a que son !nfrecuentes en los len#ua%es$ & adems Ja'a que es el len#ua%e que usaremos en el curso$ no las perm!te. -s1 nos 'amos acostum"rando. Estructuras re!etiti$as# cclicas o iterati$as. Son muc(as las s!tuac!ones en las que para soluc!onar un pro"lema es necesar!o repet!r una ser!e de pasos (asta que se cons!#a un determ!nado resultado$ o m!entras se cumpla una determ!nada cond!c!n. P!ensa por e%emplo en el profesor que corr!#e & e'al,a los e)menes de los alumnos de una clase. Ba"r una ser!e de tareas que tendr que repet!r para cada alumno .co#er el e)amen$ corre#!r cada pre#unta$ puntuarlas$ sumar la puntuac!n del e)amen$ anotar la nota en su cuaderno$ #uardar el e)amen/. M todos esos pasos de"er repet!rlos m!entras que queden e)menes de alumnos .o (asta que se a#oten los e)menes$ que es otra forma de dec!r lo m!smo/ Las estructuras repet!t!'as son aquellas que cont!enen un "ucle .con%unto de !nstrucc!ones que se rep!ten un n,mero f!n!to de 'eces/. Cada repet!c!n del "ucle se llama !terac!n. Todo "ucle t!ene que lle'ar asoc!ada una cond!c!n$ que es la que 'a a determ!nar cuando se rep!te el "ucle. Despu0s de cada !terac!n se 'uel'e a e'aluar la cond!c!n$ & s! s!#ue cumpl!0ndose$ se 'uel'en a e%ecutar todas las sentenc!as del "ucle. En las !nstrucc!ones del "ucle de"e (a"er al#una o al#unas que mod!f!quen el 'alor de la cond!c!n para e'!tar que entremos en un "ucle !nf!n!to. S! la cond!c!n es 'erdadera cuando entramos$ & no (a& nada que la mod!f!que$ s!empre se#u!r s!endo 'erdadera & 'ol'eremos a real!zar otra !terac!n$ (asta el !nf!n!to. Los )i0os de &uc$es so-: Mie-)%'s < +'ce% =+i$e < do Re0e)i% < +'s)' Re0e') < u-)i$ Desde >o% Los "ucles t!po *repeat+ son ms adecuados cuando sa"emos que las sentenc!as del "ucle s!empre se 'an a tener que e%ecutar al menos una 'ez. Estructura repetitiva tipo mientras-.acer /0.ile-do1 CCuando ser aprop!ado usar este t!po de "ucle en 'ez de otro> S! es necesar!o compro"ar la cond!c!n antes de (acer n!n#una de las acc!ones que de"en repet!rse$ 0sta es la estructura adecuada. La cond!c!n del "ucle se e'al,a al pr!nc!p!o$ antes de entrar en 0l. S! la cond!c!n es 'erdadera$ comenzamos a e%ecutar las acc!ones del "ucle & despu0s de la ,lt!ma 'ol'emos a e'aluar la cond!c!n para 'er s! (a& que 'ol'er a e%ecutar el "ucle de nue'o. En el momento en el que la cond!c!n sea falsa nos sal!mos del "ucle & e%ecutamos la s!#u!ente sentenc!a poster!or al "ucle. -l e'aluarse la cond!c!n al pr!nc!p!o$ antes de entrar en el "ucle$ si $' co-dici/- ,' es #'$s' $' 0%i*e%' 1e9, -o e-)%'%e*os e- e$ &uc$e, , -o se e5ecu)'%. -i-gu-' de $'s 'ccio-es (ue co-)ie-e -i-gu-' 1e9. Por tanto usaremos o"l!#ator!amente este t!po de "ucle en el caso de que e)!sta la pos!"!l!dad de que el "ucle no de"a e%ecutarse n!n#una 'ez. La estructura en pseudocd!#o es4 Mientras <condicin> hacer < acciones > Fin-Mientras 9na 'ez ms$ un e%emplo puede a&udar. E5e*0$o: G!ra la descr!pc!n del s!#u!ente al#or!tmo4 3ueremos (allar el producto de 'ar!os n,meros pos!t!'os !ntroduc!dos por teclado. El proceso de"e term!nar cuando se meta un n,mero ne#at!'o. En un apartado anter!or se descr!"! la soluc!n en d!a#rama de flu%o$& a(ora lo (acemos con pseudocd!#o & usando la estructura c1cl!ca m!entras-(acer4 Bl#orit"o ,rod3cto Var ,C n3"' entero Inicio , 1 7eer n3" Mientras n3" >=A hacer , , 9 n3" 7eer n3" Fin-Mientras Escribir 1,6 Fin O)%o E5e*0$o: Leer 7 n,meros & dar su suma4 PSEUDOCDIGO Algoritmo uma2res3umeros Inicio Cont , uma , Cont 4 5 Leer num uma uma6num Cont Cont 6 1 Escribir suma "in "L78+9RA#A Bl#orit"o S3"arDres)3"eros Var &ontC S3"aC n3"' entero Inicio &ont A S3"a A Mientras &ont < . 7eer n3" S3"a S3"a E n3" &ont &ont E 1 Fin "ientras Escribir 1FFla s3"a esGGC S3"a6 Fin En la s!mulac!n del arc(!'o Pseudocodigo_R?.00) puedes o"ser'ar cmo se e%ecutar1a el al#or!tmo con un e%emplo. D'do e$ siguie-)e '$go%i)*o e- 0seudoc/digo, @cu.$ es e$ %esu$)'do co%%ec)oA % 1 R A Mientras %<=; R% 9 R % %E1 Fin-Mientras Eespuesta4 E?N D'do e$ siguie-)e '$go%i)*o e- 0seudoc/digo, @cu.$ es e$ %esu$)'do co%%ec)oA % 1 R 1 "ientras %<=. R% 9 R % %E1 Fin-Mientras Eespuesta4 E?F D'do e$ siguie-)e '$go%i)*o e- 0seudoc/digo, @cu.$ es e$ %esu$)'do co%%ec)oA &ont A S3"a A Mientras cont < . S3"a S3"a E &ont &ont &ont E 1 Fin-Mientras Eespuesta4 Suma?7 Estructura repetitiva tipo repetir-.asta /repeat-until1 CP!ensas que esta estructura ser adecuada para los m!smos casos que la estructura c1cl!ca t!po (acer-m!entras> Se#,n se m!re. Es pos!"le constru!r una sentenc!a (acer-m!entras usando otra t!po repet!r-(asta$ pero 0sta ,lt!ma es mu& adecuada en aquellos casos que queremos #arant!zar que las sentenc!as del "ucle se 'an a e%ecutar al menos una 'ez. S! por e%emplo el "ucle t!ene que repet!r la lectura de un n,mero (asta que tome un 'alor ma&or que 8$ sa"emos que s!empre 'amos a tener que (acer al menos la pr!mera lectura. S! es la adecuada$ no se repet!r ms la lectura$ pero por lo menos un n,mero se#uro que neces!tamos leer. En este t!po de "ucles$ se rep!ten las sentenc!as que !nclu&e (asta que la cond!c!n sea 'erdadera$ que es lo m!mo que dec!r que se rep!te m!entras la cond!c!n sea falsa. La cond!c!n se e'al,a s!empre al f!nal del "ucle$ s! es falsa 'ol'emos a e%ecutar las acc!ones$ s! es 'erdad se sale del "ucle. Como la cond!c!n se e'al,a al f!nal$ !ncluso aunque la pr!mera 'ez &a sea 'erdadera$ (a"remos pasado al menos una 'ez por el "ucle & real!zado una !terac!n. No o"stante$ al#unos len#ua%es$ como Ja'a$ no t!enen e)actamente esta estructura$ s! no una parec!da$ que podr1amos llamar *repet!r-m!entras+. .Do- :(!le/ Por lo dems es !#ual. Las acc!ones del "ucle se (acen al menos una 'ez$ & al f!nal del "ucle se e'al,a la cond!c!n$ & s! es c!erta$ se 'uel'e a repet!r el "ucle. S! es falsa$ se sale del "ucle. -unque la cond!c!n fuera falsa de entrada$ la pr!mera 'ez de todas formas se e%ecutar1a. Es dec!r$ func!ona e)actamente !#ual que un repeat-unt!l s! ponemos %ustamente la cond!c!n contrar!a. .ser1a lo m!smo dec!r *rep!te las acc!ones (asta que nI5N+ que dec!r *(az las acc!ones m!entras n H?5N+/ Naturalmente se podr1a (acer lo m!smo que (ace cualqu!er "ucle repet!r O (asta usando "ucles m!entras O (acer. La estructura repet!r-(asta$ en pseudocd!#o ser1a4 Repetir <acciones> hasta <condicin> Como s!empre$ es oportuno 'erlo con un e%emplo. E5e*0$o: Otra forma de conse#u!r el m!smo resultado para el al#or!tmo del punto anter!or$ que le1a n,meros pos!t!'os & los mult!pl!ca"a (asta que se !ntroduc1a un ne#at!'o ser1a usar la estructura repet!r-(asta4 Bl#orit"o ,rod3cto Var ,C n3"' entero Inicio , 1 Repetir 7eer n3" Si n3" >=A Entonces , , 9 n3" Fin-Si Hasta n3" < A Escribir p Fin O)%o E5e*0$o: Leer 7 n,meros & dar su suma4 Bl#orit"o S3"arDres)3"eros Var &ontC S3"aC n3"' entero Inicio &ont A S3"a A Repetir 7eer n3" S3"a S3"a E n3" &ont &ont E 1 Hasta &ont >= . Escribir FFla s3"a esGGC S3"a Fin -unque parece (acer lo m!smo que el e%emplo usando (acer-m!entras del apartado anter!or$ no son totalmente !#uales$ &a que s! por e%emplo Cont se !n!c!al!za a 7 en am"os$ el pr!mero .m!entras/ no se e%ecutar1a n!n#una 'ez$ m!entras que el se#undo .repet!r/ se e%ecutar1a la pr!mera 'ez s!empre. Para conse#u!r el m!smo efecto en el pr!mer caso$ "astar1a con cop!ar todas las sentenc!as del "ucle %usto delante del m!smo$ para que se e%ecutaran de forma !ncond!c!onal la pr!mera 'ez antes de compro"ar la cond!c!n. En ese caso el efecto ser1a el m!smo$ pero el esfuerzo de escr!"!r el "ucle por dupl!cado no merece la pena. Inicio Cont , uma , Cont 4 5 Leer num Escribir uma "in uma uma6num Cont Cont 6 1 D'do e$ siguie-)e '$go%i)*o e- 0seudoc/digo, @cu.$ es e$ %esu$)'do co%%ec)oA s3"a 1 cont 1 Repetir n3" 29cont s3"a s3"a En3" cont cont cont E 1 Hasta cont >= . Eespuesta4 Suma?P Estructura repetitiva tipo :or. En los casos anter!ores tenemos que repet!r un con%unto de sentenc!as una ser!e de 'eces$ pero no tenemos en cuenta s! conocemos de antemano o no el n,mero de 'eces que se t!ene que e%ecutar el "ucle. CEs pos!"le s!mpl!f!car las cosas s! sa"emos que un "ucle se de"e repet!r$ por e%emplo$ e)actamente P 'eces> Justamente es lo que (ace el cic$o )i0o #o%. Este t!po de "ucles se ut!l!za cuando se sa"e &a antes de e%ecutar el "ucle el n,mero e)acto de 'eces que (a& que e%ecutarlo. Para ello el "ucle lle'ar asoc!ada una 'ar!a"le que denom!namos 'ar!a"le 1nd!ce$ a la que le as!#namos un 'alor !n!c!al & determ!namos cual 'a a ser su 'alor f!nal. La 'ar!a"le 1nd!ce se 'a a !ncrementar o decrementar en cada !terac!n del "ucle en un 'alor constante$ pero esto se 'a a (acer de manera automt!ca al term!nar cada !terac!n$ .el pro#ramador no se t!ene que ocupar de !ncrementar o decrementar esta 'ar!a"le en cada !terac!n/$ s!no que 'a a ser una operac!n !mpl1c!ta .lo (ace !nternamente la prop!a estructura/. Por tanto en cada !terac!n del "ucle$ la 'ar!a"le 1nd!ce se actual!za automt!camente & cuando alcanza el 'alor que (emos puesto como f!nal se term!na la e%ecuc!n del "ucle. En al#unos len#ua%es como C o Ja'a$ esta estructura se (a mod!f!cado para con'ert!rla en una 'ers!n reduc!da de un "ucle t!po m!entras-(acer$ !ntroduc!endo al#unas d!ferenc!as$ como 'eremos ms adelante$ al !ntroduc!rnos en el uso de Ja'a. La estructura en pseudocd!#o es4 Desde <Variable=alor inicial > hasta <alor !inal> paso <incre"ento> hacer <acciones> Fin-Desde El m!smo e%emplo de la suma de tres n,meros$ podemos 'erlo con una estructura t!po for. E5e*0$o: Leer 7 n,meros & dar su suma4 PSEUDOCDIGO Bl#orit"o S3"arDres)3"eros Var &ontC S3"aC n3"' enteros Inicio S3"a A Desde &ont = A hasta 2 paso 1 7eer n3" S3"a S3"a E n3" Fin-Desde Escribir FFla s3"a esGGC S3"a Fin E;emplos de algoritmos resueltos. Se pretende que ten#as a tu d!spos!c!n al#unos e5e*0$os de di'g%'*'s de #$u5o , 0seudoc/digos (ue %e0%ese-)'- '$gu-os '$go%i)*os$ para que te fam!l!ar!ces con su uso$ & te s!r'an de #u1a a la (ora de resol'er tus prop!os pro"lemas & representar la soluc!n de forma clara. Puesto que la f!nal!dad es comprender & fam!l!ar!zarse con el uso de las estructuras "s!cas de control de flu%o$ la func!onal!dad prct!ca de los e%emplos es l!m!tada$ & fundamentalmente se e)ponen e%emplos que requ!eren efectuar clculos matemt!cos$ &a que en ellos el pro"lema a resol'er suele estar ms claro. Ba& que de%ar claro que !ncluso en estos e%erc!c!os$ "astante "s!cos$ es pos!"le encontrar 'ar!as soluc!ones$ que aunque parec!das ten#an l!#eras d!ferenc!as entre s1. S! 'ar!os de 'osotros !ntent!s resol'er estos pro"lemas$ u otros s!m!lares$ cas! con toda se#ur!dad que las soluc!ones encontradas tendrn d!ferenc!as$ que en al#,n caso pueden ser !ncluso s!#n!f!cat!'as. En la ma&or1a de los pro#ramas que se a"ordan .en el curso & en la '!da real/ normalmente no e)!ste una ,n!ca soluc!n 'l!da. Nuestra o"l!#ac!n es encontrar la ms senc!lla & ef!c!ente. Pero eso se cons!#ue slo con la prct!ca$ por lo que una tarea !mportante en esta un!dad ser que 'osotros os entren0!s en la descr!pc!n de al#or!tmos que soluc!onen pro"lemas. Estos e%emplos por ser los pr!meros$ lle'an muc(os comentar!os .que no t!enen efecto en su func!onam!ento$ & que (emos d!ferenc!ado por ello en otro color/$ pero dada la s!mpl!c!dad de estos al#or!tmos$ en cond!c!ones normales no de"er1an lle'ar n! tantos comentar!os n! tan e)tensos. Inicio %&'()*RAMA A$go%i)*o Su*'T%esNu*e%os uma , Leer num Leer num uma uma6num Cont < ,= 1= > Escribir uma "in C?lculo del per@metro A super:icie de un c@rculo= le@do el valor del radio. 3ueremos calcular la superf!c!e & el per1metro de un c1rculo$ una 'ez !ntroduc!do por teclado el 'alor del rad!o$ & escr!"!r los resultados. Se supone conoc!do Q ? 7.545F$ & que las frmulas para la superf!c!e & el per1metro son4 Sup ? Q r 6 & Per ? 6 Q r s!endo r el 'alor del rad!o. PSEUDOCDIGO Bl#orit"o &irc3lo 89 Declaracin de la constante ,I5 Se declara co"o constante porI3e s3 alor no a a ca"biar598 &onst ,I = .51;1= 89 Declaracin de ariables5 De tipo real para I3e ad"itan deci"ales598 Var RadioC S3per!icieC ,er/"etro ' real Inicio 89 ,ide I3e se !acilite el alor del Radio 98 Radio Valor le/do por teclado 89 &o"pr3eba si el alor del Radio es correcto 98 Si el alor del Radio no es 3n entero positio oler a pedirlo5 En caso contrario contin3ar con el paso si#3iente5 89 &alc3la"os la s3per!icie y el per/"etro se#$n la !r"3la 98 S3per!icie ,I 9 Radio 9 Radio ,er/"etro 2 9 ,I 9 Radio 89 Escribi"os los res3ltados 98 Escribir 12El c/rc3lo de radio 4 C Radio C 2 tiene 3na s3per!icie de 4 C S3per!icie C 2 y 3n per/"etro de 4 C ,er/"etro6 Fin Puedes 'er dos e%emplos de la e%ecuc!n de este al#or!tmo en la s!mulac!n del arc(!'o Pseudocodigo_RB.00). En el pr!mero de los e%emplos el func!onam!ento es !nmed!ato &a que se !ntroduce 'alor 4 para el rad!o del c1rculo. En el se#undo el rad!o que se !ntroduce es errneo & de"e 'ol'er a ped!rlo. Inicio Inicio Bedir el radio Calcular Ber@metro < pi C > C radio Calcular Ber@metro < pi C > C radio Calcular uper:icie < pi C radio C radio Calcular uper:icie < pi C radio C radio #ostrar Ber@metro A uper:icie #ostrar Ber@metro A uper:icie "in "in %&'()*RAMA D Es v?lido E 3o i D Es v?lido E 3o i Intercambio del valor de dos variables. Se trata de una operac!n mu& "s!ca$ pero frecuente. Suponemos que tenemos dos 'ar!a"les de t!po entero$ - & R$ a las que se les (a dado un 'alor cualqu!era desde teclado$ & que queremos !ntercam"!ar sus 'alores de forma que en - s!empre quede el menor de los dos 'alores !ntroduc!dos. Como sal!da$ de"e escr!"!rse el 'alor que ten1an !n!c!almente - & R & de nue'o los 'alores de - & R una 'ez ordenados. PSEUDOCDIGO Bl#orit"o Interca"bioVariables Var BC JC B3%iliar ' entero 89 B3%iliar se 3sa para poder interca"biar los alores sin perder nin#3no598 Inicio 7eer B 7eer J 89 Bl escribirC separa"os entre co"as los distintos ele"entos I3e I3ere"os escribir5 7o I3e a entre co"illas es 3n literal I3e se escribe tal y co"o est05 7o I3e no llea co"illasC es 3na ariableC constante o e%presin I3e se s3stit3ye al escribir por s3 alor 98 Escribir 12Inicial"ente B= 4C B C 2 y J= 4C J6 89 Si B es "ayor I3e JC se interca"bian s3s aloresC y si no lo esC no es necesario hacer nada especialC ya est0n ordenados 98 Si 1B > J6 Entonces B3%iliar B 89 Se copia en B3%iliar el alor de B 98 B J 89 Se escribe en B el alor de JC I3e s3stit3ye a s3 anterior alor 98 J B3%iliar 89 Se escribe en J el alor de B3%iliarC I3e es 3na copia del alor inicial de B 98 Fin-Si Escribir 12Desp3Ks de ordenar B= 4C B C 2 y J= 4C J6 Fin Inicio Inicio Bedir A A F Bedir A A F #ostrar A A F ordenados "in "in %&'()*RAMA D on v?lidos E 3o i D on v?lidos E 3o i D A 4 F E 3o i #ostrar A A F AuGiliar A AuGiliar A A F A F F AuGiliar F AuGiliar Calcular la media de varias notas le@das desde teclado. 3ueremos calcular la med!a de 'ar!as notas que se !ntroducen desde teclado. - pr!or! no sa"emos cuntas notas 'an a leerse$ por lo que lo pr!mero que (aremos en nuestro al#or!tmo es pre#untarlo .leer un n,mero pos!t!'o que nos !nd!que cuntas son/. - cont!nuac!n las leeremos$ descartando los 'alores que no sean correctos$ calcularemos la med!a & escr!"!remos su 'alor en pantalla. PSEUDOCDIGO Bl#orit"o Media)otas Var cantidad)otasC contadorC notaC s3"aDotalC "edia ' real 89 7a "edia y las notas p3eden tener deci"ales 98 Inicio 89 Se repite la lect3ra de la cantidad de notas hasta I3e sea 3n alor positio 98 Repetir 7eer cantidad)otas Hasta cantidad)otas > A s3"aDotal A 89 Se inicialiLa s3"aDotal al alor cero 98 89 Se hace 3n b3cle I3e se repite tantas eces co"o se indiI3e en cantidad)otas 98 Desde contador = 1 hasta cantidad)otas paso 1 7eer nota 89 7ee"os la pri"era nota98 89 Mientras I3e sea 3na nota errneaC se rechaLa y se 3ele a leer otra nota 98 Mientras nota < A + nota > 1A hacer Escribir 12)ota errnea5Valor "/ni"o A y "0%i"o 1A5 V3ela a introd3cir la nota46 7eer nota Fin-Mientras 89 Desp3Ks de cada nota correcta le/da se ac3"3la a la s3"a total 98 s3"aDotal s3"aDotal E nota Fin-Desde 89 3na eL le/das todas las notas correcta"enteC calc3la"os la "edia 98 "edia s3"atotal 8 cantidad)otas 89 Final"ente escribi"os adec3ada"ente el res3ltado 98 Escribir 127a "edia de las 4 C cantidad)otasC 2 notas le/das es 4 C "edia6 Fin Inicio &eer cantidad+otas cantidad+otas ,- 3o .ontador/ .ontador0,cantidad+otas i &eer +ota i +ota0- nota,/- Escribir nota errnea &eer +ota i 3o Sumatotalsumatotal 1 nota .ontador contador 1 / 3o Mediasumatotal 2cantidad notas Escribir media %in %&'()*RAMA Lectura de 1,, nmeros= indicando cantidad de positivos= negativos A nulos= calculando la suma de cada tipo. 3ueremos leer una ser!e de 5NN n,meros enteros desde teclado$ !nd!cando cuntos de ellos son pos!t!'os$ cuntos ne#at!'os$ & cuntos cero. Tam"!0n se p!de calcular la suma de los ne#at!'os$ la suma de los pos!t!'os & su med!a$ & la suma de los 5NN. Se desea mostrar con'en!entemente los 'alores calculados. PSEUDOCDIGO: Bl#orit"o S3"a,ositios)e#atios)3los Var &ontadorC n3"eroC n,ositiosC n)e#atiosC n&erosC s3"a,ositiosC s3"a)e#atiosC s3"aDotal ' entero "edia,ositios ' real 89 7a "edia la a"os a calc3lar con deci"ales 98 Inicio 89 InicialiLa"os todas las ariables ac3"3ladoras para ase#3rarnos de I3e alen cero 98 s3"a,ositios A s3"a)e#atios A s3"aDotal A "edia,ositios A n)e#atios A n,ositios A n&eros A 89 Repeti"os 3n b3cle 1AA ecesC leyendo en cada iteracin 3n n$"ero y clasi!ic0ndolo y act3aliLando los ac3"3ladores I3e correspondan 98 Desde contador = 1 hasta 1AA paso 1 7eer n3"ero 89 Bc3"3la"os el alor del n$"eroC es decirC a la s3"a total le s3"a"os el n3"ero I3e acaba"os de leer 98 s3"aDotal s3"aDotal E n3"ero 89 &o"proba"os si el n$"ero es ne#atio5 Si lo es conta"os 3n positio "0s y lo s3"a"os a la s3"a de los positios598 Si n3"ero < A entonces n)e#atios n)e#atios E 1 s3"a)e#atios s3"a)e#atios E n3"ero 89 Si no es ne#atioC co"proba"os si es cero5 Si lo es conta"os 3n cero "0s598 Si no Si n3"ero = A entonces n&eros n&eros E 1 89 Si no es ne#atio ni es ceroC tiene I3e ser positio5 S3"a"os 3n positio "0s y ac3"3la"os el n$"ero a la s3"a de positios 98 Si no n,ositios n,ositios E 1 s3"a,ositios s3"a,ositios E n3"ero Fin-Si Fin-Si Fin-Desde 89 Mna eL le/dosC clasi!icados y ac3"3lados los 1AA n$"erosC calc3la"os la "edia de los positios encontrados 98 "edia,ositios s3"a,ositios 8 n,ositios 89 N !inal"ente escribi"os los res3ltados 98 Escribir 1 2En total se han le/do 4 C n,ositios C 2 n$"eros positiosC 4 C ne#atios C 2n$"eros ne#atios y 2 C n&eros C 2ceros46 Escribir 127os positios s3"an 4 C s3"a,ositios C 2 y s3 "edia es 4 C "edia,ositios6 Escribir 127os ne#atios s3"an 4 C s3"a)e#atios6 Escribir 127a s3"a de los 1AA n$"eros le/dos es 4 C s3"aDotal6 Fin Inicio umaBositivos , uma3egativos, uma2otal , mediaBositivos , n3egativos , nBositivos , nCeros , Contador < 1= 1,,=1 Leer numero suma2otal suma2otal6numero 3umero 4 , 3umero < , i 3o i nBositivos nBositivos61 umaBositivos sumaBositivos6numero 3o nCeros nCeros 6 1 n3egativos n3egativos61 uma3egativossuma3egativos6numero mediaBositivos sumaBositivosHnBositivos Escribir nBositivos= n3egativos= nCeros= sumaBositivos= suma negativos= suma2otal "in "L78+9RA#A Leer nmeros positivos A contar: cu?ntos son pares A cu?ntos impares. El pr!nc!pal pro"lema de este e%erc!c!o es que no sa"emos cuntos n,meros 'amos a rec!"!r & adems que es prec!so d!st!n#u!r entre pares e !mpares .para ello de"e comparar el resto de d!'!d!r el n,mero por 6/. Por ,lt!mo es necesar!o ut!l!zar una 'ar!a"le para contar pares & otra para contar !mpares. 3ueremos leer n,meros pos!t!'os para 'er s! son pares o !mpares$ contando cuntos se leen de cada t!po & calculando la suma de cada t!po & la suma del total de n,meros pos!t!'os le1dos. Tam"!0n contaremos cuntos n,meros pos!t!'os (emos le1do en total. Los n,meros ne#at!'os sern rec(azados$ & estaremos le&endo n,meros (asta que se lea un cero. El 'alor cero lo usaremos como *centinela+ para sa"er cundo tenemos que sal!r del "ucle que nos lee cada n,mero. PSEUDOCDIGO Bl#orit"o n3"eros,aresI"pares Var n3"eroC n)3"erosC total)3"erosC n,aresC total,aresC nI"paresC totalI"pares ' entero Inicio 89 InicialiLa"os las ariables a cero5 ,ara n3"ero no es necesario ya I3e la pri"era eL I3e lo 3sa"os es :3sta"ente para darle 3n alor le/do desde teclado598 n)3"eros A total)3"eros A n,ares A total,ares A nI"pares A totalI"pares A 89 7ee"os el pri"er n$"ero antes de entrar en el b3cle598 Escribir 12Introd3Lca 3n n$"ero positio o A para ter"inar46 7eer n3"ero 89 Mientras el n$"ero sea distinto de ceroC ole"os a hacer otra iteracin para leer otro n3eo n$"ero5 7a pri"era eLC si el n$"ero I3e se ha le/do antes del b3cle es ceroC habre"os ter"inado sin leer nin#$n n$"ero5 Si es distinto de ceroC hare"os 3na iteracin en la I3e procesa"os ese n$"ero le/doC y al !inal lee"os otro n$"ero para la si#3iente iteracin598 Mientras n3"ero <> A hacer 89 &o"proba"os si el n$"ero le/do es ne#atio5 En caso a!ir"atioC lo descarta"osC y salta"os a la sentencia de lect3ra del si#3iente n$"eroC para oler a leerlo598 Si n3"ero < A entonces Escribir 12ERR+R' Debe introd3cir 3n n$"ero positio o cero5 V3ela a intentarlo46 89 Si no es ne#atioC lo procesa"os con nor"alidadC ya I3e es 3n n$"ero positio5 )o p3ede ser 3n cero porI3e si la $lti"a lect3ra !3e de 3n ceroC al co"probar la condicin del b3cleC ser/a !alsa y no habr/a"os entrado en Kl5 Si esta"os en este p3ntoC es porI3e he"os entradoC l3e#o no era 3n cero 98 Si no total)3"eros total)3"eros E n3"ero n)3"eros n)3"eros E 1 89 Si el resto de diidir el n3"ero entre 2 1operador "d3lo6 es ceroC I3iere decir I3e se trata de 3n n$"ero par5 En caso contrarioC ser0 i"par598 Si 1n3"ero "od 26 = A entonces n,ares npares E 1 total,ares total,ares E n3"ero Si no nI"pares nI"pares E 1 totalI"pares totalI"pares E n3"ero Fin-Si Fin-Si 89 7ect3ra del n$"ero para la si#3iente iteracin 98 Escribir 12Introd3Lca 3n n$"ero positio o A para ter"inar46 7eer n3"ero Fin-Mientras 89 Escrit3ra de los res3ltados 98 Escribir12Se han le/do 4 C n)3"erosC 2n$"eros positiosC de los I3e 4 C n,ares C 2son pares y 4C nI"pares C 2 son i"pares46 Escribir 127a s3"a de los pares es 4Ctotal,aresC4 y la s3"a de los i"pares es 4 C totalI"pares C 45 7a s3"a total es 4 Ctotal)3"eros6 Fin Inicio n3umeros , total3umeros , nBares , totalBares , nImpares , totalImpares , Escribir IntroduIca numJ, , para terminar Leer numero numero 4J, Escribir error numero 4 , numero K><<, nImpares nImpares 6 1 totalImpares totalImpares 6 numero Escribir IntroduIca otro numero! Leer numero Escribir n3umeros= nBares= nImpares= totalBares= totalImpares=total3umeros "in nBares nBares 6 1 totalBares totalBares 6 numero i i 3o 3o 3o C?lculo del sueldo neto= en :uncin de las .oras traba;adas A de los impuestos a deducir. La d!f!cultad de este e%erc!c!o rad!ca en que ut!l!za un ele'ado n,mero de 'ar!a"les & frmulas que es necesar!o usar adecuadamente. 3ueremos (acer un al#or!tmo para calcular el sueldo neto semanal de un tra"a%ador & la deducc!n por !mpuestos a apl!carle en func!n de las (oras tra"a%adas en esa semana. Se supone que se !ntroducen por teclado el n,mero de (oras tra"a%adas en la semana %unto al nom"re del tra"a%ador. Las (oras se pa#an a tar!fa normal (asta las pr!meras 4N (oras$ & como tar!fa e)tra las que pasen de esa cant!dad. La tar!fa normal es de P$8 S la (ora. La tar!fa e)tra es un 8NT ms cara que la tar!fa normal. 9na 'ez calculado el sueldo "ruto se calculan los !mpuestos a deduc!r$ ten!endo en cuenta lo s!#u!ente4 Los pr!meros 58N S semanales no pa#an !mpuestos. Los s!#u!entes 58N S pa#an una tasa de !mpuestos del 58T El resto de salar!o pa#a una tasa de !mpuestos del 78T Se neces!ta escr!"!r como sal!da el nom"re del tra"a%ador$ su sueldo "ruto$ los !mpuestos a pa#ar & el sueldo neto. PSEUDOCDIGO Bl#orit"o &alc3loDelS3eldo &onst tari!a)or"al = >5< Var no"breE"pleado ' &adena horas ' entero s3eldoJr3to C s3eldo)etoC i"p3estos ' real Inicio 7eer no"breE"pleado 7eer horas 89 7as pri"eras ;A horas se pa#an a tari!a nor"al598 Si horas <;A entonces s3eldoJr3to horas 9 tari!a)or"al 89 7as pri"eras ;A horas se pa#an a tari!a nor"al y el resto a 1C< eces la tari!a nor"al598 Si no s3eldoJr3to ;A 9 tari!a)or"al E 1horas -;A6 9 tari!a)or"al 9 15< Fin-Si 89 7os pri"eros 1<A O no pa#an i"p3estos 98 Si s3eldoJr3to <= 1<A entonces i"p3estos A Si no 89 Si el s3eldo br3to es "ayor de 1<A O pero "enor o i#3al I3e .AAC todo lo I3e pase de 1<A pa#a 3nos i"p3estos del 1<P 98 Si s3eldoJr3to <= .AA entonces i"p3estos A51< 9 1s3eldoJr3to Q 1<A6 89 Si el s3eldo es "ayor I3e .AAC los pri"eros 1<A O no pa#an i"p3estosC los si#3ientes 1<A hasta lle#ar a .AA pa#an el 1<P y el resto pa#an el .<P 98 Si no I"p3estos 1<A 9A51< E 1s3eldoJr3to -.AA6 9 A5.< Fin-Si Fin-Si 89 El s3eldo neto se calc3la rest0ndole los i"p3estos al s3eldo br3to 98 s3eldo)eto s3eldoJr3to Q i"p3estos 89 Salida de los res3ltados 98 Escribir 1no"breE"pleado C 2S3eldo Jr3to = 4C s3eldoJr3to C 25 Retencin i"p3estos = 4 C i"p3estos C 25 SB7BRI+ )ED+ = 4C s3eldo)eto C 2546 Fin Leer nombreEmpleado .oras 4 %, .oras 4 %, Inicio Inicio Leer .oras Leer .oras sueldoFruto .oras C tari:a3ormal sueldoFruto %, C tari:a3ormal 6 /.oras L %,1 C tari:a3ormal C 1.& i 3o ueldoFruto 41&, Impuestos , i ueldoFruto 45,, i 3o Impuestos ,.1& C/ sueldoFruto L 1&,1 Impuestos 1&,C ,.1&6/ sueldoFruto L 5,,1C,.5& sueldo3eto sueldoFruto - Impuestos Escribir nombreEmpleado= sueldoFruto= impuestos= sueldo3eto "in "in "L78+9RA#A C?lculo del :actorial de un nmero entero positivo o nulo. El factor!al se calcula como un producto de 'alores que 'amos calculando al restar 5 al resultado anter!or. Lo ms compl!cado es ut!l!zar el "ucle controlado por un contador descendente. 3ueremos calcular el factor!al de un n,mero entero le1do desde teclado. -unque e)!ste una soluc!n %ecu%si1' para este pro"lema$ no es la que apl!caremos aqu1. En su lu#ar usaremos la soluc!n !terat!'a. .poster!ormente en una un!dad ded!cada a la recurs!'!dad se anal!zar con detalle el concepto de %ecu%si1id'd/. El factor!al de un n,mero entero pos!t!'o o nulo n se def!ne como4 nU ? 5 $ s! n 'ale N nU ? n D .n-5/ D .n-6/ D .n-7/ D C D 6 D 5 $ s! n I ?5 PSEUDOCDIGO Bl#orit"o Factorial Var nC !actorialC contador ' entero Inicio 89 RealiLa"os la pri"era lect3ra 98 Escribir 12Introd3Lca 3n n$"ero positio o n3lo para calc3lar s3 !actorial46 7eer n 89 Si el n$"ero le/do es ne#atioC y "ientras I3e los I3e si#a"os leyendo lo si#an siendoC ser0 descartado y 3elto a leer5 ,or tantoC no saldrK del b3cle hasta haber le/do 3n n$"ero "ayor o i#3al a cero598 Mientras n <A hacer Escribir 12ERR+R' slo se ad"iten n$"eros positios o n3los para el c0lc3lo del !actorial5 V3ela a introd3cir el n$"ero46 7eer n Fin-Mientras 89 InicialiLa"os !actorial a 1 para I3e al "3ltiplicar la pri"era eL ten#a"os el res3ltado correcto 98 !actorial = 1 89 contador a a ser 3sado para ir to"ando los alores nC n-1C n-2C ( I3e son los !actores I3e hay I3e ir "3ltiplicando para calc3lar el !actorial5 ,or eso lo inicialiLa"os al alor de nC y en cada iteracin del b3cle repetir ire"os decre"ent0ndolo en 3na 3nidad para ir "3ltiplicando por 3n n3eo !actor598 contador n 89 Si el n$"ero es distinto de ceroC calc3la"os el alor de !actorial con el ciclo repetirC en el I3e e"peLa"os "3ltiplicando por contadorC inicialiLado al alor de n5 Si es ceroC no tene"os I3e hacer nadaC p3esto I3e s3 !actorial ale 1C I3e es :3sta"ente el alor de inicialiLacin de la ariable !actorial598 Si n <> A entonces Repetir !actorial !actorial 9 contador contador contador Q 1 Hasta contador = A Fin-Si 89 Escrit3ra del res3ltado 98 Escribir 1nC 2R = 4 C !actorial6 Fin Escribir IntroduIca numero n 4 , Inicio Leer n Escribir Error Leer n "actorial1 contador n n 4J , :actorial :actorial C contador contador contador - 1 Contador < , i 3o i 3o i 3o Escribir :actorial "in "L78+9RA#A C?lculo de las soluciones reales de una ecuacin de segundo grado. Vste es un e%erc!c!o t1p!co de pro#ramac!n$ &a que de"!do al resultado o"ten!do en el d!scr!m!nante de la frmula las soluc!ones o"ten!das pueden 'ar!ar desde dos ra1ces reales a no tener n!n#una. Presta atenc!n a la forma en que se tratan las frmulas. Dada una ecuac!n de se#undo #rado con la forma #eneral a3 4 1 b3 1 c 5 -$ & le1dos desde teclado los 'alores de sus coef!c!entes .a# b# c/$ se qu!ere determ!nar s! t!ene soluc!n real o no$ & s! t!ene soluc!n$ calcularla & escr!"!rla. La frmula de la ecuac!n de se#undo #rado se supone conoc!da4 3 5 67b 8 Rai9.uadrada6b 4 : ;<a<c== 2 64<a= PSEUDOCDIGO Bl#orit"o Ec3acionSe#3ndoSrado Var aC bC cC discri"inanteC %1C %2' real Inicio 7eer a 7eer b 7eer c Si a = A entonces 89 )o es de se#3ndo #rado 98 Si b = A entonces 89 )i siI3iera es 3na ec3acin 98 Escribir 12Error' )o es 3na ec3acinC y por tanto no tiene sol3cin46 Si no 89 De pri"er #rado b%Ec=A 98 %1 -c8b Escribir 12Real"ente es 3na ec3acin de pri"er #radoC c3ya sol3cin es %= 4C %16 Fin-Si Si no 89 De se#3ndo #rado 98 discri"inante b9b Q ;9a9c Si discri"inante = A entonces %1 -b8129a6 Escribir 12Slo tiene 3na sol3cinC a3nI3e es dobleC I3e es %= 4 C %16 Si no 89 Discri"inante distinto de cero 98 Si discri"inante > A 89 distinto de cero y ade"0s positio 98 %1 1-b E RaiL&3adrada1discri"inante668129a6 %2 1-b - RaiL&3adrada1discri"inante668129a6 Escribir12Diene dos sol3ciones si"plesC I3e son %1= 4 C %1 C 2 y %2= 4 C %26 Si no 89 discri"inante distinto de ceroC pero ne#atioC por lo I3e no se p3ede calc3lar s3 ra/L c3adrada dentro de los n$"eros reales 98 Escribir 12)o tiene sol3cin realC a3nI3e s/ se podr/a resoler en el con:3nto de n$"eros &o"ple:os46 Fin-Si Fin-Si Fin-Si Fin Escribir la ecuacin slo tiene una solucin!= G1 Inicio Leer a= b= c Leer a= b= c a<, a<, b<, b<, discriminante bCb L %CaCc discriminante<, G1-bH/>Ca1 Escribir la ecuacin slo tiene una solucin!= G1 discriminanteJ, M1/-b 6 //discriminante1N/-1H>11H>Ca1 M>/-b - //discriminante1N/-1H>11H>Ca1 Escribir la ecuacin tiene dos soluciones!= G1= G> Escribir la ecuacin no tiene solucin! G1-cHb Escribir no es ecuacin A no tiene solucin! %in %in S! No S! No S! No S! No %&'()*RAMA