universidad nacional de misiones - unam

54
Universidad Nacional de Misiones Universidad Nacional de Misiones Universidad Nacional de Misiones Facultad de Ingeniería Apunte de Informática - DOCENTES Ing. Daniel Refosco Ing. Andrea Santander Ing. Juan Pablo Gross Ing. Alicia Rendon Sr. Matías Krujosky Sr. Walter Wasilewski Facultad de Ingeniería. U.Na.M. – Juan Manuel de Rosas - Oberá (Misiones.) CP 6 – Teléfonos/Fax: + 6/ Fax: Interno . www.fio.unam.edu.ar. E-mail:mailto:[email protected]

Upload: others

Post on 28-Apr-2022

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Universidad Nacional de Misiones - UNaM

,,,,breaklinks,

Universidad Nacional de Misiones

Universidad Nacional de Misiones

Universidad Nacional de Misiones

Facultad de Ingeniería

Apunte de Informática -

DOCENTES

Ing. Daniel Refosco

Ing. Andrea Santander

Ing. Juan Pablo Gross

Ing. Alicia Rendon

Sr. Matías Krujosky

Sr. Walter Wasilewski

Facultad de Ingeniería. U.Na.M. – Juan Manuel de Rosas 325 - Oberá (Misiones.) CP 3360 –Teléfonos/Fax: +54 03755 422169/422170 Fax: Interno 104. www.fio.unam.edu.ar.E-mail:mailto:[email protected]

1

Page 2: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Guía Teórica de Informática - Universidad Nacional de Misiones. Facultad de Ingeniería.Los textos de este libro se distribuyen bajo una licencia Reconocimiento-CompartirIgual 3.0 Un-ported (CC BY-SA 3.0):http://creativecommons.org/licenses/by-sa/3.0/deed.es_ES

Esta licencia permite:Compartir: copiar y redistribuir el material en cualquier medio o formato.Adaptar: remezclar, transformar y crear a partir del material para cualquier finalidad.

Siempre que se cumplan las siguientes condiciones:

Reconocimiento: Debe reconocer adecuadamente la autoría, proporcionar un enlace ala licencia e indicar si se han realizado cambios. Puede hacerlo de cualquier manera razona-ble, pero no de una manera que sugiera que tiene el apoyo del licenciador o lo recibe por eluso que hace.

Compartir Igual: Si remezcla, transforma o crea a partir del material, deberá di- fundirsus contribuciones bajo la misma licencia que el original.Las figuras e ilustraciones que aparecen en el libro son de autoría de los respectivos autores. Deaquellas figuras o ilustraciones que no son realizadas por los autores, se coloca la referenciarespectiva.

Este texto forma parte de la Iniciativa Latinoamericana de Libros de Texto abiertos (LATIn),proyecto financiado por la Unión Europea en el marco de su Programa ALFA III EuropeAid. ElProyecto LATIn está conformado por: Escuela Superior Politécnica del Litoral, Ecuador (ESPOL);Universidad Autónoma de Aguascalientes, México (UAA), Universidad Católica de San Pablo,Perú (UCSP); Universidade Presbiteriana Mackenzie, Brasil(UPM); Universidad de la República,Uruguay (UdelaR); Universidad Nacional de Rosario, Argentina(UR); Universidad Central deVenezuela, Venezuela (UCV), Universidad Austral de Chile, Chile (UACH), Uni- versidad del Cauca,Colombia (UNICAUCA), Katholieke Universiteit Leuven, Bélgica (KUL), Universidad de Alcalá,España (UAH), Université Paul Sabatier, Francia (UPS).

Cátedra de Informática rev1 2 de 143

Page 3: Universidad Nacional de Misiones - UNaM

Índice general

I. Introducción 7

1. Informática 111.1. Qué es la Informática? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111.2. Del Mundo real a la Solución por Computadora. . . . . . . . . . . . . . . . . . . . . . . . 131.2.1. Cómo Informatizar un problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . 131.2.2. Resolución de problemas con computadora . . . . . . . . . . . . . . . . . . . . 141.2.3. Primer paso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 151.2.4. El modelo Computacional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161.2.5. Datos e Información. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3. Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3.1. ¿Qué es un Algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171.3.2. Ejemplo Cotidiano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181.3.3. Problemas Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191.3.4. Definición de Ambiente y Acción. . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.3.5. Acción Primitiva y NO Primitiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201.3.6. Programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211.3.7. Representación de Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.3.8. Diagrama de Flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221.3.9. Pseudoćodigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241.4. Lenguajes de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251.5. Nuestro Procesador: la computadora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 271.5.1. ¿Por qué Unos y Ceros? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 281.5.2. Sistemas Numéricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301.5.3. Equivalencias entre Sistemas numéricos. . . . . . . . . . . . . . . . . . . . . . . 321.5.4. Conversiones entre sistemas numéricos. . . . . . . . . . . . . . . . . . . . . . . 331.6. Conceptos y elementos básicos para la resolución algorítmica . . . . . . . . . . . . . 361.6.1. Eficiencia de las codificaciones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381.6.2. Tipo de Dato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 381.6.3. Tipos de Datos a utilizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 391.6.4. Nombres de Variables/Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . 421.6.5. Nombres de Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.6.6. Notaciones comunes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 441.6.7. Clasificación de Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 451.6.8. Expresiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472. Pseudocódigo Y Técnicas de Programación 552.1. Estructura de un Algoritmo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.2. Técnicas de Programación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 552.2.2. Técnicas de programación algorítmica . . . . . . . . . . . . . . . . . . . . . . . . 562.2.3. Modelo declarativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

3

Page 4: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

