Está en la página 1de 50

,,,,breaklinks,

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:info@fio.unam.edu.ar

1
Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 a


la 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 el
uso que hace.

Compartir Igual: Si remezcla, transforma o crea a partir del material, deberá di- fundir
sus 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. De
aquellas figuras o ilustraciones que no son realizadas por los autores, se coloca la referencia
respectiva.

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. El
Proyecto 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 de
Venezuela, 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 121


Índice general
I. Introducción 5

1. Informática 9
1.1. Qué es la Informática? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.2. Del Mundo real a la Solución por Computadora. . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.1. Cómo Informatizar un problema. . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
1.2.2. Resolución de problemas con computadora . . . . . . . . . . . . . . . . . . . . 12
1.2.3. Primer paso. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
1.2.4. El modelo Computacional. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.2.5. Datos e Información. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3. Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.1. ¿Qué es un Algoritmo? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
1.3.2. Ejemplo Cotidiano. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
1.3.3. Problemas Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
1.3.4. Definición de Ambiente y Acción. . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.5. Acción Primitiva y NO Primitiva. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
1.3.6. Programa. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
1.3.7. Representación de Algoritmos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.8. Diagrama de Flujo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
1.3.9. Pseudoćodigo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
1.4. Lenguajes de programación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
1.5. Nuestro Procesador: la computadora. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
1.5.1. ¿Por qué Unos y Ceros? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
1.5.2. Sistemas Numéricos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
1.5.3. Equivalencias entre Sistemas numéricos. . . . . . . . . . . . . . . . . . . . . . . 28
1.5.4. Conversiones entre sistemas numéricos. . . . . . . . . . . . . . . . . . . . . . . 29
1.6. Conceptos y elementos básicos para la resolución algorítmica . . . . . . . . . . . . . 32
1.6.1. Tipo de Dato. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1.6.2. Tipos de Datos a utilizar. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1.6.3. Nombres de Variables/Constantes . . . . . . . . . . . . . . . . . . . . . . . . . . 37
1.6.4. Nombres de Programas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
1.6.5. Notaciones comunes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1.6.6. Clasificación de Variables. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1.6.7. Expresiones. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42

2. Pseudocódigo Y Técnicas de Programación 51


2.1. Estructura de un Algoritmo. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.2. Técnicas de Programación. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.2.1. Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
2.2.2. Técnicas de programación algorítmica . . . . . . . . . . . . . . . . . . . . . . . . 52
2.2.3. Modelo declarativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52
2.2.4. Modelo imperativo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3
Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

2.2.5. Modelo orientado a objetos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53


2.3. Estructuras de Control. Programación Estructurada . . . . . . . . . . . . . . . . . . . . 53
2.3.1. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
2.3.2. Programación estructurada (PE) =>Método Imperativo . . . . . . . . . . . . . 54
2.4. Organización secuencial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
2.5. Detalle de los Sentencias de PSeInt Comandos: . . . . . . . . . . . . . . . . . . . . . . . 56
2.5.1. Inicio y Fin de un Proceso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5.2. Asignación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5.3. Definición de Variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
2.5.4. Operadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.5.5. Ingreso de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
2.5.6. Salida de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
2.6. Organización selectiva o decisión . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.6.1. Condición Si-Entonces (if) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
2.6.2. Condición Si-entonces-sino (if-else) . . . . . . . . . . . . . . . . . . . . . . . . . . 62
2.6.3. Selección Múltiple Según (switch) . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
2.7. Estructuras Repetitivas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.7.1. Ciclo Para (for) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
2.7.2. Ciclo Mientras ( while) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.7.3. Ciclo Repetir - Mientras ( do- while) . . . . . . . . . . . . . . . . . . . . . . . . . . 67
2.7.4. Declaración de Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
2.7.5. Borrado de Pantalla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
2.7.6. Espera o Pausa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

3. Estructuras selectivas y repetitivas analizadas desde su uso 71


3.1. Estructuras de control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
3.2. Estructuras de selectiva o decisión: Condicionales . . . . . . . . . . . . . . . . . . . . . 72
3.2.1. Condicionales con una pregunta, Si-Entonces - FinSi (del Inglés: if) . . . . . . 72
3.2.2. Condicional con varias preguntas, Si-entonces - sino - FinSi (del Inglés: if-else) 74
3.2.3. Condicionales con casos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
3.2.4. Condicionales en árbol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
3.2.5. Condicionales con casos vs. en árbol . . . . . . . . . . . . . . . . . . . . . . . . 80
3.2.6. Ejercicios propuestos de estructuras de decisión . . . . . . . . . . . . . . . . . 80
3.3. Estructuras repetitivas: "Bucles" . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
3.3.1. Estructura “Para-FinPara” (FOR) . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84
3.3.2. Variantes de uso del PARA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
3.3.3. Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 91
3.3.4. Estructura "Repetir - Mientras Que" (Do - While) . . . . . . . . . . . . . . . . . . 94
3.3.5. Estructura "Mientras - FinMientras" (While) . . . . . . . . . . . . . . . . . . . . . 95
3.3.6. Ejercicios Propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102
3.4. Bucles con números Aleatorios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
3.4.1. Ejercicios propuestos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
3.5. Ejemplos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.5.1. Ejemplos y Aplicaciones básicas . . . . . . . . . . . . . . . . . . . . . . . . . . . 114
3.5.2. Ejemplos de Estructuras de Control - Bucles con Bases numéricas . . . . . . 115

II. Bibliografía 119

Cátedra de Informática rev1 4 de 121


Parte I.

Introducción

5
Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Cátedra de Informática rev1 7 de 121


