programacion_estructurada_v14

Upload: israel-saavedra

Post on 15-Jul-2015

165 views

Category:

Documents


0 download

TRANSCRIPT

PEdro

Notas de Programacin EstructuradaLizbeth Gallardo Lpez Pedro Lara VelzquezDepartamento de Sistemas Divisin de Ciencias Bsicas e Ingeniera Universidad Autnoma Metropolitana Azcapotzalco

Julio de 2011

Notas de Programacin Estructurada

ndice Presentacin .. 1. Arquitectura de la Computadora.. o Modelo actual de la computadora o Software de base 2. Algoritmos .. o Componentes principales de un algoritmo o Programacin o Programacin estructurada o Diagramas de Flujo 3. Lenguaje C y FreeBasic ............. o C: Tipos de datos y operadores o FreeBasic: Tipos de datos y operadores o Primer programa: Hola Mundo! o Entrada y salida de datos 4. Estructuras de seleccin .. o Seleccin simple (if) o Seleccin binaria (if-else) o Seleccin encadenada (if - else if - else) o Seleccin mltiple (case) 5. Funciones .... o Conceptos bsicos o Paso de parmetro por valor o Paso de parmetro por referencia 6. Estructuras repetitivas . o Durante (for) o Mientras (while) o Haz - mientras (do-while) 7. Tipos de datos estructurados .. o Arreglos unidimensionales o Arreglos bidimensionales o Cadenas 8. Archivos . o Conceptos bsicos o Funciones usuales para el manejo de archivos Referencias .......... 2 3

9

14

25

35

43

54

68

77

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 1

Notas de Programacin EstructuradaPRESENTACINDesde finales de 1953, cuando John Backus propuso el lenguaje FORTRAN como una alternativa ms prctica a la programacin en lenguaje Ensamblador (muy cercano al lenguaje mquina), se han desarrollado una infinidad de lenguajes de programacin, as como dialectos de los mismos. Estos programas nos sirven para desarrollar algoritmos de solucin para resolver problemas de programacin concretos. A los algoritmos de solucin para un problema especfico se les llama programas. Un algoritmo se puede comparar a una receta de cocina, donde el conjunto de instrucciones ordenadas se definen una sola vez y despus puede ser repetido por otras personas. As, un algoritmo se propone una sola vez y despus puede ser traducido a varios lenguajes. En la actualidad existen distintos paradigmas de programacin: imperativo, funcional, orientado a objetos y lgico por mencionar solo algunos. La programacin imperativa estructurada la define Edsger Dijkstra como una filosofa para la implementacin de algoritmos a travs de un conjunto finito de estructuras bien organizadas. Dicho en otras palabras, la programacin estructurada parte un gran problema en pedazos ms pequeos, de tal forma que el programa final es el resultado de resolver cada subproblema de una manera ms sencilla. En estos apuntes se utilizan dos lenguajes de programacin estructurada: C y FreeBasic. Dentro de los lenguajes imperativos estructurados, C es el lenguaje ms utilizado en la actualidad por su versatilidad y por la gran cantidad de bibliotecas disponibles para los programadores. Una biblioteca contiene un conjunto funciones que pueden reutilizarse en soluciones a problemas especficos, por ejemplo: integracin y derivacin de funciones matemticas, generadores de interfaces de usuario. En contraste con el lenguaje ensamblador, el cual es considerado de bajo nivel porque todo se desarrolla muy cerca del lenguaje de mquina, C es considerado un lenguaje de nivel intermedio, ya que permite realizar aplicaciones que blindan al programador de los detalles de la arquitectura de hardware; pero si el programador lo requiere, C le permite comunicarse con ella. FreeBasic es considerado un lenguaje imperativo estructurado de alto nivel porque aunque puede comunicarse con la arquitectura de hardware, el programador no es consciente de ello. FreeBasic es ampliamente utilizado por desarrolladores que requieren rapidez en el clculo numrico, el cual es comparable con la rapidez proporcionada por compiladores C. A diferencia de C, FreeBasic permite hacer grficos bidimensionales con notable facilidad. Estas notas se dividen de la siguiente forma: los captulos 1 y 2 presentan una introduccin a la arquitectura actual de una computadora y al concepto de algoritmos; el captulo 3 hace una breve presentacin de los lenguajes C y FreeBasic; en el captulo 4 se presentan las estructuras de seleccin; el captulo 5 presenta el concepto de funcin, el cual es indispensable en el paradigma de programacin estructurada; el captulo 6 presenta las estructuras iterativas; el captulo 7 presenta el concepto de datos estructurados; finalmente, el captulo 8 presenta el manejo de archivos de texto.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 2

Notas de Programacin EstructuradaCAPTULO I ARQUITECTURA DE LA COMPUTADORAUna computadora est formada por: Hardware: Parte fsica o tangible: CPU, monitor, DD, etc. Software: Sistema Operativo, programas, algoritmos, etc.

Modelo actual de la Computadora

a) UNIDAD CENTRAL DE PROCESAMIENTO

Registros

b) MEMORIA

ALU

Unidad de control

Contador de programa

c) DISPOSITIVOS DE ENTRADA / SALIDA

La arquitectura de hardware de una computadora que prevalece hasta nuestros das se atribuye a John von Neumann y otros investigadores. Los principales componentes de la computadora son: a) Unidad central de procesamiento (CPU) Se encarga de realizar las operaciones aritmtico-lgicas con los datos, la forman: la Unidad Aritmtico Lgica, la Unidad de Control y la Unidad de Memoria. Unidad aritmtico-lgica (ALU)

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 3

Notas de Programacin EstructuradaEncargada de realizar operaciones: aritmticas y lgicas. Dentro de las operaciones aritmticas, distinguimos entre las unarias: incremento y decremento; y las binarias: +, , * y /. La forma de expresar las operaciones binarias es: A B = C Las operaciones lgicas son: NOT (unaria), AND, OR, XOR. A excepcin de la operacin de negacin, el resto son binarias. Ejemplo: p= llueve afuera; q= hay sol Diagrama Operacin lgica NOT (p) NOT (q) p AND q p OR q p XOR q Resultado No llueve afuera No hay sol llueve afuera y hay sol Llueve afuera o hay sol Llueve afuera o hay sol, pero solo uno de los dos

Unidad de Control Es la responsable de seleccionar las operaciones aritmtico-lgicas. Esto se logra a partir de varias lneas de control que pueden estar activas o inactivas. Por ejemplo para una ALU simple con 10 operaciones diferentes se necesitan cuatro lneas de control, las cuales pueden definir 16 (24) situaciones diferentes, diez de las cuales pueden usarse para las operaciones aritmtico-lgicas y el resto para otros propsitos. Ejemplo: 0000 0001 0010 0011 Neutro (no hay operacin por hacer) Operacin suma Operacin resta Operacin de multiplicacin. etc.

Registros 1. Registros de entrada. En el pasado las computadoras solo tenan un registro de entrada para alojar, por turnos, uno de los datos de entrada (el otro dato de entrada vena directamente de la memoria). Actualmente las computadoras utilizan docenas de registros para acelerar las operaciones, las cuales son cada vez ms complejas y requieren de varios registros para mantener los resultados intermedios. 2. Registros de instruccin (I). El CPU es el responsable de buscar las instrucciones en la memoria, una a una; luego debe almacenarlas en el registro de instruccin, interpretarlas y ejecutarlas. 3. Contador de programa (PC): Hace un seguimiento de la instruccin que se ejecuta actualmente; concluida la ejecucin, el contador se incrementa para apuntar a la direccin (de memoria) de la siguiente instruccin. Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 4

Notas de Programacin Estructuradab) Memoria Es una coleccin de localidades o celdas de almacenamiento. Cada localidad tiene un identificador nico conocido como direccin . Los datos se transfieren hacia y desde la memoria en grupos de bits llamados palabras.