2.2.4. Modelo imperativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 562.2.5. Modelo orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 572.3. Estructuras de Control. Programación Estructurada . . . . . . . . . . . . . . . . . . . . 572.3.1. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 582.3.2. Programación estructurada (PE) =>Método Imperativo . . . . . . . . . . . . . 582.4. Organización secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 592.5. Detalle de los Sentencias de PSeInt Comandos: . . . . . . . . . . . . . . . . . . . . . . . 602.5.1. Inicio y Fin de un Proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.5.2. Asignación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.5.3. Definición de Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612.5.4. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.5.5. Ingreso de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 622.5.6. Salida de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 632.6. Organización selectiva o decisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642.6.1. Condición Si-Entonces (if) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642.6.2. Condición Si-entonces-sino (if-else) . . . . . . . . . . . . . . . . . . . . . . . . . . 662.6.3. Selección Múltiple Según (switch) . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.7. Estructuras Repetitivas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.7.1. Ciclo Para (for) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692.7.2. Ciclo Mientras ( while) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 712.7.3. Ciclo Repetir - Mientras ( do- while) . . . . . . . . . . . . . . . . . . . . . . . . . . 712.7.4. Declaración de Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 722.7.5. Borrado de Pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 732.7.6. Espera o Pausa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733. Estructuras selectivas y repetitivas analizadas desde su uso 753.1. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 753.2. Estructuras de selectiva o decisión: Condicionales . . . . . . . . . . . . . . . . . . . . . 763.2.1. Condicionales con una pregunta, Si-Entonces - FinSi (del Inglés: if) . . . . . . 763.2.2. Condicional con varias preguntas, Si-entonces - sino - FinSi (del Inglés: if-else) 783.2.3. Condicionales con casos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 803.2.4. Condicionales en árbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.2.5. Condicionales con casos vs. en árbol . . . . . . . . . . . . . . . . . . . . . . . . 843.2.6. Ejercicios propuestos de estructuras de decisión . . . . . . . . . . . . . . . . . 843.3. Estructuras repetitivas: "Bucles" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 873.3.1. Estructura “Para-FinPara” (FOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 883.3.2. Variantes de uso del PARA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 893.3.3. Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.3.4. Estructura "Repetir - Mientras Que" (Do - While) . . . . . . . . . . . . . . . . . . 983.3.5. Estructura "Mientras - FinMientras" (While) . . . . . . . . . . . . . . . . . . . . . 993.3.6. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1063.4. Bucles con números Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1123.4.1. Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1143.5. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183.5.1. Ejemplos y Aplicaciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . 1183.5.2. Ejemplos de Estructuras de Control - Bucles con Bases numéricas . . . . . . 1194. Introducción 1254.0.1. Porqué utilizar estructuras de datos? . . . . . . . . . . . . . . . . . . . . . . . . . 126Cátedra de Informática rev1 4 de 143

Page 5: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

4.0.2. Ejemplos de usos de estructuras de datos . . . . . . . . . . . . . . . . . . . . . 1264.0.3. Clasificación de las estructuras de datos . . . . . . . . . . . . . . . . . . . . . . 1304.0.4. Estructuras de datos estáticas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1314.1. Cadena (String) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324.1.1. Estructura de datos: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1324.1.2. Declaración de una variable cadena . . . . . . . . . . . . . . . . . . . . . . . . . 1344.1.3. Usos de una variable cadena . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354.1.4. Operaciones con cadenas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1354.2. Arreglo (Array) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1374.2.1. Disposición de los elementos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1384.2.2. Declaración de un arreglo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

II. Bibliografía 141

Cátedra de Informática rev1 5 de 143

Page 6: Universidad Nacional de Misiones - UNaM
Page 7: Universidad Nacional de Misiones - UNaM

Parte I.

Introducción

7

Page 8: Universidad Nacional de Misiones - UNaM
Page 9: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Cátedra de Informática rev1 9 de 143

Page 10: Universidad Nacional de Misiones - UNaM
Page 11: Universidad Nacional de Misiones - UNaM

1. Informática

Este apunte está principalmente dirigido a estudiantes universitarios que se inician en lascarreras de Ingeniería y cursan la materia de Informática que se dicta en el 2do. año de todas lasIngenierías. El propósito de la materia NO es formar al alumno necesariamente para que puedarealizar un programa de gestión comercial o algo complejo, sino enseñar :Los conceptos de tipos de variables, espacios de memoria, sintaxis , semántica.Entender un problema y poder plantear una solución algorítmica del mismo.Buscar codificar el algoritmo con un Pseudocódigo.Codificar en un Lenguaje.

Para lograr el objetivo, si bien existen diversos lenguajes, elegimos uno que creemos sirve paranuestro propósito, sin llegar a complicar con cuestiones que necesitarían mas tiempo como serrealizar programas bajo entornos gráficos. Hemos observado que el entorno de programacióngráfica puede desviarnos de nuestro objetivo primario, pero si logramos que el alumno puedallevar adelante con éxito los cuatros puntos indicados, el entorno de programación gráfica seríasimplemente un paso mas allá en la programación.

1.1. Qué es la Informática?

La Informática nace bajo la idea de ayudar al hombre en aquellos cálculos rutinarios, dondefrecuentemente existe una repetición de tareas. Ejemplo de ello es la gestión de un censo, elprimero automatizado en 1890 en EEUU utilizando tarjetas perforadas. En esa época se pensóque una máquina no sufriría cansancio ni cometería errores. Con el tiempo esta idea se fueafianzando en la sociedad, y es hoy día que se sigue trabajando para mejorar las prestaciones delos sistemas de cómputo.Si repasamos la historia veremos que la Informática estuvo entre nosotros desde tiemposlejanos, por supuesto no tal cual la percibimos hoy día. A continuación transcribimos algunasideas de importantes pensadores relacionados con la Informática. Para ubicarse en la historia,debe notarse que los primeros modelos de computadoras aparecieron alrededor del año 1940.Gottfried Wilhelm Leibniz (1646-1716) fue uno de los grandes pensadores de los siglos XVIIy XVIII, decía que “Es una pérdida de tiempo que personas cualificadas pierdan horas comoesclavos en la labor de calcular, lo que podría ser delegado en cualquier otro si se pudieranutilizar máquinas”. Basándose en los trabajos de Pascal construyó una calculadora mecá-nica compuesta por cilindros dentados con longitud incremental que podía sumar, restar,multiplicar y dividir automáticamente, conocida como la rueda de Leibniz. Algunas máqui-nas basadas en estos mismos principios han jugado un papel preponderante en la SegundaGuerra Mundial, e incluso algunas están todavía en uso. Leibniz fue también el primer pen-sador occidental en investigar la aritmética binaria y sentó las bases de la lógica simbólica,basada en símbolos y variables abstrayendo la semántica de las proposiciones.

11

Page 12: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Ada Byron (1815-1852) desarrolló los primeros programas para la Máquina Analítica de Bab-bage (1833), debido a estos trabajos, se la considera el primer programador de computado-ras del mundo. Ella escribió “La Máquina Analítica no tiene la pretensión de crear nada. Puederealizar cualquier cosa siempre que conozcamos cómo llevarla a cabo; pero es incapaz dedescubrir relaciones analíticas o verdades". Su potencialidad es la de ayudarnos a hacer po-sible aquello sobre lo que tenemos un conocimiento previo. Muchas han sido las mujeresque han realizado grandes aportes a la Informática, aún así Ada Byron es la única mujer quecuenta con un lenguaje de programación que lleva su nombre: en 1979 el Departamento deDefensa de los Estados Unidos creó un lenguaje de programación basado en Pascal que sellamó lenguaje de programación Ada en su honor.El británico George Boole (1815-1864), por su parte, fue un destacado matemático que estáconsiderado como uno de los pioneros en el desarrollo de las ciencias de la computación.Sus aportes teóricos dieron lugar a la especialización que se conoce como álgebra de Booleo álgebra booleana.Herman Hollerith (1860-1929) fue un estadístico estadounidense que inventó la máquinatabuladora. Es considerado como el primer informático, es decir, el primero que logra el tra-tamiento automático de la información (Informática = Información + automática). En esostiempos, los censos se realizaban de forma manual, con el retraso de unos 10 años en suprocesamiento. Ante esta situación, Hollerith comenzó a trabajar en el diseño de una má-quina tabuladora o para procesar los datos del censo, basada en tarjetas perforadas quepatentó en el año 1889. Un año después incluyó la operación de sumar con el fin de utilizarlaen procesos de contabilidad.Alan Turing (1912-1954) fue unmatemático, lógico, científico de la computación, criptografíay filósofo británico. Es considerado uno de los padres de la ciencia de la computación sien-do el precursor de la informática moderna. Proporcionó una influyente formalización de losconceptos de algoritmo y computación, la famosa máquina de Turing. Durante la SegundaGuerra Mundial, trabajó en descifrar los códigos nazis, particularmente los de la máquinaEnigma. Tras la guerra diseñó una de las primeras computadoras electrónicas programa-bles digitales en el Laboratorio Nacional de Física del Reino Unido (1945). Entre otras mu-chas cosas, también contribuyó de forma particular e incluso provocativa al enigma de silas máquinas pueden pensar, es decir a la Inteligencia Artificial. Turing decia: “Las máquinasme sorprenden con mucha frecuencia. Hay varias películas sobre la vida de este hombre,la última en el 2014 una película llamada "El código Enigma", trata de su historia personal ylaboral.Vohn Von Neumann (1903-1957) fue unmatemático húngaro que realizó contribuciones fun-damentales en física cuántica, análisis funcional, teoría de conjuntos, ciencias de la compu-tación, economía, análisis numérico, cibernética, hidrodinámica, estadística y muchos otroscampos. Está considerado como uno de los más importantes matemáticos de la historiamoderna. Diseñó una arquitectura de computadoras que lleva su nombre, y aún es utiliza-da en casi todas las computadoras personales, microcomputadoras, minicomputadoras ysupercomputadoras. Von Neumann decía “Podría parecer que hemos llegado al límite de loque es posible lograr con la tecnología informática, aunque hay que tener cuidado con talesdeclaraciones, ya que tienden a sonar bastante tontas en cinco años.”

El término Informática nace recién en la década de 1960 en Francia bajo la denominaciónINFORMATIQUE, debido a la contracción de las palabras INFORmation y autoMATIQUE, es decirel tratamiento de la información por medios automáticos. En las múltiples publicaciones, laInformática se define de diversas maneras pero siempre ronda la misma idea: el tratamientoCátedra de Informática rev1 12 de 143

Page 13: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

automático de la información.A continuación veremos algunas definiciones.INFORMÁTICA es la ciencia que estudia el tratamiento automático y racional de la informa-ción. Se habla de tratamiento automático debido a que son máquinas las que procesan lainformación y se dice racional por estar los procesos definidos a través de programas quesiguen el razonamiento humano.INFORMÁTICA es el estudio de los algoritmos y de las computadoras - de sus teorías, susmodelos abstractos, su realización mecánica, su fiabilidad y verificación, su medida y efica-cia, su descripción lingüística y su contexto social.La Ciencias de la Computación o Informática como se le llama en algunos países hispano-americanos, es la disciplina que busca establecer una base científica para diversos temas,como el diseño de computadoras, la programación de computadoras, el proceso de infor-mación, la elaboración de algoritmos para resolver problemas y el proceso algorítmico ensí.

1.2. Del Mundo real a la Solución por Computadora.

1.2.1. Cómo Informatizar un problema.

El proceso de informatizar la resolución de problemas del mundo real, tales como resolver unaecuación matemática o realizar la liquidación de sueldos de los empleados de una empresa,conlleva una serie de pasos que debemos seguir para obtener una respuesta encuadrada a losdatos provistos.

Figura 1.1.: Pasos para informatizar un problemaCómo primer paso se deberá conocer las especificaciones del problema, es decir, analizar ydeterminar en forma clara y concreta el objetivo que se desea.Es un error frecuente tratar de comenzar a buscar una solución sin antes tener unainterpretación total del problema o cuál es el propósito de la solución.Por lo tanto debemos analizar los datos que se disponen y cuáles son los resultados que sedesean. Una vez que se conoce el problema en detalle, se puede intentar realizar un Modelo delmismo, es decir, Abstraer el problema tratando de encontrar los aspectos principales que sepueden resolver, los datos que se han de procesar y el contexto del problema, simplificando suexpresión. Disponiendo de un panorama más claro del problema, sus datos y resultados, sepuede escribir una serie de acciones que seguidas paso a paso resuelvan el problema. Esto es el

Algoritmo. Si esta etapa es exitosa, se traduce el algoritmo, mediante un lenguaje deprogramación, para convertirlo en un Programa que podrá ser interpretado por la computadorapara su ejecución en forma rápida y eficaz.Un algoritmo es una forma de describir la solución de un problema, explicando paso a paso cómose debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en un tiempofinito

Cátedra de Informática rev1 13 de 143

Page 14: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Observación:La figura 1 incluye importantes conceptos que serán tratados a lo largo del apunte. Se recomien-da comprender cada elemento de la figura.

1.2.2. Resolución de problemas con computadora

Existen cinco etapas a tener en cuenta para resolver un problema que luego será ejecutado poruna computadora en forma rápida y eficaz, ellas son:1. Análisis del problema, se formula y analiza el problema en su contexto del mundo real. COM-PRENDER EL PROBLEMA.2. Diseño de una solución, se elige una metodología para hallar la solución del problema. TRA-ZAR UN PLAN PARA RESOLVERLO.3. Escritura de un algoritmo, se expresa la metodología del punto anterior de forma tal quepueda ser interpretado por el procesador que lo va a ejecutar. ESCRIBIR EL ALGORITMO.4. Codificación del algoritmo. Un algoritmo es una especificación simbólica que debe traducir-se a un programa a partir del conocimiento de un lenguaje de programación para poder serejecutado por la computadora. ESCRIBIR EL PROGRAMA O CODIFICAR EL ALGORITMO.5. Ejecución y validación del algoritmo-programa. La etapa siguiente a escribir el programa, esla verificación de funcionamiento delmismo, es decir, ver sí el programa conduce al resultadodeseado con los datos dados del mundo real. PROBAR EL PROGRAMA.La primera etapa está dada por entender el enunciado del problema. Es importante que seconozca lo que se desea que realice la computadora, mientras esto no se conozca del todo notiene mucho caso continuar con la siguiente etapa.Cuando se ha comprendido lo que se desea resolver, es necesario hacer un Análisis delproblema, definiendo:

Los datos de entrada.Cuál es la información que se desea producir, los resultados.Los métodos y fórmulas que se necesitan para procesar los datos para arribar a los resulta-dos, la metodología de resolución.

Una vez que se tiene en claro la metodología de resolución, se escribe el algoritmo en formasimbólica , esto se verá en la materia. En una primera etapa, es aconsejable probar que elalgoritmo propuesto realmente resuelva el problema planteado, utilizando papel, lápiz y nuestramente como procesador, esto es llamado Prueba de Escritorio.En una segunda etapa, este algoritmo podrá ser traducido en un lenguaje reconocible por lacomputadora, generando así el programa. La serie de instrucciones del programa se la conocecomo código fuente, el cual se escribe en un lenguaje de programación, generalmente unlenguaje de alto nivel (comprensible por el hombre, como Pascal, Fortran o C, entre otros).El programa podrá ser probado en la computadora. En este caso, pueden aparecer errores desintaxis y/o de semántica. Veamos que son cada uno de ellos.

Cátedra de Informática rev1 14 de 143

Page 15: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Errores de sintaxis

Se refieren a que alguna instrucción está mal escrita y por lo tanto el procesador no puedereconocerla. Son simples de detectar y de modificar. Esta operación la resuelve el traductor delentorno de programación, el Compilador o el Intérprete. Si en el proceso de traducción sedetectan errores de sintaxis, habrá que volver al punto 4) para codificar correctamente.Ejemplo, en el lenguaje Español un error de Sintaxis sería: "No tiene kazo buscar el error", lapalabra "kazo", deberíamos reemplazarla por "caso"Errores de semántica

Se refieren a cuestiones de la lógica de la solución, y son los más complicados de hallar. Es en elproceso de Validación donde se detectan los errores de lógica. Habrá que volver al punto 1) parainterpretar correctamente el enunciado del problema para rever y modificar el algoritmopropuesto o proponer una nueva solución al problema dado. Algo muy importante a tener encuenta cuando se escriben programas es la Documentación del mismo. Esto se refiere a loscomentarios que se añaden al código fuente para hacer más claro el entendimiento delprograma: descripción del funcionamiento del programa, descripción del problema, nombre delautor, entre otros. A menudo un programa escrito por una persona, es usado por otra, o por ellamisma después de un tiempo. Por ello la documentación sirve para ayudar a comprender lalógica del programa, para re-usarlo o para facilitar futuras modificaciones (proceso demantenimiento).Ejemplo, en el lenguaje Español un error de Semántica: "Juan se fue a Casar al Bosque". En estecaso no queda claro si se quiso decir que Juan fue al Bosque a Casarse o fue al bosque a Cazar,no es menor la diferencia en la interpretación!!!.Vemos que no hay error en escritura de las palabras (Sintaxis) pero podemos afirmar que dejadudas la interpretación de la frase.Podríamos plantear otro ejemplo mas burdo en el que no quedan dudas del error lógico o desemántica, por ejemplo: "Llovía de abajo hacia arriba".1.2.3. Primer paso.

En principio, cualquier algoritmo que diseñemos para ser ejecutado en una computadora, puedeser realizado a mano, con papel y lápiz, suponiendo que nosotros simulemos ser el procesador yque disponemos del tiempo suficiente para llevarlo a cabo. En realidad, encargamos a lacomputadora la ejecución de los pasos que componen un algoritmo porque es capaz decompletarlo en un tiempo mucho menor del que nosotros emplearíamos, y porque lacomputadora es menos proclive a cometer errores que nosotros, quienes por distracción ocansancio erramos habitualmente. Sin embargo, las computadoras sólo pueden ejecutaralgoritmos que se componen de acciones que puede entender. Por lo tanto, es necesarioconocer bien cuáles son dichas acciones para diseñar algoritmos bien escritos. Saber cuál es elalgoritmo que resuelve un problema dado, suele ser un paso difícil para todo aquel que no tengapráctica en el tema. Para escribir algoritmos, el primer paso necesario es plantear cuál sería lasolución del problema en términos comunes, en palabras habituales, haciendo uso de todo loque esté a nuestro alcance, la imaginación, la matemática, el dibujo, el intercambio de ideas, lalógica. No existe una técnica establecida para encarar la solución de un problema. La íntimaasociación entre el proceso de descubrimiento de algoritmos y el de resolución de problemas, engeneral ha hecho que los científicos de la computación se unan a otras disciplinas en labúsqueda de mejores técnicas para resolverlos. Pero la capacidad para resolver problemas sigueCátedra de Informática rev1 15 de 143

Page 16: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

siendo más una aptitud artística que debe desarrollarse individualmente, que una ciencia precisapor aprender.

1.2.4. El modelo Computacional.

Para encarar la resolución de un problema por computadora hay que considerar como punto departida que el procesamiento de la información lleva en sí el hecho de tomar datos, elaborarlos yemitir resultados de acuerdo a dichos datos y a la lógica del proceso que se está ejecutando enese momento. Por lo tanto, se puede pensar en un modelo computacional compuesto de trespartes: ENTRADA, PROCESO y SALIDA, como se muestra en la siguiente.