1. Informática
Este apunte está principalmente dirigido a estudiantes universitarios que se inician en las
carreras de Ingeniería y cursan la materia de Informática que se dicta en el 2do. año de todas las
Ingenierías. El propósito de la materia NO es formar al alumno necesariamente para que pueda
realizar 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 para
nuestro propósito, sin llegar a complicar con cuestiones que necesitarían mas tiempo como ser
realizar programas bajo entornos gráficos. Hemos observado que el entorno de programación
gráfica puede desviarnos de nuestro objetivo primario, pero si logramos que el alumno pueda
llevar adelante con éxito los cuatros puntos indicados, el entorno de programación gráfica sería
simplemente 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, donde
frecuentemente existe una repetición de tareas. Ejemplo de ello es la gestión de un censo, el
primero 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 fue
afianzando en la sociedad, y es hoy día que se sigue trabajando para mejorar las prestaciones de
los sistemas de cómputo.
Si repasamos la historia veremos que la Informática estuvo entre nosotros desde tiempos
lejanos, por supuesto no tal cual la percibimos hoy día. A continuación transcribimos algunas
ideas 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 XVII
y XVIII, decía que “Es una pérdida de tiempo que personas cualificadas pierdan horas como
esclavos en la labor de calcular, lo que podría ser delegado en cualquier otro si se pudieran
utilizar 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 Segunda
Guerra 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.

9
Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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. Puede
realizar cualquier cosa siempre que conozcamos cómo llevarla a cabo; pero es incapaz de
descubrir 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 mujeres
que han realizado grandes aportes a la Informática, aún así Ada Byron es la única mujer que
cuenta con un lenguaje de programación que lleva su nombre: en 1979 el Departamento de
Defensa de los Estados Unidos creó un lenguaje de programación basado en Pascal que se
llamó 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 Boole
o álgebra booleana.
Herman Hollerith (1860-1929) fue un estadístico estadounidense que inventó la máquina
tabuladora. 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 esos
tiempos, los censos se realizaban de forma manual, con el retraso de unos 10 años en su
procesamiento. 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 que
patentó en el año 1889. Un año después incluyó la operación de sumar con el fin de utilizarla
en procesos de contabilidad.
Alan Turing (1912-1954) fue un matemático, lógico, científico de la computación, criptografía
y 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 los
conceptos de algoritmo y computación, la famosa máquina de Turing. Durante la Segunda
Guerra Mundial, trabajó en descifrar los códigos nazis, particularmente los de la máquina
Enigma. 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 si
las máquinas pueden pensar, es decir a la Inteligencia Artificial. Turing decia: “Las máquinas
me 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 y
laboral.
Vohn Von Neumann (1903-1957) fue un matemá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 otros
campos. Está considerado como uno de los más importantes matemáticos de la historia
moderna. Diseñó una arquitectura de computadoras que lleva su nombre, y aún es utiliza-
da en casi todas las computadoras personales, microcomputadoras, minicomputadoras y
supercomputadoras. Von Neumann decía “Podría parecer que hemos llegado al límite de lo
que es posible lograr con la tecnología informática, aunque hay que tener cuidado con tales
declaraciones, 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ón


INFORMATIQUE, debido a la contracción de las palabras INFORmation y autoMATIQUE, es decir
el tratamiento de la información por medios automáticos. En las múltiples publicaciones, la
Informática se define de diversas maneras pero siempre ronda la misma idea: el tratamiento

Cátedra de Informática rev1 10 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 la
información y se dice racional por estar los procesos definidos a través de programas que
siguen el razonamiento humano.
INFORMÁTICA es el estudio de los algoritmos y de las computadoras - de sus teorías, sus
modelos 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 en
sí.

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 una
ecuació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 los
datos provistos.

Figura 1.1.: Pasos para informatizar un problema

Cómo primer paso se deberá conocer las especificaciones del problema, es decir, analizar y
determinar 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 una
interpretació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 se
desean. Una vez que se conoce el problema en detalle, se puede intentar realizar un Modelo del
mismo, es decir, Abstraer el problema tratando de encontrar los aspectos principales que se
pueden resolver, los datos que se han de procesar y el contexto del problema, simplificando su
expresión. Disponiendo de un panorama más claro del problema, sus datos y resultados, se
puede 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 de
programación, para convertirlo en un Programa que podrá ser interpretado por la computadora
para 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ómo
se debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en un tiempo
finito

Cátedra de Informática rev1 11 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 por
una 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 que
pueda 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 ser
ejecutado 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, es


la verificación de funcionamiento del mismo, es decir, ver sí el programa conduce al resultado
deseado con los datos dados del mundo real. PROBAR EL PROGRAMA.

La primera etapa está dada por entender el enunciado del problema. Es importante que se
conozca lo que se desea que realice la computadora, mientras esto no se conozca del todo no
tiene mucho caso continuar con la siguiente etapa.
Cuando se ha comprendido lo que se desea resolver, es necesario hacer un Análisis del
problema, 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 forma
simbólica , esto se verá en la materia. En una primera etapa, es aconsejable probar que el
algoritmo propuesto realmente resuelva el problema planteado, utilizando papel, lápiz y nuestra
mente como procesador, esto es llamado Prueba de Escritorio.
En una segunda etapa, este algoritmo podrá ser traducido en un lenguaje reconocible por la
computadora, generando así el programa. La serie de instrucciones del programa se la conoce
como código fuente, el cual se escribe en un lenguaje de programación, generalmente un
lenguaje 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 de
sintaxis y/o de semántica. Veamos que son cada uno de ellos.

Cátedra de Informática rev1 12 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Errores de sintaxis

Se refieren a que alguna instrucción está mal escrita y por lo tanto el procesador no puede
reconocerla. Son simples de detectar y de modificar. Esta operación la resuelve el traductor del
entorno de programación, el Compilador o el Intérprete. Si en el proceso de traducción se
detectan 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", la
palabra "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 el


