Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de...

122
Problemas y algoritmos Un enfoque práctico Edith Lovos Martín Goin Lecturas de Cátedra

Transcript of Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de...

Page 1: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

Problemas y algoritmos

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos Martiacuten Goin

Lecturas de Caacutetedra

Utilice su escaacutener de coacutedigo qr para acceder

a la versioacuten digital

Iacutendice

Dedicatorias 9Agradecimientos 10Proacutelogo 11Capiacutetulo 1 Conceptos baacutesicos de programacioacuten 13

1 1 Etapas en la programacioacuten 151 1 1 Definicioacuten del problema 161 1 2 Anaacutelisis del problema 161 1 3 Disentildeo del algoritmo 16

1 2 Pre y poscondiciones de un algoritmo 171 3 Ejercicios propuestos 181 4 Expresioacuten de algoritmos 19

Capiacutetulo 2 Diagramacioacuten loacutegica 212 1 Programa FreeDFD 232 2 iquestQueacute son las variables 27

2 2 1 Coacutemo darle valor a una variable 282 2 2 Intercambio de variables 29

2 3 Estructuras de control 302 3 1 Estructura de control de decisioacuten o seleccioacuten 30

2 3 1 1 Estructura de control de decisioacuten simple 302 3 1 2 Estructura de control de decisioacuten doble 322 3 1 3 Estructura de control de decisiones anidadas 352 3 1 4 Estructura de control de decisiones independientes 36

2 4 Operadores de relacioacuten 372 5 Operadores loacutegicos 37

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo 382 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo 392 5 3 Negacioacuten o complemento loacutegico laquonotraquo 39

2 6 Otros operadores matemaacuteticos especiales 432 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control

de decisioacuten 482 8 Estructura de control de repeticioacuten 50

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo) 532 8 2 Variables como acumuladores 552 8 3 Variable contadora 552 8 4 Maacuteximos y miacutenimos 622 8 5 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquopararaquo 652 8 6 Estructura de control de repeticioacuten (sentencia laquomientrasraquo) 662 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de

repeticioacuten laquomientrasraquo 72

Capiacutetulo 3 Pseudocoacutedigo 733 1 PSeInt 733 2 Operadores loacutegicos 803 3 Ejercicios pseudocoacutedigo 87

Capiacutetulo 4 Entorno de programacioacuten visual 894 1 Variables del programa DaVinci 934 2 Conociendo la ciudad del robot 944 2 Repeticioacuten 974 3 Modularizacioacuten 1064 4 Paraacutemetros formales y reales 1104 5 Variables globales y locales 1124 6 Ejercicios Da Vinci 114

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 2: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Problemas y algoritmos

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos Martiacuten Goin

Lecturas de Caacutetedra

Utilice su escaacutener de coacutedigo qr para acceder

a la versioacuten digital

Iacutendice

Dedicatorias 9Agradecimientos 10Proacutelogo 11Capiacutetulo 1 Conceptos baacutesicos de programacioacuten 13

1 1 Etapas en la programacioacuten 151 1 1 Definicioacuten del problema 161 1 2 Anaacutelisis del problema 161 1 3 Disentildeo del algoritmo 16

1 2 Pre y poscondiciones de un algoritmo 171 3 Ejercicios propuestos 181 4 Expresioacuten de algoritmos 19

Capiacutetulo 2 Diagramacioacuten loacutegica 212 1 Programa FreeDFD 232 2 iquestQueacute son las variables 27

2 2 1 Coacutemo darle valor a una variable 282 2 2 Intercambio de variables 29

2 3 Estructuras de control 302 3 1 Estructura de control de decisioacuten o seleccioacuten 30

2 3 1 1 Estructura de control de decisioacuten simple 302 3 1 2 Estructura de control de decisioacuten doble 322 3 1 3 Estructura de control de decisiones anidadas 352 3 1 4 Estructura de control de decisiones independientes 36

2 4 Operadores de relacioacuten 372 5 Operadores loacutegicos 37

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo 382 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo 392 5 3 Negacioacuten o complemento loacutegico laquonotraquo 39

2 6 Otros operadores matemaacuteticos especiales 432 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control

de decisioacuten 482 8 Estructura de control de repeticioacuten 50

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo) 532 8 2 Variables como acumuladores 552 8 3 Variable contadora 552 8 4 Maacuteximos y miacutenimos 622 8 5 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquopararaquo 652 8 6 Estructura de control de repeticioacuten (sentencia laquomientrasraquo) 662 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de

repeticioacuten laquomientrasraquo 72

Capiacutetulo 3 Pseudocoacutedigo 733 1 PSeInt 733 2 Operadores loacutegicos 803 3 Ejercicios pseudocoacutedigo 87

Capiacutetulo 4 Entorno de programacioacuten visual 894 1 Variables del programa DaVinci 934 2 Conociendo la ciudad del robot 944 2 Repeticioacuten 974 3 Modularizacioacuten 1064 4 Paraacutemetros formales y reales 1104 5 Variables globales y locales 1124 6 Ejercicios Da Vinci 114

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 3: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos Martiacuten Goin

Lecturas de Caacutetedra

Utilice su escaacutener de coacutedigo qr para acceder

a la versioacuten digital

Iacutendice

Dedicatorias 9Agradecimientos 10Proacutelogo 11Capiacutetulo 1 Conceptos baacutesicos de programacioacuten 13

1 1 Etapas en la programacioacuten 151 1 1 Definicioacuten del problema 161 1 2 Anaacutelisis del problema 161 1 3 Disentildeo del algoritmo 16

1 2 Pre y poscondiciones de un algoritmo 171 3 Ejercicios propuestos 181 4 Expresioacuten de algoritmos 19

Capiacutetulo 2 Diagramacioacuten loacutegica 212 1 Programa FreeDFD 232 2 iquestQueacute son las variables 27

2 2 1 Coacutemo darle valor a una variable 282 2 2 Intercambio de variables 29

2 3 Estructuras de control 302 3 1 Estructura de control de decisioacuten o seleccioacuten 30

2 3 1 1 Estructura de control de decisioacuten simple 302 3 1 2 Estructura de control de decisioacuten doble 322 3 1 3 Estructura de control de decisiones anidadas 352 3 1 4 Estructura de control de decisiones independientes 36

2 4 Operadores de relacioacuten 372 5 Operadores loacutegicos 37

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo 382 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo 392 5 3 Negacioacuten o complemento loacutegico laquonotraquo 39

2 6 Otros operadores matemaacuteticos especiales 432 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control

de decisioacuten 482 8 Estructura de control de repeticioacuten 50

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo) 532 8 2 Variables como acumuladores 552 8 3 Variable contadora 552 8 4 Maacuteximos y miacutenimos 622 8 5 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquopararaquo 652 8 6 Estructura de control de repeticioacuten (sentencia laquomientrasraquo) 662 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de

repeticioacuten laquomientrasraquo 72

Capiacutetulo 3 Pseudocoacutedigo 733 1 PSeInt 733 2 Operadores loacutegicos 803 3 Ejercicios pseudocoacutedigo 87

Capiacutetulo 4 Entorno de programacioacuten visual 894 1 Variables del programa DaVinci 934 2 Conociendo la ciudad del robot 944 2 Repeticioacuten 974 3 Modularizacioacuten 1064 4 Paraacutemetros formales y reales 1104 5 Variables globales y locales 1124 6 Ejercicios Da Vinci 114

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 4: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Utilice su escaacutener de coacutedigo qr para acceder

a la versioacuten digital

Iacutendice

Dedicatorias 9Agradecimientos 10Proacutelogo 11Capiacutetulo 1 Conceptos baacutesicos de programacioacuten 13

1 1 Etapas en la programacioacuten 151 1 1 Definicioacuten del problema 161 1 2 Anaacutelisis del problema 161 1 3 Disentildeo del algoritmo 16

1 2 Pre y poscondiciones de un algoritmo 171 3 Ejercicios propuestos 181 4 Expresioacuten de algoritmos 19

Capiacutetulo 2 Diagramacioacuten loacutegica 212 1 Programa FreeDFD 232 2 iquestQueacute son las variables 27

2 2 1 Coacutemo darle valor a una variable 282 2 2 Intercambio de variables 29

2 3 Estructuras de control 302 3 1 Estructura de control de decisioacuten o seleccioacuten 30

2 3 1 1 Estructura de control de decisioacuten simple 302 3 1 2 Estructura de control de decisioacuten doble 322 3 1 3 Estructura de control de decisiones anidadas 352 3 1 4 Estructura de control de decisiones independientes 36

2 4 Operadores de relacioacuten 372 5 Operadores loacutegicos 37

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo 382 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo 392 5 3 Negacioacuten o complemento loacutegico laquonotraquo 39

2 6 Otros operadores matemaacuteticos especiales 432 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control

de decisioacuten 482 8 Estructura de control de repeticioacuten 50

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo) 532 8 2 Variables como acumuladores 552 8 3 Variable contadora 552 8 4 Maacuteximos y miacutenimos 622 8 5 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquopararaquo 652 8 6 Estructura de control de repeticioacuten (sentencia laquomientrasraquo) 662 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de

repeticioacuten laquomientrasraquo 72

Capiacutetulo 3 Pseudocoacutedigo 733 1 PSeInt 733 2 Operadores loacutegicos 803 3 Ejercicios pseudocoacutedigo 87

Capiacutetulo 4 Entorno de programacioacuten visual 894 1 Variables del programa DaVinci 934 2 Conociendo la ciudad del robot 944 2 Repeticioacuten 974 3 Modularizacioacuten 1064 4 Paraacutemetros formales y reales 1104 5 Variables globales y locales 1124 6 Ejercicios Da Vinci 114

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 5: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Iacutendice

Dedicatorias 9Agradecimientos 10Proacutelogo 11Capiacutetulo 1 Conceptos baacutesicos de programacioacuten 13

1 1 Etapas en la programacioacuten 151 1 1 Definicioacuten del problema 161 1 2 Anaacutelisis del problema 161 1 3 Disentildeo del algoritmo 16

1 2 Pre y poscondiciones de un algoritmo 171 3 Ejercicios propuestos 181 4 Expresioacuten de algoritmos 19

Capiacutetulo 2 Diagramacioacuten loacutegica 212 1 Programa FreeDFD 232 2 iquestQueacute son las variables 27

2 2 1 Coacutemo darle valor a una variable 282 2 2 Intercambio de variables 29

2 3 Estructuras de control 302 3 1 Estructura de control de decisioacuten o seleccioacuten 30

2 3 1 1 Estructura de control de decisioacuten simple 302 3 1 2 Estructura de control de decisioacuten doble 322 3 1 3 Estructura de control de decisiones anidadas 352 3 1 4 Estructura de control de decisiones independientes 36

2 4 Operadores de relacioacuten 372 5 Operadores loacutegicos 37

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo 382 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo 392 5 3 Negacioacuten o complemento loacutegico laquonotraquo 39

2 6 Otros operadores matemaacuteticos especiales 432 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control

de decisioacuten 482 8 Estructura de control de repeticioacuten 50

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo) 532 8 2 Variables como acumuladores 552 8 3 Variable contadora 552 8 4 Maacuteximos y miacutenimos 622 8 5 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquopararaquo 652 8 6 Estructura de control de repeticioacuten (sentencia laquomientrasraquo) 662 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de

repeticioacuten laquomientrasraquo 72

Capiacutetulo 3 Pseudocoacutedigo 733 1 PSeInt 733 2 Operadores loacutegicos 803 3 Ejercicios pseudocoacutedigo 87

Capiacutetulo 4 Entorno de programacioacuten visual 894 1 Variables del programa DaVinci 934 2 Conociendo la ciudad del robot 944 2 Repeticioacuten 974 3 Modularizacioacuten 1064 4 Paraacutemetros formales y reales 1104 5 Variables globales y locales 1124 6 Ejercicios Da Vinci 114

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 6: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Capiacutetulo 3 Pseudocoacutedigo 733 1 PSeInt 733 2 Operadores loacutegicos 803 3 Ejercicios pseudocoacutedigo 87

Capiacutetulo 4 Entorno de programacioacuten visual 894 1 Variables del programa DaVinci 934 2 Conociendo la ciudad del robot 944 2 Repeticioacuten 974 3 Modularizacioacuten 1064 4 Paraacutemetros formales y reales 1104 5 Variables globales y locales 1124 6 Ejercicios Da Vinci 114

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 7: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Dedicatoria | 9

Dedicatorias

Se resume en el siguiente diagrama de Venn

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 8: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

10 | Lovos y Goin

Agradecimientos

Al Centro Interdisciplinario de Estudios sobre Derechos Inclusioacuten y Socie-dad (ciedis) al aacuterea de Desarrollo Estudiantil y al Departamento de Asun-tos Estudiantiles de la Universidad Nacional de Riacuteo Negro (unrn)

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 9: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Proacutelogo | 11

Proacutelogo

Este libro surge en el marco de una actividad de formacioacuten denominada Cur-so virtual de resolucioacuten de problemas usando algoritmos Un espacio para el desarrollo de competencias (Res 6832016) que se lleva adelante a traveacutes del Programa de Mejora de las Ciencias Exactas y Naturales en la Escuela Secundaria Como resultado de esa actividad el libro busca promover en el lector el desarrollo de su capacidad analiacutetica y creadora mejorando su destreza en el disentildeo de algoritmos que sirven como base para el desarrollo de programas

La ensentildeanza y aprendizaje de la programacioacuten es una actividad com-pleja tanto para docentes como para estudiantes En este sentido este libro busca ser una herramienta de apoyo En eacutel se exponen numerosos ejemplos y se intenta ayudar y acompantildear al lector a resolver los problemas planteados

El libro funciona como un tutorial que explica paso a paso las bases de la programacioacuten de modo muy sencillo Estaacute orientado a los primeros cursos de grado de carreras ndashingenieriacuteas profesorados licenciaturas tec-nicaturasndash que incluyan asignaturas vinculadas a la programacioacuten De esta forma resulta ideal para aquellos estudiantes que incursionan por primera vez en el mundo de la programacioacuten

El material se divide en cuatro capiacutetulos El primero es un resumen teoacuterico en el que se abordan los conceptos baacutesicos de la programacioacuten El segundo capiacutetulo tiene por objetivo avanzar de modo progresivo en el proceso de resolucioacuten de problemas con algoritmos usando como recurso el diagrama de flujo para su representacioacuten Con la intencioacuten de facilitar el proceso cognitivo se utilizaraacute el software FreeDFD que es de uso libre y gratuito Este capiacutetulo incluye cerca de 30 ejemplos praacutecticos que per-miten probar el programa y verificar los resultados Ademaacutes aborda los siguientes temas variables intercambio estructuras de control de deci-sioacuten (simple doble decisiones anidadas e independientes) operadores (de relacioacuten loacutegicos matemaacuteticos especiales) estructuras de control e ite-racioacuten (laquopararaquo laquomientrasraquo) variables contadoras y sumadoras maacuteximos y miacutenimos El tercer capiacutetulo presenta el pasaje del diagrama de flujo al pseudocoacutedigo si bien no es programable la intencioacuten es aproximarnos al lenguaje de programacioacuten realizando una traduccioacuten del modo graacutefico al coacutedigo (texto) Se propone el uso del software PSeInt de caraacutecter libre y gratuito Esta herramienta al igual que FreeDFD permite la ejecucioacuten de los algoritmos posibilitando la autocorreccioacuten Por uacuteltimo se presenta un capiacutetulo especial dedicado a la resolucioacuten de problemas usando el aplica-tivo visual DaVinci Concurrente

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 10: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

12 | Lovos y Goin

De esta forma se ofrecen diversas herramientas de asistencia en el aprendizaje de los conceptos baacutesicos de programacioacuten sumado a un con-junto de ejemplos

En el libro se presentan ejemplos praacutecticos resueltos Ademaacutes se pro-pone un conjunto de situaciones problemaacuteticas que le permitiraacuten al lector desarrollar las habilidades de resolucioacuten de problemas usando algoritmos

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 11: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Conceptos baacutesicos de programacioacuten | 13

Capiacutetulo 1 Conceptos baacutesicos de programacioacuten

Vivimos en un mundo donde la tecnologiacutea tiene un protagonismo muy importante en nuestra vida cotidiana Usamos cajeros automaacuteticos reali-zamos diferentes transacciones (bancarias comerciales y otras) a traveacutes de la web buscamos informacioacuten en Internet nos mantenemos comunicados a traveacutes de dispositivos moacuteviles (celulares tabletas etceacutetera) nos ubicamos y jugamos usando tecnologiacutea de geoposicionamiento (gps) La tecnologiacutea estaacute iacutentimamente relacionada a la programacioacuten sin esta nada tiene sen-tido nada funciona Cuando hablamos de programacioacuten la asociamos a la palabra informaacutetica