Figura 1.2.: Modelo ComputacionalUna vez entendido el problema hay que desentrañar del enunciado los datos necesarios paracomenzar el proceso de resolución, abstrayéndose del proceso de resolución. Habría quepreguntarse:

“¿Que necesito para resolver el problema, si yo fuese el procesador?”“¿Que datos necesito queme de otra persona para poder obtener la solución del problema?”,y anotarlos como ENTRADA o DATOS.

Una vez determinados los datos, se deberá determinar cuál es el/los resultado/s, es decir, qué seobtiene con los datos de entrada y anotarlos como SALIDA o RESULTADOS. A veces pueden sermás fáciles de visualizar los resultados antes que los datos de entrada, en dicho caso habría quepreguntarse:“¿Para obtener este resultado, qué información necesito?”( ó Que datos de Entrada necesi-to?).Luego se preguntará “¿Cuáles son los pasos para llegar al resultado partiendo de los datos?”.

Con lo cual se podrá escribir el PROCESO o ALGORITMO asociado. Por ejemplo, si se desearealizar un algoritmo para calcular el área y el perímetro de un círculo en función de su radio, lasdiferentes partes del modelo computacional serán:Entrada : El r adi o del Círculo.Proceso: Ar ea =π∗ r adi o2 , Per ımetr o = 2∗π∗ r adi oSalida: Ar ea Per ımetr oEl proceso (algoritmo) asociado a este problema será:Dar el valor del radio y guardar ese valor con el nombre R.Calcular el Área como pi * radio * radioCalcular el Perímetro como 2 * pi * radioInformar los resultados de Área y Perímetro.

Cátedra de Informática rev1 16 de 143

Page 17: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Sin embargo, el proceso (algoritmo) expresado en forma coloquial (coloquial: Que es propio de laconversación corriente) no puede ser entendido por la computadora. Por lo cual habrá queescribirlo siguiendo reglas especiales que la computadora entienda.Vale la pena observar que la relación entre entrada, proceso y salida no es algo quenecesariamente se realice en este orden: primero ingresar todos los datos, luego procesarlos, ypor último exhibir todos los resultados. Por ejemplo un algoritmo puede solicitar la entrada dealgunos datos, obtener ciertos resultados, y en base a esto pedir nuevos datos y mostrar otrosresultados sobre la marcha del proceso, es por ello que la interpretación del enunciado esfundamental.1.2.5. Datos e Información.

Por último, describiremos la diferencia que existe entre Datos e Información, términos que sepueden pensar como sinónimos. En el ambiente de la Informática, el término información puedeaplicarse a casi cualquier cosa que pueda comunicarse, tenga o no valor.Los datos, en principio, son información no elaborada, que una vez procesados (comparados,ordenados, sumados, etc.) constituyen información útil.Según esto, las palabras, los números, las imágenes de este libro son símbolos que representandatos. Si subrayase una frase, se añadirá información a la página.En una dada situación problemática se puede disponer de muchos datos, de los cuales sóloalgunos pueden ser útiles para la resolución del problema, es decir, considerados informaciónútil.Entonces podemos decir que la información es el conocimiento producido como resultado delprocesamiento de los datos.

Otro término que se utiliza es Tratamiento de la información, referido al conjunto de operacionesque se realizan sobre una dada información. Esto es “lectura de datos”, “preservar datos”,“comparar datos”, “procesar aritméticamente datos”, “presentar resultados”. Una adecuadacombinación de estas operaciones lleva a resolver los problemas. A continuacióncomenzaremos a formalizar lo presentado en esta sección.Se deja para el lector completar la siguiente tabla.Indicar si... es Dato ó Información

La temperatura es de 25La temperatura es de 25 ºCLa temperatura es de 25 gradosPIPI1.3. Algoritmos.

En la presente sección desarrollaremos el concepto de algoritmo, base de la temática de esteApunte.1.3.1. ¿Qué es un Algoritmo?

El término algoritmo deriva del nombre del matemático persa Abu Ja’far Mohammed ibn MusaAl-Khwarizm (Mohammed, padre de Ja’far, hijo de Moisés, nacido en Khowarizm), el cual vivióCátedra de Informática rev1 17 de 143

Page 18: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

alrededor del año 825 después de Cristo. Mohammed escribió tratados de Aritmética y Álgebra.La acepción original fue algorism y hacía referencia al proceso de prueba de cálculos realizadosutilizando números arábigos, tema central del libro de Al-Khowarizm.Un algoritmo es una forma de describir la solución de un problema, explicando paso a paso cómose debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en un tiempofinito.

Se pueden inferir las siguientes Palabras Claves: Solución, Paso a Paso, Respuesta, TiempoFinito.Seguramente existirán distintos algoritmos para resolver un mismo problema y todos seráncorrectos, cada uno de ellos pensado por una persona diferente, cada uno de ellos con un diseñodistinto, cada uno de ellos con un sello propio. Escribir algoritmos es un arte, en el que cadapersona le dará su estilo personal.Las características de un algoritmo deben ser:1. preciso, es decir, debe indicar claramente, sin ambigüedades, cada uno de los pasos a seguirpara conseguir el objetivo propuesto.2. exacto, es decir, que si se sigue el algoritmo varias veces con el mismo juego de datos, losresultados obtenidos deben ser los mismos.3. finito, de tiempo finito, su ejecución debe concluir en algún momento.

¿Quién “ejecuta” éstas acciones? La respuesta es: un procesador.Un procesador es aquel sujeto o máquina que puede entender un enunciado y ejecutar el trabajoindicado en el mismo.

La sintaxis y semántica a utilizar para escribir un algoritmo depende del lenguaje que conoce elprocesador, pues según cuál sea éste, habrá que describir las tareas con más o menos detalle.Observemos que dependiendo del procesador puede cambiar el concepto de dato o información,por ejemplo para un chico de 2do. grado PI, lo puede tomar como dos letras P e I, pero para unestudiante de Ingeniería se referiría al valor de 3,14... que se representa con la letra griega conocidacomo PI ( π).

Entonces, frente a un problema, sabiendo quien será el procesador y su lenguaje decomunicación, podremos describir la solución del problema mediante un algoritmo que puedaser entendido y ejecutado sin ambigüedades.1.3.2. Ejemplo Cotidiano.

Para comenzar a formalizar los conceptos fundamentales para escribir algoritmos veremos unejemplo de la vida cotidiana:Escribir la receta de cocina para hacer bombas de papa para 4 personas.Existen dos fases en la resolución de este planteo:

determinar los ingredientes necesarios,describir los pasos para hacer bombas de papas.

1. Ingredientes (elementos necesarios): 1 Kg. de papas, 1 huevo, pan rallado, queso cremoso,aceite, sal y pimienta a gusto.2. Separar en tareas los pasos necesarios para lograr el objetivo:

Cátedra de Informática rev1 18 de 143

Page 19: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Tarea 1: Pelar un Kg. de papas y cortarlas en dados pequeñosTarea 2: Hervir las papas hasta que estén cocidasTarea 3: Pisar las papas hasta lograr un puréTarea 4: Condimentar a gusto y dejar enfriar.Tarea 5: Batir el huevo en un recipiente

• Tarea 5.1: Sal y pimienta a gustoTarea 6: Colocar en un plato el pan ralladoTarea 7: Cortar el queso en dados de 1cm aproximadamenteTarea 8: Tomar una porción de puré.

• Tarea 8.1: Colocar un dado de queso en el interior.• Tarea 8.2: Realizar una bolo ocultando el queso• Tarea 8.3: Empapar con el huevo batido y luego pasar por el pan rallado.

Repetir la tarea 8 hasta que no haya más puré.Tarea 9: Colocar una taza de aceite en una sartén

• Tarea 9.1: calentar a fuego moderadoTarea 10: Colocar las bombas de papas en el aceite y cocinar hasta que se doren

• Tarea 10.1: Sacar del fuego y colocarlas sobre papel absorbente.Repetir la tarea 10 para cocinar todas las bombas.FIN.

Seguramente Ud. habrá escrito una receta de cocina distinta, o habrá pensado que no sabehacer este algoritmo, y por lo tanto debió consultar con algún cocinero experto. Experto no serefiere a un chef especializado, sólo debe ser una persona que sepa realizar las acciones, porejemplo su mamá.Pero ¿quién “ejecuta” estas acciones? Tal cual está planteado el algoritmo lo podrá ejecutar todapersona que comprenda que es “batir los huevos” sin ambigüedades ni más detalles. Tal vez Ud.pueda seguir estos pasos y terminar con una exquisita comida, o quizás no esté aún preparadopara enfrentar dicho desafío.Pero porqué pensar en subestimar al lector, tal vez Ud. sea unexperto cocinero, y no necesite seguir estos pasos para hacer las bombas de papas,simplemente su algoritmo sea Tarea 1: hacer bombas de papas para 4 personas, pues es unaorden que entiende perfectamente.Otro punto que podemos destacar, con el cual se resalta la importancia del procesador es porejemplo la Tarea 7: Cortar el queso en dados de 1cm aproximadamente, creo que si el procesadores un estudiante de ingeniería y no es un cocinero experimentado le resultaría menos ambiguoalgo como : Tarea 7: Cortar 300 gramos de Queso Por Salut en dados de 1cm aproximadamente,Se concluye pues que la redacción de un algoritmo depende del procesador que lo va a ejecutar.Como conclusión, frente a un problema debemos saber quién será el procesador y escribir unasolución que pueda entender y llevar a cabo sin ambigüedades.1.3.3. Problemas Algoritmos.

Son aquellos problemas cuya solución puede expresarse mediante un algoritmo.Cátedra de Informática rev1 19 de 143

Page 20: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

En la vida cotidiana encontramos muchos problemas algorítmicos, tanto dentro como fuera delcampo altamente especializado de la informática. Ejemplo de otros problemas algorítmicos sonlos siguientes:Ir a la Biblioteca. Conjunto de acciones para llegar a la Biblioteca.Dar la vuelta al mundo por el Ecuador. Un itinerario para recorrer el mundo.Resolver una ecuación matemática. Pasos para resolver una ecuación.Cambiar la rueda a un auto. Pasos a seguir para cambiar la rueda.En estos casos, los algoritmos muestran las principales características señaladas en ladefinición: exactitud, efectividad y terminación garantizada. Cuando se ejecutan determinadosalgoritmos pueden completarse en un pequeño intervalo de tiempo, mientras que otros puedenllevar mucho tiempo.Aquí cabe preguntar si existen problemas no algorítmicos, y la respuesta esafirmativa.Un ejemplo de este caso es el problema de “Escribir todos los números enteros comenzandodesde 1". No es un problema algorítmico, pues la resolución (que todos podemos imaginar yescribir sin dificultad) no cumple la condición de finitud.

1.3.4. Definición de Ambiente y Acción.

Ambiente de un trabajo, es el conjunto de todos los recursos necesarios para la ejecución de esetrabajo.

Por ejemplo los ingredientes son el ambiente en la receta de cocina.Este es un error muy frecuente por parte del que se inicia en la programación, olvidar quealgunos elementos deben ser especificados para que el algoritmo pueda ser ejecutado con éxito,un ejemplo de ellos es cuando se le dice al alumno que describa un algoritmo que indique:¿Como hacer un mate? , es muy probable que comience el proceso de manera correcta, peroomita indicar que está ubicado en la cocina de su casa y no el desierto, con este último Ambientesin duda el Algoritmo no se podría llevar adelante con éxito.Acción es un evento que modifica el ambiente.

Descripto el ambiente de un problema, una acción sobre ese ambiente es un hecho de duraciónfinita por el cual, a partir de un estado inicial, se obtiene un nuevo estado final. Por ejemplo, en laacción “pelar las papas”, el estado inicial es: las papas con cáscara y el estado final, las papas sincáscara (peladas).1.3.5. Acción Primitiva y NO Primitiva.

A continuación veremos cuáles son las acciones primitivas y cuáles no lo son.Las acciones primitivas son las que el procesador puede interpretar y ejecutar.

Pero, ¿qué sucedería si ese procesador no entiende una acción determinada? Específicamenteesa acción no pertenece a su lenguaje. Habrá que modificarla de tal manera que pueda serescrita en términos que entienda el procesador. En muchos casos este tipo de acciones debenser descompuestas en tareas más detalladas para lograr el efecto que se desea. Por ejemplo ennuestro algoritmo culinario, podría ser el caso que un determinado procesador no sepa de que setrata la tarea: “Batir huevos en un bols” y haya que explicárselo con más detalles.La acción no primitiva debe ser descompuesta en acciones primitivas. NOPrimitiva =∑Primitivas