0 00000000 . . . Direccin 255 111111111 Direccin Con 8 bits tenemos 256 direcciones posibles. 8 bits forman un byte. Existen varios tipos de memoria, de los cuales distinguiremos: 1) la memoria RAM y 2) la memoria ROM. Memoria RAM (Random Access Memory). Es la memoria principal de una computadora. Un usuario puede leer y escribir en la RAM mientras la mquina est encendida. La informacin es automticamente borrada si deja de alimentarse de energa elctrica a la computadora. Por esta caracterstica, a la RAM tambin se le llama memoria voltil. Memoria ROM (Read Only Memory). El contenido de esta memoria es grabada por el fabricante. De la informacin contenida en esta memoria podemos citar: datos del fabricante, modelo de la computadora, tipo de procesador, capacidad de almacenamiento, la fecha, etc. Tambin contiene un programa llamado BIOS el cual arranca o inicia a la computadora. Almacenamiento de datos en la Memoria Principal (RAM) Un bit es la unidad mnima de almacenamiento en una computadora; ste fsicamente es un condensador: si est cargado, entonces representa 1 (verdadero); si no est cargado, entonces representa 0 (falso). +++ ---1 0

A una celda de memoria tambin se le conoce con el nombre de palabra. Una palabra puede contener desde un patrn de 8 bits (ej. 10100100) hasta 64 bits (computadoras recientes).

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 5

Notas de Programacin EstructuradaAqu representamos a una memoria con cinco celdas; donde cada celda est formada por un patrn de 8 bits.Contenido

Otra representacin para una celda puede ser una caja, cuyo contenido es un valor expresado en binario (10111010), el cual tendr un significado particular para la computadora.

10111010

La cantidad de celdas que contienen las memorias de las mquinas es variable: de cientos (un horno de microondas) a miles de millones (computadoras actuales). El tamao de la memoria principal suele medirse en trminos de unidades de 1048,576 celdas (este valor corresponde a una potencia de 2, as es ms natural como unidad de medida dentro de la computadora, que un milln exacto). 210 1,024 bytes 1 Kilobyte (kb) 220 1'048,576 bytes 1 Megabyte (Mb) 230 1,024 Mb 1 Gigabyte (Gb) Para identificar cada celda de la memoria principal se le asigna un identificador nico, llamado direccin, el cual es un valor numrico consecutivo (ver figuras).Contenido

celda 0000000000000000 celda 0000000000000010 . . celda 1111111111111111 10111010 0000000000000001Direccin

Por ejemplo una computadora de tamao de palabra igual a 8 bits y con 4 Mb tiene 4*1'048,576= 4'192,304 celdas, cada una con un tamao de un byte. Todas con su direccin correspondiente: 0,1,2,... 4'192,303 ( pero expresado en binario).

c) Dispositivos de entrada / salida Dispositivos de Entrada. Permiten ingresar datos a la computadora (usuario computadora)

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 6

Notas de Programacin EstructuradaDispositivos de Salida. Permiten recibir datos de la computadora (computadora usuario)

Dispositivos de almacenamiento secundario. Se clasifican como dispositivos de Entrada y Salida, a la vez. Salida: Pueden almacenar grandes volmenes de informacin. Entrada: Esta informacin puede recuperarse en un momento posterior. Ejemplo: disco duro, discos 3 , USB, CD, DVD, Floppy, SD, etc.

Software de baseAl encender la computadora se ejecuta un programa llamado BIOS (Basic Input-Output System), el cual est guardado en la ROM. El BIOS se encarga de checar a todos los dispositivos conectados a la computadora y se encarga de buscar al Sistema Operativo en el disco duro, para luego cargarlo a la RAM. El software de base esta formado por un conjunto de programas que nos permite comunicarnos con el hardware de la computadora. En la figura el software de base est entre el Hardware y los Programas de aplicacin.

Programa de aplicacin Compiladores Ensambladores Macro-procesadores enlazadores Cargadores Editores de texto Depuradores Sistema OperativoProgramas E/S Sistema de Despachador Archivos de alto nivel (scheduler) Bibliotecas Manejo de memoria Manejo de Dispositivos

Hardware de la computadoraEn nuestro curso, nosotros construiremos programas de aplicacin. Un programa de aplicacin que ser escrito en un lenguaje de alto nivel (C); luego ser traducido por un compilador a lenguaje mquina (lenguaje binario 0-apagado y 1-encendido); y finalmente, la CPU los ejecutar. Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 7

Notas de Programacin EstructuradaCompilador: Es un programa (o conjunto de programas) encargado de traducir de un programa fuente, escrito en lenguaje de alto nivel, a un programa objeto, escrito en cdigo mquina (lenguaje binario). Un compilador realiza las siguientes operaciones: anlisis lxico (lexical analysis), preprocesamiento (preprocessing), anlisis sintctico (parsing), anlisis semntico (semantic analysis), generacin de cdigo (code generation) y optimizacin de cdigo (code optimization). Para obtener un programa ejecutable intervienen dos programas (o software de base) ms, a saber: el ligador (linker) y el cargador (loader). Un enlazador es un programa que toma los archivos: 1) del cdigo objeto generados en el proceso de compilacin y 2) el cdigo objeto de las funciones empleadas por el programador en su programa de aplicacin (las cuales forman parte de una biblioteca proporcionada por el lenguaje de alto nivel); finalmente, enlaza ambos tipos de cdigos objeto produciendo un archivo ejecutable. Un cargador es el responsable de llevar el contenido del archivo ejecutable (programa ejecutable) a la memoria principal (RAM) para, a solicitud del usuario, iniciar su ejecucin.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 8

Notas de Programacin Estructurada

CAPITULO II ALGORITMOS

Un algoritmo es un conjunto de pasos precisos y ordenados, que nos permiten alcanzar un resultado, o bien resolver un problema. Caractersticas de un algoritmo: Precisin. Los pasos a seguir e el algoritmo deben evitar, en la medida de lo posible, la ambigedad. Finitud. Independientemente de la complejidad (dificultad) del algoritmo, el conjunto de pasos debe ser finito. Determinismo. Para un mismo conjunto de datos entrada, el algoritmo siempre debe arrojar el o los mismos resultados.

Componentes principales de un algoritmo

Datos de entrada

Procesamiento de datos

Impresin de resultados

Ejemplo de un algoritmo: darse de alta en el aula virtual 1.- Acceder a la direccin de aula virtual. 2.- Acceder a CBI. 3.- Seleccionar la UEA Introduccin a la Programacin. 4.- Leer instrucciones para el registro. 5.- Realizar el registro. 5.1. Escribir matrcula. 5.2. Escribir fecha de nacimiento. 5.3. Escribir datos generales. 6.- Acceder a aula virtual. 7.- Escribir contrasea. 8.- Matricularse.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 9

Notas de Programacin EstructuradaLas etapas para resolver un problema proponiendo un algoritmo son: 1) anlisis del problema, 2) construccin de un algoritmo y 3) verificacin del algoritmo. El Anlisis del problema nos permite determinar su naturaleza; identificar motivos, razones o causas de un problema especfico; dividir el problema en subproblemas. Luego, hacemos un proceso de sntesis donde elaboramos escenarios, diseamos una solucin para cada subproblema, para luego integrarlas y as solucionar el problema inicial; este proceso tambin incluye mejorar esta solucin. La verificacin del algoritmo consiste en ejecutar (o realizar) cada paso sealado en el algoritmo, con datos de entrada para los cuales conocemos los resultados.

ProgramacinProgramar es concebir un algoritmo que permita a una computadora resolver un problema. Programar implica un proceso mental complejo dividido en varias etapas:

Planteamiento de un problema Comprensin del problema Solucin del problema

PROCESO MENTAL

Expresar los pasos a seguir para obtener la solucin (algoritmo), empleando un lenguaje claro, estricto y universal: pseudocdigo