La Real Academia Espantildeola define la palabra informaacutetica como laquoEl conjunto de conocimientos cientiacuteficos y teacutecnicas que hacen posible el tratamiento automaacutetico y racional de la informacioacuten por medio de computadorasraquo

Ahora bien se deben precisar las respuestas a las siguientes preguntas iquestQueacute es informacioacuten iquestQueacute significa tratar la informacioacuten iquestQueacute significa que una parte del tratamiento sea automaacutetico y otra racional

Se entiende por informacioacuten a los hechos y representaciones de una situacioacuten los cuales pueden o no tener relacioacuten La informacioacuten para que pueda ser tratada por una maacutequina (computadora) necesita ser codificada en un lenguaje entendible por la maacutequina

Entonces hablar de tratamiento automaacutetico significa que seraacute la maacute-quina (autoacutemata) la que llevaraacute adelante el proceso iquestY coacutemo se logra esto Se logra codificando el razonamiento humano a traveacutes de una secuencia de instrucciones (programa)

Aprender a programar es programar para aprender

Mitchel Resnick (1956)

La frase pertenece al destacado profesor fiacutesico informaacutetico periodista y programador Participoacute

del disentildeo y desarrollo del Scratch (lenguaje de programacioacuten para educacioacuten 2005)

Fuente Joi Ito 2011

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 12: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

14 | Lovos y Goin

En la actualidad programar no es una actividad reservada solo a unas pocas personas (teacutecnicos ingenieros expertos licenciados etceacutetera) mu-chas lo toman como un juego un beneficio un desafiacuteo y hasta una aficioacuten

Como en toda disciplina hay aacutereas que son maacutes sencillas de aprender y otras no tanto Empezar por algo muy accesible nos daraacute el gusto de co-menzar a programar Luego la creacioacuten de soluciones maacutes elaboradas para problemas maacutes complejos nos ayudaraacute a incorporar conocimientos

Mientras existan la creatividad y las ganas de aprender tendremos la libertad de programar

Si tenemos que definir el teacutermino programacioacuten decimos que es la ac-cioacuten y el efecto de programar

El verbo programar tiene varios usos Se refiere a idear y ordenar las ac-ciones que se realizaraacuten en el marco de un proyecto como por ejemplo la preparacioacuten de maacutequinas para cumplir con una cierta tarea especiacutefica la preparacioacuten de un espectaacuteculo deportivo o artiacutestico la preparacioacuten de da-tos necesarios para obtener la solucioacuten de un caacutelculo a traveacutes de una calcu-ladora el disentildeo del sistema y la distribucioacuten de materias para una carrera o de temas para un curso o asignatura etceacutetera

En la actualidad la nocioacuten de programacioacuten se encuentra maacutes asocia-da a la programacioacuten en ciencias informaacuteticas En este sentido programar

Programar es lo maacutes cercano que tenemos a un superpoder

Drew Houston (1983)

Creador de Dropbox (almacenamiento de archivos en la nube para trabajar y compartir)

Los programadores son los magos del futuro

Gabe Newell (1962)

Director general de Valve Software (empresa desarrolladora de videojuegos)

Fuente Adaptado de Financial Times 2011

Fuente Game Developers Choice Awards 2010

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 13: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Conceptos baacutesicos de programacioacuten | 15

podriacutea resumirse como el proceso por el cual un programador escribe prueba depura y mantiene un coacutedigo a partir del uso de un lenguaje de programacioacuten Asiacute aprender a programar implica aprender ciencia y tec-nologiacutea La tecnologiacutea puede verse como el conjunto de herramientas teacutec-nicas y estaacutendares que permiten llevar adelante la programacioacuten Al hablar de ciencia se hace referencia a una teoriacutea amplia y profunda que permite entender la programacioacuten Ambos conocimientos son importantes ya que posibilitan enfrentar los retos de la evolucioacuten tecnoloacutegica

Por otra parte en estos tiempos como sentildealan Patricia Compantilde-Rosique y otros (2015) la programacioacuten es una viacutea posible para el desarrollo del pen-samiento computacional Es decir hacer uso de conceptos fundamentales de la informaacutetica para resolver problemas del quehacer cotidiano

1 1 Etapas en la programacioacuten

En la figura 11 se muestran las etapas para el desarrollo de un programa

Figura 1 1 Etapas de la programacioacuten

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 14: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

16 | Lovos y Goin

En este libro abordaremos las tres primeras definicioacuten del problema anaacutelisis del problema y disentildeo del algoritmo

1 1 1 Definicioacuten del problema

Esta fase estaacute dada por la especificacioacuten del problema el cual requiere una definicioacuten clara y precisa Es importante saber lo que se desea que realice la computadora mientras esta definicioacuten no sea lo suficientemente clara no tiene mucho sentido continuar con la siguiente etapa

1 1 2 Anaacutelisis del problema

Esta fase requiere de una clara definicioacuten en la que se contemple exacta-mente queacute debe hacer el programa y el resultado o la solucioacuten deseada En-tonces es necesario definir

bull datos de entrada (tipo y cantidad)bull datos de salida (tipo y cantidad) bull los meacutetodos y las operaciones que se necesitan para procesar los datos

En esta etapa se determina queacute debe hacer el programa para resolver el problema es decir la solucioacuten al mismo

Una recomendacioacuten muy praacutectica es la de ponernos en el lugar de la computadora y analizar queacute es lo que necesitamos ordenar y en queacute se-cuencia para producir los resultados esperados

1 1 3 Disentildeo del algoritmo

En esta etapa se determina coacutemo debe ser el proceso que lleva a la resolucioacuten del problema La palabra algoritmo deriva del nombre de un matemaacutetico aacuterabe del siglo ix llamado Al-Khuwarizmi quien describioacute varios meacutetodos para resolver cierto tipo de problemas aritmeacuteticos

El disentildeo de algoritmos es un recurso fundamental que permite resol-ver problemas relacionados con casi todas las disciplinas

La intencioacuten de este libro es que el lector adquiera las bases necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas

Definicioacuten de algoritmo es una secuencia no ambigua finita y ordena-da de pasos para poder resolver un problema

bull No ambigua implica que cada paso del algoritmo debe poder ser in-terpretado de una uacutenica forma

bull Finita significa que la cantidad de pasos que componen el algoritmo estaacute limitada El algoritmo empieza y termina

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 15: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Conceptos baacutesicos de programacioacuten | 17

bull Orden Los pasos del algoritmo deben seguirse en una determinada secuencia para llegar a la solucioacuten del problema

Resumiendo un algoritmo se puede pensar como una receta un conjunto de instrucciones o de especificaciones sobre un proceso para hacer algo que cumple con las caracteriacutesticas antes mencionadas

Ejemplos

Problema 1 Indique la manera de endulzar una taza que contiene cafeacuteAlgoritmo A Ponerle un poco de azuacutecar a la taza y revolverAlgoritmo B Agregarle una cucharadita de azuacutecar a la taza revolver y degustar Repetir el proceso hasta que quede dulceEl algoritmo A presenta una solucioacuten ambigua al problema planteado iquestA cuaacutento equivale un pocoEl algoritmo B presenta una solucioacuten adecuada al problema

Problema 2 Desarrolle un algoritmo que describa la forma de determinar la suma de todos los nuacutemeros naturales En este caso no es posible encontrar un algoritmo que resuelva el problema Ya que una de las caracteriacutesticas de un algoritmo es alcanzar la solucioacuten en un tiempo finito situacioacuten que no se cumpliraacute en este caso ya que los nuacutemeros naturales son infinitos

Problema 3 Llenar un pozo con piedras de un bolsoacutenAlgoritmo Tomar una pala Mientras haya piedras en el bolsoacuten cargar la pala con piedras y volcarla en el pozo Dejar la palaEsta solucioacuten es un algoritmo ya que cada paso es no ambiguo Por otra parte se puede asegurar que en alguacuten momento finalizaraacute (es finito) aunque no se sabe cuaacutentas paladas seraacuten necesariasiquestQueacute sucederiacutea si no contamos con la pala iquestSe podriacutea llevar adelante el proceso definido en el algoritmo

1 2 Pre y poscondiciones de un algoritmo

Precondicioacuten es la informacioacuten que se conoce como verdadera antes de comenzar el algoritmo

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 16: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

18 | Lovos y Goin

Poscondicioacuten es la informacioacuten que se conoce como verdadera despueacutes de finalizado el algoritmo siempre que se cumpla con las precondiciones

Problema 4 Determinar el resto de la divisioacuten entera entre dos nuacutemeros enteros N y MPrecondicioacuten N y M son nuacutemeros enteros M debe ser distinto de 0Poscondicioacuten el resultado seraacute un valor entero comprendido entre 0 y M-1 que representa el resto de aplicar la divisioacuten entera entre N y M

Problema 5 Indique la manera de endulzar una taza que contiene cafeacutePrecondicioacuten Contar con una cucharita y azuacutecar suficientePoscondicioacuten El cafeacute quedoacute dulce al finalizar el proceso

Problema 6 Determinar si el nuacutemero 437 es primoAlgoritmo Dividir el nuacutemero 437 entre cada uno de los nuacutemeros 1 2 3 4 436 Si una de las divisiones es exacta (resto 0) entonces el nuacutemero 437 no es primo caso contrario es primoPrecondicioacuten No hay ninguacuten requerimientoPoscondicioacuten Se ha podido determinar si el nuacutemero 437 es primo o no

Preguntas iquestConsideran que es una buena solucioacuten iquestQueacute otras podriacutean pensarse

1 3 Ejercicios propuestos

1 Escriba un algoritmo que permita cambiar una laacutempara quemada Indique pre y poscondiciones

2 Escriba un algoritmo que indique coacutemo hacer un huevo frito Indi-que pre y poscondiciones iquestEn queacute cambiariacutea el algoritmo si quisieacute-ramos cocinar 3 huevos en lugar de 1

3 Escriba un algoritmo para comprar 1 kg de pan migntildeon en la pana-deriacutea de la esquina de casa

4 Observe las dos soluciones que se presentan a continuacioacuten e indique si son o no un algoritmo Si no lo son modifiacutequelas para que lo sean

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 17: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores

Conceptos baacutesicos de programacioacuten | 19

Algoritmo 1 Algoritmo 2

Me visto raacutepidamenteMe levanto por la mantildeanaTomo una ducha de 10 minutosTomo un teacute con leche y me voyTermino de ducharme a las 725Llego temprano al colegioEl reloj marca las 715

Traer las herramientas que voy a usarHacer el arreglo con esmeroLocalizar el desperfectodel depoacutesitoPasar la factura por el trabajo hechoOrganizar coacutemo voy a hacer el trabajoVer queacute tipo de arreglo necesitaComprobar la eficiencia del arreglo

1 4 Expresioacuten de algoritmos

Para el disentildeo de un algoritmo puede utilizarse la diagramacioacuten loacutegica (dl) yo el pseudocoacutedigo

La diagramacioacuten loacutegica se basa en la representacioacuten graacutefica esquemaacute-tica de un algoritmo Es altamente intuitiva y didaacutectica e implica la cons-truccioacuten de circuitos loacutegicos utilizando siacutembolos mientras que el pseudo-coacutedigo es la representacioacuten descriptiva y textual (en lenguaje natural por ejemplo el espantildeol) de las operaciones que realiza un algoritmo

En este libro vamos a trabajar con ambas ya que consideramos que son un buen complemento para iniciarnos en la actividad de programar solu-ciones algoriacutetmicas

Para aquellos que incursionan por primera vez en el mundo de la progra-macioacuten es recomendable comenzar con la utilizacioacuten del diagrama de flujo

Recordemos que el procedimiento de desarrollo de algoritmos es inde-pendiente del lenguaje de programacioacuten que utilicemos maacutes adelante Es decir una vez disentildeado el algoritmo este podraacute ser luego escrito (traduci-do) en diferentes lenguajes de programacioacuten

Hasta aquiacute podemos resumir las caracteriacutesticas de un algoritmobull Debe tener un punto particular de inicio bull Debe estar definido sin ambiguumledades es decir no debe permitir

dobles interpretacionesbull Debe ser general es decir soportar las variantes que puedan presen-

tarse en la definicioacuten del problemabull Debe ser finito en tamantildeo y tiempo de ejecucioacuten

Adicionalmente los algoritmos pueden requerir de datos de entrada para producir datos de salida

20 | Lovos y Goin

Figura 1 2 Algoritmo

Datos de entrada un algoritmo tiene cero o maacutes entradas es decir la informacioacuten que recibe el algoritmo al comenzar o dinaacutemicamente mien-tras el algoritmo se ejecuta

Procesamiento de datos incluye las operaciones aritmeacutetico-loacutegicas cuyo objetivo es obtener la solucioacuten del problema

Salida de resultados permite comunicar al exterior el resultado Un al-goritmo puede producir una o maacutes salidas

Entonces la computadora es una maacutequina (herramienta) que por siacute sola no puede hacer nada necesita ser programada es decir que se le suministren instrucciones u oacuterdenes indicaacutendole aquello que debe hacer

Un programa es la solucioacuten a un problema inicial asiacute que todo comien-za alliacute en el problema Asiacute dado un determinado problema es necesario idear una solucioacuten y expresarla algoriacutetmicamente Luego de esto seraacute ne-cesario traducir el algoritmo (codificarlo) en un determinado lenguaje de programacioacuten y por uacuteltimo ejecutar el programa en la computadora Esto es a grandes rasgos lo que hace el programador

El disentildeo de algoritmos seraacute tema de los proacuteximos capiacutetulos comen-zando con la diagramacioacuten loacutegica y luego con el pseudocoacutedigo

La computadora es el Proteo de las maacutequinas Su esencia es su

universalidad su poder de simularSeymour Papert (1928-2016)

La frase pertenece al destacado cientiacutefico en computacioacuten matemaacutetica y educacioacuten

Es uno de los pioneros de la inteligencia artificial y creador del Logo (lenguaje

de programacioacuten para educacioacuten)

Fuente Adaptado de ak_mardini 2006

Diagramacioacuten loacutegica | 21

Capiacutetulo 2 Diagramacioacuten loacutegica

Vamos a dar inicio a este capiacutetulo con un ejemplo muy sencillo

El algoritmo permite el ingreso de dos nuacutemeros los suma y por uacuteltimo muestra el resultado

Para poder comprender el concepto de este graacutefico es necesario deter-minar el significado de cada uno de sus componentes

A continuacioacuten se describen cada uno de los elementos utilizados en el algoritmo

Comienza el algoritmo

Ingreso de datos (en estos casos setrata de dos valores numeacutericos A y B)

Asignacioacuten (en este caso se leasigna a la variable C la sumade A y B es decir C = A+B)

22 | Lovos y Goin

Salida de datos (en este caso se imprime lo que contiene la variable C)

Termina el algoritmo

Las flechas indican la direccioacuten del circuito (de ahiacute viene el nombre flujo)

La lectura de un diagrama se hace de la misma manera que la lectura de un libro (de izquierda a derecha y de arriba abajo)

Problema 1 Hallar el periacutemetro y el aacuterea de un rectaacutengulo ingresando la base b y la altura h

Es posible observar que en una misma caja de asignacioacuten se puede ha-cer maacutes de una operacioacuten (en este caso para asignar el resultado del caacutelculo del periacutemetro y del aacuterea de un rectaacutengulo)

Diagramacioacuten loacutegica | 23

Nota En la salida se pueden alternar carteles (mensajes) y datos mien-tras los primeros esteacuten entre comillas y ambos separados por comas En este caso seraacute ldquoEl Periacutemetro es ldquoPrdquo y el Aacuterea es ldquoAEjemplo si ingresamos b y h como 3 y 5 entonces la salida imprime lo siguiente El Periacutemetro es 16 y el Aacuterea es 15Atencioacuten Las operaciones aritmeacuteticas en los algoritmos deben expresar-se siempre en una liacutenea por ejemplo si queremos realizar la siguiente operacioacuten

92BC

Aminus +

=

es necesario escribirla de la siguiente manera C = (-B+9)(2A) El asterisco representa la multiplicacioacuten y la barra inclinada a derecha la divisioacuten

2 1 Programa FreeDFD

Para trabajar con diagramas de flujos se recomienda utilizar un software libre y gratuito FreeDFD 11 Este aplicativo fue desarrollado por estudian-tes de la Universidad de Magdalena Colombia y se distribuye bajo la licen-cia puacuteblica GNU (GPL)