Cátedra de Informática rev1 20 de 143

Page 21: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Veamos algo pero en el área de Matemáticas, supongamos que un procesador no entiende quesignifica: 32 (3 al cuadrado), pero podría entender , multiplicar dos veces 3*3 , y mas , se podríaentender que se quiere descomponer la multiplicación en sumas sucesivas 3+3+3 (sumar 3veces 3 es lo mismo que multiplicar 3*3). Es decir que la operación suma sería la Primitiva, eneste caso y elevar al cuadrado sería NO primitiva.Existen diferentes técnicas para descomponer acciones no primitivas en acciones primitivas.Uno de estos métodos se denomina Top-Down o de refinamientos sucesivos, y será el queusaremos en este libro.

La otra técnica de programación es Bottom-up, se descartó, por varias razones, si tieneinquietudes al respecto se recomienda buscar en Internet, en esta materia NO se usa estatécnica.El método que utilizaremos parte de una idea general de resolución y luego va descomponiendolas tareas hasta conseguir una secuencia de acciones primitivas que permitan al procesadorresolverla.Se concluye pues que se debe escribir un algoritmo que resuelva el problema dado, y que luegodeberá ser adaptado al procesador que lo va a ejecutar. Por ello, frente a un problema debemossaber quien será el procesador y escribir una solución que pueda entender y ejecutar.En este libro planteamos que el procesador será la computadora equipada con algún lenguajeespecífico.

La computadora puede trabajar con distintos lenguajes. Sin embargo, para un gran número detareas de uso corriente, las acciones primitivas son similares en los distintos lenguajes, lo quepermite desarrollar algoritmos que sean independientes del lenguaje e incluso de la máquina quelos va a ejecutar.

1.3.6. Programa.

Definiremos qué se entiende por el término programa.Un programa es un conjunto de acciones que puede entender y ejecutar una computadora. Otradefinición podría ser: “es un algoritmo traducido a algún lenguaje que pueda ser entendido poruna computadora para poder ejecutarlo”.Cada acción del programa se denomina instrucción.Una instrucción es una combinación de palabras y símbolos que obedeciendo a la sintaxis propiade un lenguaje, son interpretados y utilizados por el computador para realizar una determinadaacción.

Para llegar a hacer un programa es necesario el diseño previo del algoritmo. Esto es, representarla solución del problema en un lenguaje natural, en el cual se expresan las ideas diariamente.Lenguaje de programación es un conjunto de símbolos (sintaxis) y reglas (semántica) que permiteexpresar programas

Los algoritmos deberían ser independientes tanto del lenguaje de programación en que seexpresa el programa, como de la computadora que lo va a ejecutar.No hay programa sin Algoritmo.

Cátedra de Informática rev1 21 de 143

Page 22: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

1.3.7. Representación de Algoritmos.

Ahora veremos en que forma se puede escribir un algoritmo. No existe un lenguaje único yuniversal para escribir algoritmos. Cada lenguaje tiene una sintaxis determinada, un grupo finitode elementos que ayudan a representar los algoritmos, y una semántica asociada a la sintaxis, lacual se refiere al concepto que se representa.Existen libros que tratan el tema, en ellos existen muchísimos elementos, no es el propósito deesta materia usar todos, así que se reducen los elementos a un mínimo que consideramosadecuado para escribir cualquier Algoritmo.La sintaxis, conformada por dibujos y/o por palabras, no debe ser ambigua, y debe tener un nivelde detalle bien establecido con el cual pueda expresarse el algoritmo. Otro punto importante atener en cuenta es que toda representación de algoritmos debe usar alguna forma que permitaindependizar dicho algoritmo de detalles propios de los lenguajes de programación en sí.Además, la descripción del algoritmo deber ser tal que permita ser fácilmente transformado enun programa, esto último condiciona el uso de cualquier combinación.Existen dos tipos de representaciones de algoritmos:1. Gráfica (mediante dibujos)2. No gráfica (mediante textos).

Los métodos usuales para representar algoritmos son:1. Diagrama de flujo (del tipo Gráfico)

2. Diagrama de Nassi Schneiderman (comúnmente denominado Diagrama de Chapin)3. Pseudocódigo (del tipo NO Gráfico)

4. Lenguaje natural5. FórmulasLos dos primeros son formas gráficas de representación, mientras que los últimos son nográficas.Analizaremos las distintas representaciones. Los métodos 4) y 5) no suelen ser fáciles detransformar en programas. No es frecuente que un algoritmo sea expresado por medio de unasimple fórmula, pues no es sencillo traducirlo a un lenguaje de programación. Observamos en elejemplo de las bombas de papas lo ambiguo del lenguaje natural (en nuestro caso el español). Acontinuación veremos las diferentes representaciones sobre un mismo algoritmo, cuyoproblema base es:

Enunciado del Problema: “Calcular el promedio de un conjunto de números positivos, suponiendoque los números ingresan de a uno por teclado. Un valor cero como entrada indicará que finalizóel ingreso de números positivos y se deberá mostrar el promedio de los mismos.”

Para poder resolver el problema mediante una representación Algorítmica vamos a definirprimero los elementos : Gráficos (Diagrama de Flujo) y NO Gráficos (Pseudocódigo)1.3.8. Diagrama de Flujo

Es un diagrama que utiliza figuras geométricas unidas por flechas para indicar la secuencia enque deben ejecutarse las acciones. Los símbolos utilizados han sido normalizados por elInstituto Norteamericano de Normalización (ANSI). En nuestro caso utilizaremos algunos que noCátedra de Informática rev1 22 de 143

Page 23: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

son los normalizados pero que son los utilizados en un programa llamado PSeInt, de manera queno se generen confusiones.Símbolo Función

Proceso, cualquier tipo de Operación Aritméticao de Asignación.Entrada, Ingreso de Datos por teclado, Leer.

Salida, Egreso por pantalla, Escribir.Decisión, indica operaciones del tipo lógico,preguntas con solo 2(dos) respuestas posibles.

Inicio, debe existir solo uno dentro del Diagramade Flujo para que respete la definición deAlgoritmo.Fin, debe existir solo uno dentro del Diagramade Flujo para que respete le definición deAlgoritmo.Flecha, une los elementos gráficos dándole unadirección, sentido de recorrido.Veamos como sería el ejercicio

Enunciado del Problema: “Calcular el promedio de un conjunto de números positivos, suponiendoque los números ingresan de a uno por teclado. Un valor cero como entrada indicará que finalizóel ingreso de números positivos y se deberá mostrar el promedio de los mismos.”

Figura 1.3.: Diagrama de FlujoCátedra de Informática rev1 23 de 143

Page 24: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

1.3.9. Pseudoćodigo.

Un pseudocódigo es un código no convencional o lenguaje no establecido universalmente.Concretamente un pseudocódigo es un lenguaje formado por palabras comunes del idioma queelija el que lo use, en nuestro caso el español. Por lo cual el uso de tal tipo de lenguaje hace quela escritura de los algoritmos sea relativamente fácil. La ventaja del pseudocódigo es que alusarlo, el programador se puede concentrar en la lógica de resolución del problema más que enlas reglas del lenguaje, el cual ya conoce. Por otra parte, facilita la modificación del algoritmo sise descubren errores de lógica, ya que para agregar nuevas acciones se escribe en el mismorenglón separando las acciones por un punto y coma.El algoritmo propuesto se representa en pseudocódigo de la siguiente forma:1 Proceso Ejercicio12 Definir Acumulador, Datos , Promedio, Contador como Real;3 Acumulador =0;4 Contador =0;5 Datos =1;6 Mientras Datos!=0 Hacer7 Leer Datos;8 Contador=Contador+1;9 Acumulador=Acumulador+Datos;10 FinMientras11 Promedio=Acumulador/Contador;12 Escribir Promedio;13 FinProceso

En este Apunte se utilizarán las representaciones Diagrama de flujo y Pseudocódigoindistintamente. En particular en esta materia vamos a usar un Software llamado PSeInt.Según nuestra experiencia a la mayoría de los alumnos le resulta práctico una o las dos manerasde representación. Al margen de lo que tenga que ver con la comprensión de una u otra existenpuntos a Favor del Pseudocódigo como ser:Administrar el espacio en una hoja de papel, suele ser mas parecido a lo que hacemos conmas frecuencia el tomar nota por ejemplo.No se necesitan elementos de dibujo para realizarlo, como ser reglas o escuadras.Es muy fácil pasar del algoritmo representado por un pseudocódigo a un programa.Se puede observar claramente los niveles que tiene cada operación, por la indentaciónEs la representación narrativa de los pasos que debe seguir un algoritmo para dar solucióna un problema determinado.El pseudocódigo utiliza palabras que indican el proceso a realizar.Es muy simple introducir modificaciones, continuando en el mismo renglón.

Como desventajas del pseudocódigo podemos mencionar.No es universal, depende de la persona o programa , no es lo mismo para por ejemplo unlenguaje.

Cátedra de Informática rev1 24 de 143

Page 25: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Una consecuencia del punto anterior es que no se puede llevar de un lado a otro ( portable)ya que no es universal.Aunque son pocas las desventajas, son importantes..pero igual ayudan y facilitan el proceso deaprendizaje, nosotros usaremos en la materia uno que permite instalarse en los sistemasoperativos mas comunes, de manera que el lector no debería tener problemas, como yamencionamos se llama PSeInt.

1.4. Lenguajes de programación

Como hemos visto, un Lenguaje de Programación es un conjunto de palabras y símbolos quepueden expresar ideas. Está compuesto por una sintaxis (palabras y símbolos) y una semántica(reglas que permite expresar ideas).Lenguaje de programación es un conjunto de símbolos (sintaxis) y reglas (semántica) que per-mite expresar programas.

Los lenguajes de programación se pueden clasificar de la siguiente manera:Lenguaje de máquina.Lenguaje de bajo nivel.Lenguaje de alto nivel.Lenguaje algorítmico.

A continuación veremos detalles de cada uno de ellos.Lenguaje de máquina

Está escrito en un “idioma” que entiende el microprocesador (el CPU, el cerebro de la máquina).Las instrucciones son cadenas de 0 y 1 en código binario. Por ejemplo, la instrucción sumar losnúmeros 9 y 11 podría ser 0001 1100 0111 0011 1001 1011Ventaja:

La velocidad de ejecución de los programas es directa pues el microprocesador las entiende yejecuta.Desventaja:

Es un lenguaje de símbolos muy diferentes al nuestro, por lo tanto la codificación del programase hace lenta y se pueden cometer muchos errores. Las instrucciones en código de máquinadependen del hardware de la computadora y por lo tanto difieren de una máquina a otra.Lenguaje de bajo nivel

Los lenguajes de bajo nivel por excelencia son los ENSAMBLADORES o Lenguaje ASSEMBLER.Las instrucciones son nemotécnicos, como por ejemplo ADD, DIV, STR, etc. Una instrucción delejemplo anterior sería ADD 9,11, esto es sumar 9+11Cátedra de Informática rev1 25 de 143

Page 26: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Ventaja:

Mayor facilidad de escritura que el lenguaje de bajo nivel.Desventaja:

Depende del microprocesador (existe un lenguaje para cada uno). La formación de losprogramadores es más compleja que la correspondiente a los programadores de alto nivel yaque exige no sólo técnicas de programación sino también el conocimiento del funcionamientointerno de la máquina. Se utiliza en la programación de PLC, control de procesos, aplicaciones detiempo real, control de dispositivos. Un programa escrito en un lenguaje de este tipo no puedeser ejecutado directamente por el procesador, y debe ser traducido a código de máquinamediante un ensamblador. No se debe confundir, aunque en español adoptan el mismo nombre,el programa ensamblador ASSEMBLER encargado de efectuar la traducción del programa acódigo de máquina, con el lenguaje de programación ensamblador ASSEMBLY LENGUAGE.Lenguaje de alto nivel

Está diseñado para que las personas escriban y entiendan los programas de modo mucho másnatural, acercándose al lenguaje natural.Una instrucción del ejemplo anterior sería 9 + 11. Los lenguajes de alto nivel son los máspopulares y existe una variedad muy grande. Algunos ejemplos son BASIC, Pascal, C, C++, Cobol,Fortran, Delphi, Java, Python, SQL y todas sus variantes. En sus orígenes al Lenguaje C se lotomaba como un lenguaje de nivel medio.Ventajas:

Son los más utilizados por los programadores. Son independientes de la máquina, lasinstrucciones de estos lenguajes no dependen del microprocesador, por lo cual se pueden correren diferentes computadoras. Son transportables, lo que significa la posibilidad de poder serejecutados con poca o ninguna modificación en diferentes tipos de computadoras. La escriturade los programas con este tipo de lenguajes se basa en reglas sintácticas similares a nuestrolenguaje, por lo tanto la adaptación de los programadores es mucho más rápida que en loslenguajes anteriormente nombrados.Desventajas:

Ocupan más lugar de memoria principal (RAM) que los anteriores. El tiempo de ejecución esmayor, pues necesitan varias traducciones.Lenguaje algorítmico

Está formado por acciones primitivas provenientes de nuestro lenguaje natural. Si nosotrossomos los que vamos a ejecutar esas acciones, entonces se podrá escribir en español. Unainstrucción del ejemplo anterior sería 9+11=Ventaja: Es fácil aprender un pseudocódigo.

Cátedra de Informática rev1 26 de 143

Page 27: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Desventaja:

Necesita muchas traducciones para ser ejecutado por el microprocesador, una de ellas es laconversión a un programa a través de un lenguaje de programación.

1.5. Nuestro Procesador: la computadora.

En la sección anterior hemos visto el modelo computacional (Entrada-Proceso-Salida)focalizando así el estudio en la computadora como procesador de los algoritmos quedesarrollaremos a lo largo de este apunte. A continuación analizaremos brevemente losconceptos básicos que hay que tener en cuenta para poder programar para ella.El diccionario de la Real Academia Española define computador electrónico como “Máquinaelectrónica, analógica o digital, dotada de una memoria de gran capacidad y de métodos de

tratamiento de la información, capaz de resolver problemas matemáticos y lógicos mediante lautilización automática de programas informáticos.”

La propia definición nos da indicios acerca de algunos elementos básicos del computador:

1. la memoria y

2. algún dispositivo capaz de efectuar cálculos matemáticos y lógicos.

La memoria es un gran almacén de información. En ella se guardan todo tipo de datos: valoresnuméricos, textos, imágenes, sonido, etc. El dispositivo encargado de efectuar operacionesmatemáticas y lógicas, recibe el nombre de Unidad Aritmético-Lógica (UAL o ALU en inglés). Esuna calculadora inteligente capaz de trabajar con datos y producir, a partir de ellos, nuevos datos,o sea el resultado de las operaciones. Existe otro dispositivo muy importante, la Unidad deControl (UC), que se encarga de transportar la información de la memoria a la UAL, de controlarla UAL para que efectúe las operaciones pertinentes y de depositar los resultados en lamemoria.El conjunto que forman la Unidad de Control y la UAL se conoce por Unidad Central deProceso (UCP o CPU en inglés Central Processing Unit). Podemos decir que la UAL+UC= UCP.Se suele utilizar erróneamente el término CPU para referirse a la computadora, en realidad laCPU, más elementos como Memorias, Discos, Fuente, Placa Madre, etc. es lo que de maneraerrónea llamamos CPU.

Se puede imaginar la memoria como un armario enorme con cajones numerados y la UCP, comouna persona que, equipada con una calculadora (la UAL), es capaz de buscar operandos en lamemoria, efectuar cálculos con ellos y dejar los resultados en la memoria. Recordar que elprocesador trabaja todo en la memoria. Utilizando un lenguaje más técnico: cada uno de loscajones que conforman la memoria recibe el nombre de celda de memoria y el número que loidentifica es su dirección o posición en la memoria.Las celdas de la memoria son circuitos electrónicos organizados en pequeñas porciones, todasde igual tamaño. En cada una de ellas se puede almacenar secuencias de unos y ceros detamaño fijo.Cátedra de Informática rev1 27 de 143

Page 28: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Figura 1.4.: CPU

1.5.1. ¿Por qué Unos y Ceros?

Porque la tecnología de las computadoras se basa en la sencillez de construir dispositivosbinarios, con dos posibles estados: encendido/apagado, hay corriente/no hay corriente,cierto/falso, uno/cero. ¿Es posible representar datos tan variados como números, textos,imágenes, sonido, videos, con sólo unos y ceros? La respuesta es SI, lógicamente como vimos elSistema Numérico Binario solo tiene 2 símbolos y hay qeu reutilizarlos para formar númerosmayores a 1. Cada símbolo conoce como bit. Un bit (acrónimo de las palabras binary digit) puedeser 0 ó 1, por lo que para poder representar muchos valores necesitaremos MUCHOS bits. Surgehistóricamente una asociación de bits que perdura en el tiempo y se conoce como Byte.Un Byte es un conjunto de 8 bits. Un bit (acrónimo de las palabras binary digit) 1 Byte=8 bits .Un sistema numérico frecuentemente se utiliza en sistema métricos, así por ejemplo

1000 gramos = 1 Kg, 1000 Kg = 1 Tonelada,10 mm = 1 centímetro, 100 centímetros = 1 metro , 1000 metros = 1 Kilómetro

Lo mismo sucede para medir la métrica del tamaño de la información ( cantidad de bits) , de allísurge la siguiente métrica.

Figura 1.5.: Métrica Informática BinariaEn una computadora se usa lo que se conoce como memoria para almacenar partes de unprograma, la memoria se mide en Bytes.

Cátedra de Informática rev1 28 de 143

Page 29: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Sobre cada unidad de memoria se puede leer o escribir.La operación de escritura sobre una parte de la memoria, coloca un valor sobre la mismadestruyendo el valor previo.Aquí podemos concluir que la operación de escritura es destructiva del contenido de la me-moria, no así la memoria.

De este modo los dispositivos de entrada (teclado, mouse, archivo) almacenan (guardan,escriben) los datos en memoria, el procesador los procesa (realiza operaciones, lee y escribe enla memoria) y los dispositivos de salida (pantalla, impresora, archivo) muestran los contenidosde la memoria al mundo exterior.La MEMORIA PRINCIPAL es el dispositivo de almacenamiento temporal de DATOS, INSTRUC-CIONES y RESULTADOS intermedios y definitivos de la ejecución de programas.El término temporal se refiere a que este tipo de memoria tiene la característica de ser volátil, esdecir, que cuando se corta el suministro eléctrico la información en ella desaparece. Por otrolado se encuentran las memorias permanentes, denominadas MEMORIAS SECUNDARIAS, lasque permiten guardar de forma permanente programas e información. En este rubro seencuentran los discos y las memorias flash, entre otras.A modo ilustrativo, para que el lector tenga una noción de la gran variedad de almacenamientosque existen (esta imagen no incluye todos los tipos) presentamos una imagen de la organización.

Figura 1.6.: Clasificación de Tipos de AlmacenamientoEl Sistema Hexadecimal que veremos a continuación se usa habitualmente para hacer referen-cia a las direcciones de memoria en las computadoras.

� Observación:Como se pude observar, la relación entre los distintos valores de la figura 1.5 es de 1024 y no de1000.La relación entre las unidades en el Sistema Internacional Métrico Decimal es de a 10 opotencias de 10, pero en este caso, el de la figura es 1024 , y claramente no es múltiplo de 10.Cátedra de Informática rev1 29 de 143

Page 30: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

En el sistema binario se sabe 210 = 1024, por costumbre o por otra cuestión que no es relevante anadie pareció molestarle demasiado que fuera llamado «kilobyte» aunque evidentemente no es1000, está cerca 1024.Si quisiera hablar con propiedad deberíamos referirnos según la nomenclatura de la ComisiónElectrotecnica Internacional (IEC, por sus siglas en inglés) con los prefijos: Kibi, Mebi, Gibi, Tebi,Pebi, Exbi, Zebi y Yobi los cuales están formados con las primeras dos letras de los prefijos del SI(K, M, G, T....) y el sufijo ’bi’ (por binario). Como a buen entendedor pocas palabras, en estamateria nos referiremos de la manera mas común que toda la gente lo conoce y utiliza, pero porsupuesto que si alguien quiere usar la nomenclatura de IEC, será tomada como correcta.1.5.2. Sistemas Numéricos.

Un sistema de numeración es un conjunto de símbolos y reglas de generación de números quepermiten construir TODOS los números válidos en el sistema.Cuando los hombres empezaron a contar usaron los dedos, marcas en bastones, nudos en unacuerda y algunas otras formas para ir pasando de un número al siguiente. A medida que lacantidad crece se hace necesario un sistema de representación más práctico. En diferentespartes del mundo y en distintas épocas se llegó a la misma solución, cuando se alcanza undeterminado número se hace una marca distinta que los representa a todos ellos. Este númeroes la base. Entonces la base de un sistema de numeración posicional indica la cantidad desímbolos distintos necesarios para representar todos los números.Identifiquemos algunos de los símbolos en las bases de los sistemas numéricos.

Símbolos del Decimal: 0,1,2,3,4,5,6,7,8,9 (cantidad 10 símbolos)Símbolos del Octal: 0,1,2,3,4,5,6,7 (cantidad 8 símbolos)Símbolos del Hexadecimal: 0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F (cantidad 16 símbolos)Símbolos del Binario: 0,1 (cantidad 2 símbolos)Símbolos del Romano: I,V,X,L,C,D,M. (cantidad 7 símbolos, ver que NO EXISTE el cero!!)

Como la cantidad de Símbolos que forman la base de cualquier sistema numérico es finita, esnecesario REUTILIZAR los símbolos para lograr mas números.Cada uno de estos sistemas Numéricos tiene reglas de generación que permiten construir todoslos números válidos en el sistema, en algunos casos son mas fáciles unos que otros.Observación:

La base que más se ha utilizado a lo largo de la Historia es 10 según todas las apariencias porser ese el número de dedos con los que contamos. Hay alguna excepción notable como son lasnumeración babilónica que usaba 10 y 60 como bases y la numeración maya que usaba 20 y 5aunque con alguna irregularidad. En la actualidad las Computadoras usan el sistema en Basedos o Binario. Otro sistema usado en� Actividad Propuesta

Indique a su juicio como expresaría en el sistema duodecimal o docenal 010 hasta el 1510.Indique a su juicio como expresaría en el sistema ternario 010 hasta el 1510.¿Conoce o usa Ud. un sistema duodecimal o docenal con frecuencia?. Si su respuesta es si¿cual?.Cátedra de Informática rev1 30 de 143

Page 31: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

En base a las reglas de generación de los sistemas Numéricos se suelen clasificar en dosgrandes grupos.Posicionales:

En los sistemas modernos de numeración básicamente se usa el sistema posicionál oponderado, esto significa que dependiendo de la ubicación o posición dentro del número elsímbolo tiene un peso distinto.Ejemplo: Para el caso del 12, el 1 tiene un peso de 10 o decena, y el 2 un peso de unidad.En estos sistemas de numeración ponderados o posicionales el valor de un dígito depende tantodel símbolo utilizado, como de la posición que ése símbolo ocupa en el número: unidad, decena,centena, unidad de mil... etc.Una consecuencia de esto es que operaciones como la suma o resta resultan (comparadas conlas No posicionales) mas sencillas.Como se sabe en una suma, se suma primero las unidades lo que supere a 10 se transporta a ladecena y así sucesivamente.Para la suma se ubican en cada columna los símbolos que tengan el mismo peso o ponderación(unidades, decenas, centenas..).Es importante notar que en estos sistemas EXISTE el 0 cero. Este símbolo no existe en lossistemas NO posicionales.

No posicionales:

Los sistemas NO posicionales, son aquellos en que el Orden o Posición de los símbolos NO esimportante, solo importa el Símbolo en si.Un sistema NO posicional fue el que usaron los Egipcios, veamos un ejemplo:

Figura 1.7.: Sistema EgipcioVemos que este sistema es del tipo de base decimal, pero NO es posicional. Veamos como seescribía el número 276 y 3456

Figura 1.8.: Números 276 y 3456Cátedra de Informática rev1 31 de 143

Page 32: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Se usaban tantos de cada uno cómo fuera necesario y se podían escribir indistintamente deizquierda a derecha, al revés o de arriba abajo, cambiando la orientación de las figuras según elcaso, y como el valor no está dado por el orden o posición de los símbolos, dependían de cadauno o criterios estéticos.Veamo otro caso, el de los Números Romanos por ejemplo, para el caso de la suma no es tansencillo, ya que la posición no tiene que ver con la ponderación, brevemente veamos un ejemploque lo que comentamos.I V (cuato)

