[FUNDAMENTOS DE PROGRAMACIÓN

]

INTRODUCCIÓN A LA COMPUTACIÓN

UNIDAD I, INTRODUCCIÓN A LA COMPUTACIÓN
1.1. CONCEPTOS GENERALES
1.1.1

COMPUTADORA

Máquina electrónica rápida y exacta que es capaz de aceptar datos a través de un medio de entrada, procesarlos automáticamente bajo el control de un programa previamente almacenado, y proporcionar la información resultante a un medio de salida. Un sistema informático está compuesto a su vez por dos subsistemas: Hardware y Software. Describiremos un sistema siguientes elementos:
1

computacional

enumerando

los

[FUNDAMENTOS DE PROGRAMACIÓN]

1. 2. 3. 4. 5.

Computadora y todos sus periféricos (hardware) Instrucciones legibles (software) Datos a procesar Manuales de operación Procedimientos y personas que utilizan el sistema

Antecedentes Generales e Historia Clasificación y Posibilidades de las Computadoras De acuerdo a la forma que procesan los datos podemos clasificarlas en:
• • •

Digitales. Procesa datos discretos. Trabaja contando números que representan cifras, letras u otros simbolos especiales. Analógicas. Procesa datos que están medidos en una escala contínua. Híbridas. Utilizan simultáneamente las técnicas analógica y digital en sus componentes.

De acuerdo a su propósito:
• •

Propósito especial. Diseñada para realizar una tarea específica. Propósito general. Puede almacenar diferentes programas y puede ser usada en distintas aplicaciones.

De acuerdo a su tamaño y potencia:
• • • •

Microcomputadoras (PC) Son los dispositivos más pequeños que pueden programarse Minicomputadoras (Mini) Son de tamaño medio, y mas costosas que una PC Maxicomputadora (mainframe) Pueden controlar muchos dispositivos de E/S Supercomputadora (Super) Son las más rápidas y costosas.

Conforme a la manera que están conectadas:

Sistema monousuario. Diseñadas para usarse por una persona a la vez, operan sistema operativo monousuario. Microcomputadora.

2

[FUNDAMENTOS DE PROGRAMACIÓN]

Sistema multiusuario. Utilizan muchos de los microprocesadores que se encuentran en las PCs, pero pueden manejar varias tareas en forma concurrente. Sistema en red. Conjunto de computadoras conectadas entre si para compartir recursos.

1.1.2

EL PROGRAMA

Un programa es un conjunto de instrucciones u ordenes basadas en un lenguaje de programación que una computadora interpreta para resolver un problema o una función especifica. 1.- Es la relación ordenada de actividades, en informática se le conoce como la serie codificada de instrucciones. 3. Redacción de un algoritmo en un lenguaje de programación. 4. Conjunto de instrucciones ordenadas correctamente permiten realizar una tarea o trabajo específico. que

5. Toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informático para realizar una función o una terea o para obtener un resultado determinado, cualquiera que fuere su forma de expresión y fijación. 6. Conjunto secuenciado de instrucciones que quedan escritas en un lenguaje determinado con unos fines específicos. Aunque en el lenguaje común con frecuencia se denomina programa al sistema operativo, la diferencia estriba, precisamente, en la especificidad de aquél frente al carácter de gestión global de éste. La palabra software engloba ambos. 1.1.3 EL LENGUAJE DE PROGRAMACIÓN

Un lenguaje de programación es un idioma artificial diseñado para expresar computaciones que pueden ser llevadas a cabo por máquinas como las computadoras. Pueden usarse para crear
3

se compila y se mantiene el código fuente de un programa informático se le llama programación. se prueba.1 Está formado por un conjunto de símbolos y reglas sintácticas y semánticas que definen su estructura y el significado de sus elementos y expresiones. También la palabra programación se define como el proceso de creación de un programa de computadora. cómo deben ser almacenados o transmitidos y qué acciones debe tomar bajo una variada gama de circunstancias. como por ejemplo HTML (lenguaje para el marcado de páginas web que no es propiamente un lenguaje de programación. Prueba y depuración del programa. Al proceso por el cual se escribe. Los lenguajes informáticos engloban a los lenguajes de programación y a otros más. mediante la aplicación de procedimientos lógicos. Ensamblaje o compilación del programa hasta convertirlo en lenguaje de máquina. Permite especificar de manera precisa sobre qué datos debe operar una computadora. Una característica relevante de los lenguajes de programación es precisamente que más de un programador pueda usar un conjunto común de instrucciones que sean comprendidas entre ellos para realizar la construcción de un programa de forma colaborativa. a través de un lenguaje que intenta estar relativamente próximo al lenguaje humano o natural. Todo esto. para expresar algoritmos con precisión. o como modo de comunicación humana. 4 . Desarrollo de la documentación. Existe un error común que trata por sinónimos los términos 'lenguaje de programación' y 'lenguaje informático'. Escritura de la lógica del programa empleando un lenguaje de programación específico (codificación del programa). se depura. sino un conjunto de instrucciones que permiten diseñar el contenido de los documentos). a través de los siguientes pasos: • • • • • El desarrollo lógico del programa para resolver un problema en particular.[FUNDAMENTOS DE PROGRAMACIÓN] programas que controlen el comportamiento físico y lógico de una máquina.

Al principio de la comunicación electrónica cada máquina tenía su propio lenguaje. 3. Al principio se acercaban mucho al lenguaje propio de las computadoras (ceros y unos). el medio que permite entablar la comunicación con las máquinas se conoce como “lenguaje de programación”.1.[FUNDAMENTOS DE PROGRAMACIÓN] 1. Aún con su corta duración. Lenguaje máquina. 1. Entre más cercano a la computadora es un lenguaje se le denomina de bajo nivel. 5.4 CARACTERISTICAS PROGRAMACIÓN DE LOS LENGUAJES DE Las computadoras calculan eléctricamente por medio de pulsos de corriente y voltajes que representan formas de comunicación por demás ajenas al lenguaje humanos. la historia de la computación electrónica ha producido varios cientos de lenguajes de programación ampliamente reconocidos y utilizados. y los programadores tenían sistemas rudimentarios para combinar números que representaran instrucciones simples como SUMAR y COMPARAR. lo contrario es de alto nivel. Lenguajes ensambladores. Existen cinco generaciones de lenguajes de programación. por lo que la comunidad del cómputo se movió rápidamente para desarrollar lenguajes ensambladores. 2. pero se han ido transformando para acercarse más a las lenguas humanas como el inglés o bien a formas gráficas mas expresivas y sintéticas. Lenguaje Máquina El lenguaje máquina. Lenguajes de alto nivel. Lenguajes naturales. en donde cada uno mejora a sus predecesores en cuanto a las facilidades que otorga al programador. y el elemento ejecutor es la circuitería misma de la computadora. Los métodos de programación en este lenguaje son tediosos e imprácticos. Así pues. Lenguajes de muy alto nivel. el de más bajo nivel. representa datos e instrucciones con dígitos binarios (0s y 1s). 5 . 4.

transformando radicalmente la actividad de la programación. Para usar un lenguaje ensamblador se requiere un lenguaje traductor que convierta los programas en ensamblador a lenguaje máquina que es el único que comprende la computadora. Estos lenguajes se asemejan más a la lengua humana. Como resultado. Lenguaje de muy alto nivel. La investigación sobre los lenguajes de alto nivel se inicia en 1945. Este traductor se llama programa ensamblador. particularmente el inglés. son llamados lenguajes de muy alto nivel. con el ingeniero alemán Konrad Zuse. etcétera. Entre los lenguajes de esta generación se encuentran los de propósito general como BASIC. Lenguaje de alto nivel. Existen compiladores para cada lenguaje y cada máquina. FORTRAN y COBOL que han sido muy populares. todavía tenían muchos inconvenientes. por ejemplo. 4GL’s. en lugar de usar ceros y unos se utilizan códigos mnemónicos (para ayudar a la memoria) o abreviatura fáciles de recordar para las instrucciones: ADD (sumar). C (comparar). Además se encuentran Pascal. con menos detallados y con menos declaraciones describen tareas más complejas para la computadora. pero una ventaja de los lenguajes de alto nivel es que se pueden trasladar de una máquina a otra con pocas o nulas modificaciones. estos traductores se llaman compiladores (el primero se desarrollo en 1952). C y sus derivados. Obviamente se requiere de un traductor de las declaraciones simbólicas de un lenguaje de alto nivel al lenguaje máquina ejecutable por la computadora. Los lenguajes de la cuarta generación.[FUNDAMENTOS DE PROGRAMACIÓN] Lenguajes Ensambladores En su momento. los lenguajes ensambladores constituyeron un gran avance. que son detallados en extremo y su programación es tediosa. pero hasta el inicio de los 1960 que se generaliza su uso. Su definición es más complicada que los 6 . repetitiva y propensa al error. STO (almacenar). Aún cuando los ensambladores representaron un paso adelante. los programadores logran trabajos de mayor alcance y con menos esfuerzo.

(IA).1. 7 . Lenguaje Natural En la quinta generación se encuentran los llamados Lenguajes naturales. Entre las características de estos lenguajes está el que nos son de procedimientos. Por ejemplo. porque los programas son más fáciles de escribir y actualizar. Una clase de estos sistemas son los Sistemas expertos. 1. que son base de la Inteligencia Artificial. En los declarativos se define solamente lo que se haga. Enfatizan el qué en lugar del cómo. producir un reporte del tratamiento realizado a un conjunto de datos. pueden ser usados con un mínimo de entrenamiento y ahorran al usuario la necesidad de conocer a fondo el hardware y la programación. En los lenguajes de procedimientos se dice con detalle a la computadora la tarea a realizar. Se trata esencialmente de los lenguajes de programación taquigráficos. por su acercamiento a la lengua escrita. Obviamente los que elaboran lenguajes declarativos han hecho trabajo que para muchos de los usuarios mejoran la productividad. como COBOL. El uso de un lenguaje natural con una base de conocimientos produce un sistema basado en el conocimiento.[FUNDAMENTOS DE PROGRAMACIÓN] anteriores. requiere típicamente de unas cinco a diez líneas en uno de cuarta generación.5 PROGRAMACIÓN • Definición Lenguaje de programación es un conjunto de sintaxis y reglas semánticas que definen los programas del computador. Entre los inconvenientes de estos lenguajes se encuentra que no han uso eficiente de los recursos computacionales. una operación que requiere de cientos de líneas en un lenguaje de tercera generación.