PROGRAMAR

CODIFICACIN:Traducir el algoritmo a un lenguaje de programacin adecuado (lenguaje de alto nivel)

La codificacin consiste en traducir el algoritmo a un lenguaje de programacin, para as obtener un programa fuente. Un programa, concepto desarrollado por von Neumann en 1946, es un conjunto de instrucciones que sigue una computadora para alcanzar un resultado especfico. El programa se escribe en un lenguaje de programacin, a partir de un diagrama de flujo o de un algoritmo expresado en pseudocdigo. Un lenguaje de programacin est constituido por un conjunto de reglas sintcticas y semnticas. Las reglas sintcticas especifican la correcta formacin de palabras y oraciones en un lenguaje. Las reglas semnticas especifican el sentido o significado de un smbolo, una palabra o una oracin. Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 10

Notas de Programacin Estructurada

Programacin EstructuradaLa programacin estructurada es una filosofa para la implementacin de algoritmos a travs de un conjunto finito de estructuras debidamente organizadas. Fu propuesto, en 1965, por Edgser Dijkstra, en la Universidad de Hainover. Teorema de la estructura (Bohn y Jacopini). Son necesarios 3 estructuras bsicas para construir cualquier programa. 1. Una estructura de proceso. 2. Una estructura de decisin binaria.

V

F

3. Una estructura de repeticin.

Diagramas de FlujoUn diagrama de flujo es la representacin grfica de un algoritmo; la construccin correcta de ste es muy importante porque nos permite escribir un programa en cualquier lenguaje de programacin estructurada. A continuacin presentamos los principales smbolos para representar a un algoritmo. Smbolo Descripcin Se utiliza para marcar el inicio y fin de un programa.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 11

Notas de Programacin EstructuradaSe utiliza para introducir datos de entrada. Expresa lectura. Representa un proceso. En su interior se colocan asignaciones, operaciones aritmticas, etc.si no

Se utiliza para representar una decisin y dependiendo del resultado, el flujo del diagrama sigue por uno de los caminos alternativos. Se utiliza para representar una decisin mltiple y dependiendo del resultado, el flujo del diagrama sigue por uno de los caminos alternativos. Se utiliza para representar la estructura repetitiva for Se utiliza para representar la impresin de resultados. Expresa escritura. Expresan la direccin del flujo del diagrama.

O P

Expresa conexin dentro de una misma pgina. Expresa conexin entre diferentes pginas.

Se utiliza para expresar un mdulo de un problema. Es decir, un sub-problema que hay que resolver antes de continuar con el flujo del diagrama.

Reglas para construir un diagrama de flujo 1. Todo diagrama de flujo debe tener un inicio y un fin. 2. Las lneas de direccin deben ser rectas 3. Las lneas de direccin deben estar conectadas a un smbolo que exprese lectura, proceso, decisin, escritura, conexin o fin del programa. 4. Un diagrama de flujo debe construirse de arriba haca abajo y de izquierda a derecha. 5. La notacin utilizada en el diagrama de flujo debe ser independiente del lenguaje de programacin. 6. Al realizar una tarea compleja, es conveniente poner comentarios que ayuden a entenderla. 7. Si la construccin de un diagrama de flujo requiere ms de una hoja, debemos emplear los conectores adecuados y enumerar las pginas. Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 12

Notas de Programacin Estructurada8. No es posible que a un smbolo determinado llegue ms de una lnea de direccin. 2. No deben de ser inclinadas 8. Invlido 8. Vlido

2. No se deben cruzar

3. Conectadas a un smbolo

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 13

Notas de Programacin Estructurada CAPTULO III CONCEPTOS BSICOS DE Lenguaje C y FreeBasicLenguaje CC es un lenguaje de programacin inventado por Dennis M. Ritchie entre 1969 y 1973 en los Laboratorios Bell de New Jersey. C es un lenguaje estructurado, el cual ofrece algunas ventajas: 1) control de flujo, 2) manejo de variables simples y estructuradas, 3) economa en su forma de expresar operaciones y 4) un conjunto de operadores. Originalmente C fue diseado para el sistema operativo UNIX; sin embargo, el lenguaje C no esta ligado a ningn hardware o sistema operativo particular; podemos citar el ejemplo del sistema operativo Linux, desarrollado por Linus Torvals utilizando nicamente lenguaje C. El lenguaje C es especialmente poderoso, pero es un lenguaje fuertemente orientado para Ingenieros en Computacin, porque es un lenguaje del llamado nivel intermedio (se pueden hacer cosas muy apagadas a la arquitectura con la que se est trabajando). Es un lenguaje con una curva de aprendizaje un poco ms inclinada, pero como se mencion anteriormente, esto permite hacer un uso ms eficiente del hardware, siempre y cuando se est dispuesto a pagar el precio en tiempo y esfuerzo que esto implica.

Tipos de datosLos datos que procesa una computadora se clasifican en: bsicos y estructurados a) Bsicos: Constituye un solo valor que puede ser: 1) entero, 2) real, 3) entero largo, 4) real de doble precisin o 5) carcter. Tipo de Dato int long float double char Bits 16 32 16 64 8 Descripcin Entero Entero largo Real Real de doble precisin Caracter Rango -32,768 a 32,767 -2147,483,648 a 2147,483,647 -3.4x10-38 a 3.4x1038 -1 -1.7x10-308 a 1.7x10308-10 255

b) Estructurados Hacen referencia a un grupo de valores. Arreglos (vectores y matrices): Todos los valores del arreglo son de un solo tipo bsico. Cadenas: Es un vector que guarda valores de tipo caracter. Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 14

Notas de Programacin EstructuradaRegistros: Hacen referencia a un grupo de valores, donde cada uno de ellos puede ser de un tipo bsico; inclusive puede incluir tipos de datos estructurados (arreglos, cadenas o registros). Identificadores. Es el nombre que identifica a una o varias celdas de memoria, las cuales contendrn datos simples o estructurados. Un identificador se forma por medio de letras, dgitos y el carcter subrayado (_). Un identificador siempre comienza con una letra. El lenguaje, C distingue entre minsculas y maysculas, Ejemplo: Aux y aux son identificadores diferentes. La longitud mxima ms comn de un identificador, no excede los 7 caracteres. Existe un conjunto de palabras reservadas del lenguaje C que no deben emplearse como identificadores. auto break case char const continue default do double else enum extern float for int short signed sizeof static struct switch typedef union unsigned void volatile while goto if long register return main

Variables. Empleamos un identificador para nombrar a una variable, la cual designa un conjunto de celdas, que guardarn un valor temporalmente; es decir que el valor cambiar durante el tiempo de ejecucin del programa. En el lenguaje C declaramos una variable, de los tipos mencionados en el apartado 6. Ejemplos:int valor_1; float valor_2=5.4; //se asigna un valor inicial a la variable

NOTA: El signo de igual (=) significa, en lenguaje C, asignacin. El valor de la derecha del signo se asigna a la variable o constante de la izquierda. Constantes. Empleamos un identificador para nombrar a una constante, la cual designa un conjunto de celdas, que guardarn un valor que no cambia durante el tiempo de ejecucin del programa.#define PI 3.14169 const float PI=3.14169;

OperadoresDistinguiremos tres tipos de operadores: 1) aritmticos, 2) relacionales y 3) lgicas. Tambin analizaremos los operadores simplificados, operadores incremento/decremento y el operador coma (,). Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 15

Notas de Programacin EstructuradaOperadores aritmticos Suponga que declaramos dos variables una de tipo real y otra de tipo entera:float v; int x;

Smbolo + -

Descripcin Suma Resta

Ejemplos x=4.5+3; v=4.5+3; x=4.5 - 3; v=4.5 - 3; x=4.5 * 3; v=4.5*3; v=4*3; x= 4 / 3; x=4.0 / 3.0; v=4 / 3; v=4.0 / 3; v=(float) 4 / 3; v=((float) 5+3) / 6;

