You are on page 1of 132

Sistemas Informticos

Introduccin a los
Sistemas Computacin
Fede Prez
TEMA - Introduccin a los Sistemas de Computacin
1. - Conceptos Bsicos
2. - Origen y Evolucin de los Sistemas de Clculo
2.1 Abaco
2.2 Calculadoras Mecnicas
2.3 Las Primeras Computadoras Mark I | ENIAC | ABC
2.4 Las Calculadoras de Von Neuman
3. - Generaciones de Ordenadores
4. - El Ordenador Personal
5. - Razones del xito de los Computadores
6. Estudio Comparativo de la Evolucin de los Computadores
7. Futuro de los Ordenadores
ndice
Informtica: trata de la adquisicin, representacin, tratamiento y transmisin de la
informacin.
(Segn la Real Academia Espaola de la Lengua) Es el conjunto de conocimientos
cientficos y tcnicos para hacer posible el tratamiento automtico de la
informacin por medio de computadoras electrnicas
Definiciones
Computadora u Ordenador: Es una mquina electrnica capaz de aceptar unos
datos de entrada, efectuar con ellos una operaciones aritmticas y lgicas, y
proporcionar la informacin resultante a travs de un medio de salida; todo ello sin
intervencin de un operador humano y bajo el control de un programa de
instrucciones previamente almacenado en la propia computadora
Calculadora: (acepcin actual) Es una mquina capaz de efectuar operaciones
aritmticas bajo el control directo del usuario
Datos: Son conjuntos de smbolos utilizados para expresar o representar un valor numrico,
un hecho, un objeto o una idea, codificada en la forma adecuada para ser objeto de
tratamiento por medio de una computadora
Informacin: Datos tratados y organizados, con significado desde el punto de vista del
usuario
DATOS + INTERPRETACION = INFORMACION UTIL
Hardware vs. Software
Hardware: Componentes fsicos, dispositivos de estado slido y similares, de un
ordenador
Software: Programas que dirigen el funcionamiento de un ordenador
Firmware: Ente intermedio entre el hardware y el software
Ordenadores Dedicados y de Propsito General
Ordenador de Propsito General: Puede ejecutar un amplio rango de
tareas de proceso de informacin
Ordenador Dedicado: Est diseado para una tarea especfica o para un rango
reducido de tareas
Evolucin de los Sistemas de Calculo baco
baco: Serie de alambres paralelos, sujetos por los extremos en un armazn
rectangular, sobre los que se pueden desplazar una serie de bolas o
fichas
TIPOS DE BACOS
Origen Nombre Caractersticas
China suan pan Consta de 13 hileras de cuentas, divididas en dos partes por una varilla montada
transversalmente en el marco, en la parte superior cada hilera con 2 cuentas con un valor de 5
unidades cada una, y en la parte de abajo 5 cuentas, cada una con el valor de una unidad
Japn soroban Consta de 13 hileras de cuentas, divididas en dos partes, en la parte superior cada hilera con 1
cuenta con valor de 5 unidades cada una, y en la parte de abajo 4 cuentas, cada una con el valor
de una unidad
Roma ? Se utiliza piedra caliza o mrmol que se deslizaban sobre ranuras de superficie plana, las
pequeas piedras se les denomin con el nombre de calculi.
Rusia stchoty ?
Evolucin Calculadoras Mecnicas 1
La Calculadora de Sckickard
En 1623 Wilhelm Sckickard construye la
primera mquina de calcular
La Pascalina
1.642 Blaise Pascal. Conjunto de discos
dentados, cada uno de los cuales tiene 10
divisiones, que representaban un dgito. Es
capaz de realizar sumas y restas
La Calculadora Universal
1694 Gottfried W. Leibniz. Perfecciona la
mquina de Pascal aadindole la
multiplicacin y divisin.
La Lgica Matemtica
George Boole (1815-1864), es el fundador
de la teora de la lgica matemtica.
Evolucin Calculadoras Mecnicas 2
El Padre de la Computadora
Se considera a Charles Babbage (1791-
1871), como el padre de los sistemas
actuales de computacin. A Charles
Babbage se le atribuye el desarrollo de dos
mquinas de clculo:
La Mquina Diferencial: (1821) capaz de
calcular polinomios de sexto grado y tabular
mecnicamente hasta veinte cifras y ocho
decimales
La Mquina Analtica: (1833) sistema
mecnico precursor de la computadora del
siglo XX. Dispona de:
Dispositivo de entrada/salida de datos (tarjetas
perforadas)
Unidad de memoria
Dispositivo de clculo llamado "Mill" (Unidad
Aritmtica)
Mecanismo de barras y palancas que accionaba el
conjunto (Unidad de Control), conducido por un
programa codificado sobre tarjetas perforadas
Evolucin Calculadoras Mecnicas 3
La Mquina de Tabular
En 1890 Herman Hollerith (1860-1929),
invent su mquina tabuladora que utilizaba
corriente elctrica para detectar los agujeros
que estaban perforados y as hizo registrar
la informacin en tarjetas, y el tiempo total
del proceso se redujo. Sistema de
automatizacin del censo.
Evolucin Las Primeras Computadoras 1
La Computadora
Electromecnica
Z-1 (1935)
Konrad Zuse en Berln desarroll su computadora Z-1
Mark I Computer (ASCC) Automatic
Sequence Controller Calculator (1944)
Desde 1937 hasta 1944, IBM patrocin el proyecto del
Dr. Howard H. Aiken, profesor de la universidad de
Harvard. En 1944 finaliz su objetivo con el nombre de
Mark I.
Evolucin Primer Bug
Evolucin Las Primeras Computadoras 2
La Computadora Electrnica
ABC (Atanasoff Berry Computer)
(1936/37)
John Vicent Atanasoff y Clifford Berry. Principios de las
primeras computadoras.
ENIAC (Electronic Numerical Integrator
and Computer) (1946)
Construido en la universidad de Pennsylvania, por John
W. Mauchly y John Presper Eckert
Evolucin Las Primeras Computadoras 3
Calculadoras de Von Neuman
John Von Neumann (1903-1957)
1.946 "First Draft of a Report on to Edvac
Principios ordenadores del tipo Von Neumann:
Concepto de numeracin codificada
Almacenamiento del programa en memoria
Perfeccionamiento de la ruptura de secuencia
EDSAC (1.949)
M. Wikes, de la Universidad de Cambridge
UNIVAC (1.951)
Eckert y Mauchly, primera computadora adquirida con
fines lucrativos.
Babbage vs. Von Newman
Entrada Salida
Memoria
C.P.U.
U.A.
Datos
Programa
Resultados
Modelo de
Computadora
segn
Babage
Modelo de
Computadora
segn
Von Newman
Entrada Salida
Memoria
C.P.U.
U.A.
Datos
Programa
Resultados
Generaciones de Ordenadores 1
1 Generacin (1940-52)
Tecnologa empleada: Vlvulas de vaco
Uso: Cientfico y militar.
Programacin: Modificando directamente los valores de los circuitos de la mquina. No
existan los lenguajes de programacin, ni siquiera el ensamblador.
Ordenadores caros, debido a la corta vida de la vlvulas de vaco y al gran calentamiento,
as como al gran consumo de energa elctrica.
Ordenadores lentos.
Capacidad de almacenamiento muy pequea.
Incapacidad de ejecutar ms de una tarea a la vez.
Algunas de las realizaciones son: UNIVAC | EDSAC | EDVAC | ORDAC | ILLIAC |
MANIAC | JHONIAK | WEIZAK
Generaciones de Ordenadores 2
2 Generacin (1952-64)
Tecnologa empleada: Transistor
Dispona ya de una programacin previa, de un Sistema Operativo, capaz de interpretar
instrucciones escritas en lenguajes de programacin como COBOL o FORTRAN.
Comienza el desarrollo de perifricos de E/S (impresoras) y los Lenguajes de alto nivel
(y el ensamblador).
El modo de trabajo era generalmente el sistema por lotes.
Aumento de la velocidad en el clculo
Reduccin de tamao
Reduccin del consumo a energa y potencia disipada
Tiempo de vida media del transistor superior a la vlvula
Abaratamiento
Algunas de las realizaciones son: Sperry Rand 1207 | IBM 700 | IBM 1400 | 1700
Generaciones de Ordenadores 3
3 Generacin (1964-75)
Tecnologa empleada: Circuito integrado (lmina de silicio embutida en plstico). Se
utilizan materiales semiconductores en lugar de los ncleos de ferrita en la construccin
de memorias.
Se mejoran los lenguajes de programacin y empezaron a aparecer programas
comerciales, con lo que un usuario no tena que programar sus aplicaciones.
Capacidad de multiprogramacin, con lo cual los ordenadores son capaces de ejecutar
varias tareas al mismo tiempo.
Aumento en la velocidad de clculo
Tamao disminuye
Algunas de las realizaciones son: IBM System/360 | GE 600 | PDP-11
Generaciones de Ordenadores 4
4 Generacin (1975-?)
Tecnologa empleada: Circuitos de alta escala de integracin. Microprocesadores.
Es el producto de una serie de avances tanto en el hardware, y su tecnologa de
fabricacin, como en el software y sus posibilidades de aplicacin:
o Nuevas tecnologas de fabricacin de semiconductores que conducen a velocidades de
transmisin cada vez mayores y mayor capacidad de almacenamiento.
o Aparicin de paquetes software, que obedecen a nuevas concepciones y situaciones
especficas: bases de datos, diseo asistido, tratamiento de texto, ...
o Nuevas memorias de al almacenamiento: tecnologas Winchester, y burbujas magntica
o Aparicin de los ordenadores personales
o Ms lenguajes de alto nivel y herramientas informticas.
o Desarrollo de perifricos inteligentes: descargan de trabajo a la CPU.
o Hacia mediados de los 80, comienza el desarrollo de redes de computadoras personales que
corren sistemas operativos en red y sistemas operativos distribuidos
Generaciones de Ordenadores 5
5 Generacin (?)
Arquitectura diferente a la propuesta por Von Neumann
Ordenadores inferentes
Ordenadores de transputers
Ordenador ptico
Mquinas neuronales
Sistemas informticos distribuidos
El Ordenador Personal
Aos 70, primer microprocesador, el INTEL 4004, posibilidad de construccin de un
ordenador utilizable por un solo usuario
1977, S. Wozniak y S. Jobs, fundaron una empresa llamada Apple
1.981, IBM PC (Personal Computer)
Evolucin tanto en el microprocesador utilizado (8088, 8086, 80286, 80386, 80486,
Pentium) y en el sistema operativo (UNIX para PC, el OS/2 de IBM y el Windows de
Microsoft)
Mediados de los 80, comienza el desarrollo de redes de computadoras personales
Estudio Comparativo de la Evolucin de los
Computadores
Tiempo
Potencia
Tamao
Precio
Sistemas Informticos
Fede Prez
Arquitectura y Componentes del
PC
TEMA Arquitectura y Componentes del PC
1. Componentes Bsicos
1.1 Funcionalidad
1.2 Emplazamiento
1.3 Caractersticas ms Importantes
2. Evolucin
4. - Conclusiones
ndice
El PC - Disposicin
Chasis en disposici Chasis en disposici n de Torre n de Torre
Minitorre Minitorre
Sobremesa Sobremesa
Estructura Interna de un Microcomputador
La Placa Base (I)
Elemento principal al que
se conectan los restantes
componentes y perifricos.
Formatos
Baby AT
Conector grueso del teclado.
Dificultad al instalar tarjetas de
expansin largas.
Mantenimiento farragoso.
Esquema del formato Baby AT. Esquema del formato Baby AT.
La Placa Base (II)
ATX
Mejora la flexibilidad,
integracin y funcionalidad.
Reorganizacin de la
distribucin de componentes.
Disminucin de la longitud de
los cables, mejora de la
ventilacin.
Conectores PS/2
USB
Formato ATX. Formato ATX.
Componentes de la Placa Base
Componentes de la Placa Base
La Fuente de Alimentacin
Niveles de c.c.
+/-12 V Amarillo.
+/-5 V Rojo.
GND Negro.
Convierte la energa alterna
de la red a dos niveles de
continua.
La Fuente de Alimentacin - Conectores
Conectores ATX Conectores ATX
Conectores ATX en Placa Base Conectores ATX en Placa Base
Conectores P6 Conectores P6
Conectores en Y Conectores en Y
El Chipset
Determina el rendimiento y caractersticas de la placa.
Controla su modo de operacin e integra todas sus funciones.
Velocidad del bus
Controlador de IRQ
Tipos de memoria
Tipo de CPU
N de CPUs
Caractersticas PnP
Puente PCI-ISA
Controlador de DMA
Tipo de cach L2
...
La Memoria
Memoria principal:
Ms y mayores programas al
mismo tiempo.
SIMM (5V)-DIMM (3.3-5V), N
de contactos 30, 72, 168.
Bus de datos bus de
memoria. Organizacin en
bancos.
Memoria cach:
Acelera los procesos de la
CPU, almacn ltimos datos
transferidos.
Emplazamiento sobre placa
o mdulos COAST.
M M dulo DIMM. dulo DIMM.
Papel de la memoria en un PC
Al referirnos a memoria
generalmente nos referimos a la
memoria RAM.
Un ordenador utiliza la memoria RAM
para guardar las instrucciones y los
datos temporales que se necesitan
para ejecutar las tareas. Esto permite
a la CPU del ordenador (unidad central
de proceso), acceder rpidamente a
las instrucciones de acceso y a los
datos almacenados en la memoria .
Adems de la RAM en un PC
encontramos otros muchos tips de
memoria
SDRAM (RAM)
ROM FLASH (BIOS)
SRAM (cache)
etc
TIPOS MEMORIA
Voltiles No voltiles
FIFO ROM
PROM Y EPROM
EEPROM
FLASH
MRAM
RAM
DINAMICA
(DRAM)
ESTATICA
SRAM VIDEO SISTEMA
FPM
EDO
SDRAM
DDR
RDRAM (RAMBUS)
VRAM
WRAM
SGRAM
SDRAM
DDR-RAM
Clasificacin de la Memoria por Tipos
BIOS Pila
Memoria ROM, EPROM,
FLASHque contiene las
rutinas necesarias para
arrancar el PC.
Se apoya en una memoria
CMOS, alimentada por una
batera.
Contiene el programa de
configuracin del PC.
BIOS BIOS- -Pila. Pila.
BIOS Pantalla de Configuracin
Pentium 4 Pentium 4
El Procesador (I)
Es el chip ms importante
de la placa base.
Est formado por:
ALU -Unidad Aritmtico
Lgica.
UC -Unidad Central.
Memoria Central (R.A.M)
Cach interna (L1).
Cach externa (L2).
El Procesador (II)
Principales Caractersticas:
Velocidad.
Tipo de zcalo.
Memoria Cach.
Instrucciones Especiales.
Bus de comunicacin.
Tecnologa de fabricacin.
Buses de Expansin (I)
Al conectar una tarjeta a un bus de expansin, sta
funciona como si estuviera directamente conectada al
procesador. Caractersticas de las principales:
PCI
Independiente de la CPU
Controlador de bus
Plug & Play
Color crema
SCSI
E/S Inteligente
Necesita de otros buses
Direccionamiento lgico
Hasta 15 dispositivos
AGP
Apartado grfico
Color marrn
ISA
1 en aparecer
Color negro
Buses de Expansin (II)
Vesa Local Bus Vesa Local Bus
PCI Bus PCI Bus
Perifricos Internos
Dispositivos que se conectan a la placa base por
medio de los buses o ranuras de expansin.
Los ms comunes son:
Unidades de almacenamiento.
Disquetera
Disco duro
CD_ROM
DVD
Instalacin de varios dispositivos
Tarjetas de vdeo
Tarjetas de sonido
El Disco Duro (I)
Sistema de almacenamiento, en el se guardan los
archivos de los programas (SO,Word..)
El Disco Duro (II)
Instalacin de Varios Disp. de Almacenamiento
Las controladoras EIDE,
disponen de dos canales IDE
independientes, pudiendo
instalar hasta 4 dispositivos, 2
por canal.
1->primario master.
2->primario esclavo.
3->secundario master.
4->secundario esclavo.
El primario master arranca el
computador.
Una controladora SCSI(las
ms rpidas) se pueden
conectar hasta 7 dispositivos
o 15 si es WIDE SCSI.
Disquetera y CD-ROM
DISQUETERA
Slo han existido dos formatos
considerados como estndar, el
de 5 y el de 3 .
CD-ROM - DVD
Pueden almacenar gran
informacin, aunque menor que
un disco duro, pero la velocidad
de recuperacin de informacin
y la capacidad es menor.
Hay lectores, grabadores y
regrabadores
Tarjetas de Vdeo y Sonido
TARJETAS DE VDEO
Los diferentes programas, envan
sus salidas a travs de las
llamadas tarjetas de vdeo a la
pantalla.
Hoy en da, son grficas e
incluyen aceleracin por
hardware.
TARJETAS DE SONIDO
Permiten escuchar msica y
sonidos al ejecutar las
aplicaciones.
Es conveniente que admitan la
modalidad full duplex, para
programas de video
conferencias.
Se suele conectar al CD-ROM
para escuchar msica.
Puertos (I)
Sirven para conectar al PC los dispositivos externos
de E/S.
Puerto serie (RS232C) COM 1,COM 2, etc.
Puerto paralelo (CENTRONICS): LPT1 o PRN.
Puerto USB
Puertos (II)
Perifricos Externos
Dispositivos que se conectan a la placa base por
medio de los puertos.
Los ms comunes son:
Teclados
Ratones
Monitores
Impresoras
Scaners
Modems
Teclados y Ratones
Monitores
CRT
LCD (TFT)
Impresoras
Matriciales
Agujas
Inyeccin de Tinta
Laser
Escaners
Conclusiones
Modularidad y caractersticas Plug & Play.
La placa base contiene los elementos mnimos
necesarios.
Las prestaciones de los computadores aumentan a un
ritmo vertiginoso.
Las posibilidades de configuracin y ampliaciones
posteriores son prcticamente ilimitadas.
Por todo ello son computadores a la carta, creados al
gusto y necesidades del usuario.
Sistemas Informticos
Estructura General
de un
Sistema de Computacin
Fede Prez
TEMA 2 Estructura General de un Sistemas de Computacin
1. - Introduccin
2. - Seccin Primaria de Almacenamiento. Memoria Principal
2.1 Estructura General
2.2 Organizacin Interna de la Memoria
2.3 Direccionamiento
2.4 Operaciones de Lectura/Escritura en Memoria
2.5 Propiedades Fundamentales de las Memorias
2.6 Parmetros de Tiempo en Memoria
2.7 Tipos de Memoria
2.8 Jerarquas de Almacenamiento
3. - Unidad de Control de Procesos - C.P.U.
3.1 Unidad de Control
3.2 Unidad Aritmtico-Lgica - A.L.U.
4. - Buses
4. - Descripcin General
5. Fases de Ejecucin de una Instruccin
5.1 Fase FETCH - Bsqueda o Lectura de una Instruccin
5.2 Fase EXECUTE - Ejecucin
ndice
Organizacin Bsica de un SC
Estructura General de un SC Memoria
Memoria Principal Organizacin Interna
Memoria Principal Direccionamiento
Direccionamiento cableado
en dos dimensiones
Direccionamiento cableado
en tres dimensiones
Memoria Principal Operaciones de Lectura y Escritura
Lectura
1- Direccin de la palabra solicitada
es recogida en registro de
direcciones
2- Seal de control la operacin
deseada (lectura)
3- La memoria decodifica la
direccin, activa la celda
correspondiente y deposita el
dato en el registro de palabra; de
ah la informacin pasa al bus de
datos
Escritura
1- Direccin de la palabra solicitada
es recogida en registro de
direcciones
2- En el bus de datos la informacin
a escribir en memoria, quedando
almacenado en el registro de
datos de la memoria
3- Seal de control la operacin
deseada (escritura)
4- El dato del registro de datos de
la M.P. se almacena en la clula
de memoria activada
Memoria Principal Parmetros
Propiedades Fundamentales
1- Coste por Bit
2- Tiempo de Acceso
3- Capacidad de Almacenamiento
Parmetros de Tiempo
Ciclo de Lectura: Tiempo que transcurre
desde que a la memoria llega la seal de
lectura, hasta que aparece el dato en el
bus de datos
Ciclo de Escritura: Tiempo que transcurre
desde que a la memoria llega la seal de
escritura (se accede a la direccin)
Tiempo de Acceso: Espacio mnimo de
tiempo requerido entre accesos sucesivos
(lectura/escritura) a una memoria
Tipos de Memoria
SRAM DRAM ROM/PROM EPROM/EEPROM FLASH
R/W R/W R/W R R R/W
Direccionamiento
aleatorio
Si Si Si Si Si
Volatibilidad Si Si No No No
Capacidad Alta Muy Alta Baja Baja Muy Alta
Tiempo de Acceso Alto Muy Alto Bajo Bajo Medio
De Lectura y Escritura - RAM (Random Access Memory / Read-Write Memory)
Dinmicas (DRAM)
Estticas (SRAM)
De Solo Lectura - ROM (Read Only Memory)
ROM (Read Only Memory)
PROM (Programmable Read Only Memory)
EPROM (Erasible Programmable Read Only Memory)
EEPROM (Electrically Erasible Programmable Read Only Memory)
Jerarqua de Almacenamiento
Registro
Cach
Memoria Principal
Disco Electrnico
Disco Magntico
Disco Optico
Cinta Magntica
A
l
m
a
c
e
n
a
m
i
e
n
t
o
d
e