proceso de Validación donde se detectan los errores de lógica. Habrá que volver al punto 1) para
interpretar correctamente el enunciado del problema para rever y modificar el algoritmo
propuesto o proponer una nueva solución al problema dado. Algo muy importante a tener en
cuenta cuando se escriben programas es la Documentación del mismo. Esto se refiere a los
comentarios que se añaden al código fuente para hacer más claro el entendimiento del
programa: descripción del funcionamiento del programa, descripción del problema, nombre del
autor, entre otros. A menudo un programa escrito por una persona, es usado por otra, o por ella
misma después de un tiempo. Por ello la documentación sirve para ayudar a comprender la
lógica del programa, para re-usarlo o para facilitar futuras modificaciones (proceso de
mantenimiento).
Ejemplo, en el lenguaje Español un error de Semántica: "Juan se fue a Casar al Bosque". En este
caso 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 deja
dudas la interpretación de la frase.
Podríamos plantear otro ejemplo mas burdo en el que no quedan dudas del error lógico o de
semá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, puede
ser realizado a mano, con papel y lápiz, suponiendo que nosotros simulemos ser el procesador y
que disponemos del tiempo suficiente para llevarlo a cabo. En realidad, encargamos a la
computadora la ejecución de los pasos que componen un algoritmo porque es capaz de
completarlo en un tiempo mucho menor del que nosotros emplearíamos, y porque la
computadora es menos proclive a cometer errores que nosotros, quienes por distracción o
cansancio erramos habitualmente. Sin embargo, las computadoras sólo pueden ejecutar
algoritmos que se componen de acciones que puede entender. Por lo tanto, es necesario
conocer bien cuáles son dichas acciones para diseñar algoritmos bien escritos. Saber cuál es el
algoritmo que resuelve un problema dado, suele ser un paso difícil para todo aquel que no tenga
práctica en el tema. Para escribir algoritmos, el primer paso necesario es plantear cuál sería la
solución del problema en términos comunes, en palabras habituales, haciendo uso de todo lo
que esté a nuestro alcance, la imaginación, la matemática, el dibujo, el intercambio de ideas, la
lógica. No existe una técnica establecida para encarar la solución de un problema. La íntima
asociación entre el proceso de descubrimiento de algoritmos y el de resolución de problemas, en
general ha hecho que los científicos de la computación se unan a otras disciplinas en la
búsqueda de mejores técnicas para resolverlos. Pero la capacidad para resolver problemas sigue

Cátedra de Informática rev1 13 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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

1.2.4. El modelo Computacional.

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

Figura 1.2.: Modelo Computacional

Una vez entendido el problema hay que desentrañar del enunciado los datos necesarios para
comenzar el proceso de resolución, abstrayéndose del proceso de resolución. Habría que
preguntarse:

“¿Que necesito para resolver el problema, si yo fuese el procesador?”


“¿Que datos necesito que me 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é se
obtiene con los datos de entrada y anotarlos como SALIDA o RESULTADOS. A veces pueden ser
más fáciles de visualizar los resultados antes que los datos de entrada, en dicho caso habría que
preguntarse:

“¿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 desea
realizar un algoritmo para calcular el área y el perímetro de un círculo en función de su radio, las
diferentes partes del modelo computacional serán:
Entrada : El r ad i o del Círculo.
Proceso: Ár ea = π ∗ r ad i o 2 , Per ı́met r o = 2 ∗ π ∗ r ad i o
Salida: Ár ea Per ı́met r o
El 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 * radio
Calcular el Perímetro como 2 * pi * radio
Informar los resultados de Área y Perímetro.

Cátedra de Informática rev1 14 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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

1.2.5. Datos e Información.


Por último, describiremos la diferencia que existe entre Datos e Información, términos que se
pueden pensar como sinónimos. En el ambiente de la Informática, el término información puede
aplicarse 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 representan
datos. 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ólo
algunos 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 del
procesamiento de los datos.

Otro término que se utiliza es Tratamiento de la información, referido al conjunto de operaciones


que se realizan sobre una dada información. Esto es “lectura de datos”, “preservar datos”,
“comparar datos”, “procesar aritméticamente datos”, “presentar resultados”. Una adecuada
combinación de estas operaciones lleva a resolver los problemas. A continuación
comenzaremos 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 25
La temperatura es de 25 ºC
La temperatura es de 25 grados
P
I
PI

1.3. Algoritmos.
En la presente sección desarrollaremos el concepto de algoritmo, base de la temática de este
Apunte.

1.3.1. ¿Qué es un Algoritmo?


El término algoritmo deriva del nombre del matemático persa Abu Ja’far Mohammed ibn Musa
Al-Khwarizm (Mohammed, padre de Ja’far, hijo de Moisés, nacido en Khowarizm), el cual vivió

Cátedra de Informática rev1 15 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 realizados
utilizando 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ómo
se debe proceder para llegar a una respuesta encuadrada a los datos disponibles, en un tiempo
finito.
Se pueden inferir las siguientes Palabras Claves: Solución, Paso a Paso, Respuesta, Tiempo
Finito.
Seguramente existirán distintos algoritmos para resolver un mismo problema y todos serán
correctos, cada uno de ellos pensado por una persona diferente, cada uno de ellos con un diseño
distinto, cada uno de ellos con un sello propio. Escribir algoritmos es un arte, en el que cada
persona 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 seguir
para conseguir el objetivo propuesto.

2. exacto, es decir, que si se sigue el algoritmo varias veces con el mismo juego de datos, los
resultados 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 trabajo
indicado en el mismo.
La sintaxis y semántica a utilizar para escribir un algoritmo depende del lenguaje que conoce el
procesador, 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 un
estudiante de Ingeniería se referiría al valor de 3,14... que se representa con la letra griega conocida
como PI ( π).

Entonces, frente a un problema, sabiendo quien será el procesador y su lenguaje de


comunicación, podremos describir la solución del problema mediante un algoritmo que pueda
ser entendido y ejecutado sin ambigüedades.

1.3.2. Ejemplo Cotidiano.


Para comenzar a formalizar los conceptos fundamentales para escribir algoritmos veremos un
ejemplo 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 16 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Tarea 1: Pelar un Kg. de papas y cortarlas en dados pequeños


Tarea 2: Hervir las papas hasta que estén cocidas
Tarea 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 gusto
Tarea 6: Colocar en un plato el pan rallado
Tarea 7: Cortar el queso en dados de 1cm aproximadamente
Tarea 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 moderado
Tarea 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 sabe
hacer este algoritmo, y por lo tanto debió consultar con algún cocinero experto. Experto no se
refiere a un chef especializado, sólo debe ser una persona que sepa realizar las acciones, por
ejemplo su mamá.
Pero ¿quién “ejecuta” estas acciones? Tal cual está planteado el algoritmo lo podrá ejecutar toda
persona 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 preparado
para enfrentar dicho desafío.Pero porqué pensar en subestimar al lector, tal vez Ud. sea un
experto 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 una
orden que entiende perfectamente.
Otro punto que podemos destacar, con el cual se resalta la importancia del procesador es por
ejemplo la Tarea 7: Cortar el queso en dados de 1cm aproximadamente, creo que si el procesador
es un estudiante de ingeniería y no es un cocinero experimentado le resultaría menos ambiguo
algo 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 una
solució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 17 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