Resultados x=7 v=7.5 x=1 v=1.5 x=12 v=13.5 v=12.0 x=1 x=1 v=1.0 v=1.33 v=1.33 v=1.33

*

multiplicacin

/

divisin

%

mdulo (residuo de una divisin)

x=15%2; x=1 v=(15%2)/2; v=0.0 v=((float)(15%2))/2; v=0.5

Al evaluar expresiones aritmticas debemos respetar la jerarqua de los operadores y aplicarlos de izquierda a derecha. Mayor prioridad Menor prioridad *, /, % +, -

Operadores aritmticos simplificados. Nos permiten realizar la misma operacin utilizando una notacipon ms compacta. Operador += -= *= /= %= Lizbeth Gallardo - Pedro Lara Operacin larga x=x+5 y=y-2 x=x*y x=x/y x=x%y Operacin simplificada X+=5 y-=2 x*=y x/=y x%=y Pgina 16

UAM Azcapotzalco

Notas de Programacin Estructurada

Operadores de incremento y decremento. Se pueden utilizar antes o despus de la variable, pero los resultados son diferentes. Suponga que declaramos las variables x y y como enteras: int x,y; x=7; Operacin y=x++ y=++x y=x-y=--x Resultados y=7 x=8 y=8 x=8 y=7 x=6 y=6 x=6

Expresiones lgicas o booleanas. Estn formadas por nmeros, constantes, variables y operadores lgicos y relacionales. El valor que pueden tomar estas expresiones al ser evaluadas, es 1 (verdaderas) 0 (falso). Las expresiones lgicas se utilizan frecuentemente en estructuras selectivas y en estructuras repetitivas.

Operadores relacionales. Se utilizan para comparar 2 operando nmeros, caracteres, cadenas, constantes o variables.Operador relacional== != < > =

Descripcinigual a diferente de menor que mayor que Menor o igual que Mayor o igual que

Ejemploh==p h!=p 711 15=20

Resultado0 (F) 1 (V) 0 (F) 1 (V) 0 (F) 1 (V)

Operadores lgicos. Permiten formular condiciones complejas a partir de condiciones simples.Operadores lgicos Diagrama de Venn asociado Operador NOT

! Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco

Pgina 17

Notas de Programacin Estructurada&& ||P 1 1 0 0 Q 1 0 1 0 !P 0 0 1 1 !Q 0 1 0 1 P||Q 1 1 1 0 P&&Q 1 0 0 0 AND OR

Operador , (coma) Sirve para encadenar expresiones. Ejemplo 1: int x, y, z, v; x= (v=3, v*5); Ejecutamos las operaciones de izquierda a derecha: 1) v = 3 2) x= v*3 = 3*5 3) x=15 Ejemplo 2: x=( y=(15>10), z=(2>=y), y && z ) Ejecutamos las operaciones de izquierda a derecha: 1) y=(15 > 10) y = 1 (verdadero) 2) z=(2 >= y) z = 1 3) x=(y && z) x=1 Prioridades de los operadores Las expresiones se evalan de izquierda a derecha, pero los operadores se aplican segn su prioridad. Prioridad (+) ( ) ! , ++, - *, /, % +, = =, !=, , = &&, || + =, - =, * =, / =, % = , UAM Azcapotzalco Pgina 18

(-) Lizbeth Gallardo - Pedro Lara

Notas de Programacin EstructuradaFreeBasicFreeBasic es la versin estructurada del lenguaje BASIC (Beginners All-Purpose Symbolic Instruction Code), desarrollado originalmente por John George Kemeny y Thomas Eugene Kurtz en el Dartmouth College de New Hampshire, USA en 1964. FreeBasic fue desarrollado en 2004 con la idea de tener un lenguaje de programacin que se compare en velocidad al lenguaje C que permitiera: el uso de grficos, la programacin orientada a objetos y que fuera un lenguaje fcil de aprender. Una ventaja que ofrece FreeBasic es que se puede utilizar las bibliotecas de C sin ninguna modificacin. Este lenguaje est recomendado para programadores que requieren un lenguaje eficiente de alto nivel, que no implique conocer detalles de la arquitectura de la computadora; por ejemplo, estudiantes de licenciaturas como: Industrial, Fsica, Energa, Ambiental, Diseo de la comunicacin grfica etc., excepto, las Ingenieras en Computacin y Electrnica, donde es necesario conocer los detalles de la arquitectura de la computadora y emplear lenguajes de bajo nivel (ensamblador) y nivel intermedio (C), para construir software de base, tales como: sistemas operativos, ensambladores, cargadores, etc. Es importante mencionar que FreeBasic suele ser integrado a algn otro lenguaje, por ejemplo Visual Basic, el cual genera interfaces grficas. Gran parte de las aplicaciones de la NASA se desarrollan en FreeBasic y PowerBasic (un lenguaje propietario muy similar a FreeBasic).

Tipos de datosa) Bsicos: Son muy similares a los usados en C, solo en lugar de tipo caracter, se tiene el tipo cadena de caracteres: Tipo de Dato integer uinteger single double string Bits 32 32 32 64 Descripcin Entero largo Entero positivo Real Real de doble precisin Cadena de caracteres Rango -2147,483,648 a 2147,483,647 0 a 4294,967,295 -3.4x10-38 a 3.4x1038 -1 -1.7x10-308 a 1.7x10308-1 Cada caracter es de 8 bits

b) Estructurados: Hacen referencia a un grupo de valores. En Freebasic no se tiene estructuras de cadenas, porque es un tipo bsico. o Arreglos (vectores y matrices): Todos los valores del arreglo son de un solo tipo bsico. Se declara una cadena con la instruccin dim o Registros: Hacen referencia a un grupo de valores, donde cada uno de ellos puede ser de un tipo bsico; inclusive puede incluir tipos de datos estructurados (arreglos, cadenas o registros). Identificadores. Es el nombre que identifica a una o varias celdas de memoria, las cuales contendrn datos simples o estructurados. Un identificador se forma por medio de letras, dgitos y el carcter subrayado (_). Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 19

Notas de Programacin EstructuradaUn identificador siempre comienza con una letra y se forma por medio de letras, dgitos y el carcter subrayado (_). FreeBasic no distingue entre minsculas y maysculas, Ejemplo: Aux y aux es el mismo identificador, y el lmite para la longitud de un identificador son 255 caracteres. Existe un conjunto de palabras reservadas (keywords) que no deben emplearse como identificadores y son las siguientes: case const continue do double else enum extern for int short sizeof static struct select union unsigned while goto if long return

Se puede saber de una forma sencilla cuando se est usando una palabra reservada en editores de Freebasic como el FBI de porque todas las palabras clave se ponen en letras negritas azul obscuro Variables. Para declarar una variable en FreeBasic se usa la instruccin dim seguida del nombre y del tipo. Por ejemplo, para definir la variable num del tipo entero y la variable flotante del tipo real doble precisin se escribe: dim num as integer, flotante as double

Constantes. Las constantes que son variables que tienen el mismo valor durante todo el tiempo de ejecucin del programa, se definen exactamente igual que en C: #define PI 3.14169 const float PI=3.14169; Operadores. Se tiene los mismos tipos de operadores aritmticos, relacionales y lgicos en FreeBasic con exactamente las mismas caractersticas, con las siguientes diferencias en sintaxis nicamente: Operador igualdad desigualdad modulo entero lgico AND lgico OR lgico NOT En C == != % && || ! En FreeBasic = mod and or not

Primer programa: Hola Mundo!Funcin main(). El lenguaje de programacin C opera a travs de funciones. Una funcin es un pedazo de cdigo que realiza una tarea especfica dentro de un programa. En el Captulo 5 se habla de las funciones a detalle. Cuando ejecutamos un Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 20