Ademaacutes de ofrecer un manejo muy sencillo permite crear editar eje-cutar y corregir (cuando se presentan errores) el diagrama de flujo para verificar su funcionamiento

El programa es muy intuitivo por tratarse de una herramienta graacutefica e incluye ademaacutes un menuacute de ayuda muy completo

En esta seccioacuten nos centraremos en el uso baacutesico de las herramientas de disentildeo y depuracioacuten

El programa puede descargarse desde el sitio httpcodegooglecompfreedfd En Windows el archivo comprimido llamado FreeDFD-11zip tie-ne que ser descomprimido en una carpeta con su mismo nombre (esto es automaacutetico) En el grupo de archivos de dicha carpeta aparecen tres ejecu-tables (uno para cada idioma portugueacutes ingleacutes y espantildeol) el nuestro seraacute la aplicacioacuten ejecutable dfd-espantildeol En sistemas operativos GNULinux puede instalarse usando el software Wine

Al ingresar al programa nos encontraremos con la siguiente pantalla

24 | Lovos y Goin

Figura 1 3 Pantalla FreeDFD

En la parte superior tenemos el menuacute principal para acceder a todas las op-ciones posibles y debajo la barra de herramientas que funcionan como atajos

Maacutes abajo el sector de edicioacuten de trabajo Siempre comienza con los conectores laquoinicioraquo y laquofinraquo

Respecto a la barra de herramientas o botones

Figura 1 4 Botones FreeDFD

Los objetos son los elementos que permiten representar la solucioacuten al problema De izquierda a derecha son cursor asignacioacuten ciclo laquomientrasraquo ciclo laquopararaquo decisioacuten lectura salida y llamada

Por ejemplo si queremos construir el primer diagrama de flujo del ejemplo del libro tendriacuteamos que seguir los siguientes pasos

Diagramacioacuten loacutegica | 25

1 Para introducir entre los conectores laquoinicioraquo y laquofinraquo el siacutembolo de ingreso primero hacemos click en el iacutecono laquolecturaraquo de la barra laquoob-jetosraquo y luego nos acercamos con el mouse al destino deseado (a) La mano nos indica el sector permitido para colocar el objeto de lo contrario apareceraacute un cartel de prohibido (b) Luego de elegir la ubicacioacuten del objeto aparecen las marcas que indi-can que estaacute seleccionado (c)

2 Haciendo doble click sobre el objeto aparece la siguiente ventana

Dentro de la caja escribiremos las variables de entrada para nuestro caso AB

3 La entrada estaacute lista y se veraacute asiacute

a b c

26 | Lovos y Goin

4 Luego de armar por completo el diagrama de flujo como se observa en el primer ejemplo hay que ponerlo a prueba aunque se reco-mienda primero guardar el archivo (laquoArchivoraquo ndash laquoGuardar comoraquo)

5 Hacemos un click en el botoacuten laquoejecutarraquo (barra de ejecucioacuten) y apa-rece la ventana (laquoentrada de valores por tecladoraquo)Ingresamos entonces los valores (uno por cada entrada)

6 Luego muestra la salida (el resultado final) con la siguiente pantalla

Diagramacioacuten loacutegica | 27

7 Si el programa funcionoacute sin generar errores FreeDFD nos mostraraacute la siguiente ventana

Error de ejecucioacuten Si creamos el siguiente algoritmo y lo ejecuta-mos finalmente nos va a mostrar el error

Y ademaacutes nos va a indicar en color rojo el objeto donde se produjo el inconveniente En este caso lo va a marcar en el objeto de salida porque la variable C no contiene valor alguno

Nota Seriacutea beneficioso probar el ejemplo con el error y luego realizar y ejecutar el problema 1

2 2 iquestQueacute son las variables

Una variable es un espacio en la memoria de la computadora que permite almacenar temporalmente informacioacuten (dato) durante la ejecucioacuten del al-goritmo y cuyo contenido puede cambiar mientras se ejecuta el algoritmo

Para reconocer una variable es necesario darle un nombre o etiqueta que permita identificarla

Los nombres o etiquetas de las variables siempre deben empezar con una letra y no pueden contener espacios en blanco Si usamos maacutes de un caraacutecter para su identificacioacuten empezamos con una letra y luego podemos seguir con nuacutemeros o letras Estaacute permitido usar ldquo_rdquo entre medio

28 | Lovos y Goin

Ejemplos vaacutelidos A a B1 A20 AA1 Aa1 B2B Promedio SUMATORIA A_1 b1_2 Ejemplos no validos 1B 2c _S iquestA La variable

Se recomienda que el nombre de una variable represente el dato en siacute y que no sea extenso algunos ejemplos

Para una sumatoria rarr SPara dos sumatorias rarr S1 S2Para la sumatoria de edades rarr SEPara contar rarr CPara un promedio rarr P o PromPara el promedio de edades de mujeres rarr PEM

Atencioacuten No puede existir maacutes de una variable con el mismo nombre (identificacioacuten) en un mismo algoritmo y con distinta finalidad

Las variables pueden contener informacioacuten numeacuterica como alfanumeacute-rica es decir letras y siacutembolos siempre y cuando estos uacuteltimos sean expre-sados entre comillas

Ejemplos A1=rdquo20rdquo Nombre=rdquoSofiacuteardquo Simbolo=rdquoamprdquo

En cambio las variables que contienen nuacutemeros no necesitan de las comillas

Ejemplos G1=20 Precio=12985 Temperatura = -03

Analizar la diferencia entre las variables G1 y A1 de los ejemplos anterio-res No representan la misma informacioacuten en un caso es un valor numeacuterico y en otro una expresioacuten alfanumeacuterica

Ejemplos Calle=rdquoSan Martinrdquo Numero=rdquo201rdquo Domicilio=rdquoMoreno 77rdquo

Nota Los nombres de las variables no se acentuacutean

El valor de las variables y el tipo de operaciones que se puede realizar con ellas dependeraacute de si estas son numeacutericas o alfanumeacutericas En el caso de las variables numeacutericas las cuatro operaciones aritmeacuteticas baacutesicas son

suma (+) resta (ndash) divisioacuten () y multiplicacioacuten ()En el caso de las variables alfanumeacutericas se puede utilizar el operador +

para concatenar Analicemos el problema 2

Diagramacioacuten loacutegica | 29

2 2 1 Coacutemo darle valor a una variable

Existen dos formas de darle valor a una variable a traveacutes de la asignacioacuten o a traveacutes de la lectura de un valor

En FreeDFD para asignarle un valor podemos usar el operador de asig-nacioacuten larr o una funcionalidad propia del aplicativo que nos permite leer un dato desde un dispositivo de entrada (ejemplo teclado)

Es importante recordar que una variable tiene un uacutenico contenido en un momento dado es decir un valor actual Este valor puede cambiar du-rante la ejecucioacuten del programa pero siempre seraacute uacutenico y no quedaraacute re-gistro de cuaacuteles fueron los contenidos anteriores de la variable

Problema 2 Ingresar un nombre y un apellido en distintas variables y luego mostrar en forma concatenada el nombre seguido del apellido Por ejemplo si el nombre es Ana y el apellido Perez la salida seriacutea AnaPerez

Atencioacuten Si se ingresa N=rdquoManuelrdquo y luego A=rdquoBelgranordquo el resultado de la suma seraacute ldquoManuelBelgranordquo (falta separar el nombre y el apellido) en-tonces podriacuteamos dejar un espacio en blanco al final de ldquoManuel ldquo o bien al principio de ldquo Belgranordquo para solucionarlo iexclHagan la prueba

Pregunta iquestQueacute sucederiacutea si se quita la instruccioacuten que permite la lectura de A y N

30 | Lovos y Goin

Importante Una cuestioacuten problemaacutetica con las variables es su va-lor o contenido inicial En algunos lenguajes si una variable se usa sin antes haberle asignado un valor se le daraacute un valor por defecto mientras que en otros lenguajes eso podriacutea generar un error duran-te la ejecucioacuten del programa Entonces para evitar estas situacio-nes siempre que usemos una variable debemos darle un valor inicial Sugerencia Editar y ejecutar los problemas propuestos en el software FreeDFD para una mejor comprensioacuten

2 2 2 Intercambio de variables

El intercambio (swap) de los valores de dos variables no es un procedimien-to que pueda hacerse en forma directa es decir por ejemplo si A=8 y B=2 entonces si A=B (le asignamos a A el valor de B se pierde el valor original de A) y si luego hacemos B=A (le asignamos a B el valor de A) finalmente los valores de A y B seraacuten los mismos (en este caso ambos seraacuten iguales a 2)

Para solucionar esta situacioacuten debemos usar una variable auxiliar Para el caso anterior seraacute C=A A=B y B=C Entonces ahora tendremos

A=2 y B=8 En este caso C seraacute la variable auxiliarRecordemos que solo podemos intercambiar variables que tengan el

mismo tipo iquestQueacute sucede si dadas dos variables A=5 y B=7 intentamos llevar adelante las siguientes operaciones C=A A=B B=C

Importante El tipo de una variable especifica el conjunto de valores que puede tomar y las operaciones que pueden hacerse con ella

2 3 Estructuras de control

Las estructuras de control permiten controlar el flujo de ejecucioacuten de las instrucciones del programa tomar decisiones realizar acciones repeti-tivas etceacutetera dependiendo de unas condiciones que nosotros mismos establezcamos

El concepto de flujo de control se refiere al orden en que se ejecutan las sentencias o acciones (instrucciones) de un programa

En los ejemplos anteriores se ha trabajado con un flujo lineal tambieacuten llamado estructura secuencial asiacute las estructuras de control (de seleccioacuten y repeticioacuten) permiten alterar este orden de ejecucioacuten secuencial

Diagramacioacuten loacutegica | 31

2 3 1 Estructura de control de decisioacuten o seleccioacuten

Tambieacuten llamada de alternativa permite bifurcar el flujo de ejecucioacuten del programa en funcioacuten de una expresioacuten loacutegica o condicioacuten loacutegica

Con frecuencia aparecen en algoritmos situaciones en las cuales se debe elegir un camino dependiendo de los datos de entrada y la condicioacuten impuesta

El siacutembolo es un rombo acostado que tiene dos posibles salidas como se observa en la figura Siempre tomaraacute uno de los dos caminos (nunca ambos al mismo tiempo)

Una decisioacuten puede clasificarse en simple doble anidadas yo independientes

2 3 1 1 Estructura de control de decisioacuten simple

Veamos un ejemplo de un algoritmo que utiliza una decisioacuten simple

Problema 3 Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero (controlar dicho ingreso)

32 | Lovos y Goin

En este caso si al ejecutar el algoritmo se ingresa un valor de radio negativo o cero el programa simplemente termina ya que solo funciona cuando la condicioacuten radio gt 0 (expresioacuten loacutegica) es verdadera

Cuando se cumple la condicioacuten dentro del rombo el flujo de datos va para el lado del Siacute caso contrario se dirige hacia el No

Atencioacuten La estructura de control de decisioacuten debe tener como miacute-nimo una accioacuten a ejecutar en caso que se cumpla la condicioacuten En el ejemplo anterior podriacuteamos haber establecido la condicioacuten del SI con (radio lt = 0) en vez de (radio gt 0) entonces nos quedariacutea de la si-guiente manera

Lo cual es incorrecto

Diagramacioacuten loacutegica | 33

2 3 1 2 Estructura de control de decisioacuten doble

Esta estructura es similar a la anterior con la salvedad de que se indican acciones no solo para la rama verdadera sino tambieacuten para la falsa es decir en caso de que la expresioacuten loacutegica sea cierta se ejecuta una accioacuten o grupo de acciones y en caso de ser falsa se ejecuta otro grupo de acciones

Problema 4 Iacutedem al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

Cuando es falsa la expresioacuten loacutegica (radio gt 0) se ejecuta el camino que va en direccioacuten del No

Nota Los carteles en la salida siempre van entre comillas en este caso ldquoERRORrdquo

34 | Lovos y Goin

Veamos otro ejemplo

Problema 5 Se pide ingresar dos nuacutemeros y luego mostrar por mensaje cuaacutel es el mayor

En las salidas es posible combinar cartel y variable (texto y nuacutemeros) Por ejemplo probemos ingresar por pantalla los nuacutemeros 3 y 7 entonces el camino que tomaraacute el algoritmo seraacute el No al ser falsa la condicioacuten AgtB en consecuencia su salida mostraraacute El mayor es 7

Nota iquestQueacute sucede si ingresamos dos nuacutemeros iguales iquestCuaacutel seriacutea el re-sultado Lo verificamos ejecutando el algoritmo

Para solucionar el problema anterior debemos utilizar decisiones anidadas

En el objeto de salida del diagrama se pueden combinar texto y variables como en el caso anterior siempre y cuando esteacuten separados por comas

Diagramacioacuten loacutegica | 35

2 3 1 3 Estructura de control de decisiones anidadas

Existe la posibilidad de tener una decisioacuten dentro de otra a esto se lo llama decisiones anidadas y se usa cuando tenemos maacutes de una alternativa Para resolver el problema anterior (ingreso de dos nuacutemeros iguales) desarrolla-mos las indicaciones en el siguiente problema

Problema 6 Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

Nota Y si la primera condicioacuten es A=B iquestCoacutemo cambiariacuteas el algorit-mo para que siga funcionando perfectamente iquestTe animaacutes a hacerlo Atencioacuten La anidacioacuten tambieacuten se puede hacer dentro del camino del Siacute y ademaacutes se podriacutea producir maacutes de una vez

36 | Lovos y Goin

2 3 1 4 Estructura de control de decisiones independientes

Las decisiones independientes son aquellas que se establecen sin depender una de otras es decir sin estar relacionadas Simplemente se ubican una debajo de la otra y en cualquier orden ya que el orden no afectaraacute su ejecu-cioacuten Veamos un ejemplo

Problema 7 Ingresar dos nuacutemeros por teclado y sumarlos En caso que los nuacutemeros sean negativos previo a la suma se debe cambiar su signo

Nota En este caso tenemos dos decisiones simples que son independien-tes (podriacutean estar en cualquier orden) La operacioacuten N = (-1)N hace cam-biar el signo de negativo a positivo

Diagramacioacuten loacutegica | 37

2 4 Operadores de relacioacuten

La siguiente tabla nos muestra los distintos operadores de relacioacuten entre dos nuacutemeros

Operador Significado Equivalente en matemaacutetica

gt Mayor que gt

lt Menor que lt

gt= Mayor o igual que ge

lt= Menor o igual que le

= Igual =

= Distinto ne

Nota Es importante el orden en los siacutembolos cuando interviene el igual gt= y lt=

Estos operadores nos permiten establecer comparaciones entre variables

Ejemplo Establecer una comparacioacuten alfabeacutetica entre dos variables alfanumeacutericas Provincia1=rdquoNeuqueacutenrdquo Provincia2=rdquoChubutrdquo entonces decimos que la expresioacuten (Provincia1gtProvincia2) es verdadera y la expresioacuten (Provincia1ltProvincia2) es falsa

2 5 Operadores loacutegicos

Supongamos que quisieacuteramos saber si tres nuacutemeros son iguales utilizando decisiones Una solucioacuten posible seriacutea

38 | Lovos y Goin

Es decir que una decisioacuten depende de la anterior

Lo incorrecto es que suceda lo siguiente ya que las desigualdades siempre deben relacionarse de a pares

Para solucionarlo es necesario trabajar con los operadores loacutegicos laquoandraquo laquoorraquo y laquonotraquo

2 5 1 Conjuncioacuten loacutegica o producto loacutegico laquoandraquo

El efecto del operador laquoandraquo es la evaluacioacuten simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas

Asiacute por ejemplo la expresioacuten loacutegica A and B seraacute verdadera uacutenicamen-te si A y B lo son Cualquier otro estado para ambas variables daraacute como

Diagramacioacuten loacutegica | 39

resultado el valor falso puesto que basta con que una de las dos variables tenga valor falso para que ambas no sean simultaacuteneamente verdaderas

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Falso

Falso Verdadero Falso

Falso Falso Falso

2 5 2 Disyuncioacuten loacutegica inclusiva o suma loacutegica laquoorraquo

El efecto de este operador es la evaluacioacuten no simultaacutenea del estado de ver-dad de las variables loacutegicas involucradas Esto implica que al tener estado verdadero por lo menos una de las variables afectadas la operacioacuten daraacute un resultado verdadero

Asiacute tendremos que la expresioacuten A or B seraacute falsa uacutenicamente cuando el estado de ambas variables sea falso En cualquier otro caso la operacioacuten seraacute verdadera