En la vida cotidiana encontramos muchos problemas algorítmicos, tanto dentro como fuera del
campo altamente especializado de la informática. Ejemplo de otros problemas algorítmicos son
los 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 la
definición: exactitud, efectividad y terminación garantizada. Cuando se ejecutan determinados
algoritmos pueden completarse en un pequeño intervalo de tiempo, mientras que otros pueden
llevar mucho tiempo.Aquí cabe preguntar si existen problemas no algorítmicos, y la respuesta es
afirmativa.
Un ejemplo de este caso es el problema de “Escribir todos los números enteros comenzando
desde 1". No es un problema algorítmico, pues la resolución (que todos podemos imaginar y
escribir 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 ese
trabajo.

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 que
algunos 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, pero
omita indicar que está ubicado en la cocina de su casa y no el desierto, con este último Ambiente
sin 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ón
finita por el cual, a partir de un estado inicial, se obtiene un nuevo estado final. Por ejemplo, en la
acción “pelar las papas”, el estado inicial es: las papas con cáscara y el estado final, las papas sin
cá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íficamente
esa acción no pertenece a su lenguaje. Habrá que modificarla de tal manera que pueda ser
escrita en términos que entienda el procesador. En muchos casos este tipo de acciones deben
ser descompuestas en tareas más detalladas para lograr el efecto que se desea. Por ejemplo en
nuestro algoritmo culinario, podría ser el caso que un determinado procesador no sepa de que se
trata 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. NO Primitiva = Primitivas
P

Cátedra de Informática rev1 18 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Veamos algo pero en el área de Matemáticas, supongamos que un procesador no entiende que
significa: 32 (3 al cuadrado), pero podría entender , multiplicar dos veces 3*3 , y mas , se podría
entender que se quiere descomponer la multiplicación en sumas sucesivas 3+3+3 (sumar 3
veces 3 es lo mismo que multiplicar 3*3). Es decir que la operación suma sería la Primitiva, en
este 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 que
usaremos en este libro.
La otra técnica de programación es Bottom-up, se descartó, por varias razones, si tiene
inquietudes al respecto se recomienda buscar en Internet, en esta materia NO se usa esta
técnica.
El método que utilizaremos parte de una idea general de resolución y luego va descomponiendo
las tareas hasta conseguir una secuencia de acciones primitivas que permitan al procesador
resolverla.
Se concluye pues que se debe escribir un algoritmo que resuelva el problema dado, y que luego
deberá ser adaptado al procesador que lo va a ejecutar. Por ello, frente a un problema debemos
saber 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 lenguaje
específico.

La computadora puede trabajar con distintos lenguajes. Sin embargo, para un gran número de
tareas de uso corriente, las acciones primitivas son similares en los distintos lenguajes, lo que
permite desarrollar algoritmos que sean independientes del lenguaje e incluso de la máquina que
los 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.
Otra
definición podría ser: “es un algoritmo traducido a algún lenguaje que pueda ser entendido por
una 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 propia
de un lenguaje, son interpretados y utilizados por el computador para realizar una determinada
acción.

Para llegar a hacer un programa es necesario el diseño previo del algoritmo. Esto es, representar
la 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 permite
expresar programas

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

Cátedra de Informática rev1 19 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

1.3.7. Representación de Algoritmos.


Ahora veremos en que forma se puede escribir un algoritmo. No existe un lenguaje único y
universal para escribir algoritmos. Cada lenguaje tiene una sintaxis determinada, un grupo finito
de elementos que ayudan a representar los algoritmos, y una semántica asociada a la sintaxis, la
cual se refiere al concepto que se representa.
Existen libros que tratan el tema, en ellos existen muchísimos elementos, no es el propósito de
esta materia usar todos, así que se reducen los elementos a un mínimo que consideramos
adecuado para escribir cualquier Algoritmo.
La sintaxis, conformada por dibujos y/o por palabras, no debe ser ambigua, y debe tener un nivel
de detalle bien establecido con el cual pueda expresarse el algoritmo. Otro punto importante a
tener en cuenta es que toda representación de algoritmos debe usar alguna forma que permita
independizar 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 en
un 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 natural

5. Fórmulas

Los dos primeros son formas gráficas de representación, mientras que los últimos son no
gráficas.
Analizaremos las distintas representaciones. Los métodos 4) y 5) no suelen ser fáciles de
transformar en programas. No es frecuente que un algoritmo sea expresado por medio de una
simple fórmula, pues no es sencillo traducirlo a un lenguaje de programación. Observamos en el
ejemplo de las bombas de papas lo ambiguo del lenguaje natural (en nuestro caso el español). A
continuación veremos las diferentes representaciones sobre un mismo algoritmo, cuyo
problema base es:
Enunciado del Problema: “Calcular el promedio de un conjunto de números positivos, suponiendo
que 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 definir
primero 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 en
que deben ejecutarse las acciones. Los símbolos utilizados han sido normalizados por el
Instituto Norteamericano de Normalización (ANSI). En nuestro caso utilizaremos algunos que no

Cátedra de Informática rev1 20 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

son los normalizados pero que son los utilizados en un programa llamado PSeInt, de manera que
no se generen confusiones.

Símbolo Función
Proceso, cualquier tipo de Operación Aritmética
o 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 Diagrama
de Flujo para que respete la definición de
Algoritmo.
Fin, debe existir solo uno dentro del Diagrama
de Flujo para que respete le definición de
Algoritmo.
Flecha, une los elementos gráficos dándole una
dirección, sentido de recorrido.

Veamos como sería el ejercicio