Los pasos a seguir serían: 1. •Código utilizado para la creación de programas. En informática. •sistema de escritura para la descripción precisa de algoritmos o programas informáticos. Comprender el problema 2. etc. Un lenguaje de programación es aquel elemento dentro de la informática que nos permite crear programas mediante un conjunto de instrucciones. operadores y reglas de sintaxis. se utiliza para redactar programas de • • • • • •Conjunto de sentencias utilizadas para escribir secuencias de instrucciones que para que ejecute una computadora. Lo utilizan los programadores (generalmente especializados en un lenguaje en particular) para la creación de diversas aplicaciones. podrán ser interpretadas y así resultar en un programa. Plantear la lógica 8 . página web. •Lenguaje que computación.[FUNDAMENTOS DE PROGRAMACIÓN] • •Lenguaje que los programadores usan para comunicar instrucciones a una computadora y poder ejecutar un programa. 1.2 EL PROCESO DE PROGRAMACIÓN Elaborar un programa implica tener que realizar una serie de pasos secuenciales y cronológico que empiezan con la detección y definición del problema y conducen ala implantación del programa que lo soluciona. que pone a disposición del programador para que este pueda comunicarse con los dispositivos hardware y software existentes. es cualquier forma de escritura (lenguaje) que posee determinadas instrucciones que combinadas y modificadas correctamente (dependiendo del resultado que se desee).

la salida de datos necesitan incorporar el número de legajo?. Un usuario puede requerir una base de datos para gestionar su empresa y por ejemplo quiere tener siempre a mano una página web que despliegue la nómina de empleados de su empresa que tengan más de 5 años de antigüedad y un sueldo menor a $ 2000 y que a su vez no acumulen más de 2 ausencias por año y no haber tenido sanciones disciplinarias. no se podrá avanzar. En general se utilizan diagramas de flujo o pseudocódigo. Esta solicitud planteada por el usuario podría parecer suficiente información para el programador. Estas consultas ayudan a poner en claro al usuario en su definición. El usuario en general no sabe expresar bien lo que necesita y requiere la amplia colaboración del programador. Lo importante es determinar la secuencia de sucesos que llevarán los datos de entrada a la salida deseada. esto implica un planteo natural y sin preocupación por la sintáxis.[FUNDAMENTOS DE PROGRAMACIÓN] 3. pero este podría consultar por ejemplo. 6. comprender que necesita el cliente. Planteo de la lógica La esencia del proceso de programación consiste en el planteo de la lógica del programa. 9 . Aquí se plantean los pasos a incluir y el órden de los mismos. para sortear un viaje entre ellos. esas personas deben ser excluidas igualmente?. Codificar el programa Traducir el programa a lenguaje máquina Prueba del programa Ejecución del programa Comprender el problema En la programación profesional se escriben programas para satisfacer las necesidades de otros. 5. 4. la lista debe incluir a los empleados de media jornada?. si las ausencias se debieron a enfermedades certificadas por el médico de la empresas. puede llegar a ser una tarea complicada y si esta etapa no esta claramente resuelta. todas las categorías están incluidas o independientemente de los ingresos hay dependencia de las mismas y un muy largo etc. No hay que olvidar que en el caso de una base de datos pasada la etapa de normalización un cambio puede implicar comenzar nuevamente el proyecto.

hay que usar la sintáxis correcta. que es el que la computadora entiende. a medida que la complejidad aumenta se requiere diferenciar los pasos y trabajar sobre cada uno de ellos.3 EL ALGORITMO La palabra algoritmo se deriva de la traducción al latín de la palabra árabe alkhowarizmi. Prueba del programa Un programa libre de errores de sintáxis no necesariamente lo está de errores lógicos. Aqui si. Ejecución del programa Terminadas y verificadas todas las etapas el programa puede ser utilizado por la empresa para obtener los resultados planeados. Uno puede utilizar un lenguaje porque existen los compiladores e interprete del mismo que cambia el lenguaje de alto nivel con el que se escribe el programa. 1. Todos estos pasos están sujetos a la complejidad del programa. Los errores de sintáxis o gramática son detectados por estos sistemas al momento de querer ejecutar el programa y en general hay un reporte del error. nombre de un matemático y astrónomo árabe que escribió un tratado sobre manipulación de números y ecuaciones en el siglo IX. a lenguaje máquina de bajo nivel. cuando es muy sencillo se puede escribir como si fuese una carta a alguien. El programa puede ejecutarse correctamente pero el resultado de la salida no ser el esperado. Traducción del programa a lenguaje máquina Lenguajes de programación hay muchos pero los computadores sólo entienden 0 y 1 lógicos.[FUNDAMENTOS DE PROGRAMACIÓN] Codificar el programa Una vez establecida la lógica del programa se podrá elegir el lenguaje más adecuado para llevar a cabo la codificación. Esta etapa implica poner a punto la sintáxis y la lógica. 10 .

[FUNDAMENTOS DE PROGRAMACIÓN] Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir. Lenguajes Algorítmicos Un Lenguaje algorítmico es una serie de símbolos y reglas que se utilizan para describir de manera explícita un proceso. Tipos de Lenguajes Algorítmicos • Gráficos: Es la representación gráfica de las operaciones que realiza un algoritmo (diagrama de flujo). INICIO Edad: Entero ESCRIBA “cual es tu edad?” 11 . ¿TIPOS DE ALGORITMOS…? Existen dos tipos y son llamados así por su naturaleza: • • Cualitativos: Son aquellos en los que se describen los pasos utilizando palabras. para dar solución a un problema específico. • No Gráficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo). Cuantitativos: Son aquellos en los que se utilizan cálculos numéricos para definir los pasos del proceso.

[FUNDAMENTOS DE PROGRAMACIÓN] Lea Edad SI Edad >=18 entonces ESCRIBA “Eres mayor de Edad” FINSI ESCRIBA “fin del algoritmo” FIN UNIDAD II.1 PROBLEMAS Y ALGORITMOS 12 . ALGORITMOS. DIAGRAMAS DE FLUJO Y PROGRAMAS 2.

Dados un estado inicial y una entrada. se emplean algoritmos frecuentemente para resolver problemas. ciencias de la computación y disciplinas relacionadas. • Definición formal En general. una versión modificada de la criba de Eratóstenes que nunca termine de calcular números primos no deja de ser un algoritmo. es decir. o el método de Gauss para resolver un sistema lineal de ecuaciones. En matemáticas. no existe ningún consenso definitivo en cuanto a la definición formal de algoritmo. un algoritmo (del griego y latín.1 En la vida cotidiana. Los algoritmos son el objeto de estudio de la algoritmia. Algunos ejemplos en matemática son el algoritmo de la división para calcular el cociente de dos números. Por ejemplo. Muchos autores los señalan como listas de instrucciones para resolver un problema abstracto. que un número finito de pasos convierten los datos de un problema (entrada) en una solución (salida). que muestran algoritmos para usar un aparato. siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solución.1 2 3 4 5 6 Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Algunos ejemplos son los manuales de usuario. dixit algorithmus y éste a su vez del matemático persa Al Juarismi1 ) es un conjunto preescrito de instrucciones o reglas bien definidas. ordenadas y finitas que permite realizar una actividad mediante pasos sucesivos que no generen dudas a quien deba realizar dicha 2 actividad. el algoritmo de Euclides para obtener el máximo común divisor de dos enteros positivos.7 13 .[FUNDAMENTOS DE PROGRAMACIÓN] Algoritmo Los diagramas de flujo sirven para representar algoritmos de manera gráfica. o las instrucciones que recibe un trabajador por parte de su patrón.