Notas de Programacin Estructuradaprograma, el sistema operativo se comunica con una funcin principal llama main(), la cual devuelve, al sistema operativo, un valor de 0 indicando que la ejecucin del programa se realiz con xito; y devuelve un valor de 1 indicando que el programa no termin su ejecucin correctamente.Tipo de valor que devuelve la funcin. Nombre (SIN ESPACIOS) Lista de argumentos que recibe la funcin.

int main (void)Cuerpo de la funcin

{Declaracin_de_variables instruccin_1; Instruccin_2; return 0;

}Ejemplo: mundo.c#include int main(void){ //Incluye las funciones de entrada/salida //inicia la funcin main

}

printf (Hola mundo!); //Imprimir en pantalla Hola mundo! return 0; //Valor que devuelve la funcin al sistema operativo //Fin de la funcin main

Ejemplo: mundo.bas. Un programa equivalente en freeBasic es simplemente:Print Hola Mundo!

FreeBasic da por un hecho que cualquier cosa que no sea parte de otra funcin o subrutina, es parte de la funcin principal, por esta razn no requiere definirla.

Entrada y Salida de DatosEntrada con formato: La lectura desde el teclado se realiza por medio de la funcin scanf (cdigo de formato, direccin) El cdigo de formato designar el tipo de dato que se recibir desde el teclado, el cual se asignar a la direccin de memoria de una variable determinada.Cdigo de formato %u %d %i Descripcin Enteros sin signo de 16 bits (unsigned int) Enteros de 16 bits (int)

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 21

Notas de Programacin Estructurada%ld %f %lf %e %g %c %s Enteros de 32 bits (long) Reales de 32 bits (float) Reales de 64 bits (double) Formato exponencial Real o exponencial segn el tamao del nmero Caracter de 8 bits Cadena de caracteres que termina con el carcter nulo \0 (null)

Es importante destacar que se puede controlar la cantidad de dgitos a imprimir en la pantalla, por ejemplo% -6d % 4.2f Escribe un entero con seis dgitos, con justificacin a la izquierda Escribe un real con 4 dgitos, dos de ellos sern utilizados para los decimales, con justificacin a la derecha.

En FreeBasic para la entrada de datos se utiliza la funcin input: Input Dame la temperatura en grados Fahrenheit: , fahr Salida a monitor Salida con formato: Para imprimir en la pantalla una salida con un formato especfico, empleamos la funcin printf (cadena de caracteres, caracter de control y cdigo de formato, variable); Observe que printf puede incluir una cadena de caracteres para informar algo al usuario; luego, puede incluir un formato de impresin para los datos (tabulador, saltar una lnea), empleando los caracteres de control; adems puede incluir uno o varios cdigos de formato para indicar el tipo de dato que se va a imprimir; finalmente, incluye la o las variables que contienen los datos.

Carcter de control \n \t \v \f \a \ \ \\

Descripcin Saltar a una nueva lnea Tabulador horizontal Tabulador vertical Avanzar una pgina Sonido de alerta Imprimir apostrofe Imprimir comillas Imprimir diagonal inversa

En FreeBasic, para dar salida formateada de nmeros se escribe indicando las cifras significativas con el smbolo # print using "Decimales: ###.### - Enteros: ##"; 1/3,2.4 sleep

Ejercicio 1: Conversin Fahrenheit a Centgrados

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 22

Notas de Programacin EstructuradaEscribir un algoritmo que transforme las temperaturas de grados Fahrenheit a grados centgrados con 5 cifras decimales. La ecuacin de conversin es: C = (F-32)*5/9 Versin C:#include main(){ float fahr, cent; printf("Dame la temperatura en Fahrenheit: "); scanf("%f", &fahr); cent=5*(fahr-32)/9; printf("En centigrados es: %4.5f ",cent); }

fahrenheit.c

Comentarios: scanf("%f", &fahr);

Caracteres de formato

Asigna el valor del teclado en la localidad de memoria asignada a fahr

Versin FreeBasic:dim cent as double, fahr as double input "Dame la temperatura en Fahrenheit: ", fahr cent=5*(fahr-32)/9 print using "En centigrados es: ###.#####"; cent sleep fahrenheit.bas

NOTA: a partir de este momento, todos los programas propuestos tendrn una versin en C seguida una versin en FreeBassic. Programa 2: El TOEFL (Test of English as a Foreign Language, Prueba de nivel de Ingls como lengua extranjera) es una prueba que se pide a todos los estudiantes de intercambio, o aquellos que realizarn estudios de posgrado en pases de habla inglesa y otros pases (algunas universidades de Alemania y Rusia, por ejemplo). Este examen consiste en 3 secciones: 50 preguntas de opcin mltiple sobre comprensin de palabra hablada (listening comprehension), 40 preguntas sobre la habilidad para escribir correctamente (grammar) y 50 preguntas sobre comprensin de lectura (reading comprehension). Del nmero total de respuestas correctas en cada seccin, se utiliza la siguiente frmula para calcular el nmero de puntos obtenidos.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 23

Notas de Programacin EstructuradaPuntos TOEFL = 10*(65+LC+G+RC)/3 Hacer un programa que haga este clculo dando como valores de entrada los tres valores de preguntas correctas y la salida sea el puntaje del examen.#include main() { float p1, p2, p3, puntaje; printf("Dame los 3 puntajes: "); scanf("%f %f %f", &p1,&p2,&p3); puntaje=10*(65+0.878*p1+1.1669*p2+0.8865*p3)/3; printf("Tu puntaje es: %.0f", puntaje); } toelf.c dim a as double, b as double, c as double, puntaje as double input "Dame los 3 puntajes: "; a,b,c puntaje=10*(65+0.878*a+1.1669*b+0.8865*c)/3 print "Tu puntaje es: ", puntaje sleep toelf.bas

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 24

Notas de Programacin EstructuradaCAPTULO IV ESTRUCTURAS DE SELECCINEstas estructuras se utilizan cuando en la solucin de un problema, debemos tomar una decisin, la cual determinar el flujo que seguir el programa que estamos construyendo. La toma de una decisin se basa en la evaluacin de una o ms condiciones. Distinguimos cuatro tipos de estructuras selectivas: Estructura selectiva simple (if) Estructura selectiva doble (if else) Estructura selectiva encadenada (if else if - else) Estructura selectiva mltiple (switch)

Estructura selectiva simple (if)En tiempo de ejecucin, al llegar a este punto del programa se evala la condicin; si es verdadera entonces se ejecuta un bloque de instrucciones especfico; pero si la condicin es falsa entonces este bloque es ignorado y se contina con el flujo normal del programa.if(condicion){ bloque_V; } : donde:V

condicion

F

bloque_V

la condicion puede estar formada por una o varias condiciones que al ser evaluadas nos proporcionan un valor lgico (v-verdadero f-falso). bloque_V denota un conjunto de instrucciones que se ejecuta nicamente cuando el resultado de la condicin es verdadera

Ejercicio: Descuento en dulces para los nios menores de 12 aos En la tienda de Don Pascual hay una promocin que consiste en otorgar el 20% de descuento solo para los nios menores de 12 aos, cuya compra sea mayor o igual a 100. Realice un programa para que de manera automtica, Don Pascual no tenga que utilizar su calculadora cada que atienda a un nio con esas caractersticas.#include #define DESC 0.80 int main(void){ float venta=0.0; int esMenor=0; printf("Cual es la cantidad de la venta: "); scanf("%f",&venta);

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 25

Notas de Programacin Estructuradaprintf("Es menor de edad (1-si 0-no): "); scanf("%d",&esMenor); if(venta>=100 && esMenor==1){ venta=venta*DESC; } printf("A pagar: %8.2f",venta); return 0; } dulces.c #define DESC 0.80 dim venta as double, esMenor as integer input "Cual es la cantidad de la venta: ", venta input "Es menor de edad (1-si 0-no): ", esMenor if venta>=100 and esMenor=1 then venta=venta*DESC print "A pagar: ",venta sleep dulces.bas