Enunciado del Problema: “Calcular el promedio de un conjunto de números positivos, suponiendo
que 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 Flujo

Cátedra de Informática rev1 21 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 que
elija el que lo use, en nuestro caso el español. Por lo cual el uso de tal tipo de lenguaje hace que
la escritura de los algoritmos sea relativamente fácil. La ventaja del pseudocódigo es que al
usarlo, el programador se puede concentrar en la lógica de resolución del problema más que en
las reglas del lenguaje, el cual ya conoce. Por otra parte, facilita la modificación del algoritmo si
se descubren errores de lógica, ya que para agregar nuevas acciones se escribe en el mismo
renglón separando las acciones por un punto y coma.
El algoritmo propuesto se representa en pseudocódigo de la siguiente forma:

1 Proceso Ejercicio1
2 Definir Acumulador, Datos , Promedio, Contador como Real;
3 Acumulador =0;
4 Contador =0;
5 Datos =1;
6 Mientras Datos!=0 Hacer
7 Leer Datos;
8 Contador=Contador+1;
9 Acumulador=Acumulador+Datos;
10 FinMientras
11 Promedio=Acumulador/Contador;
12 Escribir Promedio;
13 FinProceso

En este Apunte se utilizarán las representaciones Diagrama de flujo y Pseudocódigo


indistintamente. 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 maneras
de representación. Al margen de lo que tenga que ver con la comprensión de una u otra existen
puntos a Favor del Pseudocódigo como ser:

Administrar el espacio en una hoja de papel, suele ser mas parecido a lo que hacemos con
mas 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ón
Es la representación narrativa de los pasos que debe seguir un algoritmo para dar solución
a 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 un


lenguaje.

Cátedra de Informática rev1 22 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 de
aprendizaje, nosotros usaremos en la materia uno que permite instalarse en los sistemas
operativos mas comunes, de manera que el lector no debería tener problemas, como ya
mencionamos 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 que
pueden 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 los
números 9 y 11 podría ser 0001 1100 0111 0011 1001 1011

Ventaja:

La velocidad de ejecución de los programas es directa pues el microprocesador las entiende y


ejecuta.

Desventaja:

Es un lenguaje de símbolos muy diferentes al nuestro, por lo tanto la codificación del programa
se hace lenta y se pueden cometer muchos errores. Las instrucciones en código de máquina
dependen 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 del
ejemplo anterior sería ADD 9,11, esto es sumar 9+11

Cátedra de Informática rev1 23 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 los
programadores es más compleja que la correspondiente a los programadores de alto nivel ya
que exige no sólo técnicas de programación sino también el conocimiento del funcionamiento
interno de la máquina. Se utiliza en la programación de PLC, control de procesos, aplicaciones de
tiempo real, control de dispositivos. Un programa escrito en un lenguaje de este tipo no puede
ser ejecutado directamente por el procesador, y debe ser traducido a código de máquina
mediante 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 a
có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ás
natural, acercándose al lenguaje natural.
Una instrucción del ejemplo anterior sería 9 + 11. Los lenguajes de alto nivel son los más
populares 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 lo
tomaba como un lenguaje de nivel medio.

Ventajas:

Son los más utilizados por los programadores. Son independientes de la máquina, las
instrucciones de estos lenguajes no dependen del microprocesador, por lo cual se pueden correr
en diferentes computadoras. Son transportables, lo que significa la posibilidad de poder ser
ejecutados con poca o ninguna modificación en diferentes tipos de computadoras. La escritura
de los programas con este tipo de lenguajes se basa en reglas sintácticas similares a nuestro
lenguaje, por lo tanto la adaptación de los programadores es mucho más rápida que en los
lenguajes anteriormente nombrados.

Desventajas:

Ocupan más lugar de memoria principal (RAM) que los anteriores. El tiempo de ejecución es
mayor, pues necesitan varias traducciones.

Lenguaje algorítmico

Está formado por acciones primitivas provenientes de nuestro lenguaje natural. Si nosotros
somos los que vamos a ejecutar esas acciones, entonces se podrá escribir en español. Una
instrucción del ejemplo anterior sería 9+11=

Ventaja: Es fácil aprender un pseudocódigo.

Cátedra de Informática rev1 24 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Desventaja:

Necesita muchas traducciones para ser ejecutado por el microprocesador, una de ellas es la
conversió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 que
desarrollaremos a lo largo de este apunte. A continuación analizaremos brevemente los
conceptos 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áquina
electró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 la
utilizació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: valores
numéricos, textos, imágenes, sonido, etc. El dispositivo encargado de efectuar operaciones
matemáticas y lógicas, recibe el nombre de Unidad Aritmético-Lógica (UAL o ALU en inglés). Es
una 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 de
Control (UC), que se encarga de transportar la información de la memoria a la UAL, de controlar
la UAL para que efectúe las operaciones pertinentes y de depositar los resultados en la
memoria.El conjunto que forman la Unidad de Control y la UAL se conoce por Unidad Central de
Proceso (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 la
CPU, más elementos como Memorias, Discos, Fuente, Placa Madre, etc. es lo que de manera
errónea llamamos CPU.
Se puede imaginar la memoria como un armario enorme con cajones numerados y la UCP, como
una persona que, equipada con una calculadora (la UAL), es capaz de buscar operandos en la
memoria, efectuar cálculos con ellos y dejar los resultados en la memoria. Recordar que el
procesador trabaja todo en la memoria. Utilizando un lenguaje más técnico: cada uno de los
cajones que conforman la memoria recibe el nombre de celda de memoria y el número que lo
identifica es su dirección o posición en la memoria.
Las celdas de la memoria son circuitos electrónicos organizados en pequeñas porciones, todas
de igual tamaño. En cada una de ellas se puede almacenar secuencias de unos y ceros de
tamaño fijo.

Cátedra de Informática rev1 25 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 dispositivos
binarios, 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 el
Sistema Numérico Binario solo tiene 2 símbolos y hay qeu reutilizarlos para formar números
mayores a 1. Cada símbolo conoce como bit. Un bit (acrónimo de las palabras binary digit) puede
ser 0 ó 1, por lo que para poder representar muchos valores necesitaremos MUCHOS bits. Surge
histó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 Binaria

En una computadora se usa lo que se conoce como memoria para almacenar partes de un
programa, la memoria se mide en Bytes.

Cátedra de Informática rev1 26 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 misma
destruyendo 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 en
la memoria) y los dispositivos de salida (pantalla, impresora, archivo) muestran los contenidos
de 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, es
decir, que cuando se corta el suministro eléctrico la información en ella desaparece. Por otro
lado se encuentran las memorias permanentes, denominadas MEMORIAS SECUNDARIAS, las
que permiten guardar de forma permanente programas e información. En este rubro se
encuentran los discos y las memorias flash, entre otras.
A modo ilustrativo, para que el lector tenga una noción de la gran variedad de almacenamientos
que existen (esta imagen no incluye todos los tipos) presentamos una imagen de la organización.