a
c
c
e
s
o

d
i
r
e
c
t
o
A
l
m
a
c
e
n
a
m
i
e
n
t
o
s
e
c
u
n
d
a
r
i
o
eje pista
sector
cilindro
accionador
brazo
plato
Cabeza de
lectura y
escritura
Tasa de Transferencia: es la rapidez con que
fluyen los datos de la unidad de disco a la
CPU
Tiempo de Posicionamiento o Tiempo de Acceso
Aleatorio: es el tiempo que tarda en mover el
brazo del disco al cilindro deseado
Latencia Rotacional: es el tiempo que el sector
deseado tarda en girar hasta quedar debajo de
la cabeza de disco
Controladores de Disco: Se encargan de La
transferencia de datos por los buses
Unidad de Control Acepciones y Funciones
Acepciones
1- Microprocesador (P): la Unidad
Aritmtico-Lgica (ALU) y la Unidad Central
(UC)
2- Procesador Central: el P (UC y ALU)
ms la Memoria Principal (MP)
3- Ordenador personal (PC): la Placa
Base (P+MP+...), Unidad de Alimentacin,
Dispositivos de Almacenamiento Internos
(discos, cintas, ...), ...
Funciones
1- selecciona e interpreta las
instrucciones del programa
2- controla el flujo de datos desde y
hacia la memoria
3- supervisa el resto de componentes de
la CPU
Unidad de Control Estructura General
Unidad de Control Registro de Instrucciones
Instruccin =
Cdigo
de
Operacin
+
Modo
de
Direccionamiento
+
Campo
de
Direcciones
C.O. M.D. C.D.
Registro de Instrucciones
Modos de Direccionamiento
1- Directo:
Absoluto
Relativo
2- Indirecto
3- Inmediato
Unidad Aritmtico-Lgica ALU
Flag de Cero
Flag de Acarreo
Flag de Desbordamiento (Overflow)
Flag de Paridad
Flags de Estado
Buses
Tipos de Buses
1- Bus de Datos
2- Bus de Direcciones
3- Bus de Control
Lneas de Control
Lneas de Estado
Descripcin General
Fases de Ejecucin de una Instruccin
Fase Fetch
- Lectura de una Instruccin
1- Transferir direccin desde
Contador de Programa
2- Activacin de celda y paso a
registro de palabra
3- Instruccin hasta registro de
instrucciones
Fase Execute
- Lectura de operandos y
decodificacin de la instruccin
- Ejecucin de la operacin
- Almacenamiento de resultados
1.1- Impulsos al secuenciador
1.2- Acciones del secuenciador
1.3- Acceso a operandos
2- Ejecucin de la instruccin
3- Almacenamiento de resultados
Sistemas Informticos
Lenguajes de Programacin
Fede Prez
TEMA - Lenguajes de Programacin
1. - Programacin
2. - Objetivos de la Programacin
3. Tipos de Lenguajes
3.1 Lenguaje Mquina
3.2 Lenguajes Ensambladores
3.3 Lenguajes del Alto y Bajo Nivel
4. - Procesadores de Lenguajes
4.1 Compiladores
4.2 Intrpretes
5. - Herramientas de Programacin
6. Desarrollo de Programa que Suma Dos Nmeros
ndice
Programacin
Problema
Enunciado
del Problema
( algortmico )
Algoritmo
Programa
( en lenguaje de
Programacin )
Anlisis Diseo Codificacin
Objetivos
1- Correccin
2- Claridad
3- Eficiencia
Definicin
Labor de desarrollar programas de
computador
Ciclo de Vida del Software: Cascada de Behm
Anlisis y
Especificacin
Diseo
Codificacin
Validacin y
pruebas
Operacin y
Mantenimiento
Documentacin
Lenguajes de Programacin
Lenguaje Mquina
Mquina Base 2
Lenguaje Mquina 2
1111110001110000---------------------------------
---------------------------------------------------------
---------------------------------------------------------
00000011110001110--------------------------------
Programa Objeto 2 Datos 1 Resultados 1
Lenguaje Ensamblador
Lenguajes de Alto Nivel
1- Independientes de la arquitectura del computador
2- Poseen instrucciones complejas
3- Notacin cercana al lenguaje cientfico y natural
Mquina Base 1
Lenguaje Mquina 1
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Programa Objeto 1 Datos 1 Resultados 1
Mquina Base
Lenguaje Mquina
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Ensamblador
MOV AX, --
PUSH AX
-------------------------
ADD SP, 2
-------------------------
PUSH CX
-------------------------
END
01011100
---------------------
---------------------
---------------------
01110101
Programa Objeto
- Ejecutable - Programa Fuente
Mquina Base
Lenguaje Mquina
01011100
---------------------------------------------------------
---------------------------------------------------------
01110101
Prg. Objeto Ejecutable Datos Resultados
Lenguaje Mquina
Mquina Base 1
Lenguaje Mquina 1
Lenguaje Mquina 1
0101110111011001----------------------------------
--------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Programa Ejecutable 1 Datos 1 Resultados 1
Mquina Base 2
Lenguaje Mquina 2
Lenguaje Mquina 2
1111110001110000----------------------------------
--------------------------------------------------------
---------------------------------------------------------
00000011110001110--------------------------------
Programa Ejecutable 2 Datos 1 Resultados 1
Lenguaje Ensamblador
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
01011100
---------------------------------------------------------
---------------------------------------------------------
01110101
Programa Ejecutable
Datos Resultados
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Ensamblador
MOV AX, --
PUSH AX
-------------------------
ADD SP, 2
-------------------------
PUSH CX
-------------------------
END
01011100
---------------------
---------------------
---------------------
01110101
Programa
Ejecutable Programa Fuente
a) Obtencin del
programa
ejecutable
b) Ejecucin del programa
ejecutable
Procesadores de Lenguajes
Mquina Base 1
Lenguaje Mquina 1
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Traductor 1
/* PROGRA --
#include ---
void main ( )
{
int Cont, Edad --
-----------------------
printf (El resul -
}
Programa Fuente
PROGRAMA.C
Mquina Base 2
Lenguaje Mquina 2
0111101111011101---------------------------------
---------------------------------------------------------
---------------------------------------------------------
1111010101010111---------------------------------
Traductor 2
01111111
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
11011011
Programa Ejecutable
( en la mquina 2 )
01111010
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
11001000
Programa Ejecutable
( en la mquina 1 )
NOTA: Un compilador (traductor) cruzado es
capaz de Generar cdigo para una
mquina diferente de aquella en la
que se ejecuta
Intrpretes
Programa Fuente
PROGRAMA.BAS
REM PROGRAMA.BAS
INPUT Introduce el valor : , Valor
INPUT la cantidad : , Cant
Total = Valor*Cant
PRINT El precio total es: , Total
Datos Resultados
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
0101110111011001----------------------------------
--------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Intrprete
Lenguaje Fuente
Lenguaje Fuente
Compiladores
Compilado
Enlazado
Ejecucin
Mquina Base
Lenguaje Mquina
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Compilador
/* PROGRA --
#include --
void main ( )
{
int Cont, Edad --
-----------------------
printf (El resul -
}
01011100
---------------------
---------------------
---------------------
01110101
Programa Objeto
- No ejecutable -
PROGRAMA.OBJ
Programa Fuente
PROGRAMA.C
RUTINAS.LIB
PROGRAMA.OBJ
Mquina Base
Lenguaje Mquina
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Enlazador (Linker)
01111010
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
11001000
Programa Objeto
- Ejecutable -
PROGRAMA.EXE
01011100
---------------------
---------------------
---------------------
01110101
01111000
---------------------
---------------------
---------------------
11010001
01111010
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
11001000
Mquina Base
Lenguaje Mquina
Programa Objeto
- Ejecutable -
PROGRAMA.EXE
Resultados Datos
Compiladores
Caso General
/* PROGRA
#include
void main ( )
{
int A --
printf (El res-
}
Programa Fuente
PROG_1.C
.../...
Mquina Base
0101110111011001-------------
-------------------------------------
-------------------------------------
0111010101110001
Compilador
Lenguaje Mquina
Mquina Base
0101110111011001-------------
-------------------------------------
-------------------------------------
0111010101110001
Enlazador (Linker)
Lenguaje Mquina
Mquina Base
0101110111011001-------------
-------------------------------------
-------------------------------------
0111010101110001
Compilador
Lenguaje Mquina
/* PROGRA
void InterCamb (int
{
int Temp --
---------------------
return -----------
}
Programa Fuente
PROG_N.C 00010011
---------------------
---------------------
---------------------
01100001
Programa Objeto
PROG_1.OBJ
01011100
---------------------
---------------------
---------------------
01110101
Programa Objeto
PROG_2.OBJ
11110000
---------------------
---------------------
---------------------
01100111
00010000
---------------------
---------------------
---------------------
01011111
Programa Objeto
PROG_N.OBJ
Programa Objeto
RUTINAS.LI B
Programa Objeto
- Ejecutable -
PROGRAMA.EXE
01111010
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
--------------------
11001000
Libreras: Bibliotecas Estticas
RUTINAS.LIB
PROGR_1.OBJ
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
0101110111011001----------------------------------
--------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Enlazador (Linker)
01011100
--------------------
--------------------
--------------------
01110101
--------------------
--------------------
--------------------
--------------------
11001000
Programa Ejecutable
PROGR_1.EXE
01011100
---------------------
---------------------
---------------------
01110101
01111000
---------------------
---------------------
---------------------
11010001
RUTINAS.LIB
PROGR_2.OBJ
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
0101110111011001----------------------------------
--------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Enlazador (Linker)
11100100
--------------------
01110000
--------------------
--------------------
--------------------
--------------------
11001000
Programa Ejecutable
PROGR_2.EXE
11100100
---------------------
01110000
01111000
---------------------
---------------------
---------------------
11010001
Cdigo de las rutinas
(copiado de la Biblioteca)
Libreras: Bibliotecas Estticas
PROGR_1.EXE
01111010
--------------------
--------------------
--------------------
01110101
--------------------
--------------------
--------------------
--------------------
11001000
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
Cdigo
de las rutinas
PROGR_1.EXE
01111010
--------------------
--------------------
--------------------
01110101
--------------------
--------------------
--------------------
--------------------
11001000
11100100
--------------------
01110000
-----------------------
-----------------------
-----------------------
-----------
11001000
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
PROGR_2.EXE
Cdigo
de las rutinas
Cdigo
de las rutinas
Ejecucin utilizando bibliotecas estticas
Libreras: Bibliotecas Dinmicas
RUTINAS.DLL
PROGR_1.OBJ
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
0101110111011001----------------------------------
--------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Enlazador (Linker)
01011100
-------------------------
-------------------------
-------------------------
01110101-------------
Uso de Librera
Rutinas.DLL
Programa Ejecutable
PROGR_1.EXE
01011100
---------------------
---------------------
---------------------
01110101
01111000
---------------------
---------------------
---------------------
11010001
RUTINAS.DLL
PROGR_2.OBJ
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
0101110111011001----------------------------------
--------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Enlazador (Linker)
11100100
--------------------
01110000 -------
Uso de Librera
Rutinas.DLL
Programa Ejecutable
PROGR_2.EXE
11100100
---------------------
01110000
01111000
---------------------
---------------------
---------------------
11010001
RUTINAS.DLL
01111000
---------------------
---------------------
---------------------
11010001
Los programa
ejecutables
necesitan el
archivo
RUTINAS.DLL
para poderse
ejecutar
Libreras: Bibliotecas Dinmicas
Ejecucin Utilizando Bibliotecas Dinmicas
PROGR_1.EXE
RUTINAS.DLL
01011100
-------------------------
-------------------------
-------------------------
01110101-------------
Uso de Librera
Rutinas.DLL
01111000
-------------------------
-------------------------
-------------
11010001
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
PROGR_1.EXE
01011100
-------------------------
-------------------------
-------------------------
01110101-------------
Uso de Librera
Rutinas.DLL
11100100
--------------------
01110000 -------
Uso de Librera
Rutinas.DLL
01111000
-------------------------
-------------------------
-------------
11010001
RUTINAS.DLL
Mquina Base
Lenguaje Mquina
Lenguaje Mquina
PROGR_2.EXE
Herramientas de Programacin
Entornos de Programacin
Depuradores
Mquina Base
Lenguaje Mquina
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Depurador
01111010
-------------------------------------
-------------------------------------
-------------------------------------
-------------------------------------
11001000
Programa Ejecutable
PROGRAMA.EXE
Lenguaje Mquina
Datos
Resultados
TRAZA DEL
PROGRAMA
0101110111011001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0111010101110001---------------------------------
Editor
1101110111011111---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0000010101110001---------------------------------
Compilador
/* PROGRA
#include ---
void main ( )
{
int A --
printf (El res-
}
Programa
Fuente
PROGRAMA.C
Programa
Objeto
PROGRAMA.OBJ
01011100
---------------------
---------------------
01110101
/* PROGRA
#include ---
void main ( )
{
int A --
printf (El res-
}
Programa
Fuente
PROGRAMA.C
0001100110010001---------------------------------
---------------------------------------------------------
---------------------------------------------------------
1111011101100001---------------------------------
Enlazador (Linker)
Programa
Objeto
PROGRAMA.OBJ
01011100
---------------------
---------------------
01110101 Programa
Ejecutable
PROGRAMA.EXE
01111010
--------------------
--------------------
--------------------
--------------------
11001000
0001110000011000---------------------------------
---------------------------------------------------------
---------------------------------------------------------
0100000101000001---------------------------------
Depurador
Programa
Ejecutable
PROGRAMA.EXE
Resultados
TRAZA DEL
PROGRAMA
Datos
01111101
---------------------
00000100
01111010
--------------------
--------------------
--------------------
--------------------
11001000
Programa Objeto
Libreria de rutinas
RUTINAS.LIB
Suma de dos Nmeros 1
Basic
REM
REM Programa en BASIC: SUMA_BAS.BAS
REM
INPUT "Introduce un N entero: ", iEntero_1
INPUT "Introduce otro entero: ", iEntero_2
iSuma = iEntero_1 + iEntero_2
PRINT "La suma es: ", iSuma
Diseo
Sumar
dos nmeros
Obtener
Sumando 1
Pedir
Nmero
Leer
Nmero
Obtener
Sumando 2
Pedir
Nmero
Leer
Nmero
Calcular
la suma
Mostrar valor
de la suma
Suma de dos Nmeros 2
Pascal
(* Programa en PASCAL: SUMA_PAS.PAS *)
PROGRAM suma_pas ;
VAR
iEntero_1, iEntero_2, iSuma : Integer ;
BEGIN
Write ('Introduce un N entero: ') ;
ReadLn (iEntero_1 ) ;
Write ('Introduce otro entero: ') ;
ReadLn ( iEntero_2 ) ;
iSuma := iEntero_1 + iEntero_2 ;
WriteLn ('La suma es: ', iSuma)
END.
C
/* Programa en C: SUMA_C.C */
#include <stdio.h>
void main (void)
{
int iEntero_1, iEntero_2, iSuma ;
printf ("Introduce un N entero: ") ;
scanf ("%d", &iEntero_1) ;
printf ("Introduce otro entero: ") ;
scanf ("%d", &iEntero_2) ;
iSuma = iEntero_1 + iEntero_2 ;
printf ("La suma es: %d", iSuma) ;
}
Suma de dos Nmeros Relacin entre Lenguajes
;|*** /* Programa en C SUMA_C.C */
; Line 1
;|***
;|*** #include <stdio.h>
; Line 3
;|***
;|*** void main (void)
;|*** {
; Line 6
PUBLIC _main
_main PROC NEAR
*** 000000 55 push bp
*** 000001 8b ec mov bp,sp
*** 000003 b8 06 00 mov ax,6
*** 000006 e8 00 00 call __aNchkstk
; iEntero_1 = -2
; iEntero_2 = -4
; iSuma = -6
;|*** int iEntero_1, iEntero_2, iSuma ;
;|***
;|*** printf ("Introduce un N entero: ") ;
; Line 9
*** 000009 b8 00 00 mov ax,OFFSET DGROUP:$SG168
*** 00000c 50 push ax
*** 00000d e8 00 00 call _printf
*** 000010 83 c4 02 add sp,2
;|*** scanf ("%d", &iEntero_1) ;
; Line 10
*** 000013 8d 46 fe lea ax,WORD PTR [bp-2] ; iEntero_1
*** 000016 50 push ax
*** 000017 b9 17 00 mov cx,OFFSET DGROUP:$SG169
*** 00001a 51 push cx
*** 00001b e8 00 00 call _scanf
*** 00001e 83 c4 04 add sp,4
;|*** printf ("Introduce otro entero: ") ;
; Line 11
*** 000021 b8 1a 00 mov ax,OFFSET DGROUP:$SG170
*** 000024 50 push ax
*** 000025 e8 00 00 call _printf
*** 000028 83 c4 02 add sp,2
;|*** scanf ("%d", &iEntero_2) ;
; Line 12
*** 00002b 8d 46 fc lea ax,WORD PTR [bp-4] ; iEntero_2
*** 00002e 50 push ax
*** 00002f b9 31 00 mov cx,OFFSET DGROUP:$SG171
*** 000032 51 push cx
*** 000033 e8 00 00 call _scanf
*** 000036 83 c4 04 add sp,4
;|***
;|*** iSuma = iEntero_1 + iEntero_2 ;
;|***
;|*** printf ("La suma es %d", iSuma) ;
; Line 16
*** 000039 8b 46 fc mov ax,WORD PTR [bp-4] ; iEntero_2
*** 00003c 03 46 fe add ax,WORD PTR [bp-2] ; + iEntero_1
*** 00003f 89 46 fa mov WORD PTR [bp-6],ax ; iSuma
*** 000042 50 push ax
*** 000043 b8 34 00 mov ax,OFFSET DGROUP:$SG172
*** 000046 50 push ax
*** 000047 e8 00 00 call _printf
;|*** }
; Line 17
*** 00004a 8b e5 mov sp,bp
*** 00004c 5d pop bp
*** 00004d c3 ret
_main ENDP
_TEXT ENDS
END
;|***
Ensamblador
Lenguaje mquina (hexadecimal)
Direccin de memoria (relativa)
Equivalencia de cdigos
En C: iSuma = iEntero_1 + iEntero_2
En Pascal: iSuma := iEntero_1 + iEntero_2
Sistemas Informticos
Programacin en C
Fede Prez
TEMA - Lenguaje de Programacin C
1. - Introduccin
2. - Conceptos Bsicos
2.1 Tipos de Datos Base
2.2 Funciones de Entrada/Salida
2.3 Expresiones y Operadores
3. - Sentencias de Control
3.1 - Sentencias Selectivas
3.2 - Sentencias Repetitivas
4. - Funciones
5. Datos Estructurados
5.1 Arrays
5.2 Cadenas de Caracteres
5.3 Estructuras
6. Ficheros
ndice
Historia
Nacimiento aos 70 laboratorios Bell Telephone junto con UNIX
UNIX Ken Thompson y Dennis Ritchie
Transferencia PDP-7 PDP-9, PDP-11
1970 (Ken Thompson) definicin del lenguaje B (proviene del BCPL)
1972 (Dennis Ritchie) definicin del lenguaje C
1973 (UNIX versin 5) 90% en C para PDP-11
Aos 80 ANSI C estndar ISO
Mediados de los 80 C++ estndar ISO 1998
Historia del Lenguaje C
Caractersticas
Lenguaje de propsito general
Poco tipificado
Cercano a la mquina
Variado juego de operadores
Reemplaza ventajosamente al ensamblador
Recursividad y reentrabilidad
Utilizacin natural de las funciones primitivas del sistema de explotacin
Carencias
Manejo de tablas y cadenas de caracteres
Multiprogramacin, control de procesos, sincronizacin
Entrada/Salida, ficheros
Programoteca Librera estndar
Solucin
Caractersticas del Lenguaje C
Compilador: software que traduce a lenguaje de
mquina el programa C contenido en uno o ms
ficheros fuente
Preprocesador: software que acta siempre por
delante del compilador facilitando su tarea y la del
programador
Librera Estndar: funciones agrupadas en un
conjunto de libreras de cdigo objeto preprogramadas
que se venden o se entregan junto con el compilador
Componentes del Lenguaje
Componentes del Lenguaje C
Ventajas de la Utilizacin de Funciones
1. Modularizacin
2. Ahorro de memoria y tiempo de desarrollo
3. Independencia de datos y ocultamiento de informacin
Programa
Conjunto de instrucciones que se ejecutan ordinariamente de modo secuencial
Funcin
Divisin un programa muy grande en una serie de mdulos mucho ms
pequeos y manejables. A estos mdulos se les ha slido denominar de
distintas formas (subprogramas, subrutinas, procedimientos, funciones, etc.)
segn los distintos lenguajes.
Programa Principal
Funcin concreta que juega el papel principal y que empieza a actuar
Esta funcin en el lenguaje C ha de llevar por titulo o nombre el de "main"
Estructura General de un Programa I
Funciones de Usuario - Definicin de funciones
Programa Principal main()
Declaraciones Globales
- Prototipos de funciones
- Variables globales
Estructura General de un Programa II
Directivas de Preprocesador
#include
#define
#include <stdio.h>
main()
{
...
f1(...);
...
}
f1(...)
{
...
f2(...);
...
}
f2(...)
{
...
}
...
stdio.h principal.c
Ficheros Estndar Fichero Principal
Ficheros Fuente en C Un Mdulo
#include <stdio.h>
main()
{
...
f1(...);
f5(...);
...
}
f1(...)
{
...
f3(...);
...
}
f2(...)
{
...
}
#include aux3.c
f3(...)
{
...
f4(...);
...
}
f4(...)
{
...
f2(...);
...
}
f5(...)
{
...
}
...
stdio.h principal.c aux1.c
aux2.c
aux3.c
Ficheros Estndar Fichero Principal Ficheros Secundarios
Ficheros Fuente en C Varios Mdulos
E
d
i
t
o
r
principal.C
C
o
m
p
i
l
a
d
o
r
.LIB
E
n
l
a
z
a
d
o
r
(
L
i
n
k
e
r
)
principal.EXE
Realizacin de un Programa en C No Modular
E
d
i
t
o
r
.LIB
principal.C
auxiliar.C
objeto.O
libreria.LIB
C
o
m
p
i
l
a
d
o
r
principal.O
auxiliar.O
E
n
l
a
z
a
d
o
r
(
L
i
n
k
e
r
)
principal.EXE
Realizacin de un Programa en C Modular
Caractersticas
Sensible a maysculas y minsculas
Indentacin y espacios en blanco
Sentencias (terminan en punto y coma ; )
Bloques (delimitados entre llaves {} )
Elementos de un programa
Palabras reservadas
Funciones de librera estndar
Variables y funciones definidas por el programador
Caractersticas de Edicin de un Programa C
Nombres de Ficheros y Extensiones
El nombre de un fichero consta de dos partes: el nombre base y la extensin.
Extensiones ms Comunes
.c fichero fuente C
.h fichero de cabeceras
.o (.obj) fichero objeto resultante de la compilacin de un fichero fuente. No es ejecutable
.out (.exe) fichero ejecutable
.lib librera esttica
.dll libreras dinmicas
Caractersticas de Edicin de un Programa C
Errores
Errores de Sintaxis Edicin
Errores Lgicos Algoritmo incorrecto
Errores de Regresin Solucin de errores
Errores de Ejecucin Situaciones imprevistas
Depuracin de un Programa
Mensajes de Error
Error Fatal Sistema Operativo
Error de Sintaxis Compilador/enlazador
Advertencias (warnings) Compilador/enlazador (no traba)
El Programa Principal
Declaraciones de la Funcin Main
main()
int main()
void main()
void main(void)
int main(int argc, char *argv[])
Programa Principal
Funcin concreta que juega el papel principal y que empieza a actuar
Esta funcin en el lenguaje C ha de llevar por titulo o nombre el de "main"
argc representa el nmero total de argumentos
argv es el puntero que seala una tabla en cuyos registros estn
contenidos los argumentos bajo la forma de serie de caracteres
#include <stdio.h>
main()
{
printf(Hola mundo!!\n);
}
Edicin (Fichero hola.c)
Compilado
Ejecucin
Primer Programa C
#include <stdio.h>
main()
{
printf(Esto s se ejecuta\n);
}
Ejemplo 1
1. Se llega al final del programa principal (funcin main)
2. La funcin main realiza una llamada a la sentencia return()
3. Cualquier funcin realiza una llamada a la funcin exit()
Modos de Finalizacin de un Programa
#include <stdio.h>
main()
{
printf(Esto s se ejecuta\n);
return(0);
printf(Esto no se ejecuta\n);
}
Ejemplo 2
#include <stdio.h>
#include <stdlib.h> /* necesario para
exit() */
main()
{
printf(Esto s se ejecuta\n);
exit(0);
printf(Esto no se ejecuta\n);
}
Ejemplo 3
Finalizacin de un Programa
Existen seis clases de componentes sintcticos o
tokens en el vocabulario del lenguaje C:
1. Identificadores
2. Palabras Reservadas
3. Constantes
4. Operadores
5. Separadores
6. Comentarios
Elementos Base
Elementos Base del Lenguaje C
1. Un identificador se forma con una secuencia de letras (minsculas de la a a la z; maysculas de
la A a la Z; y dgitos del 0 al 9).
2. El carcter subrayado o underscore (_) se considera como una letra ms.
3. Un identificador no puede contener espacios en blanco, ni otros caracteres distintos de los citados,
como por ejemplo (* , ; . : - + etc.)
4. El primer carcter de un identificador debe ser siempre una letra o un (_), es decir, no puede ser
un dgito.
5. Se hace distincin entre letras maysculas y minsculas. As, Masa es considerado como un
identificador distinto de masa y de MASA.
6. ANSI C permite definir identificadores de hasta 31 caracteres de longitud.
Reglas ANSI C
Los identificadores son nombres que permiten sealar, mencionar, hacer
referencia a los diferentes objetos tratados por el programa. En particular a:
las variables
las funciones
las constantes simblicas
Definicin
Identificadores I
Ejemplos
Identificadores Correctos Identificadores Incorrectos
I 8080
BUFFER 1er
Direcci6n_Memoria Bus de datos
cas_01 cas:01
Z80 CP/M
Identificadores II
Palabras clave necesarias para la sintaxis y semntica del lenguaje:
especificadores de tipo de objeto
especificadores de clase de memoria
instrucciones de control
operador simblico
etiquetas de control
Definicin
Lista de Palabras Reservadas
Tipo Clase Instruccin Operador Etiqueta
int
char
short
long
signed
unsigned
float
double
void
struct
union
enum
auto
extern
static
register
volatile
const
typedef
if
else
while
do
for
switch
break
continue
goto
return
sizeof case
default
Palabras Reservadas
Valores que permanecen fijos durante la ejecucin de un programa:
nmeros enteros
nmeros reales
caracteres
serie de caracteres
expresiones con constantes
constantes simblicas
Definicin
1. Constantes numricas. Son valores numricos, enteros o de punto flotante. Se permiten
tambin constantes octales (nmeros enteros en base 8) y hexadecimales (base 16).
2. Constantes carcter. Cualquier carcter individual encerrado entre apstrofos (tal como 'a', 'Y',
')', '+', etc.) es considerado por C como una constante carcter.
3. Cadenas de caracteres. Un conjunto de caracteres alfanumricos encerrados entre comillas es
tambin un tipo de constante del lenguaje C, como por ejemplo: "espacio", "Esto es una cadena
de caracteres", etc.
4. Constantes simblicas. Las constantes simblicas tienen un nombre (identificador) y en esto se
parecen a las variables. Sin embargo, no pueden cambiar de valor a lo largo de la ejecucin del
programa. En C se pueden definir mediante el preprocesador (#define) o por medio de la
palabra clave const.
Tipos de Constantes
Constantes
Una expresin real puede darse en notacin decimal (2.56) como cientfica (2.56E-4)
En una expresin tipo long se aade una L al final (200L)
Una expresin tipo carcter se define entre comillas simples (A)
Una expresin de cadena de caracteres se define entre comillas dobles (expresin)
Base Decimal: Expresin en formato normal. Ejemplo: 230
Base Octal: Comienza por cero. Ejemplo: 0346
Base Hexadecimal: Comienza por cero-x. Ejemplo: 0xE6
Expresin de Nmeros Enteros en Diferentes Bases
Tabla de Caracteres de Control
nueva lnea
tabulaci6n
retroceso
retorno de carro
avance de pgina
antibarra
ap6strofe
comillas
sonido de alerta
carcter nulo
octeto binario
NL o LF
TAB o HT
BS
CR
FF
\

BELL
NULL
ddd
\n
\t
\b
\r
\f
\\
\
\
\a
\0
\ddd
Es posible definir constantes asociadas a un identificador por medio de
la directiva #define
Ejemplo:
#define PI 3.141593
#define MAXIMO 255
#define MAXINT 32767
Definicin de Constantes Mediante Directiva de Preprocesador
Formato Bsico de Expresiones Constantes
Expresiones Constantes
Los operadores pueden estar representados por uno o por dos caracteres
especiales, por una palabra reservada, o por un especificador de tipo puesto
entre parntesis.
Definicin
Operadores Mondicos o Unarios: preceden a un identificador, a una expresin o a una constante
Operadores Didicos o Binarios: establecen la relacin entre dos trminos o expresiones
Operadores Tridicos o Ternarios: ponen en relacin tres trminos o expresiones
Categoras de Operadores
Tabla de Operadores
Unarios Binarios Ternarios
-
*
&
!
~
++
--
(tipo)
sizeof
+
-
*
/
%
|
&

>>
<<
.
==
!=
>
>=
<
<=
||
&&
->
=
+=
-=
*=
/=
%=
|=
&=
=
>>=
<<=
? :
Operadores
Se puede considerar que los separadores estn formados por:
delimitadores
espacios en blanco
Definicin
Son signos especiales que permiten al compilador separar y reconocer las
diferentes unidades sintcticas del lenguaje
Delimitadores
Principales Signos Delimitadores
; termina una declaracin de variable o una instrucci6n
, separa dos elementos consecutivos en una lista
( ) enmarca una lista de argumentos o de parmetros
[ ] enmarca la dimensi6n o el subndice de una tabla
{ } enmarca un bloque de instrucciones o una lista de valores iniciales
Pueden estar constituidos por uno o varios caracteres "espacios" o "blancos";
de uno o varios caracteres de "TABulacin", y del carcter de avance a la
lnea siguiente, denominado normalmente nueva lnea (newline). Estos
caracteres sirven para delimitar las diversas unidades sintcticas.
Espacios en Blanco
Separadores
Los llamados comentarios o memorandums, propiamente no forman parte de
los elementos base del lenguaje, ya que son ignorados por el compilador y
slo reflejados en el listado fuente del programa.
Definicin
1. Serie de caracteres que vaya encerrada entre los dos smbolos /* y
*/.Restriccin: los comentarios no deben estar imbricados o anidados
2. ANSI C permite tambin otro tipo de comentarios, tomado del C++.
Todo lo que va en cualquier lnea del cdigo detrs de la doble barra (//)
Tipos
#include <stdio.h>
main()
{
/* Comentario en varias
lneas */
return(0); // comentario de lnea
}
Ejemplo
Comentarios
Definicin
Tres tipos fundamentales, que se expresan con la ayuda de palabras clave
reservadas en el lenguaje:
1. Nmeros enteros (int)
2. Nmeros reales (float)
3. Caracteres (char)
Modificadores
Calificacin para adaptarse mejor a los diversos tamaos de la palabra
interna del microprocesador, con el fin de mejorar la precisin o de reducir el
espacio ocupado en memoria :
1.short para un entero corto
2.long para un entero largo
3.unsigned para un entero sin signo
4.double para un nmero real flotante de doble precisin
unsigned int
signed char
long int
unsigned long int
Ejemplo
Tipos de Datos Bsicos Definicin y Modificadores
Tipos de Datos Bsicos Notaciones
Tipos de datos fundamentales (notacin completa)
char signed char unsigned char
signed short int signed int signed long int
Datos enteros
unsigned short int unsigned int unsigned long int
Datos reales
float double long double
Tipos de datos fundamentales (notacin abreviada)
char signed char unsigned char
short int long
Datos enteros
unsigned short unsigned unsigned long
Datos reales
float double long double
Tipo Tamao de palabra
16 bits 32 bits
char
int
short
long
unsigned
float
double
8 bits
16 bits
16 bits
32 bits
16 bits
32 bits
64 bits
8 bits
32 bits
16 bits
32 bits
32 bits
32 bits
64 bits
Operador sizeof()
El operador sizeof se utiliza para determinar el nmero
de bytes de un variable o un tipo
int a;
sizeof(a); sizeof(unsigned int);
Tipos de Datos Bsicos Tamaos y Rangos
Tipos de Datos Bsicos Rangos
Tipo Rango
char
unsigned char
int
short
long
unsigned
float
double
long double
-128..127
0.255
-32768..32767
-32768..32767
-2
32
..2
32
-1
0..65535
3.4E-38..3.4E+38
1.7E-308..1.7E+308
3.4E-4932.. 1.1E+4932
Rangos para mquina de 16 bits
char ccar;
unsigned int inum;
float freal;
Declaracin Simple
char ccar, cdat;
unsigned int inum, icoorx;
float freal, fnum;
Declaracin Mltiple
char ccar = A;
unsigned int inum = 12432, icoorx = 5;
float freal = 0.14, fnum = -4.2812e-4;
Declaracin y Asignacin
Tipos de Datos Bsicos Declaracin de variables
Declaracin
<Clase de memoria> [tipo de dato] [[Identificador]<=Valor Inicial>, ...];
Las variable de tipo puntero representan direcciones donde
almacenar valores. Es importante diferenciar entre puntero
(espacio de memoria donde se almacena la direccin) y la
propia direccin del puntero.
Se declaran con un asterisco delante del identificador de
variable
main()
{
int *px, x = 3;
px = &x; // px apunta a x
*px = 5; // x vale 5
}
Definicin
Si px es un puntero (direccin): *px es el
contenido del puntero (el valor almacenado
en la direccin)
Si x es la variable: &x es la direccin de
memoria donde est almacenada la variable
Operadores de Punteros
? ? ? ? px35;
0 x39;
?
px
x
0 0 3 3
Direccin Contenido Grfica
0 0 0 39 px35;
0 x39;
39 x
0 0 3 3
0 0 0 39 px35;
0 x39;
39 x
0 0 5 5
px
px
int *px, x; /* px es un puntero a entero y
x es un entero */
Ejemplo
La declaracin de punteros genricos a
direcciones se asocian al tipo void
Declarar un variable que no sea puntero
de tipo void no tiene sentido
El Tipo void
void *pv, v; /* La variable v
est mal declarada */
Ejemplo
Punteros
La declaracin de las variables lleva asociado un mbito, dentro del cual la
variable es visible:
mbito Global: La variable es visible en todas las funciones del
programa
mbito Local: La variable es visible dentro del bloque o funcin en el
que encuentra definida. (Tiene prioridad sobre el mbito global)
int x, y; // variables glogales
main()
{
float x, z; // variables locales
/* Aqu x, z son reales e y un entero */
}
/* Aqu x e y son variables enteras */
/* La variable z no existe fuera de la funcin
donde est definida */
Ejemplo
mbito de las Variables
A menudo es necesario convertir valores de variables o expresiones de un tipo a otro
diferente. Hay dos tipos de conversiones:
Conversiones Implcitas (Promocin): Las realiza automticamente el programa.
Variables o expresiones de menor rango promocionan a rangos superiores.
Conversiones Explcitas (Casting): Conversin forzada por el programador. Se
utiliza el tipo a convertir entre parntesis.
int inum;
float rnum;
char ccar;
rnum = 65.0
inum = (int)rnum; //inum vale 65
ccar = (char)inum; //ccar vale 65 (cdigo ASCII de A)
Ejemplo de Casting
Definicin
long double > double > float > unsigned long > long > unsigned int > int > char
Rangos de Conversiones Implcitas
Conversiones de Tipo Casting
Cdigo ASCII
American
Standard
Code
Information
Interchange
ASCII
Cdigo ASCII Caracteres imprimibles y no imprimibles
Cdigo ASCII Caracteres extendidos
Los operadores pueden estar representados por uno o por dos caracteres especiales, por una palabra
reservada, o por un especificador de tipo puesto entre parntesis.
Definicin
Operadores Mondicos o Unarios: preceden a un identificador, a una expresin o a una constante
Operadores Didicos o Binarios: establecen la relacin entre dos trminos o expresiones
Operadores Tridicos o Ternarios: ponen en relacin tres trminos o expresiones
Categoras de Operadores
Tabla de Operadores
Unarios Binarios Ternarios
-
*
&
!
~
++
--
(tipo)
sizeof
+
-
*
/
%
|
&

>>
<<
.
==
!=
>
>=
<
<=
||
&&
->
=
+=
-=
*=
/=
%=
|=
&=
=
>>=
<<=
? :
Operadores aritmticos
Operadores de manipulacin de bits
Operadores de asignacin
Tipos de Operadores
Operadores de incremento y decremento
Operadores de relacin
Operadores de direccin
Operadores
Operadores Aritmticos
+ la adicin
- la sustraccin y el menos mondico
* la multiplicacin
/ la divisin
% el residuo o resto de la divisin
#include <stdio.h>
main() /* comprobaciones de prioridad */
{
int c = 2, d = 3, y = 4;
printf(c * d %%y = %d\n, c * d % y);
printf((c * d) %%y = %d\n, (c * d) % y);
printf(c * (d %%y) = %d\n, c * (d % y));
}
Ejemplo
Depende de los operandos:
4 / 3 1 Entero
4.0 / 3 1.3333 Real
4/ 3.0 1.3333 Real
4.0 / 3.0 1.3333 Real
Divisin Entera vs Real
c * d % y = 2
(c * d) % y = 2
c * (d % y) = 6
Solucin
El operador de asignacin bsico es el igual (=)
Nota
Operadores Aritmticos
#include <stdio.h>
main()
{
long n = 0x12345678; // entero sobre 32 bits
printf(%lx & 0X0F0F0F0F = %lx, n, n & 0x0f0f0f0f);
}
Ejemplo
Solucin
Operadores de Manipulacin de Bits
& Y lgico inclusivo (AND)
| O lgico inclusivo (OR)
^ O lgico exclusivo (XOR)
negacin, complementos a uno
<< desplazamiento hacia la izquierda
>> desplazamiento hacia la derecha
12345678 & 0X0F0F0F0F = 02040608
Operadores de Manipulacin de Bits
Operadores de Asignacin
= Asignacin
+= Suma y asignacin
= Resta y asignacin
*= Producto y asignacin
/= Divisin y asignacin
%= Resto y asignacin
|= OR y asignacin
&= AND y asignacin
^= XOR y y asignacin
>>= Desplazamiento a izquierdas y asignacin
<<= Desplazamiento a derechas y asignacin
Operador Explicacin Uso
+= a = a + b a += b
*= a = a * b a *= b
-= a = a - b a -= b
/= a = a / b a /= b
%= a = a % b a %= b
Utilizacin de Operadores Combinados Asignacin Mltiple
i = j = k = 0; /* primero k = 0 y
luego j = 0 y
luego i = 0 */
Asignacin Anidada
car = 0x5f & (c = getchar()); // mayscula
Operadores de Asignacin
Utilizacin de Operadores Combinados
Operadores de Incremento y Decremento
++ Incremento de una unidad
-- Decremento de una unidad
Funcin Abreviatura Operador izda Operador dcha
x = x + 1 x += 1 ++x x++
x = x - 1 x -= 1 --x x--
a = 3; b = a++; // a = 4, b = 3
a = 3; b = ++a; // a = 4, b = 4
a = 3; b = a--; // a = 2, b = 3
a = 3; b = --a; // a = 2, b = 2
Ejemplos
Operadores de Incremento y Decremento
Operadores de Comparacin
> Mayor que
>= Mayor o igual a
< Menor que
<= Menor o igual a
== Igual a, igualdad
!= Distinto de, desigualdad
Valores Booleanos
Verdadero 1
Falso 0
Operadores Lgicos
Negacin mondica (NOT)
&& Interseccin lgica (AND)
|| unin lgica (OR)
a = 3 > 7; // a vale 0 (falso)
a = (3 > 2 || 5 == 4) && !1 // a vale 0 (falso)
(index < MAX - 1 && (c = getchar()) != '\n') && c != EOF)
Ejemplos
Operadores de Relacin
Clasificacin de los Operadores segn sus Prioridades
( ) [ ] -> .
! ++ -- - * & (type) sizeof
* / %
+ -
<< >>
< <= > >=
== !=
&

|
&&
||
? :
= += -= *= /= %= >>= <<= &= |= =
,
Prioridad de Operadores
Las funciones de E/S en C no pertenecen a las palabras reservadas del lenguaje. Son funciones de la librera estndar
cuyo formato se encuentra en el fichero de cabecera stdio.h.
Las funciones de E/S bsicas recogen/insertan variables o constantes en los ficheros de E/S
(stdin/stdout teclado/monitor)
Definicin
Funciones de E/S Bsicas
Tipos
Las principales funciones de E/S se dividen por su propsito:
Funciones de E/S de caracteres: recoger/insertar un carcter del fichero de E/S
getchar()/putchar()
Funciones de E/S de cadenas de caracteres: recoger/insertar una cadena de caracteres del fichero de E/S
gets()/puts()
Funciones de E/S con formato: leer/escribir con formato del fichero de E/S
scanf()/printf()
Leer un carcter desde techado: caracter = getchar();
getchar()
Funciones de E/S Bsicas E/S de Caracteres
Presenta un carcter en pantalla: putchar(caracter);
putchar()
#include <stdio.h> // necesario para utilizar funciones de E/S
main()
{
char ccar; // variable caracter
ccar = getchar(); // recoge carcter de teclado
putchar(ccar); // escribe carcter en monitor
putchar(A); // escribe una A en monitor
putchar(getchar()); // escribe lo ledo
}
Ejemplo de getchar/putchar
Leer una cadena de caracteres desde techado: gets(cadena);
gets()
Funciones de E/S Bsicas E/S de Cadenas de Caracteres
Presenta una cadena de caracteres en pantalla: puts(cadena);
puts()
#include <stdio.h> // necesario para utilizar funciones de E/S
main()
{
char cadena[100]; // variable cadena de caracteres
gets(cadena); // recoge la cadena de teclado
puts(cadena); // escribe la cadena en monitor
puts(Hola socio); // escribe la cadena constante en monitor
puts(gets(cadena)); // escribe lo ledo
}
Ejemplo de gets/puts
Escribir en pantalla con formato: printf (formato, arg1, arg2, ..., argn);
formato: cadena de formato de salida de datos.
arg
i
: argumentos a incluir dentro del formato (pueden ser variables o expresiones).
printf()
Formato Expresin Resultado
%d, %i entero Entero decimal con signo
%u entero Entero decimal sin signo
%o entero Entero octal sin signo
%x, %X entero Entero hexadecimal sin signo
%f real Real en notacin punto
%e, %E real Real en notacin cientfica
%g, %G real Real en notacin ms corta
%c carcter Carcter
%s string Cadena de caracteres
%p puntero Direccin de memoria
%ld, %lu, entero largo Entero largo (distitos formatos)
Signo : ajuste a la izquierda.
nmero: longitud mnima en caracteres
punto decimal: precisin de la parte fraccionaria
Otras Opciones de Formato
#include <stdio.h>
#define PI 3.141593
main()
{
int inum = 3;
char ccar = A;
printf(Hola mundo !!\n);
printf(El nmero %8d\n, inum);
printf(Un nmero %d y un carcter %c\n,
inum + 2, ccar);
printf(El valor de PI es %6.4f\n, PI);
}
Ejemplo
Funciones de E/S Bsicas printf()
Leer de teclado con formato: scanf (formato, dir1, dir2, ..., dirn);
formato: cadena de formato de entrada de datos.
dir
i
: argumentos a incluir dentro del formato (direcciones de variables donde se almacenaran valores ledos).
scanf()
#include <stdio.h>
main()
{
int inum, *pinum;
float rnum;
char ccar;
scanf(%d, &inum); // lee un entero y lo almacena en inum
scanf(%f %c, &rnum, &ccar); // lee un rnum y ccar
scanf(%d, pinum); // PELIGROSO
pinum = &inum;
scanf(%d, pinum); // CORRECTO, lee inum
}
Ejemplo
Es importante destacar que los argumentos son direcciones. Cuando se utilizan variables base es necesario
utilizar el operador de indireccin &.
Nota
Funciones de E/S Bsicas scanf()
#include <stdio.h>
main()
{
char *pstr, str[100], cad[20];
scanf(%s, pstr); // PELIGROSO
scanf(%s, str); // CORRECTO, lee str hasta blanco o fin de lnea
pstr = str;
scanf(%s, pstr); // CORRECTO, lee str hasta blanco o fin de lnea
scanf(%[^\n], str); // Lee toda la lnea sobre str
scanf(%s %*s %s, cad, str); /* Lee cad hasta blanco, deja una palabra y la
siguiente palabra sobre str hasta blanco o fin de lnea */
}
Ejemplo
Funciones de E/S Bsicas scanf() Lectura de strings
#include <stdio.h>
#define DIAS_ANIO 365
main()
{
char nombre[100];
int dias, anios;
printf(Cual es tu nombre? );
scanf(%s, nombre);
printf(Y tu edad? );
scanf(%d, &anios);
dias = anios * DIAS_ANIO;
printf(%s tienes aproximadamente %d das, nombre, dias);
}
Ejemplo
Cual es tu nombre? Jose
Y tu edad? 20
Jose tienes aproximadamente 7300 das
Solucin
Funciones de E/S Bsicas printf()/scanf() Ejemplo
Las sentencias de control van a determinar la cadena de ejecucin de las instrucciones.
Definicin
Sentencias Condicionales o Selectivas: permiten la bifurcacin de la cadena de ejecucin
Sentencia if
Sentencia if ... else
Sentencia switch
Sentencias Repetitivas o Iterativas: permiten la repeticin de un conjunto de instrucciones
Sentencia while
Sentencia do ... while
Sentencia for
Tipos de Sentencias de Control
Sentencias de Control
condicin?
expresin(es)
falso
verdadero
#include <stdio.h>
#define MAXIMO 100
main()
{
int inum;
printf(Dame un nmero -> );
scanf(%d, &inum);
if(inum > MAXIMO)
{
printf(El nmero introducido es mayor que el mximo\n);
}
}
Ejemplo
if(condicin)
{
expresin(es)
}
Ejecucin
Diagrama de Flujo
Sentencia if
#include <stdio.h>
#define MAX_EDAD_JOVEN 25
main()
{
int edad;
printf(Dime tu edad -> ");
scanf(%d, &edad);
if(edad <= MAX_EDAD_JOVEN)
{
printf(Con %d aos eres un chaval\n, edad);
}
else
{
printf(Con %d aos no ests para muchos trotes\n, edad);
}
}
Ejemplo
if(condicin)
{
expresin(es) if
}
else
{
expresin(es) else
}
Ejecucin
Diagrama de Flujo
condicin?
expresin(es) if
falso verdadero
expresin(es) else
Sentencia if...else
if(condicin1)
{
if(condicin2)
{
expresin(es) if condicin 2
if(condicin3)
{
expresin(es) if condicin 3
}
}
else
{
expresin(es) else condicin 2
}
}
else
{
if(condicin4)
{
expresin(es) if condicin 4
}
else
{
expresin(es) else condicin 4
}
}
Ejemplo de Ejecucin
Sentencia if...else Anidadas
#include <stdio.h>
main()
{
char letra;
printf(Dame una inicial y te dar un animal -> );
scanf(%c, &letra);
switch(letra)
{
case a:
printf(antlope\n);
break;
case b:
printf(buitre\n);
break;
case c:
printf(cocodrilo\n);
break;
default:
printf(No se me ocurre\n);
}
}
switch(variable_opcin)
{
case opcion_1:
expresin(es) opcion_1;
break;
case opcion_2:
expresin(es) opcion_1;
break;
...
case opcion_N:
expresin(es) opcion_N;
break;
default:
expresin(es) default;
}
Ejecucin
Ejemplo
Sentencia switch
Equivalencia a Sentencia Condicional if..else
#include <stdio.h>
main()
{
float num, abs;
printf(Dame un nmero -> );
scanf(%f, &num);
abs = num > 0 ? num : -num;
printf(El valor absoluto de %6.4f es %6.4f\n, num, abs);
}
Ejemplo
Operador Condicional
: Condicionalidad
si (expresin1) entonces expresin2 en_caso_contrario expresin3
expresin1 ? expresin2 : expresin3
if(num > 0)
{
abs = num;
}
else
{
abs = -num;
}
e
q
u
i
v
a
l
e
n
t
e
El Operador Condicional
#include <stdio.h>
#define TOPEMINIMO 250
main()
{
int total = 0, nuevas;
while(total < TOPEMINIMO)
{
printf(Tienes %d piezas acumuladas\n, total);
printf(Cuantas piezas nuevas tienes -> );
scanf(%d, &nuevas);
total += nuevas;
}
printf(Has acumulado %d piezas.\n, total);
}
Ejemplo
while(condicin)
{
expresin(es)
}
Ejecucin Diagrama de Flujo
condicin?
expresin(es)
falso
verdadero
Sentencia while
#include <stdio.h>
#define ESCAPE \x1b //escape = ASCII(27), octal(33)
//hexadecimal(1b)
main()
{
char caracter;
do
{
printf(Dame un caracter -> );
caracter = getchar();
}
while(caracter != ESCAPE);
}
Ejemplo
do
{
expresin(es)
}
while(condicin);
Ejecucin Diagrama de Flujo
condicin?
expresin(es)
falso
verdadero
Sentencia do...while
for(expresin inicial; condicin; expresin bucle)
{
expresin(es)
}
Ejecucin
Diagrama de Flujo
condicin?
expresin(es)
falso
verdadero
expresin bucle
expresin inicial
#include <stdio.h>
main()
{
int i;
for(i = 0; i < 10; i++)
{
printf(Nmero -> %5d Cuadrado -> %5d\n,
i, i * i);
}
}
Ejemplo
Sentencia for
break: permiten la salida del bucle sin tener en cuenta la expresin que lo controla
continue: permiten la vuelta a la cabecera del bucle sin ejecutar las sentencias restantes
#include <stdio.h>
main()
{
char car;
while((car = getchar()) != X)
{
if(car == \x1b)
{
break;
}
printf(Has introducido %c\n, car);
}
}
Ejemplo break
#include <stdio.h>
main()
{
char car;
while((car = getchar()) != X &&
ccar != \x1b)
{
printf(Has introducido %c\n, car);
}
}
Solucin estructurada
#include <stdio.h>
main()
{
char car;
while((car = getchar()) != X)
{
if(car == \x1b)
{
continue;
}
printf(Has introducido %c\n, car);
}
}
Ejemplo continue
#include <stdio.h>
main()
{
char car;
while((car = getchar()) != X)
{
if(car != \x1b)
{
printf(Has introducido %c\n, car);
}
}
}
Solucin estructurada
Sentencias break, continue
#include <stdio.h>
main()
{
int i;
for(i = 0;
(i < 100) && (i % 17 != 0);
i++)
{
if(i % 2 != 0)
{
printf(Nuestro nmero es %d\n, i);
}
}
}
Solucin estructurada
#include <stdio.h>
main()
{
int i;
for(i = 0; i < 100; i++)
{
if(i % 2 == 0)
{
continue; // comienza la iteracin
}
if(i % 17 == 0)
{
break; // sale del bucle
}
printf(Nuestro nmero es %d\n, i);
}
}
Ejemplo break/continue
Sentencias break, continue Ejemplo
for(expresin inicial; condicin1; expresin bucle)
{
while(condicin2)
{
expresin(es) while condicin 2
for(expresin inicial;
condicin3;
expresin bucle)
{
expresin(es) for condicin 3
do
{
expresin(es) do..while condicin 4
}
while(condicin4)
}
}
expresin(es) for condicin 1
}
Ejemplo de Ejecucin
Sentencias Repetitivas Anidadas
#include <stdio.h>
main()
{
int base, linea, columna;
printf(Nmero de asteriscos en base -> );
scanf(%d, &base);
linea = 0;
while(linea < base)
{
for(columna = 0;
columna < linea;
columna++)
{
printf(*);
}
printf(\n);
linea++;
}
}
Ejemplo
#include <stdio.h>
main()
{
int base, linea, columna;
printf(Nmero de asteriscos en base -> );
scanf(%d, &base);
for(linea = 0; linea < base; linea++)
{
for(columna = 0; columna < linea; columna++)
{
printf(*);
}
printf(\n);
}
}
Ejemplo
Generar un tringulo de asteriscos, indicando el
nmero de asteriscos en la base:
*
**
***
****
*****
Enunciado
Los dos ejemplos expuestos son equivalentes
Nota
Sentencias Repetitivas Anidadas Ejemplo
Subrutinas
Procedimientos: son mdulos de programa que no ofrecen ningn tipo de valor asociado al
nombre de la subrutina
Funciones: son mdulos de programa que ofrecen un valor asociado al nombre de la subrutina
Funcin
Parte de cdigo independiente, que puede ser llamada envindole unos datos (o sin enviarle nada),
para que realice una determinada tarea y/o proporcione unos resultados
Definicin, Declaracin y Llamada de una Funcin
Definicin: cuerpo de la funcin en donde reside el cdigo de la misma.
Declaracin: presentacin de la funcin donde se expresa su nombre, parmetros y tipo de valor
devuelto.
Llamada: utilizacin de la funcin desde un punto de programa referenciada por su nombre,
indicando el valor de los parmetros de trabajo y utilizacin del valor devuelto.
Parmetros Formales vs. Parmetros Actuales
Parmetros Formales: lista de declaraciones de variables, precedidas por su tipo correspondiente
y separadas por comas (,) declarados en el encabezamiento de la funcin.
Parmetros Actuales: lista de constantes, variables y expresiones de un tipo determinado, que
aparecen en la llamada a una funcin.
Funciones
Una funcin se invoca provocando valores a los argumentos de la llamada.
Los argumentos se pasan siempre por valor
El valor se devuelve por medio de la sentencia return()
Los procedimientos son funciones de tipo void
El control del nmero y tipo de argumentos es mnimo
Las funciones en C permiten recursividad y reentrabilidad
#include <stdio.h>
int factorial(int numero);
main()
{
int factor;
printf("Introduzca un nmero -> ");
scanf("%d", &factor);
printf("El factorial de %d es %d\n",
factor, factorial(factor));
}
Ejemplo
int factorial(int numero)
{
int i, out;
for(i = 1, out = 1; i <= numero; i++)
out *= i;
return out;
}
definicin
llamada
declaracin
Funciones Uso de una Funcin
Definicin de una Funcin
Consiste en la definicin del cdigo necesario para que sta realice las tareas para las que ha sido
prevista. La definicin de una funcin se debe realizar en alguno de los ficheros que forman parte del
programa.
La primera lnea recibe el nombre de encabezamiento (header) y el resto de la definicin encerrado
entre llaves es el cuerpo (body) de la funcin.
Formato General
[clase] [tipo] nombre_funcion([lista de argumentos con tipos])
{
[declaracin de variables y/o de otras funciones]
codigo ejecutable // sentencias
return (expresin); // optativo
}
clase: define el mbito de la funcin, esto es, desde dnde puede ser llamada. La clase puede ser
extern o static.
tipo: indica el tipo de valor devuelto por la funcin.
nombre: es el identificador que indica el nombre de la funcin.
lista de argumentos: secuencia de declaracin de parmetros separados por comas y encerrados
entre parntesis. Son los llamados parmetros formales.
Funciones Definicin de una Funcin
Declaracin de una Funcin
Toda funcin debe ser declarada antes de ser utilizada en la funcin o programa que realiza la
llamada.
Formato General
[clase] [tipo] nombre_funcion([lista de tipos de argumentos]);
Formas de Declarar una Funcin
Mediante una llamada a la funcin: Se supone int como tipo del valor de retorno, y el tipo de los
argumentos actuales como tipo de los argumentos formales
Mediante una definicin previa de la funcin
Mediante una declaracin explcita, previa a la llamada
Ejemplo
int factorial(int numero);
int factorial(int);
int factorial();
Funciones Declaracin de una Funcin
Llamada de una Funcin
La llamada a una funcin se hace incluyendo su nombre en una expresin o sentencia del programa
principal o de otra funcin. Este nombre puede ir seguido de una lista de argumentos separados por
comas y encerrados entre parntesis, los parmetros actuales.
Cuando se llama a una funcin se ejecuta el cdigo correspondiente a la funcin hasta que se llega a
una sentencia return o al final del cuerpo de la funcin, y entonces se devuelve el control al
programa que realiz la llamada, junto con el valor de retorno si es que existe.
Formato General
variable = expresin([parmetros actuales]);
variable: especifica la variable en donde va a ser almacenado el valor devuelto por la funcin. La
llamada puede prescindir del valor devuelto por la funcin.
expresin: especifica la direccin que referencia a la funcin. En general se corresponde con el
nombre de la funcin.
parmetros actuales: lista de expresiones separadas por comas. Las expresiones son evaluadas,
pasadas a la funcin y asignadas a los parmetros formales. El nmero de parmetros actuales
coincide con el parmetros formales, a no ser que especifique un nmero variable de parmetros.
Funciones Llamada de una Funcin
#include <stdio.h>
double valor_abs(double); /* declaracin */
void main (void)
{
double z, y;
y = -30.8;
z = valor_abs(y) + y * y; /* llamada en
una expresin */
printf("El valor calculado es %g\n", z);
}
double valor_abs(double x)
{
if (x < 0.0)
return -x;
else
return x;
}
Ejemplo Clculo de una expresin absoluta
#include <stdio.h>
#include <math.h>
double logaritmo(float numero, int base);
void main (void)
{
float numero;
int base;
printf("Introduce un nmero -> ");
scanf("%f", &numero);
printf("Introduce la base -> ");
scanf("%d", &base);
printf("El logaritmo de %lg es %lg\n",
numero, logaritmo(numero, base));
}
double logaritmo(float numero, int base)
{
return log(numero)/log(base);
}
Ejemplo Clculo de un logaritmo
Funciones Ejemplos
#include <stdio.h>
void permutar(double *, double *);
main()
{
double a=1.0, b=2.0;
printf("a = %lf, b = %lf\n", a, b);
permutar(&a, &b);
printf("a = %lf, b = %lf\n", a, b);
}
void permutar(double *x, double *y)
{
double temp;
temp = *x;
*x = *y;
*y = temp;
}
Ejemplo Permutar dos Nmeros
Paso por Referencia
El lenguaje C no tiene en si en paso por referencia. En su lugar se pasa por valor la direccin de la
variable a modificar. Pero por correspondencia con los diferentes textos, llamaremos a este paso por
direccin paso por referencia.
#include <stdio.h>
void permutar(double, double);
main()
{
double a=1.0, b=2.0;
printf("a = %lf, b = %lf\n", a, b);
permutar(a, b);
printf("a = %lf, b = %lf\n", a, b);
}
void permutar(double x, double y)
{
double temp;
temp = x;
x = y;
y = temp;
}
Ejemplo Permutar dos Nmeros
Incorrecto Correcto
a = 1.000000, b = 2.000000
a = 1.000000, b = 2.000000
Soluciones
a = 1.000000, b = 2.000000
a = 2.000000, b = 1.000000
Funciones Paso por Referencia
Argumentos de la Funcin main
argc: es una variable int que contiene el nmero de palabras que se teclean a continuacin del
nombre del programa cuando ste se ejecuta.
argv: es un vector de punteros a carcter que contiene las direcciones de la primera letra o
carcter de dichas palabras.
#include <stdio.h>
int main(int argc, char *argv[])
{
int cont;
for (cont=0; cont<argc; cont++)
printf("El argumento %d es: %s\n", cont, argv[cont]);
printf("\n");
return 0;
}
Ejemplo Mostrar Argumentos de Entrada
Prototipo de la Funcin main
int main(int argc, char *argv[]);
Funciones La Funcin main con Argumentos
Funciones de Conversin de Datos
double atof (char *cadena);
Convierte una cadena a valor real doble
int atoi (char *cadena);
Convierte una cadena a entero
long atol (char *cadena);
Convierte una cadena a entero largo
char *fcvt (double valor, int decs, int *pdec, int *signo);
Convierte un nmero real en una cadena de caracteres.
<stdlib.h>
Funciones de Conversin de Caracteres
int toascii (int numero);
Convierte un nmero a un valor ASCII.
int tolower (int caracter);
Convierte un carcter a minscula, si procede.
int toupper (int caracter);
Convierte un carcter a mayscula, si procede.
<ctype.h>
Funciones Funciones de Librera Estndar I
Funciones Matemticas
double ceil (double valor);
Redondea un nmero real al menor entero que es mayor que el valor parmetro
double floor (double valor);
Redondea un nmero real al mayor entero que es menor que el valor parmetro
int abs (int valor);
Calcula el valor absoluto del valor parmetro entero
double fabs (double valor);
Calcula el valor absoluto del valor parmetro real
double fmod (double dividendo, double divisor);
Calcula el resto de la divisin dividendo/divisor
double sqrt (double valor);
Devuelve la raz cuadrada del parmetro valor
double pow (double base, double exponente);
Calcula la potencia base elevado a exponente
<math.h>
Funciones Funciones de Librera Estndar II
Funciones Matemticas Exponenciales
double exp (double valor);
Devuelve el valor exponencial para el parmetro valor
double log (double valor);
Devuelve el logaritmo neperiano del parmetro valor
double log10 (double valor);
Devuelve el logaritmo base 10 del parmetro valor
<math.h>
Funciones Funciones de Librera Estndar III
Funciones Matemticas Trigonomtricas
double sin (double valor);
Devuelve el seno para el parmetro valor
double cos (double valor);
Devuelve el coseno del parmetro valor
double tan (double valor);
Devuelve la tangente del parmetro valor
<math.h>
double asin (double valor);
Devuelve el arco seno para el parmetro valor
double cos (double valor);
Devuelve el arco coseno del parmetro valor
double tan (double valor);
Devuelve el arco tangente del parmetro valor
Funciones Aleatorias
int rand (void);
Devuelve un nmero entero pseudoaleatorio
void srand (unsigned int semilla);
Establece el comienzo de generacin de nmeros pseudoaleatorios
<stdlib.h>
Funciones Funciones de Librera Estndar IV
Ejemplo
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
void main()
{
int i;
srand((unsigned int) time(NULL));
for(i = 0; i < 5; i++)
{
printf("Aleatorio[%d] = %d\n", i, rand());
}
}
La declaracin de las variables lleva asociado un mbito, dentro del cual la variable es visible:
mbito Global: Las variables son visibles en todas las funciones del programa. Se declaran al
principio de mdulo.
mbito Local: Las variables son visibles dentro del bloque o funcin en el que encuentra
definida. (Tiene prioridad sobre el mbito global)
mbito de las Variables
Permanente: Se crean al comienzo de programa y permanecen hasta el final.
Voltil: Su duraciones estn unidas con las de las ejecuciones de los bloques en las que estn
definidas.
Duracin de las Variables
mbito y Duracin de Variables
Auto: Mtodo de almacenamiento por defecto, se crean sobre la pila de programa. Se crean al
comenzar a ejecutarse el bloque y dejan de existir cuando el bloque se termina de ejecutar. Son
variables locales. No son inicializadas por defecto.
Extern: Se definen fuera de cualquier bloque o funcin. Son variables globales. Por defecto, son
inicializadas a cero. Para utilizarlas en otros mdulos deben ser declaradas como extern.
Static: Conservan su valor entre distintas ejecuciones del bloque en que estn definidas. Por
defecto, son inicializadas a cero. Las variables definidas como static extern son visibles slo
para las funciones y bloques comprendidos desde su definicin hasta el fin del fichero. Una
funcin puede tambin ser definida como static, y entonces slo es visible para las funciones
que estn definidas despus de dicha funcin y en el mismo fichero.
Register: Es un modo de recomendacin para el compilador, para que si es posible ciertas
variables sean almacenadas en los registros de la CPU y los clculos con ellas sean ms rpidos.
Mtodos de Almacenamiento
Modo de Almacenamiento Palabra Reservada Duracin mbito
Automtico auto voltil local
Registro register voltil local
Esttico static permanente local
Externo extern permanente global
Almacenamiento de Variables
#include <stdio.h>
int var_global = 1;
void test_static();
main()
{
int var_local;
for(var_local = 1; var_local <= 3; var_local++)
{
printf(Main: global = %d, local = %d\n,
var_global++, var_local);
test_static();
}
}
void test_static(void)
{
int var_local = 1;
static int var_static = 1;
printf(Funcin: global = %d, local = %d, esttica = %d\n,
var_global++, var_local++, var_static++);
}
Ejemplo
Main: global = 1, local = 1
Funcin: global = 2, local = 1, esttica = 1
Main: global = 3, local = 2
Funcin: global = 4, local = 1, esttica = 2
Main: global = 5, local = 3
Funcin: global = 6, local = 1, esttica = 3
Solucin
Almacenamiento de Variables Ejemplo
Definicin
Para definir los arrays es necesario indicar el tipo de datos se quiere almacenar en el array, el nombre
del array y la cantidad de elementos
int numeros [30]; /* un array para guardar 30 nmeros enteros */
char alfabeto [26]; /* un array para guardar 26 caracteres */
long largos [500]; /* un array para guardar 500 nmeros enteros
tipo long */
float temp_semana [7]; /* un array para guardar 7 nmeros reales */
Inicializacin
Los arrays se pueden inicializar directamente en la definicin.
int numeros[3] = {2, 7, 11};
float temp[7] = {12.3, 13.4, 11.7, 10.2, 9.1, 10.8, 11.0};
char cadena[10] = {A, n, o, n, i, m, o, \0};
Arrays Definicin e Inicializacin
#include <stdio.h>
#define MESES 12
void main (void)
{
int cont = 0;
static int meses[MESES] = {3l,28,3l,30,31,30,3l,31,30,3l,30,31};
for (cont = 0; cont < MESES; cont++)
{
printf ( "el mes %2d tiene %2d das\n", cont + l, meses[cont]);
}
}
Ejemplo
el mes 1 tiene 31 das.
el mes 2 tiene 28 das.
el mes 3 tiene 31 das.
...
el mes 11 tiene 30 das.
el mes 12 tiene 31 das.
Solucin
Indexacin
Para identificar cada elemento de un array se utiliza un nmero denominado ndice.
El ndice obligatoriamente debe ser un nmero entero.
El valor del ndice correspondiente al primer elemento es 0.
int a[6];
a[0] = 23;
a[2] = a[0] + 5;
for(i=0; i < 6; i++)
{
printf(%d, a[i]);
}
23 28
a[0] a[1] a[2] a[3] a[4] a[5]
a
Arrays Indexacin
Definicin
Es posible declarar arrays de varias dimensiones. Por cada dimensin habr un ndice.
Mientras que los arrays de una dimensin pueden asemejarse a vectores, los arrays de dos
dimensiones se pueden asemejar a matrices.
foat matriz[10]10];
static float lluvia[4][12] =
{
{10.2,4.1,12.2,2.4,7.7,6.8,7.0,8.7,11.5,8.3,4.7,9.2},
{11.2,10.1,11.2,6.4,7.9,9.3,9.0,8.7,11.5,8.3,4.7,9.2},
{13.2,8.6,12.3,3.4,7.8,9.8,8.0,8.7,11.5,8.3,4.7,9.2},
{1.2,8.9,42.2,9.4,7.8,4.8,10.0,8.7,11.5,8.3,4.7,9.2},
};
static int tres_dimen[3][2][4] =
{
{
{1, 2, 3, 4},
{5, 6, 7, 8}
},
{
{7, 9, 3, 2},
{4, 6, 8, 3}
},
{
{7, 5, 6, 8},
{0, 1, 9, 4}
}
};
Arrays Arrays Multidimensionales
Definicin
Un puntero puede referenciar un array o elemento de un array.
El nombre de un array es la direccin del mismo array.
int meses[12] ;
meses == &meses[0];
#include <stdio.h>
void main (void)
{
static int fechas [4] = {10, 20, 30, 40};
int *entero_ptr;
int i;
entero_ptr = fechas;
for (i = 0; i < 4; i++)
{
printf ("fechas [%d] = %d, direccin: %lu\n",
i, *(entero_ptr + i), (entero_ptr + i));
}
}
Ejemplo
#include <stdio.h>
void main (void)
{
static int fechas [4] = {10, 20, 30, 40};
int i;
for (i = 0; i < 4; i++)
{
printf ("fechas [%d] = %d, direccin: %lu\n",
i, fechas[i], &fechas[i]);
}
}
Ejemplo
fechas [0] = 10, direccin: 70478
fechas [1] = 20, direccin: 70480
fechas [2] = 30, direccin: 70482
fechas [3] = 40, direccin: 70484
Solucin
Arrays Arrays y Punteros
#include <stdio.h>
#define CANTIDAD 20
void inicializa (int lista [], int *cuanto);
int el_mayor (int lista [], int cuanto);
void main (void)
{
int lista[CANTIDAD];
int longitud, num;
inicializa(lista, &longitud);
num = el_mayor(lista, longitud);
printf("El mayor nmero introducido es: %d\n",
num);
}
Ejemplo
void inicializa(int lista [], int *cuanto)
{
int i;
for (i = 0; i < CANTIDAD; i++)
{
printf("Introduzca el nmero[%d]: ", i);
scanf("%d", &lista[i]);
}
*cuanto = CANTIDAD;
}
int el_mayor(int lista[], int cuanto)
{
int mayor, i;
mayor = lista[0];
for (i = l; i < cuanto; i++)
{
if (mayor < lista[i])
{
mayor = lista[i];
}
}
return (mayor);
}
Arrays Arrays y Funciones
Definicin
Las cadenas de caracteres son un tipo de arrays especiales cuya funcin principal es la manipulacin
de caracteres.
Una cadena de caracteres o un string, es un array formado por caracteres que tiene al final un
carcter especial: '\0'.
Los strings son arrays que almacena datos tipo char y como tales se declaran:
char cadenadecaracteres [20] = "Esto es una cadena de caracteres";
Inicializacin
La inicializacin de una cadena de caracteres puede hacerse de la siguiente manera:
char animales[] = {'g', 'a', 't', 'o', '\0'};
char animales[] = "gato";
char animales[10] = "gato";
char *animales = "gato";
animales = "gato"; // error de compilacin
Pueden inicializarse mediante una constante tipo string.
No es necesario saber la longitud, para detectar l final basta con buscar el carcter '\0'.
Se encuentran formatos especiales para las cadenas (printf, scanf).
Se dispone en la librera estndar de un grupo de funciones especficas para procesar cadenas de
caracteres.
Strings Cadenas de Caracteres
Funciones de Lectura y Escritura
char *gets (char *cadena);
Lee una lnea desde la entrada estndar (stdin) y la almacena en la variable especificada
int puts (char *cadena);
Escribe una cadena en la salida estndar (stdout)
<stdio.h>
Funciones de Manipulacin
int strlen (char *cadena);
Devuelve la longitud en bytes de la cadena parmetro.
int strcmp (char *cadena1, char *cadena2);
Compara cadena1 y cadena2, y devuelve 0 si son iguales <0 si cadena1<cadena2 y >0 al contrario
char *strcpy (char *destino, char *origen);
Copia la cadena origen en la posicin de la cadena destino.
char *strcat (char *destino, char *origen);
Aade la cadena origen en tras la cadena destino.
char *strchr (char *cadena, char caracter);
Devuelve un puntero a la primera ocurrencia del carcter en la cadena. NULL si no se encuentra.
char *strstr (char *cadena1, char *cadena2);
Devuelve un puntero a la primera ocurrencia de cadena2 en la cadena1. NULL si no se encuentra.
<string.h>
Strings Funciones de Librera Estndar
Definicin
Es un tipo de datos complejo conformado por un conjunto de campos de otros tipos (bsicos o
complejos) asociados a un identificador.
struct [etiqueta]
{
tipo campo1;
tipo campo2;
...
} [variable];
Declaracin e Inicializacin de Variables
Las variables de tipo estructuras se pueden inicializar en su declaracin.
struct tsagente agente1 = {"Mortadelo", 001};
struct tsagente agente2 = {"Filemn", 002};
Declaracin del Tipo
Cuando realizamos la declaracin de tipo de la estructura tambin es posible definir variables que
van a almacenar ese nuevo tipo de dato .
struct tsagente
{
char nombre[100];
int numero;
} agente, agentes[10];
Estructuras Definicin, Declaracin e Inicializacin
Acceso a los Campos
Variable normal: se utiliza el operador punto ().
Variable puntero: se utiliza el operador flecha (->).
struct tsagente
{
char nombre[100];
int numero;
} agente, *pagente;
strcpy(agente.nombre, Mortadelo);
agente.numero = 001;
pagente = &agente;
printf(Nombre: %10s Numero :%3d\n,
pagente->nombre, pagente->numero);
Asignacin de Estructuras
Es posible la asignacin directa entre estructuras.
struct tsagente agente1, agente2 = {Mortadelo, 001};
agente1 = agente2;
Las Estructuras como Parmetro de Funciones
Las estructuras de datos son tipos complejos y (aunque ciertos compiladores lo admiten) no deben
ser pasados como argumentos, ni devueltos por funciones. En su lugar se usan punteros a dichas
estructuras.
struct tsagente *leer_agente();
void mostrar_agente(struct tsagente *agente);
Estructuras Acceso, Asignacin y Parmetro de Funciones
Anidacin de Estructuras
Los campos de las estructuras pueden ser otras estructuras.
struct tspersona
{
char nombre[100];
int numero;
};
struct tsagencia
{
char nombre[100];
char pais[30];
};
struct tsagente
{
struct tspersona persona;
struct tsagencia agencia;
};
struct tsagente agente;
strcpy(agente.persona.nombre, Mortadelo);
strcpy(agente.agencia.nombre, TIA);
Arrays de Estructuras
Los componentes de un array pueden ser estructuras.
struct tsagente agentes[10];
strcpy(agentes[0].persona.nombre, Mortadelo);
agentes[0].persona.numero = 001;
Estructuras Anidacin y Arrays de Estructuras
Concepto
El concepto de fichero en el lenguaje C es general; se incluyen en l tanto dispositivos (pantalla,
impresora, teclado), cmo ficheros que se almacenan en memoria.
entrada/salida estndar (standard I/O).
entrada/salida a nivel de sistema (system-level I/O) .
Tipos de E/S de Ficheros
Modo carcter: Los datos se leen y escriben carcter a carcter.
Modo cadena: Los datos se leen y escriben como cadenas de caracteres.
Modo formateado: Los datos se leen y escriben en modo formato.
Modo bloque: Se utiliza para leer y escribir una cantidad fija de datos.
Formas de Leer y Escribir Datos en Ficheros
Ficheros de Texto: Datos se encuentran estructurados en modo texto. Contienen caracteres ASCII.
Ficheros Binarios: Datos en formato de almacenamiento en memoria. Contienen todo tipo de datos.
Tipos de Ficheros de Datos
Ficheros Concepto y Tipos
Apertura de un fichero
Para acceder a un fichero es necesario abrirlo.
Al abrir el fichero la informacin de control de acceso al fichero se guarda en una estructura
denominada FILE (definida en el fichero stdio.h) y que se utiliza mediante un puntero.
FILE *fopen(char *nombre, char *modo);
nombre: nombre del fichero con su path correspondiente
modo: modo de apertura del fichero.
Al modo de apertura hace falta aadir si se abre en modo texto (t) o en modo binario (b).
La funcin devuelve el puntero al fichero abierto. Si se produce un error en la apertura devuelve un
puntero nulo (NULL).
Modo Operaciones admitidas
r Lecturas
w escrituras (crea fichero o lo sobrescribe)
a escritura en el final del fichero (de no haber fichero lo crea)
r+ lecturas + escrituras (fichero creado)
w+ lecturas + escrituras (crea fichero o lo sobrescribe)
a+ lecturas + escrituras a final de fichero (de no haber fichero lo crea)
FILE *fich;
fich = fopen(\\ejemplos\\texto. txt", "w");
Ficheros Apertura de Fichero
Cierre de un fichero
Todo fichero abierto debe ser cerrado.
int fclose(FILE *fichero);
Fin de un fichero
int feof(FILE * fichero);
Devuelve un valor distinto de cero si no se encuentra al final de fichero (EOF).
#include <stdio.h>
void main (void)
{
FILE *fich;
if((fich = fopen("texto.txt", "r")) != (FILE *) NULL)
{
printf("El fichero \"texto.txt\" puede abrirse.\n");
fclose(fichero_ptr);
}
else
{
printf("El fichero \"texto.txt\" no puede abrirse.\n");
}
}
Ejemplo
<stdio.h>
<stdio.h>
Ficheros Cierre y Fin de Fichero
#include <stdio. h>
void main (void)
{
FILE *fich;
char caracter;
if((fich = fopen("texto.txt ", "r")) != (FILE *) NULL)
{
while ((caracter = fgetc(fich)) != EOF)
{
printf("%c", caracter);
}
fclose(fich);
}
else
{
printf("\nEl fichero \"texto.txt\" no puede abrirse.");
}
}
Ejemplo
Funciones de E/S Carcter a Caracter
int fputc (int caracter, FILE *fichero);
Introduce un carcter en el fichero.
int fgetc (FILE *fichero);
Leer un carcter del fichero.
<stdio.h>
Ficheros E/S Carcter a Carcter
#include <stdio.h>
#define CARACTERES 100
void main (void)
{
FILE *fich;
char cadena[CARACTERES];
if((fich = fopen ("texto.txt", "r")) != (FILE *)NULL)
{
while (fgets(cadena, CARACTERES, fich) != (char *)NULL)
{
printf ("%s", cadena);
}
fclose (fich);
}
else
{
printf("\nEl fichero \"texto.txt\" no puede abrirse.");
}
}
Ejemplo
Funciones de E/S de Cadenas de Caracteres
int fputs (char *cadena, FILE *fichero);
Introduce una cardena en el fichero.
char *fgets (char *cadena, int longitud, FILE *fichero);
Lee una cadena de caracteres de un fichero de cmo mximo longitud 1 caracteres.
<stdio.h>
Ficheros E/S en Modo Cadena
#include <stdio.h>
#include <string.h>
#define CARACTERES 100
void main (void)
{
FILE *fich;
char nombre[CARACTERES];
int codigo;
float longitud;
if((fich = fopen("texto.txt", "r")) != (FILE *)NULL)
{
while(fscanf (fich, "%s %d %f", nombre, &codigo, &longitud) != EOF)
{
printf("\n%10s %10d %10.2f", nombre, codigo, longitud);
}
fclose (fich);
}
else
{
printf ("n\El fichero \"texto.txt\" no puede abrirse");
}
}
Ejemplo
Funciones de E/S con Formato
int fprintf (FILE *fichero, char *formato[,arg]);
Escribe los argumentos en el formato especificado en el fichero.
int fscanf (FILE *fichero, char *formato[,arg]);
Lee los argumentos en el formato especificado del fichero.
<stdio.h>
Ficheros E/S en Modo Formateado
#include <stdio.h>
#define CARACTERES 40
struct tspieza
{
char nombre[CARACTERES];
int numero;
float peso;
};
void main (void)
{
struct tspieza pieza;
FILE *fich;
if((fich = fopen("piezas.dat", "rb")) != (FILE *)NULL)
{
while(fread(&pieza, sizeof (struct tspieza), 1, fich) == 1)
{
printf("\nNombre : %s", pieza.nombre);
printf("\nNmero : %d", pieza.numero);
printf("\nPeso : %f", pieza.peso);
}
Ejemplo
Funciones de E/S Utilizando Registros o Bloques
size_t fwrite (void *buffer, size_t tamanio, size_t numero, FILE *fichero);
Escribe un buffer de numero de elementos de un tamao en el fichero.
size_t fread (void *buffer, size_t tamanio, size_t numero, FILE *fichero);
Lee un buffer de numero de elementos de un tamao del fichero.
<stdio.h>
fclose (fich);
}
else
{
printf ( "\nEl fichero piezas.dat no puede abrirse");
}
}
Ficheros E/S en Modo Bloque
Funciones de Acceso Aleatorio a un Fichero
int fseek(FILE *fichero, long offset, int modo);
Posiciona el puntero interno del fichero.
int ftell(FILE *fichero);
Devuelve la posicin relativa respecto del comienzo de fichero mediante un nmero entero.
void rewind(FILE *fichero);
Coloca el puntero de fichero al comienzo del mismo, desactivando errores y fin de fichero.
<stdio.h>
Modo Offset Definicin
0 Desde el comienzo del fichero SEEK_SET
1 Desde la posicin actual SEEK_CUR
2 Desde el final de fichero SEEK_END
#include <stdio.h>
void main (void)
{
FILE *fich;
int posicion;
if((fich = fopen("datos.dat", "rb")) != (FILE *)NULL)
{
fseek(fich, 0L, SEEK_END); // fseek(fich, 0L, 2); Coloca al final de fichero
rewind(fich); // Coloca al principio de fichero
posicion = ftell(fich); // La posicin se cooresponde con el inicio de fichero
fclose (fich);
}
Ejemplo
else
{
printf ("n\El fichero \"datos.dat\" no puede abrirse");
}
}
Ficheros Acceso Aleatorio a un Fichero
#include <stdio.h>
void main(void)
{
char nombre[100];
int entero;
float real;
printf("Dame un nombre un entero y un real\n");
scanf("%s %d %f", nombre, &entero, &real);
printf("Nombre = %s, entero = %d, real = %f\n",
nombre, entero, real);
}
Ejemplo 1 Paso 1
#include <stdio.h>
void main(void)
{
char nombre[100];
int entero;
float real;
FILE *fich;
printf("Dame un nombre un entero y un real\n");
scanf("%s %d %f", nombre, &entero, &real);
fich = fopen("fichero.txt", "wt");
#include <stdio.h>
void main(void)
{
char nombre[100];
int entero;
float real;
FILE *fich;
fich = fopen("fichero.txt", "rt");
if(fich != (FILE *) NULL)
{
fscanf(fich, "%s %d %f", nombre, &entero, &real);
printf("Nombre = %s, entero = %d, real = %f\n",
nombre, entero, real);
fclose(fich);
}
else
{
printf("No se puede abrir fichero\n");
}
}
Ejemplo 1 Paso 3
if(fich != (FILE *) NULL)
{
fprintf(fich, "%s %d %f", nombre, entero, real);
fclose(fich);
}
else
{
printf("No se puede crear fichero\n");
}
}
Ejemplo 1 Paso 2
Ficheros Ejemplo 1
#include <stdio.h>
#define MAXARRAY 100
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void leer_array(struct rgarticulo articulos[], int *longitud);
void mostrar_array(struct rgarticulo articulos[], int longitud);
void leer_registro(struct rgarticulo *articulo);
void mostrar_registro(struct rgarticulo *articulo);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
leer_array(articulos, &longitud);
mostrar_array(articulos, longitud);
}
Declaraciones, Tipos y Programa Principal
Ficheros Ejemplos 2 y 3 Paso 1 (Programa Principal)
Funcin mostrar_array
void leer_array(struct rgarticulo articulos[], int *longitud)
{
char opcion;
do
{
printf("Introducir elemento [s/n]? ");
opcion = getchar();
if(opcion == 'S' || opcion == 's')
{
leer_registro(&articulos[*longitud]);
(*longitud)++;
}
} while (opcion != 'N' && opcion != 'n');
}
Funcin leer_array
void mostrar_array(struct rgarticulo articulos[], int longitud)
{
int i;
for(i = 0; i < longitud; i++)
{
printf("\nRegistro %d\n", i + 1);
mostrar_registro(&articulos[i]);
}
}
Funcin leer_registro
void leer_registro(struct rgarticulo *articulo)
{
struct rgarticulo articulin;
printf("Nombre : ");
scanf("%s", articulin.nombre);
printf("Unidades : ");
scanf("%d", &articulin.unidades);
printf("Precio : ");
scanf("%f", &articulin.precio);
*articulo = articulin;
}
Funcin mostrar_registro
void mostrar_registro(struct rgarticulo *articulo)
{
printf("Nombre : %s\n", articulo->nombre);
printf("Unidades : %d\n", articulo->unidades);
printf("Precio : %f\n", articulo->precio);
}
Ficheros Ejemplos 2 y 3 (Funciones varias)
Funcin array_fichero
#include <stdio.h>
#define MAXARRAY 100
#define NOMFICH "Articuls.txt"
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void leer_array(struct rgarticulo articulos[],
int *longitud);
void leer_registro(struct rgarticulo *articulo);
void array_fichero(char *nomfich,
struct rgarticulo articulos[],
int longitud);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
leer_array(articulos, &longitud);
array_fichero(NOMFICH, articulos, longitud);
}
void array_fichero(char *nomfich,
struct rgarticulo articulos[],
int longitud)
{
int i;
FILE *fich;
if((fich = fopen(nomfich, "wt")) != (FILE *) NULL)
{
for(i = 0; i < longitud; i++)
{
fprintf(fich, "%s %d %f\n",
articulos[i].nombre,
articulos[i].unidades,
articulos[i].precio);
}
fclose(fich);
}
else
{
printf("No se ha podido crear el fichero %s\n",
nomfich);
}
}
Declaraciones, Tipos
y Programa Principal
Ficheros Ejemplo 2 Paso 2 (E/S Modo Formateado)
Funcin fichero_array
#include <stdio.h>
#define MAXARRAY 100
#define NOMFICH "Articuls.txt"
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void mostrar_array(struct rgarticulo articulos[],
int longitud);
void mostrar_registro(struct rgarticulo *articulo);
void fichero_array(char *nomfich,
struct rgarticulo articulos[],
int *longitud);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
fichero_array(NOMFICH, articulos, &longitud);
mostrar_array(articulos, longitud);
}
void fichero_array(char *nomfich,
struct rgarticulo articulos[],
int *longitud)
{
struct rgarticulo articulin;
FILE *fich;
*longitud = 0;
if((fich = fopen(nomfich, "rt")) != (FILE *) NULL)
{
while(fscanf(fich, "%s %d %f",
articulin.nombre,
&articulin.unidades,
&articulin.precio) != EOF)
{
articulos[*longitud] = articulin;
(*longitud)++;
}
fclose(fich);
}
else
{
printf("No se ha podido abrir el fichero %s\n",
nomfich);
}
}
Declaraciones, Tipos
y Programa Principal
Ficheros Ejemplo 2 Paso 3 (E/S Modo Formateado)
#include <stdio.h>
#define MAXARRAY 100
#define NOMFICH1 "Articuls.txt"
#define NOMFICH2 "Articul2.txt"
#define PTSEURO 166.386
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void mostrar_array(struct rgarticulo articulos[],
int longitud);
void mostrar_registro(struct rgarticulo *articulo);
void transformar_array(struct rgarticulo articulos[],
int longitud);
void array_fichero(char *nomfich,
struct rgarticulo articulos[],
int longitud);
void fichero_array(char *nomfich,
struct rgarticulo articulos[],
int *longitud);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
fichero_array(NOMFICH1, articulos, &longitud);
transformar_array(articulos, longitud);
mostrar_array(articulos, longitud);
array_fichero(NOMFICH2, articulos, longitud);
}
Declaraciones, Tipos
y Programa Principal
Funcin transformar_array
void transformar_array(struct rgarticulo articulos[],
int longitud)
{
int i;
for(i = 0; i < longitud; i++)
{
articulos[i].precio = articulos[i].precio / PTSEURO;
}
}
Ficheros Ejemplo 2 Paso 4 (E/S Modo Formateado)
Funcin array_fichero
#include <stdio.h>
#define MAXARRAY 100
#define NOMFICH "Articuls.dat"
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void leer_array(struct rgarticulo articulos[],
int *longitud);
void leer_registro(struct rgarticulo *articulo);
void array_fichero(char *nomfich,
struct rgarticulo articulos[],
int longitud);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
leer_array(articulos, &longitud);
array_fichero(NOMFICH, articulos, longitud);
}
void array_fichero(char *nomfich,
struct rgarticulo articulos[],
int longitud)
{
int i;
FILE *fich;
if((fich = fopen(nomfich, "wb")) != (FILE *) NULL)
{
for(i = 0; i < longitud; i++)
{
fwrite(&articulos[i],
sizeof(struct rgarticulo),
1,
fich);
}
fclose(fich);
}
else
{
printf("No se ha podido crear el fichero %s\n",
nomfich);
}
}
Declaraciones, Tipos
y Programa Principal
Ficheros Ejemplo 3 Paso 2 (E/S Modo Bloque)
Funcin fichero_array
#include <stdio.h>
#define MAXARRAY 100
#define NOMFICH "Articuls.dat"
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void mostrar_array(struct rgarticulo articulos[],
int longitud);
void mostrar_registro(struct rgarticulo *articulo);
void fichero_array(char *nomfich,
struct rgarticulo articulos[],
int *longitud);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
fichero_array(NOMFICH, articulos, &longitud);
mostrar_array(articulos, longitud);
}
void fichero_array(char *nomfich,
struct rgarticulo articulos[],
int *longitud)
{
FILE *fich;
*longitud = 0;
if((fich = fopen(nomfich, "rb")) != (FILE *) NULL)
{
while(fread(&articulos[*longitud],
sizeof(struct rgarticulo),
1,
fich) == 1)
{
(*longitud)++;
}
fclose(fich);
}
else
{
printf("No se ha podido abrir el fichero %s\n",
nomfich);
}
}
Declaraciones, Tipos
y Programa Principal
Ficheros Ejemplo 3 Paso 3 (E/S Modo Bloque)
#include <stdio.h>
#define MAXARRAY 100
#define NOMFICH1 "Articuls.dat"
#define NOMFICH2 "Articul2.dat"
#define PTSEURO 166.386
struct rgarticulo
{
char nombre[100];
int unidades;
float precio;
};
void mostrar_array(struct rgarticulo articulos[],
int longitud);
void mostrar_registro(struct rgarticulo *articulo);
void transformar_array(struct rgarticulo articulos[],
int longitud);
void array_fichero(char *nomfich,
struct rgarticulo articulos[],
int longitud);
void fichero_array(char *nomfich,
struct rgarticulo articulos[],
int *longitud);
void main(void)
{
struct rgarticulo articulos[MAXARRAY];
int longitud = 0;
fichero_array(NOMFICH1, articulos, &longitud);
transformar_array(articulos, longitud);
mostrar_array(articulos, longitud);
array_fichero(NOMFICH2, articulos, longitud);
}
Declaraciones, Tipos
y Programa Principal
Funcin transformar_array
void transformar_array(struct rgarticulo articulos[],
int longitud)
{
int i;
for(i = 0; i < longitud; i++)
{
articulos[i].precio = articulos[i].precio / PTSEURO;
}
}
Ficheros Ejemplo 3 Paso 4 (E/S Modo Bloque)
#include <stdio.h>
#include <string.h>
#define MAXARRAY 100
struct rgtemp
{
char hora[5];
float temp;
};
Declaraciones, Tipos
y Programa Principal
void fichero_array(char *nomfich, struct rgtemp argtemp[], int *tamanio);
void array_fichero(char *nomfich, struct rgtemp argtemp[], int tamanio);
int existe_fichero(char *nomfich);
void modificacion(float valor, struct rgtemp argtemp[], int tamanio);
void main(void)
{
char nomfichdat[20], nomfichmod[20];
char dia[10], mes[10], anio[10];
struct rgtemp argtemp[MAXARRAY];
int tamanio;
float valor;
printf("Introduzca el da, mes y ao a tratar: ");
scanf("%s %s %s", dia, mes, anio);
strcat(strcat(strcat(strcpy(nomfichdat, dia), mes), anio), ".DAT");
if(existe_fichero(nomfichdat))
{
printf("Encontrado fichero %s\n", nomfichdat);
printf("Introduzca el tanto por ciento a aplicar: ");
scanf("%f", &valor);
printf("Procesando informacin...\n");
fichero_array(nomfichdat, argtemp, &tamanio);
modificacion(valor, argtemp, tamanio);
strcat(strcat(strcat(strcpy(nomfichmod, dia), mes), anio), ".MOD");
array_fichero(nomfichmod, argtemp, tamanio);
printf("Generado fichero %s\n", nomfichdat);
}
else
{
printf("No existe el fichero %s\n", nomfichdat);
}
}
Examen Febrero 2001 1/2
Funcin existe_fichero
void fichero_array(char *nomfich, struct rgtemp argtemp[],
int *tamanio)
{
FILE *fich;
struct rgtemp registro;
*tamanio = 0;
if((fich = fopen(nomfich, "r")) != (FILE *) NULL)
{
while(fscanf(fich, "%s %f", registro.hora,
&registro.temp) != EOF)
{
argtemp[*tamanio] = registro;
(*tamanio)++;
}
fclose(fich);
}
}
Funcin fichero_array
int existe_fichero(char *nomfich)
{
FILE *fich;
int out = 0;
if((fich = fopen(nomfich, "r")) != (FILE *) NULL)
{
out = 1;
fclose(fich);
}
return out;
}
Funcin array_fichero
void array_fichero(char *nomfich,
struct rgtemp argtemp[],
int tamanio)
{
FILE *fich;
int i;
if((fich = fopen(nomfich, "w")) != (FILE *) NULL)
{
for(i = 0; i < tamanio; i++)
{
fprintf(fich, "%s %g\n",
argtemp[i].hora,
argtemp[i].temp);
}
fclose(fich);
}
}
Funcin modificacin
void modificacion(float valor,
struct rgtemp argtemp[], int tamanio)
{
int i;
for(i = 0; i < tamanio; i++)
{
if(strcmp(argtemp[i].hora, "1800") >= 0 &&
strcmp(argtemp[i].hora, "2000") <= 0)
{
argtemp[i].temp *= (1.0 + (valor / 100.0));
}
}
}
Examen Febrero 2001 2/2
#include <stdio.h>
#include <string.h>
#define MAXARRAY 500
struct rgtemp
{
int deposito;
char hora[5];
float temp;
};
Declaraciones, Tipos
y Programa Principal
void fichero_array(char *nomfich, struct rgtemp argtemp[], int *tamanio);
int existe_fichero(char *nomfich);
float media(int deposito, struct rgtemp argtemp[], int tamanio);
void main(void)
{
char nomfichdat[20];
char dia[10], mes[10], anio[10];
struct rgtemp argtemp[MAXARRAY];
int tamanio, deposito;
printf("Introduzca el da, mes y ao a tratar: ");
scanf("%s %s %s", dia, mes, anio);
strcat(strcat(strcat(strcpy(nomfichdat, dia), mes), anio), ".DAT");
if(existe_fichero(nomfichdat))
{
printf("Encontrado fichero %s\n", nomfichdat);
printf("Introduzca el nmero de depsito: ");
scanf("%d", &deposito);
fichero_array(nomfichdat, argtemp, &tamanio);
printf("La temperatura media de depsito %d es: %.3f\n",
deposito,
media(deposito, argtemp, tamanio));
}
else
{
printf("No existe el fichero %s\n", nomfichdat);
}
}
Examen Septiembre 2001 1/2
void fichero_array(char *nomfich,
struct rgtemp argtemp[],
int *tamanio)
{
FILE *fich;
struct rgtemp registro;
*tamanio = 0;
if((fich = fopen(nomfich, "r")) != (FILE *) NULL)
{
while(fscanf(fich, "%d %s %f",
&registro.deposito,
registro.hora,
&registro.temp) != EOF)
{
argtemp[*tamanio] = registro;
(*tamanio)++;
}
fclose(fich);
}
}
Funcin fichero_array
Funcin media
float media(int deposito,
struct rgtemp argtemp[],
int tamanio)
{
int i, nummed;
float suma, media, out;
nummed = 0;
suma = 0.0;
out = 0.0;
for(i = 0; i < tamanio; i++)
{
if(argtemp[i].deposito == deposito)
{
suma += argtemp[i].temp;
nummed++;
}
}
if(nummed > 0)
{
out = suma / nummed;
}
return out;
}
Funcin existe_fichero
int existe_fichero(char *nomfich)
{
FILE *fich;
int out = 0;
if((fich = fopen(nomfich, "r")) != (FILE *) NULL)
{
out = 1;
fclose(fich);
}
return out;
}
Examen Septiembre 2001 2/2