+ V I (sei s)

X (di ez)Es por eso que las operaciones básicas como suma o resta no son tan sencillas y ni hablar de lamultiplicación.Pero no ahondaremos mas en este tipo de Sistemas numéricos, vamos a concentrarnos en losmodernos y mas utilizados.� Actividad Propuesta

Observe los sistemas numéricos NO posicionales presentados e indique que símbolosospechosamente no aparece.1.5.3. Equivalencias entre Sistemas numéricos.

Como ya dijimos los números de cualquier sistema numérico se logran REUTILIZANDO lossímbolos y modificando la ponderación u orden, veamos como sería.Decimal Hexadecimal Octal Binario

010 016 08 000002110 116 18 000012210 216 28 000102310 316 38 000112410 416 48 001002510 516 58 001012610 616 68 001102710 716 78 001112810 816 108 010002910 916 118 0100121010 A16 128 0101021110 B16 138 0101121210 C16 148 0110021310 D16 158 0110121410 E16 168 0111021510 F16 178 0111121610 1016 208 1000021710 1116 218 1000121810 1216 228 1001021910 1316 238 1001122010 1416 248 1010022110 1516 258 101012Cátedra de Informática rev1 32 de 143

Page 33: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Observaciones:Existe un sud-índice que indica el tipo de Sistema Numérico 10 para decimal, 16 para Hexa-decimal... etc, ya que no es lo mismo 1410 que 1416(2010).Podemos ver como se reutilizan los símbolos, para el caso de binario es el mas evidente yaque solo son dos.Si tenemos 1A16 el 1 indica que superó una vez a la base que es 16, y la letra A que son 10unidades, por lo que (16+10) 1A16 = 2610 .Si tenemos 128 el 1 indica que superó una vez a la base que es 8, y el 2 indica que son 2unidades, por lo que (8+2) 128 =1010 .

Esta tabla presenta solo algunos números y sus equivalencias; pero existen métodos generalespara convertir cualquier número de un sistema a otro.Veamos estos métodos.1.5.4. Conversiones entre sistemas numéricos.

Decimal a Binario.

Se divide el número del sistema decimal entre 2, cuyo resultado entero se vuelve a dividir entre 2,y así sucesivamente hasta que el dividendo sea menor que el divisor, 2. Es decir, cuando elnúmero a dividir sea 1 finaliza la división.A continuación se ordenan los restos empezando desde el último al primero, simplemente secolocan en orden inverso a como aparecen en la división, se les da la vuelta. Éste será el númerobinario que buscamos.Veamos el caso de convertir 10010 a su valor binario.

Figura 1.9.: Conversión de Decimal a Binario.Binario a Decimal.

Antes de proceder con la conversión, repasemos la suma de números binarios, esta seránecesaria para el cálculo.0 + 0 = 00 + 1 = 11 + 0 = 11 + 1 = 102 (Notar que esto no es 1010 )Teniendo esto presente veremos como convertir un número Binario a Decimal.1. Inicie por el lado derecho (la última cifra, la de menos peso), multiplique el símbolo binariopor 2 elevado a la potencia cero (20) para el primer símbolo, 2 elevado a la potencia uno parael segundo (21) y así sucesivamente (22 , 23 ....)

Cátedra de Informática rev1 33 de 143

Page 34: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

2. Después de realizar cada una de las multiplicaciones, sume todas y el número resultanteserá el equivalente al sistema decimal.Queremos convertir 10100112 a su equivalente en el sistema Decimal.Planteamos lo indicado en el punto 1.[1*26 + 0*25+1*24+0*23+0*22+1*21+1*20 ] 2=26 +24+21+20 = 6410 +1610 + 210 +110 =8310Observación: Ver que el Exponente es igual a la Base del Sistema numérico, 2 para este caso.

� Actividad Propuesta

Se deja para el lector plantear la conversión de los siguientes números al Sistema Decimal1. 10101122. 1000123. 10111012

Se deja al lector tratar de observar¿Qué particularidad tienen los números impares en el sistema binario?¿Qué particularidad tienen los números pares en el sistema binario?

Octal a Decimal.

1. Inicie por el lado derecho (la última cifra, la de menos peso), multiplique el símbolo octal por8 elevado a la potencia cero (80) para el primer símbolo, 8 elevado a la potencia uno para elsegundo (81) y así sucesivamente (82 , 83 ....)2. Después de realizar cada una de las multiplicaciones, sume todas y el número resultanteserá el equivalente al sistema decimal.

Queremos convertir 1238 a su equivalente en el sistema Decimal.Planteamos lo indicado en el punto 1.[1*82 + 2*81+3*80] 8=1 * 6410 +2 * 810 + 3 * 110 =8310

Observación: Ver que el Exponente es igual a la Base del Sistema numérico, 8 para este caso

� Actividad Propuesta

Se deja para el lector plantear la conversión de los siguientes números al Sistema Decimal1. 7282. 2083. 5708

Cátedra de Informática rev1 34 de 143

Page 35: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Hexadecimal a Decimal.

1. Inicie por el lado derecho (la última cifra, la de menos peso) y multiplique el símbolo hexade-cimal (expresado en decimal) por 16 elevado a la potencia cero (160) para el primer símbolo,16 elevado a la potencia uno para el segundo (161) y así sucesivamente (162 , 163 ....)2. Después de realizar cada una de las multiplicaciones, sume todas y el número resultanteserá el equivalente al sistema decimal.

Queremos convertir 12316 a su equivalente en el sistema Decimal.Planteamos lo indicado en el punto 1.[1*162 + 2*161+3*160] 10=25610 +3210 + 310=29110

Observación: Ver que el Exponente es igual a la Base del Sistema numérico: 16 para este caso.Si observamos con atención las últimas tres conversiones a Decimal son muy similares, esto sepuede plantear de manera genérica de la siguiente forma.Conversión de cualquier base a Decimal

De manera general podemos plantear:Dado un número dn-1 dn-2 dn-3 dn-4 ...d1 d0 en Base r donde di es el símbolo del número que estáen la posición i-esima, comenzando a contar desde la derecha.La siguiente expresión permite convertir desde cualquier Sistema numérico en base X al Decimal.N en base r = d n-1 .r n-1 + d n-2 .r n-2 +d n-3 .r n-3 +d n-2 .r n-2 +.... +d 2 .r 2 +d 1 .r 1+d 0 .r 0

DondeN es el Número en la base r (con r= decimal, octal, binario, hexadecimal)d i : son los dígitos que conforman el número, en la posición i.r: es la base elegida.

Ejemplo:Veamos como se aplica esta expresión, por ejemplo:Decimal: 23710=2.102+3.101+7.100Binario:1010001112=1.28+0.27+1.26+0.25+0.24+0.23+1.22+1.21+1.20

• =>1010001112=25610+6410+410+210+110=23710.Octal: 3558=3.82+5.81+5.80=19210+4010+510=23710Hexadecimal: ED16 = 1410.161+1310.160=22410+1310=23710

Vemos entonces que 23710=101000111 2=355 8=ED 16

� Actividad Propuesta

Se deja para el lector plantear la conversión de los siguientes números al Sistema Decimal1. BE1162. 2016

Cátedra de Informática rev1 35 de 143

Page 36: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

3. A18C164. 11010125. 427386. A18C16

Figura 1.10.: Ayuda para conversión base X a Decimal

1.6. Conceptos y elementos básicos para la resolución algorítmica

Hemos visto que el manejo de la memoria de una computadora es de suma importancia. En estalínea, una cuestión a tener en cuenta son los tipos de datos que maneja el computador:números.caracteres.

Los números pueden estar escritos en sistema decimal (nuestro sistema diario), sistema binario(utilizado por el microprocesador por conveniencia y simplicidad), o sistema hexadecimal(Direcciones de memoria). Por otro lado están los caracteres, sus símbolos, representaciones ysignificados.Un carácter es una letra mayúscula, minúscula, signo de puntuación, signo especial, etc.Veamos cuantos bits necesitamos para codificar los caracteres ( letras y dígitos decimales) ysimbolos.Con 2 bit (n=2) podemos hacer 4 combinaciones distintas y se pueden codificar hasta 4símbolos (m=4) distintosCon 3 bit (n=3) podemos hacer 8 combinaciones distintas y se pueden codificar hasta 8símbolos (m=8) distintosCon 4 bit (n=4) podemos realizar 16 combinaciones distintas pueden codificar hasta 16 símbolos(m=16) distintos ....Haciendo un razonamiento inductivo podemos decir que:Con n bit pueden codificarse m = 2n símbolos distintos.Vamos a Despejar n:m = 2n ⇒ log m = log 2.n ⇒ n = 1/log 2.log m ⇒ n = 3,32 l og m

Para codificar las 10 cifras decimales (0, 1,...,9) se necesitarán:n = 3.32 * log (m) = 3.32 * log (10) = 3.32 bit es decir 4 bit (ya que con 3 sólo podremos codificar 8símbolos).Pueden hacerse codificaciones con más bit de los necesarios ( redundancia , errores)Obviamente existen códigos normalizados que suelen ser utilizados en el mundo y sonconocidos como:BCD de intercambio normalizado.

Cátedra de Informática rev1 36 de 143

Page 37: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

EBCDICASCII (7 bits)ASCII extendido ( 8 bits)ANSI

El que vamos a ver en detalle el conocido como ASCII establece la correspondencia entredistintas bases numéricas (binaria y decimal) y los caracteres mas comunes.

Figura 1.11.: Tabla ASCII: Caracteres Imprimibles y su correspondiente valor en Decimal

Vemos que dentro de los caracteres hay números, no muchos solo del 0 al 9.Podemos observar que la tabla no incluye muchos de los caracteres del español, como ser ñ,Ñ, á, é, í ...etc y ni hablar de caracteres de otros idiomas, como el Portugués o Mandarín.Para poder cubrir estos caracteres faltantes hay una Tabla conocida como Tabla de caracteresASCII extendida.Se deja al lector las siguientes preguntas:

¿Como hace la computadora para saber sí se hace referencia a un carácter que representa al 1o es el Número entero 1?.¿Cuantos Bits son necesarios para poder representar los caracteres ASCII de la tabla?

Cátedra de Informática rev1 37 de 143

Page 38: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

1.6.1. Eficiencia de las codificaciones.

El término Eficiencia se refiere a lograr las metas con la menor cantidad de recursos.Obsérvese que el punto clave en esta definición es ahorro o reducción de recursos al mínimo.En términos matemáticos para una codificación de m elementos en base binaria podemosescribir:

E f i ci enci a = m/2n

La eficiencia de un código se expresa como el cociente entre el número de símbolos querepresentan ( m ) y el número total posible que para el sistema binario con n bits que es 2n

� Actividad Propuesta

Con este concepto de eficiencia en mente podríamos plantear la siguiente pregunta:¿Que eficiencia tiene representar los caracteres ASCII con 7 bits?. Ayuda: Puede contar lacantidad de caracteres ASCII de la Figura 1.11.

1.6.2. Tipo de Dato.

Definiremos tipo de dato de la siguiente manera:Un tipo de dato está determinado por un conjunto de valores ordenados y por las operacionespermitidas sobre esos valores.

Los atributos que distinguen a un tipo de otro son:

Conjunto de valores ordenados y rango de definición de los mismos.Conjunto de operaciones que se pueden realizar sobre ellos.Representación interna en la máquina de los valores.

Se debe notar que, al contrario de lo que ocurre en el Álgebra, el conjunto de valores es finito,tiene un rango de valores, o sea un mínimo y un máximo claramente especificados.Los tipos de datos que trabajaremos para nuestro procesador son entero, real, carácter y lógico.Se los conoce como tipos primitivos de datos.Cátedra de Informática rev1 38 de 143

Page 39: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Figura 1.12.: Tipos de Datos Primitivos

El conjunto de valores que pueden asumir los enteros o los reales están acotados a los rangosde los números que puede manejar el procesador en cuestión, con las limitaciones de bytes quese usen, es decir, del contenedor que disponga ese procesador.Por otro lado están los caracteres, sus símbolos, representaciones y significados. Cada carácter(letras mayúsculas, minúsculas, signos de puntuación, signos especiales, etc.) tiene asociado uncódigo numérico. Estos valores numéricos fueron establecidos en una codificación estándar, elCódigo ASCII (American Standard Code for Information Exchange), tal como se lo presentó en lasección 1.6.

Esta codificación utiliza 7 bits para representar un carácter, a cada uno de los cuales lecorresponde un grupo de números entre el 0 y el 255. Referirse a la Figura 1.9 donde serepresentan los mismos.