Estructura selectiva doble (if-else)Simple En este tipo de estructura, tenemos dos bloques alternativos de instrucciones, los cuales son independientes uno de otro; en el punto de la toma de una decisin solo se ejecutar uno de ellos, dependiendo del valor lgico que resulte al evaluar la condicin.if(condicion){ bloque_V; } else{ bloque_F; } : donde: la condicion puede estar formada por una o varias condiciones que al ser evaluadas nos proporcionan un valor lgico (v-verdadero ffalso). bloque_V denota un conjunto de instrucciones que se ejecuta nicamente cuando el resultado de la condicin es verdadera bloque_F denota un conjunto de instrucciones que se ejecuta nicamente cuando la condicin es falsa

V

condicion

F

bloque_V

bloque_F

Ejercicio: Races de un polinomio de segundo grado. Hacer un algoritmo que encuentre las races de un polinomio de segundo grado. El algoritmo debe proporcionar las races imaginarias, si ese fuera el caso. x=((-b(b2-4ac))/(2a))

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 26

Notas de Programacin Estructurada#include #include int main(void){ float a, b, c, det, aux; printf("Dame los 3 coeficientes de la ecuacin de segundo grado:"); printf("ax2+bx+c=0"); scanf("%f %f %f",&a,&b,&c); det=(b*b-4*a*c); aux=-b/(2*a); if(det < 0){ printf("x1 = %f + %f i \n",aux,pow(-det,.5)/(2*a)); printf("x2 = %f - %f i",aux,pow(-det,.5)/(2*a)); } else { printf("x1= %f \n X2= %f",aux+pow(det,.5)/(2*a),aux pow(det,.5)/(2*a)); } }

ecuacion.c dim a as double, b as double, c as double dim det as double, aux as double print "Dame los 3 coeficientes de la ecuacion de segundo grado:" input "ax2+bx+c=0 :", a,b,c det=(b^2-4*a*c) aux=-b/(2*a) if det < 0 then print "x1 = ";aux; " + "; ((-det)^.5)/(2*a); " i" print "x2 = ";aux; " - "; ((-det)^.5)/(2*a); " i" else print "x1 = "; aux+(det^.5)/(2*a) print "x2 = "; aux-(det^.5)/(2*a) end if sleep ecuacion.bas

Anidada En trminos generales, una estructura selectiva puede contener a otras estructuras, por ejemplo: una estructura de proceso, una estructura de repeticin e incluso una nueva estructura selectiva. En particular, cuando una condicin que es verdadera nos lleva a evaluar una nueva condicin, decimos que las estructuras selectivas estn anidadas. Observe que en las estructuras anidadas se debe tener cuidado de no olvidar cerrar las llaves correspondientes a cada una de las estructuras; y tambin, se debe tener cuidado de cerrarlas en el lugar adecuado.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 27

Notas de Programacin Estructurada

V

condicion1F

F

V

condicion2

bloque1_F

V

condicion3

F

bloque2_F

bloque3_V

bloque3_F

if(condicion1){ if(condicion2){ if(condicion3){ bloque3_V; } else{ bloque3_F; } } }

Ejercicio: construir un programa que simule el juego de piedra-papel-tijera. Como entrada el usuario proporciona un de los siguientes nmeros, donde cada uno tendr un significado distinto: 1significa piedra, 2 significa papel y 3 significa tijera. Como salida el programa deber indicar el ganador del juego. Es importante sealar que para simular la tirada de la computadora, en el programa deber seleccionarse uno de los tres valores de manera aleatoria, empleando la funcin que genere un nmero aleatorio (random en ingls) del lenguaje de programacin en que se desee codificar el algoritmo.Entrada: 1 Salida: Tu opcion es Piedra, yo escogi Piedra Empatamos!

Tenemos que definir una tabla que nos permita identificar los casos de gane y pierde para ambos jugadores (la computadora y el usuario).Computadora Usuario 1-Piedra 2-Papel 3-Tijera 1-Piedra Empate Gan Ganaste 2-Papel Gan Empate Ganaste 3-Tijera Ganaste Gan Empate

Gan, Ganaste y empate son expresiones provenientes del jugador simulado por la computadora.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 28

Notas de Programacin Estructurada#include #include #include int main(void){ int num=0, opc=0; srand(time(NULL)); num=(rand()%3)+1; printf("1-Piedra 2-Papel 3-Tijera \n"); printf("Escoge una de las opciones anteriores: "); scanf("%d",&opc); if(opc==1){ if(num==1) printf("Tu opcion es Piedra, yo escogi Piedra - Empatamos!"); else if(num==2) printf("Tu opcion es Piedra, yo escogi Papel - Gane!"); else if(num==3) printf("Tu opcion es Piedra, yo escogi Tijera - Ganaste!"); } else if(opc==2){ if(num==1) printf("Tu opcion es Papel, yo escogi Piedra - Ganaste!"); else if(num==2) printf("Tu opcion es Papel, yo escogi Papel - Empatamos!"); else if(num==3) printf("Tu opcion es Papel, yo escogi Tijera - Gane!"); } else if(opc==3){ if(num==1) printf("Tu opcion es Tijera, yo escogi Piedra - Gane!"); else if(num==2) printf("Tu opcion es Tijera, yo escogi Papel - Ganaste!"); else if(num==3) printf("Tu opcion es Tijera, yo escogi Tijera -Empatamos!"); } return 0; }

piedra-papel-tijera.c

print "1-piedra 2-Papel 3-Tijera" randomize timer dim opc as integer, num as integer num=int(rnd*3)+1 input "Escoge una opcion: ", opc if opc = 1 then if num = 1 then print "Yo escog if num = 2 then print "Yo escog if num = 3 then print "Yo escog end if if opc = 2 then if num = 1 then print "Yo escog if num = 2 then print "Yo escog if num = 3 then print "Yo escog end if if opc = 3 then if num = 1 then print "Yo escog if num = 2 then print "Yo escog if num = 3 then print "Yo escog

Piedra - Empatamos!" Papel - Gane!" Tijeras - Ganaste!" Piedra - Ganaste!" Papel - Empatamos!" Tijeras - Gane!" Piedra - Gan!" Papel - Ganaste!" Tijeras - Empatamos!"

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 29

Notas de Programacin Estructuradaend if sleep piedra-papel-tijera.bas

Estructura selectiva encadenada (if - else if - else)Cuando una condicin que es falsa nos lleva a evaluar una nueva condicin, decimos que las estructuras selectivas estn encadenadas. Cada condicin se evala siguiendo el orden, el bloque de instrucciones del else solo se ejecutar cuando ninguna de las condiciones anteriores se ha cumplido. Observe que en las estructuras encadenadas mantienen independencia una de otra, por lo tanto es ms sencillo manipularlas durante la solucin de un problema.

V

condicion1

F

bloque1_V

V

condicion2

F

bloque2_V

V

condicion3

F

bloque3_V

bloque3_F

if (condicion1){ bloque1_V; } else if (condicion2){ bloque2_V; } else if (condicion3){ bloque3_V; } else{ bloque3_F; }

Ejercicio: construir un programa que simule el juego de la pirinola, tambin llamada perinola o peonza. En este problema no hay una entrada por parte del usuario; es el programa quien genera un valor aleatorio, correspondiente a los lados de la pirinola, para luego indicar la accin que los jugadores deben realizar. La tabla de abajo determina el valor y la accin asociada. Lizbeth Gallardo - Pedro Lara UAM Azcapotzalco Pgina 30

Notas de Programacin EstructuradaSalida: Todos ponen

Valor 1 2 3 4 5 6 7#include #include #include