Ejercicios programacin en C

Laboratorio de Sistemas
Informticos



Curso 2003-2004
Isidro Calvo Gordillo

Ejercicios programacin en C - Variables y operadores bsicos


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU



1. Programa que pida un valor en pesetas y lo convierta en euros y otro programa que lleve a cabo la
operacin inversa. (Nota 1 euro = 166.386 pts)
Nota: La solucin en euros deber tener 3 decimales.

2. Pedir un carcter por teclado y mostrar un mensaje que muestre el carcter introducido as como su
cdigo ASCII tanto en formato decimal como hexadecimal.

3. Programa que pida la temperatura en grados Celsius y la convierta a grados Fahrenheit (y viceversa)
mostrando en pantalla un mensaje del tipo xxx.xx grados Celsius son yyy.yy grados Fahrenheit

4. Crear un programa que pida el radio de una circunferencia y que calcule la longitud de la misma as
como el rea incluida dentro.

5. Crear un programa que calcule la fuerza de atraccin gravitacional entre dos masas, M1 y M2
situadas a una distancia R.
donde las masas se expresan en kilogramos y la distancia en metros y la constante de gravitacin
universal vale:

Nota: Utilizar #define para definir la constante G.

6. Escribir un programa que pregunte el ao actual y la edad de una persona y calcule la edad de esa
persona en el ao 2010.

