trabajo final las as mayra

Upload: elyd32

Post on 12-Jul-2015

784 views

Category:

Documents


0 download

TRANSCRIPT

[FUNDAMENTOS DE PROGRAMACIN]

INTRODUCCIN A LA COMPUTACIN

UNIDAD I, INTRODUCCIN A LA COMPUTACIN1.1. CONCEPTOS GENERALES1.1.1

COMPUTADORA

Mquina electrnica rpida y exacta que es capaz de aceptar datos a travs de un medio de entrada, procesarlos automticamente bajo el control de un programa previamente almacenado, y proporcionar la informacin resultante a un medio de salida. Un sistema informtico est compuesto a su vez por dos subsistemas: Hardware y Software. Describiremos un sistema siguientes elementos:1

computacional

enumerando

los

[FUNDAMENTOS DE PROGRAMACIN]

1. 2. 3. 4. 5.

Computadora y todos sus perifricos (hardware) Instrucciones legibles (software) Datos a procesar Manuales de operacin Procedimientos y personas que utilizan el sistema

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

Digitales. Procesa datos discretos. Trabaja contando nmeros que representan cifras, letras u otros simbolos especiales. Analgicas. Procesa datos que estn medidos en una escala contnua. Hbridas. Utilizan simultneamente las tcnicas analgica y digital en sus componentes.

De acuerdo a su propsito:

Propsito especial. Diseada para realizar una tarea especfica. Propsito general. Puede almacenar diferentes programas y puede ser usada en distintas aplicaciones.

De acuerdo a su tamao y potencia:

Microcomputadoras (PC) Son los dispositivos ms pequeos que pueden programarse Minicomputadoras (Mini) Son de tamao medio, y mas costosas que una PC Maxicomputadora (mainframe) Pueden controlar muchos dispositivos de E/S Supercomputadora (Super) Son las ms rpidas y costosas.

Conforme a la manera que estn conectadas:

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

2

[FUNDAMENTOS DE PROGRAMACIN]

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 programacin que una computadora interpreta para resolver un problema o una funcin especifica. 1.- Es la relacin ordenada de actividades, en informtica se le conoce como la serie codificada de instrucciones. 3. Redaccin de un algoritmo en un lenguaje de programacin. 4. Conjunto de instrucciones ordenadas correctamente permiten realizar una tarea o trabajo especfico. que

5. Toda secuencia de instrucciones o indicaciones destinadas a ser utilizadas, directa o indirectamente, en un sistema informtico para realizar una funcin o una terea o para obtener un resultado determinado, cualquiera que fuere su forma de expresin y fijacin. 6. Conjunto secuenciado de instrucciones que quedan escritas en un lenguaje determinado con unos fines especficos. Aunque en el lenguaje comn con frecuencia se denomina programa al sistema operativo, la diferencia estriba, precisamente, en la especificidad de aqul frente al carcter de gestin global de ste. La palabra software engloba ambos. 1.1.3 EL LENGUAJE DE PROGRAMACIN

Un lenguaje de programacin es un idioma artificial diseado para expresar computaciones que pueden ser llevadas a cabo por mquinas como las computadoras. Pueden usarse para crear3

[FUNDAMENTOS DE PROGRAMACIN]

programas que controlen el comportamiento fsico y lgico de una mquina, para expresar algoritmos con precisin, o como modo de comunicacin humana.1 Est formado por un conjunto de smbolos y reglas sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones. Al proceso por el cual se escribe, se prueba, se depura, se compila y se mantiene el cdigo fuente de un programa informtico se le llama programacin. Tambin la palabra programacin se define como el proceso de creacin de un programa de computadora, mediante la aplicacin de procedimientos lgicos, a travs de los siguientes pasos:

El desarrollo lgico del programa para resolver un problema en particular. Escritura de la lgica del programa empleando un lenguaje de programacin especfico (codificacin del programa). Ensamblaje o compilacin del programa hasta convertirlo en lenguaje de mquina. Prueba y depuracin del programa. Desarrollo de la documentacin.

Existe un error comn que trata por sinnimos los trminos 'lenguaje de programacin' y 'lenguaje informtico'. Los lenguajes informticos engloban a los lenguajes de programacin y a otros ms, como por ejemplo HTML (lenguaje para el marcado de pginas web que no es propiamente un lenguaje de programacin, sino un conjunto de instrucciones que permiten disear el contenido de los documentos). Permite especificar de manera precisa sobre qu datos debe operar una computadora, cmo deben ser almacenados o transmitidos y qu acciones debe tomar bajo una variada gama de circunstancias. Todo esto, a travs de un lenguaje que intenta estar relativamente prximo al lenguaje humano o natural. Una caracterstica relevante de los lenguajes de programacin es precisamente que ms de un programador pueda usar un conjunto comn de instrucciones que sean comprendidas entre ellos para realizar la construccin de un programa de forma colaborativa.

4

[FUNDAMENTOS DE PROGRAMACIN]

1.1.4 CARACTERISTICAS PROGRAMACIN

DE

LOS

LENGUAJES

DE

Las computadoras calculan elctricamente por medio de pulsos de corriente y voltajes que representan formas de comunicacin por dems ajenas al lenguaje humanos. As pues, el medio que permite entablar la comunicacin con las mquinas se conoce como lenguaje de programacin. An con su corta duracin, la historia de la computacin electrnica ha producido varios cientos de lenguajes de programacin ampliamente reconocidos y utilizados. Al principio se acercaban mucho al lenguaje propio de las computadoras (ceros y unos), pero se han ido transformando para acercarse ms a las lenguas humanas como el ingls o bien a formas grficas mas expresivas y sintticas. Entre ms cercano a la computadora es un lenguaje se le denomina de bajo nivel, lo contrario es de alto nivel. Existen cinco generaciones de lenguajes de programacin, en donde cada uno mejora a sus predecesores en cuanto a las facilidades que otorga al programador. 1. 2. 3. 4. 5. Lenguaje mquina. Lenguajes ensambladores. Lenguajes de alto nivel. Lenguajes de muy alto nivel. Lenguajes naturales.

Lenguaje Mquina El lenguaje mquina, el de ms bajo nivel, representa datos e instrucciones con dgitos binarios (0s y 1s), y el elemento ejecutor es la circuitera misma de la computadora. Al principio de la comunicacin electrnica cada mquina tena su propio lenguaje, y los programadores tenan sistemas rudimentarios para combinar nmeros que representaran instrucciones simples como SUMAR y COMPARAR. Los mtodos de programacin en este lenguaje son tediosos e imprcticos, por lo que la comunidad del cmputo se movi rpidamente para desarrollar lenguajes ensambladores.5

[FUNDAMENTOS DE PROGRAMACIN]

Lenguajes Ensambladores En su momento, los lenguajes ensambladores constituyeron un gran avance; en lugar de usar ceros y unos se utilizan cdigos mnemnicos (para ayudar a la memoria) o abreviatura fciles de recordar para las instrucciones: ADD (sumar), STO (almacenar), C (comparar), etctera. Para usar un lenguaje ensamblador se requiere un lenguaje traductor que convierta los programas en ensamblador a lenguaje mquina que es el nico que comprende la computadora. Este traductor se llama programa ensamblador. An cuando los ensambladores representaron un paso adelante, todava tenan muchos inconvenientes, por ejemplo, que son detallados en extremo y su programacin es tediosa, repetitiva y propensa al error. Lenguaje de alto nivel. La investigacin sobre los lenguajes de alto nivel se inicia en 1945, con el ingeniero alemn Konrad Zuse, pero hasta el inicio de los 1960 que se generaliza su uso, transformando radicalmente la actividad de la programacin. Estos lenguajes se asemejan ms a la lengua humana, particularmente el ingls, con menos detallados y con menos declaraciones describen tareas ms complejas para la computadora. Como resultado, los programadores logran trabajos de mayor alcance y con menos esfuerzo. Obviamente se requiere de un traductor de las declaraciones simblicas de un lenguaje de alto nivel al lenguaje mquina ejecutable por la computadora, estos traductores se llaman compiladores (el primero se desarrollo en 1952). Existen compiladores para cada lenguaje y cada mquina, pero una ventaja de los lenguajes de alto nivel es que se pueden trasladar de una mquina a otra con pocas o nulas modificaciones. Entre los lenguajes de esta generacin se encuentran los de propsito general como BASIC, FORTRAN y COBOL que han sido muy populares. Adems se encuentran Pascal, C y sus derivados. Lenguaje de muy alto nivel. Los lenguajes de la cuarta generacin, 4GLs, son llamados lenguajes de muy alto nivel. Su definicin es ms complicada que los6

[FUNDAMENTOS DE PROGRAMACIN]