Accin Pon uno Pon dos Toma uno Toma dos Todos toman Todos ponen Pierdes todo

int main(void){ double num=0.0; srand(time(NULL)); printf("Pirinola/perinola/peonza digital \n"); printf("el numero es: %lf ", num=(rand()/(float)1e9)); if(num < 1.0/7.0) printf("Pon uno \n"); else if(num < 2.0/7.0) printf("Pon dos \n"); else if(num < 3.0/7.0) printf("Toma uno \n"); else if(num < 4.0/7.0) printf("Toma dos \n"); else if(num < 5.0/7.0) printf("Toma todo \n"); else if(num < 6.0/7.0) printf("Todos ponen \n"); else printf("Pierdes todo"); return 0; } pirinola.c

randomize timer dim num as double num=rnd print "Pirinola/perinola/peonza digital" if num < 1/7 then print "Pon uno" elseif num < 2/7 then print "Pon dos" elseif num < 3/7 then print "Toma uno" elseif num < 4/7 then print "Toma dos" elseif num < 5/7 then print "Toma Todo" elseif num < 6/7 then print "Todos Ponen" else print "Pierdes todo" endif sleep pirinola.bas

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 31

Notas de Programacin EstructuradaEjercicio: construya un algoritmo que calcule el resultado de la siguiente funcin.3*y+36 y2 -10 y3+ y2 -1 0 si 0< y 11 si 11< y 33 si 33 < y 64 en otro caso

x=

#include #include int main(void){ float x=0.0, y=0.0; printf("Introduce el valor de y: "); scanf("%f", &y); if(y>0.0 && y11.0 && y33.0 && y0.0 and y11.0 and y33.0 and y 30) hExtra=30; switch(categoria){ case 1: PHE = 30; break; case 2: PHE = 38; break; case 3: PHE = 50; break; case 4: PHE=70; break; default: PHE = 0; break; } printf("El sueldo total es de : %.2f", sueldo+PHE*hExtra); return 0; } sueldoSwitch.c dim sueldo as double,PHE as double print "CAT","Precio HE" print "1","30" : print"2","38": print"3","50": print"4","70" input "Categoria, sueldo, hrs extra: ", categoria,sueldo,hExtra if(hExtra > 30) then hExtra=30 select case categoria case 1 PHE = 30 case 2 PHE = 38 case 3 PHE = 50 case 4 PHE = 70 case else PHE = 0 end select print "El sueldo total es de :"; sueldo+PHE*hExtra sleep sueldoSwitch.bas

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 34

Notas de Programacin EstructuradaCAPTULO V FUNCIONESPara resolver un problema de gran tamao es conveniente descomponerlo en subproblemas, de tal manera que cada uno de ellos pueda ser resuelto de una manera ms sencilla. El lenguaje C emplea el trmino funcin para denotar el cdigo que resuelve un subproblema. Algunas ventajas de emplear funciones son: Facilita la escritura y lectura de los programas Permite el trabajo en paralelo Facilita la asignacin de responsabilidades El cdigo de la funcin se escribe una sola vez y se utiliza tantas veces como sea necesario. Facilita el mantenimiento de los programas.

Conceptos bsicosFormalmente: Sea L(p) la longitud de un programa cualquiera y sean l(p1) y l(p2) las longitudes de dos segmentos mutuamente excluyentes y complementarios del mismo programa p; de tal modo que la longitud del programa ser: L(p)=l(p1) + l(p2); donde p designa al programa completo y pi denota los subprogramas (cdigos) que conforman a p. Sean adems E(p), e(p1) y e(p2) los esfuerzos necesarios para obtener L(p), l(p1) y l(p2) respectivamente; en general se tendr que: E(p) >e(p1) + e(p2) Principios de diseo de una funcin: 1) Las partes altamente relacionadas, deben pertenecer a la misma funcin; y 2) las partes no relacionadas deben residir en otras funciones. Existen algunas reglas bsicas para definir y emplear las funciones en el lenguaje C: 1) declarar la funcin (tambin llamado prototipo de la funcin), 2) Definicin de la funcin, y 3) llamado de una funcin. 1) Para que el compilador reconozca una funcin como parte de un programa, sta debe ser declarada al inicio del programa, de la siguiente manera:tipo_dato nombre_funcion (lista_parametros); Donde: Tipo_dato indica el tipo de dato que devolver la funcin al concluir su ejecucin, por elemplo: int, float, char Lista_parametros corresponde al conjunto de valores que recibir de la funcin que la llam. Los valores estn contenidos en variables, por lo tanto debern recibirse estos valores en variables locales (propias de la funcin receptora)

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 35

Notas de Programacin EstructuradaNota: una funcin no necesariamente devuelve un valor y no necesariamente recibe parmetros, en este caso se indica con la palabra reservada void

NOTA: Si no se escribe el prototipo de una funcin, entonces su definicin debe presentarse antes de la funcin principal. 2) Definir una funcin significa especificar el conjunto de instrucciones que realizarn una tarea determinada dentro del programa.tipo_dato nombre_funcion (lista_parametros){ declarar_variables; bloque_de_instrucciones; return ; } Donde: Declarar_variables corresponden a variables locales que requerir la funcin para realizar su tarea. Bloque de instrucciones que determinan el comportamiento de la funcin return marca el fin de la funcin y devuelve, cuando as se requiera, un resultado cuyo tipo corresponde al definido en el prototipo de la funcin Nota: una funcin no necesariamente devuelve un valor y no necesariamente recibe parmetros, en este caso se indica con la palabra reservada void

3) El llamado a una funcin se realiza desde la funcin principal o desde cualquier otra funcin. Durante la ejecucin del programa, el llamado a una funcin implica un salto hacia ella para ejecutar su conjunto de instrucciones; al terminar se devuelve el control de la ejecucin a la funcin que la llam; en este caso a la funcin main(). Al hacer el llamado debe especificarse: 1) el nombre de la funcin; y 2) los valores que va a requerir para realizar su tarea, los valores contenidos en variables se escriben dentro del parntesis, siguiendo el orden y respetando el tipo de dato declarado.int main(void){ : nombre_funcion(lista_de_valores) : return 0; }

Ejercicio: Dados tres nmeros enteros a, b y c, encontrar al mayor de entre ellos.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 36

Notas de Programacin Estructurada#include int leeValor(void); int encuentraMax (int, int, int); void imprime(int); int main(void){ int a,b,c,max; a=leeValor(); b=leeValor(); c=leeValor(); max = encuentraMax(a,b,c); imprime(max); return 0; } int leeValor(void){ int val; printf("Dame un valor entero: "); scanf("%d", &val); return (val); } int encuentraMax(int a, int b, int c){ int max; if(a>b && a>c){ max=a; } else if (b>a && b>c){ max=b; } else { max=c; } return (max); } void imprime(int max){ printf("El mayor de los nmeros es: %d",max); return; } maxNum.c function leeValor() input "Dame un valor entero: ", valor return valor end function function encuentraMax(a as integer, b as integer, c as integer) if a>b and a>c then: max=a elseif b>a and b>c then: max=b else: max=c end if return max end function sub imprime(max as integer) print "El mayor de los numeros es:"; max end sub

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 37

Notas de Programacin Estructuradaa=leeValor(): b=leeValor(): c=leeValor() max = encuentraMax(a,b,c) imprime(max) sleep maxNum.bas