7. Escribir un programa que calcule el nmero de billetes de 10.000, 5.000, 1,000, as como de monedas
de 500, 100, 25, 5 y 1 pesetas para desglosar una cantidad, C, de pesetas (menor de 2.147.483.647),
de forma que se necesite la menor cantidad de monedas y billetes de cada tipo.

8. Crear un programa que pida un numero real y muestre la tabla de multiplicar correspondiente a dicho
nmero de tal manera que tanto los valores de los factores como del producto se presenten
encolumnados y con una precisin de 2 dgitos.

Ejemplo:

Programa que muestra la tabla de multiplicar de un nmero
Escribe un nmero: 5 (Valor introducido por el usuario)

TABLA DE MULTIPLICAR DEL NUMERO 5.00

5.00 * 1 = 5.00
5.00 * 2 = 10.00
...
5.00 * 10 = 50.00

9. Mostrar en forma de tabla, el cuadrado y el cubo de los 5 primeros nmeros enteros que siguen a uno
introducido por teclado.

Los datos deben aparecer ajustados a la derecha siguiendo el siguiente formato:


Numero Cuadrado Cubo
5 9
32 C F
=

) (
2 * 1
2
Nw
R
M M
G F =
2 2 11
/ * 10 67 . 6 Kg m Nw x G

=
Variables y operadores bsicos
Ejercicios programacin en C - Variables y operadores bsicos


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
------ -------- ----
xxx xxxx xxxxxx

Nota: Ejecutar el programa utilizando variables de tipo int e introduciendo el nmero base 30 y
utilizando variables de tipo unsigned int e introduciendo el nmero base 40. Qu sucede? Cmo se
puede explicar lo que sucede?

10. Crear un programa que muestre en pantalla el tamao en bytes (8 caracteres) de las variables ms
frecuentes: char, int, short int, long int, float y double.
(Nota: Para calcular el tamao de una variable se puede usar el operador sizeof.)

11. Escribir un programa que tras preguntar el nmero de almacn asociado a un determinado tipo de
pieza, la cantidad pedida de esa pieza y el precio por unidad, efecte el clculo del precio total de
las piezas pedidas. El programa deber escribir toda la informacin de la pieza en la pantalla, adems
del importe total del pedido.

12. Escribir un programa que lea el valor de un ngulo en radianes y muestre su valor en grados, minutos y
segundos

13. Programa que tras pedir por teclado un nmero lo multiplique por 4 y divida por 2 utilizando los
operadores de rotacin.










Ejercicios de programacin en C - Sentencias condicionales


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU




1. Ejecutar el siguiente cdigo fuente (Declarando valor_logico como entero y luego declarndolo como
float):

printf(Valores logicos de las siguientes expresiones\n);
valor_logico=(3>5);
printf((3 > 5) es %d\n, valor_logico);
valor_logico=(5 > 3);
printf((5 > 3) es %d\n, valor_logico);
valor_logico=(15 > 3*5);
printf((15 > 3*5) es %d\n, valor_logico);
valor_logico=!(5 == 3);
printf(!(5 == 3) es %d\n, valor_logico);

Nota: No confundir el operador == de comparacin (para comprobar si dos valores son iguales)
con el operador = de asignacin que escribe un valor en una variable.

2. Escribir un programa que tras pedir 2 nmeros por la pantalla muestra cul es el mayor nmero.
(Hgase con la sentencia if y con el operador condicional expresion?valor1:valor2 )

3. Leer tres nmeros enteros y, si el primero de ellos es negativo, calcular el producto de los tres, en
caso contrario calcular la suma de ellos.

4. Crear un programa que calcule la cada de potencial producida por una resistencia segn la ley de
Ohm (V=I*R) a partir de la resistencia y la intensidad que pasa a su travs.

Nota: El programa no debe aceptar resistencias negativas, dado que no tienen sentido fsico, ni
resistencias mayores que 1000 (requerimiento adicional del problema). En ambos casos el
programa debe escribir un mensaje de error en pantalla diciendo que el valor de la resistencia est
fuera de lmites aceptables indicando la causa por la que dicho valor para la resistencia ha sido
rechazado.

5. Sea un sistema de ecuaciones de la forma:
que puede resolverse usando las siguientes frmulas:
Escribir un programa que lea los coeficientes (a, b, c, d, e, f) y resuelva el sistema. El programa
deber indicar los casos en los que el sistema de ecuaciones no tenga solucin.

6. Escribir un programa que calcule las races, bien reales o imaginarias, de una ecuacin de segundo
grado. El programa tambin debe ser capaz de operar con valores nulos para el coeficiente de orden
dos (Es decir deber de ser capaz de resolver ecuaciones de primer grado)

En otras palabras, dada la ecuacin ax
2
+ bx + c=0 obtener x
1
, x
2
de forma que:

Si a=0 Ec. 1
er
grado Raz nica.
Si b
2
-4ac=0 2 races reales iguales
Si b
2
-4ac > 0 2 races reales distintas
Si b
2
-4ac < 0 2 races complejas conjugadas




7. Dada la funcin U=f(x,y) tal que:
f ey dx
c by ax
= +
= +
bd ae
bf ce
x

=
bd ae
cd af
y

=
Sentencias condicionales
Ejercicios de programacin en C - Sentencias condicionales


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
10 si x*y < 1

y
2
si x*y 1

y dada la funcin V=f(x,y) tal que:

1 si x*y < 1

y
2
si x*y 1

Escribir un programa que calcule los valores de las funciones U y V, una vez conocidas las
coordenadas de un punto (x,y).

8. Escribir un programa que pida un ao y diga si es bisiesto o no.

Nota: Un ao es bisiesto si es mltiplo de 4 salvo el caso en que sea mltiplo de 100, que no es
bisiesto, y no sea mltiplo de 400. Por ejemplo, el ao 1900 no fue bisiesto, el 2000 s y el 2100 no lo
es.

9. La fecha del Domingo de Pascua est relacionada con el calendario judo que es lunar. Para obtener
en nuestro calendario cul sera el correspondiente fecha se puede utilizar el siguiente algoritmo a
partir del ao para el que se quiere calcular la fecha.

Sea X el ao para el que se quiere calcular la fecha.

Sea A el resto de la divisin de X entre 19
Sea B el resto de la divisin de X entre 4
Sea C el resto de la divisin de X entre 7
Sea D el resto de la divisin de (19*A+24) entre 30
Sea E el resto de la divisin de (2*B+4*C+6*D+5) entre 7

La fecha para el Domingo de Pascua es el da (22+D+E) de Marzo (obsrvese que puede dar una
fecha en Abril)

Escribir un programa que pida como entrada un ao y saque por pantalla la fecha del Domingo de
Pascua para ese ao.

10. Leer desde el teclado las coordenadas (x, y) de un punto y, mediante un men, elegir una entre las
siguientes opciones:

Comprobar si el punto pertenece a una circunferencia de radio 10 y centro (0,0)
Averiguar el cuadrante en el que se encuentra el punto.
Pasar las coordenadas cartesianas (x,y) a polares (r, arg).
Salir








11. Escribir un programa que permita efectuar el clculo del rea de un cuadrado, un crculo o un
tringulo equiltero segn la opcin seleccionada por el usuario.

Crear una primera versin con la estructura de control if ... else
Y una segunda versin con la estructura de control switch... case...

12. Escribir un programa que permita efectuar el clculo del rea de un cuadrado, un crculo o un
tringulo equiltero segn la opcin seleccionada por el usuario a travs de un men.
X
r
arg
y
Ejercicios de programacin en C - Sentencias condicionales


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU

13. Dada la longitud de una circunferencia, averiguar si dicha longitud corresponde, con una determinada
precisin, a una circunferencia de radio R.

El programa deber leer la longitud de la circunferencia, el radio y la precisin e indicar si es cierto
o no que esa circunferencia tiene ese valor del radio.

14. Escribir un programa que pida dos caracteres por pantalla, los ordene alfabticamente, y los imprima
ordenados.
Ejercicios de programacin en C - Sentencias Repetitivas


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU




1. Escribir un programa que escriba los nmeros del 1 al 100 en lneas de 10 nmeros. Despus de
100 el programa debe escribir Fin del programa en una lnea nueva.

2. Programa que calcule el valor de elevar un nmero real, a, a un exponente entero, b, a
b
,
multiplicando b veces el nmero a.

Nota: Mejorar el programa para que compruebe que el exponente es mayor que 0 y si no lo es
dar un mensaje de error y pedir otro exponente.

3. Programa que calcule el factorial (n!) de un numero entero positivo ledo por teclado.

Nota: Probar el programa con los nmeros 6, 7, 8, 9... Qu pasa a medida que se va
aumentando el nmero? Por qu?

4. Crear un programa que pida un numero real y muestre la tabla de multiplicar correspondiente a
dicho nmero de manera que tanto los valores de los factores como del producto se presenten
encolumnados y con una precisin de 2 dgitos.

Ejemplo:

Programa que muestra la tabla de multiplicar de un nmero
Escribe un nmero: 5 (Valor introducido por el usuario)

TABLA DE MULTIPLICAR DEL NUMERO 5.00
5.00 * 1 = 5.00
...
5.00 * 10 = 50.00

5. Escribir un programa que calcule el sumatorio:
donde S es un nmero entero positivo introducido por teclado.

Solucin: El lmite de esa expresin cuando S tiende a infinito es: -0.822467.

6. Programa que escriba en pantalla una tabla con cuadrados y cubos a partir de un nmero base
hasta otro tope, ambos pedidos por teclado.

Nota: El programa deber evitar problemas de overflow.

La tabla debe seguir el siguiente formato:

Nmero Cuadrado Cubo
------ -------- ----
xx xxx xxxx

7. Escribir un programa que ayude a aprender las tablas de multiplicar.

Para ello se ir pidiendo la tabla de multiplicar de un nmero (pedido por teclado con
anterioridad) y comprobando que los valores introducidos son correctos. Si es as el programa
escribir correcto y en caso contrario deber escribir Lo siento, se ha equivocado. La
respuesta correcta era nmero

La ltima lnea mostrar el nmero de aciertos.

A continuacin se muestra un ejemplo de ejecucin:

Programa para aprender las tablas de multiplicar
2
1
1
* ) 1 (
i
S
i
i

=

Sentencias repetitivas
Ejercicios de programacin en C - Sentencias Repetitivas


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU

Con qu nmero quieres practicar? 5 (Introducido por el usuario)

5 * 1 = 5 (Introducido por el usuario)
Valor correcto
5 * 2 = 11 (Introducido por el usuario)
Lo siento se ha equivocado. La respuesta correcta era 10
...
Has acertado 9 veces de 10 nmeros.

8. Hacer un programa que lea caracteres desde teclado hasta que lea 10 veces la letra 'a'. Por cada
carcter ledo que no sea una 'a' debe mostrar un mensaje indicndolo. Cuando lea las 10 letras 'a' el
programa terminar.

9. Hacer un programa que lea caracteres desde teclado y vaya contando las vocales que aparecen. El
programa terminar cuando lea el carcter # y entonces mostrar un mensaje indicando cuntas
vocales ha ledo (cuntas de cada una de ellas).

10. Repetir el ejercicio leyendo caracteres hasta que se lea el carcter final de fichero EOF (^Z) en
lugar del carcter #.

11. Programa que simule que se deja caer una pelota desde un edificio de X metros de altura (donde
X se pide por teclado) mostrando en cada 0.1 segundos tanto la altura de la pelota como su
velocidad.

Mostrar para cada instante de tiempo (cada 0.1 segundos) una lnea del estilo:

t=xx.x distancia al suelo=xx.xxx metros velocidad=xx.xxx m/s

12. Programa que calcule los ns primos del 1 al 100 y los saque por pantalla.

13. Escribir un programa que primero pida por pantalla con cuntos nmeros se va a trabajar
digamos que sean X) y luego pida los X nmeros por pantalla.