estos modelos están sujetos a un tipo particular de datos como son números. con números de precisión infinita. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementación (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo. En resumen. símbolos o gráficas mientras que.10 En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda función calculable se puede programar en una máquina de Turing (o equivalentemente. Estado abstracto. es decir. La transición de un estado al siguiente queda completamente determinada por una descripción fija y finita.8 9 Sin embargo. Esta amplia definición abarca tanto a algoritmos prácticos como aquellos que solo funcionan en teoría. por ejemplo el método de Newton y la eliminación de Gauss-Jordan funcionan. y además tiene un límite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de términos del estado actual. al menos en principio. Un algoritmo funciona en tiempo discretizado –paso a paso–. los algoritmos funcionan sobre una vasta cantidad de estructuras de datos. en un lenguaje de programación 10 suficientemente general): 14 . la parte común en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:7 Tiempo secuencial. definiendo así una secuencia de estados "computacionales" por cada entrada válida (la entrada son los datos que se le suministran al algoritmo antes de comenzar). en general. sin embargo no es posible programar la precisión infinita en una computadora.3 1 En general. y no por ello dejan de ser algoritmos. un algoritmo es cualquier cosa que funcione paso a paso. donde cada paso se pueda describir sin ambigüedad y sin hacer referencia a una computadora en particular.[FUNDAMENTOS DE PROGRAMACIÓN] A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemáticos como máquinas de Turing entre otros. Exploración acotada.

pseudocódigo. El usar pseudocódigo y diagramas de flujo evita muchas ambigüedades del lenguaje natural. se selecciona un modelo matemático y se explica el algoritmo de manera verbal. Se muestra el algoritmo expresado en un lenguaje de programación específico o algún objeto capaz de llevar a cabo instrucciones. incluyendo al lenguaje natural. 3. se mantienen independientes de un lenguaje de programación específico. También es posible incluir un teorema que demuestre que el algoritmo es correcto. Descripción de alto nivel. no obstante.[FUNDAMENTOS DE PROGRAMACIÓN] Aritmetizabilidad. Se establece el problema. [editar] Medios de expresión de un algoritmo Los algoritmos pueden ser expresados de muchas maneras. Diagrama de flujo 15 . diagramas de flujo y lenguajes de programación entre otros. Dichas expresiones son formas más estructuradas para representar algoritmos. Se usa pseudocódigo para describir la secuencia de pasos que encuentran la solución. La descripción de un algoritmo usualmente se hace en tres niveles: 1. Implementación. Descripción formal. 2. un análisis de complejidad o ambos. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. Solamente operaciones innegablemente calculables están disponibles en el paso inicial. posiblemente con ilustraciones y omitiendo detalles.

ya que abarcan mucho espacio y su construcción es laboriosa.[FUNDAMENTOS DE PROGRAMACIÓN] Diagrama de flujo que expresa un algoritmo para calcular la raíz cuadrada de un número x Artículo principal: Diagrama de flujo Los diagramas de flujo son descripciones gráficas de algoritmos. aunque no está regido por ningún estándar. ciclos y condicionales. descripción de un lenguaje y descripción de procesos a personas ajenas a la computación. el pseudocódigo. y es a la vez suficientemente estructurado 16 . como los |diagramas de flujo. y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementación. en general. y como producto intermedio durante el desarrollo de un algoritmo. Es utilizado para describir algoritmos en libros y publicaciones científicas. y es que los algoritmos descritos en pseudocódigo requieren menos espacio para representar instrucciones complejas. Sin embargo. Los diagramas de flujo son usados para representar algoritmos pequeños. usan símbolos conectados con flechas para indicar la secuencia de instrucciones y están regidos por ISO. Por su facilidad de lectura son usados como introducción a los algoritmos. Programadores diferentes suelen utilizar convenciones distintas. aunque presentan una ventaja importante sobre estos. El pseudocódigo está pensado para facilitar a las personas el entendimiento de un algoritmo. que pueden estar basadas en la sintaxis de lenguajes de programación concretos. Pseudocódigo Artículo principal: Pseudocódigo El pseudocódigo (falso lenguaje. es comprensible sin necesidad de conocer o utilizar un entorno de programación específico. como asignaciones. el prefijo pseudo significa falso) es una descripción de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintácticas propias de lenguajes de programación.

los algoritmos pueden ser implementados en otros medios. Implementación Muchos algoritmos son ideados para implementarse en un programa. un circuito eléctrico o un aparato mecánico y eléctrico. 2. Sin embargo. máquina de registro y funciones μ-recursivas. Busque fuentes más precisas para tener mayor comprensión del tema. Mediante un procedimiento de entrada de datos (por ejemplo: 'read'). La declaración de una variable puede realizarse comenzando con var. Variables Son elementos que toman valores específicos de un tipo de datos concreto. Sistemas formales La teoría de autómatas y la teoría de funciones recursivas proveen modelos matemáticos que formalizan el concepto de algoritmo. Así el pseudodocódigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programación. existen dos maneras de otorgar valores iniciales a variables: 1. careciendo de expresiones coloquiales o ambigüedad. Principalmente. Mediante una sentencia de asignación. 17 . Algunos algoritmos inclusive se diseñan especialmente para implementarse usando lápiz y papel. como una red neuronal. Estos modelos son tan precisos como un lenguaje máquina. sin embargo se mantienen independientes de cualquier computadora y de cualquier implementación. el algoritmo de Euclides. la criba de Eratóstenes y muchas formas de resolver la raíz cuadrada son sólo algunos ejemplos. El algoritmo de multiplicación tradicional.[FUNDAMENTOS DE PROGRAMACIÓN] para que su implementación se pueda hacer directamente a partir de él. Los modelos más comunes son la máquina de Turing.

i:=1.. La asignación de esto consiste. La asignación se puede clasificar de la siguiente forma: 1. h. read(n). como obtener la área de un triángulo: Inicio . 18 . &b). en el paso de valores o resultados a una zona de la memoria.. printf("Diga la base").[FUNDAMENTOS DE PROGRAMACIÓN] Ejemplo: . Acumulador: Consiste en usarla como un sumador en un proceso (a ← a + b) 4.. Las operaciones se suceden de tal modo que la salida de una es la entrada de la siguiente y así sucesivamente hasta el fin del proceso. &h). Un ejemplo de estructura secuencial.. scanf("%f". scanf("%f". Estructuras secuenciales La estructura secuencial es aquella en la que una acción sigue a otra en secuencia. Contador: Consiste en usarla como un verificador del número de veces que se realiza un proceso (a ← a + 1) 3. Dicha zona será reconocida con el nombre de la variable que recibe el valor. Simples: Consiste en pasar un valor constante a una variable (a ← 15) 2. float b.. printf("Diga la altura"). a.. De trabajo: Donde puede recibir el resultado de una operación matemática que involucre muchas variables (a ← c + b*2/4). . while i < n do begin (* cuerpo del bucle *) i := i + 1 end.

a) . Un algoritmo se puede concebir como una función que transforma los datos de un problema (entrada) en los datos de una solución (salida). Análisis de algoritmos Artículo principal: Análisis de algoritmos 19 . Por esta razón se considera que los algoritmos son funciones parciales. es decir. de símbolos cualesquiera. cuando entran a un bucle infinito. no necesariamente definidas en todo su dominio de definición. En ocasiones los algoritmos son susceptibles de nunca terminar. y podemos decir que la función queda indefinida para ese valor de entrada.[FUNDAMENTOS DE PROGRAMACIÓN] a = (b*h)/2. entonces los algoritmos son en esencia funciones de los números naturales en los números naturales que sí se pueden calcular. y en general. Fin Algoritmos como funciones Artículo principal: Teoría de la computabilidad Esquemática de un algoritmo solucionando un problema de ciclo hamiltoniano. No todas las funciones entre secuencias datos son computables. Es decir que todo algoritmo calcula una función donde cada número natural es la codificación de un problema o de una solución. sin importar la cantidad de memoria que ocupe o el tiempo que se tarde. se dice que dicha función es computable.1 9 11 Como cada secuencia de bits representa a un número natural (véase Sistema binario). Cuando una función puede ser calculada por medios algorítmicos. Más aún. printf("El área del triángulo es %f". el algoritmo nunca devuelve ningún valor de salida.. por ejemplo. Cuando esto ocurre.. El problema de la parada es un ejemplo. los datos se pueden representar a su vez como secuencias de bits.

El análisis y estudio de los algoritmos es una disciplina de las ciencias de la computación y. Así. mientras evalúa la siguiente secuencia podrán leerse dos tipos de señales: una señal positiva (en el caso de que el número de ceros sea mayor que el de unos) y una negativa en caso contrario. Si se implementa correctamente. El análisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolución del gasto de tiempo y memoria en función del tamaño de los valores de entrada. el valor devuelto por el algoritmo será válido. un algoritmo que verifica que hay más ceros que unos en una secuencia binaria infinita debe ejecutarse siempre para que pueda devolver un valor útil. Ejemplo de algoritmo 20 . en ese sentido. devolverá una mezcla de señales positivas y negativas. comparte las características de las disciplinas matemáticas. suponiendo el caso en el que existiera algún dispositivo físico que fuera capaz de funcionar eternamente. el análisis de los algoritmos se centra en los principios básicos del algoritmo. mientras que otros consideran procedimientos que podrían ejecutarse eternamente sin pararse. cuyos códigos pueden estar en el idioma del programador. la salida de este algoritmo se define como la devolución de valores exclusivamente positivos si hay más ceros que unos en la secuencia y. sino que el éxito estaría definido en función de las secuencias de salidas dadas durante un periodo de vida de la ejecución del algoritmo. su estudio es completamente abstracto sin usar ningún tipo de lenguaje de programación ni cualquier otra implementación. De esta forma. Finalmente. En este último caso.[FUNDAMENTOS DE PROGRAMACIÓN] Como medida de la eficiencia de un algoritmo. en cualquier otro caso. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocódigo o utilizar un lenguaje muy simple tal como Lexico. se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. por eso. en la mayoría de los casos. la finalización con éxito del algoritmo no se podría definir como la terminación de éste con una salida satisfactoria. Por ejemplo. no en los de la implementación particular. hasta que evalúe el siguiente dígito binario. Algunos escritores restringen la definición de algoritmo a procedimientos que deben acabar en algún momento.

Para un ejemplo más complejo véase Algoritmo de Euclides. el máximo número que se ha encontrado es el máximo de todo el conjunto. se recorre el conjunto y se compara cada valor con el valor del máximo número encontrado hasta ese momento. Para encontrar el elemento máximo. Es decir. se asume que el primer elemento (c0) es el máximo.[FUNDAMENTOS DE PROGRAMACIÓN] El problema consiste en encontrar el máximo de un conjunto de números. dado un conjunto se pide encontrar m tal que para todo elemento x que pertenece al conjunto C. se tiene el problema de encontrar el número más grande. luego. se asigna su valor al máximo. Cuando se termina de recorrer la lista. En el caso que un elemento sea mayor que el máximo. Sin pérdida de generalidad se puede asumir que dicho conjunto no es vacío y que sus elementos están numerados como . [Descripción de alto nivel Dado un conjunto finito C de números. Descripción formal El algoritmo puede ser escrito de una manera más formal en el siguiente pseudocódigo: Algoritmo Encontrar el máximo de un conjunto función max(C) //C es un conjunto no vacío de números// n ← | C | // | C | es el número de elementos de C// m ← c0 para i ← 1 hasta n hacer si ci > m entonces m ← ci devolver m Sobre la notación: 21 .

i < n. Implementación En lenguaje C++: int max(int c[]. encontrar un determinado valor en la estructura para realizar una operación con este valor. 22 . m = c[0].1 ESTRUCTURA DE DATOS En programación. "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso. el máximo de C). Baja. Una estructura de datos define la organización e interrelación de éstos y un conjunto de operaciones que se pueden realizar sobre ellos. return m. UNIDAD III. en forma secuencial o binario (siempre y cuando los datos estén ordenados). adicionar un nuevo valor a la estructura. borrar un valor de la estructura. una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulación.[FUNDAMENTOS DE PROGRAMACIÓN] • • "←" representa una asignación: m ← x significa que la variable m toma el valor de x. Las operaciones básicas son: • • • Alta. ELEMENTOS PARA SOLUCIONAR PROBLESMAS EN PSEUDOCÓDICO 3. i++) if (c[i] > m) m = c[i]. Un dato elemental es la mínima información que se tiene en un sistema. int n) { int i. Búsqueda. for (i = 1.

Cada estructura ofrece ventajas y desventajas en relación a la simplicidad y eficiencia para la realización de cada operación. A continuación estudiaremos las características básicas de cada una. Donde: Var Es la palabra reservada que indica que se definirán variables. Apareo. la elección de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operación sobre los datos. 3. . NOM_VARIABLE_2: tipo de dato.[FUNDAMENTOS DE PROGRAMACIÓN] Otras operaciones que se pueden realizar son: • • Ordenamiento. de los elementos pertenecientes a la estructura. NOM_VARIABLE_1. Definir variables (var) Esta acción permite definir las variables necesarias mediante el siguiente formato: var NOM_VARIABLE_1: tipo de dato. Son los nombres de variables. . NOM_VARIABLE_N: tipo de dato. De esta forma. establecidos. OPERACIONES PRIMITIVAS ELEMENTALES Las operaciones primitivas elementales son las acciones básicas que la computadora puede ejecutar. 1. dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas. NOM_VARIABLE_N 23 . .2. de acuerdo a los lineamientos NOM_VARIABLE_2.

un ratón (mouse) o desde cualquier otro dispositivo de entrada. Real.. NOM_VARIABLE_2... El formato para leer datos es: read(NOM_VARIABLE_1. NOM_VARIABLE_1. El dispositivo estándar de entrada es el teclado. Donde: read o readln Indican que se hará una lectura de datos. readln) Permite introducir los datos a la computadora. a saber: Integer. HRSTRAB: integer. NOM_VARIABLE_N). 2. Tendremos que hacer lo siguiente: Var NOMBRE: string[30]. Lectura de datos (read. . La introducción de datos puede hacerse desde un teclado. SUELDO: real. NOM_VARIABLE_2. un archivo en un disco.[FUNDAMENTOS DE PROGRAMACIÓN] Tipo de dato ... Son los nombres de variables en las que se leerán los datos. Indica el tipo de dato que tendrá la variable. Indica la finalización de cada definición. etc. CUOTAHR: real. NOM_VARIABLE_N 24 . o read(NOM_VARIABLE_1. String.. Ejemplo: -------------------------------------------------------------------------Vamos a suponer una situación del pago de sueldo por horas trabajadas. NOM_VARIABLE_N). NOM_VARIABLE_2. .

. . O también se puede con: read(NOMBRE. la impresora. writeln) Mediante la escritura damos salida a los datos de la computadora hacia un medio periférico como por ejemplo el monitor (pantalla de video CRT). CUOTAHR). HRSTRAB. el cursor se queda en el lugar en donde está cuando se termine de hacer la lectura. Escritura de datos (write.. Formato: write(ELEMENTO_1. las horas trabajadas y la cuota por hora: read(NOMBRE.. La salida estándar es el video. o writeln(ELEMENTO_1.. ELEMENTO_2. ELEMENTO_2. . Ejemplo: -------------------------------------------------------------------------Para la situación de pago de sueldo que venimos siguiendo. Nota: Colocarle ln al read significa que el cursor saltará al inicio del siguiente renglón. disco u otro. ELEMENTO_N). HRSTRAB. Esta instrucción espera a que se tecleen los datos correspondientes. ELEMENTO_N). CUOTAHR). Donde: 25 . los cuales se almacenarán en las variables especificadas. en caso de no tenerlo.. 3. se deben leer el nombre del empleado. Indica el fin de la instrucción..[FUNDAMENTOS DE PROGRAMACIÓN] .

ln provoca un salto al inicio del siguiente renglón después de imprimir.’ ‘. Ejemplo: -------------------------------------------------------------------------Si X tiene el valor 4 26 . de la siguiente manera: writeln(ELEMENTO_1. luego se imprime el contenido de la variable NOMBRE. Son los elementos que se imprimirán. Se indica que se imprimen el nombre y el sueldo. ELEMENTO_1. con la instrucción: write(NOMBRE. se coloca el nombre de las mismas y se imprime su contenido. donde ELEMENTO_N . Cuando se escriben varios elementos en un write. se deben colocar explícitamente entre apóstrofos.[FUNDAMENTOS DE PROGRAMACIÓN] write o writeln Identifica la acción de escritura. enseguida se imprime el letrero SUELDO y por último se imprime el contenido de la variable SUELDO. o bien. Turbo Pascal no deja espacios entre los mismos. por ejemplo: writeln(‘NOMBRE:’.’ ‘. que es la información requerida en este problema. estos pueden ser valores ELEMENTO_2 constantes enteros. Nota: En caso de acompañar los datos con un letrero. SUELDO). reales o carácter. Indica el fin de la instrucción. ELEMENTO_2. ELEMENTO_3). Se imprime el letrero NOMBRE. Ejemplo: -------------------------------------------------------------------------En el ejemplo que venimos siguiendo se debe imprimir como resultado el nombre del empleado y su sueldo. se hace poniéndolo entre apóstrofos.SUELDO). variables. si se desean espacios entre los elementos.’SUELDO:’.NOMBRE.

27 . Z:3).[FUNDAMENTOS DE PROGRAMACIÓN] Y tiene el valor 5 Z tiene el valor 6 Y se imprime write(X.’ ‘. Formato: Writeln(ELEMENTO_1:longitud. Y y Z.Y. sería otra forma de imprimir con espacios los valores de X.’ ‘. Y:3. porque imprime X que tiene el valor de 5. Ejemplo: -------------------------------------------------------------------------write(X:3. pero si imprimimos write(X. entonces deja los restantes dos espacios en blanco. Z).Z). con espacios. y como 5 ocupa sólo un espacio. Longitud del campo de impresión Cuando se imprime un elemento. en 3 espacios. Donde: Longitud es un número entero que indica el número de caracteres que se utilizarán al imprimirse el ELEMENTO. es decir. se imprimirá 4 5 6. se imprimirá 456. se puede indicar la longitud en número de caracteres que utilizará al imprimirse. ELEMENTO_2: longitud). Y.

[FUNDAMENTOS DE PROGRAMACIÓN] Impresión de variables de tipo real En el caso de las variables de tipo real.254500000E+02 imprimirá 1. writeln(X:8:4). Donde: Decimales es un número entero que indica el número de decimales que deseamos se imprimirán. en caso de no indicares.4500 3. imprimirá 1.45 imprimirá 125.45 imprimirá 125. se imprime en formato exponencial o científico. writeln(X:6:2). writeln(X:8).25E+02 imprimirá 125.3 ESCRITURA DE ALGORITMOS/PROGRAMAS 28 . Turbo Pascal permite definir cuántos decimales se imprimirán de la forma siguiente: Writeln(ELEMENTO_1:longitud:decimales). Ejemplo: -------------------------------------------------------------------------Si X tiene el valor 125.45 writeln(X). writeln(X:8:2).

y el cuerpo contiene 2 partes. j: entero primo: boolean Inicio Cont 0 Desde i= primero hasta limite primo verdadero j2 mientras (i>j) y (primo =verdadero) Si i mod j = 0 29 . la cabecera y el cuerpo. ¿Cuáles y cuántos son los números primos comprendidos entre 1 y 1000? Algoritmo n_primos Const Primero=1 Limite=1000 Var cont.[FUNDAMENTOS DE PROGRAMACIÓN] En pseudocódigo el programa tiene dos partes. y la segunda es la zona de las instrucciones del programa. En la zona de instrucciones para que quede más legible hay que usar la identación y si es necesario hay que usar comentarios entre llaves. EJERCICIOS: 1. La cabecera contiene el nombre del algoritmo. i. La primera es la zona de declaraciones de var y const.

max: entero Inicio Max 0 Escribir “Introduzca nº positivos y para acabar introduzca uno negativo” Leer num Mientras num >=0 Si num >max 30 . sabiendo que metemos números hasta que introduzcamos uno negativo.[FUNDAMENTOS DE PROGRAMACIÓN] Entonces primo falso Sino j j + 1 Fin si Fin mientras Si primo = verdadero Entonces escribir i” “ Cont cont + 1 Fin si Fin desde Escribir “Entre “primero” y “limite” hay “cont” nº primos” Fin 2. Algoritmo maximo Var Num. El negativo no cuenta. Calcular el máximo de números positivos introducidos por teclado.

Algoritmo multiplos Var i: entero Inicio Desde i=1 hasta n Si i mod 5 =0 Entonces escribir i Fin si Fin desde Fin UNIDAD IV. Determinar cuales son los múltiplos de 5 comprendidos entre 1 y N. OTROS TIPOS DE DATOS 4.[FUNDAMENTOS DE PROGRAMACIÓN] Entonces max num Fin si Leer num Fin mientras Escribir “El mayor número es” max Fin 3.1 TIPOS DE DATOS DEFINIDOS POR EL USUARIO 31 .

coches o cualquier cosa que se nos ocurra. Por ejemplo.647. un programador puede crear un nuevo tipo de dato llamado "Persona" que especifica que el dato interpretado como Persona incluirá un nombre y una fecha de nacimiento.1 Casi todos los lenguajes de programación explícitamente incluyen la notación del tipo de datos. se representan como tres bytes denotando la cantidad de rojo. Por ejemplo. más específicamente de los lenguajes de programación. pero no la multiplicación. fechas. así como las operaciones que se pueden realizar con los enteros. las operaciones permitidas incluyen la adición y sustracción. Tipos de datos comunes son: enteros. números de coma flotante (decimales). normalmente combinando múltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. interpretación y la estructura de los valores u objetos almacenados en la memoria del ordenador.[FUNDAMENTOS DE PROGRAMACIÓN] En los lenguajes de programación y en otros programas utilitarios tales como una planilla de cálculos. el tipo "int" representa un conjunto de enteros de 32 bits cuyo rango va desde el -2. aunque lenguajes diferentes pueden usar terminología diferente. un tipo de datos define un conjunto de valores y las operaciones sobre estos valores.147. resta y multiplicación. aunque también se encuentra relacionado con nociones similares de las matemáticas y la lógica. 32 . en Java. y una cadena de caracteres representando el nombre del color. Esto incluye imponer restricciones en los datos. En un sentido amplio. Los colores. verde y azul. Éste es un concepto propio de la informática. describiendo la representación. La mayor parte de los lenguajes de programación permiten al programador definir tipos de datos adicionales. como qué valores pueden tomar y qué operaciones se pueden realizar. horas.147. por otra parte.483. un tipo de dato es un atributo de una parte de los datos que indica al ordenador (y/o al programador) algo sobre la clase de datos sobre los que se va a procesar. cadenas alfanuméricas.648 al 2. Un tipo de dato puede ser también visto como una limitación impuesta en la interpretación de los datos en un sistema de tipificación. El sistema de tipificación usa información de los tipos de datos para comprobar la verificación de los programas que acceden o manipulan los datos. colores.483. como la suma.

La más pequeña unidad direccionable de datos es un grupo de bits llamado un byte (normalmente un octeto. La unidad procesada por las instrucciones del código máquina se le llama una palabra (en 2006. pide la fusión de historiales en WP:TAB/F. también se puede considerar como el rango de valores que puede tomar una variable durante la ejecución del programa.[FUNDAMENTOS DE PROGRAMACIÓN] • Tipos de datos máquina Todos los datos en los ordenadores basados en la electrónica digital se representan como bits (valores 0 y 1) en el nivel más bajo. donde la unidad mínima de almacenamiento es el dato. Por medio del complemento a dos. Existe un específico conjunto de instrucciones aritméticas que usa una diferente interpretación de los bits de una palabra como número en coma flotante. DATOS PRIMITIVOS: • • • CARACTER NUMERICO LOGICOS(BOOLEANOS) CARÁCTER 33 . [Tipos de datos primitivos Se ha sugerido que este artículo o sección sea fusionado con Tipo de dato#Tipos simples (ver la discusión al respecto). La mayor parte de las instrucciones interpretan la palabra como un número binario. normalmente 32 o 64 bits). Una vez que hayas realizado la fusión de artículos. la mayor parte del tiempo. como por ejemplo una palabra de 32 bits puede representar valores enteros sin signo desde el 0 al 232 − 1 o valores enteros con signo desde − 231 al 231 − 1. el lenguaje máquina y la propia máquina no necesitan distinguir entre tipos de datos con o sin signo. que son 8 bits). Los tipos de datos hacen referencia al tipo de información que se trabaja.

Tipo de dato Rango Tamaño de bits char 0 a 65536 16 bits NUMERICOS Este tipo de dato puede ser real o entero. Enteros: son los valores que no tienen punto decimal. tipo de dato: float= 32 bits tipo de dato: double= 64 bits BOOLEANOS Este tipo de dato se emplea para valores lógicos. letras (a-z) y símbolo ($. pueden ser positivos o negativos y el cero.[FUNDAMENTOS DE PROGRAMACIÓN] El tipo de dato carácter es un digito individual el cual se puede representar como numéricos (0 al 9). tipo tipo tipo tipo de de de de dato: dato: dato: dato: byte short int long tamaño= 8 bits tamaño= 16 bits tamaño= 32 bits tamaño= 64 bits Reales: estos caracteres almacenan numeros muy grandes que poseen parte entera y parte decimal. tipo de dato: boolean Tipos simples • Rango= true – false Tipo Ordinal 34 . dependiendo del tipo de dato que se vaya a utilizar. NOTA: En lenguaje java la codificación Unicode permite trabajar con todos los caracteres de distintos idiomas._). los podemos definir como datos comparativos dicha comparación devuelve resultados lógicos.

Se genera código compacto y eficiente. El secreto para C esta en el uso de apuntadores. Si usted no puede usar los apuntadores apropiadamente entonces esta perdiendo la potencia y la flexibilidad que C ofrece básicamente.[FUNDAMENTOS DE PROGRAMACIÓN] • Tipos predefinidos  Tipo de dato entero  Tipo de dato carácter  Tipo de dato lógico o Tipos definidos por el usuario  Tipo de dato enumerado  Tipo de dato subrango Tipo No Ordinal o Tipo de dato real o Tipo de dato cronológico o Tipo de dato puntero o 4. Es una herramienta muy poderosa. Es una herramienta muy poderosa.2 APUNTADORES (POINTER) Los apuntadores son una parte fundamental de C. ¿Porqué? • • • Es la única forma de expresar algunos cálculos. C usa apuntadores explícitamente con: • • • Arreglos. Se genera código compacto y eficiente. C usa apuntadores explícitamente con: • • • Es la única forma de expresar algunos cálculos. C usa los apuntadores en forma extensiva. Estructuras y Funciones Definición de un apuntador 35 .

Nota: un apuntador es una variable. int x = 1. Se pueden tener apuntadores a cualquier tipo de variable. Con el objetivo de entender el comportamiento del código supongamos que la variable x esta en la localidad de la memoria 100. El operador de indirección o dereferencia * devuelve el ``contenido de un objeto apuntado por un apuntador''. Para tener una mejor idea. 36 . no se puede asignar la dirección de un short int a un long int. y = 2. } Cuando se compile el código se mostrará el siguiente mensaje: warning: assignment makes integer from pointer without a cast. int *ap. Por ejemplo. y en 200 y ap en 1000.[FUNDAMENTOS DE PROGRAMACIÓN] Un apuntador es una variable que contiene la dirección en memoria de otra variable. x = ap. y = *ap. ap = &x. *ap = 3. Se debe asociar a cada apuntador un tipo particular. sus valores necesitan ser guardados en algún lado. y = 2. por lo tanto. El operador unario o monádico & devuelve la dirección de memoria de una variable. considerar el siguiente código: main() { int x = 1. Para declarar un apuntador para una variable entera hacer: int *apuntador.

y obtiene el valor de x -. y = *ap. Por lo tanto. El valor de ap en ese momento es 100. ap es declarado como un apuntador a entero y se le asigna la dirección de x (&x). Por lo que: main() 37 . 100 200 1000 x 3 y 1 ap 100 Finalmente se asigna un valor al contenido de un apuntador (*ap). 100 200 x1 y1 1000 ap 100 Después y obtiene el contenido de ap. Por lo que ap se carga con el valor 100. 100 200 x1 y2 1000 ap 100 Las variables x e y son declaradas e inicializadas con 1 y 2 respectivamente.la localidad de x.[FUNDAMENTOS DE PROGRAMACIÓN] int *ap. ap = &x. Se debe inicializar el apuntador antes de usarlo. Así que es perfectamente legal (aunque el compilador genera un aviso de cuidado) asigna el valor actual de ap a la variable x. x = ap.el cual es 1. En el ejemplo ap apunta a la localidad de memoria 100 -. Importante: Cuando un apuntador es declarado apunta a algún lado. 100 200 1000 x 100 y 1 ap 100 Como se ha visto C no es muy estricto en la asignación de valores de diferente tipo (apuntador a entero). *ap = 3.

El uso correcto será: main() { int *ap. que cuando se incrementa un apuntador. } NOTA: Un apuntador a cualquier tipo de variables es una dirección en memoria -. se 38 . flq = flp. La razón por la cual se asocia un apuntador a un tipo de dato. (*flp)++. } Con los apuntadores se puede realizar también aritmética entera. pero un apuntador NO es un entero. *flq. ++*flp.la cual es una dirección entera. ap = &x.[FUNDAMENTOS DE PROGRAMACIÓN] { int *ap. *ap = 100. por ejemplo: main() { float *flp. *ap = 100. es por que se debe conocer en cuantos bytes esta guardado el dato. } puede generar un error en tiempo de ejecución o presentar un comportamiento errático. int x. De tal forma. *flp = *flp + 10.

en donde el bloque esta en función del tamaño del dato. Con esto se provoca que la computadora pase la dirección del argumento a la función.[FUNDAMENTOS DE PROGRAMACIÓN] incrementa el apuntador por un ``bloque'' de memoria.y). 39 . se agrega un byte a la dirección y para un apuntador a entero o a flotante se agregan 4 bytes. swap(&x. printf("x=%d\ty=%d\n". y = 20. } void swap(int *px. Apuntadores y Funciones Cuando C pasa argumentos a funciones.x.x. Hay muchos casos que se quiere alterar el argumento pasado a la función y recibir el nuevo valor una vez que la función ha terminado. si el parámetro es modificado dentro de la función. int *py) { int temp. De esta forma si a un apuntador a flotante se le suman 2. printf("x=%d\ty=%d\n". en C se puede simular pasando un puntero al argumento.y). una vez que termina la función el valor pasado de la variable permanece inalterado. &y). Para entender mejor lo anterior consideremos la función swap() que intercambia el valor de dos argumentos enteros: void swap(int *px. Por lo tanto para un apuntador a un char. y. x = 10. el apuntador entonces se mueve dos posiciones float que equivalen a 8 bytes. Para hacer lo anterior se debe usar una llamada por referencia. los pasa por valor. int *py). main() { int x. es decir.

Considerar lo siguiente: int a[10]. Por ejemplo se puede teclear solamente: ap = a. x = *ap.[FUNDAMENTOS DE PROGRAMACIÓN] temp = *px. Y como se ve en el ejemplo. En esencia. el direccionamiento de apuntadores se puede expresar como: a[i] que es equivalente a *(ap + i) Sin embargo los apuntadores y los arreglos son diferentes: 40 . un nombre de un arreglo es un índice a la dirección de comienzo del arreglo. &a[i] es equivalente con a+i. esto es. por lo que se puede ir fácilmente más alla del arreglo en memoria y sobreescribir otras cosas. C sin embargo es mucho más sútil en su relación entre arreglos y apuntadores. /* guarda el valor de la direccion x */ *px = *py. caso) */ /* ap apunta a la direccion de a[0] */ /* A x se le asigna el contenido de ap (a[0] en este *(ap + 1) = 100. /* pone x en y */ } Apuntadores y arreglos Existe una relación estrecha entre los punteros y los arreglos. Se debe tener cuidado ya que C no hace una revisión de los límites del arreglo. x. En C. el nombre de un arreglo es un puntero al arreglo. ap = &a[0]. /* Se asigna al segundo elemento de 'a' el valor 100 usando ap*/ Como se puede observar en el ejemplo la sentencia a[t] es idéntica a ap+t. y también *(a + i) en vez de a[i]. en vez de ap = &a[0]. /* pone y en x */ *py = temp. int *ap.

[FUNDAMENTOS DE PROGRAMACIÓN] • • Un apuntador es una variable. Hacer a = ap y a++ ES ILEGAL. char *t) { while ( (*s++ = *t++) != '\0' ). 41 . void strcpy(char *s. ya que char s[] es igual que char *s. } Se muestra enseguida una función para copiar una cadena en otra.s. while ( *p != '\0' ) p++. Por lo tanto: strlen(s) es equivalente a strlen(&s[0]) Esta es la razón por la cual se declara la función como: int strlen(char s[]). Cuando un arreglo es pasado a una función lo que en realidad se le esta pasando es la localidad de su elemento inicial en memoria. Con lo comentado se puede entender como los arreglos son pasados a las funciones. y una declaración equivalente es int strlen(char *s). La función strlen() es una función de la biblioteca estándar que regresa la longitud de una cadena. Se muestra enseguida la versión de esta función que podría escribirse: int strlen(char *s) { char *p = s. Este parte es muy importante. return p . Al igual que en el ejercicio anterior existe en la biblioteca estándar una función que hace lo mismo. Un arreglo NO ES una variable. asegúrese haberla entendido. Se puede hacer ap = a y ap+ +.

Guardar los apuntadores en un arreglo diferente donde cada apuntador apunta al primer caracter de cada línea. A continuación se muestra un ejemplo de su uso: ordenar las líneas de un texto de diferente longitud. 4. ¿Cómo se puede hacer lo anterior? 1. Arreglos de apuntadores En C se pueden tener arreglos de apuntadores ya que los apuntadores son variables. 2. Figura 8. Ver figura 8. Nota: Se emplea el uso del caracter nulo con la sentencia while para encontrar el fin de la cadena.[FUNDAMENTOS DE PROGRAMACIÓN] } En los dos últimos ejemplos se emplean apuntadores y asignación por valor. Guardar todas las líneas en un arreglo de tipo char grande.intercambiar (swap) los apuntadores (no el texto). Los arreglos de apuntadores son una representación de datos que manejan de una forma eficiente y conveniente líneas de texto de longitud variable. Comparar dos líneas usando la función de la biblioteca estándar strcmp(). Observando que \n marca el fin de cada línea. 42 . Si dos líneas están desacomodadas -.1: Arreglos de apuntadores (Ejemplo de ordenamiento de cadenas).1. 3.

Por lo tanto. La razón de lo anterior.. y por ejemplo si hacemos la siguiente referencia a+2..el número de renglones es irrelevante. alta sobrecarga por el movimiento de líneas.[FUNDAMENTOS DE PROGRAMACIÓN] Con lo anterior se elimina: • • el manejo complicado del almacenamiento... } En el último ejemplo se requieren los parénteis (*a) ya que [ ] tiene una precedencia más alta que *. Arreglos multidimensionales y apuntadores Un arreglo multidimensional puede ser visto en varias formas en C. Considerando que una función deba recibir int a[5][35]. por ejemplo: Un arreglo de dos dimensiones es un arreglo de una dimensión. declara un apuntador a un arreglo de 35 enteros. } o aún f( int (*a)[35] ) { . C requiere conocer cuantas son las columnas para que pueda brincar de renglón en renglón en la memoria. la notación a[n][m] nos indica que los elementos del arreglo están guardados renglón por renglón. es nuevamente los apuntadores.. nos estaremos 43 .. Por lo tanto: int (*a)[35]. Cuando se pasa una arreglo bidimensional a una función se debe especificar el número de columnas -.. se puede declarar el argumento de la función como: f( int a[][35] ) { . donde cada uno de los elementos es en sí mismo un arreglo..

}. Se puede indicar que se hace un manejo más eficiente del espacio haciendo uso de un arreglo de apuntadores y usando un arreglo bidimensional. 44 .2. Considerar: char *nomb[] = { "No mes". Ahora veamos la diferencia (sutil) entre apuntadores y arreglos. "Mar". El manejo de cadenas es una aplicación común de esto.. . }. NOTA: si cada apuntador en nomb indica un arreglo de 20 elementos entonces y solamente entonces 200 chars estarán disponibles (10 elementos). Considera: char *nomb[10]. En donde es válido hacer nomb[3][4] y anomb[3][4] en C. Lo cual gráficamente se muestra en la figura 8. Con el primer tipo de declaración se tiene la ventaja de que cada apuntador puede apuntar a arreglos de diferente longitud. "Ene". "Ene".. "Feb". declara un arreglo de 35 apuntadores a enteros. "Feb". .. char anomb[][15] = { "No mes".[FUNDAMENTOS DE PROGRAMACIÓN] refiriendo a la dirección del primer elemento que se encuentran en el tercer renglón de la matriz supuesta. char anomb[10][20]. mientras que int *a[35]. Sin embargo: anomb es un arreglo verdadero de 200 elementos de dos dimensiones tipo char. "Mar". El acceso de los elementos anomb en memoria se hace bajo la siguiente fórmula 20*renglon + columna + dirección_base En cambio nomb tiene 10 apuntadores a elementos...

[FUNDAMENTOS DE PROGRAMACIÓN] Figura 8. por ejemplo: func_cualquiera() { static char *nomb[] = { "No mes". } punto.z. Considerar lo siguiente: main() { struct COORD { float x. "Feb". mientras el código se esta ejecutando. "Mar". arreglo de Inicialización estática de arreglos de apuntadores La inicialización de arreglos de apuntadores es una aplicación ideal para un arreglo estático interno. }.. "Ene". . Apuntadores y estructuras Los apuntadores a estructuras se definen fácilmente y en una forma directa.2: apuntadores. 45 .y. Arreglo de 2 dimensiones VS.. } Recordando que con el especificador de almacenamiento de clase static se reserva en forma permanente memoria el arreglo..

3 Figura : Esquema de una lista ligada con 2 elementos. Nota: Solamente se puede declarar sig como un apuntador tipo ELEMENTO. } ELEMENTO. n2.[FUNDAMENTOS DE PROGRAMACIÓN] struct COORD *ap_punto. ap_punto */ ap_punto->z=3. } /* Con el operador -> se accesan los /* de la estructura apuntados por Otro ejemplo son las listas ligadas: typedef struct { int valor. No se puede tener un elemento del tipo variable ya que esto generaría una definición recursiva la cual no esta permitida. ELEMENTO n1. n1.z = 1. ap_punto = &punto. Se permite poner una referencia a un apuntador ya que los los bytes se dejan de lado para cualquier apuntador.x = punto. /* Se asigna punto al apuntador */ ap_punto->x++. Fallas comunes con apuntadores 46 .sig = &n2. struct ELEMENTO *sig. miembros */ ap_punto->y+=2. La asignación que se hace corresponde a la figura 8. punto.y = punto.

tener primeramente una localidad física de memoria. • Indirección no válida Supongamos que se tiene una función llamada malloc() la cual trata de asignar memoria dinámicamente (en tiempo de ejecución). digamos int y. char *malloc() -. Supongamos que se tiene un apuntador char *p Considerar: *p = (char *) malloc(100): memoria */ *p = 'y'. *x = 100. x = &y.una función de la biblioteca estándar que se verá más adelante. la cual regresa un apuntador al bloque de memoria requerida si se pudo o un apuntador a nulo en otro caso. int *x. ¿Cuál es? El * en la primera línea ya que malloc regresa un apuntador y *p no apunta a ninguna dirección. Existe un error en el código anterior.[FUNDAMENTOS DE PROGRAMACIÓN] A continuación se muestran dos errores comunes que se hacen con los apuntadores. y. lo adecuado será. El código correcto deberá ser: /* pide 100 bytes de la 47 . • No asignar un apuntador a una dirección de memoria antes de usarlo • int *x • • *x = 100.

[FUNDAMENTOS DE PROGRAMACIÓN]

p = (char *) malloc(100); Ahora si malloc no puede regresar un bloque de memoria, entonces p es nulo, y por lo tanto no se podrá hacer: *p = 'y'; Un buen programa en C debe revisar lo anterior, por lo que el código anterior puede ser reescrito como: p = (char *) malloc(100): memoria */ /* pide 100 bytes de la

if ( p == NULL ) { printf("Error: fuera de memoria\n"); exit(1); } *p = 'y';

4.3 RECURSIVIDAD Recursividad: La recursividad es una técnica de programación importante. Se utiliza para realizar una llamada a una función desde la misma función. Como ejemplo útil se puede presentar el cálculo de números factoriales. Él factorial de 0 es, por definición, 1. Los factoriales de números mayores se calculan mediante la multiplicación de 1 * 2 * ..., incrementando el número de 1 en 1 hasta llegar al número para el que se está calculando el factorial. El siguiente párrafo muestra una función, expresada con palabras, que calcula un factorial. "Si el número es menor que cero, se rechaza. Si no es un entero, se redondea al siguiente entero. Si el número es cero, su factorial es uno. Si el número es mayor que cero, se multiplica por él factorial del número menor inmediato."
48

[FUNDAMENTOS DE PROGRAMACIÓN]

Para calcular el factorial de cualquier número mayor que cero hay que calcular como mínimo el factorial de otro número. La función que se utiliza es la función en la que se encuentra en estos momentos, esta función debe llamarse a sí misma para el número menor inmediato, para poder ejecutarse en el número actual. Esto es un ejemplo de recursividad. La recursividad y la iteración (ejecución en bucle) están muy relacionadas, cualquier acción que pueda realizarse con la recursividad puede realizarse con iteración y viceversa. Normalmente, un cálculo determinado se prestará a una técnica u otra, sólo necesita elegir el enfoque más natural o con el que se sienta más cómodo. Claramente, esta técnica puede constituir un modo de meterse en problemas. Es fácil crear una función recursiva que no llegue a devolver nunca un resultado definitivo y no pueda llegar a un punto de finalización. Este tipo de recursividad hace que el sistema ejecute lo que se conoce como bucle "infinito". Para entender mejor lo que en realidad es el concepto de recursión veamos un poco lo referente a la secuencia de Fibonacci. Principalmente habría que aclarar que es un ejemplo menos familiar que el del factorial, que consiste en la secuencia de enteros. 0,1,1,2,3,5,8,13,21,34,..., Cada elemento en esta secuencia es la suma de los precedentes (por ejemplo 0 + 1 = 0, 1 + 1 = 2, 1 + 2 = 3, 2 + 3 = 5, ...) sean fib(0) = 0, fib (1) = 1 y así sucesivamente, entonces puede definirse la secuencia de Fibonacci mediante la definición recursiva (define un objeto en términos de un caso mas simple de si mismo): fib (n) = n if n = = 0 or n = = 1 fib (n) = fib (n - 2) + fib (n - 1) if n >= 2 Por ejemplo, para calcular fib (6), puede aplicarse la definición de manera recursiva para obtener: Fib (6) = fib (4) + fib (5) = fib (2) + fib (3) + fib (5) = fib (0) + fib (1) + fib (3) + fib (5) = 0 + 1 fib (3) + fib (5) 1.
49

+ fib (1) + fib (2) + fib(5) =

[FUNDAMENTOS DE PROGRAMACIÓN]

1. 2.

+ 1 + fib(0) + fib (1) + fib (5) = + 0 + 1 + fib(5) = 3 + fib (3) + fib (4) =

3 + 1 + fib (0) + fib (1) + fib (4) = 3. 4. 5. 6. + fib (1) + fib (2) + fib (4) = + 0 + 1 + fib (2) + fib (3) = 5 + fib (0) + fib (1) + fib (3) = + 0 + 1 + fib (1) + fib (2) = 6 + 1 + fib (0) + fib (1) = +0+1=8

Obsérvese que la definición recursiva de los números de Fibonacci difiere de las definiciones recursivas de la función factorial y de la multiplicación . La definición recursiva de fib se refiere dos veces a sí misma . Por ejemplo, fib (6) = fib (4) + fib (5), de tal manera que al calcular fib (6), fib tiene que aplicarse de manera recursiva dos veces. Sin embargo calcular fib (5) también implica calcular fib (4), así que al aplicar la definición hay mucha redundancia de cálculo. En ejemplo anterior, fib(3) se calcula tres veces por separado. Sería mucho mas eficiente "recordar" el valor de fib(3) la primera vez que se calcula y volver a usarlo cada vez que se necesite. Es mucho mas eficiente un método iterativo como el que sigue parar calcular fib (n). If (n < = 1) return (n); lofib = 0 ; hifib = 1 ; for (i = 2; i < = n; i ++) { x = lofib ; lofib = hifib ; hifib = x + lofib ; } /* fin del for*/ return (hifib) ; Compárese el numero de adiciones (sin incluir los incrementos de la variable índice, i) que se ejecutan para calcular fib (6) mediante este algoritmo al usar
50

Sin embargo. tienen que ejecutarse el mismo numero de multiplicaciones para calcular n! Mediante ambos métodos: recursivo e iterativo. Normalmente. por el apellido. la ordenación de datos de ventas de mayor a menor rentabilidad muestra los productos más vendidos de la compañía o el personal de ventas más eficaz.5 EJECUCIÓN EJECUTABLES DE OTROS PROGRAMAS EN CÓDIGOS 51 . una lista de piezas se podría clasificar según el número de pieza y una lista de clientes. 4. del 1 al 10 o a la inversa. se pueden ordenar los datos de menor a mayor. el método recursivo es mucho mas costoso que el iterativo. Discoverer ordena los datos según la secuencia alfabética más adecuada para el idioma seleccionado. Lo mismo ocurre con el numero de sumas en los dos métodos al calcular la multiplicación. se ordena la información alfabética (nombre de almacén.[FUNDAMENTOS DE PROGRAMACIÓN] la definición recursiva. Además de la ordenación simple.) por orden alfabético y la numérica (cifras de ventas.4 CLASIFICACIÓN (ORDENACIÓN) DE DATOS La ordenación de los datos se realiza por orden alfabético o numérico. Consulte al Administrador de Discoverer para configurar la ordenación más conveniente para su idioma. puede también ordenar datos dentro de otros datos. etc. en el caso de los números de Fibonacci. de la A a la Z. etc. NOTA: Aunque los ejemplos de esta sección muestran la ordenación de la A a la Z. Por ejemplo. En ambos casos. 4. En el caso de la función factorial. Por ejemplo. cliente. existen compañías que habitualmente lanzan campañas postales basadas en las direcciones de clientes con un código postal determinado. a continuación. La ordenación es también útil para analizar datos.) por orden numérico. cantidad de unidades vendidas. por dirección dentro del código. Puede ordenar los datos por este código y. es decir. Por ejemplo.

se los denomina comúnmente binarios. combinaciones de ceros y unos llamada código máquina. Se escribe en un lenguaje que sigue uno de los siguientes dos paradigmas: imperativo o declarativo y que posteriormente puede ser convertido en una imagen ejecutable por un compilador. al hecho de ejecutar varios programas de forma simultánea y eficiente. el procesador ejecuta instrucción por instrucción. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intérpretes.1 2 Al conjunto general de programas. los presentaron como ficheros ejecutables. El mismo término. Cuando se pide que el programa sea ejecutado. donde debido a la estructura de este último. • Ejecución Una vez escritos. las instrucciones que se escribieron en un lenguaje de programación que los humanos usan para escribirlos con mayor facilidad. se han traducido al único idioma que la máquina comprende. como a su código fuente.exe. clásico en estaciones 52 . los ficheros no necesitan hacer uso de extensiones. estas máquinas no pueden funcionar. Generalmente el código fuente lo escriben profesionales conocidos como programadores. (propio en sistemas unix. En los computadores actuales. puede referirse tanto a un programa ejecutable. Ejemplos de esto son bash. en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilación y han sido creados. se le denomina software. En informática. con extensión . el cual es transformado en un binario cuando es compilado. De acuerdo a sus funciones. se clasifican en software de sistema y software de aplicación. se le conoce como multitarea. Posteriormente. Sin programas. que más genéricamente se refiere al equipamiento lógico o soporte lógico de una computadora digital. pueden ser ejecutados de diversas formas: • Mediante un programa que va adaptando las instrucciones conforme son encontradas.[FUNDAMENTOS DE PROGRAMACIÓN] Un programa informático es un conjunto de instrucciones que una vez ejecutadas realizarán una o varias tareas en una computadora.

a su equivalente en lenguaje máquina. Un programa puede terminar su ejecución en forma normal o por causa de un error. A un programa en ejecución se le suele llamar también proceso. Programas que se auto-modifican Un programa en ejecución se trata de forma diferente que los datos en los cuales opera. instrucción por instrucción hasta que termina. el cual puede acceder directamente al procesador. El programa modificado es secuencialmente ejecutado como parte del mismo programa. Al momento de dicha solicitud.[FUNDAMENTOS DE PROGRAMACIÓN] • Unix y que fue escrito para el proyecto GNU o Python. está en su facilidad de uso y productividad y de hecho. solicite su ejecución. Ejemplos de esto son: El lenguaje C. cuya peculiaridad además de ser multipropósito. A este proceso se le llama compilar y al programa traductor se le denomina compilador. para que luego el usuario de la computadora. COBOL y Prol Ejecución y almacenamiento de los programas Típicamente. el programa es cargado en la memoria de acceso aleatorio o RAM del equipo. Se pueden escribir programas auto-modificables en lenguajes como Lisp. que combina en su sintaxis características de medio y bajo nivel y el compilador gcc usado en el proyecto GNU. en algunos casos ésta distinción es ambigua. directa o indirectamente. especialmente cuando un programa se modifica a sí mismo. Programas empotrados en hardware 53 .3 Traduciendo el código escrito del programa (lo que se denomina código fuente). De cualquier forma. es usado en parte de los proyectos Google y YouTube. dicho error puede ser de software o de hardware. bajo el control del software llamado sistema operativo. los programas se almacenan en una memoria no volátil (por ejemplo un disco). El procesador ejecuta (corre) el programa.

El proceso de arranque es para identificar e inicializar todos los aspectos del sistema. controladores de dispositivos hasta el contenido de la memoria RAM. este programa inicial carga al sistema operativo e inicializa al contador de programa para empezar las operaciones normales. Algunos programas están empotrados en el hardware. Una instrucción era representada por una configuración de estado abierto o cerrado de los interruptores. Después de establecer la configuración. Una computadora con arquitectura de programas almacenados requiere un programa inicial almacenado en su ROM para arrancar. Independiente de la computadora. El firmware se utiliza cuando se espera que el programa cambie en raras ocasiones o nunca.4 Seguido del proceso de inicialización.5 Programas cargados manualmente Interruptores para la carga manual en una Data General Nova 3. desde los registros del procesador. un dispositivo de hardware podría tener firmware empotrado para el control de sus operaciones. se 54 . Los programas históricamente se cargaron manualmente al procesador central mediante interruptores.[FUNDAMENTOS DE PROGRAMACIÓN] El microcontrolador a la derecha de la Memoria USB está controlada por un firmware empotrado. o cuando el programa no debe perderse cuando haya ausencia de energía.

prototipos. La forma más simple de un generador de código fuente es un procesador macro. Ejecución simultánea Muchos programas pueden correr simultáneamente en la misma computadora. Los servidores de aplicaciones son motores de software que entregan aplicaciones a computadoras cliente. que reemplaza patrones de código fuente de acuerdo a reglas relativamente simples. CSS. aspectos. El código fuente se genera con herramientas de programación tal como un procesador de plantilla o un IDE. También. la dirección de inicio se establecía mediante interruptores y el botón de ejecución se presionaba. Este proceso era repetitivo.7 También se puede lograr la multitarea por medio del hardware. Por ejemplo. Un motor de software da de salida código fuente o lenguaje de marcado que simultáneamente se vuelve la entrada de otro proceso informático. Podemos pensar como analogía un proceso manejando a otro siendo el código máquina quemado como combustible. Después de que el programa se cargaba. y generadores de código para aumentar la productividad del programador. históricamente los programas se cargaban manualmente mediante una cinta de papel o tarjetas perforadas.[FUNDAMENTOS DE PROGRAMACIÓN] ejecutaba un botón de ejecución. tal como el preprocesador de C. a lo cual se le conoce como multitarea y puede lograrse a través de mecanismos de software o de hardware. y Javascript los cuales son interpretados por un navegador web. Los sistemas operativos modernos pueden correr varios programas a través del planificador de procesos — un mecanismo de software para conmutar con frecuencia la cantidad de procesos del procesador de modo que los usuarios puedan interactuar con cada programa mientras estos están corriendo.8 55 . plantillas. Las Wikis generan HTML. un software para wikis es un sevidor de aplicaciones que permite a los usuarios desarrollar contenido dinámico ensamblado a partir de artículos.6 Programas generados automáticamente La programación automática es un estilo de programación que crea código fuente mediante clases genéricas. Java. las computadoras modernas que usan varios procesadores o procesadores con varios núcleos pueden correr muchos programas a la vez.

describiendo textualmente paso a paso cada una de las actividades a realizar dentro de una actividad determinada. Estas categorías funcionales son software de sistema y software de aplicación. Levantarse 2. el software de sistema incluye programas utilitarios que ayudan a manejar y configurar la computadora. El software de sistema incluye al sistema operativo el cual acopla el hardware con el software de aplicación.9 El propósito del sistema operativo es proveer un ambiente en el cual el software de aplicación se ejecuta de una manera conveniente y eficiente.6 GRAFICACIÓN EN PSEUDOCÓDICO a) Descripción Narrada b) Pseudocódigo c) Diagramas de Flujo d) Diagramas N. El middleware también es un software de aplicación que acopla el software de sistema con la interfaz de usuario. Si un programa no es software de sistema entonces es software de aplicación. como por ejemplo la necesidad de ordenamiento 4.[FUNDAMENTOS DE PROGRAMACIÓN] Categorías funcionales Los programas se pueden categorizar según líneas funcionales. También son software de aplicación los programas utilitarios que ayudan a los usuarios a resolver problemas de aplicaciones.S (Nassi-Schneiderman o de Chapin) Descripción Este algoritmo es caracterizado porque sigue un proceso de ejecución común y lógico. Ejemplo 1 Algoritmo para asistir a clases: 1. Bañarse 56 .9 Además del sistema operativo.

inicio leer (a. Ubicarse en un asiento Descripción en Pseudocódigo Pseudo = falso. Desayunar 5. Utiliza un pseudolenguaje muy parecido a nuestro idioma. media) fin 57 . Se concibió para superar las dos principales desventajas de los flujogramas: lento de crear y difícil de modificar sin un nuevo redibujo. d) producto <-. El pseudo código no es realmente un código sino una imitación y una versión abreviada de instrucciones reales para las computadoras. pero que respeta las directrices y los elementos de los lenguajes de programación. Tomar el autobús 8. Cepillarse los dientes 6. suma. Vestirse 4. las operaciones que se aplicarán a los datos y la lógica que tendrá el programa de computadora para solucionar un determinado problema. Salir de casa 7.[FUNDAMENTOS DE PROGRAMACIÓN] 3.(a + b + c + d) / 4 escribir (producto. b. Buscar el aula 10. suma y media aritmética. Ejemplo 1 Diseñar un algoritmo que lea cuatro variables y calcule e imprima su producto.(a + b + c + d) media <-. Llegar al ITCA 9. Es una técnica para diseño de programas que permite definir las estructuras de datos.(a * b * c * d) suma <-. c.

Constan de una serie de cajas contiguas que se leerán siempre de arriba-abajo y sus estructuras lógicas son las siguientes: Estructura Secuencial 58 .[FUNDAMENTOS DE PROGRAMACIÓN] Diagramas N-S Son una herramienta que favorece la programación estructurada y reúne características gráficas propias de diagramas de flujo y lingüísticas propias de pseudocódigos.

[FUNDAMENTOS DE PROGRAMACIÓN] 59 .

con los pasos del algoritmo escritos en el símbolo adecuado y los símbolos unidos con flechas. denominadas líneas de flujo. Para su elaboración se siguen ciertas reglas: Se escribe de arriba hacia abajo y de izquierda a derecha Siempre se usan flechas verticales u horizontales. Son la representación gráfica de la solución algorítmica de un problema. Utilizan unos símbolos normalizados. que indican el orden en que los pasos deben ser ejecutados. jamás curvas Evitar cruce de flujos. En cada paso expresar una acción concreta Secuencia de flujo normal en una solución de problema Tiene un inicio Una lectura o entrada de datos El proceso de datos Una salida de información Un final 60 . Para diseñarlos se utilizan determinados símbolos o figuras que representan una acción dentro del procedimiento.[FUNDAMENTOS DE PROGRAMACIÓN] Diagramas de Flujo.

Codificación eficaz de los programas. Análisis efectivo de las diferentes secciones del programa Pueden usarse como modelos de trabajo en el diseño de nuevos programas o sistemas. Depuración y pruebas ordenadas de programas DESVENTAJAS DE LOS FLUJOGRAMAS Diagramas complejos y detallados suelen ser laboriosos en su planteamiento y diseño. Ventajas de usar Flujogramas Rápida comprensión de las relaciones. Comunicación con el usuario. Documentación adecuada de los programas. 61 .[FUNDAMENTOS DE PROGRAMACIÓN] Simbología para diseñar flujogramas.

am.am por cada directorio del proyecto. corresponde a la visión del desarrollador. Cuando un programa se distribuye. Eventualmente pueden existir más directorios o con otro nombre. Es la base para crear el script configure.[FUNDAMENTOS DE PROGRAMACIÓN] Acciones a seguir tras la salida de un símbolo de decisión. es el archivo que sirve como entrada al programa automake.in. configure. Debe existir un archivo Makefile. Representando el ejemplo como flujograma tenemos: 4. Las reglas se escriben en macros m4. No existen normas fijas para la elaboración de los diagramas de flujo que permitan incluir todos los detalles que el usuario desee introducir.7 INCLUIR ARCHIVOS DE PROGRAMAS La estructura que se muestra. que es un script creado en forma automática. necesario para construir la aplicación. pero lo estándar para proyectos que no son bibliotecas o que no son múltiples aplicaciones es denomilarlo src. 62 . El caso más característico es el script configure. se entregan en muchos casos archivos generados a partir de ciertos procesos. contiene las reglas de verificación y construcción del proyecto. directorio donde se almacena el código fuente de la aplicación. Makefile. quien se encargará de generar en forma automática el archivo Makefile. src/. pueden ser difíciles de seguir si existen diferentes caminos.

63 .[FUNDAMENTOS DE PROGRAMACIÓN] Figura: Archivos y estructura básica de un proyecto.