Variables loacutegicas Resultado A and BA B

Verdadero Verdadero Verdadero

Verdadero Falso Verdadero

Falso Verdadero Verdadero

Falso Falso Falso

2 5 3 Negacioacuten o complemento loacutegico laquonotraquo

El efecto de este operador es negar el valor de la expresioacuten loacutegica como se indica en la siguiente tabla

Variables loacutegicas A Resultado not AVerdadero Falso

Falso Verdadero

Veamos algunos ejemplos para poder comprender un poco maacutes el concepto de operadores loacutegicos

40 | Lovos y Goin

Problema 8 Solicitar al usuario un nuacutemero natural y verificar que el nuacutemero ingresado se encuentre dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Nota La decisioacuten podriacutea reescribirse como (Ngt=1) and (Nlt=12) No es posible indicarlo como 1lt=Nlt=12 Esto generariacutea un error porque no seriacutea una expresioacuten loacutegica

Ahora el problema de los tres nuacutemeros iguales se puede resolver usando el operador loacutegico laquoandraquo de la siguiente manera

Diagramacioacuten loacutegica | 41

Nota Si al evaluar (A=B) se obtiene un resultado falso entonces no es necesario evaluar la expresioacuten (A=C) Esto se denomina evaluacioacuten de circuito corto si la primera expresioacuten es falsa como el operador que las vincula es un and aunque la segunda sea verdadera el resultado seraacute falso de ahiacute que no tenga sentido realizar la evaluacioacuten

Una condicioacuten puede expresarse en forma loacutegica usando maacutes de un operador (o y negacioacuten) A continuacioacuten se presenta un ejemplo

Problema 9 Se ingresa por teclado la categoriacutea de un socio del club deportivo Sol Naciente y su antiguumledad en antildeos Las categoriacuteas posibles son A B y C Luego se desea saber si el socio ingresado tiene categoriacutea A o su antiguumledad se encuentra entre los 10 y 20 antildeos en esos casos se pide mostrar un cartel que exprese lo siguiente ldquoSocio viprdquo

42 | Lovos y Goin

La expresioacuten loacutegica (Cat=rsquoArsquo)or((Antgt=10)and(Antlt=20)) permite ase-gurar que el socio cumple con las condiciones impuestas

Atencioacuten En FreeDFD para expresar un valor alfanumeacuterico es necesa-rio usar comillas simples Ejemplo Cat larr lsquoBrsquo En este caso a la varia-ble Cat se le asigna el valor lsquoBrsquo En cambio Cat=lsquoBrsquo expresa una com-paracioacuten entre el valor de la variable y el caraacutecter alfanumeacuterico lsquoBrsquo Es un error en una asignacioacuten expresar lsquoArsquo larr Cat porque la varia-ble debe ir a la izquierda y el valor asignado a la misma a la derecha pero si se tratara de una condicioacuten da lo mismo Cat=lsquoArsquo o lsquoArsquo=Cat iquestQueacute pasariacutea si ingresa lsquoarsquo (minuacutescula) iquestNuestro socio seraacute vip Si no funciona iquestcoacutemo podriacuteamos solucionarlo

Diagramacioacuten loacutegica | 43

Es comuacuten cometer errores usando operadores loacutegicos por ejemplo

(AgtB) and (A=B)

(Nlt10) and (Ngt20)

iquestCuaacutendo se cumpliraacuten estas condiciones

2 6 Otros operadores matemaacuteticos especiales

Ademaacutes de los operadores baacutesicos matemaacuteticos como (+- y ) existen otros operadores que se iraacuten trabajando a lo largo del texto En este capiacutetulo veremos los que son propios de la sintaxis de FreeDFD

La siguiente tabla muestra algunos de los operadores matemaacuteticos es-peciales para N N1 N2 variables numeacutericas

Operacioacuten Siacutembolo Sintaxis

Potencia ^ N1^N2

Raiacutez cuadrada sqrt sqrt(N)

Valor absoluto abs abs(N)

Seno sin sin(N)

Coseno cos cos(N)

Tangente tan tan(N)

Logaritmo neperiano ln ln(N)

Logaritmo decimal log log(N)

Exponencial e exp exp(N)

Nuacutemero aleatorio random random(N)

Moacutedulo mod N1 mod N2

A continuacioacuten se trabajaraacuten unos ejemplos con los operadores analizados

44 | Lovos y Goin

Problema 10 Se lee desde el teclado el valor de un aacutengulo en grados Se desea mostrar el coseno y el seno

Nota En el FreeDFD se puede optar por trabajar con aacutengulos en ra-dianes o en grados simplemente clickeando en laquoOpcionesraquo del menuacute Importante No es posible utilizar como identificadores de variables las palabras cos sin tan abs etceacutetera por ser palabras reservadas del len-guaje de FreeDFD

Diagramacioacuten loacutegica | 45

Problema 11 Se ingresan por teclado los catetos de un triaacutengulo rectaacutengulo Se desea hallar y mostrar su hipotenusa

Problema 12 Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

46 | Lovos y Goin

El operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros Para este caso cualquier nuacutemero natural (123infin) dividido 2 nos da un 1 o un 0 (cero) entonces los nuacutemeros pares tendraacuten como resultado un 0 mientras que los impares un 1

Problema 13 Ingresar un nuacutemero entero para saber si es divisible por 7 y es mayor a 40

Al tratarse de dos condiciones que se requiere que sean verdaderas es necesario utilizar el operador loacutegico laquoandraquo

El operador laquorandomraquo sirve para generar nuacutemeros al azar Por ejemplo si necesitamos generar nuacutemeros enteros entre el 0 y el 9 entonces la sinta-xis seraacute random(10) es decir que el valor N que se indica entre pareacutentesis permitiraacute generar nuacutemeros entre el 0 hasta el N-1

La siguiente tabla muestra algunas variantes para conseguir nuacutemeros aleatorios

Diagramacioacuten loacutegica | 47

Ejemplos Rango de valores obtenidosrandom(2) 0 y 1

radom(10)+1 Del 1 al 10

random(21)-10 Del -10 al 10

random(100)10 Del 00 al 99

random(101)10 Del 00 al 100

random(1001)100-5 Del -500 al 500

random(10)2 0 2 4 6 8 10hellip18

Problema 14 Mostrar en letras el nuacutemero de la cara de un dado obtenido al azar

48 | Lovos y Goin

Sabemos que son 6 las caras de un dado entonces la expresioacuten ran-dom(6)+1 genera nuacutemeros del 1 al 6 iquestQueacute podriacutea suceder si cambiamos la primera instruccioacuten de asignacioacuten por dado larr random(7)

Nota La uacuteltima decisioacuten del ejercicio anterior funciona por descarte ya que no necesita realizar otra consulta en el No se da por descartado que se trata de un 6 En estos casos cuando se tiene N casos posibles las deci-siones seraacuten N-1

Problema 15 Generar aleatoriamente una temperatura entre los -20ordm y los 40ordm y mostrar el resultado

2 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de decisioacuten

1 Disentildear un algoritmo que dados dos nuacutemeros muestre por pantalla su suma

2 Realice un algoritmo que solicite dos datos paiacutes y capital Y luego muestre la capital del paiacutes El cartel debe ser como lo indica el si-guiente ejemplo ldquoKatmanduacute es la capital de Nepalrdquo

3 Crear un algoritmo que muestre por pantalla el doble y el triple de un nuacutemero ingresado por teclado

4 Disentildear un algoritmo que imprima el cuadrado y el cubo de un nuacute-mero ingresado por teclado

Diagramacioacuten loacutegica | 49

5 Disentildear un algoritmo que pida un nuacutemero por teclado y luego im-prima el nuacutemero siguiente al ingresado

6 Disentildear un algoritmo que genere un nuacutemero aleatorio del 0 al 200 lo muestre y luego calcule y muestre el mismo nuacutemero aumentado en un 30

7 Disentildear un algoritmo que genere un nuacutemero aleatorio del 10 al 50 lo muestre y luego calcule y muestre el mismo nuacutemero disminuido en un 15

8 Disentildear un algoritmo que dados tres nuacutemeros enteros calcule e im-prima el promedio entre ellos

9 Disentildee un algoritmo para ingresar dos palabras (A B) y luego realice el intercambio de sus valores Finalmente mostrar el contenido de A y de B

10 Disentildear un algoritmo que imprima el aacuterea y el periacutemetro de un rec-taacutengulo ingresando su base y altura

11 Realice un algoritmo que calcule el volumen de un cilindro a partir de los valores de su radio y altura

12 Crear un algoritmo que convierta y muestre un valor ingresado en centiacutemetros a yardas metros pies y pulgadas

13 Disentildear un algoritmo que convierta y muestre la temperatura en Fahrenheit ingresando la temperatura en Celsius

14 Disentildear un algoritmo que calcule el volumen de un cilindro dados su radio y altura (primero el programa deberaacute verificar si son positivas)

15 Crear un algoritmo que calcule si dos nuacutemeros son divisibles Para ello se piden un primer nuacutemero y un segundo nuacutemero entonces mostrar un cartel que diga ldquoes divisiblerdquo si el segundo nuacutemero es divisible al primero

16 Disentildear un algoritmo para calcular el porcentaje de hombres y de mujeres que hay en un grupo dados los totales de hombres y de mujeres

17 Disentildear un algoritmo que indique con carteles si el nuacutemero ingresa-do es negativo positivo o nulo

18 Ingresar tres nuacutemeros y mostrar el mayor (asuma que todos son dis-tintos entre siacute)

19 Realice un algoritmo para mostrar un cartel que indique si un triaacuten-gulo es laquoescalenoraquo laquoequilaacuteteroraquo o laquoisoacutescelesraquo ingresando sus lados

20 Disentildear un algoritmo que imprima con un cartel el nuacutemero de do-cena (laquoprimeraraquo laquosegundaraquo o laquoterceraraquo) dado el resultado de una jugada de ruleta (del 0 al 36) Utilizar el operador loacutegico and

21 Crear un algoritmo que permita obtener y mostrar la cantidad de diacutegi-tos de un nuacutemero ingresado sabiendo que el maacuteximo permitido es 4

50 | Lovos y Goin

22 Crear un algoritmo que muestre cada uno de los diacutegitos de un nuacute-mero ingresado por el usuario El maacuteximo permitido es de 4 diacutegitos Por ejemplo si se ingresa el nuacutemero 187 entonces debe mostrar en un uacutenico cartel lo siguiente ldquod1 = 0 d2 = 1 d3 = 8 y d4 =7rdquo

23 Iacutedem al anterior pero se pide que muestre la suma de los diacutegitos del nuacutemero ingresado (maacuteximo 4 diacutegitos)

24 Disentildear un algoritmo que imprima con un cartel laquoCorrectoraquo seguacuten el siguiente caso si el numero N es muacuteltiplo de 5 y se encuentra en-tre los 25 primeros nuacutemeros N debe ser obtenido aleatoriamente entre nuacutemeros del 1 al 1000 Primero debe mostrar N

25 Disentildear un algoritmo que ingresando un numero de 5 diacutegitos detec-te si es capicuacutea y muestre un cartel laquoEs capicuacutearaquo o laquoNo es capicuacutearaquo seguacuten el resultado

26 Crear un algoritmo que muestre las soluciones de una ecuacioacuten cua-draacutetica (usando Bhaskara) a partir del ingreso de los valores de los co-eficientes del polinomio El polinomio tiene la forma P(x) = ax2+bx+c

27 Probar con a) P(x) = x2+3x+2 b) P(x) = 2x2+4x+2 c) P(x) = 3x2+2

2 8 Estructura de control de repeticioacuten

Hasta el momento se han presentado problemas que no requieren de re-peticiones de sentencias o acciones Sin embargo al momento de resolver problemas es muy comuacuten encontrarnos con situaciones repetitivas

Pensemos en el siguiente problema se desea determinar el promedio de las edades de 5 personas Una solucioacuten posible podriacutea ser leer 5 edades (variables) y luego calcular su promedio Ahora bien iquestqueacute sucede si en lugar de 5 personas son 100 o un valor N que ingresa el usuario

No es lo mismo hallar el promedio de tres nuacutemeros que el promedio de 100 o de un valor N que ingresa el usuario Veamos justamente coacutemo podriacuteamos resolver el problema propuesto con las herramientas trabajadas hasta el momento para tener una mejor idea

Diagramacioacuten loacutegica | 51

Problema 16 Ingresar 10 nuacutemeros (edades de personas) y luego hallar y mostrar su promedio

Solucioacuten 1

52 | Lovos y Goin

Solucioacuten 2

Nota Por una cuestioacuten de espacio se escribieron puntos suspensivos en reemplazo de lectura A y la asignacioacuten S larr S + A

Diagramacioacuten loacutegica | 53

La primera solucioacuten resuelve el problema en pocas liacuteneas pero utiliza una gran cantidad de variables La segunda solucioacuten utiliza pocas variables pero muchas liacuteneas de comando que se repiten de a pares (leer y sumar)

Basta imaginar si el algoritmo en vez de resolver el promedio con diez nuacutemeros debiera resolverlo para cien necesitariacuteamos para la solucioacuten 1 cien variables y para la solucioacuten 2 maacutes de doscientas liacuteneas de trabajo

Para poder tratar con este tipo de situaciones existen las estructuras de control de repeticioacuten laquopararaquo laquomientrasraquo y laquohacer-mientrasraquo

2 8 1 Estructura de control de repeticioacuten (sentencia laquopararaquo)

Cuando se desea ejecutar un conjunto de acciones un determinado nuacuteme-ro de veces usamos la sentencia laquopararaquo

En estos casos se requiere que conozcamos por anticipado el nuacutemero de repeticiones Para solucionar el problema del ejercicio anterior hacemos lo siguiente

54 | Lovos y Goin

De esta manera todo lo que encierra desde Para hasta Fin (Para) se re-pite tantas veces como lo indica el control de repeticioacuten

La variable S funciona como sumador o acumulador de A

La variable i comienza a contar los ciclos (vueltas) desde 1 hasta 10 con saltos de un paso

Se repiten las instrucciones que se encuentran entre el Para y el Fin (Para)

Problema 17 Hallar la sumatoria de 10 nuacutemeros generados al azar Los nuacutemeros deben comprender el siguiente rango de valores [120]

Preguntas Esta solucioacuten iquestresuelve el problema iquestCuaacutentas veces se ejecu-tan las instrucciones que se encuentran dentro del Para iquestEn queacute cambia el algoritmo si quisieacuteramos hacer esto para 200 nuacutemeros

Diagramacioacuten loacutegica | 55

2 8 2 Variables como acumuladores

Es una variable que como su nombre lo indica va a ser usada para sumar sobre siacute misma un conjunto de valores Cuando se utiliza dentro de un ciclo de repeticioacuten Para al finalizar el mismo esta variable contendraacute la suma-toria de todos los valores que cumplen una determinada condicioacuten (tam-bieacuten puede servir para decrementar valores variables) Es necesario haber inicializado su valor antes del comienzo de un ciclo de repeticioacuten laquopararaquo

La inicializacioacuten consiste en asignarle al sumador un valor inicial es de-cir el valor desde el cual necesitamos se inicie la sumatoria (por lo general comienzan en cero)

Ejemplo S = 0 S = S + N

2 8 3 Variable contadora

Es una variable que se encuentra en ambos miembros de una asignacioacuten a la que se le suma un valor constante Un contador es una variable cuyo valor se incrementa o decrementa en una cantidad constante cada vez que se produce un determinado suceso accioacuten o iteracioacuten Los contadores se utilizan con la finalidad de registrar la cantidad de sucesos acciones o iteraciones internas en un bucle proceso subrutina o donde se requiera cuantificar Como cualquier variable es necesario inicializarla antes del co-mienzo de un ciclo de repeticioacuten

La inicializacioacuten implica darle un valor inicial en este caso el nuacutemero des-de el cual necesitamos se inicie el conteo (por lo general comienzan en cero)

Ejemplos C=0 (inicializa la variable C en 0) C=C+1 (incrementar) H=H-1 (decrementar)

Nota La diferencia entre un sumador y un contador es que mien-tras el primero va aumentando en una cantidad fija preestableci-da el acumulador va aumentando en una cantidad o valor variable Tanto si es una variable contadora sumadora o acumuladora es necesario asignarle un valor inicial antes de comenzar a utilizarla por ejemplo en un bucle Cuando se desean calcular promedios o porcentajes se requiere de ambos tipos de variables

56 | Lovos y Goin