Despus de introducir los X nmeros se mostrar un mensaje por pantalla indicando cul es el
mayor y menor valor introducido, as como el valor medio de todos los nmeros introducidos.

14. Programa que pida nmeros de cuatro cifras e indique si los nmeros son capicas o no. El
programa deber ir pidiendo nmeros hasta que el usuario introduce -1 por teclado. El nmero
1 indicar la finalizacin de la ejecucin del programa.

Nota1: Un nmero capica es simtrico p.e. 1221 25752
Nota2: Cuando el nmero no es de cuatro cifras se deber mostrar un mensaje de error por
pantalla y se pedir otro nmero menor que 10000. En caso de que el nmero sea menor de
cuatro cifras se completar con ceros a la izquierda.
Nota3: El nico nmero negativo que se aceptar es -1 que indicar la finalizacin del
programa. Cualquier otro nmero negativo, se mostrar un mensaje de error.

15. Escribir un programa que calcule los nmeros perfectos entre 1 y 10000.

Nota: Un nmero perfecto es aqul tal que la suma de sus divisores menos el propio nmero es
el propio nmero.
Ej.: 6 Divisores(6)={1,2,3,6} Suma = 1+2+3+6 6 = 6 N. Perfecto
10 Divisores(10)={1,2,5,10} Suma = 1+2+5+10 10 10 N. no
perfecto
Solucin: 6, 28, 496, 8128



