Académique Documents
Professionnel Documents
Culture Documents
acticas de Laboratorio
Programaci
on B
asica
Universidad de Guanajuato.
n de Ciencias e Ingenieras, Campus Leo
Divisio n.
Departamento de Ingenieras Qumica, Electro nica y Biome
dica.
c Copyright 2012
Introducci
on
ii
Indice general
Introducci
on ii
1 Edici
on y Compilaci
on 1
1.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2 Edicion y Compilacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.1 Accediendo al sistema . . . . . . . . . . . . . . . . . . . . . . . . . . . 1
1.2.2 Comandos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
1.2.3 Editores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2.4 Creando un programa ejecutable . . . . . . . . . . . . . . . . . . . . . 7
1.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
2 Lenguaje de Programaci
on C 11
2.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2 Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
2.2.1 Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.2.2 Diagramas de Flujo y Pseudocodigo . . . . . . . . . . . . . . . . . . . . 12
2.3 Lenguaje C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3.1 Tipos de datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.2 Desplegando variables . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.3.3 Introduciendo datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.4 Operadores Aritmeticos . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
3 Lenguaje de programaci
on Fortran 22
3.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2 Estructura y Compilacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
3.2.1 Tipos de datos en fortran . . . . . . . . . . . . . . . . . . . . . . . . . 22
iii
3.2.2 Desplegando Informacion . . . . . . . . . . . . . . . . . . . . . . . . . . 24
3.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4 Secuencias de Control 33
4.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2 Secuencias de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.1 Operadores relacionales y logicos . . . . . . . . . . . . . . . . . . . . . 33
4.2.2 Condicional Si-Entonces . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.2.3 Condicional Si-Entonces-sino . . . . . . . . . . . . . . . . . . . . . . . . 35
4.2.4 Seleccion de caso . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
4.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5 Secuencias de Repetici
on 43
5.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2 Secuencias de repeticion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2.1 for - do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.2.2 while - do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.2.3 Ciclos infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.3 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
7 Funciones y Procedimientos 68
7.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
iv
7.2 El preprocesador de C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
7.3 Funciones en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
7.4 Funciones y procedimientos en Fortran . . . . . . . . . . . . . . . . . . . . . . 73
7.5 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
8 Apuntadores y Archivos 82
8.1 Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.2 Apuntadores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
8.3 Archivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
8.3.1 Archivos en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88
8.3.2 Archivos en Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
8.4 Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94
Bibliografa 97
v
Pr
actica 1
Edici
on y Compilaci
on
1.1 Introducci
on
Esta practica introduce al estudiante al uso del sistema operativo Linux, as como a las
herramientas para editar, compilar y ejecutar un programa de computadora. Al termino
de la practica el estudiante habra comprendido la diferencia entre un editor de textos y un
procesador de palabras y sera capaz de editar, compilar y ejecutar un programa escrito en
lenguaje C.
1.2 Edici
on y Compilaci
on
A continuacion se presenta un breve resumen de los conceptos mas importantes que se re-
quieren para realizar la practica.
password: contrase
na o clave
1.2.2 Comandos b
asicos
La lnea de comandos empieza en el prompt y termina en el momento que el usuario presiona
- , (Enter, Return). La primer palabra que se escribe en la lnea de comandos es el nombre
de un archivo ejecutable o de un comando del sistema.
Los comandos tienen opciones y argumentos, los cuales van separados por espacios.
1.2.3 Editores
Editor de texto vs. procesador de texto.
En Linux existen varios editores de texto, como vi, vim, pico y emacs, entre otros.
Modo comando: este es el modo en el que se encuentra el editor cada vez que se
inicia. Las teclas ejecutan acciones (comandos) que permiten mover el cursor, ejecutar
comandos de edicion de texto, salir de vi, guardar cambios, etc.
Modo insercion o texto: este es el modo que se usa para insertar el texto. Existen varios
comandos que se pueden utilizar para ingresar a este modo. Para pasar de modo texto
a modo comando simplemente se debe presionar la tecla ESC .
emacs
EMACS significa, Editor MACroS y fue escrito por Richard M. Stallman. Los comandos
basicos se pueden consultar en la tabla 1.3
Tabla 1.1: Comandos de Linux. [] indica que son opcionales, ... indica que puede ir mas
de una opcion. Las opciones suelen comenzar con - o .
Comando Descripcion
ls [opciones...] [directori- Muestra el contenido del directo-
o/archivo ...] rio. Sin argumentos muestra el
contenido del directorio actual de
trabajo. La opcion mas habit-
ual es -l que muestra informacion
mas completa de cada directorio y
archivo.
cd [directorio] Cambia de directorio. Sin ar-
gumentos lleva al directorio del
usuario (HOME). Si el directorio es
.. sube un nivel.
pwd Imprime el directorio actual de tra-
bajo.
cat [opciones...] Muestra el contenido de los archivos
[archivos...] por la salida estandar. Si no se
especifican archivos, lee de la en-
trada estandar.
cp [opciones...] fuente... Permite copiar un archivo, o varios
destino archivos a un directorio. Quizas la
opcion mas usada es -r que per-
mite copiar recursivamente directo-
rios hacia otros directorios.
mv [opciones...] fuente... Cambia el nombre de un archivo
destino por otro o mueve una serie de
archivos y directorios a un directo-
rio destino.
mkdir [opciones...] direc- Crea el directorio con el nombre in-
torio dicado.
rmdir [opciones...] direc- Borra un o varios directorios si
torio... estan vacos
rm [opcions...] archivos Borra archivos. Las opciones mas
habituales son -f para forzar el
borrado sin preguntar al usuario (la
opcion contraria es -i). -r borra
recursivamente todos los subdirec-
torios .
Enlazador: Un archivo objeto es codigo maquina, pero no se puede ejecutar, porque le falta
codigo que se encuentra en otros archivos binarios. El enlazador genera el ejecutable
binario, a partir del contenido de los archivos objetos y de las bibliotecas.
Programa fuente
(Cdigo fuente)
Preprocesador
Compilador
Enlazador
Programa ejecutable
1.3 Ejercicios
El objetivo de esta sesion es aprender a editar, compilar y ejecutar un programa en C.
NOTA: Todos los programas deben ir comentados y con el nombre del autor.
1. Ejercicio 1: Programa 1
Crear un archivo con el nombre programa1.c e introducir el siguiente programa:
3. Modifique el programa1.c para que imprima el nombre del autor. Pruebe editar el
archivo con otro editor de textos (ej. gedit, vi, pico, etc.). Guarde su archivo como
programa2.c
return 0 ;
}
4. Editor de palabras
Edite, compile y ejecute un archivo con el nombre programa3.c utilizando un editor
de palabras (ej. open office, word, etc. ), e introduzca el siguiente texto:
Lenguaje de Programaci
on C
2.1 Introducci
on
En esta segunda practica se explora el lenguaje de programacion C, la estructura de un pro-
grama es explicada a detalle para que posteriormente el alumno explore el lenguaje. Tambien
se explica que es un algoritmo y los principales pasos en la solucion de un problema mediante
el uso de un programa de computadora.
2.2 Algoritmo
Un algoritmo es una secuencia ordenada y finita de pasos para realizar una tarea particular
y debe cumplir las siguientes especificaciones:
Cada paso debe tener una secuencia sucesiva e indicar claramente el camino a seguir
en la solucion del problema
Un programa es una secuencia ordenada y finita de instrucciones para realizar una tarea
particular. Se puede decir que un programa es la implementacion de un algoritmo en un
lenguaje de programacion.
2.2.1 Recomendaciones
Programar es un proceso metodico, por lo que se puede recomendar los siguientes pasos en
la solucion de problemas computacionales que involucren crear un programa.
5. Codificar el algoritmo
6. Probar el algoritmo con una variedad de datos de entrada, donde para estos datos se
conoce el resultado.
2.3 Lenguaje C
El lenguaje C es un lenguaje imperativo, es decir, es un lenguaje que le indica a la
computadora de forma inequvoca las instrucciones a seguir para la solucion de un
problema. Otros lenguajes como LISP y PROLOG son declarativos
Primer programa:
#include
Entonces:
En nuestro programa se indica que incluya la librera estandar de entrada y salida (teclado
y pantalla)
La funcion principal del programa se indica con main (nombre especial que indica donde
comienza el programa). Todo programa en C debe tener una funcion principal. Las funciones
en C pueden o no regresar un valor, en nuestro caso regresa un valor entero. Para indicar
que regresa un valor entero se antepone la clausula int (abreviacion de integer). La palabra
reservada void entre parentesis indica que la funcion main no tiene parametros. Si los tuviese,
entonces escribimos por ejemplo:
Las llaves
{ }
indican inicio y fin de un grupo o bloque de instrucciones, en este caso indican el inicio y fin
de la funcion main.
p r i n t f ( Programacion b a s i c a . \ n ) ;
Aqu se invoca o llama a la funcion printf, que es una funcion de salida estandar y nos
ayuda a desplegar informacion en pantalla. Aqu el parametro o argumento que se le pasa a
la funcion es una cadena de caracteres, la cual es:
Programacion b a s i c a . \ n
Donde
\n
return 0 ;
Aqu se indica que finaliza la funcion main y regresa al sistema operativo un valor de 0.
El cero se utiliza por convencion para indicar que el programa termino sin errores o que fue
exitoso.
De forma abreviada:
int i ;
...
p r i n t f ( %d , i ) ;
long x ;
...
p r i n t f ( %l d , x ) ;
float f ;
...
p r i n t f ( %f , f ) ;
double d ;
...
p r i n t f ( %l f , d ) ;
long double r ;
...
p r i n t f ( %Lf , r ) ;
p r i n t f ( P l a n t i l l a de formato , l i s t a de v a r i a b l e s ) ;
int i ;
...
s c a n f ( %d ,& i ) ;
long x ;
...
s c a n f ( %l d ,&x ) ;
float f ;
...
s c a n f ( %f ,& f ) ;
double d ;
...
s c a n f ( %l f ,&d ) ;
long double r ;
...
s c a n f ( %Lf ,& r ) ;
s c a n f ( P l a n t i l l a de formato , l i s t a de r e f e r e n c i a a v a r i a b l e s ) ;
Variables:
Constante: Son elementos que contienen datos, el valor asignado a una constante es
fijo y no se puede cambiar durante toda la ejecucion de un programa.
Variable: Son elementos que se utilizan para contener datos de distintos tipos. El valor
contenido en una variable puede cambiar a lo largo de la ejecucion de un programa
2.4 Ejercicios
El objetivo de esta sesion es del de aprender a declarar variables de diferentes tipos y manip-
ularlas en operaciones basicas.
NOTA: Todos los programas deben ir comentados y con el nombre del autor.
valor1 = 50;
valor2 = 25;
suma = valor1 + valor2 ;
printf ( La suma de %d y %d e s %d\n , v a l o r 1 , v a l o r 2 , suma ) ;
return 0;
}
Inicio
valor1,
valor2
suma
Fin
int i;
y = i = x;
p r i n t f ( %f \n , y ) ;
return 0 ;
}
4. Modifique el programa anterior para que imprima todas las variables y su valor. Es
decir que la salida del programa muestre el valor de la variable despues de la asignacion,
ejemplo de una posible salida:
x = 0
y = 0
i = 0
Edite, compile y ejecute el programa. Son los valores mostrados por el programa
anterior similares a los de su respuesta del inciso anterior? Explique el por que de los
diferentes valores.
float a ;
a = 1 / 3;
p r i n t f ( %f \n , a ) ;
return 0 ;
}
Lenguaje de programaci
on Fortran
3.1 Introducci
on
En esta practica se introduce al alumno al lenguaje de programacion Fortran. Los ejercicios
incluyen una comparacion con el lenguaje C e invitan al estudiante a reflexionar sobre la
forma de operar de ambos lenguajes.
print , Programacion b a s i c a
./programa1.out
! Declaramos l a s v a r i a b l e s
i m p l i c i t none
integer i , k
r e a l f1 , a
i = 10
k = 1
f1 = 5.0
a = f1
print , i , k , f1 , a
espacios nx 2x n es el n
umero total de espacios en blanco
a leer
3.3 Ejercicios
Los objetivo de esta sesion son:
NOTA: Todos los programas deben ir comentados y con el nombre del autor.
(a) Analice el programa y determine el valor que tendran las variables en cada paso
del programa.
(b) Edite, compile y ejecute el programa (programa9.c).
(c) Verifique si su deduccion fue correcta.
(d) Explique el por que de los resultados obtenidos.
i n t main ( v o i d )
{
int a ,b;
b = 3;
a = b++ + 6 ;
p r i n t f ( a = %d , b = %d \n , a , b ) ;
b = 3;
a = ++b + 6 ;
p r i n t f ( a = %d , b = %d \n , a , b ) ;
return 0 ;
}
program programa1
print , Programacion b a s i c a
program programa2
real x , y
integer i
x = 1.23
i = x
y = i
print , x , i , y
Verifique que el programa en Fortran que usted escribio sea similar al mostrado aqu.
Que diferencias nota entre C y Fortran respecto a la asignacion de valores a las variables
y a su funcionamiento? En Fortran cual es el tipo de dato equivalente al tipo float de
C?
program v a l o r e s
! Declaramos l a s v a r i a b l e s
i m p l i c i t none
l o g i c a l Bandera
integer i , j
real a , b , c
character ( 3 0 ) t e x t o
! Asignamos v a l o r e s a n u e s t r a s v a r i a b l e s
i =1
a = 2.5
b = a + i
c = a + a
Bandera = . false .
j = i 2
texto = E s t a s son l a s v a r i a b l e s :
! Desplegamos en p a n t a l l a l o s c o n t e n i d o s de l a s v a r i a b l e s
print , t e x t o
print , Bandera , i , j , a , b , c
end program v a l o r e s
read(*,*)
write(*,*)
program programa4
! Declarar v a r i a b l e s .
i m p l i c i t none
character ( 2 0 ) nombre
! Leer r e s p u e s t a d e s d e e l t e c l a d o .
read ( , ) nombre
En todos los casos se indica al codigo que debe leer un n umero entero de maximo 4
digitos de longitud i4. La ventaja del segundo metodo es que se puede usar el mismo
formato o plantilla de formato en mas de una instruccion, ejemplo:
read ( , ( i 4 ) ) m
read ( , 1 0 0 ) i
100 format ( i 4 )
read ( , 1 0 0 ) n
read ( , 1 0 0 ) k
read ( , 1 0 0 ) j
program programa5
! Declarar v a r i a b l e s .
i m p l i c i t none
integer i ,m, n
real a , b
! Se S o l i c i t a n l o s d a t o s .
print , t e c l e a e l v a l o r de m ( e n t e r o ) :
read ( , ( i 4 ) ) m
print , ahora t e c l e a e l v a l o r de i :
read ( , 1 0 0 ) i
100 format ( i 4 )
print , ahora t e c l e a e l v a l o r de n :
read ( , 1 0 0 ) n
print , ahora t e c l e a e l v a l o r de un r e a l :
read ( , 1 0 1 ) a
101 format ( f 3 . 2 )
b = a m
! Desplegar l a s v a r i a b l e s .
print
write ( , ) m = , m, i = , i
write ( , ) a = , a , b = a m , b
print
Es posible usar una plantilla de formato para desplegar una variable? Si es as, escriba
un programa que ejemplifique la salida con formato en fortran. En C como especifi-
camos el numero de decimales que deseamos se despliegue en pantalla, cuando es una
variable de tipo float? Escriba un programa en C que ejemplifique la entrada y salida
con formato.
Secuencias de Control
4.1 Introducci
on
Esta practica introduce al estudiante al uso de las secuencias de control en lenguaje C y
Lenguaje Fortran. Al termino de la practica el estudiante habra comprendido las secuencias
de control y sera capaz de utilizarlas para la resolucion de problemas mediante alg
un lenguaje
de programacion.
NO
Condicin
SI
Proceso
C Fortran
i f ( c o n d i c i o n ) i f ( c o n d i c i o n ) then
{
proceso proceso
}
endif
SI NO
Condicin
Proceso Proceso
C Fortran
i f ( c o n d i c i o n ) i f ( c o n d i c i o n ) then
{ proceso 1
proceso 1 else
} proceso 2
else endif
{
proceso 2
}
Fortran contempla la forma else-if then. Los siguientes programas son equivalentes:
i f ( c o n d i c i o n 1 ) then
proceso1
e l s e i f ( c o n d i c i o n 2 ) then
proceso2
endif
i f ( c o n d i c i o n 1 ) then
proceso1
else
i f ( c o n d i c i o n 2 ) then
proceso2
endif
endif
uno : i f ( c o n d i c i o n 1 ) then
dos : i f ( c o n d i c i o n 2 ) then
tres : i f ( c o n d i c i o n 3 ) then
cuatro : i f ( c o n d i c i o n 4 ) then
Proceso4
endif c u a t r o
else t r e s
p r o c e s o 5 ! cuando no s e cumplio l a c o n d i c i
on 3
endif t r e s
endif dos
endif uno
4.2.4 Selecci
on de caso
Nos ayuda para realizar un proceso de muchos dependiendo de una condicion o pregunta (ver
figura 4.3)
C Fortran
switch ( o p c i o n ) s e l e c t case ( o p c i o n )
{ case ( A )
case A : P r o c e s o 1 ; proceso 1
break ; case ( B )
case B : P r o c e s o 2 ; proceso 2
break ; case ( C )
case C : P r o c e s o 3 ; proceso 3
break ; case default
default : P r o c e s o n ; proceso n
break ; end s e l e c t
}
4.3 Ejercicios
Los objetivo de esta sesion son:
NOTA: Todos los programas deben ir comentados y con el nombre del autor.
(a) a b
(b) a (b + c)
(c) a >= b
(d) (a%5) == b
(e) d = a (b + c)
i n t i =8, j =5, k ;
f l o a t x = 0 . 0 0 5 , y = 0.01 , z ;
char a , b , c = c , d = d ;
(a) z = (x + y)
(b) a = b = d
(c) i = j = 1.1
(d) i+ = 2
(e) i% = j
(f) k = (j == 5)?i : j
(g) z = (x >= 0)?x : 0
3. Escriba un algoritmo con ayuda de un diagrama de flujo que sea capaz de intercambiar
el contenido de tres variables. El algoritmo debe funcionar de tal forma que: dadas las
variables A, B C, el valor de B se almacene en A, El valor de C en B y el valor de A
en C. Los valores de las tres variables deben ser introducidas por el usuario, y deben
ser desplegadas en pantalla, posteriormente hacer el intercambio y volver a mostrar los
valores de las variables.
Inicio
C1, C2,
C3, C4,
C5
Prom = (C1 + C2 +
C3 + C4 + C5) /5
Prom
Fin
6. Escriba un algoritmo con ayuda de un diagrama de flujo que teniendo como entrada
la calificacion de un alumno(a) en un examen despliegue un mensaje en pantalla. El
mensaje debe decir aprobado(a) si la calificacion es mayor o igual a 8.00 y debe decir
No aprobado si la calificacion es menor a 8.0.
7. Escriba un programa en C y uno en Fortran que realice el algoritmo del inciso anterior
8. Escriba un algoritmo con ayuda de un diagrama de flujo que dado como dato el sueldo
de un trabajador, le aplique un aumento del 17% si su sueldo es inferior a 1000 y 12%
en caso contrario. El algoritmo tambien debe imprimir el nuevo sueldo del trabajador.
9. Escriba un programa en C y uno en Fortran que realice el algoritmo del inciso anterior
10. Escriba un algoritmo con ayuda de un diagrama de flujo que dado tres n umeros, encuen-
tre cual es el menor y cual es el mayor. El algoritmo debe imprimir los valores en orden
creciente. Considere que los valores son introducidos por el usuario y almacenados en
tres variables de tipo entero.
11. Escriba un programa en Fortran y uno en C que realice el algoritmo del inciso anterior.
Compare el codigo y comente las diferencias. Cual lenguaje le parece mas adecuado
para este algoritmo (detalle su respuesta)?
12. En las olimpiadas pasadas el tiempo que realizan los participantes en la competencia
de velocidad en pista se mide en minutos, segundos y centesimas. La distancia que
recorren se expresa en metros. Escriba un algoritmo con ayuda de un diagrama de flujo
que calcule la velocidad de los participantes en kilometros por hora. Considere que
el usuario proporcionara al algoritmo la distancia en metros y el tiempo en minutos,
segundos y centesimas de segundo.
13. Escriba un programa en Fortran y uno en C que realice el algoritmo del inciso anterior.
Compare el codigo y comente las diferencias. Cual lenguaje le parece mas adecuado
para este algoritmo (detalle su respuesta)?
p r i n t f ( T e c l e a un e n t e r o : ) ;
s c a n f ( %d ,& i ) ;
switch ( i )
{
case 4 : p r i n t f ( \n El numero e s c u a t r o \n ) ;
case 5 : p r i n t f ( \n El numero e s c i n c o \n ) ;
case 3 : p r i n t f ( \n El numero e s t r e s \n ) ;
case 2 : p r i n t f ( \n El numero e s dos \n ) ;
case 1 : p r i n t f ( \n El numero e s uno\n ) ;
default : p r i n t f ( \n El numero e s d e s c o n o c i d o ! \ n ) ;
return ( 0 ) ;
}
Secuencias de Repetici
on
5.1 Introducci
on
Esta practica introduce al estudiante al uso de las secuencias de repeticion en lenguaje C y
Lenguaje Fortran. Al termino de la practica el estudiante habra comprendido las secuencias
de repeticion y sera capaz de utilizarlas para la resolucion de problemas mediante alg un
lenguaje de programacion.
5.2.1 for - do
Las secuencias de repeticion for y do permiten que un segmento determinado de un pro-
grama se ejecute n veces. Esta secuencia de repeticion tambien se conoce como secuencia de
repeticion indizada, ya que utiliza un contador para el control del ciclo. El diagrama de flujo
de la secuencia de repeticion for puede observarse en la figura 5.2.
Iteraci
on indizada: Un bloque de codigo es ejecutado repetidamente un n
umero
determinado de veces.
Esta secuencia de repeticion consta de tres partes , una inicializacion del contador,
una condicion de terminacion y un incremento o decremento del contador.
while y do-while tambien se puede tambien utilizar como una secuencia de repeticion
indizada si se incluyen las tres partes por separado.
Inicializacin
NO
Condicin
SI
Proceso
Incremento
for ( i n i c i a l i z a c i o n ; c o n d i c i o n ; i n c r e m e n t o )
{
proceso
Fortran
do i n i c i a l i z a c i o n , lm i t e , i n c r e m e n t o
proceso
enddo
Ejemplo de un ciclo que se repite 12 veces. Observe que si el proceso es una sola sentencia,
entonces no es necesario las llaves.
C
p r i n t f ( El v a l o r de k e s : %d , k ) ;
Fortran
do k=1, 1 2 , 1
p r i n t , El v a l o r de K e s : ,k
enddo
5.2.2 while - do
Las secuencias de repeticion while- do y do-while son secuencias que permiten procesar un
segmento de codigo o conjunto sentencias de forma iterativa. A diferencia de la secuencia
for no requiere de un ndice o contador. Los diagramas de fujo correspondientes a estas
secuencias de repeticion se pueden observar en la figura ??. La sintaxis en C y Fortran es
como sigue:
Condicion al inicio de la secuencia (while):
C
Fortran
while ( c o n d i c i o n )
{ do while ( c o n d i c i o n )
proceso ; proceso
} enddo
C
Fortran
do
{
Nota :
F o rt r a n no p r o v e e una o p c i o n
proceso ;
para v e r i f i c a r l a c o n d i c i o n
} while ( c o n d i c i o n ) ; a l f i n a l de l a s e c u e n c i a !
NO
Condicin
Proceso
SI
Proceso
SI
Condicin
NO
(a) (b)
Figura 5.2: Diagrama de flujo de una secuencia de repeticion while y do-while. Observe
que la diferencia es el momento en que se realiza la condicion. Evidentemente el valor de la
condicion debe alterarse dentro del alcance de la secuencia, de lo contrario la proposicion se
ejecutara indefinidamente.
for ( ; ; )
p r i n t f ( a l i n f i n i t o y mas a l l a ! . . . . . );
Fortran
do
p r i n t , a l i n f i n i t o y mas a l l a ! . . .
endo
Para terminar un ciclo infinito ...
Fortran
do
! ciclo infinito
p r i n t , T e c l e a un numero e n t r e 1 y 10
read , i
i f ( i >=1 .AND. i <=10) EXIT
! la condicion fue f a l s a
p r i n t , Entre 1 y 10 !!
endo
while ( 1 )
{
p r i n t f ( T e c l e a un numero e n t r e 1 y 10 ) ;
s c a n f ( %d ,& i ) ;
i f ( i >0 && i <=10)
break ;
p r i n t f ( Entre 1 y 10 !! );
}
5.3 Ejercicios
Los objetivo de esta sesion son:
2. Comprender como funcionan los arreglos y su relacion con las secuencias de repeticion
NOTA: Todos los programas deben ir comentados y con el nombre del autor.
Ejercicios
(C)
n = 10;
for ( k=1; k <=n ; k++)
{
n=20;
p r i n t f ( El v a l o r de k e s : %d , k ) ;
}
(Fortran)
n = 10
do k=1,n
n=20
p r i n t , El v a l o r de K e s : ,k
enddo
2. Ciclos: En el siguiente programa el primer ciclo funciona, pero el segundo no. Por
que? Que modificara para que funcione?
for ( i n i c i a l i z a c i o n ; c o n d i c i o n ; i n c r e m e n t o )
{
proceso
}
do i n i c i a l i z a c i o n , c o n d i c i o n , i n c r e m e n t o
proceso
end do
T e c l e a un n
u mero d e l 1 a l 10 : 1
La t a b l a de m u l t i p l i c a r de 1 e s :
1 x 1 = 1
1 x 2 = 2
1 x 3 = 3
1 x 4 = 4
1 x 5 = 5
1 x 6 = 6
1 x 7 = 7
1 x 8 = 8
1 x 9 = 9
1 x 10 = 10
G r a c i a s por u s a r e s t e programa .
6.1 Introducci
on
Esta practica introduce al estudiante al uso de las secuencias de arreglos (vectores y matrices)
y estructuras de datos en lenguaje C y Lenguaje Fortran. Al termino de la practica el
estudiante habra comprendido el manejo de arreglos y estructuras de datos.
6.2 Arreglos
Un arreglo consta de un conjunto ordenado de componentes. Se puede hacer referencia
(tener acceso) a un componente de un arreglo mediante uno o mas ndices, dependiendo de
la dimension del arreglo que haya sido declarada (ver figura 6.1).
Los arreglos son un conjunto de datos del mismo tipo que tienen un ndice para distin-
guirlos
Los indices en Fortran generalmente comienzan en uno (1), pero se puede especificar el
rango de los indices.
6.2.1 Declaraci
on de arreglos
f l o a t A[ 2 0 ] ;
float B[ 5 ] = {0.0 , 2.0 , 1.5 , 1.0 , 0.5}
int a [ 1 0 ] = { 2 } ;
Fortran
r e a l , dimension ( 3 ) : : x
r e a l , dimension ( 4 , 5 ) : : z
r e a l , dimension ( 0 : 8 ) , A1
r e a l , dimension ( 2 : 5 ) , A2
r e a l : : xx ( 3 ) , z z ( 4 , 5 )
Ejemplos del uso de cadenas pueden observarse en las figura 6.2, 6.3 y 6.4. Las funciones
para manejo de cadenas se encuentran definidas en string.h (ver tabla 6.1).
Tabla 6.1: Algunas de las funciones para manipulacion de cadenas de caracteres en C (incluir
string.h)
Funcion Descripcion
char *strcpy(const char Copia la cadena de caracteres apuntada
*dest, const char *orig) por orig al vector apuntado por dest.
int strcmp(const char *s1, Compara las dos cadenas de caracteres s1
const char *s2) y s2. Devuelve un entero menor, igual
o mayor que cero si se encuentra que s1
es, respectivamente, menor que, igual a, o
mayor que s2.
int strlen(const char *s) Calcula la longitud de la cadena de carac-
teres.
char *strncat(char *s1, Agrega n caracteres de s2 a s1
const char *s2, size t n)
#i n c l u d e <s t d i o . h>
char cadena [ 5 ] = h o l a ;
char cadena2 [ 5 ] = { h , o , l , a , \0 } ;
char nombre [ 1 5 ] , a p e l l i d o s [ 3 0 ] ;
p r i n t f ( I n t r o d u c e tu nombre : ) ;
s c a n f ( %s , nombre ) ;
p r i n t f ( Introduce tus a p e l l i d o s : ) ;
s c a n f ( %s , a p e l l i d o s ) ;
p r i n t f ( Tu Nombre e s %s %s \n , nombre , a p e l l i d o s ) ;
}
#i n c l u d e <s t d i o . h>
char ch ;
while ( ch=g e t c h a r ( ) , ch>=0 )
// s i e s menor que c e r o e n t o n c e s f i n de d a t o s
...
char ch ;
while ( s c a n f ( %c , &ch ) == 1 )
// s c a n f r e g r e s a c e r o s i e l c a r a c t e r e s n u l o .
double o
_ tip
tro
int
o
float
cha
r ...
struct
struct Nombre
{
t i p o 1 Campo1 ;
t i p o 2 Campo2 ;
...
tipoN CampoN ;
} Alumno ;
Alumno es una variable del tipo Nombre
Definicion (2)
struct Nombre
{
t i p o 1 Campo1 ;
t i p o 2 Campo2 ;
...
tipoN CampoN ;
};
Declaracion
struct t r a b a j a d o r
{
char nombre [ 2 0 ] ;
char a p e l l i d o s [ 4 0 ] ;
int edad ;
};
struct t r a b a j a d o r Academicos [ 2 0 ] ;
struct t r a b a j a d o r A d m i n i s t r a t i v o s [ 2 0 ] ;
6.3.2 type
En Fortran se utiliza la palabra reservada type para declarar una estructura.
Ejemplo:
type ele mento
c h a r a c t e r : : s i m b o l o 2
i n t e g e r : : numero atomico
r e a l : : peso atomico
end type elemento
...
...
type ( elemento ) : : h i d r og e n o , oxygeno
type ( elemento ) : : &carbon =( C , 1 2 , 1 2 . 0 )
real : : peso del agua
p e s o d e l a g u a = 2 . 0 h i d r o g e n o%p e s o a t o m i c o + oxygeno%p e s o a t o m i c o
6.3.3 union
Conjunto de N elementos que estan agrupados por medio de un u
nico nombre.
La diferencia entre las dos es que en una estructura, los miembros ocupan diferentes
areas de la memoria, pero en una union, los miembros ocupan la misma area de memo-
ria.
type coordenada
real : : x
real : : y
end type coordenada
type l i n e a
coordenada : : i n i c i o , f i n
real : : y
end type l i n e a
type ( coordenada ) : : A, B
type ( l i n e a ) : : &d=l i n e a ( coordenada ( 0 , 0 ) , coordenada ( 1 0 , 2 0 ) )
Cuando dos o mas variables comparten la misma memoria, entonces se define una union.
ejemplo:
union tom
{
char ch ;
int x ;
} t;
X
byte 1 byte 2
ch
Definicion y declaracion(1)
union
{
int i ;
float f ;
} VariableU ;
variableU es una union de dos miembros (i, f)
Definicion (2)
union Nombre
{
t i p o 1 Campo1 ;
t i p o 2 Campo2 ;
...
tipoN CampoN ;
};
Declaracion
Recordar que los elementos ocupan la misma area de memoria. Del ejemplo anterior:
Como variableU.i y variableU.f ocupan la misma area de memoria, modificar uno
modifica el valor del otro, algunas veces de maneras impredecibles.
wb . word = 0 x 0 f 0 a ; / Se a s i g n a un v a l o r a e s t a v a r i a b l e /
6.3.4 enum
Es un conjunto de constantes enteras con nombre.
En su declaracion se especifica todos los valores legales que puede tener una variable
del tipo enum
Los valores de una enumeracion se inician con 0 a menos que se indique otro valor, y
se incrementan en 1.
6.3.5 typedef
Typedef: Nuevos tipos de datos
enum ComunidadDCI { a d m i n i s t r a t i v o , e s t u d i a n t e , p r o f e s o r } ;
...
enum ComunidadDCI p e r s o n a ;
for ( i=a d m i n i s t r a t i v o ; i<=p r o f e s o r ; i ++)
...
persona = administrativo ;
i f ( p e r s o n a == e s t u d i a n t e )
...
...
Sintaxis:
typedef struct
{
...
} NombreEstructura ;
...
NombreEstructura V a r i a b l e ;
typedef int e n t e r o ;
typedef struct
{
char nombre [ 3 0 ] ;
char c a l l e [ 4 0 ] ;
char ciu dad [ 2 0 ] ;
char e s t a d o [ 3 ] ;
unsigned int c o d i g o ;
} sdireccion ;
e n t e r o a , b=3;
6.4 Ejercicios
Los objetivo de esta sesion son:
2. Comprender como funcionan los arreglos y su relacion con las secuencias de repeticion
NOTA: Todos los programas deben ir comentados y con el nombre del autor. El reporte
debe incluir una explicacion del comportamiento del programa as como comentarios sobre
lo aprendido.
Ejercicios
(c) Indique cuales son las diferencias en el uso de arreglos y matrices con respecto al
lenguaje C
(d) Investigue/Verifique si en Fortran se puede obtener la matriz inversa con una sola
instruccion.
program o p e r a c i o n e s
r e a l : : a ( 3 , 3 ) , b ( 3 , 3 ) , c ( 3 , 3 ) , v1 ( 3 ) , v2 ( 3 ) , t =3. , c1 , c2
integer : : i , j
do i =1 ,3
do j =1 ,3
a ( i , j )=( i+j )
end do
v1 ( i )= i 6 . 5
end do
b=t a ! producto elemento a elemento
c=a+b
c=c
b=c a
v2=s i n ( v1 )
v1=t v1+5v2 ! combinacion l i n e a l
print ,a , b , c
end program o p e r a c i o n e s
2. Escriba un programa en C que lea una cadena de caracteres en min usculas y la de-
spliegue en Mayusculas sin usar alguna funcion de la libreria string.h (tip: ver tabla
ASCII)
3. Escribir un programa que use el tipo enumeracion para mostrar el nombre de un mes,
su predecesor y su sucesor. El mes se ingresara desde el teclado dando un n
umero entre
1 y 12 (verificar que el n
umero se encuentre en el rango permisible.
4. Ciclos y arreglos: Suponga que el arreglo a es declarado como int a[99]. cual es el
contenido del arreglo a despues de las siguientes instrucciones?
5. Contando n
umeros: Escriba un programa en C o Fortran que (programa15):
7. Dibuje un diagrama de flujo que lea dos matrices del mismo tamano (numero de ren-
glones y columnas iguales) y efect
ue el producto de las mismas.
Recuerde que si A, B y C son matrices, donde sus elementos son ai,j , bi,j yci,j entonces
el producto de las matrices A y B (C = A B ), se puede definir como:
m
X
ci,j = ai,k bk,j i, j
k=1
utilice una estructura (struct), para definir un punto en el plano cartesiano (X,Y)
(tipo float)
Pida al usuario dos puntos
Calcule y despliegue la distancia de un punto a otro
p
d(P1 , P2 ) = (x2 x1 )2 + (y2 y1 )2
Funciones y Procedimientos
7.1 Introducci
on
Esta practica introduce al estudiante al uso de las secuencias de control en lenguaje C y
Lenguaje Fortran. Al termino de la practica el estudiante habra comprendido las secuencias
de control y sera capaz de utilizarlas para la resolucion de problemas mediante alg
un lenguaje
de programacion.
7.2 El preprocesador de C
Preprocesador: Transforma el programa fuente, convirtiendolo en otro archivo fuente
predigerido. Elimina comentarios, incluye otros archivos y sustituye las definiciones.
#include
Se utiliza para incluir otro archivo de definiciones o archivo de biblioteca y de esta forma
compilar otro archivo.
#include <archivo>
#include archivo
Elemplo:
#include <s t d i o . h>
#include <math . h>
#include < l i b r e r i a e s p e c i a l . h>
Cuando se indica <archivo> se le dice al compilador que busque donde estan los archivos
de biblioteca o del sistema. Si se usa la forma archivo entonces el compilador busca en el
directorio actual, es decir, donde el programa esta siendo ejecutado.
#define
Se utiliza para definir constantes o una macro. Esta definicion es sustituida por el codigo
establecido por el programador. #define acepta argumentos en la definicion de macros.
Elemplo
#define Maximo 300
#define Minimo 0
#define F a l s o 0
#define Verdadero 1
#define MIN( a , b ) ( a<b ) ? a : b
...
for ( i=Minimo ; i <Maximo ; i ++)
p r i n t f ( El minimo de %d y %d e s %d\n , A[ i ] , B [ i ] , MIN(A[ i ] , B [ i ] ) ) ;
#i f , #i f d e f
Eval ua una expresion constante entera. Siempre se debe terminar con #endif para delim-
itar el fin de esta sentencia. Se puede utilizar else ( #elif o #else)
Elemplo
#define Maximo 300
#define Minimo 0
#define MEX 0
#define EUA 1
#define GB 2
#define PAIS ACTIVO MEX
#i f d e f <nombre macro>
<s e c u e n c i a de s e n t e n c i a s >
#endif
...
#i f n d e f <nombre macro>
<s e c u e n c i a de s e n t e n c i a s >
#endif
#undef se utiliza para quitar una definicion de una constante o macro que se haya definido
previamente. El formato general es:
#undef <nombre macro>
El compilador se puede utilizar para controlar los valores asignados o definidos en la lnea
de comandos. Para esto, se usa la opcion -Dmacro[=defn], por ejemplo:
gcc -DTAMLINEA=80 prog.c -o prog.out
Esto es equivalente a:
#define TAMLINEA 80
Tambien se puede poner un smbolo sin valor, por ejemplo:
gcc -DDEBUG prog.c -o prog.out
En donde el valor que se toma es de 1 para esta macro.
7.3 Funciones en C
Un programa en C es una coleccion de una o mas funciones. Una de ellas debe ser la funcion
main() ya que la ejecucion del programa comenzara en esta funcion. Tradicionalmente,
main() es la primer funcion en un programa, sin embargo, podra ir en cualquier parte del
programa.
Su nombre
Co digo de l a f u n c i o n
r e g r e s o de a lg u
n v a l o r de acuerdo a l t i p o
}
La seleccion del nombre de la funcion es tan relevante como la seleccion del nombre de
las variables. estos tienen que ser relevantes y acorde a su uso, de tal forma que la lectura
del programa sea facil.
Si la funcion no tiene parametros o argumentos entonces no se necesita declaracion de
parametros. El tipo de la declaracion es opcional - Si no esta explcita la declaracion del tipo,
el tipo de la funcion por defecto es entero -
Todas las funciones, excepto las declaradas como void, devuelven un valor. El tipo del
valor devuelto debe coincidir con el declarado. Si no ha habido una declaracion anterior,
entonces el valor devuelto es entero por defecto. Si es parte de la funcion la sentencia return,
entonces el valor de la funcion es el valor en la sentencia return. Si no esta presente return,
entonces la funcion devolvera cero.
Ejemplo:
// f u n c i
o n que d e v u e l v e e l mnimo de dos n
u meros e n t e r o s
int minimo ( int a , int b )
{
return (m) ; // r e g r e s a e l v a l o r
}
Donde los <argumentos (ficticios)>, en el caso que sean utilizados, son los objetos,
sobre los cuales la subrutina trabajara preferentemente, estan separados por comas y pueden
ser variables, funciones, subrutinas, arreglos, apuntadores o procedimientos de modulo.
La subrutina es invocada por otra unidad programatica por medio de la instruccion call.
SUBROUTINE A r e a C i r c u l o ( r , a )
IMPLICIT NONE
REAL, INTENT(IN) : : r
REAL, INTENT(OUT) : : a
REAL, PARAMETER : : Pi = 3 . 1 4 1 5 9 2 7
A = Pi r r
RETURN
END SUBROUTINE A r e a C i r c u l o
Invocacion:
PROGRAM C i r c u l o
IMPLICIT NONE
REAL : : r a d i o , a r e a
INTERFACE
SUBROUTINE A r e a C i r c u l o ( r , a )
IMPLICIT NONE
REAL, INTENT(IN) : : r
REAL, INTENT(OUT) : : a
END SUBROUTINE A r e a C i r c u l o
END INTERFACE
!
write ( , ) Radio d e l c i r c u l o (m)
read ( , ) r a d i o
CALL A r e a C i r c u l o ( r a d i o , a r e a )
! Escribir resultado
write ( , ) El a r e a d e l un c i r c u l o con r a d i o , r a d i o , (m) e s , area , m2
!
STOP
END PROGRAM C i r c u l o
En Fortran es conveniente especificar que tipos de datos utiliza un procedimiento
interface
subroutine l e e d a t o s ( z )
real : : z
end subroutine l e e d a t o s
end i n t e r f a c e
Una funcion es un subprograma de orden jerarquico de nivel inferior al programa principal.
Sintaxis:
IMPLICIT NONE
! i n s t r u c c i o n e s de d e c l a r a c i o n de t i p o de l o s argumentos
:
:
! i n s t r u c c i o n e s de d e c l a r a c i o n de t i p o de v a r i a b l e r e s u l t a d o
:
:
! i n s t r u c c i o n e s de d e c l a r a c i o n de t i p o de l a s v a r i a b l e s l o c a l e s
:
:
! instrucciones ejecutables
:
:
RETURN
END FUNCTION Nombre funcion
Una FUNCTION se invoca de la misma forma que una funcion intrnseca. Es decir, en
aquellas expresiones aritmeticas en las que se desee evaluar el valor de la funcion se escribe:
Nombre funcion ( a r g 1 , a r g 2 , . . . , a r g n )
Ejemplo: Obtener el mayor de tres n
umeros
IMPLICIT NONE
REAL : : D ! V a r i a b l e r e s u l t a d o
REAL, INTENT(IN) : : A, B, C ! Argumentos de l a f u n c i
on
REAL : : Dummy ! V a r i a b l e l o c a l
IF (A <= B)THEN
D = B
ELSE IF (A <= C) THEN
D = C
ELSE
D = A
END IF
7.5 Ejercicios
Los objetivo de esta sesion son:
2. Comprender como operan los arreglos , estructuras y su relacion con las funciones y
procedimientos
NOTA: Todos los programas deben ir comentados y con el nombre del autor. El reporte
debe incluir una explicacion del comportamiento del programa as como comentarios sobre
lo aprendido.
Ejercicios
program Cpotencia
! Declarar v a r i a b l e s .
i m p l i c i t none
r e a l , dimension ( 1 0 ) : : d a t o s
integer , dimension ( 1 0 ) : : n p o t e n c i a s
r e a l , external : : p o t e n c i a
integer : : Max = 5 0 ;
integer k
c a l l l e e d a t o s ( datos , n p o t e n c i a s , Max)
print , X | n | Y
print ,
do k=1,Max
write ( , 1 0 0 ) d a t o s ( k ) , n p o t e n c i a s ( k ) , p o t e n c i a ( d a t o s ( k ) , n p o t e n c i a s ( k ) )
100 format ( 1 x , f 4 . 1 , 1 x , | , 1 x , i 3 , 2 x , 1 x , | , 1 x , f 7 . 1 )
enddo
stop Programa p o t e n c i a s termino de forma normal
do j =1,n
write ( , 1 0 0 ) j
100 format ( T e c l e a e l v a l o r ( x ) y su p o t e n c i a ( n ) , i 3 , : )
read , dat ( j ) , nPot ( j )
enddo
return
end subroutine l e e d a t o s
r e a l function p o t e n c i a ( a ,m)
integer : : m, j
real : : a
r e a l : : pot
pot = 1 . 0
do j =1,m
pot = pot a
enddo
p o t e n c i a = pot
return
end function p o t e n c i a
do j =1,m
pot = pot a
enddo
p o t e n c i a = pot
return
end function p o t e n c i a
qi qj
u(|~rij |) = K
|~rij |
N N
1 XX
Uexc = u(|~rij |)
2 i=1 j=1
Notas:
6. Escribir un programa que use el tipo enumeracion para mostrar el nombre de un mes,
su predecesor y su sucesor. El mes se ingresara desde el teclado dando un n
umero entre
1 y 12 (verificar que el n
umero se encuentre en el rango permisible.
7. Definir una macro min(a,b) para determinar el entero mas pequeno. Definir otra macro
min3(a,b,c) en terminos de min(a,b). Incorporar las macros en un programa demostra-
tivo en donde se pida al usuario tres n
umeros y se muestre el mas peque
no.
p
d(P1 , P2 ) = (x2 x1 )2 + (y2 y1 )2
struct Punto A, B ;
double D i s t a n c i a ;
p r i n t f ( T e c l e a l o s v a l o r e s d e l punto A ( x , y ) \n ) ;
s c a n f ( %l f %l f , &A. x , &A. y ) ;
p r i n t f ( T e c l e a l o s v a l o r e s d e l punto B ( x , y ) \n ) ;
s c a n f ( %l f %l f , &B . x , &B . y ) ;
// c a l c u l a m o s l a d i s t a n c i a e n t r e ambos p u n t o s .
return ( 0 ) ;
}
Nota: Recuerde que para crear el ejecutable incluir la libreria math.h en el enlazador
(caso particular de fedora)
Apuntadores y Archivos
8.1 Introducci
on
Esta practica introduce al estudiante al uso de apuntadores y archivos en lenguaje C. Al ter-
mino de la practica el estudiante habra comprendido la relacion entre apuntadores y archivos.
por lo que sera capaz de utilizar estas herramientas para la resolucion de problemas mediante
alg
un lenguaje de programacion.
8.2 Apuntadores
Los apuntadores son u
tiles para obtener acceso indirecto al contenido de las variables.
Cuando se declara un apuntador, una cierta cantidad de memoria se reserva para con-
tenerlo.
int i p t r ; // s e d e c l a r a un apuntador t i p o e n t e r o
double dptr ; // s e d e c l a r a un apuntador t i p o d o u b l e
int o p c i o n ; // s e d e f i n e una v a r i a b l e t i p o e n t e r o l l a m a d a o p c i
on
int p t r o p c i o n ; // s e d e f i n e una apuntador a una v a r i a b l e t i p o e n t e r o
int i p t r ; // s e d e c l a r a un apuntador t i p o e n t e r o
double dptr ; // s e d e c l a r a un apuntador t i p o d o u b l e
Los operadores en el uso de apuntadores en C estan listados en la tabla 8.1
a
iptr
jptr
int a , i p t r , j p t r . k p t r kptr
a
iptr
i p t r = &a ;
jptr
// i p t r apunta a l c o n t e n i d o de a kptr
// s e a c c e s a e l e s p a c i o iptr
jptr
// de memoria a l que apunta kptr
k p t r = NULL; a 100
// apuntador v a c i o iptr
jptr
// no apunta a a l g u n a v a r i a b l e o c o n t e n i d o kptr
Los apuntadores tambien son u tiles para acceder a contenidos de memoria de forma
ordenada y contigua. Para esto se hace necesario reservar un espacio en memoria y despues
accederlo mediante un apuntador.
Reservando espacio para un apuntador
int g ( int i p t r ) {
return 0 ;
Arreglos
Apuntadores
int f ( ) {
int g ( ) {
int a [ 1 0 ] , i p t r ;
iptr = a ; int a [ 1 0 ] , i p t r ;
iptr [ 0 ] = 5; iptr = a ;
iptr = 5;
return 0 ;
return 0 ;
}
}
... ...
El uso de apuntadores permite el paso de argumentos por referencia, de esta forma los
argumentos puede CAMBIAR su contenido. Aqu entonces deben pasarse direcciones
de variables como argumentos.
return ; return ;
} }
. .
. .
. .
Uso en funciones
Arreglos Apuntadores
a [ 0 ] = 5; a = 5 ;
return 0 ; return 0 ;
} }
8.3 Archivos
Un archivo es un conjunto de informacion o datos que se encuentran almacenados en
una memoria permanente, como un disco duro.
La extension del archivo nos indica parcialmente el tipo y contenido del archivo
8.3.1 Archivos en C
Declarando y abriendo un archivo
La funcion fopen se utiliza para abir un archivo, y asociarle una variable apuntador a
archivo con la cual el programa puede referirse a la fuente del archivo. El prototipo de
fopen es:
fopen retorna un apundador al archivo si la llamada fue exitosa, de otra forma regresa
NULL
Modo Uso
r Abre para lectura
w Abre o crea para escritura. Descarta (destruye)
cualquier contenido previo
a Abre o crea para escritura. Agrega a (escribe de-
spues de) cualquier contenido previo
r+ Abre para modificaciones (lectura y escritura)
w+ Abre o crea para modificacion. Descarta (de-
struye) cualquier contenido previo
a+ Abre o crea para modificacion. Agrega a cualquier
contenido previo
FILE A r c h i v o p t r ; // s e d e c l a r a e l a r c h i v o
// e j e m p l o de a p e r t u r a de un a r c h i v o
A r c h i v o p t r = f o p e n ( d a t o s . t x t , w ) ;
// para c e r r a r l o s a r c h i v o s s e u t i l i z a l a f u n c i o n f c l o s e
f c l o s e ( FILE A r c h i v o p t r ) ;
Lectura
Escritura
Otras funciones
f g e t c ( FILE a r c h i v o )
f p u t s ( const char s , FILE a r c h i v o ) ;
f p u t c ( int c , FILE a r c h i v o ) ;
s p r i n t f ( char b u f f e r , const char format , . . . ) ;
s s c a n f ( char b u f f e r , const char format , . . . ) ;
...
A continuacion se da un ejemplo completo para la apertura y cierre de archivos de texto
#include <s t d i o . h>
int main ( ) {
char NombreArch [ 8 0 ] ;
FILE ArchivoPtr ;
p r i n t f ( Archivo a a b r i r ? ) ;
s c a n f ( %79s , NombreArch ) ;
ArchivoPtr = f o p e n ( NombreArch , r ) ;
i f ( ArchivoPtr == NULL)
{
f p r i n t f ( s t d e r r , No s e puede a b r i r e l a r c h i v o : %s \n , NombreArch ) ;
return 1 ; / Termina e l programa /
}
return 0 ;
}
...
write (0 ,100)
100 format ( dame un v a l o r de x )
read ( 5 , 2 0 0 ) x
200 format ( f 5 . 1 )
write (6 ,300) x
300 format ( i 5 , f 5 . 1 , / )
...
Sintaxis del comando open
c l o s e ( [ u n i t =] u n i t s p e c [ , e r r=e r r l a b e l ]
[ , i o s t a t=i o s t a t ] [ , s t a t u s=s t a t u s ] )
Ejemplos en Fortran utilizando archivos:
program programa
i m p l i c i t none
i n t e g e r numero
do while ( numero>=0)
read , numero
i f ( numero>=0) then
w r i t e ( 1 , ) numero
end i f
end do
close (1)
end program
Ejemplo 2
program programa
i m p l i c i t none
type alumno
c h a r a c t e r 64
nombre c h a r a c t e r 128 a p e l l i d o s
end type alumno
do while ( . not . e o f ( 1 ) )
read ( 1 , ) datos alumno
p r i n t , Nombre : , datos alumno%nombre , A p e l l i d o s : , datos alumno%a p e l l i d o s
! datos alumno%a p e l l i d o s
end do
close (1)
end program
8.4 Ejercicios
Los objetivo de esta sesion son:
NOTA: Todos los programas deben ir comentados y con el nombre del autor. El reporte
debe incluir una explicacion del comportamiento del programa as como comentarios sobre
lo aprendido.
Ejercicios
int o b j e t o v a r ;
int o b j e t o p t r ;
objeto var = 2;
p r i n t f ( o b j e t o %d\n , o b j e t o v a r ) ;
o b j e t o p t r = &o b j e t o v a r ;
objeto ptr = 3;
p r i n t f ( o b j e t o %d\n , o b j e t o v a r ) ;
p r i n t f ( o b j e t o %d\n , o b j e t o p t r ) ;
11 0672326663 CH11 6/10/04 2:03 PM Page 238
return ( 0 ) ;
return 0; return 0;
} }
(a) (b)
Program 11.1 Output Program 11.2 Output
count = 10, x = 10 Figura 8.3: Programa que utilizan
Q Q apuntadores.
/ /
( (
The variables count and x are declared to be integer variables in the normal fashion. On
the next line, the variable int_pointer is declared to be of type pointer to int. Note
The character variable c is defined and initialized to the character 'Q'. In the next line
that the two lines of declarations could have been combined into the single line
of the program, the variable char_pointer is defined to be of type pointer to char,
3. El siguiente
int count =segmento de codigo ejemplifica el uso
10, x, *int_pointer; meaningde that
apuntadores
whatever valueyisoperadores
stored inside thisde auto-
variable should be treated as an indire
Next, the address operator isla
applied to the variable reference (pointer)
count.This has theCu to
effectaof a character.
creating Notice that you can assign an initial value to this vari
incremento. Siguiendo secuencia de instrucciones,
able intothe l es el valor (contenido)
you assign to de
a pointer to this variable, which is then assigned by the program thenormal fashion.The
variable value that char_pointer in the program
cada variable. ? a pointer to the variable c, which is obtained by applying the address operator to the
int_pointer
variable c. (Note that this initialization generates a compiler error if c had been defined
Execution of the next statement in the program,
after this statement because a variable must always be declared before its value can be ref-
x = *int_pointer; erenced in an expression.)
proceeds as follows:The indirection operator tells the C systemThe declaration
to treat of the variable char_pointer and the assignment of its initial value
the variable
could have been equivalently
int_pointer as containing a pointer to another data item.This pointer is then used to
expressed in two separate statements as
DCI - DIQEB, Universidad de Guanajuato char *char_pointer;
access the desired data item, whose type is specified by the declaration of the pointer
variable. Because you told the compiler that int_pointer points to integers
char_pointer when you
= &c;
declared the variable, the compiler knows that the value referenced by the expression
*int_pointer is an integer. And because you set int_pointer to point to the integer
8.4 Ejercicios 96
int a r r a y [ 1 0 ] ;
int main ( ) {
int d a t a p t r ;
int v a l u e ;
d a t a p t r = &a r r a y [ 0 ] ;
v a l u e = d a t a p t r ++;
v a l u e = ++d a t a p t r ;
v a l u e = ++d a t a p t r ;
int f a c t ( int n ) {
i f (n < 0)
return 0 ;
e l s e i f ( n == 0 )
return 1 ;
e l s e i f ( n == 1 )
return 1 ;
else
return n f a c t ( n 1 ) ;
}
[3] C Programming Language, Brian W. Kernighan, Dennis M. Ritchie Prentice Hall; 2 ed.
[4] Computing For Scientist Principles Of Programming With Fortran 90 And C++ Barlow
R., Barnett R.