1.6.3. Tipos de Datos a utilizar.

Los tipos de datos que reconoce nuestro procesador, la computadora, son los “enteros”, los“reales”, los “caracteres” y los “lógicos”.La tabla siguiente muestra ejemplos de rango de valores y operaciones permitidas de cada tipoprimitivo.Cátedra de Informática rev1 39 de 143

Page 40: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Figura 1.13.: Resumen de Rangos y Operaciones permitidasOtro tipo de dato que se utiliza habitualmente es el string, el cual se refiere a una cadena decaracteres, es decir un arreglo o conjunto de caracteres mas un caracter nulo (NULL) al final.El caracter nulo no se muestra en la figura 1.9 anterior , ya que la misma solo incluía los"Imprimibles". Veamos los ASCII No imprimibles.

Figura 1.14.: Caracteres ASCII NO imprimibles o de ControlPor ejemplo, un nombre o una dirección, podría ser un tipo de dato llamado string.Undato de tipo string asume como valores posibles secuencias de caracteres tomados de unconjunto específico (por ejemplo el código ASCII) y admite como operaciones la comparación yla concatenación.Cabe aclarar que el string no es un tipo de dato primitivo, sino un tipo de dato compuesto porelementos primitivos, los caracteres. Otro tipo de dato es el de los números complejos, formadopor un par ordenado de números reales. Este tipo de dato compuesto es útil en aplicaciones deIngeniería y permite realizar directamente las operaciones sobre números complejos. Conjuntos

Cátedra de Informática rev1 40 de 143

Page 41: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

de datos más elaborados, con características y operaciones propias constituyen los tipos dedatos compuestos o estructuras de datos. Los strings y números complejos son casos deestructuras de datos, estos no se verán en la materia de Informática, si en Computación que esuna materia de tercer año de la carrera de Ingeniería Electrónica.Variables y Constantes.

A continuación veremos dos conceptos importantes de la Algoritmia: variables y constantes. Elprocesador necesita disponer de un mecanismo que permita el almacenamiento y lamanipulación de los datos. En un algoritmo o programa esto es llevado a cabo por entidades alas que denominaremos variables y constantes. Definimos:Una variable es un objeto de memoria cuyo valor puede cambiar durante el desarrollo del algorit-mo o ejecución del programa

Los atributos de una variable sonnombretipo de datovalor.

El nombre que designa la variable o mediante el cual se hace referencia, es recomendable quesea representativo del contenido o uso de la misma a lo largo del algoritmo o programa.Por ejemplo si se almacena la temperatura ambiente en una variable la podríamos llamarTemperaturaAmbiente, usando la notación tipo Camello, y un nombre útil para que las personaspuedan identificar fácilmente la variable.En bajo nivel se hace referencia a la variable usando una dirección de una celda de memoria conun valor Hexadecimal.El siguiente ejemplo da cuenta del nombre de la variable “suma”, del tipo de dato que puedemanejar “entero” y de la ubicación en memoria “FFFA”.

Figura 1.15.: VariableExisten lenguajes donde es obligatorio declarar las variables a utilizar, es decir, listar las variablesque se utilizarán e indicar el tipo de cada una de ellas.Estos lenguajes son de tipo fuerte o estrictos.En nuestro caso comenzaremos utilizando un Pseudocódigo para programar, en este programallamado PSeint se pueden definir plantillas o personalización respecto a la obligatoriedad dediversas cuestiones. Mencionado esto realizaremos la declaración de las variables previamente

al algoritmo, considerando a éstas como el ambiente de resolución del problema.Cátedra de Informática rev1 41 de 143

Page 42: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Cuando se declara una variable, el microprocesador reserva una porción de memoria principalpara almacenar los valores correspondientes al tipo de dato de la misma. Para unificar loscriterios de escritura de los algoritmos escribiremos primero el tipo de dato y luego la lista de losnombres de las variables separadas por coma.Por ejemplo:

1 Proceso DefinicionVariables2 Definir suma , dato Como Entero;3 Definir estado Como Logico;4 Definir promedio Como Real;5 Definir texto Como Caracter;6 FinProceso

Dado el concepto de variables ahora veremos qué es una constante.Una constante es un objeto de memoria cuyo valor no puede ser modificado durante el desa-rrollo del algoritmo o ejecución del programa.

El concepto “constante” es similar al de variable pero con la particularidad de que su valorpermanece inalterable.La definición de las constantes implica darle un nombre a un valor determinado.Con una constante se especifican valores que no se calculan ni se leen, sino que permanecenconstantes. En el ejemplo del cálculo del perímetro de la circunferencia (2*Pi*radio), “2” es unaconstante expresada por su valor, “radio” es una variable y “Pi” es una constante expresada conun nombre, la cual fue definida como Pi=3,1416 al comienzo del algoritmo. Cada vez que elnombre Pi aparece en el desarrollo del mismo, será reemplazado por el valor 3,1416.

1.6.4. Nombres de Variables/Constantes

Cada lenguaje o pseudocódigo tiene reglas para construir los nombres de variables.En este curso vamos a proponer un conjunto de reglas propias que sirve para la mayoría, estason:1. Todo nombre de variable debe comenzar con una letra del alfabeto inglés (mayúscula ominúscula).2. Todo nombre de Constantes se escribirán en MAYÚSCULAS.3. No debe ser palabra reservada del lenguaje, ya veremos que es esto mas adelante.4. No debe contener espacios en blanco ni punto. Este suele ser un error frecuente.5. Puede contener una combinación de los siguientes caracteres : letras, dígitos y el guión bajo

a) Letras: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M NOPQRSTUVWXYZb) Dígitos: 0 1 2 3 4 5 6 7 8 9c) Carácter especial: _

Cátedra de Informática rev1 42 de 143

Page 43: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

6. La cantidad de caracteres que conforman el nombre de la variable podemos decir a los finesprácticos que no tiene límites7. Toda variable declarada debe ser usada en el algoritmo o programa.

Ejercicios para el Lector: Indique a su juicio que nombres de variables son correctos, basados enla regla propias de este apunte.Nombre de la variable Válido

Si/NoMotivo por el cual NO es válido

Temperatura Ambiente 1Temperatura.AmbienteTemperatura_AmbienteTemperaturaAmbiente

Esta_es_la varia-ble_que_almacena_la_temperatura_ambienteEsta es la variable quealmacena la temperaturaambiente

5-Variable1Perímetro

Observaciones: El lenguaje C tiene 32 palabras reservadas y el, lenguaje C++ tiene 64 palabrasreservadas. Las palabras reservadas son palabras propias del lenguaje o psuedocódigo. Estoquiere decir que si el Lenguaje o Pseudocódigo tiene una palabra reservada por ejemplo llamada"entero" o "int", no podremos usar variables con ese nombre.

1.6.5. Nombres de Programas

El propósito de esta materia es que sepamos escribir un programa, los programas necesitan serllamados y para ello deben tener un nombre.Normalmente no tratábamos el tema de los posibles nombres a los programas, pero solía ser unerror común que los alumnos asignen nombres y que luego al momento de hacer correr elprograma o ejecutar tira algunos errores, es por eso que vamos a establecer para el presentecurso unas reglas propias para los nombres de programas.Estas reglas son sencillas y veremos que tienen un parecido grande con los nombre de lasvariables y nos van a permitir evitar errores menores.1. Todo nombre de programa debe empezar con una letra del alfabeto inglés (mayúscula ominúscula).2. No debe contener espacios en blanco. Este suele ser un error frecuente de los alumnos.3. Puede contener una combinación de los siguientes caracteres : letras, dígitos y el guión bajoy el punto

a) Letras: a b c d e f g h i j k l m n o p q r s t u v w x y z A B C D E F G H I J K L M NOPQRSTUVWXYZb) Dígitos: 0 1 2 3 4 5 6 7 8 9

Cátedra de Informática rev1 43 de 143

Page 44: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

c) Carácter especial: _4. La cantidad de caracteres que conforman el nombre del programa a los fines prácticos queno tiene límites.

� Actividad PropuestaIndique a su juicio que nombres de programas son correctos, basados en las reglas propias deeste apunte.Nombre del Programa Válido

Si/NoMotivo por el cual NO es válido

MiNombre MiApellido 1Promedio.NuevoPromedio_Nuevo

Cálculo1Este es mi primer programade calculo de promedioEste_es_mi_primer_programa_de_calculo_de_promedio

1 EjercicioEjercicio1

CalculoCañoObservación:Las reglas para Nombres de Variables o Programas son propias de la Cátedra, cada Lenguajeo Pseudocódigo tiene distintos matices, pero esto no hace la diferencia y para los que reciéncomienzan a programar es alentador evitar errores usando estas sencillas reglas.

1.6.6. Notaciones comunes.

Notación Camel

La notación Camel consiste en escribir los identificadores con la primera letra de cada palabra enmayúsculas y el resto en minúscula: EndOfFile. Se llama notación “Camel” porque losidentificadores recuerdan las jorobas de un camello. Existen dos variantes:UpperCamelCase, CamelCase o PascalCase: en esta variante la primera letra también esmayúscula.lowerCamelCase, camelCase o dromedaryCase: la primera letra es minúscula.

En el lenguaje Java, se usa la notación CamelCase y dromedaryCase.La notación Camel se utiliza también en publicidad y marcas comerciales: PlayStation, easyJet,etc.Notación C

Durante los años 1960s, con la estandarización del código ASCII, los primeros programadores deC y UNIX utilizaron el carácter _ como separador: end_of_file. Esta notación sigue siendo la masutilizada en C y entornos UNIX.Cátedra de Informática rev1 44 de 143

Page 45: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Los defensores de esta notación argumentan que es mas fácil de leer porque deja un espacioentre palabras, al contrario que Camel. Además, en algunos teclados es mas rápido de escribir elcarácter _ que una mayúscula.Notación Húngara

La notación Húngara se basa en Camel, añadiendo al principio del identificador una secuencia deletras en minúscula, que indica alguna característica del identificador, como su tipo en el caso devariables.Por ejemplo:iValue podría denotar una variable entera o integer en Inglés.fValue una variable float o real.Notación para constantes

En muchos lenguajes de programación, se tiene la costumbre de denotar las constantesmediante identificadores en mayúsculas. En este caso la notación Camel no es aplicable y soloqueda usar la notación C: END_OF_FILE, PI, EARTH_RADIUS, etc. Java recomienda esta notaciónpara constantes, y en C/C++ siempre ha sido la notación mas usada.1.6.7. Clasificación de Variables.

Las variables se pueden clasificar por su contenido y por su uso.Por su contenido Por su uso

Numéricas Variable de TrabajoLógicas ContadorCarácter AcumuladorStringPor su Contenido

Variables Numéricas:• Son aquellas en las cuales se almacenan valores numéricos, enteros o reales, positivoso negativos.• Ejemplo: costo=2500 , x=12,50.• Una variable numérica almacena números y sólo puede estar involucrada en operacio-nes aritméticas.

Variables Lógicas:• Son aquellas que sólo pueden contener uno de 2 valores: verdadero o falso (V o F, trueo false, 0 o 1, Si o No).• Ejemplo z= V , x= F.

Variables Carácter:• Cuyo contenido es un solo carácter alfanumérico (una letra, un carácter especial, unnúmero), que escribiremos entre apóstrofo.• Ejemplo: letra = ’a’, Inicial = ’L’, Rta = ’ S ’, dígito= ’4’.

Cátedra de Informática rev1 45 de 143

Page 46: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

• Ver que llevan comillas simples.Variables Cadena de caracteres o String:

• Cuyo contenido está formado por caracteres alfanuméricos (letras, números y carac-teres especiales), que escribiremos entre comillas dobles.• Ejemplo: letra=“a”, Apellido=“Lopez”, Direccion=“Pasco #190”.• Ver que llevan comillas dobles.