16. Escribir un programa que muestre el siguiente men y que permita pasar magnitudes de grados a
radianes y de radianes a grados.

1. Pasar de grados a radianes
Ejercicios de programacin en C - Sentencias Repetitivas


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU

2. Pasar de radianes a grados
3. Salir del programa

17. Escribir un programa que muestre una tabla con los caracteres ASCII mostrados en decimal,
octal y hexadecimal. El programa mostrar la informacin con el siguiente formato:

Dec: xx Octal: xx Hex: xx Car: x

El programa pedir el primer y ltimos caracteres que marcarn los lmites de la tabla.


Ejercicios programacin en C - Funciones


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU




1. Escribir un programa que permita convertir grados Fahrenheit a Celsius y grados Celsius a
Fahrenheit.
El programa presentar el siguiente men:

1. Conversin de Celsius a Fahrenheit
2. Conversin de Fahrenheit a Celsius
0. Salir del programa.

Nota: Cada conversin se efectuar por medio de funciones, una que convertir de grados Celsius a
grados Fahrenheit y otra que haga justo lo contrario.

2. Realizar un programa que escriba todos los nmeros enteros menores que un cierto entero N y que a
su vez sean mltiplos de dos nmeros enteros A y B introducidos por teclado.

Utilizar para ello una funcin que admita dos parmetros I, J e indique si I es mltiplo de J.