Problema 18 En una veterinaria se desea saber el promedio de edad de gatos y perros (por separados) que fueron asistidos durante un mes En total se registraron 30 animales y la veterinaria solo atiende gatos y perros

Atencioacuten Es muy importante tomar en cuenta que los prome-dios siempre deben ser calculados fuera del ciclo de repeticioacuten Para - Fin (Para) iquestQueacute sucederiacutea si se calculan dentro del ciclo Recordar que el ingreso de caracteres en este caso el tipo de animal (gatoperro) debe estar entre comillas ldquoGatordquo y ldquoPerrordquo

Diagramacioacuten loacutegica | 57

Problema 19 Se pide lo mismo que el problema anterior pero la diferencia radica en que no solo la veterinaria atiende gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

58 | Lovos y Goin

Es decir que por descarte otro tipo de animal caeriacutea en el uacuteltimo No de la decisioacuten y entonces incrementariacutea en uno la variable CA

Importante Todo contador y acumulador (sumador) debe iniciarse con un nuacutemero antes del comienzo del ciclo de repeticioacuten en el caso anterior con ceroNota Para una mejor comprensioacuten en las respuestas lo ideal seriacutea en la sa-lida combinar carteles y resultados por ejemplo para el problema anterior

La cantidad de iteraciones del bucle laquopararaquo tambieacuten se puede determinar ingresando el dato necesario A continuacioacuten un ejercicio relacionado

Diagramacioacuten loacutegica | 59

Problema 20 Solicitar al usuario que ingrese un nuacutemero entero N luego generar en forma aleatoria N nuacutemeros enteros comprendidos entre 1 y 100 y determinar cuaacutentos son pares y cuaacutentos impares

60 | Lovos y Goin

Pregunta iquestQueacute precondicioacuten debe cumplir N iquestQueacute sucede si el nuacutemero que ingresa el usuario es -1

Tambieacuten podemos usar el ciclo decrementando el contador de vueltas del Para Desde N a 1 mientras el paso sea -1

A continuacioacuten un ejemplo relacionado

Problema 21 Solicitar al usuario que ingrese un valor N y mostrar todos los valores comprendidos entre N y 1 comenzando desde N

Diagramacioacuten loacutegica | 61

Problema 22 El factorial de un nuacutemero entero se denota de la siguiente manera laquonraquo y su resultado es n=n(n-1)(n-2)hellip1 Por ejemplo 5=54321 siendo el resultado 120 Se pide desarrollar un programa que lee un valor N y determine su factorial

62 | Lovos y Goin

2 8 4 Maacuteximos y miacutenimos

Problema 23 Hallar la persona de mayor edad sabiendo que se leen datos correspondientes a 20 muestras

El valor inicial de la variable EMAX es un nuacutemero absurdo por ser una edad de un nuacutemero negativo (-1000) Cuando se ingresa el primer valor E dentro del bucle la condicioacuten (E gt EMAX) se cumple por ser verdadera en-tonces el valor de EMAX cambia por el valor de la edad E

A medida que se continuacutea ejecutando el bucle la sentencia evaluacutea si aparece un valor mayor o no a EMAX en caso afirmativo se le asigna al mismo el nuevo valor de E

Diagramacioacuten loacutegica | 63

Tomar en cuenta que si se produce el caso de empate la condicioacuten es falsa por lo tanto no sufre efecto

Si el ejercicio ademaacutes solicitara hallar la miacutenima edad entre las 20 per-sonas entonces seraacute necesario agregar otra variable por ejemplo EMIN y asignarle un valor extremadamente grande de entrada (por ejemplo EMIN = 1000) y la condicioacuten (E lt EMIN) para la decisioacuten

A continuacioacuten se muestra un ejemplo de coacutemo hallar el miacutenimo

Nota iquestQueacute alternativa sugeriacutes de manera de evitar la asignacioacuten de valor absurdo a EMAX y EMIN

Problema 24 Hallar la persona de menor altura sabiendo que se leen datos correspondientes a las alturas de 30 personas El ingreso es en nuacutemeros enteros y en cm

64 | Lovos y Goin

El valor absurdo de entrada seraacute AMIN=1000 (ninguna persona mide 10 m)iquestQueacute sucede si ademaacutes de registrar la miacutenima altura de la persona se

desea conocer en queacute ubicacioacuten (orden dentro de la lista de valores leiacutedos) se encuentra tal persona

Problema 25 Mostrar la miacutenima altura registrada de un grupo de 30 personas y ademaacutes en queacute ubicacioacuten se encuentra

Diagramacioacuten loacutegica | 65

A la variable UMIN se le asigna el valor de la variable de iteracioacuten i del Para Por ejemplo si la altura miacutenima se produce en la vuelta 8 significa que i es igual a 8

De esta manera se tiene el registro de cuaacutendo se produce la uacuteltima con-dicioacuten verdadera de la decisioacuten

En caso de empate el uacutenico registro que se produce es el primero que llega

2 8 5 Problemas Diagramacioacuten loacutegica ndashEstructura de control de repeticioacuten laquopararaquo

28 Mostrar por pantalla los nuacutemeros del 10 al 129 Mostrar por pantalla las tres primeras potencias de los nuacutemeros del

1 al 530 Dado un nuacutemero mostrar por pantalla su tabla de multiplicar (del

1 a 10)31 Mostrar por pantalla la cantidad de personas mayores de edad (ge18)

de un total de N edades leiacutedas desde teclado 32 Mostrar por pantalla la cantidad de mujeres y hombres (MH)

de un total de N valores leiacutedos desde teclado Mostrar tambieacuten su porcentaje

33 Mostrar por pantalla la cantidad de mujeres mayores de edad y la cantidad de hombres menores de edad de un total de N edades y sexo leiacutedos desde teclado

34 A un grupo de 10 personas se les consulta la edad y se desea calcular el promedio de edad del grupo Mostrar el promedio y cuaacutentas de las 10 personas son mayores de 18 antildeos leyendo la informacioacuten desde teclado

35 Se desea conocer el peso acumulado de 10 personas iquestEn queacute cam-biariacutea la solucioacuten si ahora son 100 personas

36 Se desea conocer el peso promedio de 5 personas37 Realice un algoritmo que permita ingresar 10 edades de personas

para luego hallar y mostrar el de gente mayor de edad (ge 18) y el de menores de edad

38 Crear un algoritmo que genere al azar 5 nuacutemeros de la ruleta (del 0 al 36) y muestre el de nuacutemeros pares de impares y de ceros generados

39 Ingresar 10 temperaturas por teclado y mostrar la mayor40 Se ingresan 10 pares de temperaturas (T1 y T2) Hallar el promedio

de las temperaturas T1 y el promedio de las temperaturas T2

66 | Lovos y Goin

2 8 6 Estructura de control de iteracioacuten (sentencia laquomientrasraquo)

Esta estructura de control permite repetir una instruccioacuten o grupo de ins-trucciones mientras una expresioacuten loacutegica sea verdadera De esta forma la cantidad de veces que se reiteran las instrucciones no necesita conocerse por anticipado sino que depende de una condicioacuten

Lo primero que hace esta sentencia es evaluar si se cumple la condicioacuten En caso que se cumpla se ejecuta el bucle Si la primera vez que se evaluacutea la condicioacuten esta no se cumple entonces no se ejecutaraacute ninguna accioacuten En otras palabras mientras la condicioacuten se cumpla el bucle sigue iterando por eso es importante no caer en ciclos de repeticioacuten infinitos

Veamos como ejemplo el siguiente problema

Problema 26 Calcular la suma de los nuacutemeros ingresados por teclado hasta que se ingrese un cero

Diagramacioacuten loacutegica | 67

Es necesario leer el valor de la variable N antes de comenzar con el bucle laquomientrasraquo porque se debe evaluar la condicioacuten al entrar al ciclo de repeti-cioacuten Luego es importante no olvidarse de volver a leer N dentro del bucle porque si no lo hacemos caeremos en un ciclo de repeticioacuten infinito

iquestCuaacutel seraacute el resultado si arrancamos ingresando un cero

Mientras que la condicioacuten se cumpla el ciclo se sigue ejecutando MQ (significa mientras que)

Se repite las instrucciones que se encuentran entre el MQ y el Fin (MQ)

Problema 27 Hallar el promedio de nuacutemeros ingresados por teclado hasta que se lea un nuacutemero impar o uno menor a 20

68 | Lovos y Goin

Nota Tambieacuten se puede introducir en la salida la combinacioacuten de un car-tel y un caacutelculo como en el caso anterior donde se realiza el promedio SC sin depender de otra variable prom larr SC

iquestQueacute pasariacutea si de entrada ingresamos un nuacutemero que no cumple la condicioacuten del laquomientrasraquo Probemos con N=5 o con N=80

Se produce el error que muestra la figura

Esto es asiacute porque estamos dividiendo por cero ya que C nunca pudo incrementarse iquestCoacutemo podriacuteamos solucionar este problema iquestEn queacute casos es posible hallar el promedio

Nota Para poder solucionar este problema tendremos que recurrir a una decisioacuten antes de efectuar la divisioacuten de la siguiente manera

Diagramacioacuten loacutegica | 69

Problema 28 Se leen nuacutemeros que ingresa el usuario desde teclado hasta que llega un valor negativo Se pide que determine cantidad de impares y pares leiacutedos El cero no se cuenta

70 | Lovos y Goin

Mientras la condicioacuten del ciclo de repeticioacuten cumpla con N mayor o igual a cero se determina si dicho nuacutemero es distinto a 0 y luego si es par o impar para incrementar CP o CI respectivamente

Nota No olvidarse de leer N antes del ciclo y dentro del mismo iquestQueacute sucederiacutea si no leemos dentro del ciclo

Problema 29 Disentildear un algoritmo que calcule cuaacutento es el cociente entre dos nuacutemeros (uacutenicamente dos nuacutemeros pares) Si el usuario ingresa un nuacutemero impar le pide otra vez el nuacutemero hasta ingresar uno que sea par

Diagramacioacuten loacutegica | 71

Nota Se asignan al inicio del algoritmo a las variables N1 y N2 el valor 1 (uno) para que puedan entrar a los ciclos de repeticioacuten laquomientrasraquo y asiacute pedir el nuevo valor Prueben ingresar valores impares y veraacuten como repite el ingreso hasta que se lea un valor par

Dentro de un ciclo de repeticioacuten pueden incluirse otros ciclos de repeti-cioacuten como el laquomientrasraquo o el laquopararaquo yo condiciones de seleccioacuten Es decir las estructuras de control se pueden combinar para resolver un problema A continuacioacuten se presenta un ejercicio con dicha combinacioacuten

Problema 30 Disentildear usando FreeDFD un algoritmo que muestre por pantalla 10 nuacutemeros impares generados al azar (del 1 al 9 solo impares) Si el nuacutemero obtenido al azar es par debe continuar hasta hallar un impar

72 | Lovos y Goin

Nota Antes de entrar al ciclo de repeticioacuten Para se le asigna a la variable N un valor 2 obligando a entrar al ciclo laquomientrasraquo hasta encontrar un nuacutemero N impar Esto sucede 10 veces porque se encuentra dentro del Para

2 8 7 Problemas Diagramacioacuten loacutegica ndash Estructura de control de repeticioacuten laquomientrasraquo

41 Disentildear un algoritmo que genere nuacutemeros al azar muacuteltiplos de 5 mientras el usuario no ingresa la opcioacuten lsquoSrsquo (Salir)

42 Disentildear un algoritmo que lea un nuacutemero desde teclado y determine si el mismo es primo o no

43 Disentildear un algoritmo que lea desde teclado la informacioacuten sobre altura edad y sexo (FM) de los participantes de un curso La lectura finaliza cuando se lee un valor de altura negativo Luego calculea Promedio de altura de las mujeresb Promedio de altura de los varonesc Promedio de edad de los participantes

44 Se ingresan 10 nuacutemeros cuyos valores corresponden a los de la ru-leta (012hellip36) se pide hallar y mostrar por pantalla lo siguientea Cantidad de nuacutemeros imparesb Promedio de los nuacutemeros pares (no contar los ceros)c Cantidad de nuacutemeros que se encuentran en la 2ordm docena (13 al 24)d El nuacutemero maacutes grandee iquestEn queacute cambia la solucioacuten si en lugar de leer 10 nuacutemeros ahora se leen nuacutemeros hasta que llega el valor 36

45 Se leen desde teclado pares de temperaturas (T1 y T2) hasta que T1 sea cero Hallar el promedio de las temperaturas ingresadas que es-taacuten comprendidas entre 5deg y 15deg (incluidos)

46 Se leen desde teclado nuacutemeros hasta que la suma de los mismos lle-gue a 1000 Mientras tanto debe hallar a La cantidad de nuacutemeros muacuteltiplos de 6b La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (incluidos)

Pseudocoacutedigo | 73

Capiacutetulo 3 Pseudocoacutedigo

Pseudo deriva del griego seudo que significa lsquofalsorsquo mientras que coacutedigo pro-viene del latiacuten codices codex Estos se empleaban para referirse a los docu-mentos o libros donde los romanos teniacutean escritas todas y cada una de sus leyes En definitiva pseudocoacutedigo significa lsquofalso lenguajersquo

Como se explicoacute en el capiacutetulo introductorio el disentildeo del algoritmo es independiente del lenguaje de programacioacuten es decir una solucioacuten a un problema puede ser escrita en diferentes lenguajes Asiacute el pseudocoacutedigo estaacute disentildeado para facilitar la comprensioacuten de la solucioacuten algoriacutetmica En pocas palabras es una herramienta que facilita el proceso de programar

Aunque no existe una sintaxis estaacutendar para el pseudocoacutedigo las dife-rentes versiones utilizan un lenguaje similar al lenguaje natural y en gene-ral su escritura exige la indentacioacuten (sangriacutea en el margen izquierdo) de diferentes liacuteneas En el caso de este libro se usaraacute la sintaxis provista por el aplicativo PSeInt

3 1 PSeInt

PSeInt es un software educativo libre y multiplataforma dirigido a aquellos que quieren comenzar a incursionar en la programacioacuten y el desarrollo de la loacutegica El software fue creado en el antildeo 2003 por el ingeniero en informaacute-tica Pablo Novara en la Facultad de Ingenieriacutea y Ciencias Hiacutedricas (fich) de la Universidad Nacional del Litoral (unl) de la Argentina

PSeInt se distribuye bajo licencia gpl (General Public License) y es uno de los softwares maacutes utilizados en las universidades latinoamericanas para la construccioacuten de algoritmos Su manejo es simple e intuitivo a traveacutes de un editor de programas escritos en un pseudolenguaje en espantildeol Su in-terfaz graacutefica permite crear almacenar ejecutar y corregir faacutecilmente los programas

El objetivo es permitir centrar la atencioacuten en conceptos fundamenta-les de aprendizaje sin detenerse en detalles para la interpretacioacuten de un compilador De esta forma se facilita la tarea de escritura de algoritmos y se proporciona un conjunto de ayudas y asistencias junto a algunas herra-mientas que asisten a un programador novato a encontrar errores y com-prender la loacutegica de los algoritmos El software no deja de actualizarse y para descargarlo tenemos que dirigirnos al siguiente viacutenculo httppseintsourceforgenet

74 | Lovos y Goin

Una vez descargado e instalado se puede ejecutar a traveacutes del icono

La primera ventana que aparece es la que muestra la figura 2 1

Figura 2 1 Pantalla PSeInt

En la barra ubicada arriba de la pantalla figura el menuacute principal que contiene el total de las opciones en el panel derecho los comandos para armar el algoritmo y en el centro aparece el sector de trabajo o edicioacuten

A medida que avancemos incorporaremos los comandos necesarios para abordar cada uno de los problemas vistos en el capiacutetulo 2 (diagrama de flujo)

A continuacioacuten se muestra paso a paso coacutemo editar y probar el primer ejercicio en el que se ingresaban dos nuacutemeros enteros para hallar y mos-trar la suma

Pseudocoacutedigo | 75

Se describen con detalle todos los pasos a seguir en PSeInt para resolver el problema 1

1 Escribir el nombre del programa a la derecha de laquoProcesoraquo en el espacio que dice ldquosin_titulordquoEn este caso recomendamos que escriban ldquoProblema1rdquo

Nota El tiacutetulo no debe contener espacios en blanco

2 Ubicamos el cursor en la liacutenea 2 haciendo un click y luego elegimos el comando laquoLeerraquo

En la lista de variables escribimos las variables A B

3 Insertamos en la liacutenea 3 el comando de asignacioacuten