Figura 1.6.: Clasificación de Tipos de Almacenamiento

El Sistema Hexadecimal que veremos a continuación se usa habitualmente para hacer referen-
cia a las direcciones de memoria en las computadoras.

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 que
permiten construir TODOS los números válidos en el sistema.

Cátedra de Informática rev1 27 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Identifiquemos algunos de los símbolos en los distintos 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, es
necesario REUTILIZAR los símbolos para lograr mas números.
Cada uno de estos sistemas Numéricos tiene reglas de generación que permiten construir todos
los números válidos en el sistema, en algunos casos son mas fáciles unos que otros.
En base a las reglas de generación de los sistemas Numéricos se suelen clasificar en dos
grandes grupos.

Posicionales:

En los sistemas modernos de numeración básicamente se usa el sistema posicionál o


ponderado, esto significa que dependiendo de la ubicación o posición dentro del número el
sí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 tanto
del 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 con
las No posicionales) mas sencillas.
Como se sabe en una suma, se suma primero las unidades lo que supere a 10 se transporta a la
decena 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 los
sistemas NO posicionales.

No posicionales:

En los sistemas no posicionales, para el caso de la suma no es tan sencillo, ya que la posición no
tiene que ver con la ponderación, brevemente veamos un ejemplo que lo que comentamos.
I V (cuat o)
+ V I (sei s)
X (d i ez)
Es por eso que las operaciones básicas como suma o resta no son tan sencillas. Pero no
ahondaremos mas en este tipo de Sistemas numéricos, vamos a concentrarnos en los
modernos.

1.5.3. Equivalencias entre Sistemas numéricos.


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

Cátedra de Informática rev1 28 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Decimal Hexadecimal Octal Binario


010 016 08 000002
110 116 18 000012
210 216 28 000102
310 316 38 000112
410 416 48 001002
510 516 58 001012
610 616 68 001102
710 716 78 001112
810 816 108 010002
910 916 118 010012
1010 A16 128 010102
1110 B16 138 010112
1210 C16 148 011002
1310 D16 158 011012
1410 E16 168 011102
1510 F16 178 011112
1610 1016 208 100002
1710 1116 218 100012
1810 1216 228 100102
1910 1316 238 100112
2010 1416 248 101002
2110 1516 258 101012

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 ya
que 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 10
unidades, 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 2
unidades, por lo que (8+2) 128 =1010 .

Esta tabla presenta solo algunos números y sus equivalencias; pero existen métodos generales
para 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 el
número a dividir sea 1 finaliza la división.
A continuación se ordenan los restos empezando desde el último al primero, simplemente se
colocan en orden inverso a como aparecen en la división, se les da la vuelta. Éste será el número
binario que buscamos.

Cátedra de Informática rev1 29 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Veamos el caso de convertir 10010 a su valor binario.

Figura 1.7.: 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=0
0+1=1
1+0=1
1 + 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 binario
por 2 elevado a la potencia cero (20 ) para el primer símbolo, 2 elevado a la potencia uno para
el segundo (21 ) y así sucesivamente (22 , 23 ....)

2. Después de realizar cada una de las multiplicaciones, sume todas y el número resultante
será 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 =8310
Observació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 Decimal

1. 1010112

2. 100012

3. 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?

Cátedra de Informática rev1 30 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Octal a Decimal.

1. Inicie por el lado derecho (la última cifra, la de menos peso), multiplique el símbolo octal por
8 elevado a la potencia cero (80 ) para el primer símbolo, 8 elevado a la potencia uno para el
segundo (81 ) y así sucesivamente (82 , 83 ....)

2. Después de realizar cada una de las multiplicaciones, sume todas y el número resultante
será 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 Decimal

1. 728

2. 208

3. 5708

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 resultante
será 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 se
puede 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

Cátedra de Informática rev1 31 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Donde

N 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.100


Binario: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 =23710
Hexadecimal: 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 Decimal

1. BE116

2. 2016

3. A18C16

4. 1101012

5. 42738

6. A18C16

Figura 1.8.: 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 esta
línea, una cuestión a tener en cuenta son los tipos de datos que maneja el computador:

números.
caracteres.

Cátedra de Informática rev1 32 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 y
significados.
Un carácter es una letra mayúscula, minúscula, signo de puntuación, signo especial, etc.
Hay un estándar mundial, conocido como ASCII que establece la correspondencia entre distintas
bases numéricas y los caracteres mas comunes.

Figura 1.9.: 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 caracteres
ASCII 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 1
o es el Número entero 1?.
¿Cuantos Bits son necesarios para poder representar los caracteres ASCII de la tabla?

A continuación veremos a que se refiere un tipo de dato y presentaremos las variables y las
constantes, conceptos basales de los algoritmos.

Cátedra de Informática rev1 33 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

1.6.1. 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 operaciones
permitidas 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.

Figura 1.10.: Tipos de Datos Primitivos

El conjunto de valores que pueden asumir los enteros o los reales están acotados a los rangos
de los números que puede manejar el procesador en cuestión, con las limitaciones de bytes que
se 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 un
código numérico. Estos valores numéricos fueron establecidos en una codificación estándar, el
Código ASCII (American Standard Code for Information Exchange), tal como se lo presentó en la
sección 1.6.
Esta codificación utiliza 7 bits para representar un carácter, a cada uno de los cuales le
corresponde un grupo de números entre el 0 y el 255. Referirse a la Figura 1.9 donde se
representan los mismos.