anteriores. Se trata esencialmente de los lenguajes de programacin taquigrficos; una operacin que requiere de cientos de lneas en un lenguaje de tercera generacin, como COBOL, requiere tpicamente de unas cinco a diez lneas en uno de cuarta generacin. Entre las caractersticas de estos lenguajes est el que nos son de procedimientos. En los lenguajes de procedimientos se dice con detalle a la computadora la tarea a realizar. En los declarativos se define solamente lo que se haga. Por ejemplo, producir un reporte del tratamiento realizado a un conjunto de datos. Enfatizan el qu en lugar del cmo. Obviamente los que elaboran lenguajes declarativos han hecho trabajo que para muchos de los usuarios mejoran la productividad, porque los programas son ms fciles de escribir y actualizar, pueden ser usados con un mnimo de entrenamiento y ahorran al usuario la necesidad de conocer a fondo el hardware y la programacin. Entre los inconvenientes de estos lenguajes se encuentra que no han uso eficiente de los recursos computacionales. Lenguaje Natural En la quinta generacin se encuentran los llamados Lenguajes naturales, por su acercamiento a la lengua escrita. El uso de un lenguaje natural con una base de conocimientos produce un sistema basado en el conocimiento. Una clase de estos sistemas son los Sistemas expertos, que son base de la Inteligencia Artificial. (IA).

1.1.5

PROGRAMACIN

Definicin Lenguaje de programacin es un conjunto de sintaxis y reglas semnticas que definen los programas del computador.

7

[FUNDAMENTOS DE PROGRAMACIN]

Lenguaje que los programadores usan para comunicar instrucciones a una computadora y poder ejecutar un programa. Cdigo utilizado para la creacin de programas. Lo utilizan los programadores (generalmente especializados en un lenguaje en particular) para la creacin de diversas aplicaciones. En informtica, es cualquier forma de escritura (lenguaje) que posee determinadas instrucciones que combinadas y modificadas correctamente (dependiendo del resultado que se desee), podrn ser interpretadas y as resultar en un programa, pgina web, etc. sistema de escritura para la descripcin precisa de algoritmos o programas informticos. Lenguaje que computacin. se utiliza para redactar programas de

Conjunto de sentencias utilizadas para escribir secuencias de instrucciones que para que ejecute una computadora. Un lenguaje de programacin es aquel elemento dentro de la informtica que nos permite crear programas mediante un conjunto de instrucciones, operadores y reglas de sintaxis; que pone a disposicin del programador para que este pueda comunicarse con los dispositivos hardware y software existentes.

1.2

EL PROCESO DE PROGRAMACIN

Elaborar un programa implica tener que realizar una serie de pasos secuenciales y cronolgico que empiezan con la deteccin y definicin del problema y conducen ala implantacin del programa que lo soluciona. Los pasos a seguir seran: 1. Comprender el problema 2. Plantear la lgica8

[FUNDAMENTOS DE PROGRAMACIN]

3. 4. 5. 6.

Codificar el programa Traducir el programa a lenguaje mquina Prueba del programa Ejecucin del programa

Comprender el problema En la programacin profesional se escriben programas para satisfacer las necesidades de otros, comprender que necesita el cliente, puede llegar a ser una tarea complicada y si esta etapa no esta claramente resuelta, no se podr avanzar. El usuario en general no sabe expresar bien lo que necesita y requiere la amplia colaboracin del programador. Un usuario puede requerir una base de datos para gestionar su empresa y por ejemplo quiere tener siempre a mano una pgina web que despliegue la nmina de empleados de su empresa que tengan ms de 5 aos de antigedad y un sueldo menor a $ 2000 y que a su vez no acumulen ms de 2 ausencias por ao y no haber tenido sanciones disciplinarias, para sortear un viaje entre ellos. Esta solicitud planteada por el usuario podra parecer suficiente informacin para el programador, pero este podra consultar por ejemplo, si las ausencias se debieron a enfermedades certificadas por el mdico de la empresas, esas personas deben ser excluidas igualmente?, la salida de datos necesitan incorporar el nmero de legajo?, la lista debe incluir a los empleados de media jornada?, todas las categoras estn incluidas o independientemente de los ingresos hay dependencia de las mismas y un muy largo etc. Estas consultas ayudan a poner en claro al usuario en su definicin. No hay que olvidar que en el caso de una base de datos pasada la etapa de normalizacin un cambio puede implicar comenzar nuevamente el proyecto. Planteo de la lgica La esencia del proceso de programacin consiste en el planteo de la lgica del programa. Aqu se plantean los pasos a incluir y el rden de los mismos. En general se utilizan diagramas de flujo o pseudocdigo, esto implica un planteo natural y sin preocupacin por la sintxis. Lo importante es determinar la secuencia de sucesos que llevarn los datos de entrada a la salida deseada.9

[FUNDAMENTOS DE PROGRAMACIN]

Codificar el programa Una vez establecida la lgica del programa se podr elegir el lenguaje ms adecuado para llevar a cabo la codificacin. Aqui si, hay que usar la sintxis correcta. Todos estos pasos estn sujetos a la complejidad del programa, cuando es muy sencillo se puede escribir como si fuese una carta a alguien, a medida que la complejidad aumenta se requiere diferenciar los pasos y trabajar sobre cada uno de ellos. Traduccin del programa a lenguaje mquina Lenguajes de programacin hay muchos pero los computadores slo entienden 0 y 1 lgicos. 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, a lenguaje mquina de bajo nivel, que es el que la computadora entiende. Los errores de sintxis o gramtica son detectados por estos sistemas al momento de querer ejecutar el programa y en general hay un reporte del error. Prueba del programa Un programa libre de errores de sintxis no necesariamente lo est de errores lgicos. El programa puede ejecutarse correctamente pero el resultado de la salida no ser el esperado. Esta etapa implica poner a punto la sintxis y la lgica. Ejecucin del programa Terminadas y verificadas todas las etapas el programa puede ser utilizado por la empresa para obtener los resultados planeados.

1.3 EL ALGORITMO La palabra algoritmo se deriva de la traduccin al latn de la palabra rabe alkhowarizmi, nombre de un matemtico y astrnomo rabe que escribi un tratado sobre manipulacin de nmeros y ecuaciones en el siglo IX.

10

[FUNDAMENTOS DE PROGRAMACIN]

Un algoritmo es una serie de pasos organizados que describe el proceso que se debe seguir, para dar solucin a un problema especfico. 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. Cuantitativos: Son aquellos en los que se utilizan clculos numricos para definir los pasos del proceso.

Lenguajes Algortmicos Un Lenguaje algortmico es una serie de smbolos y reglas que se utilizan para describir de manera explcita un proceso. Tipos de Lenguajes Algortmicos

Grficos: Es la representacin grfica de las operaciones que realiza un algoritmo (diagrama de flujo).

No Grficos: Representa en forma descriptiva las operaciones que debe realizar un algoritmo (pseudocodigo). INICIO Edad: Entero ESCRIBA cual es tu edad?

11

[FUNDAMENTOS DE PROGRAMACIN]

Lea Edad SI Edad >=18 entonces ESCRIBA Eres mayor de Edad FINSI ESCRIBA fin del algoritmo FIN

UNIDAD II, ALGORITMOS, DIAGRAMAS DE FLUJO Y PROGRAMAS2.1 PROBLEMAS Y ALGORITMOS12

[FUNDAMENTOS DE PROGRAMACIN]

Algoritmo