Alliacute escribiremos en laquovariablelt-expresioacutenraquo lo siguiente Clt-A+B

4 Para finalizar el algoritmo insertamos en la liacutenea 4 el comando

Reemplazamos en la lista de expresiones la variable C

76 | Lovos y Goin

Una vez terminado el programa en el sector de trabajo es necesario probarlo ejecutaacutendolo con el iacutecono o directamente con la tecla F9

Se ingresa por teclado un nuacutemero Enter y luego otro nuacutemero EnterFinalmente el resultado seraacute el siguiente

En caso de error se muestra en un panel inferior el nuacutemero del error cometido y la informacioacuten detallada

Importante i) Evitar dejar liacuteneas de comando en blanco ii) Tener en cuenta al nombrar variables que no se diferencian mi-nuacutesculas de mayuacutesculas iii) Las palabras reservadas del programa aparecen en negrita iv) Guardar los archivos v) Probar el funcionamiento de cada programa vi) Para empezar un nuevo algoritmo hacer un click en el iacutecono

Nota Realizar en PSeInt el problema 2 (del capiacutetulo 2)

Con respecto a la estructura de control de decisioacuten el comando del PSeInt es

Pseudocoacutedigo | 77

Atencioacuten Es muy importante tomar en cuenta las tabulaciones que se presentan En este caso lo que va dentro del Si y Sino se tabula Esta accioacuten tiene por nombre indentacioacuten y PSeInt la realiza automaacuteticamente La indentacioacuten es lo que permite determinar un bloque de acciones que se ejecutaraacuten juntas Luego cada lenguaje de programacioacuten usaraacute sus propios siacutembolos para esto por ejemplo en el lenguaje C se usan las llaves en Pascal las palabras reservadas laquoBegin-Endraquo Es muy importante acostumbrarse a escribir coacutedigo indentado ya que facilita la lectura y la deteccioacuten de errores

Problema 3 (del capiacutetulo 2) Mostrar el periacutemetro de una circunferencia siempre y cuando el radio que se ingresa sea mayor a cero

78 | Lovos y Goin

A continuacioacuten se muestra el problema 4 donde se presenta un caso de decisioacuten doble

Problema 4 (del capiacutetulo 2) Igual al ejemplo anterior pero en el caso de ingresar un radio erroacuteneo (cero o negativo) indicarlo con el cartel ldquoErrorrdquo

En el problema 6 se presenta un caso de decisiones anidadas

Pseudocoacutedigo | 79

Problema 6 (del capiacutetulo 2) Mostrar el nuacutemero maacutes grande (entre dos) ingresado por teclado Si los dos nuacutemeros son iguales mostrar el cartel ldquoSon igualesrdquo

A continuacioacuten se exhibe un caso donde las decisiones son independientes

Atencioacuten Se recomienda directamente editar el algoritmo en el sector de trabajo sin la necesidad de utilizar los comandos del panel derecho Importante A partir de ahora se incorporan comentarios en el algoritmo Para ello se inicia la liacutenea con un par de barras inclinadas Resulta importante que en cada algoritmo en la cabecera escriban todas las variables en uso y el tipo al que pertenecen alfanumeacuterico entero o decimal Por ejemplo en el caso anterior (problema 6) el programa quedariacutea de la siguiente manera

Nota Los comentarios en PSeInt se muestran siempre en color gris

80 | Lovos y Goin

Problema 7 (del capiacutetulo 2) Ingresar dos nuacutemeros por teclado y sumarlos con la condicioacuten de que cada uno sea positivo (de lo contrario cambiar el signo) No olvidarse de comentar las variables en uso

3 2 Operadores loacutegicos

Los operadores loacutegicos en pseudocoacutedigo se relacionan de la siguiente forma

Diagrama de flujo Pseudocoacutedigo Ejemploand amp (Ngt10) amp (M==rsquoXrsquo)

or | (R==0) | (Rgt=100)

not no no (Clt1)

A continuacioacuten se muestran algunos ejemplos relacionados con los operadores loacutegicos

Pseudocoacutedigo | 81

Problema 8 (del capiacutetulo 2) Verificar que el nuacutemero ingresado por teclado se encuentra dentro de la primera docena de nuacutemeros naturales es decir entre el 1 y el 12

Realice el pseudocoacutedigo del problema 9 (del capiacutetulo 2)

Atencioacuten Los operadores aritmeacuteticos baacutesicos los de relacioacuten (gt lt = lt= y gt=) y la mayoriacutea de los operadores especiales se mantienen con respecto al diagrama de flujo A continuacioacuten se presentan aquellos que se diferencian

Operacioacuten Siacutembolo SintaxisRaiacutez cuadrada raiz raiz(N)

Seno sen sen(N)

Nuacutemero aleatorio azar azar(N)

Importante En PSeInt la desigualdad se escribe de la siguiente manera ltgt

El problema 12 es un ejemplo con un operador aritmeacutetico especial

82 | Lovos y Goin

Problema 12 (del capiacutetulo 2) Ingresar un nuacutemero natural por teclado Se desea saber y mostrar si es par o impar

Nota Recuerde que el operador laquomodraquo nos devuelve el resto de la divisioacuten entre nuacutemeros enteros

Realice los ejercicios 13 14 y 15 en pseudocoacutedigo del capiacutetulo anterior

Atencioacuten Recuerde que el operador especial laquorandomraquo que se utiliza en el FreeDFD tiene su equivalente en PSeInt laquoazarraquo

Pseudocoacutedigo | 83

Para el caso de la estructura de control de repeticioacuten laquopararaquo el comando del PSeInt es

Para el problema 17 (del capiacutetulo 2) que consistiacutea en hallar la sumato-ria de 10 nuacutemeros generados al azar los nuacutemeros deben comprender el siguiente rango de valores [120]

A continuacioacuten se presenta directamente el pasaje a pseudocoacutedigo del problema 18 (del capiacutetulo 2) En el mismo se pediacutea lo siguiente en una veterinaria se desea saber el promedio de edad de gatos y perros (por se-parados) que fueron asistidos durante un mes En total se registraron 200 animales y la veterinaria solo atiende gatos y perros

84 | Lovos y Goin

Nota En el problema 18 se utilizan variables de diferentes tipos entero decimales y alfanumeacutericos Con la intencioacuten de mejorar la lectura del coacutedigo se han agrupados los tipos por liacutenea

Recordar que el problema 19 (del capiacutetulo 2) pide lo mismo que el pro-blema anterior pero la diferencia radica en que no solo la veterinaria atien-de gatos y perros puede que sean otros animales tambieacuten Justamente lo que se pide es ademaacutes contar la cantidad de esos animales que no son ni gatos y ni perros

Pseudocoacutedigo | 85

Nota Realice los problemas 20 21 y 22 directamente utilizando el programa PSeInt sin depender del diagrama de flujo

El siguiente es el problema 23 (del capiacutetulo 2) de maacuteximos y miacutenimos en pseudocoacutedigo

Nota Realizar los ejercicios 24 y 25

86 | Lovos y Goin

Para el caso de la estructura de control de repeticioacuten laquomientrasraquo el co-mando del PSeInt es

Tomar el problema 26 (del capiacutetulo 2) en diagrama y pseudocoacutedigo para comparar En el mismo se pediacutea calcular la suma de nuacutemeros ingresados por teclado hasta que se ingrese un cero

Nota Realizar los problemas 27 28 29 y 30 del capiacutetulo anterior utilizando directamente el software PSeInt (sin la necesidad de recurrir al diagrama de flujo)

Pseudocoacutedigo | 87

3 3 Ejercicios pseudocoacutedigo

46 Se ingresan por teclado 10 pares de temperaturas (T1 y T2) para hallar el promedio de las temperaturas que estaacuten entre 5deg y 15deg (incluidos)

47 Se ingresan 10 nuacutemeros por teclado para hallar tres datos a La cantidad de nuacutemeros negativosb La suma de los nuacutemeros que se encuentran entre el 1 y el 10 (no

incluidos)c El promedio de todos los nuacutemeros

48 Se generan nuacutemeros enteros en forma aleatoria entre [0 y 200] hasta que la sumatoria de los mismos sea mayor a 500 Al finalizar indicara La cantidad de nuacutemeros nulos (0) leiacutedosb La sumatoria de los nuacutemeros que se encuentran entre el 10 y el 100

(incluidos)c El promedio de los nuacutemeros menores a 150d El nuacutemero mayor generado

49 La sucesioacuten de Fibonacci genera la siguiente secuencia de nuacutemeros 1 1 2 3 5 8 etceacutetera Es decir que se obtiene de sumar los dos nuacute-meros anteriores El siguiente es el teacutermino general an=an-1+an-2Se pide que disentildee un programa que le solicite al usuario un nuacutemero entero positivo K y luego muestre en pantalla el K-eacutesimo teacutermino de la sucesioacuten de Fibonacci Por ejemplo si el usuario ingresa por teclado el nuacutemero 10 entonces el algoritmo debe mostrar el valor correspondiente a a10

50 Realice los ejercicios 25 37 38 43 y 46 del capiacutetulo anterior en pseudocoacutedigo

Entorno de programacioacuten visual | 89

Capiacutetulo 4 Entorno de programacioacuten visual

Existen otras formas de aprender a programar Una de ellas consiste en uti-lizar lenguajes visuales a traveacutes de entornos de desarrollo integrado (ide) que a diferencia de las herramientas anteriores posibilitan la ejecucioacuten y visualizacioacuten de un algoritmo al mismo tiempo

DaVinci Concurrente la herramienta a la que vamos a dedicar este uacutel-timo capiacutetulo es un entorno integrado de desarrollo (ide) que facilita la comprensioacuten de situaciones problemaacuteticas y permite la visualizacioacuten de la ejecucioacuten de los algoritmos que se resuelven Fue desarrollado original-mente por un grupo de investigadores del Instituto de Investigacioacuten en Informaacutetica lidi (iii-lidi) de la Facultad de Informaacutetica de la unlp enca-bezado por el licenciado Rauacutel Champredonde

Luego a traveacutes de un trabajo de tesis de grado (Aguil Mallea 2012) de la Universidad Nacional de la Patagonia San Juan Bosco (Ushuaia) se de-sarrolloacute una segunda versioacuten que permite la introduccioacuten a los conceptos baacutesicos de la programacioacuten concurrente Y esta uacuteltima versioacuten es la que vamos a utilizar aquiacute

Este lenguaje estaacute directamente ligado a la ensentildeanza de la programa-cioacuten estructurada tanto para la etapa inicial de la programacioacuten secuencial como para los conceptos baacutesicos de la programacioacuten concurrente

La versioacuten actual del aplicativo estaacute desarrollada en lenguaje de progra-macioacuten Java por lo tanto uno de los requisitos es tener instalado el plug-in de Java en la computadora donde se va a ejecutar El mismo se puede des-cargar en el siguiente sitio wwwjavacomgetjava y el enlace para descar-gar el DaVinci es httpdavinci-csourceforgenet

Da Vinci se basa en la programacioacuten de un robot (Lubo-I) situado en una ciudad cuadrada con avenidas y calles Este puede realizar diferentes accio-nes desde movimientos dentro de los liacutemites de la ciudad hasta interaccio-nes con los objetos (flores papeles y obstaacuteculos) que se encuentran en ella

DaVinci permite que los usuarios puedan programar los movimientos de un robot abstracto en una ciudad tambieacuten abstracta La ciudad es un cuadra-do que contiene 10 calles horizontales y 10 avenidas verticales como se puede observar en la figura 41 El robot camina de una esquina a la otra ejecutando las instrucciones especificadas en el programa Durante la ejecucioacuten el robot puede recoger o depositar dos tipos de objetos flores y papeles Para esto dis-pone de dos bolsas una para cada tipo de objeto Cuenta ademaacutes con la posi-bilidad de incorporar obstaacuteculos en las esquinas de manera de bloquear un ca-mino contar objetos y mostrar resultados El lenguaje define las instrucciones

90 | Lovos y Goin

primitivas que el robot ejecuta y las construcciones necesarias que permiten una programacioacuten modular y estructurada En Da Vinci Concurrente un pro-grama puede ser desarrollado en modo texto o visualmente Cualquiera sea el modo seleccionado todo lo que se hace en una representacioacuten simultaacutenea y automaacuteticamente se reproduce en el otro modo La verificacioacuten sintaacutectica y la ejecucioacuten de los programas desarrollados se llevan a cabo sobre el coacutedigo en modo texto de manera de independizar la eficiencia del lenguaje del formato visual del algoritmo (Champredonde y otros 2000)

En el presente capiacutetulo se trabajan conceptos baacutesicos de loacutegica proposi-cional vistos en capiacutetulos anteriores para representar condiciones comple-jas utilizadas en las estructuras del ambiente aplicadas especiacuteficamente en este caso a problemas con el robot

Ahora bien para darle instrucciones al robot Lubo-I es necesario cono-cer a queacute primitivas (instrucciones) responde

La herramienta permite configurar la ciudad de manera manual o alea-toria para que aparezcan en las esquinas objetos como flores papeles u obstaacuteculos

Ademaacutes el robot puede acceder y modificar los valores de variables que el sistema ofrece y dejar o no un rastro a medida que transita por la ciudad

Al igual que PSeInt el aplicativo DaVinci Concurrente nos brinda un lenguaje sencillo para la incorporacioacuten y el manejo de conceptos baacutesicos de la programacioacuten estructurada y modular empleando palabras clave primi-tivas sentencias simples o compuestas estructuras de control expresiones y constructores de subprogramas

Podremos utilizar cero uno o maacutes robots en cada programaPrimero empezaremos por el reconocimiento del entorno de trabajo del

DaVinci integrado baacutesicamente por cuatro paneles 1) de edicioacuten de coacutedigo fuente 2) el de resultados donde se pueden visualizar los mensajes 3) el de estado de ejecucioacuten 4) el de la ciudad donde transitan ellos robots y los objetos que la componen

Entorno de programacioacuten visual | 91

Figura 41 Entorno graacutefico del programa DaVinci

La franja superior es la barra de iacuteconos que permiten crear abrir y guar-dar programas fuentes dentro del programa se puede cortar copiar y pegar texto ejecutar pausar continuar y frenar el funcionamiento del algoritmo asiacute como tambieacuten depurar

Empecemos con nuestro primer ejemplo sin utilizar el robot por ahora Al mismo tiempo indicaremos las diferencias con PSeInt en la escritura del algoritmo

Recomendacioacuten Ir probando los ejercicios propuestos a medida que avan-zamos

Ejemplo 1 Pedimos que el usuario ingrese el nombre de su localidad para mostrar por pantalla ldquoBienvenido a la ciudad _ _ _ _ _rdquo donde las liacuteneas representariacutean la ciudad o pueblo que se ha introducido previamente Escribimos el algoritmo en el sector 1 (editor de coacutedigo fuente)

92 | Lovos y Goin

Para ejecutar el programa se debe presionar el iacutecono de ejecucioacuten (barra de botones octavo de izquierda a derecha) nos apareceraacute la siguiente ventana de carga

Esto sucede gracias a la instruccioacuten laquopedirraquo del algoritmoLuego de ingresar la localidad (supongamos que ingresamos Comallo) y acep-tar el paso nos aparece en el sector 2 (panel inferior izquierdo) lo siguiente Yo vivo en la localidad de Comallo

Recomendaciones Es importante mantener la indentacioacuten (tabulacioacuten) pues organiza y mejora la lectura del programa aunque funcione sin ella Notaraacuten cambios de colores en la fuente para diferenciar las palabras re-servadas del lenguaje del resto El nombre del programa en este caso ldquoejemplo1rdquo no debe tener es-pacios en blanco ni siacutembolos salvo el guion de abajo ldquoejemplo_1rdquo Se aconseja ir guardando el archivo con un nombre adecuado (identifi-catorio) siendo la extensioacuten punto j (es decir j tercer iacutecono de izquierda a derecha)

La sintaxis del lenguaje es similar a la de PSeInt a continuacioacuten se pre-senta una tabla comparativa

DaVinci PSeIntPrograma Proceso

Pedir Leer

Informar Mostrar por pantalla

Fin FinProceso

Ademaacutes contiene las instrucciones laquocomenzarraquo y laquovariableraquo y utiliza los pareacutentesis () para los ingresos por teclado y salida de mensajes a diferencia de PSeInt Para comentar una liacutenea de coacutedigo se utilizan los siacutembolos Las variables son indiferentes a minuacutesculas o mayuacutesculas

DaVinci nos obliga a definir todas las variables que vamos a usar en nuestro programa previo a su uso Veamos un ejemplo

Entorno de programacioacuten visual | 93