Ej: N=25, A=2, B=3 => 0,6,12,18,24

3. Escribir una funcin (con su correspondiente programa de prueba) que tome un valor entero y
devuelva el nmero con sus dgitos en reversa. Por ejemplo, dado el nmero 7631 la funcin deber
devolver 1367.

4. Escribir un programa que calcule masa radioactiva de carbono 14 que queda despus de t aos. La
frmula que determina la masa restante en el tiempo t es:
donde:
t es el tiempo en aos
M
t
es la masa que permanece en el tiempo t
m es la masa original
h es la vida media en aos

Para el carbono 14 la vida media es de 5700 aos; si la masa original es de 300 gramos, imprimir una
tabla de la masa para t=500, 1000, 1500, 2000, ..., 10000 aos.

Se deber utilizar un subprograma que permita evaluar la expresin (
1
/
2
)
t/h
para los diferentes valores
de t.
Nota: En TurboC existe la funcin double pow(double x, double y) que devuelve el valor x
y
.

5. Escribir una funcin que escriba tantas lneas en blanco como se haya pedido con anterioridad al
usuario en el programa principal.

6. Escribir una funcin que tome el tiempo introducido por el usuario en el formato
(horas:minutos:segundos) y lo convierta en segundos. El programa utilizar esta funcin para
calcular la diferencia en segundos entre dos tiempos introducidos por el usuario.

7. Escribir un programa que calcule el nmero combinatorio

Utilizar para ello una funcin que calcule el factorial de un nmero.

Nota: La funcin para calcular el factorial de un nmero puede ser iterativa o recursiva. (Una
funcin recursiva es una funcin que se llama a s misma)
h
t
t
m M

=
2
1
*
)! ( !
!
N M N
M
N
M

Funciones
Ejercicios programacin en C - Funciones


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU


8. Escribir una funcin que calcule el factorial de un nmero y utilizar sta en un programa que muestre
el siguiente men.
1. Factorial de un nmero
2. Clculo de e
3. Clculo de e^x
0. Salir
Nota 1: El clculo de e debe hacerse con la siguiente expresin matemtica:
...
! 3
1
! 2
1
! 1
1
1 + + + + = e
Sol: e=2.718282
Nota 2: En un entorno de 1
x
e puede calcularse mediante la frmula:
...
! 3 ! 2 ! 1
1
3 2
+ + + + =
x x x
e
x


9. El desarrollo en serie de Taylor de la funcin coseno entorno al 0 es:
...
! 6
6
! 4
4
! 2
2
1 ) ( cos + + =
x x x
x
donde el ngulo x viene expresado en radianes.

Escribir un programa que calcule el valor aproximado de coseno (x), utilizando para ello los N
primeros trminos de la serie de Taylor. El nmero de trminos N de la serie depender del valor del
ltimo, es decir, se aadirn trminos a la serie hasta que el valor absoluto del ltimo trmino
aadido sea menor que 0.0005.

Obtener el coseno de 10 radianes? Comprese con el valor obtenido con la calculadora. Qu
sucede?

10. Se desea realizar un programa que permita hacer clculos con polinomios de segundo grado.

El programa deber presentar un men en pantalla que facilite las siguientes opciones:

1. Leer un polinomio
2. Escribir un polinomio en su forma habitual
3. Evaluar un polinomio en un punto
4. Calcular el polinomio derivado
0. Salir

Se debern utilizar los siguientes subprogramas:

LEER mediante este subprograma se introducen los nmeros enteros que representan los
coeficientes del polinomio.
ESCRIBIR es un subprograma que permite la escritura de un polinomio en la forma Ax^2
+ Bx + C
Ejemplos vlidos: 5x^2+3x+5 5x^2-3x+5 5x^2-5
ejemplos no vlidos: 5x^2+ -3x+5 5x^2-0x+5
EVALUAR es un subprograma que retorna el valor de un polinomio para un nmero real que
es introducido como parmetro.
DERIVAR es un subprograma que calcula el polinomio derivada de uno dado.

Nota: No est permitido el uso de variables globales.

11. Escribir un programa que realice la descomposicin en factores primos de un nmero introducido por
teclado.

El programa deber ir escribiendo la tabla de los factores primos, a medida que los va calculando, tal
como muestra el ejemplo siguiente:
Ejercicios programacin en C - Funciones


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU


Introduce un N entero -> 84

N | Factores primos
-- | ---------------
84 | 2
42 | 2
21 | 3
7 | 7
1 |
Ayuda: Se deber utilizar una funcin que nos diga si un nmero es primo o no.

12. Escribir un programa que cuente de un texto introducido por teclado:

N. de caracteres en blanco
N. de dgitos
N. de letras
N. de lneas
N. de otras cosas

Nota 1: Se deben crear sendas funciones para comprobar si un carcter es numrico o alfanumrico.
Nota 2: La funcin getchar() permite leer un carcter de teclado.
Nota 3: Para marcar el final de lectura del texto, el usuario deber introducir un carcter que marque
fin de fichero. Este carcter es ^D en Linux y ^Z en DOS / Windows.


Ejercicios programacin en C Arrays unidimensionales / multidimensionales


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU


1. Escribir un programa que calcule el producto escalar de dos vectores de 3 elementos cuyos valores se
introducen por pantalla con el programa principal.

2. Escribir un programa que calcule el producto vectorial de dos vectores de 3 elementos cuyos valores
se introducen por pantalla con el programa principal.

3. Realizar un programa que lea 20 nmeros y muestre aquel o aquellos que hayan aparecido ms veces.

4. Escribir un programa que emplee un argumento de la lnea de comandos para realizar una conversin
decimal a hexadecimal; es decir, el nmero decimal se introducir en la lnea de comandos, siguiendo
al nombre del programa.

Ej:
C:> decihex 128 111
Deci= 128 Hex= 80
Deci= 111 Hex= 6F
C:>

Nota 1: Al igual que en el ejemplo, el programa deber ser capaz de convertir varios nmeros en una
llamada.
Nota 2: En caso de que el programa no reciba argumentos deber devolver un mensaje de error.
Nota 3: La funcin atoi() convierte de cadenas a enteros.

5. Escribir un programa que pida un array de caracteres por pantalla e invierta el orden de los caracteres
mostrndolo por pantalla. La inversin se har sin utilizar otro array auxiliar.

6. Escribir un programa que calcule los nmeros primos de 0 a 100 utilizando el llamado mtodo de la
criba de Eratstenes. Este mtodo consiste en definir e inicializar con todos sus elementos a True un
array de 100 elementos binarios e ir tachando (pasando a False) en pasadas sucesivas todos los
mltiplos de los nmeros primos (2, 3, 5, 7...) hasta obtener slo los nmeros primos. Es decir:




En el ejemplo en gris claro se sealan los mltiplos de 2, mientras que en gris oscuro los mltiplos de
3 (que no son mltiplos de 2).

Nota: Aumentar el lmite superior y comparar la velocidad de ejecucin con el programa de
Sentencias Repetitivas.

7. Realizar un programa que maneje un array de enteros a travs de un men con seis opciones:

1.- Aadir un elemento al array (comprobando que el array no est lleno)
2.- Eliminar un elemento del array (comprobando que el array no est vaco)
3.- Listar el contenido del array
4.- Contar las apariciones de un nmero en el array
5.- Calcular la media y el mximo de los elementos del array
0.- Terminar

8. Escribir un programa que permita guardar las cuentas de un banco con sus respectivos saldos. Para
ello se guardar la informacin en un array paralelo (dos arrays unidimensionales, uno con los
nmeros de cuenta y otro los saldos)

El programa deber mantener las cuentas ordenadas, de menor a mayor, por nmero de cuenta para
facilitar la bsqueda de una cuenta.

El programa mostrar un men con las siguientes opciones:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ...
Arrays
Ejercicios programacin en C Arrays unidimensionales / multidimensionales


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU

1.- Dar de alta una nueva cuenta (comprobando que el array no est lleno y colocando la cuenta en la
posicin correspondiente dentro del array)
2.- Eliminar una cuenta (comprobando que el array no est vaco y reposicionando las cuentas en el
array)
3.- Mostrar una cuenta (mostrar el nmero de cuenta y el saldo correspondiente)
4.- Mostrar informacin (Nmero de cuentas dadas de alta y dinero total de todas ellas)
5.- Calcular el saldo medio, mximo y mnimo de las cuentas del array.
6.- Mostrar todas las cuentas (1 lnea por cuenta).
0.- Terminar

9. Escribir un programa que rellene automticamente una matriz 4x7 con la suma de sus ndices (Es
decir, el elemento a
11
= 1+1=2, a
47
= 4+7=11). El programa mostrar la matriz resultante por pantalla.

10. Escribir un programa que pida una matriz de orden 3x3 y calcule y muestre por pantalla su matriz
transpuesta.

11. Crear un programa que permita reservar asientos de una sala de cine (8 filas x 20 columnas). La
posicin de cada asiento se definir con una letra (A-H) para la fila y un nmero (1-20) para la
columna. El programa deber visualizar qu sitios estn disponibles para que el cliente pueda decidir
dnde sentarse. Antes de hacer la reserva, el programa deber comprobar que el asiento est libre, en
caso contrario devolver un mensaje de error.

Ej. de visualizacin:

1...5....0 1...5....0
_______________________

A ** A
B **** *** B
C ** **** ** **** C
D *** * ** *** ** *** D
E ***** **** ** ** E
F ******** *** * ** F
G ** **** **** ** G
H ******* *** H

1...5....0 1...5....0

12. Un histograma es un grfico que muestra la frecuencia con que aparecen en una array dado valores
dentro de subintervalos especificados de su intervalo. Por ejemplo, si un array unidimensional de
enteros tiene elementos de tipo 0..9 y contiene los siguientes valores:


6 4 4 1 9 7 5 6 4 2 3 9 5 6 4

Su histograma sera:

4 *
Frecuencia 3 * *
2 * * * *
1 * * * * * * * *
Valor 0 1 2 3 4 5 6 7 8 9

Esto indica que los valores 0 y 8 no aparecen en el array, los valores 1, 2, 3 y 7 aparecen una vez, el
valor 5 aparece dos veces, el valor 6 tres veces y el valor 4 aparece 4 veces.

Escribir un programa que, tras leer las notas de los alumnos en una asignatura, genere y visualice el
histograma de las notas redondeadas a valores enteros: 0, 1, 2,...10

Ejercicios programacin en C Arrays unidimensionales / multidimensionales


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
Las notas ledas desde el teclado son valores de tipo real y el nmero de alumnos no es fijo aunque
siempre es menor de 300.

Nota: Para la realizacin del histograma se tendrn en cuenta las dimensiones de la pantalla no
permitindose ms de 22 filas, por tanto si la mxima frecuencia es mayor de 22 se deber mostrar el
histograma a escala.

13. Realizar un programa que permita calcular el NIF., conocido el DNI. de una persona.

El programa deber leer el nmero del DNI. del interesado. Seguidamente deber averiguar si es un
valor vlido (debe representar un valor entre 100.000 y 99.999.999). Si la entrada es vlida se deber
calcular el NIF. y representar el nmero completo con los puntos de millares y millones en las
posiciones correspondientes, as como la letra del NIF al final de la cadena de caracteres separada por
un espacio en blanco.

Clculo de la letra del NIF.:
Se obtiene el resto de la divisin del nmero del DNI. entre 23, y en funcin del resultado se asigna un
carcter segn la siguiente tabla:

0=T 7=F 14=Z 21=K
1=R 8=P 15=S 23=E
2=W 9=D 16=Q
3=A 10=X 17=V
4=G 11=B 18=H
5=M 12=N 19=L
6=Y 13=J 20=C

Ejercicios de programacin en C - Punteros


Dpto. Sistemas y Automtica UPV/EHU



1. Escribir un programa que efecte las siguientes operaciones. -

a) Declarar las variables enteras largas value1 y value2 e inicializar value1 a 200000
b) Declarar la variable lPtr como apuntador a un objeto de tipo long.
c) Asignar la direccin de la variable value1 a la variable de apuntador lPtr.
d) Imprima el valor del objeto al que apunta lPtr.
e) Asgnele a la variable value2 el valor del objeto al que apunta lPtr.
f) Imprima el valor de value2.
g) Imprima la direccin de value1.
h) Imprima la direccin almacenada en lPtr. Es igual el valor impreso que la direccin de value1?

Nota: %p muestra el valor de la variable como puntero

2. Crear un programa que calcule el valor de la intensidad que pasa a travs de una resistencia dada,
cuando se le aplica un voltaje determinado.
El programa deber estar dividido en las siguientes funciones:
explicar_programa()
Esta funcin mostrar una introduccin del programa por la pantalla.
obtener_valores()
Esta funcin pedir los valores para la resistencia y voltaje los cuales se pasarn por referencia al
programa principal.
calcular()
Esta funcin efectuar el clculo de la intensidad a partir de la resistencia y el voltaje aplicado.
imprimir_respuesta()
Esta funcin se encargar de mostrar un mensaje con los resultados.

3. Crear una funcin que intercambie el contenido de dos variables. Para ello se pasarn como
parmetros las direcciones de las variables.
Para probar la funcin escribir un programa que pida los datos por pantalla y muestre los contenidos
despus de llamar a la funcin.

4. Crear un programa que lea un nmero determinado (<100) de nmeros reales introducidos por
teclado los almacene en un vector para mostrarlos luego en orden inverso.
Nota: Para recorrer el array se deber usar aritmtica de punteros en lugar de usar los ndices del
array.

5. Escribir una funcin que tras pedir un da de la semana (de 1 a 7) devuelva un puntero a cadena con
el nombre del da. La funcin contendr un array de apuntadores a cadena.
Para probar la funcin se realizar un programa que pida un da de la semana en nmero y escriba el
da de la semana en letra.

6. Escribir un programa que inicialice una cadena con una palabra cualquiera. El programa deber
obtener la direccin de la primera letra de la cadena. Una vez sabida esta direccin la mostrar por
pantalla y realizar un bucle dando 3 oportunidades para que el usuario introduzca la direccin de la
tercera letra de la cadena. En caso de no introducirla bien despus de los 3 intentos, deber sacar un
mensaje indicando cul es la direccin correcta.




Punteros
Ejercicios programacin en C - Cadenas


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU


1. Escribir un programa que pida una cadena de caracteres (de longitud mxima 80 caracteres) y
devuelva la cadena escrita al revs.

Ayuda: Para saber la longitud de la cadena se puede usar la funcin strlen() de la librera string.h.

2. Realizar un programa que lea una cadena de caracteres de una longitud menor de 80 y visualice los
caracteres de la siguiente forma:

primero, ltimo, segundo, penltimo, tercero, antepenltimo, ...

3. Escribir una funcin que cambie las letras maysculas de una cadena a minsculas y viceversa. El
programa principal pedir una cadena por pantalla y se la pasar a dicha funcin esperando el
resultado correcto que se mostrar por pantalla.

4. Escribir un programa que pida primero un carcter por teclado y que luego pida una cadena. El
programa calcular cuntos caracteres tiene la cadena hasta que lea el carcter introducido primero.
Se deber mostrar un mensaje en pantalla con el nmero de caracteres introducidos hasta llegar al
carcter primero.