Cátedra de Informática rev1 34 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

1.6.2. 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 tipo
primitivo.

Figura 1.11.: Resumen de Rangos y Operaciones permitidas

Otro tipo de dato que se utiliza habitualmente es el string, el cual se refiere a una cadena de
caracteres, 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.12.: Caracteres ASCII NO imprimibles o de Control

Por ejemplo, un nombre o una dirección, podría ser un tipo de dato llamado string.

Cátedra de Informática rev1 35 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Undato de tipo string asume como valores posibles secuencias de caracteres tomados de un
conjunto específico (por ejemplo el código ASCII) y admite como operaciones la comparación y
la concatenación.
Cabe aclarar que el string no es un tipo de dato primitivo, sino un tipo de dato compuesto por
elementos primitivos, los caracteres. Otro tipo de dato es el de los números complejos, formado
por un par ordenado de números reales. Este tipo de dato compuesto es útil en aplicaciones de
Ingeniería y permite realizar directamente las operaciones sobre números complejos. Conjuntos
de datos más elaborados, con características y operaciones propias constituyen los tipos de
datos compuestos o estructuras de datos. Los strings y números complejos son casos de
estructuras de datos, estos no se verán en la materia de Informática, si en Computación que es
una 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. El


procesador necesita disponer de un mecanismo que permita el almacenamiento y la
manipulación de los datos. En un algoritmo o programa esto es llevado a cabo por entidades a
las 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 son

nombre
tipo de dato
valor.

El nombre que designa la variable o mediante el cual se hace referencia, es recomendable que
sea 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 llamar
TemperaturaAmbiente, usando la notación tipo Camello, y un nombre útil para que las personas
puedan identificar fácilmente la variable.
En bajo nivel se hace referencia a la variable usando una dirección de una celda de memoria con
un valor Hexadecimal.
El siguiente ejemplo da cuenta del nombre de la variable “suma”, del tipo de dato que puede
manejar “entero” y de la ubicación en memoria “FFFA”.

Figura 1.13.: Variable

Cátedra de Informática rev1 36 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Existen lenguajes donde es obligatorio declarar las variables a utilizar, es decir, listar las variables
que 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 programa
llamado PSeint se pueden definir plantillas o personalización respecto a la obligatoriedad de
diversas cuestiones. Mencionado esto realizaremos la declaración de las variables previamente
al algoritmo, considerando a éstas como el ambiente de resolución del problema.
Cuando se declara una variable, el microprocesador reserva una porción de memoria principal
para almacenar los valores correspondientes al tipo de dato de la misma. Para unificar los
criterios de escritura de los algoritmos escribiremos primero el tipo de dato y luego la lista de los
nombres de las variables separadas por coma.
Por ejemplo:

1 Proceso DefinicionVariables
2 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 valor


permanece 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 permanecen
constantes. En el ejemplo del cálculo del perímetro de la circunferencia (2*Pi*radio), “2” es una
constante expresada por su valor, “radio” es una variable y “Pi” es una constante expresada con
un nombre, la cual fue definida como Pi=3,1416 al comienzo del algoritmo. Cada vez que el
nombre Pi aparece en el desarrollo del mismo, será reemplazado por el valor 3,1416.

1.6.3. 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, esta
son:

1. Todo nombre de variable debe comenzar con una letra del alfabeto inglés (mayúscula o
minú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.

Cátedra de Informática rev1 37 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 N
OPQRSTUVWXYZ
b) Dígitos: 0 1 2 3 4 5 6 7 8 9
c) Carácter especial: _

6. La cantidad de caracteres que conforman el nombre de la variable podemos decir a los fines
prácticos que no tiene límites

7. 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 en
la regla propias de este apunte.

Nombre de la variable Válido Motivo por el cual NO es válido


Si/No
Temperatura Ambiente 1
Temperatura.Ambiente
Temperatura_Ambiente
TemperaturaAmbiente
Esta_es_la varia-
ble_que_almacena_la_temperatura_ambiente
Esta es la variable que
almacena la temperatura
ambiente
Variable1
Perímetro

Observaciones: El lenguaje C tiene 32 palabras reservadas y el, lenguaje C++ tiene 64 palabras
reservadas. Las palabras reservadas son palabras propias del lenguaje o psuedocódigo. Esto
quiere 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.4. Nombres de Programas


El propósito de esta materia es que sepamos escribir un programa, los programas necesitan ser
llamados y para ello deben tener un nombre.
Normalmente no tratábamos el tema de los posibles nombres a los programas, pero solía ser un
error común que los alumnos asignen nombres y que luego al momento de hacer correr el
programa o ejecutar tira algunos errores, es por eso que vamos a establecer para el presente
curso unas reglas propias para los nombres de programas.
Estas reglas son sencillas y veremos que tienen un parecido grande con los nombre de las
variables y nos van a permitir evitar errores menores.

1. Todo nombre de programa debe empezar con una letra del alfabeto inglés (mayúscula o
minúscula).

Cátedra de Informática rev1 38 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 bajo
y 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 N
OPQRSTUVWXYZ
b) Dígitos: 0 1 2 3 4 5 6 7 8 9
c) Carácter especial: _
4. La cantidad de caracteres que conforman el nombre del programa a los fines prácticos que
no tiene límites.
 Actividad Propuesta
Indique a su juicio que nombres de programas son correctos, basados en las reglas propias de
este apunte.

Nombre del Programa Válido Motivo por el cual NO es válido


Si/No
MiNombre MiApellido 1
Promedio.Nuevo
Promedio_Nuevo
Cálculo1
Este es mi primer programa
de calculo de promedio
Este_es_mi_primer_programa_de_calculo_de_promedio
1 Ejercicio
Ejercicio1
CalculoCaño

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

1.6.5. Notaciones comunes.


Notación Camel