Ejemplo 2 Pedimos que el usuario ingrese los lados de un rectaacutengulo para mostrar el periacutemetro y aacuterea del mismo en un uacutenico cartel de salida ldquoEl periacuteme-tro es __ y el aacuterea es __ldquo

Las asignaciones difieren en el siacutembolo ldquo=rdquo (en PSeInt es) A larr L1L2 (en Da-Vinci es) A = L1L2Al igual que en el PSeInt se pueden alternar en la salida texto y variables con la instruccioacuten laquoinformarraquo

4 1 Variables del programa DaVinci

Se pueden utilizar las variables de tipo nuacutemero texto y loacutegico

Tipo ContenidoOperaciones

Aritmeacutetica ComparacioacutenNuacutemero Nuacutemeros enteros + - lt= gt= gtltltgt =

TextoCombinacioacuten entre nuacutemeros y letras

+(para concatenar)

lt= gt= gtltltgt =

Loacutegico vf (verdaderofalso) amp | = ltgt

Atencioacuten Cuando operamos con enteros y obtenemos nuacutemeros decima-les (no enteros) su salida o respuesta seraacute truncada (solo la parte entera) por ejemplo 308 seraacute 30

A continuacioacuten mostraremos ejemplos con la intervencioacuten del robot (Lubo-I)

94 | Lovos y Goin

4 2 Conociendo la ciudad del robot

La ciudad de 81 cuadras estaacute conformada por 10 avenidas y 10 calles orien-tadas de modo vertical y horizontal respectivamente

La avenida 1 y calle 1 se ubica en la parte inferior izquierda como se muestra a continuacioacuten

Figura 42 Ciudad DaVinci

Para una mejor orientacioacuten la estrella estaacute ubicada en la avenida 6 y la calle 3El robot siempre se mueve de esquina en esquina y podemos elegir des-

de donde partePara configurar la ciudad y sus objetos vamos al menuacute superior

Al acceder a laquoConfigurar Ciudadraquo emerge la siguiente ventana

Entorno de programacioacuten visual | 95

Figura 43 Configuracioacuten de ciudad

En los espacios se agrega la cantidad y ubicacioacuten de flores papeles y obstaacuteculos que quisieacuteramos de entrada Por ejemplo si la cantidad de flores es 10 entonces debemos elegir la ubicacioacuten (avenida y calle) por cada una Lo mismo sucede con los papeles y los obstaacuteculos

Atencioacuten En una esquina se puede depositar maacutes de un objeto (del mis-mo tipo o no) por ejemplo en la avenida 4 calle 7 tres flores y dos papeles

Ejemplo 3 Recorrer una cuadra entera desde la avenida 5 calle 7 en sentido horario llegando hasta el punto de partida

96 | Lovos y Goin

En este programa no se utilizan variables El comando laquopos(57)raquo indica la po-sicioacuten inicial del robot es decir de modo geneacuterico laquopos(avenidacalle)raquo

Atencioacuten Si al ejecutar el programa no se alcanza a ver el movimiento del robot entonces podemos cambiar la velocidad con la opcioacuten de la barra del menuacute superior laquoConfigurar inteacuterpreteraquo daacutendole un mayor retardo Por defecto el robot siempre se dirige verticalmente hacia arriba Para activar el robot debemos escribir en el programa laquoiniciarraquo luego de laquocomenzarraquo

Ejemplo 4 Hacer lo mismo que el ejercicio anterior pero en sentido contrario

Dado que el robot solo puede girar a la derecha es necesario moverlo 3 veces a derecha para orientar el robot a la izquierda y para eso utilizamos repetir 3

Sin estructura de repeticioacuten Con estructura de repeticioacuten

derechaderechaderecha

repetir 3derecha

Atencioacuten la instruccioacuten derecha al estar dentro de la estructura de repe-ticioacuten laquorepetirraquo se ubica indentada (tabulada)

Entorno de programacioacuten visual | 97

Ejemplo 5 Recorrer en forma de escalera desde avenida 2 y calle 4 comenzando horizontalmente hasta llegar a la avenida 7 y calle 8 e informar la posicioacuten final

Los comandos posAV y posCA nos brindan la posicioacuten del robot en este caso al finalizar el recorrido

4 2 Repeticioacuten

Volvamos al ejemplo 4 es posible observar que hay un conjunto de pasos que se repiten

Entonces es posible reescribir el algoritmo como sigue

98 | Lovos y Goin

De esta forma no solo reducimos la cantidad de comandos sino que es maacutes faacutecil determinar queacute hace el programa

Para el ejemplo 5 la solucioacuten seraacute la siguiente

Ejemplo 6 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad de esquinas en las que hay flores Al finalizar debe informar esa cantidad

Atencioacuten Para realizar este ejercicio primero tendremos que configurar la ciudad poniendo flores en las esquinas Podemos hacerlo ubicando cada una en esquinas elegidas por el usuario o bien de modo aleatorio Supongamos que se colocan 10 flores de modo aleatorio entonces ten-dremos que ir a laquoConfigurar Ciudadraquo y en la solapa laquoFloresraquo elegir laquo10raquo en la seccioacuten laquoAleatoriasraquo Estas apareceraacuten recieacuten cuando ejecutemos el algoritmo

La variable c de tipo nuacutemero por defecto se inicializa con el valor cero para luego ser usado como contador incrementando en uno c=c+1 (cada vez que encuentra una flor)

Entorno de programacioacuten visual | 99

La primitiva hayflorenlaesquina devuelve verdadero si en la esquina hay alguna flor o falso en caso contrario

Atencioacuten La distribucioacuten de flores apareceraacute cuando ejecutemos el al-goritmo y ademaacutes hay que tomar en cuenta que en una esquina puede haber maacutes de una flor En este caso no contemplamos la cantidad que debe haber en cada esquina solo si existen o no floresNota Las instrucciones comenzar y fin no solo sirven para abrir y cerrar el proceso del algoritmo se utilizan tambieacuten para delimitar las sentencias dentro de las siguientes estructuras de control laquorepetirraquo laquomientrasraquo y laquosiraquo siempre y cuando haya maacutes de una sentencia dentro de cada una

Ejemplo 7 Igual al anterior pero tomando en cuenta la cantidad real de flores Puede pasar que en una esquina exista maacutes de una flor

100 | Lovos y Goin

A diferencia del ejemplo anterior reemplazamos el si por el control de repeticioacuten mientras que se ejecuta hasta que no haya maacutes flores en la es-quina y (para no caer en un bucle infinito) debemos ir juntando flores Esta primitiva se llama tomarflor y permite capturar de a una las flores para depositarlas en una bolsa

Atencioacuten Antes de utilizar la primitiva tomarflor es necesario asegurar-se que exista al menos una flor Para averiguar la existencia de flores se utiliza la primitiva hayflorenlaesquina

Ejemplo 8 Recorrer el borde de la ciudad desde avenida 1 y calle 10 mientras tanto debe contar la cantidad real de flores y papeles que encuentra en el ca-mino Al finalizar debe informar la cantidad hallada

Atencioacuten Antes de continuar debemos agregar de modo aleatorio los papeles en las esquinas de la ciudad entrando por el menuacute laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y luego en la solapa laquoPapelesraquo agregamos la canti-dad en la seccioacuten laquoAleatoriasraquo

Se utilizan en este caso dos contadores cf y cp (contador de flores y de papeles respectivamente)

Entorno de programacioacuten visual | 101

Importante Cuando un bloque de acciones tiene maacutes de una accioacuten es necesario delimitar el bloque usando las palabras reservadas comen-zar y fin no siendo necesario cuando se trata de una sola instruccioacuten Recuerden que en DaVinci no es necesario inicializar la variable conta-dorasumadora alcanza con definirla en el sector laquovariablesraquo y automaacute-ticamente toma el valor 0 Sin embargo como buena praacutectica de pro-gramacioacuten siempre que se declara una variable es importante darle un valor inicial

Ejemplo 8b iquestQueacute sucede si deseamos que el robot cuente la cantidad de flo-res halladas pero sin alterar el estado de la ciudad Es decir dejando flores y papeles en el mismo sitio

El robot tambieacuten puede moverse teletransportaacutendose es decir sin la necesi-dad de caminar a la esquina deseada simplemente usando el comando pos

A continuacioacuten presentamos un ejemplo relacionado

Ejemplo 9 Recorrer las avenidas de nuacutemeros impares (1 3 5 7 y 9) de arriba hacia abajo (desde la calle 10 a la 1)

Atencioacuten Primero para dirigir el robot hacia abajo debemos girar dos veces 90ordm con derecha derecha La estructura de repeticioacuten se efectuacutea 5 veces para recorrer las avenidas impares 1357 y 9 que se incrementan de dos en dos con la asignacioacuten avenida=avenida+2

102 | Lovos y Goin

Ejemplo 10 Recorrer la diagonal principal de la ciudad (desde 11 a 1010)

Noacutetese que a diferencia de los demaacutes ejercicios donde interviene el mo-vimiento del robot este no pinta el trayecto ya que va saltando de esquina en esquina

Atencioacuten Al ser la diagonal principal se trata de recorrerla manteniendo el mismo valor de avenida y calle pos(11) pos(22) hellippos(1010) Por lo tan-to podemos reducir las liacuteneas de comandos de nuestro algoritmo usando solo una variable numeacuterica por ejemplo x entonces pos(xx)

Ejemplo 11 Recorrer la calle 4 en avenidas pares (2468 y 10) e informar la cantidad de esquinas donde no hay flores

Entorno de programacioacuten visual | 103

Atencioacuten Si el robot excede el liacutemite de la ciudad se le informa dicho error en el sector 2 de resultados (panel inferior izquierdo)

En este ejemplo el valor de la variable calle se mantiene en 4 mientras que la variable avenida va incrementaacutendose de a dos El siacutembolo repre-senta la negacioacuten o complemento de la respuesta de laquohayflorenlaesquinaraquo

DaVinci simboliza los operadores loacutegicos de forma similar al lenguaje de programacioacuten C

Siacutembolo Significado Ejemplo

amp Disyuncioacuten o Divisioacuten(pgt4 amp plt10) el valor de p se encuentra entre 4 y 10 (no incluidos)

| Conjuncioacuten o Unioacuten(pgt8 | plt=1) el valor de p es mayor a 8 o es menor o igual que 1

Negacioacuten o Complemento

haypapelenlaesquina rarr No hay papel

A continuacioacuten mostramos un ejemplo donde hay disyuncioacuten y nega-cioacuten al mismo tiempo

Ejemplo 12 Recorrer todas las esquinas de las avenidas 4 y 8 e informar la can-tidad de esquinas donde hay flores y no papeles

En este caso el robot recorre las dos avenidas dejando la marca porque estamos usando la instruccioacuten mover

104 | Lovos y Goin

El ultimo objeto que nos falta ver es el obstaacuteculo A diferencia de las flo-res y papeles estos se deben ubicar en la ciudad de modo manual para eso debemos ir a laquoOpcionesraquo ndash laquoConfigurar Ciudadraquo y hacer click en la solapa laquoObstaacuteculosraquo

Figura 44 Configurar obstaacuteculos

En la figura 4 4 hay un obstaacuteculo en la avenida 3 y calle 5 generado a mano

Nota Podemos agregar una por esquina y el liacutemite estaacute determinado por la cantidad total de esquinas de la ciudad

Entorno de programacioacuten visual | 105

Ejemplo 13 Recorrer la ciudad (avenida por avenida) desde la posicioacuten (11) hasta encontrar un obstaacuteculo mientras tanto ir contando las esquinas que tienen flores y mostrar el resultado

Nota Por cada paso que da el robot se evaluacutea la estructura de control mien-tras y se decide si avanza o no el ciclo dependiendo de dos situaciones a) Que no se pase del liacutemite de la ciudad avenidalt11 b) Que no aparezca en su camino un obstaacuteculo hayobstaculo Atencioacuten Para probar la solucioacuten previo a la ejecucioacuten agregar a la ciudad por lo menos un obstaacuteculo

106 | Lovos y Goin

Ejemplo 14 Recorrer la ciudad de modo aleatorio hasta encontrar 6 esquinas con papeles o hasta toparse con un obstaacuteculo En cada paso debe contabilizar y reco-lectar los papeles que vaya encontrando utilizar la instruccioacuten tomarpapel

Nota La funcioacuten aleatorio(N) devuelve un nuacutemero entero entre 0 al N-1 es decir que con aleatorio(10) retorna un valor entero compren-dido entre 0 y 9 Si le sumamos 1 se convierte al rango entre 1 y 10 coin-cidiendo con los posibles nuacutemeros de avenidas y calles de la ciudad Atencioacuten El algoritmo finaliza cuando llega a 6 la cantidad de papeles o cuando el robot se encuentra con un obstaacuteculo iquestQueacute sucederiacutea si se quita la instruccioacuten tomarpapel iquestLa salida del algoritmo seriacutea la misma

4 3 Modularizacioacuten

A lo largo de la historia de la ingenieriacutea de sistemas de informacioacuten se han desarrollado diferentes teacutecnicas para construir programas El primer gran avance se conoce como programacioacuten modular y complementa la progra-macioacuten estructurada La programacioacuten modular utiliza abstraccioacuten de pro-cedimientos (Di Mare 1991) Ahora bien iquestqueacute significa abstraer y por queacute este concepto resulta tan importante en la ciencia informaacutetica

La abstraccioacuten es un proceso mental que consiste en identificar los detalles importantes cuando nos enfrentamos a un problema mientras se ignoran los detalles irrelevantes Este proceso permite simplificar el problema ya que la cantidad de informacioacuten a manejar en un determinado momento disminuye

Entorno de programacioacuten visual | 107

La programacioacuten modular consiste en definir moacutedulos una especie de cajas negras que tienen una forma de comunicarse (interfaz) claramente definida Usando abstraccioacuten de procedimientos el programador puede separar el queacute hace el moacutedulo del coacutemo lo hace

Asiacute es posible descomponer funcionalmente un programa en subpro-gramas El propoacutesito es facilitar la resolucioacuten de problemas dividiendo el problema en subproblemas mas simples basaacutendose en la idea laquodivide y venceraacutesraquo Una metodologiacutea de resolucioacuten de problemas con estas caracte-riacutesticas es el disentildeo top -down

Ejemplo Se desea preparar una tarta de manzanas

Figura 45 Ejemplo de modularizacioacuten

En el ejemplo de la figura 45 cada caja (moacutedulo) cumple una funcioacuten especiacutefica (queacute hace) y en algunos casos comparte informacioacuten con otras (interfaz)

En general en las soluciones modularizadas un programa es tambieacuten un moacutedulo llamado programa principal (en el ejemplo preparar tarta de man-zana) Este moacutedulo se encarga de controlar todo lo que sucede y es el respon-sable de transferir el control a los submoacutedulos de modo que ellos puedan lle-var adelante su funcioacuten y resolver el problema Cada uno de los submoacutedulos cuando finaliza su trabajo devuelve el control al moacutedulo que lo invocoacute

Los invitamos a navegar una animacioacuten desarrollada por docentes de la facultad de informaacutetica de la unlp sobre el concepto de modulari-zacioacuten siguiendo este viacutenculo httpweblidiinfounlpeduarcatedrasingresomaterial2013IAIAdicionalDemoModularizacionMODULOShtml

108 | Lovos y Goin

Hasta el momento vimos ejemplos con programas a partir de la utiliza-cioacuten de una secuencia de instrucciones de modo lineal

Muy uacutetiles cuando trabajamos con problemas sencillos pero cuando se nos presentan problemas maacutes complejos es conveniente subdividirlos de acuerdo a las diferentes funcionalidades que encontramos en el problema De esta forma la resolucioacuten del problema general se obtendraacute resolviendo cada uno de los subproblemas Si logramos que la solucioacuten (algoritmo) a cada uno de estos subproblemas maneje su propio conjunto de datos se tendraacuten soluciones (algoritmos) independientes que podraacuten codificarse por separado y reutilizarse en otros problemas

La estructura de un programa en DaVinci ahora seriacutea la siguiente

No es nuestra intencioacuten hacer un capiacutetulo destinado en profundidad a modularizacioacuten pero si consideramos importante clarificar algunos con-ceptos Existen dos tipos de moacutedulos procedimientos y funciones En liacuteneas generales una funcioacuten es un moacutedulo que recibe uno o maacutes datos (paraacuteme-tros) y produce un valor o resultado que es uacutenico y de alguno de los tipos permitidos en el lenguaje Por ejemplo logaritmo(unNro unaBase) es una funcioacuten que recibe un nuacutemero entero y una base entera y retorna un valor numeacuterico que representa el logaritmo en base unaBase del nuacutemero unNro