5. Escribir un programa que cuente el nmero de letras, dgitos y signos comunes de puntuacin de una
cadena introducida por teclado.

Ayuda: Para saber si un carcter es numrico comparar que su valor es mayor que 0 y menor que
9, para saber si es alfabtico comprobar que est entre a y z y considerar signos de puntuacin el
resto de los caracteres.

Nota: No considerar ni la ni las letras acentuadas, ya que tienen cdigos ASCII fuera del rango a-z

6. Realizar un programa que lea una cadena de caracteres con espacios en blanco excesivos: elimine los
espacios en blanco iniciales y finales y slo deje uno entre cada dos palabras.

7. Crear un programa que pida una cadena de caracteres y devuelva otra sin signos de puntuacin ni
nmeros. La cadena devuelta debe tener todos los caracteres en maysculas.

Ayuda: Se pueden usar las siguientes funciones estndar de C:
ispunct(), islower(), gets()
En TurboC tambin existe la funcin strupr()
Cdigo ASCII de A 65
a 97

8. Crear un programa que pida por pantalla una cadena de 80 caracteres de longitud mxima y que
calcule el nmero de veces que aparece otra cadena determinada, tambin pedida por teclado.
Como salida el programa debe escribir un mensaje con el nmero de veces que aparece la palabra
dada.

Ayuda: Se pueden usar las funciones siguientes:
strstr(), gets()

9. Escribir un programa que compruebe si una cadena pedida por teclado es un palndromo o no.
(Un palndromo es una palabra que se lee igual al derecho que al revs.) El programa no tendr en
cuenta si la palabra est escrita con maysculas o minsculas.

Ej: radar, 11011011, Ana, Otto

10. Escribir una funcin que compare 2 cadenas de caracteres devolviendo 1 si son iguales y 0 si son
distintas.

Cadenas
Ejercicios programacin en C - Cadenas


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
11. Escribir un programa que pida dos cadenas (de longitud mxima 10 caracteres) y devuelva lo
siguiente:

La longitud de ambas cadenas
Un mensaje diciendo si ambas cadenas son iguales y si no los son que diga qu cadena es la
mayor y cul la menor.
Concatene la segunda cadena al final de la primera, dejando un espacio blanco entre ambas.
Copia del contenido de la segunda cadena en la primera y la muestre por pantalla.

12. Escribir un programa con un men que permita las siguientes opciones:

Introducir una cadena de 40 caracteres de longitud mxima

Pasar a maysculas una cadena leda desde teclado. Para ello, escribir un procedimiento que
transforme caracteres de letras minsculas a maysculas dejando como estn las letras
maysculas.
Nota: Para llevar a cabo esta operacin tener en cuenta la representacin de los caracteres en
ASCII. (A 65, a 97)

Pasar a minsculas una cadena desde teclado. Para ello, escribir un procedimiento que
transforme caracteres de letras minsculas a maysculas. Dejando como estn las letras
minsculas.

Dada la cadena de caracteres introducida en el punto 1, obtener otra, de forma que la cadena
resultante tenga sus caracteres a una distancia d (en el cdigo ASCII) de los caracteres de la
cadena original. Se considerar el alfabeto circular, es decir que tras la letra z viene la letra A.
La distancia d se introducir desde teclado.
Nota: Antes de traducir la cadena se convertir en una cadena de letras minsculas, tal y como
se hace en el punto 2.

Salir del programa

Nota comn: En todos los casos si se intenta efectuar alguna operacin antes de introducir la cadena
se deber mostrar un mensaje de error comunicando al usuario que la cadena est vaca.

13. Julio Cesar enviaba mensajes a sus legiones encriptando los mensajes mediante el siguiente
algoritmo:
Se escoga un nmero n como clave y se sumaba a cada letra en el alfabeto n posiciones. As, si la
clave escogida fuese 5, la a pasara a ser la f, mientras que la f pasara a ser la k. Para las
ltimas letras del abecedario se seguira desde el principio. As, con la clave de 5 la y pasara a ser
la d.
Se pide crear un programa que encripte una frase mediante este algoritmo.

14. Construir un programa que implemente una calculadora para nmeros enteros:
El programa pedir primero la operacin y luego los operandos.
Las operaciones vlidas sern: sumar, restar, multiplicar, dividir, salir.
Si la operacin es distinta de salir se pedirn los operandos y luego se mostrar el resultado.
Si la orden es distinta de las anteriores se mostrar un error diciendo que se trata de una orden
desconocida.
Los operandos se recogern como cadenas de caracteres y se convertirn en nmeros enteros con la
funcin atoi()
Otras funciones que se pueden usar sern: gets() y strcmp().

15. Tal vez el esquema de codificacin ms famoso de todos es el cdigo Morse, desarrollado por
Samuel Morse en 1832 para el sistema telegrfico. El cdigo Morse asigna una serie de puntos y
rayas a cada letra del abecedario, a cada dgito y a algunos caracteres especiales (punto, coma, dos
puntos y punto y coma). Ver tabla adjunta.

Escribir un programa que lea una frase y la codifique en cdigo Morse. Tambin escriba un programa
que lea una frase en cdigo Morse y la convierta en su equivalente en castellano. La separacin entre
Ejercicios programacin en C - Cadenas


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
letras se indicar mediante un espacio, mientras que la separacin entre palabras se indicar mediante
3 espacios.

Carcter Cdigo Carcter Cdigo
A .- T -
B -.. U ..-
C -.-. V ...-
D -.. W .--
E . X -..-
F ..-. Y -.--
G --. Z --..
H .
I .. Dgitos
J .--- 1 .----
K -.- 2 ..---
L .-.. 3 ...--
M -- 4 ....-
N -. 5 .....
O --- 6 -....
P .--. 7 --...
Q --.- 8 ---..
R .-. 9 ----.
S 0 -----

16. Escribir un programa que permita al usuario realizar las siguientes operaciones:

1. Mostrar la fecha y hora por pantalla
2. Sacar por pantalla el contenido de un fichero ASCII.
3. Sacar por pantalla el contenido de un directorio
4. Limpiar la pantalla
5. Salir del programa

Para ello se har uso de los comandos del sistema operativo:
En Linux: date, cat, ls, clear
En DOS: date, time, type, dir, cls

Ejercicios programacin en C Estructuras y arrays de estructuras


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU



1. Realizar un programa que permita realizar las operaciones bsicas (sumar, restar, multiplicar y
dividir) nmeros complejos.

El programa deber utilizar una variable que represente el nmero complejo en su forma polar, con
sus dos componentes mdulo y argumento.

2. Crear un programa que lea las siguientes variables proporcionadas desde teclado con el siguiente
formato:
Posicin de los caracteres Campo
1-8 Matricula
9-13 Cilindrada
14-16 Potencia
17-27 Modelo
28-38 Marca

Ej:
BI6755CC1400 75FIESTA FORD

Y las introduzca en la correspondiente estructura. El programa deber mostrar la estructura obtenida
para comprobar que la conversin ha sido correcta.

Nota: Construir una funcin que muestre la estructura por pantalla que recibir la estructura pasada
por referencia (para no malgastar espacio en la pila)

3. Disponemos de la informacin correspondiente a una jaula de un Zoo en una variable de tipo registro
con los siguientes campos:

Numero de jaula Entero
Especie del animal Cadena de caracteres
Nombre del animal Cadena de caracteres
Edad Entero
Peso Real
Kilogramos de comida diaria Real
Frecuencia de limpieza de jaula Entero (veces al da)
Estado de la salud del animal Carcter (B, R, M -> Buena, Regular o Mala)
Descendencia S o No
Peligroso S o No

Por motivos de transferencia de informacin a otros organismos necesitamos descomponer la
informacin contenida en esa variable en dos variables diferentes. Una va a contener los datos de
mantenimiento de la jaula del animal:

Numero de jaula Entero
Kilogramos de comida diaria Real
Frecuencia de limpieza de jaula Entero (veces al da)
Peligroso S o No

Otra, los datos del animal:

Especie del animal Cadena de caracteres
Nombre del animal Cadena de caracteres
Edad Entero
Peso Real
Estado de la salud del animal Carcter (B, R, M -> Buena, Regular o Mala)
Descendencia S o No

Estructuras
Ejercicios programacin en C Estructuras y arrays de estructuras


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
Escribir un programa que lea una variable de informacin global y la descompongan en dos
variables, una de informacin de mantenimiento y otra de informacin del animal y visualice ambas
variables.

Nota: Dentro de los subprogramas que considere necesarios deber haber uno, llamado
descomponer, que tome un registro y lo descomponga en dos.

4. Crear un programa que permita introducir cierta informacin relativa a los vuelos diarios que parten
de un aeropuerto en un array formado por registros. Cada registro contendr la siguiente informacin
sobre el vuelo correspondiente:

a) Nmero de vuelo (No tiene por qu coincidir con el ndice del array)
b) Hora de partida:
Que a su vez, tiene dos componentes:
1. Hora: 0..23
2. Minutos: 0..59
c) Origen del vuelo: Cadena de caracteres
d) Destino del vuelo: Cadena de caracteres
e) Nmero de pasajeros: Entero

Una vez introducidos los datos de todos los vuelos se preguntar si se desea obtener informacin de
algn vuelo. En caso de que el usuario responda afirmativamente se pedir el nmero de vuelo. El
programa buscar el vuelo en al array y acceder a la informacin que contiene a partir de su nmero
de vuelo, mostrando por pantalla todos sus datos.

El programa se ejecutar repetitivamente hasta que el usuario indique que no desea obtener ms
informacin de ningn vuelo.

Nota: Se deben disear las funciones que visualicen un vuelo, busquen un vuelo en el array,
introduzcan la informacin de un vuelo en el array, etc...

5. Una compaa utiliza aviones para fumigar las cosechas contra una gran variedad de plagas. Lo que
la compaa cobra a los granjeros depende de contra qu es lo que desean fumigar, y de cuantos m
2

de tierra quieren que se fumiguen de acuerdo con la siguiente tabla:

Tipo1: Fumigacin contra malas hierbas 3000 Pts/ m
2
Tipo2: Fumigacin contra langostas 6000 Pts/ m
2
Tipo3: Fumigacin contra gusanos 9000 Pts/ m
2
Tipo4: Fumigacin contra todo lo anterior 15000 Pts/ m
2


Adems, si el rea a fumigar es mayor que 10.000 m
2
, el granjero goza de un descuento del 7%.

Se trata de escribir un programa que lea los datos de un conjunto de granjeros y al final calcule, para
cada uno de ellos, la factura correspondiente. De cada granjero se tendr la siguiente informacin:

Nombre
Tipo de fumigacin (cdigo entre 1 y 4)
Nmero de m
2
que se van a fumigar.

6. Escriba un programa que genere un array de 50 nmeros enteros entre 1 y 1000 de forma aleatoria. A
continuacin, partiendo de ese array genere otro array de 50 estructuras tal que cada estructuras tenga
un campo para el nmero y otro (cadena de caracteres) para indicar si dicho nmero es mltiplo
primo o no. Por ejemplo:







Ejercicios programacin en C Estructuras y arrays de estructuras


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
203 672 23 319 426 1 ........ 862 373 273 203



203 672 23 319 426 1 ........ 862 373 273 203
NO NO SI NO NO SI ........ NO SI NO NO


Finalmente muestre en pantalla la suma de todos los nmeros del array que sean primos.

7. Escribir un programa que cree una base de datos temporal sobre el personal de agentes de polica. La
base de datos almacenar cuatro datos acerca de cada persona:

Nombre (Array de caracteres)
Apellido (Array de caracteres)
Cdigo (Entero)
Categora (Entero: 0: detective, 1: ayudante, 2: director)

El programa preguntar acerca de cuntos datos se aadirn a la base de datos y luego mostrar los
datos de todos los agentes introducidos.

8. Programa que implemente una agenda.

Se guardarn los siguientes datos por persona:

Nombre: Mximo 20 caracteres.
Apellidos: Mximo 40 caracteres.
Sobrenombre: Mximo 10 caracteres.
Telfono: Mximo 10 caracteres.

Se crear un men con las siguientes opciones:

1. Alta de una nueva persona a la agenda con los correspondientes datos.
2. Eliminar a una persona de la agenda.
3. Bsqueda de un nombre en particular (La bsqueda se har por sobrenombre)
4. Listado de todas las personas empezando por la primera introducida (Para pasar a la siguiente se
deber pulsar intro).
5. Guardar agenda en disco.
0. Salir

9. Se deber escribir un programa que permita introducir y consultar la tabla peridica de los elementos
qumicos. Para ello, se construir un men con las siguientes opciones:

1. Introducir elementos de la tabla peridica
2. Listar todos los elementos de tabla peridica
3. Mostrar elemento de la tabla peridica por nmero atmico
4. Mostrar elemento de la tabla peridica por smbolo
5. Salir

La opcin 1 preguntar cuntos elementos de la tabla peridica se quieren introducir e ir
preguntando sucesivamente por ellos.
Evidentemente, no es necesario rellenar el array con todos los elementos de la tabla peridica.
La opcin 2 listar la informacin acerca de todos los elementos qumicos introducidos
ordenados por nmero atmico.
La opcin 3 pedir el nmero atmico del elemento que se quiere consultar y mostrar por
pantalla la informacin correspondiente a dicho elemento.
Ejercicios programacin en C Estructuras y arrays de estructuras


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
La opcin 4 pedir el smbolo del elemento que se quiere consultar y mostrar por pantalla la
informacin correspondiente a dicho elemento.

Se guardar la siguiente informacin sobre cada elemento.

1. Smbolo del elemento
2. Nombre completo
3. Peso Atmico

El nmero atmico vendr indicado por la posicin en el array de elementos que representa la
tabla peridica, y por tanto no ser necesario almacenar esta informacin en el registro
correspondiente.

Nota: Se puede mejorar el programa aadiendo una opcin que permita guardar los datos en un
fichero de disco.



Ejercicios programacin en C - Ficheros


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU



1. Crear un programa que abra un fichero y escriba en l dos nmeros enteros y otro programa que lea
el segundo nmero escrito del fichero.

Ayuda: sense las funciones fprintf y fscanf.

2. Leer completamente un fichero de texto, carcter a carcter (o en cantidades mayores, para que sea ms
rpido). El programa debe contar las vocales, los caracteres alfabticos y los dgitos que hay en el
fichero.

3. Crear un programa que abra un fichero y escriba en l dos cadenas, cada una acabada con el carcter
de nueva lnea y otro programa que lea la segunda cadena escrita en el mismo fichero.
Comprobar que el fichero existe y visualizar su contenido con un editor de textos (p.e. el Block de
Notas de Windows)

Nota: Escribir una cadena con espacios intercalados.
Ayuda: sense las funciones fputs y fgets. Consultar la ayuda.

4. Escribir un programa que tome caracteres de teclado y, de uno en uno, los escriba en un fichero cuyo
nombre es previamente pedido por pantalla.

5. Escribir un programa que saque por pantalla el contenido de un fichero cuyo nombre es pedido por
pantalla.

Nota: El nombre del fichero debe proporcionarse mediante la lnea de argumentos al llamar al
fichero. Es decir:

C:> MostrFic fichero.txt

6. Escribir un programa que comprueba que un fichero de cdigo contiene el mismo nmero de { que
de } en su cdigo. En caso de que no sea as el programa mostrar un mensaje indicando que el
nmero de { es distinto que el nmero de }.

7. Escribir un programa que use dos ficheros: uno de lectura y otro de escritura. El programa leer los
caracteres de un fichero, y tras una operacin de cambio de maysculas a minsculas y viceversa,
escogida por el usuario, los escribir en un segundo fichero.

8. Escribir el cdigo necesario en el programa de la agenda de la leccin de estructuras (Ejercicio 8)
para que la informacin de la agenda pueda leerse desde disco al arrancar el programa y actualizarse
su contenido en disco cuando el usuario lo requiere con la opcin de Guardar.

9. Escribir un programa que permita visualizar el contenido de un fichero pasado desde la lnea de
comando en formatos hexadecimal y carcter, siguiendo el esquema del ejemplo:

C:> Ver Fichero.txt
48 6F 6C 61 2C 20 73 6F-79 20 75 6E 61 20 63 61 Hola, soy una ca
64 65 6E 61 0D 0A 59 20-79 6F 20 6F 74 72 61 0D dena..Y yo otra.
0A EB 11 80 3E AF D2 00-74 03 E8 B2 E8 E8 FC E6 ....>...t.......

Ayuda: Para averiguar si un carcter se puede imprimir existe la funcin isprint().

10. Escribir un programa que pida el nombre de un fichero y lo borre de disco.

Ayuda: Usar la funcin remove().

11. Crear una base de datos almacenada en un fichero para personal universitario. Cada elemento de la
base de datos constar de 3 campos: Nombre, apellido y edad.

Ficheros
Ejercicios programacin en C - Ficheros


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
Adicionalmente, ser necesario crear otro programa que lea los registros de la base de datos y los
muestre secuencialmente por pantalla.

12. Escribir un programa que haga una conversin de un tipo de formato de fichero a otro. El formato de
partida ser el siguiente:

Posicin de los caracteres Campo
1-8 Matricula
9-13 Cilindrada
14-16 Potencia
17-27 Modelo
28-38 Marca

Ej:
BI6755CC1400 75FIESTA FORD

y el formato de destino sern las correspondientes estructuras, es decir:

Matrcula 8 caracteres
Cilindrada entero
Potencia entero
Modelo 10 caracteres
Marca 10 caracteres

Nota: Los datos de partida pueden introducirse con el programa 2.

13. Una entidad bancaria posee en un fichero la siguiente informacin para un conjunto de personas:

Nombre.
Nmero de cuenta.
Crdito solicitado.

El programa funcionar basndose en un men con las siguientes operaciones:

1.- Aadir un crdito al archivo
2.- Visualizar en pantalla la informacin correspondiente al crdito mayor
3.- Copiar en otro fichero el conjunto de personas que hayan solicitado un crdito superior a
cierta cantidad establecida por el banco (la cual deber ser introducida por teclado).
4.- Visualizar todo el contenido de un archivo

14. Se pide crear un programa que a partir de la frmula de un compuesto qumico, supuestamente puro,
y su peso en gramos presente un informe con la cantidad en gramos de cada elemento del compuesto.

Evidentemente, el programa deber consultar la informacin contenida en la tabla peridica. Esta
informacin deber estar disponible en un fichero que el programa leer al empezar a ejecutarse. La
informacin de la tabla peridica que ser relevante, por ejemplo para el elemento qumico hierro
ser la siguiente:

Nmero atmico 26
Smbolo del elemento qumico Fe
Nombre completo del elemento Hierro
Peso atmico 55,87
Nota 1: Para todas las ejecuciones del programa los datos de la tabla peridica debern estar
disponibles por el programa. Se deja a eleccin de los alumnos el mtodo de creacin del fichero con
los datos de la tabla peridica.

Nota 2: Se recuerda que el nmero atmico indica la posicin de un elemento en la tabla peridica.
Habr que pensar cmo se organiza esta informacin para que el programa pueda funcionar de la
forma ms sencilla posible.

Ejercicios programacin en C - Ficheros


Dpto. Ingeniera de Sistemas y Automtica UPV/EHU
El programa pedido presentar el siguiente men:

1. Listar tabla peridica
2. Mostrar elemento de la tabla peridica
3. Mostrar composicin del compuesto
0. Salir

Donde:

Opcin 1 mostrar un listado con todos los elementos de la tabla peridica. Dado que la tabla
peridica tiene 118 elementos y slo hay 40 lneas por pantalla, el programa deber mostrar los
elementos en grupos de 40 lneas para poder visualizar la informacin de todos los elementos.

Ejemplo de la primera pantalla:

N. Atmico Smbolo Nombre Peso Atmico
1 H Hidrgeno 1.001
...
38 Sr Estroncio 87.62
Pulsa una tecla para continuar

Opcin 2 mostrar toda la informacin de un elemento qumico. Para ello permitir buscar un
elemento bien por nmero atmico o por smbolo. As, previamente se preguntar si se busca el
elemento por nmero atmico o por smbolo:


INFORMACIN DEL ELEMENTO QUMICO

Nmero atmico: 26
Smbolo: Fe
Nombre completo: Hierro
Peso atmico: 55.85

Opcin 3 permitir obtener la composicin del compuesto qumico a partir de la frmula y del peso
del compuesto.

Se deber comprobar que la frmula escrita es vlida, esto implicar comprobar que TODOS los
elementos escritos existen en la tabla peridica y que se ha seguido el formato:

Elemento[Nmero de tomos]Elemento[Nmero de tomos]...

Tal y como sucede en la notacin usual el nmero de tomos es opcional, sobreentendindose en
caso de que no haya ningn nmero especificado que slo hay un tomo del elemento en el
compuesto.

La frmula podr tener un mximo de 10 elementos y un mnimo de 1.

Nota 3: Se recuerda que todos los tomos empiezan por letra mayscula y que algunos tomos tienen
una letra minscula mientras que otros no. No hay tomos de tres letras.

Una vez que se haya comprobado que la frmula es correcta y se hayan identificado tanto los
elementos componentes como el nmero de tomos de cada tipo en la molcula el programa se
presentar el siguiente informe:

COMPOSICIN

Compuesto qumico SiO2
Peso (en gramos): 1000
Gramos de Silicio: 467,5
Gramos de Oxgeno 532,5

You might also like