Professional Documents
Culture Documents
ALGORITMOS Y LENGUAJES DE
PROGRAMACIN
PRESENTACIN
En este material contiene los objetivos que se deben lograr al finalizar la unidad, el
mtodo de evaluacin del aprendizaje y el contenido. En un mundo cambiante de tecnologa como se
tiene el da de hoy se hace necesario evaluar y estudiar parte de esa tecnologa. Las computadoras,
el hardware, el software, las grandes mquinas que invaden nuestro mundo requieren de un estudio.
Ing. Industrial
ITSP
DATOS DE LA MATERIA
Carrera: Ingeniera Industrial
Clave de la asignatura: INM-0407
Horas teora-horas prctica-crditos: 3-2-8
OBJETIVOS GENERALES
El alumno:
Conocer las tendencias actuales de tecnologa
Identificar cada uno de los elementos de un sistema computacional
Enlistar las caractersticas de cada familia de sistemas operativos
Identificar los diferentes productos de software que existen.
Utilizara como herramienta de trabajo alguno de esos recursos
Ing. Industrial
ITSP
INDICE DE CONTENIDO
I. INTRODUCCIN A LA COMPUTACIN
1.1 Nuevas tecnologas de la informacin
1.1.1 Evolucin de las tecnologas
Ing. Industrial
ITSP
INFORMTICA:
Ing. Industrial
ITSP
OFIMTICA
El proceso de incorporacin de las TI a los SI, afecta a toda la empresa (organizacin, estructura,
control...) y no slo al SI, por eso para que sea un xito la implantacin de los avances tecnolgicos,
hay que coordinar estos avances con todas las reas de la empresa, para que el SI resultante sea un
conjunto armonioso y que se adapte perfectamente a la estructura de la empresa.
Este enfoque de planteamiento global, implica que la implantacin de las TI debe ser compatible con
la poltica general de la organizacin, y deber materializarse en un plan estratgico para el sistema
informtico que vamos a utilizar, como soporte de las necesidades existentes tanto a corto como a
largo plazo, teniendo en consideracin los objetivos generales de la organizacin, y ser una expresin
lo ms real posible de la poltica informtica adoptada.
Por todo ello, la direccin debe tener una participacin activa en el proceso de planificacin y diseo y
la implantacin de las TI dentro del SI, en caso contrario podemos tener problemas en la eleccin de
las aplicaciones prioritarias a utilizar, tanto en el diseo de soluciones para secuencias de procesos
(decisiones estructuradas y operativas), como en los intervalos de decisin o decisiones no
estructuradas que no tienen bien definidas sus necesidades.
Ing. Industrial
ITSP
Ing. Industrial
ITSP
BIBLIOGRAFA
http://coqui.lce.org/ialvarez/GENERA.HTM
Ing. Industrial
ITSP
1.2.2 SOFTWARE
Software es la expresin de un conjunto de instrucciones mediante palabras, cdigos, planes o en
cualquier otra forma que al ser incorporados en un dispositivo de lectura automatizada, es capaz de
hacer que un computador ejecute una tarea u obtenga un resultado. La proteccin del programa de
ordenador comprende tambin la documentacin tcnica y los manuales de uso.
TIPOS DE SOFTWARE
Existe variedad de clasificacin de software, pero por cuestiones acadmicas se ha dividido en:
-
Segn la funcin.
Segn el grado de estandarizacin o uso.
Segn la funcin.- Esta clasificacin para nuestro tema es solamente ilustrativa, dentro de este
bloque encontramos.
Software de base.- Son los que controlan el funcionamiento interno del ordenador, perifricos
que sirva para el correcto funcionamiento de otros programas dentro de ellos se pueden destacar,
software de memoria (Memmaker), sistemas operativos (DOS 6.00) lenguaje de programacin
(Basic), son los que estn inmersos en el ordenador.
Software aplicativos.- Son programas de montos o funciones especficos, que el usuario,
adquiere de acuerdo a sus necesidades; entre las cuales podemos mencionar:
- Hojas de clculo (Quattro Pro)
- Procesadora de Textos (Word Perfect)
- Base de datos (Dbase)
- Diseo Grfico (Corel Draw)
Segn el uso o estandarizacin.- Existen 3 sub divisiones que son considerados software aplicativos
debido a que ellos son requeridas atendiendo la necesidad del usuario, y que a mencionar son:
El software aplicativo.- Tambin llamado package, estos programa estn dirigidos al
mercado en general, lo cual ha originado el origen de empresas creadoras de software, que estn
pues estas son propia nos bien definidos, bien es hoja calculo, base de datos, o conjuntos de
programas en grupo.
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
El software a medida.- Tambin denominada (Custom mode), son los creados por
empresas para sus propias actividades, tambin son susceptibles de modificacin
El software de acuerdo al cliente.- Se les denomina (customized), son programas estndar,
modificado de acuerdo a la necesidad de un usuario en particular. La legislacin no menciona quien
es el autorizado de hacer esta modificacin.
El software es un componente esencial de toda actividad basado en el uso de la informtica.
1.2.2 FIRMWARE
Firmware o Programacin en Firme, es un bloque de instrucciones de programa para propsitos
especficos, grabado en una memoria tipo ROM, que establece la lgica de ms bajo nivel que
controla los circuitos electrnicos de un dispositivo de cualquier tipo. Al estar integrado en la
electrnica del dispositivo es en parte hardware, pero tambin es software, ya que proporciona lgica
y se dispone en algn tipo de lenguaje de programacin.
Funcionalmente, el firmware es el intermediario (interfaz) entre las rdenes externas que recibe el
dispositivo y su electrnica, ya que es el encargado de controlar a sta ltima para ejecutar
correctamente dichas rdenes externas.
Encontramos Firmware en memorias ROM de los sistemas de diversos dispositivos perifricos, como
en monitores de video, unidades de disco, impresoras, etc., pero tambin en los propios
microprocesadores, chips de memoria principal y en general en cualquier circuito integrado.
El firmware es una combinacin de software (programa) y hardware (en este caso, chips). En su
conjunto son Chips que poseen dentro pequeos programas que son guardados dentro y que se
denominan Firmware.
Estos chips normalmente son de los siguientes tipos:
ROM(s) Read Only Memory (Memoria de solo lectura)
PROM(s) Programmable read-only memory (memoria programable de solo lectura)
EPROM(s) Erasable programmable read-only memory (memoria programable y con capacidad de ser
borrada)
El firmware en PROM o EPROM est diseado para ser modificado si es necesario a travs de una
actualizacin de software.
BIBLIOGRAFIA
http://es.wikipedia.org/wiki/Soporte_f%C3%ADsico
www.escomposlinux.org/hardware/
http://es.wikipedia.org/wiki/Firmware
Ing. Industrial
ITSP
10
Ing. Industrial
ITSP
11
1.3.3 UNIX
El inicio del desarrollo de este sistema operativo (que se cree es uno de los ms influyentes en la
historia de la computacin) fue muy particular, pues nadie habra predicho el xito de UNIX despus
de su primera encarnacin.
Las herramientas o comandos ms bsicos de UNIX son:
Navegacin/creacin de directorios/archivos: is, cd, pwd, mkdir, rm, rmdir, cp
Edicin/visin de archivos: touch, more, ed, vi, emacs.
Procesamiento de textos: echo, cat, grep, sort, uniq, sed, awk, tail, head.
Comparacin de archivos: comm, cmp, diff, patch
Administracin del sistema: chmod, chown, ps, find, xargs, sd, w, who.
Comunicacin: mail, telnet, ssh, ftp, finger.
1.3.4
LINUX
El logotipo oficial de Linux es el pingino Tux Linux es un sistema operativo y un ncleo. Es uno de
los paradigmas del desarrollo de software libre (y de cdigo abierto), donde el cdigo fuente est
disponible pblicamente y cualquier persona puede libremente usarlo, modificarlo y/o redistribuirlo.
El trmino "Linux" estrictamente se refiere al ncleo Linux, pero es ms comnmente utilizado para
describir al sistema operativo tipo Unix, que utiliza primordialmente filosofa y metodologas libres,
tambin conocido como GNU/Linux, que est formado mediante la combinacin del ncleo Linux con
las bibliotecas y herramientas del proyecto GNU y de muchos otros proyectos/grupos de software
(libre o no). El ncleo no es parte oficial del proyecto GNU (el cual posee su propio ncleo en
desarrollo, llamado Hurd), pero es distribuido bajo los trminos de la licencia GPL (GNU General
Public License).
Una distribucin Linux, o distribucin GNU/Linux (abreviada con frecuencia diestro) es un conjunto de
aplicaciones reunidas por un grupo, empresa o persona para permitir instalar fcilmente un sistema
Linux (tambin llamado GNU/Linux).
Existen numerosas distribuciones Linux. Cada una de ellas puede incluir cualquier nmero de
software adicional (libre o no), como algunos que facilitan la instalacin del sistema y una enorme
variedad de aplicaciones, entre ellos, entornos grficos, suites ofimticas, servidores WEB, servidores
de correo, servidores FTP, etc.
BIBLIOGRAFIA
http://es.wikipedia.org/wiki/Sistema_operativo
http://encyclopedie-es.snyke.com/articles/sistema_operativo.html
Ing. Industrial
ITSP
12
BIBLIOGRAFIA
http://www3.uji.es/~mmarques/f47/apun/node32.html
http://es.wikipedia.org/wiki/Base_de_datos
Ing. Industrial
ITSP
13
2.2 Metodologa para el diseo de software: Top Down, Bottom up, Modular y
Programacin estructurada.
Ing. Industrial
ITSP
14
PRESENTACIN
En este material contiene los objetivos que se deben lograr al finalizar la unidad, el
mtodo de evaluacin del aprendizaje y el contenido. En un mundo cambiante de tecnologa como se
tiene el da de hoy se hace necesario evaluar y estudiar parte de esa tecnologa. Las computadoras,
el hardware, el software, las grandes mquinas que invaden nuestro mundo requieren de un estudio.
Ing. Industrial
ITSP
15
Planteamientos de Problemas.
Lo que pretende un algoritmo es sintetizar de alguna forma una tarea, clculo o mecanismo antes de
ser transcrito al ordenador. Los pasos que hay que seguir son los siguientes:
- Anlisis previo del problema.
- Primera visin del mtodo de resolucin.
- Descomposicin en mdulos.
- (Programacin estructurada).
- Bsqueda de soluciones parciales.
- Ensamblaje de soluciones finales.
Ing. Industrial
ITSP
16
ENTRADA / LECTURA
PROCESO
DECISIN
DICISIN MULTIPLE
CONECTAR
IMPRESORA
INDICADOR DE
DIRECCION
= OPERADORES ARITMTICOS
(+, -, *, / )
= OPERADORES RELACIONADOS
( >, <, <, >, =, # )
Ing. Industrial
ITSP
17
EJEMPLOS:
1. El maestro de matemticas desea saber el porcentaje de hombres y mujeres que hay en el grupo
de Ingeniera Industrial.
INICIO
HOMBRES
MUJERES
FIN
ZONA
PRECIO
12
15
18
AMERICA CENTRAL
BIBLIOGRAFIA
http://www-etsi2.ugr.es/alumnos/mlii/Algoritmo.htm
http://es.wikipedia.org/wiki/Algoritmo
Ing. Industrial
ITSP
18
2.2.2 Bottom Up
Con el diseo botton-up el sistema es empezar por el final, sabiendo ya como resolver el problema (y
que componentes reutilizables tiene ya a su disposicin). Desde all, puede ir trabajando hacia arriba,
hasta la solucin del problema principal. Los componentes reutilizables, deben de ser tan "modulares"
como sea posible. Un modulo es un componente de un sistema mayor, que interacta con el resto del
sistema de una forma simple, perfectamente definida, por medio de mensajes. La idea es que un
modulo pueda ser conectado a un sistema. Los detalles de lo que hace internamente el modulo no es
importante al conjunto del sistema, mientras que el modulo realice correctamente la labor asignada.
Esto es lo que se llama informacin oculta y es uno de los principios ms importantes de la ingeniera
de software.
2.2.3 Modular
Uno de los mtodos ms conocidos para resolver un problema es dividirlo en problemas ms
pequeos, llamados subproblemas. De esta manera, en lugar de resolver una tarea compleja y
tediosa, resolvemos otras ms sencillas y a partir de ellas llegamos a la solucin. Esta tcnica se usa
mucho en programacin ya que programar no es ms que resolver problemas, y se le suele llamar
diseo descendente, metodologa del divide y vencers o programacin top-down. Es evidente que si
esta metodologa nos lleva a tratar con subproblemas, entonces tambin tengamos la necesidad de
poder crear y trabajar con subprogramas para resolverlos. A estos subprogramas se les suele llamar
mdulos, de ah viene el nombre de programacin modular. En Pascal disponemos de dos tipos de
mdulos: los procedimientos y las funciones.
BIBLIOGRAFIA
http://www.edu.aytolacoruna.es/aula/programacion/pascal/modular.htm
http://www.edu.aytolacoruna.es/aula/programacion/pascal/modular.htm
Ing. Industrial
ITSP
19
Ing. Industrial
ITSP
20
BIBLIOGRAFIA
http://www.estrucplan.com.ar/Producciones/Entrega.asp?identrega=526
Ing. Industrial
ITSP
21
EJERCICIO
Determinar el tipo de compra que un cliente realizo, si la opcin es:
1234-
Determinar el tipo de compra ( si una cantidad par o impar) mandar a pantalla el sig. texto: subtot-iva
a pag- tot comp- tipo com.
BIBLIOGRAFIA
http://www.fisica.uson.mx/carlos/Nirvana/CComp/cursos/CC11/lecture7.html
Ing. Industrial
ITSP
22
3.4 Datos
3.4.1 Tipos de datos
3.4.2 Identificadores
3.4.3 Almacenamiento, direccionamiento y representacin en memoria.
3.4.4 Proposicin de asignacin.
Ing. Industrial
ITSP
23
PRESENTACIN
Este material contiene los objetivos que se deben lograr al finalizar la unidad, el mtodo de
evaluacin del aprendizaje y el contenido. En un mundo cambiante de tecnologa como se tiene el da
de hoy se hace necesario evaluar y estudiar parte de esa tecnologa. Las computadoras, el hardware,
el software, las grandes mquinas que invaden nuestro mundo requieren de un estudio.
Igualmente contiene los temas relacionados con los lenguajes de programacin. Bsicamente se
presenta la estructura para conocer de donde surge la tecnologa que se est usando. La informacin
en este tema a cambiando a pasos agigantados aun cuando los lenguajes de programacin son
menos cambiantes.
Ing. Industrial
ITSP
24
Ing. Industrial
ITSP
25
Este lenguaje ha sido estrechamente ligado al sistema operativo UNIX, puesto que fueron
desarrollados conjuntamente. Sin embargo, este lenguaje no est ligado a ningn sistema operativo
ni a ninguna mquina concreta. Se le suele llamar lenguaje de programacin de sistemas debido a su
utilidad para escribir compiladores y sistemas operativos, aunque de igual forma se puede desarrollar
cualquier tipo de aplicacin.
La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en
1970 para el primer sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al contrario que
el C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, nmeros enteros y
en coma flotante, de varios tamaos. Adems se pueden crear tipos derivados mediante la utilizacin
de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie
para un DEC PDP-11 y escribi el propio sistema operativo en Introduccin al lenguaje C (2).
La base del C proviene del BCPL, escrito por Martin Richards, y del B escrito por Ken Thompson en
1970 para el primer sistema UNIX en un DEC PDP-7. Estos son lenguajes sin tipos, al contrario que
el C que proporciona varios tipos de datos. Los tipos que ofrece son caracteres, nmeros enteros y
en coma flotante, de varios tamaos. Adems se pueden crear tipos derivados mediante la utilizacin
de punteros, vectores, registros y uniones. El primer compilador de C fue escrito por Dennis Ritchie
para un DEC PDP-11 y escribi el propio sistema operativo en C.
C trabaja con tipos de datos que son directamente tratables por el hardware de la mayora de
computadoras actuales, como son los caracteres, nmeros y direcciones. Estos tipos de datos
pueden ser manipulados por las operaciones aritmticas que proporcionan las computadoras. No
proporciona mecanismos para tratar tipos de datos que no sean los bsicos, debiendo ser el
programador el que los desarrolle. Esto permite que el cdigo generado sea muy eficiente y de ah el
xito que ha tenido como lenguaje de desarrollo de sistemas. No proporciona otros mecanismos de
almacenamiento de datos que no sea el esttico y no proporciona mecanismos de entrada ni salida.
Ello permite que el lenguaje sea reducido y los compiladores de fcil implementacin en distintos
sistemas. Por contra, estas carencias se compensan mediante la inclusin de funciones de librera
para realizar todas estas tareas, que normalmente dependen del sistema operativo.
Originariamente, el manual de referencia del lenguaje para el gran pblico fue el libro de Kernighan y
Ritchie, escrito en 1977. Es un libro que explica y justifica totalmente el desarrollo de aplicaciones en
C, aunque en l se utilizaban construcciones, en la definicin de funciones, que podan provocar
confusin y errores de programacin que no eran detectados por el compilador. Como los tiempos
cambian y las necesidades tambin, en 1983 ANSI establece el comit X3J11 para que desarrolle
una definicin moderna y comprensible del C. El estndar est basado en el manual de referencia
original de 1972 y se desarrolla con el mismo espritu de sus creadores originales. La primera versin
de estndar se public en 1988 y actualmente todos los compiladores utilizan la nueva definicin. Una
aportacin muy importante de ANSI consiste en la definicin de un conjunto de libreras que
acompaan al compilador y de las funciones contenidas en ellas. Muchas de las operaciones
comunes con el sistema operativo se realizan a travs de estas funciones. Una coleccin de ficheros
de encabezamiento, headers, en los que se definen los tipos de datos y funciones incluidas en cada
librera. Los programas que utilizan estas bibliotecas para interactuar con el sistema operativo
obtendrn un comportamiento equivalente en otro sistema.
BIBLIOGRAFIA
www.ctisa.com/diccionario.htm
es.wikipedia.org/wiki/Programaci%C3%B3n
Ing. Industrial
ITSP
26
Ing. Industrial
ITSP
27
PROGRAMACIN ESTRUCTURADA
La programacin estructurada es una teora de programacin que consiste en construir programas de
fcil comprensin.
La programacin estructurada es especialmente til, cuando se necesitan realizar correcciones o
modificaciones despus de haber concluido un programa o aplicacin. Al haberse utilizado la
programacin estructurada, es mucho ms sencillo entender la codificacin del programa, que se
habr hecho en diferentes secciones.
La programacin estructurada se basa en una metodologa de desarrollo de programas llamada
refinamiento sucesivo: Se plantea una operacin como un todo y se divide en segmentos ms
sencillos o de menor complejidad. Una vez terminado todos los segmentos del programa, se procede
a unificar las aplicaciones realizadas por el pool de programadores. Si se ha utilizado adecuadamente
la programacin estructurada, esta integracin debe ser sencilla y no presentar problemas al integrar
la misma, y de presentar algn problema, ser rpidamente detectable para su correccin.
La representacin grafica de la programacin estructurada se realiza a travs de diagramas de flujo o
flow chart, el cual representa el programa con sus entradas, procesos y salidas.
La programacin estructurada propone segregar los procesos en estructuras lo ms simple posibles,
las cuales se conocen como secuencia, seleccin e interaccin. Ellas estn disponibles en todos los
lenguajes modernos de programacin imperativa en forma de sentencias. Combinando esquemas
sencillos se pueden llegar a construir sistemas amplios y complejos pero de fcil entendimiento.
Programacin Lineal
En programacin lineal se habla de trminos tales como restricciones, que vienen a ser la
manipulacin del tamao de funciones que se encuentran sujetas a ciertas limitaciones.
Podemos decir que la programacin lineal es el conjunto de tcnicas matemticas que intentan
resolver la maximizacin o minimizacin de una funcin objetivo, funcin lineal de varias variables,
sujeta a ciertas restricciones, expresadas por inecuaciones lineales.
En problemas de programacin lineal intervienen:
La funcin f(x,y) = ax + by + c conocida tambin como funcin objetivo (a la cual deberemos
optimizar). Aqu x e y son las variables de decisin, mientras que a, b y c son constantes.
Las restricciones que deben ser inecuaciones lineales, donde su nmero depende del problema en
que trabajemos. Tambin ver que el carcter de desigualdad viene impuesto por las limitaciones, que
son: inferiores a... ( menores: < o ); como mnimo de ... (mayores: > o ) . Maximizando o minimizando,
las desigualdades pueden darse en cualquiera de los dos sentidos.
Valores de x e y que verifican todas y cada una de las restricciones, lo que se conoce como conjunto
o regin factible.
La solucin ptima del problema ser un par de valores (x0, y0) del conjunto factible que haga que
f(x,y) tome el valor mximo o mnimo.
Se utilizan las siglas PPL para indicar problema de programacin lineal.
Ing. Industrial
ITSP
28
Peculiaridades de C
Una de las cosas importantes de C que debes recordar es que es Case Sensitive (sensible a las
maysculas o algo as). Es decir que para C no es lo mismo escribir Printf que printf.
Conviene indicar tambin que las instrucciones se separan por ";".
Compiladores de C
Un compilador es un programa que convierte nuestro cdigo fuente en un programa ejecutable (Me
imagino que la mayora ya lo sabe, pero ms vale asegurar). El ordenador trabaja con 0 y 1. Si
escribiramos un programa en el lenguaje del ordenador nos volveramos locos. Para eso estn
lenguajes como el C. Nos permiten escribir un programa de manera que sea fcil entenderlo por una
persona. Luego es el compilador el que se encarga de convertirlo al complicado idioma de un
ordenador.
En la prctica a la hora de crear un programa nosotros escribimos el cdigo fuente, en nuestro caso
en C, que normalmente ser un fichero de texto normal y corriente que contiene las instrucciones de
nuestro programa. Luego se lo pasamos al compilador y este se encarga de convertirlo en un
programa.
Siguiendo la filosofa de mi pgina los compiladores que usaremos sern gratuitos. Yo recomiendo
usar el DJGPP para MS-Dos y el GNU C para Linux. Ambos son compiladores de lnea de comando
as que necesitaremos tambin un editor para crear nuestros programas.
La solucin ms simple en MS-Dos puede ser usar el edit, en Windows el notepad. Pero no son ms
que editores sin ninguna otra funcionalidad. Otra posibilidad es un entorno de desarrollo llamado
RHIDE, un programa muy til que automatiza muchas de las tareas del programador (del estilo del
Turbo C y Turbo Pascal). Si queremos una herramienta muy avanzada podemos usar Emacs, que es
un editor muy potente, aunque para algunos puede parecer muy complicado (valientes y a por ello).
Estos dos programas estn disponibles tanto en Linux como en MS-Dos.
El primer programa: Hola Mundo
En un alarde de originalidad vamos a hacer nuestro primer programa: hola mundo. Nadie puede llegar
muy lejos en el mundo de la programacin sin haber empezado su carrera con este original y
funcional programa. All va:
Ing. Industrial
ITSP
29
#include <stdio.h>
int main()
{
/* Aqu va el cuerpo del programa */
printf( "Hola mundo\n" );
/* Esto imprime hola mundo en pantalla */
return 0;
}
Comprobado con DJGPP
Qu fcil eh? Este programa lo nico que hace es sacar por pantalla el mensaje:
Hola mundo
Vamos ahora a comentar el programa lnea por lnea (Esto no va a ser ms que una primera
aproximacin).
#include <stdio.h>
#include es lo que se llama una directiva. Sirve para indicar al compilador que incluya otro archivo.
Cuando en compilador se encuentra con esta directiva la sustituye por el archivo indicado. En este
caso es el archivo stdio.h que es donde est definida la funcin printf, que veremos luego.
int main()
Es la funcin principal del programa. Todos los programas de C deben tener una funcin llamada
main. Es la que primero se ejecuta. El int (entero) que tiene al principio significa que cuando la
funcin main acabe devolver un nmero entero. Este valor se suele usar para saber cmo ha
terminado el programa. Normalmente este valor ser 0 si todo ha ido bien, o un valor distinto si se ha
producido algn error (pero esto lo decidimos nosotros, ya lo veremos). De esta forma si nuestro
programa se ejecuta desde otro el programa 'padre' sabe cmo ha finalizado, si ha habido errores o
no.
Se puede usar la definicin 'void main()', que no necesita devolver ningn valor, pero se recomienda
la forma con 'int' que es ms correcta. A lo largo de este curso vers muchos ejemplos que uso 'void
main' y falta el return 0; del final, el cdigo funciona correctamente pero puede dar un 'warning' al
compilar. En estos momentos estoy intentando corregir esto, pido perdn por las molestias.
{
Son las llaves que indican el comienzo de una funcin, en este caso la funcin main.
/* Aqu va el cuerpo del programa */
Esto es un comentario, no se ejecuta. Sirve para describir el programa. Conviene acostumbrarse a
comentar los programas. Un comentario puede ocupar ms de una lnea. Por ejemplo el comentario:
/* Este es un comentario
que ocupa dos filas */
es perfectamente vlido.
printf( "Hola mundo\n" );
Aqu es donde por fin el programa hace algo que podemos ver al ejecutarlo. La funcin printf muestra
un mensaje por la pantalla. Al final del mensaje "Hola mundo" aparece el smbolo '\n'; este hace que
despus de imprimir el mensaje se pase a la lnea siguiente.
Fjate en el ";" del final. Es la forma que se usa en C para separar una instruccin de otra. Se pueden
poner varias en la misma lnea siempre que se separen por el punto y coma.
return 0;
Como he indicado antes el programa al finalizar develve un valor entero. Como en este programa no
se pueden producir errores (nunca digas nunca jams) la salida siempre ser 0. La forma de hacer
que el programa devuelva un 0 es usando return. Esta lnea significa 'finaliza la funcin main haz que
devuelva un 0.
}
...y cerramos llaves con lo que termina el programa. Todos los programas finalizan cuando se llega al
final de la funcin main.
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
30
Cmo se hace?
Primero debemos crear el cdigo fuente del programa. Para nuestro primer programa el cdigo fuente
es el del listado anterior. Arranca tu compilador de C, sea cual sea. Crea un nuevo fichero y copia el
cdigo anterior. Llmalo por ejemplo primero.c.
Ahora, tenemos que compilar el programa para crear el ejecutable. Si tu compilador es de windows, o
con mens busca una opcin llamada "compile", o make, build o algo as.
Si estamos usando DJGPP (ver informacin sobre instalacin y uso de DJGPP): tenemos que
llamarlo desde la lnea de comando:
gcc -c primero.c -o primero.exe
Si usamos Rhide basta con hacer CTRL-F9.
Nota adicional sobre los comentarios
Los comentarios se pueden poner casi en cualquier parte. Excepto en medio de una instruccin. Por
ejemplo lo siguiente no es vlido:
pri/* Esto es un comentario */ntf( "Hola mundo" );
GARRAFAL
No podemos cortar a printf por en medio, tendramos un error al compilar. Lo siguiente no dara error
(al menos usando DJGPP), pero es una fea costumbre:
printf( /* Esto es un comentario */ "Hola mundo" );
Y por ltimo tenemos:
printf( "Hola/* Esto es un comentario */ mundo" );
Que no dara error, pero al ejecutar tendramos:
Hola /* Esto es un comentario */ mundo
porque /* Esto es un comentario */ queda dentro de las comillas y C lo interpreta como texto, no como
un comentario.
Qu sabemos hacer?
Pues la verdad es que todava no hemos aprendido mucho. Lo nico que podemos hacer es compilar
nuestros programas. Pero paciencia, en seguida avanzaremos.
Ejercicios
Busca los errores en este programa:
int main()
{
/* Aqu va el cuerpo del programa */
Printf( "Hola mundo\n" );
return 0;
}
Solucin:
Si lo compilamos posiblemente obtendremos un error que nos indicar que no hemos definido la
funcin 'Printf'. Esto es porque no hemos includo la dichosa directiva '#include <stdio.h>'. (En
algunos compiladores no es necesario incluir esta directiva, pero es una buena costumbre hacerlo).
Si lo corregimos y volvemos a compilar obtendremos un nuevo error. Otra vez nos dice que
desconoce 'Printf'. Esta vez el problema es el de las maysculas que hemos indicado antes. Lo
correcto es poner 'printf' con minsculas. Parece una tontera, pero seguro que nos da ms de un
problema.
BIBLIOGRAFIA
http://lenguajes-de-programacion.com/programacion-estructurada.shtml
Ing. Industrial
ITSP
31
Alerta
Espacio atrs
Salto de pgina
Salto de lnea
Retorno de carro
Tabulacin horizontal
Tabulacin vertical
Barra invertida
Comilla simple
Comillas dobles
Visualiza un carcter cuyo cdigo ASCII es OOO en octal
Visualiza un carcter cuyo cdigo ASCII es HHH en hexadecimal
Un programa C puede estar formado por diferentes mdulos o fuentes. Es conveniente mantener las
fuentes de un tamao no muy grande, para que la compilacin sea rpida. Tambin, al dividirse un
programa en partes, puede facilitar la legibilidad del programa y su estructuracin. Las diferentes
fuentes son compiladas de forma separada, nicamente las fuentes que han sido modificados desde
la ltima compilacin, y despus combinados con las libreras necesarias para formar el programa en
su versin ejecutable.
BIBLIOGRAFIA
http://lenguajes-de-programacion.com/programacion-estructurada.shtml
Ing. Industrial
ITSP
32
3.4 Datos
3.4.1 Tipos de datos
Cuando usamos un programa es muy importante manejar datos. En C podemos almacenar los datos
en variables. El contenido de las variables se puede ver o cambiar en cualquier momento. Estas
variables pueden ser de distintos tipos dependiendo del tipo de dato que queramos meter. No es lo
mismo guardar un nombre que un nmero. Hay que recordar tambin que la memoria del ordenador
es limitada, as que cuando guardamos un dato, debemos usar slo la memoria necesaria. Por
ejemplo si queremos almacenar el nmero 400 usaremos una variable tipo int (la estudiamos ms
abajo) que ocupa slo 16 bits, y no una de tipo long que ocupa 32 bits. Si tenemos un ordenador con
32Mb de Ram parece una tontera ponernos a ahorrar bits (1Mb=1024Kb, 1Kb=1024bytes,
1byte=8bits), pero si tenemos un programa que maneja muchos datos puede no ser una cantidad
despreciable. Adems ahorrar memoria es una buena costumbre.
A las variables no se les puede dar cualquier nombre. No se pueden poner ms que letras de la 'a' a
la 'z' (la no vale), nmeros y el smbolo '_'. No se pueden poner signos de admiracin, ni de
interrogacin... El nombre de una variable puede contener nmeros, pero su primer carcter no puede
serlo.
Ejemplos de nombres vlidos:
camiones
numero
buffer
a1
j10hola29
num_alumnos
Ejemplos de nombres no vlidos:
1abc
nombre?
num/alumnos
Tampoco valen como nombres de variable las palabras reservadas que usa el compilador. Por
ejemplo: for, main, do, while.
Por ltimo es interesante sealar que el C distingue entre maysculas y minsculas. Por lo tanto:
Nombre
nombre
NOMBRE
seran tres variables distintas.
El tipo Int
En una variable de este tipo se almacenan nmeros enteros (sin decimales). El rango de valores que
admite es -32767 a 32767. Cuando definimos una variable lo que estamos haciendo es decirle al
compilador que nos reserve una zona de la memoria para almacenar datos de tipo int. Para guardarla
necesitaremos 16 bits de la memoria del ordenador (216=32767). Para poder usar una variable
primero hay que declararla (definirla). Hay que decirle al compilador que queremos crear una variable
y hay que indicarle de qu tipo. Por ejemplo: int numero; esto hace que declaremos una variable
llamada nmero que va a contener un nmero entero.
Pero dnde se declaran las variables?
Tenemos dos posibilidades, una es declararla como global y otra como local. Por ahora vamos a decir
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
33
que global es aquella variable que se declara fuera de la funcin main y local la que se declara
dentro:
La diferencia prctica es que las variables globales se pueden usar en cualquier procedimiento. Las
variables locales slo pueden usarse en el procedimiento en el que se declaran. Como por ahora slo
tenemos el procedimiento (o funcin, o rutina, o subrutina, como prefieras) main esto no debe
preocuparnos mucho por ahora. Cuando estudiemos cmo hacer un programa con ms funciones
aparte de main volveremos sobre el tema. Sin embargo debes saber que es buena costumbre usar
variables locales que globales. Ya veremos por qu.
Podemos declarar ms de una variable en una sola lnea:
int x, y;
Ing. Industrial
ITSP
34
Ing. Industrial
ITSP
35
Resultado:
El cdigo ASCII de la letra A es 65.
Como vemos la nica diferencia para obtener uno u otro es el modificador (%c %i) que usemos. Las
variables tipo char se pueden usar (y de hecho se usan mucho) para almacenar enteros. Si
necesitamos un nmero pequeo (entre -127 y 127) podemos usar una variable char (8bits) en vez de
una int (16bits), con el consiguiente ahorro de memoria.
Todo lo dems dicho para los datos de tipo
int
se aplica tambin a los de tipo
char
.
Una curiosidad:
letra = 'A';
printf( "La letra es: %c y su valor ASCII es: %i\n", letra, letra );
letra = letra + 1;
printf( "Ahora es: %c y su valor ASCII es: %i\n", letra, letra );
En este ejemplo letra comienza con el valor 'A', que es el cdigo ASCII 65. Al sumarle 1 pasa a tener
el valor 66, que equivale a la letra 'B' (cdigo ASCII 66). La salida de este ejemplo sera:
La letra es A y su valor ASCII es 65
Ahora es B y su valor ASCII es 66
El modificador Unsigned
Este modificador (que significa sin signo) modifica el rango de valores que puede contener una
variable. Slo admite valores positivos. Si hacemos:
unsigned char variable;
Esta variable en vez de tener un rango de -128 a 128 pasa a tener un rango de 0 a 255.
El tipo Float
En este tipo de variable podemos almacenar nmeros decimales, no slo enteros como en los
anteriores. El rango de posibles valores es del 3,4E-38 al 3,4E38.
Declaracin de una variable de tipo float:
float numero;
Para imprimir valores tipo float Usamos %f.
float num=4060.80;
printf( "El valor de num es : %f", num );
Resultado:
El valor de num es: 4060.80
Si queremos escribirlo en notacin exponencial usamos %e:
float num = 4060.80;
printf( "El valor de num es: %e", num );
Ing. Industrial
ITSP
36
El tipo Double
En las variables tipo double se almacenan nmeros reales del 1,7E-307 al 1,7E308. Se declaran
como double:
double numero;
Para imprimir se usan los mismos modificadores que en float.
Cmo calcular el mximo valor que admite un tipo de datos
Lo primero que tenemos que conocer es el tamao en bytes de ese tipo de dato. Vamos a ver un
ejemplo con el tipo INT. Hagamos el siguiente programa:
#include <stdio.h>
void main()
{
int num1;
printf( "El tipo int ocupa %i bytes\n", sizeof(int) );
}
Comprobado con DJGPP
En mi ordenador el resultado es:
El tipo int ocupa 4 bytes.
Como sabemos 1byte = 8bits. Por lo tanto el tipo int ocupa 4*8=32 bits.
Ahora para calcular el mximo nmero debemos elevar 2 al nmero de bits obtenido. En nuestro
ejemplo: 2^32=4.294.967.296. Es decir en un int se podra almacenar un nmero entre 0 y
4.294.967.296.
Sin embargo esto slo es cierto si usamos un tipo unsigned (sin signo, se hace aadiendo la palabra
unsigned antes de int). Para los tipos normales tenemos que almacenar nmeros positivos y
negativos. As que de los 4.294.967.296 posibles nmeros la mitad sern positivos y la mitad
negativos. Por lo tanto tenemos que dividir el nmero anterior entre 2 = 2.147.483.648. Como el 0 se
considera positivo el rango de nmeros posibles que se pueden almacenar en un int sera: 2.147.483.648 a 2.147.483.647.
Resumen:
1) Obtenemos el nmero de bytes.
2) Multiplicamos por ocho (ya lo tenemos en bits).
3) Elevamos 2 al nmero de bits.
4) Dividimos entre 2.
Overflow: Qu pasa cuando nos saltamos el rango
El overflow es lo que se produce cuando intentamos almacenar en una variable un nmero mayor del
mximo permitido. El comportamiento es distinto para variables de nmeros enteros y para variables
de nmeros en coma flotante.
Ing. Industrial
ITSP
37
void main()
{
int num1;
num1 = 2147483648;
printf( "El valor de num1 es: %i\n", num1 );
}
Comprobado con DJGPP
El resultado que obtenemos es:
El valor de num1 es: -2147483648
Comprueba si quieres que con el nmero anterior (2.147.483.647) no pasa nada.
Con nmeros en coma flotante
El comportamiento con nmeros en coma flotante es distinto. Dependiendo del ordenador si nos
pasamos del rango al ejecutar un programa se puede producir un error y detenerse la ejecucin.
Con estos nmeros tambin existe otro error que es el underflow. Este error se produce cuando
almacenamos un nmero demasiado pequeo (3,4E-38 en float).
Resumen de los tipos de datos en C
Esto es algo orientativo, depende del sistema.
Tipo
Datos almacenados N de Bits Valores posibles (Rango)
unsigned
char
Caracteres
8
-128 a 128
int
enteros
16
-32.767 a 32.767
long
enteros largos
32
-2.147.483.647 a 2.147.483.647
float
Nums. reales (coma flotante) 32 3,4E-38 a 3,4E38
double
Nums. reales (coma flotante doble) 64
1,7E-307 a 1,7E308
Rango usando
0 a 255
0 a 65.535
0 a 4.294.967.295
Esto no siempre es cierto, depende del ordenador y del compilador. Para saber en nuestro caso qu
tamao tienen nuestros tipos de datos debemos hacer lo siguiente. Ejemplo para int:
#include <stdio.h>
void main()
{
printf( "Tamao (en bits) de int = %i\n", sizeof( int )*8 );
}
Ya veremos ms tarde lo que significa sizeof. Por ahora basta con saber que nos dice cual es el
tamao de una variable o un tipo de dato.
Ejercicios
Ejercicio 1. Busque los errores:
#include <stdio.h>
void main()
{
int nmero;
nmero = 2;
}
Ing. Industrial
ITSP
38
Solucin: Los nombres de variables no pueden llevar acentos, luego al compilar nmero dar error.
#include <stdio.h>
void main()
{
int numero;
numero = 2;
printf( "El valor es %i" Numero );
}
3.4.2 Identificadores
Son los nombres elegidos para las variables, constantes, funciones, clases y similares. El primer
carcter debe ser una letra o un subrayado. El resto del nombre puede contener dgitos. Los
identificadores que comienzan con dos subrayados estn reservados para uso interno del compilador
C++.
Ing. Industrial
ITSP
39
BIBLIOGRAFIA
http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
Ing. Industrial
ITSP
40
Ing. Industrial
ITSP
41
EVALUACIN DE EXPRESIONES
X=A/B-C+D*E-A*C
EXPRESIN
Operandos
Operadores
Delimitadores
5 operandos A,B,C,D,E
Pueden ser cualquier variable o constante vlida del lenguaje
Los valores de las variables deben ser coherentes con las operaciones que se realicen con
ellas
6 operadores /,-,+,*,-,*
Describen las operaciones que se realizan entre las variables
Pueden ser aritmticos, lgicos, relacionales
EVALUACIN DE EXPRESION
X=A/B-C+D*E-A*C
Orden en el que se deben realizar las operaciones
Cada lenguaje debe definir exactamente dicho orden
Si A = 4, B = C = 2, D = E = 3 =>
X=((4/2)-2)+(3*3)-(4*2)
=0+9-8
=1
X = ( 4 / (2 - 2 + 3 ) ) * ( 3 - 4 ) * 2
= ( 4 / 3 ) * ( -1 ) * 2
= -2.66666666
El orden en el que se deben realizar las operaciones se especifica mediante: prioridades o
parntesis
El lenguaje define prioridades para los operadores
El programador puede cambiar las prioridades mediante ( )
A igual prioridad, evaluacin de izquierda a derecha
Ejemplo:
A/B*C
(A/B)*C
(1)
A/(B*C)
(2)
Prioridad de / == prioridad de *
Si A = B = C = 2
(1) = 2
(2) = 0.5
En C++ se evala segn (1)
Ejemplo
X = A / B - C + D * E - A * C se evaluar en C++
X = ( ( (A / B) - C ) + ( D * E ) ) - ( A * C )
Ing. Industrial
ITSP
42
BIBLIOGRAFIA
http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
Ing. Industrial
ITSP
43
Ing. Industrial
ITSP
44
BIBLIOGRAFIA
http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
Ing. Industrial
ITSP
45
IV. FUNCIONES
4.1 Funciones
4.1.1 Definicin de funciones
4.1.2 Funciones estndar
4.4 Punteros
4.4.1 Definicin de punteros
4.4.2 Paso de variable
Ing. Industrial
ITSP
46
4.1 Funciones
4.1.1 Definicin de funciones
Las funciones son porciones de cdigo que devuelven un valor. Permiten descomponer el programa
en mdulos que se llaman entre ellos. En C no existe diferencia entre funciones y procedimientos: a
todas las subrutinas se las llama funciones.
La definicin de una funcin especfica lo siguiente:
nombre de la funcin
nmero de argumentos que lleva y tipo de cada uno de ellos
tipo de datos que devuelve
Cuerpo de la funcin (el cdigo que ejecuta)
Sintaxis:
tipo nombre ( arg1, arg2, ... )
{
... cuerpo ...
}
Cada argumento se especifica como en una declaracin de variable.
El cuerpo de la funcin debera contener una sentencia donde se devuelve el resultado de la funcin,
que se hace de esta forma:
return expresin;
La funcin devolver el resultado de la expresin.
Ing. Industrial
ITSP
47
Ing. Industrial
ITSP
48
h= letra(f);
getch();
return0;
}
#include(conio.h)
# include(studio.h)
Main()
{
Int num1, num2;
Printf(deme un numero);
Scantf(% d, & num1),
Suma=num1+5;
Printf(%d,& suma);
Getch();
Return 0;
}
Funciones
#include(conio.h)
# include(studio.h)
Float resta(a-b);
}
Int multiplicacion(float c, int c)
}
Char letra(int c);
{
If e>5 then (s);
}
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
49
Ing. Industrial
ITSP
50
4.4 Punteros
4.4.1 Definicin de punteros
Es una variable que representa la posicin (en vez del valor) de otro dato tal como una variable o un
elemento de una formacin.
Ing. Industrial
ITSP
51
MOSTRAR EN PANTALLA
contenido
printf(%d,*A);
printi(%f,*lugar);
printf(%d,*A1);
ubicacion
printf(%xh,A);
printf(%xh,lugar);
printf(%xh,A1);
Realizar una funcin que devuelva un nmero flotante bajo las siguientes condiciones. Realizar una
multiplicacin de dos nmeros enteros si un carcter es A en cualquier otro caso realizar una divisin,
mostrar en pantalla el valor del carcter entre las 2 variables de tipo entero y el resultado de la
funcin.
#include(conio.h)
# include(studio.h)
Float multiplicacion (int num1, int num2, char letra)
{
If (letra==A) then
return(num1*num2);
else
return(num1/num2);
}
Main()
{
Int num 1,num2;
Float multiplicacion;
char letra;
Printf(dame 2 enteros);
Scanf(%d,& num1);
Scanf(%,d& num2);
Printf(dame un caracter);
Scanf(%c,& letra);
multiplicacion1=multiplicacion(num1,num2,letra);
Printf(%d,%d,num1,num2);
printf(%c, letra);
printf(%f,multiplicacion1);
Getch();
Return0;
}
BIBLIOGRAFIA
http://dac.escet.urjc.es/docencia/ETC-Superior/teoria-cuat1/HojaEj5.pdf
Ing. Industrial
ITSP
52
V. ESTRUCTURAS DE SELECTIVAS
5.1 Selectiva simple
Ing. Industrial
ITSP
53
Espaol
Si <condicin>
Entonces
<accin Si>
fin_si
Ingls
If <condicin>
then
<accin Si>
endif
Ing. Industrial
ITSP
54
Ejemplo 1.
Construir un algoritmo tal, que dado como dato la calificacin de un alumno en un examen, escriba
"Aprobado" en caso que esa calificacin fuese mayor que 8.
Salidas: mensaje de aprobado si se cumple la condicin.
Entradas: calificacin
Datos adicionales: un alumno aprueba si la calificacin es mayor que 8
Variables:
Cal = calificacin
Algoritmo:
Inicio
Leer (cal)
Si cal > 8 entonces
Escribir ("aprobado")
Fin_si
Fin
Ingls
If <condicin> then
<accin S1>
else
<accin S2>
End_if
Ing. Industrial
ITSP
55
Ejemplo 1
Dado como dato la calificacin de un alumno en un examen, escriba "aprobado" si su calificacin es
mayor que 8 y "Reprobado" en caso contrario.
Algoritmo:
Inicio
Leer (cal)
Si cal > 8 entonces
Escribir ("aprobado")
Sino
Escribir ("reprobado")
Fin_si
Fin
Ing. Industrial
ITSP
56
Ejemplo 2.
Dado como dato el sueldo de un trabajador, aplicar un aumento del 15% si su sueldo es inferior a
$1000 y 12% en caso contrario, luego imprimir el nuevo sueldo del trabajador.
EXPRESIONES LGICAS
Sirven para plantear condiciones o comparaciones y dan como resultado un valor booleano verdadero
o falso, es decir, se cumple o no se cumple la condicin. Se pueden clasificar en simples y complejas.
Las simples son las que usan operadores relacionales y las complejas las que usan operadores
lgicos.
Ejemplos:
Un ejemplo en el cual usamos el operador lgico AND sera:
Una escuela aplica dos exmenes a sus aspirantes, por lo que cada uno de ellos obtiene dos
calificaciones denotadas como C1 y C2. El aspirante que obtenga calificaciones mayores que 80 en
ambos exmenes es aceptado; en caso contrario es rechazado.
En este ejemplo se dan las condiciones siguientes:
Si (C1 >= 80) y (C2 >= 80) entonces
Escribir ("aceptado")
Sino
Escribir ("rechazado")
Fin_si
Note que tambin usa operadores relacionales. Por lo general cuando hay operadores lgicos, stos
van acompaados de operadores relacionales. Un ejemplo usando el operador lgico OR sera:
Una escuela aplica dos exmenes a sus aspirantes, por lo que cada uno de ellos obtiene dos
calificaciones denotadas como C1 y C2. El aspirante que obtenga una calificacin mayor que 90 en
cualquiera de los exmenes es aceptado; en caso contrario es rechazado.
En este caso se dan las condiciones siguientes:
Si (C1 >=90) or (C2 >=90) entonces
Escribir ("aceptado")
Sino
Escribir ("rechazado")
Fin_si
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
57
La instruccin equivale a OR ya que nos dice que puede ser en cualquiera de los exmenes no
necesariamente en los dos. En el ejemplo 1 la palabra ambos equivala a seleccionar la instruccin
AND. Si la instruccin nos dijera que obtenga una nota en cualquiera de los exmenes pero no en
ambos, nos estara indicando una instruccin XOR que es un tipo de OR pero exclusivo. Es decir, no
puede considerarse el caso en que tenga la misma nota en los dos exmenes, solo en uno de los
dos.
Algoritmo:
Inicio
Leer (ht, ph)
Si ht >40 entonces
He= ht - 40
Si he > 8 entonces
Het =he - 8
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
58
Ejemplo 2.
Dados los datos A, B y C que representan nmeros enteros diferentes, construir un algoritmo para
escribir estos nmeros en forma descendente. Este es un ejemplo de los algoritmos conocidos como
de Lgica Pura, ya que poseen muchas decisiones y muchas bifurcaciones.
Salida: A, B y C ordenados descendentemente.
Entradas: A, B y C.
La dinmica del problema es comparar dos nmeros a la vez para conocer cul es el mayor.
Ing. Industrial
ITSP
59
Ejemplo 1:
Disear un algoritmo tal que dados como datos dos variables de tipo entero, obtenga el resultado de
la siguiente funcin:
Ing. Industrial
ITSP
60
Ejemplo 2.
Dados como datos la categora y el sueldo de un trabajador, calcule el aumento correspondiente
teniendo en cuenta la siguiente tabla. Imprimir la categora del trabajador y el nuevo sueldo.
Definicin de variables:
Cate = categora
Sue = sueldo
Nsue = nuevo sueldo
ALGORITMO
Inicio
Leer (cate, sue)
En caso que cate sea
1: hacer nsue <-- sue * 1.15
2: hacer nsue <-- sue * 1.10
3: hacer nsue <-- sue * 1.08
4: hacer nsue <-- sue * 1.07
Fin_caso_que
Escribir (cate, nsue)
Fin
BIBLIOGRAFIA
http://www.mailxmail.com/curso/informatica/programacionestructurada/capitulo13.htm
Ing. Industrial
ITSP
61
Ing. Industrial
ITSP
62
Condicin
NO
SI
Grupo de Instrucciones
Donde sentencia es una sentencia vlida o un bloque de sentencias. La condicin puede ser
cualquier expresin y cualquier valor distinto de 0 es cierto.
#include "stdio.h"
main()
{
int i;
float x, suma, promedio;
/*
lee nmeros desde el teclado para calcular su promedio, termina
Cuando se introduce -1
*/
x = suma = 0;
i = 1;
while (x != -1)
{
printf("\nIntroduzca el valor %d:", i);
scanf("%f", &x);
suma += x;
}
promedio := suma/i;
printf("\nEl promedio es: %f / %d = %f", suma, i, promedio);
}
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
63
do{
sentencia;
}while(condicin);
Grupos de Instrucciones
SI
Condicin
NO
Fin
Las llaves no son necesarias en el caso de una sentencia simple, pero se recomienda colocarlas por
razones de legibilidad, este bucle iterar hasta que la condicin sea falsa. Ejemplo:
El siguiente bucle lee nmeros desde el teclado hasta que encuentra un nmero negativo:
do{
scanf("%d", &num);
}while(num = 0);
Ing. Industrial
ITSP
64
Grupo de Instrucciones
Donde inicializacin es una sentencia de asignacin para inicializar la variable de control del bucle,
condicin es una expresin relacional que determina el final del bucle e incremento define cmo
cambia la variable de control cada vez que se ejecute una iteracin del bucle.
Ejemplo:
#include "stdio.h"
/* imprime los numeros del 1 al 100 */
main()
{
int x;
for (x=1; x<=100; x++) printf("%d ", x);
}
En este ejemplo, x se inicializa a 1 y se compara con 100, ya que la condicin es cierta, se ejecuta la
funcin printf() y x se incrementa en 1, este bucle se repite hasta que x es mayor que 100. A
continuacin, un ejemplo del bucle for con varias sentencias:
#include "stdio.h"
/* imprime el cuadrado de los numeros del 10 al 1 */
main()
{
int i, x;
for (i=10; x0; x--){
x := i*i;
printf("%d al cuadrado es: %d\n", i, x);
}
Ing. Industrial
ITSP
65
VII. ARREGLOS
7.1 Arreglo unidimensional
7.1.1 Conceptos bsicos
7.1.2 Operaciones aplicaciones.
7.4 Operaciones
7.5 Aplicaciones
7.6 Registros
7.7 Archivos
Ing. Industrial
ITSP
66
C) Asignacin
int A[15];
char* nombre[5];
double talla[10];
char vocales[5];
Asigna el valor 45 al elemento de ndice 10 del arreglo A.
Asigna 1.56 al elemento de ndice 2 del arreglo talla.
Asigna Fernndez al elemento de ndice 2 del arreglo nombre.
Asigna E al elemento de ndice 3 del arreglo vocales.
A[10] = 45;
talla[2] = 1.56;
nombre[2] = "Fernandez";
vocales[3] = 'E';
C) Entrada/salida
para (i = 1 ; hasta i <= N ; con i=i+1)
{
Leer V [ i ]; }
Ing. Industrial
ITSP
67
PRACTICA:
#include<stdio.h> /*librera para funciones entrada/salida*/
#include<conio.h> /*librera conio.h*/
int a,x[4],y[4],z[4]; /* declaracin de variables enteras*/
main() /*funcin principal*/
{ /*inicio del programa*/
clrscr(); /*limpia pantalla*/
printf("escribe una matriz x"); /* imprime un comentario en la pantalla*/
for(a=0;a<4;a++) /*ciclo de repeticin cuando a = 0, a menor a 4 e incremento de a*/
{ /*inicio del for*/
gotoxy((a+1)*3,3);scanf("%d",&x[a]); /*coordenadas de posicin y introduccin de valores a las
variables*/
}
printf("Introduce los valores de la matriz y:"); /*imprime un mensaje en pantalla*/
for(a=0;a<4;a++){ /*ciclo de repeticin cuando a = 0, a menor a 4 e incremento de a*/
gotoxy((a+1)*3,6);/*coordenadas de posicin*/
scanf("%d",&y[a]); /* lee la variable*/
}
for(a=0;a<4;a++)
z[a]=x[a]+y[a]; /* operacin matemtica*/
for(a=0;a<4;a++){ /*ciclo de repeticion cuando a = 0, a menor a 4 e incremento de a*/
gotoxy((a+1)*3,10);printf("%d",z[a]); /*coordenadas de posicin e imprime los valores de las
variables*/
}
getch(); /* pausa*/
}/* fin del programa*/
1
2
3
4
1 2 3 4 5
[1,1][1,2][1,3][1,4][1,5]
[2,1][2,2][2,3][2,4][2,5]
[3,1][3,2][3,3][3,4][3,5]
[4,1][4,2][4,3][4,4][4,5]
Ing. Industrial
ITSP
68
7.4 Operaciones
Declaracin:
double nota[25][4];
int DocCasacas[3][30];
char Rpta[45][10];
A) Inicializacin de Matrices
Peso declara e inicializa los pesos promedios de 30 deportistas en cada uno de los 12 meses del
2001. (Total 240 pesos agrupados de 12 en 12). Total 240 datos reales
int DocCasacas[3][4]={{20,40,35,80}, {25,70,50,36}, {48,36,64,24}};
int DocCasacas[3][4]={20,40,35,80, 25,70,50,36, 48,36,64,24};
int DocCasacas[ ][4]={{20,40,35,80}, {25,70,50,36}, {48,36,64,24}};
Declara e inicializa DocCasacas, las docenas de casacas de 3 tallas ('S', 'M','L') confeccionadas
en cada una de los 4 semanas del mes de Junio-2002
char Rpta[5][4]= { {'a','e','c','d'}, {'e','c','d','a'}, {'c','c','d','c'} };
char Rpta[5][4]={'a','e','c','d','e','c','d','a', 'c','c','d','c' };
char Rpta[ ][4]={'a','e','c','d', 'e','c','d','a', 'c','c','d','c' };
B) Asignacin
A[10] [20] = 45
A[10] [20] = 45;
Asigna el valor 45 al elemento de la fila 10 y columna 20 del arreglo bidimensional A.
Rpta [2][5] = 'c'
Rpta [2][5] = 'c';
Asigna 'c' al elemento de la fila 2 y columna 5 del arreglo Rpta
C) Operaciones de Entrada/Salida
para (i = 0 ; i< 5 ; i = i+1)
{ para ( j = 0 ; j< 3 ; j = j+1)
{ Leer V [ i ][ j ]; }
}
Ing. Industrial
ITSP
69
7.5 Aplicaciones
Elaborar un algoritmo que lea los datos numricos de tipo entero para una matriz de 10 renglones con
15 columnas y mandar a desplegar en contenido de la misma.
Algoritmo de PRODUCCIN
1. definir variables
NUMEROS: arreglo [10,15] entero
REN,COL: entero
2. FOR REN=1,10
a.FOR COL=1,15
1. solicitar elemento REN,COL
2. leer NUMEROS[REN,COL]
b. END FOR
3. END FOR
4. FOR REN=1,10
a= FOR COL=1,15
1. Imprimir NUMERO [REN, COL]
b. END FOR
5. END FOR
6. FIN
Cdigo
#include<conio.h>
#include<stdio.h>
main()
{
int NUMEROS[10][15];
int REN,COL;
for(REN=1;REN<=10;REN++)
{
for(COL=1;COL<=15;COL++)
{
Printf (cual es el valor);
Scanf (%d,&NUMEROS[REN][COL]);
}
}
for (REN=1;REN<=10;REN++)
{
for(COL=1;COL<=15;COL++)
{
printf(%d,NUMEROS[REN][COL]);
}
}
getch();
return 0
Ing. Industrial
ITSP
70
7.6 Registros
Los registros del procesador se emplean para controlar instrucciones en ejecucin, manejar
direccionamiento de memoria y proporcionar capacidad aritmtica. Los registros son espacios fsicos
dentro del microprocesador con capacidad de 4 bits hasta 64 bits dependiendo del microprocesador
que se emplee. Los registros son direccionables por medio de una vieta, que es una direccin de
memoria. Los bits, por conveniencia, se numeran de derecha a izquierda (15, 14,13. 3, 2, 1,0), los
registros estn divididos en seis grupos los cuales tienen un fin especfico. Los registros se dividen
en:
Registros de segmento
Registros de apuntadores de instrucciones
Registros apuntadores
Registros de propsitos generales
Registro ndice
Registro de bandera.
Registros de segmento.
Un registro de segmento se utiliza para alinear en un lmite de prrafo o dicho de otra forma codifica
la direccin de inicio de cada segmento y su direccin en un registro de segmento supone cuatro bits
0 a su derecha. Un registro de segmento tiene 16 bits de longitud y facilita un rea de memoria para
direccionamientos conocidos como el segmento actual. Los registros de segmento son:
Registro CS
Registro DS
Registro SS
Registro ES
Registro FS y GS
Registro CS.
El DOS almacena la direccin inicial del segmento de cdigo de un programa en el registro CS. Esta
direccin de segmento, ms un valor de desplazamiento en el registro de apuntado de instruccin
(IP), indica la direccin de una instruccin que es buscada para s ejecucin. Para propsito de
programacin normal, no necesita referenciar el registro CS.
Registro DS.
La direccin inicial de un segmento de datos de programa es almacenada en el registro DS. En
trminos sencillos, esta direccin, ms un valor de desplazamiento en una instruccin, genera una
referencia a la localidad de un bytes especifico en el segmento de datos.
Registro SS.
El registro SS permite la colocacin en memoria de una pila, para almacenamiento temporal de
direcciones y datos. El DOS almacena la direccin de inicio del segmento de pila de un programa en
el registro SS. Esta direccin de segmento, ms un valor de desplazamiento en el registro del
apuntador de la pila (SP), indica la palabra actual en la pila que est siendo direccionada. Para
propsitos de programacin normal, no se necesita referenciar el registro SS.
Registro ES
Algunas operaciones con cadenas de caracteres (datos de caracteres) utilizan el registro esta de
segmento para manejar el direccionamiento de memoria. En este contexto, el registro ES esta
asociado con el registro DI (ndice). Un programa que requiere el uso del registro ES puede
inicializarlo con una direccin apropiada.
Registros FS y GS.
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
71
Son registros extra de segmento en los procesadores 80386y posteriores a estos procesadores.
Registro Apuntador de instrucciones. (IP)
El registro apuntador de instrucciones (IP) de 16 bits contiene el desplazamiento de direccin de la
siguiente instruccin que se ejecuta.
El registro IP est asociado con el registro CS en el sentido de que el IP indica la instruccin actual
dentro del segmento de cdigo que se est ejecutando actualmente.
En el ejemplo siguiente, el registro CS contiene 25A4[0]H y el IP contiene 412H. Para encontrar la
siguiente instruccin que ser ejecutada el procesados combina las direcciones en el CS y el IP as:
Segmento de direccin en el registro CS: 25A40H
Desplazamiento de direccin en el registro IP: + 412H
Direccin de la siguiente instruccin: 25E52H
Registros apuntadores.
Los registros apuntadores estn asociados con el registro SS y permiten al procesador accesar datos
en el segmento de pila los registros apuntadores son dos:
El registro SP
El registro BP
Registro SP.
El apuntador de pila IP de 16 bits est asociado con el registro SS y proporciona un valor de
desplazamiento que se refiere a la palabra actual que est siendo procesada en la pila.
El ejemplo siguiente el registro SS contiene la direccin de segmento 27B3[0]H y el SP el
desplazamiento 312H Para encontrar la palabra actual que est siendo procesada en la pila el
microprocesador combina las direcciones en el SS y el PP:
Direccin de segmento en el registro SS: 27B30H
Desplazamiento en el registro SP: + 312H
Direccin en la Pila: 27E42H
.
27B3[0]H 312H
Direccin del segmento SS Desplazamiento del SP
Registro BP.
El registro BP de 16 bits facilita la referencia de parmetros, los cuales son datos y direcciones
transmitidos va lapida.
Registros de propsitos generales.
Los registros de propsitos generales AX, BX, CX y DX son los caballos de batalla o las herramientas
del sistema. Son los nicos en el sentido de que se puede direccionarlos como una palabra o como
una parte de un byte. El ltimo byte de la izquierda es la parte "alta", y el ltimo byte de la derecha es
la parte "baja" por ejemplo, el registro CX consta de una parte CH (alta) y una parte CL (baja), y usted
puede referirse a cualquier parte por si nombre. Las instrucciones siguientes mueven ceros a los
registros CX, CH y CL respectivamente.
Mov CX, 00
Mov CH, 00
Mov CL, 00
Los procesadores 80386 y posteriores permiten el uso de todos registros de propsito general, mas
versiones de 32 bits; EAX, EBX y EDCX.
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
72
Registros AX.
El registro AX, el acumulador principal, es utilizado para operaciones que implican entrada/salida y la
mayor parte de la aritmtica. Por ejemplo, las instrucciones para multiplicar, dividir y traducir suponen
el uso del AX. Tambin, algunas operaciones generan cdigo ms eficientes si se refiere al AX en
lugar de los otros registros.
Registro BX.
El BX es conocido como el registro base ya que es el nico registro de propsitos generales que
pueden ser unos ndices para direccionamiento indexado. Tambin es comn emplear al BX para
clculos.
Registro CX.
El CX es conocido como el registro contador. Puede contener un valor para controlar el nmero de
veces que un ciclo se repite o un valor para corrimiento de bits, hacia la derecha o hacia la izquierda.
El CX tambin es usado para muchos clculos.
Registro DX.
El DX es conocido como el registro de datos. Algunas operaciones de entrada/salida requieren su
uso, y las operaciones de multiplicacin y divisin con cifras grandes suponen al DX y al AX
trabajando juntos. Puede usar los registros de propsitos para suma y resta de cifras de 8, 16, 32 bits.
Registro ndice.
Los registros SI y DI estn disponibles para direccionamientos indexados y para sumas y restas. Que
son las operaciones de punta.
Registro SI.
El registro ndice de 16 bits es requerido por algunas operaciones con cadenas (de caracteres). En
este contexto, el SI est asociado con el registro DS. Los procesadores 80386 y posteriores permiten
el uso de un registro ampliado a 32 bits, el ESI.
Registro DI.
El registro ndice destino tambin es requerido por algunas operaciones con cadenas de caracteres.
En este contexto, el Di est asociado con el registro ES. Los procesadores 80386 y posteriores
permiten el uso de un registro ampliado a 32 bits, el EDI.
Registro de bandera.
Los registros de banderas sirven parar indicar el estado actual de la maquina y el resultado del
procesamiento, Cuando algunas instrucciones piden comparaciones o clculos aritmticos cambian el
estado de las banderas.
Las banderas estn en el registro de banderas en las siguientes posiciones:
bits 15 14 13 12 11 10 9 8 7 6 5
4321
O D I
T S Z
Bandera
Las banderas ms comunes son las siguientes:
OF (Over flow flag, desbordamiento).
Indica el desbordamiento de un bit de orden alto (mas a la izquierda) despus de una operacin
aritmtica.
DF (Direction flag, Direccin).
Designa la direccin hacia la izquierda o hacia la derecha para mover o comparar cadenas de
caracteres.
IF (Interruption flag, Interrupcin).
Lic. Susana Hernndez Rodrguez
Ing. Industrial
ITSP
73
Indica que una interrupcin externa, como la entrada desde el teclado sea procesada o ignorada.
TF (Trap flag, Trampa).
Examina el efecto de una instruccin sobre los registros y la memoria. Los programas depuradores
como DEBUG, activan esta bandera de manera que pueda avanzar en la ejecucin de una sola
interrupcin a un tiempo.
SF (Sign flag, Signo).
Contiene el signo resultante de una operacin aritmtica (0=positivo y 1= negativo).
ZF (Zero flag, Zero).
Indica el resultado de una operacin aritmtica o de comparacin (0= resultado diferente de cero y
1=resultado igual a cero).
AF (Auxiliary carry flag, Acarreo auxiliar).
Contiene un acarreo externo del bit 3 en un dato de 8 bits, para aritmtica especializada
PF (Parity flag, Paridad).
Indica paridad par o impar de una operacin en datos de ocho bits de bajo orden (mas a la derecha).
CF (Carry flag, Acarreo).
Contiene el acarreo de orden ms alto (mas a la izquierda) despus de una operacin aritmtica;
tambin lleva el contenido del ltimo bit en una operacin de corrimiento o rotacin.
Cuadro Comparativo
TIPOS DE REGISTROS
Registros de Segmento
Registros de
Instrucciones
Apuntador
Registros Apuntadores
FUNCION
Un registro de segmento tiene 16 bits de longitud y facilita un rea
de memoria para el direccionamiento conocida como el segmento
actual
de Este registro est compuesto por 16 bits y contiene el
desplazamiento de la siguiente instruccin que se va a ejecutar. Los
procesadores 80386 y posteriores tienen un IP ampliado de 32 bits
llamado EIP.
Permiten al sistema acceso de datos al segmento de la pila. Los
procesadores 80386 tienen un apuntador de pila de 32 bits llamado
ESP. El sistema maneja de manera automtica estos registros.
Registros de Propsito General Son los caballos de batalla del sistema y pueden ser direccionados
como una palabra o como una parte de un bytes. Los procesadores
80386 y posteriores permiten el uso de todos los registros de
propsitos general ms sus versiones ampliadas de 32 bits llamados
EAX, EBX, ECX y EDX.
Registros ndices
Registros de Banderas
Ing. Industrial
ITSP
74
7.6 Archivos
Los archivos tambin denominados ficheros (file); es una coleccin de informacin (datos
relacionados entre s), localizada o almacenada como una unidad en alguna parte de la computadora.
Los archivos son el conjunto organizado de informaciones del mismo tipo, que pueden utilizarse en un
mismo tratamiento; como soporte material de estas informaciones. Los archivos como coleccin de
datos sirven para la entrada y salida a la computadora y son manejados con programas.
Los archivos pueden ser contrastados con Arrays y registros; Lo que resulta dinmico y por esto en
un registro se deben especificar los campos, l nmero de elementos de un arrays (o arreglo), el
nmero de caracteres en una cadena; por esto se denotan como "Estructuras Estticas". En los
archivos no se requiere de un tamao predeterminado; esto significa que se pueden hacer archivos
de datos ms grandes o pequeos, segn se necesiten. Cada archivo es referenciado por su
identificador (su nombre.).
CARACTERSTICAS DE LOS ARCHIVOS
Las principales caractersticas de esta estructura son:
Independencia de las informaciones respecto de los programas
La informacin almacenada es permanente
Un archivo puede ser accedido por distintos programas en distintos momentos
Gran capacidad de almacenamiento.
CLASIFICACION DE LOS ARCHIVOS
Los archivos se clasifican segn su uso en tres grupos:
Permanentes o Maestros:
Estos contienen informacin que varia poco. En algunos casos es preciso actualizarlos
peridicamente.
De Movimientos
Se cercan para actualizar los archivos maestros. Sus registros son de tres tipos: alta, bajas y
modificaciones.
De Maniobra o Trabajo.
Tienen una vida limitada, normalmente menor que la duracin de la ejecucin de un programa.
Su utilizan como auxiliares de los anteriores.
TIPOS DE ARCHIVOS
Los elementos de un archivo pueden ser de cualquier tipo, simples o estructurados o segn su
funcin.
SEGN SU FUNCION.
Se define por:
a.- Archivos Permanentes:
Son aquellos cuyos registros sufren pocas o ninguna variacin a lo largo del tiempo, se
dividen en:
Constantes: Estn formados por registros que contienen campos fijos y campos de
baja frecuencia de variacin en el tiempo.
De Situacin: Son los que en cada momento contienen informacin actualizada.
Histricos: Contienen informacin acumulada a lo largo del tiempo de archivos que
han sufridos procesos de actualizacin o bien acumulan datos de variacin peridica
en el tiempo.
Ing. Industrial
ITSP
75
Ing. Industrial
ITSP
76
TIPOS DE ACCESOS
Acceso Secuencial. Exige el tratamiento de elemento, para esto es necesario una
exploracin secuencial comenzando desde el primer momento (Pascal permite este
acceso)
Secuenciales: archivo de texto que debe ser ledo del principio hasta el final.
Acceso Directo. Permite procesar o acceder a un elemento determinado y referencia
directamente por su posicin en el soporte de almacenamiento (Turbo Pascal permite este
acceso.
Aleatorios: es un archivo con registros de un mismo largo. Un programa puede accesar
directamente cualquier registro sin tener que leer los registros previos.
Binarios: es un archivo que lee byte por byte sin asumir ninguna estructura.
Los archivos Binarios no son un nuevo tipo de archivo, pero si una nueva forma de
manipular cualquier tipo de archivo. Las tcnicas de archivo binarios permiten leer o
cambiar cualquier byte de un archivo. Son herramientas extremadamente potentes, pero
como toda herramienta potente debe manejarse con cuidado
BIBLIOGRAFIA
Estructura de Datos en Pascal, Autor Aarn M. Tenenbaum, Moshe J. Augentein. Primera edicin.
Diseo y Administracin de Base de Datos Gary W. Hansen, James V. Hansen, Segunda Edicin.
Gua de Estructura y Procesamiento de Datos Profesor David Lpez, Segundo semestre U.N.I.R. (Maracaibo).
Ing. Industrial
ITSP
77