Paso de parmetros por valorLa comunicacin entre las funciones se lleva a cabo mediante el paso de parmetros, el cual se puede hacer de dos formas; por valor y por referencia se describir primero el paso de parmetros por valor. En el paso de parmetros por valor, la funcin receptora recibe parmetros que son copia de los valores contenidos en las variables originales (propias de la funcin que hace el llamado); por lo tanto, si una variable local (propia de la funcin receptora) sufre una alteracin no afectar a la variable original, porque la variable local solo tiene una copia del valor. Ejercicio: retomando el juego de piedra-papel-tijera para reformular el cdigo, empleando una funcin llamada referi encargada de determinar al ganador de la jugada.#include #include #include void referi(int mine, int yours); int main(void){ int mine=0, yours=0; printf("Juguemos a piedra papel o tijera \n"); printf(" 1. Piedra \n 2. Papel \n 3. Tijera \n"); printf("Cual es tu tirada: "); scanf("%d", &yours); printf("Mi tirada es: "); srand(time(NULL)); mine=rand()%3+1; printf("%d \n",mine); referi(mine,yours); return 0; } void referi(int mine, int yours){ if(mine==yours) printf("Empate entre tu y yo \n"); else{ switch(yours){ case 1: if(mine==2) printf("Gane !!!! \n"); else printf("Ganaste!!! \n"); break; case 2: if(mine==1) printf("Ganaste!!! \n"); else printf("Gane!!! \n");

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 38

Notas de Programacin Estructuradabreak; case 3: if(mine==1) printf("Gane!!! \n"); else printf("Ganaste!!! \n"); break; default: printf("ERROR en tu tiro!!! \n"); break; } } return; } pipati-2.c sub referi(mine as integer, yours as integer) if mine=yours then print "Empate entre tu y yo" else select case yours case 1 if mine=2 then print "Gane !!!" else print "Ganaste!!!" case 2 if mine=1 then print "Ganaste!!!" else print "Gane!!!" case 3 if mine=1 then print"Gane!!!" else print "Ganaste!!!" case else print "ERROR en tu tiro!!!" end select end if end sub print "Juguemos a piedra papel o tijera" print " 1. Piedra": print " 2. Papel": print " 3. Tijera" input "Cual es tu tirada? ", yours randomize timer mine=int(rnd*3)+1 print "Mi tirada es: "; mine referi(mine,yours) sleep pipati-2.bas

Paso de parmetros por referenciaAqu los parmetros no son copias de los valores, sino las direcciones de las variables originales; por lo tanto, si un parmetro sufre una alteracin en la funcin que lo recibe, la variable original tambin se ve afectada. En el lenguaje C, el paso de parmetros por referencia se realiza mediante el concepto de apuntador. Un apuntador es una direccin de memoria (por ejemplo 00X00X101010). Dado que debemos manipular una direccin de memoria, se vuelve necesario poder declarar variables que puedan guardar direcciones; las cuales no corresponden a ninguno de los tipos de datos bsicos vistos hasta ahora (int, float, char, etc.). Por lo tanto, emplearemos una notacin especial que nos permita denotar una variable de tipo apuntador, a saber los operadores de: direccin (&), declaracin de variable tipo apuntador (*) e indireccin (*). En efecto el operador * tiene un doble propsito.

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 39

Notas de Programacin Estructuradaint main(void){ int x=0,z=0; int *y; //declaro a y como una variable de tipo apuntador x=3; y=&x; // a y le asigno la direccin de x, por lo tanto y apunta a x z=*y; // a z le asigno el valor de la variable a la cual apunta y printf("z= %d ",z); return 0; }

En tiempo de ejecucin, el manejo de la memoria sera como se muestra en la siguiente figura:

Ejemplo: Escribir un programa que realice el intercambia de valores entre tres variables empleando paso de parmetros por referencia.#include void intercambia(int *x, int *y); int main(void){ int a=10, b=5; printf("\n Los valores de A y B son: %d y %d",a,b); intercambia(&a,&b); printf("\n Los valores actuales de A y B son: %d y %d", a,b); return 0; } void intercambia(int *x, int *y){ int aux; aux=*x; *x=*y; *y=aux; return; } intercambia.c

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 40

Notas de Programacin Estructuradasub intercambia(BYREF x as integer, BYREF y as integer) aux=x : x=y : y=aux end sub a=10: b=5 print : print print "Los valores de las variables originales A y B son: "; a; " y"; b intercambia(a,b) print "Los valores de A y B han sido intercambiados, ahora son: "; a; " y"; b sleep intercambia.bas

Ejercicio: construya un programa en C que reciba un valor entero correspondiente a una cantidad en segundos. Escriba una funcin denominada convertir que reciba como parmetro, por valor, la cantidad de segundos; y los parmetros, por referencia, hora, min. La funcin habr de convertir y mostrar en pantalla la cantidad de segundos en su equivalente en horas, minutos y segundos restantes.Entrada:3600 Salida: 1h 0m 0s

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 41

Notas de Programacin Estructurada#include void convertir (int,int*,int*,int*); int main(void){ int segundos,hora,min,seg; printf("Ingresa los segundos: "); scanf("%d",&segundos); convertir(segundos,&hora,&min,&seg); printf("%d h %d min %d seg",hora,min,seg); return 0; } void convertir (int segundos,int* hora, int* min, int*seg){ *hora = segundos /3600; *min=(segundos % 3600)/60; *seg=(segundos % 3600)%60; return; } horminsec.c sub convertir(segundos as integer,BYREF hora as integer, BYREF min as integer, BYREF seg as integer) hora = int(segundos/3600) min=int((segundos mod 3600)/60) seg=(segundos mod 3600) mod 60 end sub input "Ingresa los segundos: ", segundos convertir(segundos,hora,min,seg) print hora;"h"; min; "min";seg; "seg" sleep horminsec.bas

Lizbeth Gallardo - Pedro Lara

UAM Azcapotzalco

Pgina 42

Notas de Programacin EstructuradaCAPTULO VI ESTRUCTURAS REPETITIVASEn la solucin algunos problemas es comn requerir que un conjunto de operaciones (instrucciones) sea ejecutado varias veces. Al conjunto de instrucciones que se ejecuta repetidamente se le llama ciclo; si bien las instrucciones son las mismas, los datos pueden variar. En una estructura repetitiva debe existir una condicin que detenga la ejecucin del ciclo (suele llamarse condicin de paro). En cada iteracin esta condicin de paro es evaluada para decidir si el ciclo contina si debe detenerse.

Estructura repetitva Durante (for)Generalmente, la estructura for se utiliza en soluciones donde se conoce el nmero de veces que deber repetirse el ciclo. Por lo tanto, se establece un contador inicial; este contado se va incrementando decrementando en cada iteracin, hasta alcanzar un valor mximo mnimo; una vez alcanzado este valor, el ciclo termina y se contina con el flujo normal del programa.for (exp1, exp2, exp3){ bloque_V; }

exp1, exp2, exp3 V bloque_V

F

donde: exp1: establece un valor inicial a un contador. exp2: correspondiente a la condicin de paro donde se determina el valor mximo o mnimo que podr alcanzar el contador. exp3: corresponde al incremento decremento para el contador. bloque_V: conjunto de instrucciones que se repetir hasta que la condicin sea falsa. Cuando la condicin es falsa.

Ejercicio: Se dice que un nmero entero es perfecto si la suma de sus divisores excepto l mismo es igual al propio nmero. Por ejemplo seis es nmero perfecto porque 1*2*3=6 y 1+2+3 = 6. Escriba un programa que obtenga los nmeros perfectos comprendidos entre 1 y 10000.#include int main(void){ int num=0, sum=0, i=0; printf("Numeros perfectos \n\n"); for(num=1; num=7 then print "LASSSSTIMAAAA!!! Se acabaron sus intentos" next i sleep

adivina.bas

Construir un programa que determine los nmeros primos comprendidos entre 1 y 1e4. Un nmero es primo, si sus nicos divisores son l mismo y la unidad. No hay entrada por parte del usuario; como salida enlistar los nmeros primos con la siguiente leyenda: x es primo.Salida:

1es primo 2 es primo 3 es primo : 9973 es primo#include #define LIM 1e4 int main(){ int num=0, i=0, band=0, cont=0; printf("Numeros primos comprendidios en un rango %.2e\n", LIM); for(num=2; num