Un procedimiento en cambio estaacute formado por un conjunto de sen-tencias o instrucciones que realizan una determinada tarea y que pueden recibir 0 1 o maacutes datos (paraacutemetros) y devolver 0 1 o maacutes resultados

En el caso de Visual DaVinci solo trabaja con procedimientos denomi-nados en su sintaxis como procesos

Entorno de programacioacuten visual | 109

Maacutes arriba dijimos que los moacutedulos pueden compartir informacioacuten y esto se logra a traveacutes del pasaje de paraacutemetros La interfaz del moacutedulo indi-ca queacute paraacutemetros (su tipo) y en queacute orden seraacuten recibidos

Ejemplo 15 Juntar todas las flores de las esquinas de la avenida 6 Tenga en cuenta que podriacutea existir maacutes de una flor

Figura 46 Procedimiento juntarflores

Nota Los procedimientos simplemente se invocan o llaman por su nom-bre en el cuerpo del programa Y deben estar declarados previo a su uso En este caso el procedimiento JuntarFlores no recibe paraacutemetros Su accioacuten es solo tomar las flores de las esquinas sin contabilizarlas Atencioacuten Si quisieacuteramos retornar la cantidad de flores que se recogie-ron debemos utilizar paraacutemetros en el procedimiento JuntarFlores Esto se hace agregando entre pareacutentesis el paraacutemetro cantidad de tipo nuacutemero En el proacuteximo ejemplo lo detallamos

110 | Lovos y Goin

Ejemplo 16 Juntar todas las flores de las esquinas de la avenida 6 Informar en cada esquina la cantidad juntada y al finalizar el recorrido informar el total de flores que se recogieron Tenga en cuenta que podriacutea existir maacutes de una flor en cada esquina

Nota El procedimiento JuntarFlores ahora tiene un paraacutemetro (de sali-da) de tipo numero (sa cantidadnumero) El identificador sa indica que el paraacutemetro cantidad es un paraacutemetro de salida Cada vez que se invoca o llama al procedimiento la variable se limpia comenzando nuevamente en cero y dentro del moacutedulo cambiaraacute depen-diendo de lo que haga el programador con dicha variableCuando se invoca el procedimiento en el cuerpo del programa se deben respe-tar los paraacutemetros su tipo cantidad y ubicacioacuten En este caso se trata de un paraacutemetro c es decir JuntarFlores(c) siendo c el resultado de cantidad

4 4 Paraacutemetros formales y reales

Cuando se declara un procedimiento se habla de paraacutemetros formales y cuando se lo invoca se habla de paraacutemetros reales o actuales En el ejem-plo 16 el procedimiento JuntarFlores(sa cantidadnumero) contiene el

Entorno de programacioacuten visual | 111

paraacutemetro formal cantidad que estaacute en la definicioacuten del procedimiento mientras que JuntarFlores(c) contiene el paraacutemetro real ldquocrdquo

En general los lenguajes de programacioacuten exigen que el nuacutemero de paraacute-metros reales y formales coincidan en tipo y cantidad DaVinci Concurrente chequea esta condicioacuten y en caso de no cumplirse no permite que se ejecute el programa

Ejemplo 17 El robot debe recorrer un circuito rectangular dentro de la ciudad cuyos paraacutemetros deben ser ingresados por el usuario (coordenada inicial y tamantildeo) Debe dejar la huella y comenzar a moverse hacia arriba desde el punto inicial

Nota El procedimiento MovRectan solo recibe paraacutemetros de entrada y en DaVinci esto se indica usando el identificador en para cada paraacutemetro de entrada (en AVininumero en CAininumerohellip) Atencioacuten Recordar que los paraacutemetros reales los que se usan en la in-vocacioacuten deben coincidir en tipo y orden con la especificacioacuten de los paraacutemetros formales Asiacute mismo para que funcione correctamente un moacutedulo es importante verificar previo a la invocacioacuten del mismo que los valores de los paraacutemetros cumplan con las precondiciones establecidas En este caso el moacutedulo MovRectan no especifica ninguna precondicioacuten entonces el moacutedulo deberaacute validar que el robot no exceda los liacutemites de la

112 | Lovos y Goin

ciudad iquestCoacutemo lo resolveriacutean

4 5 Variables globales y locales

Las variables que se encuentran dentro del procedimiento se llaman locales y tiene su alcance limitado al mismo mientras las variables que se designan fuera de los procedimientos son globales y son visibles en todo el programa De esta forma en cualquier subprograma podriacutea referenciarlas o modifi-carlas Es importante para preservar la independencia de los moacutedulos que si necesitan compartir informacioacuten se haga a traveacutes del pasaje de paraacuteme-tros y no referenciando a variables globales

Los paraacutemetros de un procedimiento pueden funcionar como entrada exclusiva salida exclusiva o entradasalida usando para cada caso el pre-fijo en sa o es En el caso del procedimiento MovRectan (del ejercicio 17) usamos solo paraacutemetros de entrada

Veremos un caso de procedimiento con paraacutemetros de salida

Ejemplo 18 El robot se dirige a una esquina elegida por el usuario para contar la cantidad de papeles y flores Ademaacutes indique pre y poscondiciones para el moacutedulo

Nota El robot primero solicita la esquina elegida por el usuario y luego llama (invoca) al procedimiento ContarPapelFlor que tiene dos paraacutemetros de en-trada (av calle) y dos paraacutemetros de salida (Papeles Flores) iquestCuaacuteles son las precondiciones que deben cumplir los paraacutemetros de entrada

Entorno de programacioacuten visual | 113

Ahora veremos coacutemo se pueden hacer llamadas de procedimientos den-tro de procedimientos

Ejemplo 19 Se pide disentildear e implementar un programa modularizado don-de el robot recorra un rectaacutengulo de 4 x 4 a partir de una coordenada inicial indicada por el usuario Se pretende que el robot deje la huella de su recorrido y que comience a moverse hacia arriba desde el punto inicial contando la cantidad de papeles y flores de cada esquina

Pregunta iquestCuaacuteles seriacutean la pre y poscondiciones de cada moacutedulo

Nota Cuando se realiza la invocacioacuten a un moacutedulo con paraacutemetros de entra-da-salida o salida los paraacutemetros reales deben ser siempre variables ya que no se copia un valor sino una referencia a una posicioacuten en memoria

114 | Lovos y Goin

4 6 Ejercicios Da Vinci

51 Disentildee e implemente un programa que permita que el robot recorra la ciudad completa (pasando por todas las esquinas) y dejando la huella El robot debe comenzar su recorrido en la coordenada (11)

52 Igual al ejercicio anterior pero informando al final del recorrido la cantidad de esquinas que tienen flores

53 Disentildee e implemente un programa que permita que el robot recorra la diagonal inversa desde (110) hasta (101) sin dejar marca

54 Disentildee e implemente un programa para que el robot dibuje (dejan-do huella) la palabra LES Las letras deben tener la misma altura que la ciudad

55 Disentildee e implemente un programa que permita que el robot realice un recorrido en modo escalera desde la posicioacuten (110) bajando has-ta (101) dejando huella

56 Disentildee e implemente un programa que permita al usuario ingresar la coordenada de partida (Avenida Calle) y luego el robot realice un recorrido en un rectaacutengulo de 3x3 en sentido contrario al movimien-to del reloj y dejando la huella

Nota El programa principal debe controlar que el robot no sobre-pase los liacutemites de la ciudad

57 Igual ejercicio anterior pero ademaacutes el programa deberaacute informar al finalizar la cantidad de esquinas que no tienen objetos (papel o flores)

58 Disentildee e implemente un programa que permita que el robot recorra solo las calles pares dejando huellas e informe al finalizar la cantidad (por separado) de flores y papeles que ha encontrado en las esquinas durante su recorrido

Nota Tenga en cuenta que en una esquina podriacutea haber maacutes de un elemento (florpapel)

59 Disentildee e implemente un programa que permita que el robot reco-rra solo las calles impares dejando huellas e informe al finalizar la cantidad de esquinas que tienen la misma cantidad de flores que de papeles a excepcioacuten de las que estaacuten vaciacuteas

Entorno de programacioacuten visual | 115

60 Disentildee e implemente un programa que permita que el robot recorra la ciudad con direccioacuten al azar comenzando desde la posicioacuten (34) sin dejar huella y sin saltar El azar se determina en cada esquina y el programa finaliza cuando llegue a la posicioacuten (77)

Nota Si el robot intenta irse fuera de los liacutemites de la ciudad debe hacer un paso hacia atraacutes (direccioacuten contraria al uacuteltimo paso)

61 Se tienen ubicados en la ciudad cuatro obstaacuteculos en las posicio-nes (22) (28) (82) y (88) Disentildee e implemente un programa que permita que el robot recorra la ciudad al azar usando el mismo crite-rio que el ejercicio anterior Cuando se encuentra con un obstaacuteculo debe saltar hacia otro lugar tambieacuten al azar El algoritmo termina cuando se encuentra con maacutes de dos obstaacuteculos

Nota Recordar que para ubicar los obstaacuteculos se debe ir a laquoOpcio-nesraquo ndash laquoConfigurar ciudadraquo ndash laquoObstaacuteculosraquo

62 Igual al ejercicio anterior pero informando la cantidad total de flo-res y papeles (por separado) al finalizar el recorrido

Listas de referencias | 117

Listas de referencias

Lista de referencias bibliograacuteficas

Champredonde R Ainchil V y Palacios A (2000) Teaching experiences in program-ming using the visual Da Vinci language En First International Congress on Tools for Teaching Logic proceedings University of Salamanca June 2000 (pp 17-21) Uni-versidad de Salamanca

Compantilde-Rosique P Satorre-Cuerda R Llorens-Largo F y Molina-Carmona R (2015) Ensentildeando a programar un camino directo para desarrollar el pensamiento computacional Revista de Educacioacuten a Distancia (46)

De Giusti A E Madoz M C Bertone R A y Naiouf R M (2001) Algoritmos datos y programas con aplicaciones en Pascal Delphi y Visual Da Vinci Prentice Hall

Depetris B O Aguil Mallea D Pendenti H Tejero G Feierherd G E y Prisching G (2015) La ensentildeanza y el aprendizaje de la programacioacuten y la programacioacuten concurrente con DaVinci Concurrente En x Congreso sobre Tecnologiacutea en Educa-cioacuten amp Educacioacuten en Tecnologiacutea (te amp et) Corrientes

Di Mare A (1991) Tipos abstractos de datos y programacioacuten por objetos Reporte Teacutecnico pibdc-03-91 proyecto 326-89-019 Escuela de Ciencias de la Computacioacuten e Infor-maacutetica ucr 1991 Revisioacuten 2010 httpwwwdi-marecomadolfopoop-adthtm

Garciacutea C E (2012) Algoritmos y programacioacuten I Guiacutea para docentes Fundacioacuten Gabriela Piedrahita Uribe

Guerrero M Guamaacuten D S y Caiza J C (2015) Revisioacuten de herramientas de apoyo en el proceso de ensentildeanza-aprendizaje de programacioacuten Revista Politeacutecnica 35(1) p 84

Goin M (2016) Caminando junto al lenguaje C Editorial unrnJoyanes Aguilar L (2008) Fundamentos de programacioacuten McGraw-Hill Interamericana Loacutepez L M Amaro S Alonso de Armintildeo A C Godoy I Leiva M y Pintildeero J C (2016

May) Aplicando nuevos aspectos en la Programacioacuten de Computadoras En xviii Workshop de Investigadores en Ciencias de la Computacioacuten wicc 2016 Entre Riacuteos Argentina

Mallea Aguil D E (2012) Un inteacuterprete multiplataforma para la iniciacioacuten a la progra-macioacuten estructurada y concurrente Da Vinci Concurrente [Tesis de grado de Licenciatura] Facultad de ingenieriacutea de la Universidad Nacional de la Patago-nia San Juan Bosco Ushuaia Tierra del Fuego

Polya G (2004) How to Solve It Princeton Science Library Edition

118 | Lovos y Goin

Lista de figuras

Financial Times (2011) Drew Hoston [Fotografiacutea] httpswwwflickrcomphotos financialtimes6478266407inphotostream cc-by-20

Game Developers Choice Awards (2010) Gabe Newell [Fotografiacutea] httpswwwflickrcomphotosofficialgdc4427575126 cc-by-20

Joi Ito (2011) Mitchel Resnick [Fotografiacutea] httpscommonswikimediaorgwikiFileMitchel_Resnickjpg cc-by-20

Usuario ak_mardini (2006) Seymour Papert [Fotografiacutea] httpswwwflickrcomphotosmardinix152833938 cc-by-sa-20

Problemas y algoritmos un enfoque praacutectico Edith Lovos y Martin Goin Primera edicioacuten Viedma Universidad Nacional de Riacuteo Negro 2021120 p 23 x 15 cm Lecturas de caacutetedra

isbn 978-987-4960-31-3

1 Algoritmo 2 Sistemas de Informacioacuten I Lovos Edith II Tiacutetulocdd 00501

Licencia Creative CommonsUsted es libre de compartir-copiar distribuir ejecutar y comunicar puacuteblicamente esta obra bajo las condiciones deAtribucioacuten ndash No comercial ndash Sin obra derivada

copy Universidad Nacional de Riacuteo Negro 2021editorialunrneduar

copy Edith Lovos y Martin Goin 2021

Queda hecho el depoacutesito que dispone la Ley 11723

Disentildeo de coleccioacuten Direccioacuten de Publicaciones-Editorial de la unrnDireccioacuten editorial Ignacio ArtolaCoordinacioacuten de edicioacuten y edicioacuten de textos Diego Martiacuten SalinasCorreccioacuten de textos Veroacutenica Garciacutea BianchiDiagramacioacuten y disentildeo Sergio CampozanoImagen de tapa Editorial unrn 2021

Problemas y algoritmos Un enfoque praacutectico fue compuesto con la familia tipograacutefica Alegreya en sus diferentes variablesSe editoacute en abril de 2021 en la Direccioacuten de Publicaciones-Editorial de la unrn

Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmosUn enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n Problemas y algoritmosUn enfoque praacutectico

Edith Lovos

Martiacuten Goin

Lecturas de Caacutetedra

Problemas y algoritmos Un enfoque praacutectico

El desarrollo de la capacidad analiacutetica y creadora para resolver problemas constituye el punto de partida para quienes desean incursionar en el mundo de la programacioacuten informaacutetica Es esa capacidad la que permite enfocar el elemento clave del pensamiento computacional el algoritmo

Como un tutorial que avanza paso a paso a traveacutes de ejercicios y ejemplos este libro busca ayudar al lector interesado a adquirir las destrezas necesarias para poder disentildear e implementar de manera faacutecil y raacutepida soluciones algoriacutetmicas baacutesicas previo a la inmersioacuten en el uso de uno o maacutes lenguajes de programacioacuten en particular

Es por ello que Problemas y algoritmos es un valioso material de apoyo tanto para docentes como para estudiantes de nivel medio y superior en este uacuteltimo caso que cursen las asignaturas iniciales de tecnicaturas ingenieriacuteas profesorados y licenciaturas orientadas o vinculadas a la informaacutetica

Prob

lem

as y

algo

ritm

os

L

ovos

Goi

n

  • docs-internal-guid-d7526a43-7fff-9ead-23
  • _GoBack
Page 18: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 19: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 20: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 21: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 22: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 23: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 24: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 25: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 26: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 27: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 28: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 29: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 30: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 31: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 32: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 33: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 34: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 35: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 36: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 37: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 38: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 39: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 40: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 41: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 42: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 43: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 44: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 45: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 46: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 47: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 48: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 49: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 50: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 51: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 52: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 53: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 54: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 55: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 56: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 57: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 58: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 59: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 60: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 61: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 62: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 63: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 64: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 65: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 66: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 67: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 68: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 69: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 70: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 71: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 72: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 73: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 74: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 75: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 76: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 77: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 78: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 79: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 80: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 81: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 82: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 83: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 84: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 85: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 86: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 87: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 88: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 89: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 90: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 91: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 92: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 93: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 94: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 95: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 96: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 97: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 98: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 99: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 100: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 101: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 102: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 103: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 104: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 105: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 106: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 107: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 108: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 109: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 110: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 111: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 112: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 113: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 114: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 115: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 116: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores
Page 117: Lecturas de Cátedra Problemas - UNRNsiguientes temas: variables, intercambio, estructuras de control de deci- sión (simple, doble, decisiones anidadas e independientes), operadores