En este punto es interesante analizar la siguiente pregunta: ¿Cuál es la diferencia que existe entrelas constantes “a” y ‘a’?En primer lugar, la “a” es una constante de tipo string, pues está escrita entre comillas dobles, y la‘a’ es de tipo carácter, pues esta entre apóstrofos o comillas simples. Pero hasta aquí nonotamos grandes diferencias. Entonces la pregunta es ¿Qué diferencia hace el procesador conlos caracteres y los strings? .El procesador utiliza para ’a’ un Byte (8 bits) para almacenar un carácter. Sin embargo, cuando setrata de string, dependerá de la longitud del mismo, en particular para "a" son dos Bytes (16 bits).Por ello, el microprocesador agrega un carácter especial para marcar el final de la cadena decaracteres, carácter NULL.Cuando el procesador almacena una cadena de caracteres en memoria lo hace ubicando cadacarácter en un Byte en posiciones consecutivas de memoria. Pero cuando quiera recuperar dichacadena de memoria no sabrá hasta que Byte debe tomar. Este problema se solucionó haciendoque el procesador coloque un carácter especial (NULL) al final de la cadena para identificar sufin. A este carácter especial lo denominaremos NULL y como es especial figura en el códigoASCII de caracteres NO Imprimibles, ver Figura 1.12.En el caso de variables de tipo cadena el nombre de la variable indica la posición inicial y el restoes consecutivo.Observaciones:

El carácter es un dato que contiene por ejemplo un letra y el string es un arreglo o vector(conjunto de datos) de dimensión 2 mayor.El string NO es un tipo de dato primitivo y el carácter si.En los arreglos, en particular el string, los datos son ubicados en forma consecutiva enmemoria. Sin embargo, esto no es necesariamente cierto para dos variables caracter de-finidas una a continuación de otra.El caracter ’a’ utiliza 1 Byte y el String "a" utiliza 2 Bytes (’a’ + NULL).Para hacer referencia al caracter se utiliza comillas simples (’W’) y para el string comillasdobles ("W").

Por su Uso

Variables de Trabajo:• Son variables que reciben un valor, ya sea de un ingreso de información o como resul-tado de una operación. Ejemplo: suma = a + b, precio= 10.52.

Contadores:• Son variables que se utilizan para llevar el control del número de ocasiones en que serealiza una operación o se cumple una condición. Los incrementos son generalmente

Cátedra de Informática rev1 46 de 143

Page 47: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

de uno en uno.• Ejemplo: Cont = Cont + 1 . Ver que el incremento es FIJO!!, puede ser -2 , 3 , etc. perosiempre FIJO

Acumuladores o Sumadores:

• Son variables que se utilizan para llevar la suma acumulativa de una serie de valoresque se van leyendo o calculando progresivamente.• Ejemplo: Suma = Suma + x. Ver que x es una variable, si fuera una constante sería uncontador.

1.6.8. Expresiones.

Una expresión describe un cálculo a efectuar cuyo resultado es un único valor.Una expresión está constituida por:

operandos.operadores.

Las expresiones pueden ser de distintos tipos de acuerdo al tipo de dato de su resultado.numérica.relacionallógicade carácter

El resultado de una expresión aritmética es del tipo numérico, el de una expresión relacional y elde una expresión lógica es de tipo lógico, y el de una expresión carácter es del tipo cadena decaracteres o carácter.

Expresiones Aritméticas.

Las expresiones aritméticas son análogas a las fórmulas matemáticas. Los elementosintervinientes son numéricos (reales, enteros) y las operaciones son aritméticas.Los operadores son:

Operador Significado Tipos de Operando Tipo de Resultado+ Suma Enteros o Reales Enteros o Reales (Ver Observación)- Resta Enteros o Reales Enteros o Reales (Ver Observación)* Multiplicación Enteros o Reales Enteros o Reales ( Ver Observación)/ Cociente Enteros o Reales Enteros o Reales (Ver Observación)

El operador ^ (potencia) se puede usar en PSeInt, pero en C++ NO EXISTE, se implementa lapotencia de otra manera.

Cátedra de Informática rev1 47 de 143

Page 48: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Observación: Cuando en una operación los dos operandos son enteros el resultado es entero.Lo mismo sucede cuando son Reales.Pero si al menos uno de los operandos es real y el otro entero, se puede producir una conversióndel tipo de dato, esto es conocido como conversión implícita del Lenguaje, esto por supuestono sucede en un Diagrama de Flujo. Es importante referirse a la documentación del lenguajepara saber sobre este tipo de conversión y evitar errores de semántica.PSeInt: el tema de las conversiones implícitas casi pasa desarpecibido, recordemos queesto permite facilitar el aprendizaje a los que se inician en la programación.C++

Un error frecuente es cuando se calcula el promedio. Se deja al lector analizar el problema.

Reglas para evaluar expresiones aritméticas

Las expresiones se evalúan de izquierda a derecha.Regla algorítmica fundamental: la expresión debe estar escrita en un único renglón.Los paréntesis se usan para anidar expresiones y alterar el orden de evaluación.Las operaciones encerradas entre paréntesis se evalúan primero.Las reglas de precedencia de las expresiones indican el orden en que la computadora evalúa unaexpresión cuando hay más de un operador.Para expresiones aritméticas se siguen, lógicamente, las reglas de precedencia aritmética.El orden de evaluación de los operadores en cualquier expresión es el siguiente:Orden de Precedencia de Evaluación.

1. Paréntesis (empezando por los más internos)2. Potencias3. Productos y Divisiones4. Sumas y restas5. Concatenación6. Relacionales7. Lógicos

Cuando hay dos operadores con la misma precedencia, se calcula primero la operación que estáa la izquierda.

Funciones Internas o de Bibliotecas.

Los lenguajes de programación traen incorporado funciones que conforman las funciones debiblioteca (library en inglés), estas no son ni mas ni menos que código que escribieron otraspersonas. En la mayoría de los lenguajes se pueden usar códigos escritos por otras personas,esto hace que nuestro trabajo sea mas sencillo. Estos códigos suelen estar muy bien probados.En algunos casos esos códigos o funciones de librería no son libres y hay que pagar paraobtenerlos.Cátedra de Informática rev1 48 de 143

Page 49: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Para poder usar este código hay que introducir una línea en el programa que haga referencia a laubicación del código o librería. Si no se usa esta librería NO es necesario introducir la referencia.En C++ sería: #include <iostream> . Con esto se incluye al librería iostream que tiene elementosque permiten leer de teclado (cin) y escribir en pantalla (cout)Algunas de las Funciones de Biblioteca de PSeInt se muestran en la siguiente tabla:

Figura 1.16.: Funciones de Librerías de PSeIntPara el caso de C++, la cantidad de funciones de librería o librerías es muchísimo mas grande yse pueden ver en Referencia de C++.� Actividad Propuesta

¿Cuál es el resultado de las siguientes expresiones algorítmicas aritméticas?1. Si A = 5 y B = 10. ¿Qué valor asume C en cada caso?

a) C =A +Bb) C= (B - A) / (A - 3)c) C= A * 5 + Bd) C= 4 / 2 * 3 / 6+ B / 2 / 1 / 5 ^ 2 - Ae) C=B+ A+ 25 +4 * (A * B) / 2f) C= B ^ A +(A / B) - 20 / Bg) C =A - B / 2 A * 5h) C=A * B * 5 (B - A) ^ 3

2. ¿Cual es el resultado en cada caso?a) 10.5 / 3 =b) 1/ 4 =c) 1/ 4.0 =d) 3 + 6 * 2 =e) -4 * 7 + 2 ^ 3 / 4 - 5 =f) 12 + 3 * 7 + 5 * 4 =g) RC( 25 ) =

Cátedra de Informática rev1 49 de 143

Page 50: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

h) ABS ( 6 ) =i) ABS (-12.5 ) =j) TRUNC( 6.64 ) =k) REDON ( 6.51 ) =

� Actividad Propuesta

Convertir las siguientes expresiones algebraicas en expresiones algorítmicas.Tener en cuenta la regla fundamental de la escritura de las expresiones Algorítmicas: debenestar escrita en un único renglón.

5(x + y) ——–>x+y

u+ wA——–>

−b+ 2pb2−4ac

2a ——–>

Expresiones relacionales y lógicas

El resultado de este tipo de expresiones es de tipo lógico: Verdadero o Falso.Las expresiones lógicas se forman combinando constantes lógicas, variables lógicas y otrasexpresiones lógicas mediante:

operadores lógicos de PSeInt.

NO: Negar . Observación en C++ se utiliza ! para negar.Y . Conocida como AND. Observación en C++ se usa &&O. Conocida como OR. Observación en C++ se usa ||

y/o operadores de relación

< Menor> Mayor<= Menor o igual>= Mayor o igual= Igual< > Distinto. Observación en C++ != , ya que el operador matemático 6= no existe en el teclado.

Debemos resaltar que:Una expresión del tipo relacional tiene operandos que admiten una relación de orden, talescomo los números enteros, caracteres y cadenas de caracteres.Una expresión del tipo lógico, también denominado booleano, tiene como operandos expre-siones relacionales y/o expresiones lógicas.

Cátedra de Informática rev1 50 de 143

Page 51: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

El operador lógico como el NO o NOT es unario, es decir, se aplica a un único operando, encambio el Y ó AND y el O ú OR necesitan 2 operandos.Si una variable booleana tiene un valor Verdadero y la niego tendrá el valor Falso.Si una variable booleana tiene un valor Falso y la niego tendrá el valor Verdadero.Ejemplo.1 Proceso OperadorLogicoNo2 Definir a como logica;3 a= Verdadero;4 a=NO(a);5 Escribir a;6 FinProceso

La salida para la ejecución de este pseudocódigo en PSeInt será:

Figura 1.17.:

1 Proceso OperadorLogicoNo2 Definir a como logica;3 a= Falso;4 a=NO(a);5 Escribir a;6 FinProceso

La salida para la ejecución de este pseudocódigo PSeInt será:

Figura 1.18.:Operaciones Lógicas Binarias.

Hasta el momento vimos la suma de números binarios, es normal asociar los números binariosa los valores de las variables booleanas, ya que ambos solo tienen dos valores posibles.En la Sección 1.1 se hizo mención a George Boole y su aporte a la rama de las matemáticas. Sibien en la época de Boole no existían las computadoras, si existían variables Boolenas (elnombre no es casualidad) , y este matemático introdujo unas operaciones sobre variablesCátedra de Informática rev1 51 de 143

Page 52: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

booleanas que veremos a continuación, esto sería una ampliación del tema que presentamosantes como Operadores Lógicos.Este es uno de los pilares de la aritmética computacional y de la electrónica, ya que para laelectrónica es natural tener dos estados, como ser prendido, apagado. Hay unos elementosElectrónicos conocidos como compuertas que realizan estas operaciones que veremos.

Figura 1.19.: Compuertas LógicasNotemos que se consideran solo 2 variables booleanas de entrada y una de salida para el casode AND y OR y solo una para el NOT, que como dijimos es unaria.

Suma Lógica (OR, O, || , |) Conocida como tabla de la verdad para OR,A B A||B ( C++) ó A|B en PSeInt

Verdadero(1) Verdadero(1) Verdadero(1)Verdadero(1) Falso(0) Verdadero(1)Falso(0) Verdadero(1) Verdadero(1)Falso(0) Falso(0) Falso(0)La salida SOLO es falsa si las DOS entradas son falsas.

Producto Lógico ( AND, Y, &&, &) Conocida como tabla de la verdad para AND,A B A&&B ( C++) ó A&B en PSeInt

Verdadero (1) Verdadero(1) Verdadero(1)Verdadero(1) Falso(0) Falso(0)Falso(0) Verdadero(1) Falso(0)Falso(0) Falso(0) Falso(0)La salida SOLO es verdadera si las DOS entradas son Verdaderas.

� Actividad propuesta

1. ¿Cuál es el resultado de las siguientes expresiones algorítmicas lógicas? .Si A=Verdadero,B=Falsoa) A&B | A&B : Verdadero o Falso?

Cátedra de Informática rev1 52 de 143

Page 53: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

b) A|A & B|B: Verdadero o Falso?c) A|A | B|B: Verdadero o Falso?d) A|B | A|B: Verdadero o Falso?

2. Evaluar las siguientes expresiones de relación siendo: x = 10; y = 20; z = 30;a) (x < 10) && (y > 15) Verdadero o Falso?b) (x <= z) || (z <= y)Verdadero o Falso?c) !(x+y < z) Verdadero o Falso?d) (x+y != z) && (1/(z-x-y+1) != 1) Verdadero o Falso?

3. Expresar las siguientes condiciones algebraicas en formade una recta y resaltar el segmentoque corresponda.a) xε (−1;1)

b) xε[−1;1)

c) x 6∉ (−1;1)

d) xε[−1;1)δxε[0;2)

e) xε[−1;1)|xε[0;2)

Cátedra de Informática rev1 53 de 143

Page 54: Universidad Nacional de Misiones - UNaM

Cátedra de Informática Departamento de ElectrónicaGuía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Universidad Nacional de Misiones

Cátedra de Informática rev1 54 de 143