La notación Camel consiste en escribir los identificadores con la primera letra de cada palabra en
mayúsculas y el resto en minúscula: EndOfFile. Se llama notación “Camel” porque los
identificadores recuerdan las jorobas de un camello. Existen dos variantes:
UpperCamelCase, CamelCase o PascalCase: en esta variante la primera letra también es
mayú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.

Cátedra de Informática rev1 39 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Notación C

Durante los años 1960s, con la estandarización del código ASCII, los primeros programadores de
C y UNIX utilizaron el carácter _ como separador: end_of_file. Esta notación sigue siendo la mas
utilizada en C y entornos UNIX.
Los defensores de esta notación argumentan que es mas fácil de leer porque deja un espacio
entre palabras, al contrario que Camel. Además, en algunos teclados es mas rápido de escribir el
cará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 de
letras en minúscula, que indica alguna característica del identificador, como su tipo en el caso de
variables.
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 constantes


mediante identificadores en mayúsculas. En este caso la notación Camel no es aplicable y solo
queda usar la notación C: END_OF_FILE, PI, EARTH_RADIUS, etc. Java recomienda esta notación
para constantes, y en C/C++ siempre ha sido la notación mas usada.

1.6.6. 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 Trabajo
Lógicas Contador
Carácter Acumulador
String

Por su Contenido

Variables Numéricas:
• Son aquellas en las cuales se almacenan valores numéricos, enteros o reales, positivos
o 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, true
o false, 0 o 1, Si o No).
• Ejemplo z= V , x= F.

Cátedra de Informática rev1 40 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Variables Carácter:
• Cuyo contenido es un solo carácter alfanumérico (una letra, un carácter especial, un
número), que escribiremos entre apóstrofo.
• Ejemplo: letra = ’a’, Inicial = ’L’, Rta = ’ S ’, dígito= ’4’.
• 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 entre
las 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í no
notamos grandes diferencias. Entonces la pregunta es ¿Qué diferencia hace el procesador con
los caracteres y los strings? .
El procesador utiliza para ’a’ un Byte (8 bits) para almacenar un carácter. Sin embargo, cuando se
trata 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 de
caracteres, carácter NULL.
Cuando el procesador almacena una cadena de caracteres en memoria lo hace ubicando cada
carácter en un Byte en posiciones consecutivas de memoria. Pero cuando quiera recuperar dicha
cadena de memoria no sabrá hasta que Byte debe tomar. Este problema se solucionó haciendo
que el procesador coloque un carácter especial (NULL) al final de la cadena para identificar su
fin. A este carácter especial lo denominaremos NULL y como es especial figura en el código
ASCII 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 resto
es 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 en
memoria. 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 comillas
dobles ("W").

Por su Uso

Variables de Trabajo:

Cátedra de Informática rev1 41 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

• 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 se
realiza una operación o se cumple una condición. Los incrementos son generalmente
de uno en uno.
• Ejemplo: Cont = Cont + 1 . Ver que el incremento es FIJO!!, puede ser -2 , 3 , etc. pero
siempre FIJO
Acumuladores o Sumadores:
• Son variables que se utilizan para llevar la suma acumulativa de una serie de valores
que se van leyendo o calculando progresivamente.
• Ejemplo: Suma = Suma + x. Ver que x es una variable, si fuera una constante sería un
contador.

1.6.7. 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.
relacional
lógica
de carácter
El resultado de una expresión aritmética es del tipo numérico, el de una expresión relacional y el
de una expresión lógica es de tipo lógico, y el de una expresión carácter es del tipo cadena de
caracteres o carácter.

Expresiones Aritméticas.

Las expresiones aritméticas son análogas a las fórmulas matemáticas. Los elementos
intervinientes 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 la
potencia de otra manera.

Cátedra de Informática rev1 42 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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ón
del tipo de dato, esto es conocido como conversión implícita del Lenguaje, esto por supuesto
no sucede en un Diagrama de Flujo. Es importante referirse a la documentación del lenguaje
para 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 que
esto 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 una
expresió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. Potencias

3. Productos y Divisiones

4. Sumas y restas

5. Concatenación

6. Relacionales

7. 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 de
biblioteca (library en inglés), estas no son ni mas ni menos que código que escribieron otras
personas. 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 para
obtenerlos.

Cátedra de Informática rev1 43 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Para poder usar este código hay que introducir una línea en el programa que haga referencia a la
ubicació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 elementos
que 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.14.: Funciones de Librerías de PSeInt

Para el caso de C++, la cantidad de funciones de librería o librerías es muchísimo mas grande y
se 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 +B
b) C= (B - A) / (A - 3)
c) C= A * 5 + B
d) C= 4 / 2 * 3 / 6+ B / 2 / 1 / 5 ^ 2 - A
e) C=B+ A+ 25 +4 * (A * B) / 2
f) C= B ^ A +(A / B) - 20 / B
g) C =A - B / 2 A * 5
h) 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 44 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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: deben
estar escrita en un único renglón.

5(x + y) ——–>
x+y
u+ wA
——–>
p
2
−b+ b 2 −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 otras
expresiones 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, tales
como 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 45 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

El operador lógico como el NO o NOT es unario, es decir, se aplica a un único operando, en


cambio 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 OperadorLogicoNo
2 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.15.:

1 Proceso OperadorLogicoNo
2 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.16.:

Operaciones Lógicas Binarias.

Hasta el momento vimos la suma de números binarios, es normal asociar los números binarios
a 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. Si
bien en la época de Boole no existían las computadoras, si existían variables Boolenas (el
nombre no es casualidad) , y este matemático introdujo unas operaciones sobre variables

Cátedra de Informática rev1 46 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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

Figura 1.17.: Compuertas Lógicas

Notemos que se consideran solo 2 variables booleanas de entrada y una de salida para el caso
de 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=Falso
a) A&B | A&B : Verdadero o Falso?

Cátedra de Informática rev1 47 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

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 forma de una recta y resaltar el segmento
que 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 48 de 121


Universidad Nacional de Misiones

Cátedra de Informática Departamento de Electrónica


Guía Teórica de Informática Palabras claves: Lenguaje, Pseudocódigo , PSeInt, C++

Cátedra de Informática rev1 49 de 121

También podría gustarte