Los diagramas de flujo sirven para representar algoritmos de manera grfica. En matemticas, ciencias de la computacin y disciplinas relacionadas, un algoritmo (del griego y latn, dixit algorithmus y ste a su vez del matemtico 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. Dados un estado inicial y una entrada, siguiendo los pasos sucesivos se llega a un estado final y se obtiene una solucin. Los algoritmos son el objeto de estudio de la algoritmia.1 En la vida cotidiana, se emplean algoritmos frecuentemente para resolver problemas. Algunos ejemplos son los manuales de usuario, que muestran algoritmos para usar un aparato, o las instrucciones que recibe un trabajador por parte de su patrn. Algunos ejemplos en matemtica son el algoritmo de la divisin para calcular el cociente de dos nmeros, el algoritmo de Euclides para obtener el mximo comn divisor de dos enteros positivos, o el mtodo de Gauss para resolver un sistema lineal de ecuaciones.

Definicin formal En general, no existe ningn consenso definitivo en cuanto a la definicin formal de algoritmo. Muchos autores los sealan como listas de instrucciones para resolver un problema abstracto, es decir, que un nmero finito de pasos convierten los datos de un problema (entrada) en una solucin (salida).1 2 3 4 5 6 Sin embargo cabe notar que algunos algoritmos no necesariamente tienen que terminar o resolver un problema en particular. Por ejemplo, una versin modificada de la criba de Eratstenes que nunca termine de calcular nmeros primos no deja de ser un algoritmo.713

[FUNDAMENTOS DE PROGRAMACIN]

A lo largo de la historia varios autores han tratado de definir formalmente a los algoritmos utilizando modelos matemticos como mquinas de Turing entre otros.8 9 Sin embargo, estos modelos estn sujetos a un tipo particular de datos como son nmeros, smbolos o grficas mientras que, en general, los algoritmos funcionan sobre una vasta cantidad de estructuras de datos.3 1 En general, la parte comn en todas las definiciones se puede resumir en las siguientes tres propiedades siempre y cuando no consideremos algoritmos paralelos:7 Tiempo secuencial. Un algoritmo funciona en tiempo discretizado paso a paso, definiendo as una secuencia de estados "computacionales" por cada entrada vlida (la entrada son los datos que se le suministran al algoritmo antes de comenzar). Estado abstracto. Cada estado computacional puede ser descrito formalmente utilizando una estructura de primer orden y cada algoritmo es independiente de su implementacin (los algoritmos son objetos abstractos) de manera que en un algoritmo las estructuras de primer orden son invariantes bajo isomorfismo. Exploracin acotada. La transicin de un estado al siguiente queda completamente determinada por una descripcin fija y finita; es decir, entre cada estado y el siguiente solamente se puede tomar en cuenta una cantidad fija y limitada de trminos del estado actual. En resumen, un algoritmo es cualquier cosa que funcione paso a paso, donde cada paso se pueda describir sin ambigedad y sin hacer referencia a una computadora en particular, y adems tiene un lmite fijo en cuanto a la cantidad de datos que se pueden leer/escribir en un solo paso. Esta amplia definicin abarca tanto a algoritmos prcticos como aquellos que solo funcionan en teora, por ejemplo el mtodo de Newton y la eliminacin de Gauss-Jordan funcionan, al menos en principio, con nmeros de precisin infinita; sin embargo no es posible programar la precisin infinita en una computadora, y no por ello dejan de ser algoritmos.10 En particular es posible considerar una cuarta propiedad que puede ser usada para validar la tesis de Church-Turing de que toda funcin calculable se puede programar en una mquina de Turing (o equivalentemente, en un lenguaje de programacin 10 suficientemente general):14

[FUNDAMENTOS DE PROGRAMACIN]

Aritmetizabilidad. Solamente operaciones innegablemente calculables estn disponibles en el paso inicial. [editar] Medios de expresin de un algoritmo Los algoritmos pueden ser expresados de muchas maneras, incluyendo al lenguaje natural, pseudocdigo, diagramas de flujo y lenguajes de programacin entre otros. Las descripciones en lenguaje natural tienden a ser ambiguas y extensas. El usar pseudocdigo y diagramas de flujo evita muchas ambigedades del lenguaje natural. Dichas expresiones son formas ms estructuradas para representar algoritmos; no obstante, se mantienen independientes de un lenguaje de programacin especfico. La descripcin de un algoritmo usualmente se hace en tres niveles:1. Descripcin de alto nivel. Se establece el problema, se

selecciona un modelo matemtico y se explica el algoritmo de manera verbal, posiblemente con ilustraciones y omitiendo detalles. 2. Descripcin formal. Se usa pseudocdigo para describir la secuencia de pasos que encuentran la solucin. 3. Implementacin. Se muestra el algoritmo expresado en un lenguaje de programacin especfico o algn objeto capaz de llevar a cabo instrucciones. Tambin es posible incluir un teorema que demuestre que el algoritmo es correcto, un anlisis de complejidad o ambos.

Diagrama de flujo

15

[FUNDAMENTOS DE PROGRAMACIN]

Diagrama de flujo que expresa un algoritmo para calcular la raz cuadrada de un nmero x Artculo principal: Diagrama de flujo Los diagramas de flujo son descripciones grficas de algoritmos; usan smbolos conectados con flechas para indicar la secuencia de instrucciones y estn regidos por ISO. Los diagramas de flujo son usados para representar algoritmos pequeos, ya que abarcan mucho espacio y su construccin es laboriosa. Por su facilidad de lectura son usados como introduccin a los algoritmos, descripcin de un lenguaje y descripcin de procesos a personas ajenas a la computacin. Pseudocdigo Artculo principal: Pseudocdigo El pseudocdigo (falso lenguaje, el prefijo pseudo significa falso) es una descripcin de alto nivel de un algoritmo que emplea una mezcla de lenguaje natural con algunas convenciones sintcticas propias de lenguajes de programacin, como asignaciones, ciclos y condicionales, aunque no est regido por ningn estndar. Es utilizado para describir algoritmos en libros y publicaciones cientficas, y como producto intermedio durante el desarrollo de un algoritmo, como los |diagramas de flujo, aunque presentan una ventaja importante sobre estos, y es que los algoritmos descritos en pseudocdigo requieren menos espacio para representar instrucciones complejas. El pseudocdigo est pensado para facilitar a las personas el entendimiento de un algoritmo, y por lo tanto puede omitir detalles irrelevantes que son necesarios en una implementacin. Programadores diferentes suelen utilizar convenciones distintas, que pueden estar basadas en la sintaxis de lenguajes de programacin concretos. Sin embargo, el pseudocdigo, en general, es comprensible sin necesidad de conocer o utilizar un entorno de programacin especfico, y es a la vez suficientemente estructurado16

[FUNDAMENTOS DE PROGRAMACIN]

para que su implementacin se pueda hacer directamente a partir de l. As el pseudodocdigo cumple con las funciones antes mencionadas para representar algo abstracto los protocolos son los lenguajes para la programacin. Busque fuentes ms precisas para tener mayor comprensin del tema. Sistemas formales La teora de autmatas y la teora de funciones recursivas proveen modelos matemticos que formalizan el concepto de algoritmo. Los modelos ms comunes son la mquina de Turing, mquina de registro y funciones -recursivas. Estos modelos son tan precisos como un lenguaje mquina, careciendo de expresiones coloquiales o ambigedad, sin embargo se mantienen independientes de cualquier computadora y de cualquier implementacin. Implementacin Muchos algoritmos son ideados para implementarse en un programa. Sin embargo, los algoritmos pueden ser implementados en otros medios, como una red neuronal, un circuito elctrico o un aparato mecnico y elctrico. Algunos algoritmos inclusive se disean especialmente para implementarse usando lpiz y papel. El algoritmo de multiplicacin tradicional, el algoritmo de Euclides, la criba de Eratstenes y muchas formas de resolver la raz cuadrada son slo algunos ejemplos. Variables Son elementos que toman valores especficos de un tipo de datos concreto. La declaracin de una variable puede realizarse comenzando con var. Principalmente, existen dos maneras de otorgar valores iniciales a variables: 1. Mediante una sentencia de asignacin. 2. Mediante un procedimiento de entrada de datos (por ejemplo: 'read').

17

[FUNDAMENTOS DE PROGRAMACIN]

Ejemplo: ... i:=1; read(n); while i < n do begin (* cuerpo del bucle *) i := i + 1 end; ... Estructuras secuenciales La estructura secuencial es aquella en la que una accin sigue a otra en secuencia. 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. La asignacin de esto consiste, en el paso de valores o resultados a una zona de la memoria. Dicha zona ser reconocida con el nombre de la variable que recibe el valor. La asignacin se puede clasificar de la siguiente forma:1. Simples: Consiste en pasar un valor constante a una variable

(a 15) 2. Contador: Consiste en usarla como un verificador del nmero de veces que se realiza un proceso (a a + 1) 3. Acumulador: Consiste en usarla como un sumador en un proceso (a a + b) 4. De trabajo: Donde puede recibir el resultado de una operacin matemtica que involucre muchas variables (a c + b*2/4). Un ejemplo de estructura secuencial, como obtener la rea de un tringulo: Inicio ... float b, h, a; printf("Diga la base"); scanf("%f", &b); printf("Diga la altura"); scanf("%f", &h);18

[FUNDAMENTOS DE PROGRAMACIN]

a = (b*h)/2; printf("El rea del tringulo es %f", a) ... Fin Algoritmos como funciones Artculo principal: Teora de la computabilidad

Esquemtica de un algoritmo solucionando un problema de ciclo hamiltoniano. Un algoritmo se puede concebir como una funcin que transforma los datos de un problema (entrada) en los datos de una solucin (salida). Ms an, los datos se pueden representar a su vez como secuencias de bits, y en general, de smbolos cualesquiera.1 9 11 Como cada secuencia de bits representa a un nmero natural (vase Sistema binario), entonces los algoritmos son en esencia funciones de los nmeros naturales en los nmeros naturales que s se pueden calcular. Es decir que todo algoritmo calcula una funcin donde cada nmero natural es la codificacin de un problema o de una solucin. En ocasiones los algoritmos son susceptibles de nunca terminar, por ejemplo, cuando entran a un bucle infinito. Cuando esto ocurre, el algoritmo nunca devuelve ningn valor de salida, y podemos decir que la funcin queda indefinida para ese valor de entrada. Por esta razn se considera que los algoritmos son funciones parciales, es decir, no necesariamente definidas en todo su dominio de definicin. Cuando una funcin puede ser calculada por medios algortmicos, sin importar la cantidad de memoria que ocupe o el tiempo que se tarde, se dice que dicha funcin es computable. No todas las funciones entre secuencias datos son computables. El problema de la parada es un ejemplo. Anlisis de algoritmos Artculo principal: Anlisis de algoritmos

19

[FUNDAMENTOS DE PROGRAMACIN]

Como medida de la eficiencia de un algoritmo, se suelen estudiar los recursos (memoria y tiempo) que consume el algoritmo. El anlisis de algoritmos se ha desarrollado para obtener valores que de alguna forma indiquen (o especifiquen) la evolucin del gasto de tiempo y memoria en funcin del tamao de los valores de entrada. El anlisis y estudio de los algoritmos es una disciplina de las ciencias de la computacin y, en la mayora de los casos, su estudio es completamente abstracto sin usar ningn tipo de lenguaje de programacin ni cualquier otra implementacin; por eso, en ese sentido, comparte las caractersticas de las disciplinas matemticas. As, el anlisis de los algoritmos se centra en los principios bsicos del algoritmo, no en los de la implementacin particular. Una forma de plasmar (o algunas veces "codificar") un algoritmo es escribirlo en pseudocdigo o utilizar un lenguaje muy simple tal como Lexico, cuyos cdigos pueden estar en el idioma del programador. Algunos escritores restringen la definicin de algoritmo a procedimientos que deben acabar en algn momento, mientras que otros consideran procedimientos que podran ejecutarse eternamente sin pararse, suponiendo el caso en el que existiera algn dispositivo fsico que fuera capaz de funcionar eternamente. En este ltimo caso, la finalizacin con xito del algoritmo no se podra definir como la terminacin de ste con una salida satisfactoria, sino que el xito estara definido en funcin de las secuencias de salidas dadas durante un periodo de vida de la ejecucin del algoritmo. Por ejemplo, un algoritmo que verifica que hay ms ceros que unos en una secuencia binaria infinita debe ejecutarse siempre para que pueda devolver un valor til. Si se implementa correctamente, el valor devuelto por el algoritmo ser vlido, hasta que evale el siguiente dgito binario. De esta forma, mientras evala la siguiente secuencia podrn leerse dos tipos de seales: una seal positiva (en el caso de que el nmero de ceros sea mayor que el de unos) y una negativa en caso contrario. Finalmente, la salida de este algoritmo se define como la devolucin de valores exclusivamente positivos si hay ms ceros que unos en la secuencia y, en cualquier otro caso, devolver una mezcla de seales positivas y negativas. Ejemplo de algoritmo20

[FUNDAMENTOS DE PROGRAMACIN]

El problema consiste en encontrar el mximo de un conjunto de nmeros. Para un ejemplo ms complejo vase Algoritmo de Euclides. [Descripcin de alto nivel Dado un conjunto finito C de nmeros, se tiene el problema de encontrar el nmero ms grande. Sin prdida de generalidad se puede asumir que dicho conjunto no es vaco y que sus elementos estn numerados como . Es decir, dado un conjunto se pide encontrar m tal que para todo elemento x que pertenece al conjunto C. Para encontrar el elemento mximo, se asume que el primer elemento (c0) es el mximo; luego, se recorre el conjunto y se compara cada valor con el valor del mximo nmero encontrado hasta ese momento. En el caso que un elemento sea mayor que el mximo, se asigna su valor al mximo. Cuando se termina de recorrer la lista, el mximo nmero que se ha encontrado es el mximo de todo el conjunto. Descripcin formal El algoritmo puede ser escrito de una manera ms formal en el siguiente pseudocdigo: Algoritmo Encontrar el mximo de un conjunto funcin max(C) //C es un conjunto no vaco de nmeros// n | C | // | C | es el nmero de elementos de C// m c0 para i 1 hasta n hacer si ci > m entonces m ci devolver m Sobre la notacin:

21

[FUNDAMENTOS DE PROGRAMACIN]

"" representa una asignacin: m x significa que la variable m toma el valor de x; "devolver" termina el algoritmo y devuelve el valor a su derecha (en este caso, el mximo de C).

Implementacin En lenguaje C++: int max(int c[], int n) { int i, m = c[0]; for (i = 1; i < n; i++) if (c[i] > m) m = c[i]; return m;

UNIDAD III, ELEMENTOS PARA SOLUCIONAR PROBLESMAS EN PSEUDOCDICO

3.1 ESTRUCTURA DE DATOS En programacin, una estructura de datos es una forma de organizar un conjunto de datos elementales con el objetivo de facilitar su manipulacin. Un dato elemental es la mnima informacin que se tiene en un sistema. Una estructura de datos define la organizacin e interrelacin de stos y un conjunto de operaciones que se pueden realizar sobre ellos. Las operaciones bsicas son:

Alta, adicionar un nuevo valor a la estructura. Baja, borrar un valor de la estructura. Bsqueda, encontrar un determinado valor en la estructura para realizar una operacin con este valor, en forma secuencial o binario (siempre y cuando los datos estn ordenados).

22

[FUNDAMENTOS DE PROGRAMACIN]

Otras operaciones que se pueden realizar son:

Ordenamiento, de los elementos pertenecientes a la estructura. Apareo, dadas dos estructuras originar una nueva ordenada y que contenga a las apareadas.

Cada estructura ofrece ventajas y desventajas en relacin a la simplicidad y eficiencia para la realizacin de cada operacin. De esta forma, la eleccin de la estructura de datos apropiada para cada problema depende de factores como la frecuencia y el orden en que se realiza cada operacin sobre los datos.

3.2. OPERACIONES PRIMITIVAS ELEMENTALES Las operaciones primitivas elementales son las acciones bsicas que la computadora puede ejecutar. A continuacin estudiaremos las caractersticas bsicas de cada una; 1. Definir variables (var) Esta accin permite definir las variables necesarias mediante el siguiente formato: var NOM_VARIABLE_1: tipo de dato; NOM_VARIABLE_2: tipo de dato; . . . NOM_VARIABLE_N: tipo de dato; Donde: Var Es la palabra reservada que indica que se definirn variables. NOM_VARIABLE_1, Son los nombres de variables, de acuerdo a los lineamientos NOM_VARIABLE_2, establecidos.

NOM_VARIABLE_N23

[FUNDAMENTOS DE PROGRAMACIN]

Tipo de dato ;

Indica el tipo de dato que tendr la variable, a saber: Integer, Real, String, etc. Indica la finalizacin de cada definicin.

Ejemplo: -------------------------------------------------------------------------Vamos a suponer una situacin del pago de sueldo por horas trabajadas. Tendremos que hacer lo siguiente: Var NOMBRE: string[30]; HRSTRAB: integer; CUOTAHR: real; SUELDO: real;

2. Lectura de datos (read, readln) Permite introducir los datos a la computadora. La introduccin de datos puede hacerse desde un teclado, un archivo en un disco, un ratn (mouse) o desde cualquier otro dispositivo de entrada. El dispositivo estndar de entrada es el teclado. El formato para leer datos es: read(NOM_VARIABLE_1, NOM_VARIABLE_2, ..., NOM_VARIABLE_N); o read(NOM_VARIABLE_1, NOM_VARIABLE_2, ..., NOM_VARIABLE_N); Donde: read o readln Indican que se har una lectura de datos. NOM_VARIABLE_1, Son los nombres de variables en las que se leern los datos. NOM_VARIABLE_2, NOM_VARIABLE_N24

[FUNDAMENTOS DE PROGRAMACIN]

;

Indica el fin de la instruccin.

Ejemplo: -------------------------------------------------------------------------Para la situacin de pago de sueldo que venimos siguiendo, se deben leer el nombre del empleado, las horas trabajadas y la cuota por hora: read(NOMBRE, HRSTRAB, CUOTAHR); O tambin se puede con: read(NOMBRE, HRSTRAB, CUOTAHR); Esta instruccin espera a que se tecleen los datos correspondientes, los cuales se almacenarn en las variables especificadas. Nota: Colocarle ln al read significa que el cursor saltar al inicio del siguiente rengln, en caso de no tenerlo, el cursor se queda en el lugar en donde est cuando se termine de hacer la lectura.

3. Escritura de datos (write, writeln) Mediante la escritura damos salida a los datos de la computadora hacia un medio perifrico como por ejemplo el monitor (pantalla de video CRT), la impresora, disco u otro. La salida estndar es el video. Formato: write(ELEMENTO_1, ELEMENTO_2, ..., ELEMENTO_N); o writeln(ELEMENTO_1, ELEMENTO_2, ..., ELEMENTO_N); Donde:25

[FUNDAMENTOS DE PROGRAMACIN]

write o writeln Identifica la accin de escritura, ln provoca un salto al inicio del siguiente rengln despus de imprimir. ELEMENTO_1, Son los elementos que se imprimirn, estos pueden ser valores ELEMENTO_2 constantes enteros, reales o carcter, o bien, variables, donde ELEMENTO_N ; se coloca el nombre de las mismas y se imprime su contenido. Indica el fin de la instruccin.

Ejemplo: -------------------------------------------------------------------------En el ejemplo que venimos siguiendo se debe imprimir como resultado el nombre del empleado y su sueldo. con la instruccin: write(NOMBRE, SUELDO); Se indica que se imprimen el nombre y el sueldo, que es la informacin requerida en este problema. Nota: En caso de acompaar los datos con un letrero, se hace ponindolo entre apstrofos, por ejemplo: writeln(NOMBRE:,NOMBRE,SUELDO:,SUELDO); Se imprime el letrero NOMBRE, luego se imprime el contenido de la variable NOMBRE, enseguida se imprime el letrero SUELDO y por ltimo se imprime el contenido de la variable SUELDO. Cuando se escriben varios elementos en un write, Turbo Pascal no deja espacios entre los mismos, si se desean espacios entre los elementos, se deben colocar explcitamente entre apstrofos, de la siguiente manera: writeln(ELEMENTO_1, , ELEMENTO_2, , ELEMENTO_3);

Ejemplo: -------------------------------------------------------------------------Si X tiene el valor 426

[FUNDAMENTOS DE PROGRAMACIN]

Y tiene el valor 5 Z tiene el valor 6 Y se imprime write(X, Y, Z); se imprimir 456, pero si imprimimos write(X, ,Y, ,Z); se imprimir 4 5 6; es decir, con espacios.

Longitud del campo de impresin Cuando se imprime un elemento, se puede indicar la longitud en nmero de caracteres que utilizar al imprimirse. Formato: Writeln(ELEMENTO_1:longitud, ELEMENTO_2: longitud); Donde: Longitud es un nmero entero que indica el nmero de caracteres que se utilizarn al imprimirse el ELEMENTO. Ejemplo: -------------------------------------------------------------------------write(X:3, Y:3, Z:3); sera otra forma de imprimir con espacios los valores de X, Y y Z; porque imprime X que tiene el valor de 5, en 3 espacios; y como 5 ocupa slo un espacio, entonces deja los restantes dos espacios en blanco.

27

[FUNDAMENTOS DE PROGRAMACIN]

Impresin de variables de tipo real En el caso de las variables de tipo real, Turbo Pascal permite definir cuntos decimales se imprimirn de la forma siguiente: Writeln(ELEMENTO_1:longitud:decimales); Donde: Decimales es un nmero entero que indica el nmero de decimales que deseamos se imprimirn; en caso de no indicares, se imprime en formato exponencial o cientfico. Ejemplo: -------------------------------------------------------------------------Si X tiene el valor 125.45 writeln(X); writeln(X:8); writeln(X:6:2); writeln(X:8:2); writeln(X:8:4); imprimir 1.254500000E+02 imprimir 1.25E+02 imprimir 125.45 imprimir 125.45 imprimir 125.4500

3.3 ESCRITURA DE ALGORITMOS/PROGRAMAS

28

[FUNDAMENTOS DE PROGRAMACIN]

En pseudocdigo el programa tiene dos partes, la cabecera y el cuerpo. La cabecera contiene el nombre del algoritmo, y el cuerpo contiene 2 partes. La primera es la zona de declaraciones de var y const, y la segunda es la zona de las instrucciones del programa. En la zona de instrucciones para que quede ms legible hay que usar la identacin y si es necesario hay que usar comentarios entre llaves. EJERCICIOS: 1. Cules y cuntos son los nmeros primos comprendidos entre 1 y 1000? Algoritmo n_primos Const Primero=1 Limite=1000 Var cont, i, 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 = 029

[FUNDAMENTOS DE PROGRAMACIN]

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. Calcular el mximo de nmeros positivos introducidos por teclado, sabiendo que metemos nmeros hasta que introduzcamos uno negativo. El negativo no cuenta. Algoritmo maximo Var Num, max: entero Inicio Max 0 Escribir Introduzca n positivos y para acabar introduzca uno negativo Leer num Mientras num >=0 Si num >max30

[FUNDAMENTOS DE PROGRAMACIN]

Entonces max num Fin si Leer num Fin mientras Escribir El mayor nmero es max Fin 3. Determinar cuales son los mltiplos de 5 comprendidos entre 1 y N. 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, OTROS TIPOS DE DATOS4.1 TIPOS DE DATOS DEFINIDOS POR EL USUARIO31

[FUNDAMENTOS DE PROGRAMACIN]

En los lenguajes de programacin y en otros programas utilitarios tales como una planilla de clculos, 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. Esto incluye imponer restricciones en los datos, como qu valores pueden tomar y qu operaciones se pueden realizar. Tipos de datos comunes son: enteros, nmeros de coma flotante (decimales), cadenas alfanumricas, fechas, horas, colores, coches o cualquier cosa que se nos ocurra. Por ejemplo, en Java, el tipo "int" representa un conjunto de enteros de 32 bits cuyo rango va desde el -2.147.483.648 al 2.147.483.647, as como las operaciones que se pueden realizar con los enteros, como la suma, resta y multiplicacin. Los colores, por otra parte, se representan como tres bytes denotando la cantidad de rojo, verde y azul, y una cadena de caracteres representando el nombre del color; las operaciones permitidas incluyen la adicin y sustraccin, pero no la multiplicacin. ste es un concepto propio de la informtica, ms especficamente de los lenguajes de programacin, aunque tambin se encuentra relacionado con nociones similares de las matemticas y la lgica. En un sentido amplio, un tipo de datos define un conjunto de valores y las operaciones sobre estos valores.1 Casi todos los lenguajes de programacin explcitamente incluyen la notacin del tipo de datos, aunque lenguajes diferentes pueden usar terminologa diferente. La mayor parte de los lenguajes de programacin permiten al programador definir tipos de datos adicionales, normalmente combinando mltiples elementos de otros tipos y definiendo las operaciones del nuevo tipo de dato. Por ejemplo, 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. Un tipo de dato puede ser tambin visto como una limitacin impuesta en la interpretacin de los datos en un sistema de tipificacin, describiendo la representacin, interpretacin y la estructura de los valores u objetos almacenados en la memoria del ordenador. El sistema de tipificacin usa informacin de los tipos de datos para comprobar la verificacin de los programas que acceden o manipulan los datos.32

[FUNDAMENTOS DE PROGRAMACIN]

Tipos de datos mquina Todos los datos en los ordenadores basados en la electrnica digital se representan como bits (valores 0 y 1) en el nivel ms bajo. La ms pequea unidad direccionable de datos es un grupo de bits llamado un byte (normalmente un octeto, que son 8 bits). La unidad procesada por las instrucciones del cdigo mquina se le llama una palabra (en 2006, normalmente 32 o 64 bits). La mayor parte de las instrucciones interpretan la palabra como un nmero binario, 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. Por medio del complemento a dos, la mayor parte del tiempo, el lenguaje mquina y la propia mquina no necesitan distinguir entre tipos de datos con o sin signo. Existe un especfico conjunto de instrucciones aritmticas que usa una diferente interpretacin de los bits de una palabra como nmero en coma flotante. [Tipos de datos primitivos Se ha sugerido que este artculo o seccin sea fusionado con Tipo de dato#Tipos simples (ver la discusin al respecto). Una vez que hayas realizado la fusin de artculos, pide la fusin de historiales en WP:TAB/F. Los tipos de datos hacen referencia al tipo de informacin que se trabaja, donde la unidad mnima de almacenamiento es el dato, tambin se puede considerar como el rango de valores que puede tomar una variable durante la ejecucin del programa. DATOS PRIMITIVOS:

CARACTER NUMERICO LOGICOS(BOOLEANOS)

CARCTER33

[FUNDAMENTOS DE PROGRAMACIN]

El tipo de dato carcter es un digito individual el cual se puede representar como numricos (0 al 9), letras (a-z) y smbolo ($,_). NOTA: En lenguaje java la codificacin Unicode permite trabajar con todos los caracteres de distintos idiomas.

Tipo de dato Rango Tamao de bits char 0 a 65536 16 bits NUMERICOS Este tipo de dato puede ser real o entero, dependiendo del tipo de dato que se vaya a utilizar. Enteros: son los valores que no tienen punto decimal, pueden ser positivos o negativos y el cero.

tipo tipo tipo tipo

de de de de

dato: dato: dato: dato:

byte short int long

tamao= 8 bits tamao= 16 bits tamao= 32 bits tamao= 64 bits

Reales: estos caracteres almacenan numeros muy grandes que poseen parte entera y parte decimal.

tipo de dato: float= 32 bits tipo de dato: double= 64 bits BOOLEANOS Este tipo de dato se emplea para valores lgicos, los podemos definir como datos comparativos dicha comparacin devuelve resultados lgicos. tipo de dato: boolean Tipos simples

Rango= true false

Tipo Ordinal

34

[FUNDAMENTOS DE PROGRAMACIN]

Tipos predefinidos Tipo de dato entero Tipo de dato carcter Tipo de dato lgico 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 cronolgico o Tipo de dato punteroo

4.2 APUNTADORES (POINTER)

Los apuntadores son una parte fundamental de C. Si usted no puede usar los apuntadores apropiadamente entonces esta perdiendo la potencia y la flexibilidad que C ofrece bsicamente. El secreto para C esta en el uso de apuntadores. C usa los apuntadores en forma extensiva. Porqu?

Es la nica forma de expresar algunos clculos. Se genera cdigo compacto y eficiente. Es una herramienta muy poderosa.

C usa apuntadores explcitamente con:

Es la nica forma de expresar algunos clculos. Se genera cdigo compacto y eficiente. Es una herramienta muy poderosa.

C usa apuntadores explcitamente con:

Arreglos, Estructuras y Funciones

Definicin de un apuntador

35

[FUNDAMENTOS DE PROGRAMACIN]

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

[FUNDAMENTOS DE PROGRAMACIN]

int *ap; ap = &x; 100 200 x1 y2 1000 ap 100

Las variables x e y son declaradas e inicializadas con 1 y 2 respectivamente, ap es declarado como un apuntador a entero y se le asigna la direccin de x (&x). Por lo que ap se carga con el valor 100. y = *ap; 100 200 x1 y1 1000 ap 100

Despus y obtiene el contenido de ap. En el ejemplo ap apunta a la localidad de memoria 100 -- la localidad de x. Por lo tanto, y obtiene el valor de x -- el cual es 1. x = ap; 100 200 1000 x 100 y 1 ap 100 Como se ha visto C no es muy estricto en la asignacin de valores de diferente tipo (apuntador a entero). As que es perfectamente legal (aunque el compilador genera un aviso de cuidado) asigna el valor actual de ap a la variable x. El valor de ap en ese momento es 100. *ap = 3; 100 200 1000 x 3 y 1 ap 100 Finalmente se asigna un valor al contenido de un apuntador (*ap). Importante: Cuando un apuntador es declarado apunta a algn lado. Se debe inicializar el apuntador antes de usarlo. Por lo que: main()37

[FUNDAMENTOS DE PROGRAMACIN]

{ int *ap; *ap = 100; } puede generar un error en tiempo de ejecucin o presentar un comportamiento errtico. El uso correcto ser: main() { int *ap; int x; ap = &x; *ap = 100; } Con los apuntadores se puede realizar tambin aritmtica entera, por ejemplo: main() { float *flp, *flq; *flp = *flp + 10; ++*flp; (*flp)++; flq = flp; } NOTA: Un apuntador a cualquier tipo de variables es una direccin en memoria -- la cual es una direccin entera, pero un apuntador NO es un entero. La razn por la cual se asocia un apuntador a un tipo de dato, es por que se debe conocer en cuantos bytes esta guardado el dato. De tal forma, que cuando se incrementa un apuntador, se38

[FUNDAMENTOS DE PROGRAMACIN]

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

[FUNDAMENTOS DE PROGRAMACIN]

temp = *px; /* guarda el valor de la direccion x */ *px = *py; /* pone y en x */ *py = temp; /* pone x en y */ } Apuntadores y arreglos Existe una relacin estrecha entre los punteros y los arreglos. En C, un nombre de un arreglo es un ndice a la direccin de comienzo del arreglo. En esencia, el nombre de un arreglo es un puntero al arreglo. Considerar lo siguiente: int a[10], x; int *ap; ap = &a[0]; x = *ap; 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; /* Se asigna al segundo elemento de 'a' el valor 100 usando ap*/ Como se puede observar en el ejemplo la sentencia a[t] es idntica a ap+t. Se debe tener cuidado ya que C no hace una revisin de los lmites del arreglo, por lo que se puede ir fcilmente ms alla del arreglo en memoria y sobreescribir otras cosas. C sin embargo es mucho ms stil en su relacin entre arreglos y apuntadores. Por ejemplo se puede teclear solamente: ap = a; en vez de ap = &a[0]; y tambin *(a + i) en vez de a[i], esto es, &a[i] es equivalente con a+i. Y como se ve en el ejemplo, 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

[FUNDAMENTOS DE PROGRAMACIN]

Un apuntador es una variable. Se puede hacer ap = a y ap+ +. Un arreglo NO ES una variable. Hacer a = ap y a++ ES ILEGAL.

Este parte es muy importante, asegrese haberla entendido. Con lo comentado se puede entender como los arreglos son pasados a las funciones. Cuando un arreglo es pasado a una funcin lo que en realidad se le esta pasando es la localidad de su elemento inicial en memoria. Por lo tanto: strlen(s) es equivalente a strlen(&s[0]) Esta es la razn por la cual se declara la funcin como: int strlen(char s[]); y una declaracin equivalente es int strlen(char *s); ya que char s[] es igual que char *s. La funcin strlen() es una funcin de la biblioteca estndar que regresa la longitud de una cadena. Se muestra enseguida la versin de esta funcin que podra escribirse: int strlen(char *s) { char *p = s; while ( *p != '\0' ) p++; return p - s; } Se muestra enseguida una funcin para copiar una cadena en otra. Al igual que en el ejercicio anterior existe en la biblioteca estndar una funcin que hace lo mismo. void strcpy(char *s, char *t) { while ( (*s++ = *t++) != '\0' );41

[FUNDAMENTOS DE PROGRAMACIN]

} En los dos ltimos ejemplos se emplean apuntadores y asignacin por valor. Nota: Se emplea el uso del caracter nulo con la sentencia while para encontrar el fin de la cadena. Arreglos de apuntadores En C se pueden tener arreglos de apuntadores ya que los apuntadores son variables. A continuacin se muestra un ejemplo de su uso: ordenar las lneas de un texto de diferente longitud. Los arreglos de apuntadores son una representacin de datos que manejan de una forma eficiente y conveniente lneas de texto de longitud variable. Cmo se puede hacer lo anterior?1. Guardar todas las lneas en un arreglo de tipo char grande.

Observando que \n marca el fin de cada lnea. Ver figura 8.1. 2. Guardar los apuntadores en un arreglo diferente donde cada apuntador apunta al primer caracter de cada lnea. 3. Comparar dos lneas usando la funcin de la biblioteca estndar strcmp(). 4. Si dos lneas estn desacomodadas -- intercambiar (swap) los apuntadores (no el texto).

Figura 8.1: Arreglos de apuntadores (Ejemplo de ordenamiento de cadenas).42

[FUNDAMENTOS DE PROGRAMACIN]

Con lo anterior se elimina:

el manejo complicado del almacenamiento. alta sobrecarga por el movimiento de lneas.

Arreglos multidimensionales y apuntadores Un arreglo multidimensional puede ser visto en varias formas en C, por ejemplo: Un arreglo de dos dimensiones es un arreglo de una dimensin, donde cada uno de los elementos es en s mismo un arreglo. Por lo tanto, la notacin a[n][m] nos indica que los elementos del arreglo estn guardados rengln por rengln. Cuando se pasa una arreglo bidimensional a una funcin se debe especificar el nmero de columnas -- el nmero de renglones es irrelevante. La razn de lo anterior, es nuevamente los apuntadores. C requiere conocer cuantas son las columnas para que pueda brincar de rengln en rengln en la memoria. Considerando que una funcin deba recibir int a[5][35], se puede declarar el argumento de la funcin como: f( int a[][35] ) { ..... } o an f( int (*a)[35] ) { ..... } En el ltimo ejemplo se requieren los parnteis (*a) ya que [ ] tiene una precedencia ms alta que *. Por lo tanto: int (*a)[35]; declara un apuntador a un arreglo de 35 enteros, y por ejemplo si hacemos la siguiente referencia a+2, nos estaremos43

[FUNDAMENTOS DE PROGRAMACIN]

refiriendo a la direccin del primer elemento que se encuentran en el tercer rengln de la matriz supuesta, mientras que int *a[35]; declara un arreglo de 35 apuntadores a enteros. Ahora veamos la diferencia (sutil) entre apuntadores y arreglos. El manejo de cadenas es una aplicacin comn de esto. Considera: char *nomb[10]; char anomb[10][20]; En donde es vlido hacer nomb[3][4] y anomb[3][4] en C. Sin embargo: anomb es un arreglo verdadero de 200 elementos de dos dimensiones tipo char. El acceso de los elementos anomb en memoria se hace bajo la siguiente frmula 20*renglon + columna + direccin_base En cambio nomb tiene 10 apuntadores a elementos. NOTA: si cada apuntador en nomb indica un arreglo de 20 elementos entonces y solamente entonces 200 chars estarn disponibles (10 elementos). Con el primer tipo de declaracin se tiene la ventaja de que cada apuntador puede apuntar a arreglos de diferente longitud. Considerar: char *nomb[] = { "No mes", "Ene", "Feb", "Mar", .... }; char anomb[][15] = { "No mes", "Ene", "Feb", "Mar", ... }; Lo cual grficamente se muestra en la figura 8.2. Se puede indicar que se hace un manejo ms eficiente del espacio haciendo uso de un arreglo de apuntadores y usando un arreglo bidimensional.44

[FUNDAMENTOS DE PROGRAMACIN]

Figura 8.2: apuntadores.

Arreglo

de

2

dimensiones

VS.

arreglo

de

Inicializacin esttica de arreglos de apuntadores La inicializacin de arreglos de apuntadores es una aplicacin ideal para un arreglo esttico interno, por ejemplo: func_cualquiera() { static char *nomb[] = { "No mes", "Ene", "Feb", "Mar", .... }; } Recordando que con el especificador de almacenamiento de clase static se reserva en forma permanente memoria el arreglo, mientras el cdigo se esta ejecutando. Apuntadores y estructuras Los apuntadores a estructuras se definen fcilmente y en una forma directa. Considerar lo siguiente: main() { struct COORD { float x,y,z; } punto;45

[FUNDAMENTOS DE PROGRAMACIN]

struct COORD *ap_punto; punto.x = punto.y = punto.z = 1; ap_punto = &punto; /* Se asigna punto al apuntador */ ap_punto->x++; miembros */ ap_punto->y+=2; 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; struct ELEMENTO *sig; } ELEMENTO; ELEMENTO n1, n2; n1.sig = &n2; La asignacin que se hace corresponde a la figura 8.3

Figura : Esquema de una lista ligada con 2 elementos. Nota: Solamente se puede declarar sig como un apuntador tipo ELEMENTO. No se puede tener un elemento del tipo variable ya que esto generara una definicin recursiva la cual no esta permitida. Se permite poner una referencia a un apuntador ya que los los bytes se dejan de lado para cualquier apuntador. Fallas comunes con apuntadores

46

[FUNDAMENTOS DE PROGRAMACIN]

A continuacin se muestran dos errores comunes que se hacen con los apuntadores.

No asignar un apuntador a una direccin de memoria antes de usarlo int *x

*x = 100;

lo adecuado ser, tener primeramente una localidad fsica de memoria, digamos int y; int *x, y; x = &y; *x = 100;

Indireccin no vlida Supongamos que se tiene una funcin llamada malloc() la cual trata de asignar memoria dinmicamente (en tiempo de ejecucin), la cual regresa un apuntador al bloque de memoria requerida si se pudo o un apuntador a nulo en otro caso. char *malloc() -- una funcin de la biblioteca estndar que se ver ms adelante. Supongamos que se tiene un apuntador char *p Considerar: *p = (char *) malloc(100): memoria */ *p = 'y'; Existe un error en el cdigo anterior. Cul es? El * en la primera lnea ya que malloc regresa un apuntador y *p no apunta a ninguna direccin. El cdigo correcto deber ser: /* pide 100 bytes de la

47

[FUNDAMENTOS DE PROGRAMACIN]

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 cdigo 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 tcnica de programacin importante. Se utiliza para realizar una llamada a una funcin desde la misma funcin. Como ejemplo til se puede presentar el clculo de nmeros factoriales. l factorial de 0 es, por definicin, 1. Los factoriales de nmeros mayores se calculan mediante la multiplicacin de 1 * 2 * ..., incrementando el nmero de 1 en 1 hasta llegar al nmero para el que se est calculando el factorial. El siguiente prrafo muestra una funcin, expresada con palabras, que calcula un factorial. "Si el nmero es menor que cero, se rechaza. Si no es un entero, se redondea al siguiente entero. Si el nmero es cero, su factorial es uno. Si el nmero es mayor que cero, se multiplica por l factorial del nmero menor inmediato."48

[FUNDAMENTOS DE PROGRAMACIN]

Para calcular el factorial de cualquier nmero mayor que cero hay que calcular como mnimo el factorial de otro nmero. La funcin que se utiliza es la funcin en la que se encuentra en estos momentos, esta funcin debe llamarse a s misma para el nmero menor inmediato, para poder ejecutarse en el nmero actual. Esto es un ejemplo de recursividad. La recursividad y la iteracin (ejecucin en bucle) estn muy relacionadas, cualquier accin que pueda realizarse con la recursividad puede realizarse con iteracin y viceversa. Normalmente, un clculo determinado se prestar a una tcnica u otra, slo necesita elegir el enfoque ms natural o con el que se sienta ms cmodo. Claramente, esta tcnica puede constituir un modo de meterse en problemas. Es fcil crear una funcin recursiva que no llegue a devolver nunca un resultado definitivo y no pueda llegar a un punto de finalizacin. 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 recursin veamos un poco lo referente a la secuencia de Fibonacci. Principalmente habra 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 definicin recursiva (define un objeto en trminos 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 definicin 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 PROGRAMACIN]

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

Obsrvese que la definicin recursiva de los nmeros de Fibonacci difiere de las definiciones recursivas de la funcin factorial y de la multiplicacin . La definicin 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) tambin implica calcular fib (4), as que al aplicar la definicin hay mucha redundancia de clculo. En ejemplo anterior, fib(3) se calcula tres veces por separado. Sera 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 mtodo 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) ; Comprese el numero de adiciones (sin incluir los incrementos de la variable ndice, i) que se ejecutan para calcular fib (6) mediante este algoritmo al usar50

[FUNDAMENTOS DE PROGRAMACIN]

la definicin recursiva. En el caso de la funcin factorial, tienen que ejecutarse el mismo numero de multiplicaciones para calcular n! Mediante ambos mtodos: recursivo e iterativo. Lo mismo ocurre con el numero de sumas en los dos mtodos al calcular la multiplicacin. Sin embargo, en el caso de los nmeros de Fibonacci, el mtodo recursivo es mucho mas costoso que el iterativo. 4.4 CLASIFICACIN (ORDENACIN) DE DATOS La ordenacin de los datos se realiza por orden alfabtico o numrico. Por ejemplo, una lista de piezas se podra clasificar segn el nmero de pieza y una lista de clientes, por el apellido. Normalmente, se ordena la informacin alfabtica (nombre de almacn, cliente, etc.) por orden alfabtico y la numrica (cifras de ventas, cantidad de unidades vendidas, etc.) por orden numrico. En ambos casos, se pueden ordenar los datos de menor a mayor, es decir, de la A a la Z, del 1 al 10 o a la inversa. NOTA: Aunque los ejemplos de esta seccin muestran la ordenacin de la A a la Z, Discoverer ordena los datos segn la secuencia alfabtica ms adecuada para el idioma seleccionado. Consulte al Administrador de Discoverer para configurar la ordenacin ms conveniente para su idioma. La ordenacin es tambin til para analizar datos. Por ejemplo, la ordenacin de datos de ventas de mayor a menor rentabilidad muestra los productos ms vendidos de la compaa o el personal de ventas ms eficaz. Adems de la ordenacin simple, puede tambin ordenar datos dentro de otros datos. Por ejemplo, existen compaas que habitualmente lanzan campaas postales basadas en las direcciones de clientes con un cdigo postal determinado. Puede ordenar los datos por este cdigo y, a continuacin, por direccin dentro del cdigo. 4.5 EJECUCIN EJECUTABLES DE OTROS PROGRAMAS EN CDIGOS

51

[FUNDAMENTOS DE PROGRAMACIN]

Un programa informtico es un conjunto de instrucciones que una vez ejecutadas realizarn una o varias tareas en una computadora. Sin programas, estas mquinas no pueden funcionar.1 2 Al conjunto general de programas, se le denomina software, que ms genricamente se refiere al equipamiento lgico o soporte lgico de una computadora digital. En informtica, se los denomina comnmente binarios, (propio en sistemas unix, donde debido a la estructura de este ltimo, los ficheros no necesitan hacer uso de extensiones. Posteriormente, los presentaron como ficheros ejecutables, con extensin .exe, en los sistemas operativos de la familia Windows) debido a que una vez que han pasado por el proceso de compilacin y han sido creados, las instrucciones que se escribieron en un lenguaje de programacin que los humanos usan para escribirlos con mayor facilidad, se han traducido al nico idioma que la mquina comprende, combinaciones de ceros y unos llamada cdigo mquina. El mismo trmino, puede referirse tanto a un programa ejecutable, como a su cdigo fuente, el cual es transformado en un binario cuando es compilado. Generalmente el cdigo fuente lo escriben profesionales conocidos como programadores. 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. Cuando se pide que el programa sea ejecutado, el procesador ejecuta instruccin por instruccin. De acuerdo a sus funciones, se clasifican en software de sistema y software de aplicacin. En los computadores actuales, al hecho de ejecutar varios programas de forma simultnea y eficiente, se le conoce como multitarea.

Ejecucin Una vez escritos, pueden ser ejecutados de diversas formas:

Mediante un programa que va adaptando las instrucciones conforme son encontradas. A este proceso se lo llama interpretar y a los programas que lo hacen se los conoce como intrpretes. Ejemplos de esto son bash, clsico en estaciones

52

[FUNDAMENTOS DE PROGRAMACIN]

Unix y que fue escrito para el proyecto GNU o Python, cuya peculiaridad adems de ser multipropsito, est en su facilidad de uso y productividad y de hecho, es usado en parte de los proyectos Google y YouTube.3 Traduciendo el cdigo escrito del programa (lo que se denomina cdigo fuente), a su equivalente en lenguaje mquina. A este proceso se le llama compilar y al programa traductor se le denomina compilador. Ejemplos de esto son: El lenguaje C, que combina en su sintaxis caractersticas de medio y bajo nivel y el compilador gcc usado en el proyecto GNU.

Programas que se auto-modifican Un programa en ejecucin se trata de forma diferente que los datos en los cuales opera. De cualquier forma, en algunos casos sta distincin es ambigua, especialmente cuando un programa se modifica a s mismo. El programa modificado es secuencialmente ejecutado como parte del mismo programa. Se pueden escribir programas auto-modificables en lenguajes como Lisp, COBOL y Prol Ejecucin y almacenamiento de los programas Tpicamente, los programas se almacenan en una memoria no voltil (por ejemplo un disco), para que luego el usuario de la computadora, directa o indirectamente, solicite su ejecucin. Al momento de dicha solicitud, el programa es cargado en la memoria de acceso aleatorio o RAM del equipo, bajo el control del software llamado sistema operativo, el cual puede acceder directamente al procesador. El procesador ejecuta (corre) el programa, instruccin por instruccin hasta que termina. A un programa en ejecucin se le suele llamar tambin proceso. Un programa puede terminar su ejecucin en forma normal o por causa de un error, dicho error puede ser de software o de hardware. Programas empotrados en hardware

53

[FUNDAMENTOS DE PROGRAMACIN]

El microcontrolador a la derecha de la Memoria USB est controlada por un firmware empotrado. Algunos programas estn empotrados en el hardware. Una computadora con arquitectura de programas almacenados requiere un programa inicial almacenado en su ROM para arrancar. El proceso de arranque es para identificar e inicializar todos los aspectos del sistema, desde los registros del procesador, controladores de dispositivos hasta el contenido de la memoria RAM.4 Seguido del proceso de inicializacin, este programa inicial carga al sistema operativo e inicializa al contador de programa para empezar las operaciones normales. Independiente de la computadora, un dispositivo de hardware podra tener firmware empotrado para el control de sus operaciones. El firmware se utiliza cuando se espera que el programa cambie en raras ocasiones o nunca, o cuando el programa no debe perderse cuando haya ausencia de energa.5 Programas cargados manualmente

Interruptores para la carga manual en una Data General Nova 3. Los programas histricamente se cargaron manualmente al procesador central mediante interruptores. Una instruccin era representada por una configuracin de estado abierto o cerrado de los interruptores. Despus de establecer la configuracin, se54

[FUNDAMENTOS DE PROGRAMACIN]

ejecutaba un botn de ejecucin. Este proceso era repetitivo. Tambin, histricamente los programas se cargaban manualmente mediante una cinta de papel o tarjetas perforadas. Despus de que el programa se cargaba, la direccin de inicio se estableca mediante interruptores y el botn de ejecucin se presionaba.6 Programas generados automticamente La programacin automtica es un estilo de programacin que crea cdigo fuente mediante clases genricas, prototipos, plantillas, aspectos, y generadores de cdigo para aumentar la productividad del programador. El cdigo fuente se genera con herramientas de programacin tal como un procesador de plantilla o un IDE. La forma ms simple de un generador de cdigo fuente es un procesador macro, tal como el preprocesador de C, que reemplaza patrones de cdigo fuente de acuerdo a reglas relativamente simples. Un motor de software da de salida cdigo fuente o lenguaje de marcado que simultneamente se vuelve la entrada de otro proceso informtico. Podemos pensar como analoga un proceso manejando a otro siendo el cdigo mquina quemado como combustible. Los servidores de aplicaciones son motores de software que entregan aplicaciones a computadoras cliente. Por ejemplo, un software para wikis es un sevidor de aplicaciones que permite a los usuarios desarrollar contenido dinmico ensamblado a partir de artculos. Las Wikis generan HTML, CSS, Java, y Javascript los cuales son interpretados por un navegador web. Ejecucin simultnea Muchos programas pueden correr simultneamente en la misma computadora, a lo cual se le conoce como multitarea y puede lograrse a travs de mecanismos de software o de hardware. Los sistemas operativos modernos pueden correr varios programas a travs 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 estn corriendo.7 Tambin se puede lograr la multitarea por medio del hardware; las computadoras modernas que usan varios procesadores o procesadores con varios ncleos pueden correr muchos programas a la vez.855

[FUNDAMENTOS DE PROGRAMACIN]

Categoras funcionales Los programas se pueden categorizar segn lneas funcionales. Estas categoras funcionales son software de sistema y software de aplicacin. El software de sistema incluye al sistema operativo el cual acopla el hardware con el software de aplicacin.9 El propsito del sistema operativo es proveer un ambiente en el cual el software de aplicacin se ejecuta de una manera conveniente y eficiente.9 Adems del sistema operativo, el software de sistema incluye programas utilitarios que ayudan a manejar y configurar la computadora. Si un programa no es software de sistema entonces es software de aplicacin. El middleware tambin es un software de aplicacin que acopla el software de sistema con la interfaz de usuario. Tambin son software de aplicacin los programas utilitarios que ayudan a los usuarios a resolver problemas de aplicaciones, como por ejemplo la necesidad de ordenamiento

4.6 GRAFICACIN EN PSEUDOCDICO

a) Descripcin Narrada b) Pseudocdigo c) Diagramas de Flujo d) Diagramas N- S (Nassi-Schneiderman o de Chapin) Descripcin Este algoritmo es caracterizado porque sigue un proceso de ejecucin comn y lgico, describiendo textualmente paso a paso cada una de las actividades a realizar dentro de una actividad determinada. Ejemplo 1 Algoritmo para asistir a clases: 1. Levantarse 2. Baarse56

[FUNDAMENTOS DE PROGRAMACIN]

3. Vestirse 4. Desayunar 5. Cepillarse los dientes 6. Salir de casa 7. Tomar el autobs 8. Llegar al ITCA 9. Buscar el aula 10. Ubicarse en un asiento Descripcin en Pseudocdigo

Pseudo = falso. El pseudo cdigo no es realmente un cdigo sino una imitacin y una versin abreviada de instrucciones reales para las computadoras. Es una tcnica para diseo de programas que permite definir las estructuras de datos, las operaciones que se aplicarn a los datos y la lgica que tendr el programa de computadora para solucionar un determinado problema. Utiliza un pseudolenguaje muy parecido a nuestro idioma, pero que respeta las directrices y los elementos de los lenguajes de programacin. Se concibi para superar las dos principales desventajas de los flujogramas: lento de crear y difcil de modificar sin un nuevo redibujo. Ejemplo 1 Disear un algoritmo que lea cuatro variables y calcule e imprima su producto, suma y media aritmtica. inicio leer (a, b, c, d) producto