Sie sind auf Seite 1von 102

Manual de Pr

acticas de Laboratorio
Programaci
on B
asica

Arturo Vega Gonzalez


Arturo Gonzalez Vega

Universidad de Guanajuato.
n de Ciencias e Ingenieras, Campus Leo
n.
Divisio
nica y Biome
dica.
Departamento de Ingenieras Qumica, Electro
c Copyright 2012

Introducci
on
El presente manual de practicas de laboratorio tienen por objetivo fundamental presentar
los conceptos basicos y relevantes del curso Programacion Basica, el cual se imparte en la
Division de Ciencias e Ingenieras de la Universidad de Guanajuato, Campus Leon. Los
lenguajes de programacion utilizados son C y Fortran, ambos en la plataforma de UNIX
(Linux - Fedora).
El manual de practicas consta de 8 practicas, las cuales cubren los conceptos basicos de
programacion. Cada practica contiene una introduccion donde se explican de forma breve
los conocimientos necesarios para el desarrollo de los ejercicios. Estos conceptos debieron
revisarse en clase, por lo que aqu se presentan en forma resumida.
Los ejercicios presentados al final de cada captulo constituyen una practica y estan pensados para realizarse frente a una computadora. Los ejercicios sugeridos incluyen preguntas
donde el estudiante tiene que investigar un poco mas acerca del lenguaje de programacion o
bien reflexionar sobre el comportamiento y logica que se observa en la ejecucion del programa.
Los ejercicios tambien ayudan a desarrollar las habilidades del estudiante para la solucion de
problemas mediante un programa de computadora.
El tiempo requerido para realizar cada practica es entre una y dos sesiones de tres horas
cada una. Los autores de este manual recomiendan que los ejercicios se resuelvan en equipo
de dos personas. Esto contribuira al desarrollo de habilidades como comunicacion y trabajo
en equipo.
Finalmente, es importante mencionar que es la primer version del manual de practicas y
es factible que tenga algunos errores cometidos de manera involuntaria. Por ello los autores
agradeceremos las sugerencias que se tengan para mejorar el contenido de este manual de
practicas.

ii

Indice general
Introducci
on

ii

1 Edici
on y Compilaci
on

1.1

Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2

Edicion y Compilacion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.1

Accediendo al sistema . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.2

Comandos basicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.3

Editores . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.2.4

Creando un programa ejecutable

. . . . . . . . . . . . . . . . . . . . .

Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

1.3

2 Lenguaje de Programaci
on C

11

2.1

Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.2

Algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2.3

2.4

2.2.1

Recomendaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12

2.2.2

Diagramas de Flujo y Pseudocodigo . . . . . . . . . . . . . . . . . . . . 12

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

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
3.3

Desplegando Informacion . . . . . . . . . . . . . . . . . . . . . . . . . . 24

Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

4 Secuencias de Control

33

4.1

Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.2

Secuencias de Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33

4.3

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

Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39

5 Secuencias de Repetici
on

43

5.1

Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.2

Secuencias de repeticion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.3

5.2.1

for - do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

5.2.2

while - do . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46

5.2.3

Ciclos infinitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

6 Arreglos y Estructuras de Datos

53

6.1

Introduccion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

6.2

Arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

6.3

6.4

6.2.1

Declaracion de arreglos . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

6.2.2

Cadena de caracteres . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

Estructura de Datos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
6.3.1

struct . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6.3.2

type . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

6.3.3

union . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

6.3.4

enum . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

6.3.5

typedef . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 62

Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

7 Funciones y Procedimientos
7.1

68

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.4

8.3.1

Archivos en C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

8.3.2

Archivos en Fortran . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90

Ejercicios . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

Bibliografa

97

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 requieren para realizar la practica.

1.2.1

Accediendo al sistema

Para acceder al sistema operativo se requiere que el usuario o persona se identifique por
medio de:
login: username o nombre de usuario
password: contrase
na o clave
El usuario debio haber sido registrado por el administrador del sistema.

DCI - DIQEB, Universidad de Guanajuato

1.2 Edici
on y Compilaci
on

Figura 1.1: Ingreso al sistema linux

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.

Figura 1.2: Terminal

Comandos Basicos (ver tabla 1.1):


Los comandos tienen opciones y argumentos, los cuales van separados por espacios.
Los comandos indican que hacer
DCI - DIQEB, Universidad de Guanajuato

1.2 Edici
on y Compilaci
on
Las opciones indican como hacerlo
Los argumentos indican sobre quien hacerlo

1.2.3

Editores

Editor de texto vs. procesador de texto.


Un editor de texto es un programa que permite crear y modificar archivos digitales
compuestos u
nicamente por texto sin formato, conocidos com
unmente como archivos
de texto o texto plano.
Un procesador de texto es un programa que permite crear y modificar archivos digitales
que contienen texto con formato, como negrillas, cursivas, margenes, etc. Generalmente
contienen mas caracteres de control para darle al texto un formato particular.
En Linux existen varios editores de texto, como vi, vim, pico y emacs, entre otros.
vi, vim, gvim
Vi es el editor estandar de los Sistemas Operativos de la familia Unix/Linux. Existen tres
modos o estados de vi (ver tabla 1.2):
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 
.
Modo lnea o ex: se escriben comandos en la u
ltima lnea al final de la pantalla.

emacs
EMACS significa, Editor MACroS y fue escrito por Richard M. Stallman. Los comandos
basicos se pueden consultar en la tabla 1.3

DCI - DIQEB, Universidad de Guanajuato

1.2 Edici
on y Compilaci
on

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 directoo/archivo ...]
rio. Sin argumentos muestra el
contenido del directorio actual de
trabajo. La opcion mas habitual es -l que muestra informacion
mas completa de cada directorio y
archivo.
cd [directorio]
Cambia de directorio.
Sin argumentos lleva al directorio del
usuario (HOME). Si el directorio es
.. sube un nivel.
pwd
Imprime el directorio actual de trabajo.
cat
[opciones...] Muestra el contenido de los archivos
[archivos...]
por la salida estandar. Si no se
especifican archivos, lee de la entrada estandar.
cp [opciones...] fuente... Permite copiar un archivo, o varios
destino
archivos a un directorio. Quizas la
opcion mas usada es -r que permite copiar recursivamente directorios 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 directorio destino.
mkdir [opciones...] direc- Crea el directorio con el nombre intorio
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 subdirectorios .

DCI - DIQEB, Universidad de Guanajuato

1.2 Edici
on y Compilaci
on

Comando
Flechas
h
l
k
j
1G
G
i
a
A
I
o
O
x
dd
ndd
D
dw

Tabla 1.2: Comandos Basicos de vi


Descripcion
Mover en la direccion de la flecha
Mover hacia la izquierda
Mover hacia la derecha
Mover hacia arriba
Mover hacia abajo
Lleva el cursor hasta el comienzo del archivo
Lleva el cursor hasta el final del archivo
Inserta texto a la izquierda del cursor
Inserta texto a la derecha del cursor
Inserta texto al final de la lnea donde se encuentra
el cursor
Inserta texto al comienzo de la lnea donde se encuentra el cursor
Abre una lnea debajo de la actual
Abre una lnea encima de la actual
Borra el caracter bajo el cursor
Borra la lnea donde se encuentra el cursor
Borra las proximas n lneas
Borra desde donde se encuentra el cursor hasta el
final de la lnea
Borra desde donde se encuentra el cursor hasta el
final de una palabra

DCI - DIQEB, Universidad de Guanajuato

1.2 Edici
on y Compilaci
on

Figura 1.3: Ventana principal del editor gvim

Tabla 1.3: Comandos Basicos de emacs


Comando
Descripcion

 

  
+  x 
+ f  Abrir o crear archivo.
Ctrl 

Ctrl 




+  x Ctrl
+  s  Guardar archivo.
Ctrl 





Ctrl 
+  x  Ctrl 
+ Guardar como.


w  




Ctrl
+
x
Ctrl
+ Cerrar Emacs.



 


c   
Minimizar Emacs.
+ z 

Ctrl 

+ h  t 
Abre un buffer con un breve tutorial
Ctrl 
de Emacs, se hace en 15 minutos.
  

+ h  m 
Abre un buffer con una breve deCtrl 
scripcion de los modos activos.

  
+ h  a 
Permite buscar entre las funciones
Ctrl 
de Emacs.

  
+ h  c 
Muestra en el minibuffer la funcion
Ctrl 
que ejecuta la combinacion de teclas
que se pulse a continuacion.

 
+g 
Salir del minibuffer.
Ctrl 
DCI - DIQEB, Universidad de Guanajuato

1.3 Ejercicios

1.2.4

Creando un programa ejecutable

El proceso de crear un programa ejecutable puede describirse en tres pasos (ver figura 1.4):
Preprocesador: Transforma el programa fuente, convirtiendolo en otro archivo fuente
predigerido. Elimina comentarios, incluye otros archivos y sustituye las definiciones.
Compilador: Convierte el fuente entregado por el preprocesador en un archivo en lenguaje
maquina: archivo objeto.
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

Figura 1.4: Procesos involucrados en la creacion de un 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:

DCI - DIQEB, Universidad de Guanajuato

1.3 Ejercicios
#include <s t d i o . h>
int main ( void )
{
p r i n t f ( Programacion b a s i c a . \ n ) ;
return 0 ;
}
El programa editado en GVim se observa en la figura 1.5

Figura 1.5: Edicion del programa1.c en el editor de textos GVim

2. Compilando y ejecutando el programa


Para compilar y ejecutar el programa, ejecute los siguientes comandos:
gcc programa1.c -o programa1.out
./programa1.out
La salida del programa se observa en la figura 1.6
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
DCI - DIQEB, Universidad de Guanajuato

1.3 Ejercicios

Figura 1.6: Compilacion y ejecucion del programa1.c

#include <s t d i o . h>


int main ( void )
{
p r i n t f ( Programacion b a s i c a . \ n ) ;
p r i n t f ( Programa e s c r i t o por : Arturo Vega . \ n ) ;
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:
#include <s t d i o . h>
int main ( void )
{
p r i n t f ( Programacion b a s i c a , usando un e d i t o r de p a l a b r a s . \ n ) ;
return 0 ;
}
Compile y ejecute el programa. Cual es la diferencia? Porque suceden estas diferencias?
DCI - DIQEB, Universidad de Guanajuato

1.3 Ejercicios
Cuales son las diferencias entre un editor de textos y un procesador de palabras?
Que herramienta se debe utilizar para escribir programas de computadora?

DCI - DIQEB, Universidad de Guanajuato

10

Pr
actica 2
Lenguaje de Programaci
on C
2.1

Introducci
on

En esta segunda practica se explora el lenguaje de programacion C, la estructura de un programa 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 o instruccion del algoritmo debe estar bien definido(a)
Un algoritmo debe tener un principio y un fin
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.

DCI - DIQEB, Universidad de Guanajuato

2.3 Lenguaje C

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.
1. Definicion del problema de forma clara y precisa (Determinar el problema)
2. Describir los datos de entrada, resultados esperados y en su caso variables requeridas
3. Realizar un ejemplo a mano
4. Desarrollar un algoritmo para solucionar el problema (diagrama de flujo, seudocodigo)
5. Codificar el algoritmo
6. Probar el algoritmo con una variedad de datos de entrada, donde para estos datos se
conoce el resultado.

2.2.2

Diagramas de Flujo y Pseudoc


odigo

Los diagramas de flujo son diagramas que emplean smbolos graficos para representar los
pasos o etapas de un algoritmo. Tambien nos ayudan a describir la interaccion de los pasos
y analizar la eficiencia del algoritmo.
El pseudocodigo nos ayuda a describir algoritmos en un lenguaje humano simplificado.
El pseudocodigo no es dependiente de ning
un lenguaje de programacion.

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
El Lenguaje C es un lenguaje estructurado, es decir, la estructura del texto del programa nos ayuda a entender la funcion que realiza (basado en el tipo de tarea que el
sistema debe realizar). Otros lenguajes como C++ y Java son orientados a objetos.

Primer programa:

DCI - DIQEB, Universidad de Guanajuato

12

2.3 Lenguaje C
#include <s t d i o . h>
int main ( void )
{
p r i n t f ( Programacion b a s i c a . \ n ) ;
return 0 ;
}
#include <s t d i o . h>

Inclusion de libreras o biblioteca de funciones (Archivos de cabecera) mediante:


#include

Entonces:
#include
#include
#include
#include

<s t d i o . h>
<math . h>
O t r a s F u n c i o n e s . h
b i b l i o t e c a . h

En nuestro programa se indica que incluya la librera estandar de entrada y salida (teclado
y pantalla)
int main ( void )

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:
int main ( int argc , char argv [ ] )

DCI - DIQEB, Universidad de Guanajuato

13

2.3 Lenguaje C

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
Indica salto de lnea
La ultima lnea es:
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.
Importante: Toda instruccion en C termina con punto y coma.

DCI - DIQEB, Universidad de Guanajuato

14

2.3 Lenguaje C

15
Tabla 2.1: Tipos de datos
char
signed
char
Enteros signed short signed int
int
unsigned
unsigned
short int
int
Reales float
double

2.3.1

en C
unsigned char
signed
long
int
unsigned long
int
long double

Tipos de datos

Tipos de datos
De forma abreviada:
Tabla 2.2: Tipos de datos en C, forma abreviada
char
signed
unsigned char
char
Enteros short
int
signed long
unsigned
unsigned unsigned long
short
Reales float
double
long double

2.3.2

Desplegando variables

La funcion printf nos permite desplegar valores


char c ;
...
p r i n t f ( %c , c ) ;
int i ;
...
p r i n t f ( %d , i ) ;
long x ;
...
p r i n t f ( %l d , x ) ;

DCI - DIQEB, Universidad de Guanajuato

2.3 Lenguaje C
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 ) ;

2.3.3

Introduciendo datos

La funcion scanf permite introducir datos desde el teclado


char c ;
...
s c a n f ( %c ,& c ) ;

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 ) ;

DCI - DIQEB, Universidad de Guanajuato

16

2.3 Lenguaje C

17

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 ) ;

2.3.4

Operadores Aritm
eticos

Los operadores aritmeticos nos permiten hacer operaciones como suma, resta, multiplicacion, division, etc.
El resultado de la operacion es dependiente del tipo de dato

Tabla 2.3: Operadores aritmeticos en lenguaje C


Operador
Descripcion

Resta
+
Suma

Multiplicacion
/
Division
%
Modulo
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
Expresion: Las expresiones son combinaciones de constantes, variables, operadores,
parentesis y nombres de funciones.

DCI - DIQEB, Universidad de Guanajuato

2.4 Ejercicios

2.4

18

Ejercicios

El objetivo de esta sesion es del de aprender a declarar variables de diferentes tipos y manipularlas en operaciones basicas.
NOTA: Todos los programas deben ir comentados y con el nombre del autor.
1. Edite y compile el siguiente programa y dibuje el diagrama de flujo asociado al programa.
#include <s t d i o . h>
int main ( void )
{
int v a l o r 1 , v a l o r 2 , suma ;
valor1
valor2
suma =
printf
return

= 50;
= 25;
valor1 + valor2 ;
( La suma de %d y %d e s %d\n , v a l o r 1 , v a l o r 2 , suma ) ;
0;

}
2. Para el siguiente diagrama de flujo, escriba, edite, compile y ejecute el programa en C
correspondiente. Considere tipos de datos enteros.
3. Asignacion de variables: Analice el siguiente programa y determine sin editar, compilar
y ejecutar el programa lo siguiente:
(a) Si las asignaciones son correctas
(b) El valor que tendra cada variable al finalizar el programa.

#include <s t d i o . h>


int main ( void )
{
double x = 1 . 3 4 3 , y ;
DCI - DIQEB, Universidad de Guanajuato

2.4 Ejercicios

19

Inicio

valor1,
valor2

suma = valor1 + valor2

suma

Fin

Figura 2.1: Diagrama de flujo para el inciso 2

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
DCI - DIQEB, Universidad de Guanajuato

2.4 Ejercicios
diferentes valores.

DCI - DIQEB, Universidad de Guanajuato

20

2.4 Ejercicios
5. Operaciones: el operador de division /, realiza su operacion de acuerdo al tipo de datos.
Si las variables o datos son int, entonces se realiza una division entera. Si los datos
o variables son float o doble, entonces se realiza una division con punto flotante. De
. Edite, compile y
acuerdo a esto, la salida del siguiente programa es:
ejecute el programa, Cual es la salida del programa? Explique el por que de ese valor.

#include <s t d i o . h>


int main ( void )
{
float a ;
a = 1 / 3;
p r i n t f ( %f \n , a ) ;
return 0 ;
}

DCI - DIQEB, Universidad de Guanajuato

21

Pr
actica 3
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.

3.2

Estructura y Compilaci
on

Estructura de un programa en Fortran


program programa1
print , Programacion b a s i c a
end program programa1
Para compilar y ejecutar el programa, ejecute los siguientes comandos:
gfortran programa1.f90 -o programa1.out
./programa1.out

3.2.1

Tipos de datos en fortran

Los diferentes tipos de datos se encuntran listados en la tabla ??

DCI - DIQEB, Universidad de Guanajuato

3.2 Estructura y Compilaci


on

Tabla 3.1: Tipos de datos en fortran


logical

Las variables logicas solo pueden tener dos valores:


.true. (verdadero) y .false. (falso).

integer

Valores enteros (sin punto decimal), guardados en 4


bytes.

real

Valores reales guardados en 4 bytes y con 8 cifras


significativas. Se indican con punto decimal, y de ser
necesario el exponente de la potencia de 10 despues
de una E: 1., -3.1416, 6.25E-10, etc.

double

Valores reales de doble precision guardados en 8


bytes y con16 cifras significativas, tambien se denotan por real(8). Se indican con punto decimal y el
exponente de la potencia de 10 despues de una D:
1.D0, -3.1416D0, 6.25D-10, etc. Son muy u
tiles en
calculos numericos largos, donde los errores de redondeo pueden hacer que las u
ltimas 4 o 5 cifras
significativas de un n
umero real sean basura.

complex

Dos valores reales formando un par y que en operaciones matematicas se tratan como la parte real e
imaginaria de un n
umero complejo: (1.,-2.), (1.0E0,2.0E0).
Tambien existen versiones de doble y
cuadruple precision.

character Variables que corresponden a cadenas de caracteres.


Al declarar una variable de este tipo se debe especificar cuantos caracteres puede tener. Estas variables deben estar contenidas en comillas: hola,
abcdef, etc.
quadruple Valores reales de cuadruple precision guardados en
16 bytes y con 32 cifras significativas, tambien se
denotan por real(16). Se indican con punto decimal
y el exponente de la potencia de 10 despues de una
Q: 1.Q0, -3.1416Q0, 6.25Q-10, etc.

DCI - DIQEB, Universidad de Guanajuato

23

3.2 Estructura y Compilaci


on

3.2.2

Desplegando Informaci
on

Una forma de desplegar la informacion en pantalla es mediante el comando print, como se


muestra en el siguiente ejemplo:
program programa2
! 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
end program programa2
Para indicar el formato de lectura en un programa en Fortran se utiliza una plantilla de
formato, como:

DCI - DIQEB, Universidad de Guanajuato

24

3.3 Ejercicios

25
Tabla 3.2: Opciones de formato en Fortran

Tipo
integer

Sintaxis
nIw

Ejemplo
2i4

Datos
1234, -12

Descripcion
n es el n
umero de enteros a leer y w el
n
umero total de caracteres contando el
signo.

real

nFw.d

2f8.3

1234.678,
-234.678

n es el de reales por leer, w es el n


umero
total de caracteres incluyendo el punto decimal y el signo y d es el n
umero de cifras
despues del punto decimal.

character

nAw

2a6

abcdef,
qwerty

n es el n
umero de palabras a leer y w el
n
umero de caracteres en cada palabra.

espacios

nx

2x

3.3

n es el n
umero total de espacios en blanco
a leer

Ejercicios

Los objetivo de esta sesion son:


Aprender a compilar y ejecutar un programa en Fortran
Aprender a declarar variables de diferentes tipos y manipularlas en operaciones basicas
en C y Fortran
Operaciones de entrada y salida en Fortran
NOTA: Todos los programas deben ir comentados y con el nombre del autor.

1. Incremento y decremento: Para el siguiente programa:


(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.
DCI - DIQEB, Universidad de Guanajuato

3.3 Ejercicios

26

#include <s t d i o . h>


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 ;
}
2. Dibuje el diagrama de flujo para calcular la area de un triangulo y escriba el programa
en C correspondiente.
area =

basealtura
2

Los datos de base y altura los debe preguntar el programa.

DCI - DIQEB, Universidad de Guanajuato

3.3 Ejercicios
3. Programa en Fortran: El siguiente programa es equivalente al programa1.c pero en
lenguaje de programacion Fortran

program programa1
print , Programacion b a s i c a
end program programa1

Para compilar y ejecutar el programa, ejecute los siguientes comandos:


gfortran programa1.f90 -o programa1.out
./programa1.out
Edite, compile y ejecute el programa 1 en Fortran. Que diferencias nota entre C y
Fortran? En Fortran cual es la instruccion equivalente a la instruccion printf de C ?
4. Variables en Fortran: El siguiente programa es equivalente al programa de la practica
2 pero en lenguaje de programacion Fortran

program programa2
real x , y
integer i
x = 1.23
i = x
y = i
print , x , i , y
end program programa2
DCI - DIQEB, Universidad de Guanajuato

27

3.3 Ejercicios

Figura 3.1: Consola en Linux. Se muestra la forma de compilar y ejecutar el programa en


Fortran. Observe la salida del programa.

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?
5. Lectura de datos en Fortran: Edite, compile y ejecute el siguiente programa (programa3.f90):

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
DCI - DIQEB, Universidad de Guanajuato

28

3.3 Ejercicios
a = 2.5
b = a +
c = a +
Bandera
j = i
texto =

29

i
a
= . false .
2
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

Figura 3.2: Consola en Linux. Se muestra la forma de compilar y ejecutar el programa en


Fortran. Observe la salida del programa.

Funcionan las operaciones aritmeticas igual en C y Fortran? Como funciona el operador de division /, en Fortran? En C hay un tipo de dato equivalente al tipo logical
de Fortran ?

DCI - DIQEB, Universidad de Guanajuato

3.3 Ejercicios
6. Entrada y salida en Fortran: En Fortran la entrada y salida de datos se realiza mediante
las funciones read(,) y write(,). Ambas funciones tienen dos argumentos, el primero
indica la unidad de entrada o salida, y el segundo indica el formato en el que estan
los datos. La version mas simple es:
read(*,*)
write(*,*)
Aqu el primer * indica la entrada o salida estandar (teclado o pantalla) y el segundo
* indica formato libre. La instruccion write(*,*) puede ser substituida por print *
seguido de una coma.
Edite, compile y ejecute el siguiente programa (programa4.f90):

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
! Pregun ta r por e l nombre d e l u s u a r i o .
print
write ( , ) Cua l e s tu nombre ?
print
! 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
! U t i l i z a r l a v a r i a b l e para r e f e r i r n o s a l u s u a r i o por su nombre .
print
write ( , ) Hola , nombre , Como e s t a s ?
print
end program programa4

DCI - DIQEB, Universidad de Guanajuato

30

3.3 Ejercicios
Que observa en la salida del programa? Que sucede si el nombre es mayor de 20
caracteres? Que indica la instruccion implicit none?
7. Entrada y salida con formato. Para indicar el formato de lectura en un programa en
Fortran se utiliza una plantilla de formato, ejemplo:
read ( , ( i 4 ) ) m
read ( , 1 0 0 ) i
100 format ( i 4 )
read ( , 1 0 0 ) n
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
El siguiente programa ejemplifica la lectura de datos con formato.

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 )
DCI - DIQEB, Universidad de Guanajuato

31

3.3 Ejercicios
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
end program programa5

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 especificamos 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.

DCI - DIQEB, Universidad de Guanajuato

32

Pr
actica 4
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.

4.2

Secuencias de Control

Las secuencias de control o secuencias de decision permiten tomar un curso de accion determinado por una condicion dada. Para evaluar la condicion los lenguajes de programacion
utilizan operadores relacionales y logicos. En las siguientes secciones se comentara brevemente los operadores y las diferentes secuencias de control.

4.2.1

Operadores relacionales y l
ogicos

Los operadores pueden dividirse en las clases siguientes: aritmeticos, relacionales y logicos.
Los primeros se revisaron en las practicas anteriores y son u
tiles en la manipulacion de operaciones aritmeticas. Los operadores relacionales y logicos se utilizan para producir resultados
VERDADERO / FALSO y frecuentemente se utilizan juntos. En C cualquier n
umero distinto de cerose considera VERDAD. Sin embargo, una expresion relacional o logica produce
el n
umero 1 para VERDAD y el 0 (cero) para FALSO. Fortran tiene un tipo de dato logico
(.logic.) para la manipulacion de resultados relacionales o logicos. A continuacion se listan
los operadores relacionales y logicos para ambos lenguajes de programacion.

DCI - DIQEB, Universidad de Guanajuato

4.2 Secuencias de Control


Tabla 4.1: Operadores
C
Fortran
>
>
>=
>=
<
<
<=
<=
==
==
!=
/=
&&
||
!

4.2.2

34
relacionales y logicos en C y Fortran
Fortran
Descripcion
.GT.
Mayor que
.GE.
Mayor o igual que
.LT.
Menor que
.LE.
Menor o igual que
.EQ.
Igual que
.NE.
Diferente que
.AND.
AND logico
.OR.
OR logico
.NOT.
NOT logico

Condicional Si-Entonces

La secuencia de control Si-Entonces nos ayuda para realizar un proceso dependiendo de una
condicion o pregunta (ver figura 4.1 y tabla 4.2).

NO
Condicin

SI

Proceso

Figura 4.1: Diagrama de flujo de la secuencia de control si-entonces

DCI - DIQEB, Universidad de Guanajuato

4.2 Secuencias de Control

35

Tabla 4.2: Expresiones en lenguaje de programacion para la secuencia de control si-entonces


C

Fortran

i f ( c o n d i c i o n )
{
proceso
}

i f ( c o n d i c i o n ) then
proceso
endif

4.2.3

Condicional Si-Entonces-sino

Nos ayuda para realizar uno u otro proceso dependiendo de una condicion o pregunta (ver
figura 4.2 y tabla 4.3).

SI

NO
Condicin

Proceso

Proceso

Figura 4.2: Diagrama de flujo de la secuencia de control si-entonces

DCI - DIQEB, Universidad de Guanajuato

4.2 Secuencias de Control

36

Tabla 4.3: Expresiones en lenguaje de programacion para la secuencia de control si-entoncessino


C

Fortran

i f ( c o n d i c i o n )
{
proceso 1
}
else
{
proceso 2
}

i f ( c o n d i c i o n ) then
proceso 1
else
proceso 2
endif

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

DCI - DIQEB, Universidad de Guanajuato

4.2 Secuencias de Control

37

En Fortran cada secuencia IF puede tener asociado un nombre. El compilador verificara


que la secuencia de ifs anidados sea consistente!
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)

Proceso

Proceso

Proceso

Figura 4.3: Diagrama de flujo de la secuencia de seleccion de caso

DCI - DIQEB, Universidad de Guanajuato

4.2 Secuencias de Control

38

Fortran

switch ( o p c i o n )
{
case A : P r o c e s o 1 ;
break ;
case B : P r o c e s o 2 ;
break ;
case C : P r o c e s o 3 ;
break ;
default : P r o c e s o n ;
break ;
}

s e l e c t case ( o p c i o n )
case ( A )
proceso 1
case ( B )
proceso 2
case ( C )
proceso 3
case default
proceso n
end s e l e c t

DCI - DIQEB, Universidad de Guanajuato

4.3 Ejercicios

4.3

Ejercicios

Los objetivo de esta sesion son:


Solucionar dudas sobre sesiones anteriores
Comprender como funcionan las secuencias de control en C y Fortran
NOTA: Todos los programas deben ir comentados y con el nombre del autor.

1. Operaciones aritmeticas: Explique el proposito de cada una de las siguientes expresiones


(a) a b
(b) a (b + c)
(c) a >= b
(d) (a%5) == b
(e) d = a (b + c)
2. Manipulacion de variables: Un programa en C contiene las siguientes declaraciones

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 ;

Determine el valor de cada una de las siguientes expresiones:


(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
DCI - DIQEB, Universidad de Guanajuato

39

4.3 Ejercicios

40

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.
4. Escriba un programa en Fortran que realice el algoritmo del inciso anterior
5. El diagrama de flujo de la figura 1 describe el algoritmo para obtener el promedio de 5
n
umeros. Con ayuda del diagram de flujo, escriba un programa en Fortran que realice
el algoritmo. Considere que los datos son enteros y el promedio de tipo real o punto
flotante.
Inicio

C1, C2,
C3, C4,
C5

Prom = (C1 + C2 +
C3 + C4 + C5) /5

Prom

Fin

Figura 4.4: Promedio de 5 n


umeros. Diagrama de flujo para la lectura de cinco n
umeros y
estimacion de su promedio

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
DCI - DIQEB, Universidad de Guanajuato

4.3 Ejercicios
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, encuentre 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)?
14. El siguiente programa en C utiliza la secuencia switch para imprimir un mensaje de
acuerdo al valor entero que teclee el usuario. Tan solo observando el listado, Cual es
la salida del programa para el numero 3 y cual para el n
umero 12?

DCI - DIQEB, Universidad de Guanajuato

41

4.3 Ejercicios

42

#include <s t d i o . h>


i n t main ( v o i d )
{
int i ;
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 :
case 5 :
case 3 :
case 2 :
case 1 :
default :

p r i n t f ( \n El numero e s c u a t r o \n ) ;
p r i n t f ( \n El numero e s c i n c o \n ) ;
p r i n t f ( \n El numero e s t r e s \n ) ;
p r i n t f ( \n El numero e s dos \n ) ;
p r i n t f ( \n El numero e s uno\n ) ;
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 ) ;
}

DCI - DIQEB, Universidad de Guanajuato

Pr
actica 5
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

Secuencias de repetici
on

Las secuencias de repeticion, conocidas tambien como secuencias iterativas, permiten que un
segmento de programa se ejecute n veces hasta que se cumpla una condicion dada. Esta clase
se secuencias explota la velocidad de la computadora y ayudan a realizar procesos que se
repiten.
Nos ayuda para realizar un proceso de forma repetitiva
Iteracion: Un bloque de codigo es repetido hasta que una condicion se cumpla. La
condicion puede ser evaluada antes o despues de que se ejecute el codigo
Se utilizan las secuencias de repeticion: While, For y DO
No se utiliza la sentencia goto en ninguno de los casos

5.2.1

for - do

Las secuencias de repeticion for y do permiten que un segmento determinado de un programa se ejecute n veces. Esta secuencia de repeticion tambien se conoce como secuencia de
DCI - DIQEB, Universidad de Guanajuato

5.2 Secuencias de repetici


on

44

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.
El control se realiza mediante el uso de un ndice o contador.
Esta secuencia de repeticion consta de tres partes , una inicializacion del contador,
una condicion de terminacion y un incremento o decremento del contador.
Se utiliza la instruccion for en C o DO en Fortran
while y do-while tambien se puede tambien utilizar como una secuencia de repeticion
indizada si se incluyen las tres partes por separado.

Inicializacin

Condicin

NO

SI
Proceso

Incremento

Figura 5.1: Diagrama de flujo de una secuencia de repeticion for o do

Esta secuencia de repeticion consta de tres partes, una inicializaci


on del contador,
una condici
on de terminacion y un incremento o decremento del contador.
DCI - DIQEB, Universidad de Guanajuato

5.2 Secuencias de repetici


on

45

Se utiliza la instruccion for en C o DO en Fortran


La sintaxis en C y Fortran es como sigue:
C
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
for ( k=1 ; k <= 12 ; k++)
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

DCI - DIQEB, Universidad de Guanajuato

5.2 Secuencias de repetici


on

5.2.2

46

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 )
{
proceso ;
}

do while ( c o n d i c i o n )
proceso
enddo

Condicion al final de la secuencia (do-while):


C
Fortran
do
{
proceso ;
} while ( c o n d i c i o n ) ;

Nota :
F o rt r a n no p r o v e e una o p c i o n
para v e r i f i c a r l a 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 !

DCI - DIQEB, Universidad de Guanajuato

5.2 Secuencias de repetici


on

47

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.

DCI - DIQEB, Universidad de Guanajuato

5.2 Secuencias de repetici


on

5.2.3

48

Ciclos infinitos

Ciclos infinitos son aquellos bloques de codigo que utilizan secuencias de repeticion que se
repiten indefinidamente.
C
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
C
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)
DCI - DIQEB, Universidad de Guanajuato

5.3 Ejercicios

49

break ;
p r i n t f ( Entre 1 y 10

!! );

5.3

Ejercicios

Los objetivo de esta sesion son:


1. Solucionar dudas sobre sesiones anteriores
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
1. Evaluacion y terminacion de un ciclo for: Que diferencia existe en el comportamiento
del ciclo for cuando se altera la condicion dentro del cuerpo del ciclo?

(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 :
enddo

DCI - DIQEB, Universidad de Guanajuato

,k

5.3 Ejercicios

50

2. Ciclos: En el siguiente programa el primer ciclo funciona, pero el segundo no. Por
que? Que modificara para que funcione?

#include <s t d i o . h>


int main ( void )
{
short int i ;
signed char ch ;
for ( i = 0 x80 ; i != 0 ; i = ( i >> 1 ) ) {
p r i n t f ( i e s %x (%d ) \n , i , i ) ;
}
for ( ch = 0 x80 ; ch != 0 ; ch = ( ch >> 1 ) ) {
p r i n t f ( ch e s %x (%d )\ n , ch , ch ) ;
}
return ( 0 ) ;
}

3. Escriba un programa en C y uno en Fortran que a partir de un numero N, dado por el


usuario, despliegue la suma de los numero impares y la multiplicacion de los numero
pares de la secuencia de 1 a N. El numero N tiene que ser mayor que 0 y menor que
20. De otra forma el programa debe indicar el error con el mensaje Por favor, teclea
un numero entero entre 1 y 20. y volver a pedir el dato (N). Por ejemplo si el N es 5
entonces la salida debe ser:
T e c l e a N: 5
La suma de l o s impares e s : 9
El prod ucto de l o s p a r e s e s : 8
Como ayuda recuerde que:

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 )
{
DCI - DIQEB, Universidad de Guanajuato

5.3 Ejercicios

51

proceso
}
y
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

4. Escriba un programa en C o Fortran, que muestre una tabla de multiplicar el programa:


(a) Debe utilizar secuencias de repeticion
(b) Preguntar un n
umero del 1 al 10
(c) Si el n
umero no cumple con la condicion anterior, contin
ue preguntando por un
n
umero valido
(d) Una vez que se obtenga un n
umero valido, imprimir la tabla de multiplicar correspondiente a ese n
umero
(e) La tabla de multiplicar debe contener las 10 primeras multiplicaciones (1 al 10) y
(f) la salida debe ser similar a:

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
1
1
1
1
1
1
1
1

x
x
x
x
x
x
x
x
x

1
2
3
4
5
6
7
8
9

=
=
=
=
=
=
=
=
=

1
2
3
4
5
6
7
8
9

DCI - DIQEB, Universidad de Guanajuato

5.3 Ejercicios
1 x 10 = 10
G r a c i a s por u s a r e s t e programa .

DCI - DIQEB, Universidad de Guanajuato

52

Pr
actica 6
Arreglos y Estructuras de Datos
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 distinguirlos
La notacion xi es equivalente en C a: x[i]. donde i es el ndice de la variable x
El conjunto de datos se almacena en espacios de memoria contigua.
Los indices en C comienzan en cero (0)
Los indices en Fortran generalmente comienzan en uno (1), pero se puede especificar el
rango de los indices.
Los arreglos pueden ser n-dimensionales.

DCI - DIQEB, Universidad de Guanajuato

6.2 Arreglos

54
x[0]
15

x[1]
19

x[2]
6

Figura 6.1: Representacion grafica de un arreglo. La figura muestra la representacion grafica


del vector x. En la parte superior se tiene la forma de hacer referencia a un componente o
elemento particular del vector. Por ejemplo x[1] significa que se hace referencia al elemento
2 del vector x (ya que en C los ndices comienzan en cero). En la parte inferior se muestra el
contenido de cada elemento, as, el contenido del componente 2 del vector x es 19.

6.2.1

Declaraci
on de arreglos

C
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 )

6.2.2

Cadena de caracteres

Cadena o string se utiliza para manipular smbolos o caracteres alfanumericos


Una Cadena es basicamente un arreglo de caracteres o del tipo char
La terminacion de la cadena se debe especificar con un caracter nulo \0
Por lo que hay que considerar un espacio mas!
Las cadenas no se manipulan igual que los enteros o flotantes
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).
DCI - DIQEB, Universidad de Guanajuato

6.2 Arreglos

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 caracteres.
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>
int main ( void ) {
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 ) ;
}
Figura 6.2: Ejemplo 1 de declaracion y manipulacion de una cadena de caracteres en lenguaje
C.

DCI - DIQEB, Universidad de Guanajuato

55

6.2 Arreglos

#i n c l u d e <s t d i o . h>
int main ( void ) {
char nombre [ 1 5 ] , a p e l l i d o s [ 3 0 ] , nombrecompleto [ 5 0 ] ;
nombre = Ana Mara ; \ I n c o r r e c t o \
a p e l l i d o s = go mez go mez ; \ I n c o r r e c t o \
nombrecompleto = nombre + a p e l l i d o s ; \ I n c o r r e c t o \
}
Figura 6.3: Ejemplo 2 de declaracion y manipulacion de una cadena de caracteres en lenguaje
C. Los elementos de la cadena deben manipularse de forma individual

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 .
Figura 6.4: Ejemplo 3 de declaracion y manipulacion de una cadena de caracteres en lenguaje
C. ejemplo de getchar y scanf para leer mientras exista un dato

DCI - DIQEB, Universidad de Guanajuato

56

6.3 Estructura de Datos

6.3
6.3.1

57

Estructura de Datos
struct

Una estructura de datos es:


Conjunto de N elementos que estan agrupados por medio de un u
nico nombre.
Pueden ser de distinto tipo
Es un tipo definido dentro del programa
Los elementos o miembros de la estructura pueden a su vez ser otra estructura

int

double

cha
r

float

_
tro

o
tip

...

Figura 6.5: Representacion conceptual de una estructura de datos

struct
Definicion y declaracion en C (1)
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)
DCI - DIQEB, Universidad de Guanajuato

6.3 Estructura de Datos


struct Nombre
{
t i p o 1 Campo1 ;
t i p o 2 Campo2 ;
...
tipoN CampoN ;
};
Declaracion
struct Nombre Var1 ;

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 ] ;
Figura 6.6: Ejemplo de arreglos de estructuras de datos en C. La estructura contiene arreglos
y se declaran arreglos de la estructura.

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
DCI - DIQEB, Universidad de Guanajuato

58

6.3 Estructura de Datos


donde hidrogeno es una variable del tipo elemento
Acceso a los elementos de una estructura de datos.
Se realiza indicando nombre de la variable tipo estructura y el elemento individual
separados por un porciento %
VariableEstructura%ElementoEstructura
El procesamiento de una estructura solo se puede hacer elemento por elemento.
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
Figura 6.7: Ejemplo 1 de declaracion y manipulacion de una estructura en Fortran

6.3.3

union

Conjunto de N elementos que estan agrupados por medio de un u


nico nombre.
Pueden ser de distinto tipo
Es un tipo definido dentro del programa
Los elementos o miembros de la estructura pueden a su vez ser otra union
Se utiliza la palabra reservada union para declarar una union
Entonces, Cual es la diferencia entre una estructura y una union?
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 memoria.
DCI - DIQEB, Universidad de Guanajuato

59

6.3 Estructura de Datos

60

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 ) )
r ead ,A%x ,A%y
r ead ,B%x , B%y
Figura 6.8: Ejemplo 2 de declaracion y manipulacion de una estructura en Fortran

Los miembros pueden ser de distinto tipo


El tama
no de una union es el de su miembro de mayor tama
no
Es una variable la cual podra guardar (en momentos diferentes) objetos de diferentes tama
nos y tipos
Cuando dos o mas variables comparten la misma memoria, entonces se define una union.
ejemplo:
union tom
{
char ch ;
int x ;
} t;
El codigo anterior declara una union que se vera as en memoria.

X
byte 1

ch
DCI - DIQEB, Universidad de Guanajuato

byte 2

6.3 Estructura de Datos


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
union Nombre VarU ;
El acceso es de forma similar a la de una estructura
Se realiza indicando nombre de la variable tipo union y el elemento individual
separados por un punto .
VariableUnion.ElementoUnion
Cuando se utilizan apuntadores (pointer), el separador es: >
VariableUnion->ElementoUnion
El procesamiento de una union solo se puede hacer elemento por elemento.
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.

DCI - DIQEB, Universidad de Guanajuato

61

6.3 Estructura de Datos

62

union word byte / Se d e c l a r a l a union w o r d b y t e


{
unsigned short word ;
/ 2 b y t e s /
unsigned char byte [ 2 ] ; / 2 b y t e s /
};
/ El tama
n o de l a union e s de dos b y t e s /

union word byte wb ; / Se d e c l a r a una v a r i a b l e t i p o union /


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 /

/ Por medio d e l o t r o miembro s e a c c e s a e l v a l o r a s i g n a d o /


p r i n t f ( byte b a j o : %d\n , wb . byte [ 0 ] ) ;
p r i n t f ( byte a l t o : %d\n , wb . byte [ 1 ] ) ;

/ 10 /
/

15 /

Figura 6.9: Ejemplo de declaracion y manipulacion de una union en lenguaje C.

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
Se declara de forma similar a la de una estructura:

enum nombre enumeracion { l i s t a d e e n u m e r a c i o n } l i s t a d e v a r i a b l e s ;


Los valores de una enumeracion se inician con 0 a menos que se indique otro valor, y
se incrementan en 1.
Los identificadores en una enumeracion deben ser u
nicos. Los nombres de las constantes
no pueden ser modificados en el programa.

6.3.5

typedef

Typedef: Nuevos tipos de datos


DCI - DIQEB, Universidad de Guanajuato

6.3 Estructura 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 )
...

enum ComunidadDCI { a d m i n i s t r a t i v o =200 , e s t u d i a n t e , p r o f e s o r } ;


...
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 =200 , p r o f e s o r } ;
Figura 6.10: Ejemplo de declaracion y manipulacion de una enumeracion en lenguaje C.

Se puede dar un nombre nuevo a cualquier tipo de datos mediante typedef.


Es com
un utilizarlo para dar un alias o sinonimo al nombre de la estructura, de esta
forma se evita el tener que poner struct NombreEstructura cada vez que se declare
una variable.
Sintaxis:
typedef struct
{
...
} NombreEstructura ;
...
NombreEstructura V a r i a b l e ;

DCI - DIQEB, Universidad de Guanajuato

63

6.4 Ejercicios
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 ;
sdireccion info direccion ;
s d i r e c c i o n Agenda [ 1 0 0 ] ;
e n t e r o a , b=3;
Figura 6.11: Ejemplo de declaracion y manipulacion de una struct en lenguaje C utilizando
typedef.

6.4

Ejercicios

Los objetivo de esta sesion son:


1. Solucionar dudas sobre sesiones anteriores
2. Comprender como funcionan los arreglos y su relacion con las secuencias de repeticion
3. Comprender como funcionan las estructuras
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
1. El siguiente programa en Fortran ejemplifica el uso de arreglos (declaracion y manipulacion).
(a) Comente el programa
(b) Modifique el programa anterior para que imprima la matriz a, b y c en una forma
mas entendible (filas y renglones)
DCI - DIQEB, Universidad de Guanajuato

64

6.4 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 despliegue 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?

DCI - DIQEB, Universidad de Guanajuato

65

6.4 Ejercicios
for ( i = 0 ; i <
for ( i = 0 ; i <

66
9 9 ; i ++) a [ i ]= 98 i ;
9 9 ; i ++) a [ i ]= a [ a [ i ] ] ;

5. Contando n
umeros: Escriba un programa en C o Fortran que (programa15):
(a) El programa debe utilizar secuencias de repeticion
(b) El programa debe utilizar arreglos
(c) Pregunte un n
umero del 1 al 20
(d) Si el n
umero no cumple con la condicion anterior, contin
ue preguntando por un
n
umero valido
(e) Una vez que se obtenga un n
umero valido, solicite al usuario tantos n
umeros como
haya indicado en el primer numero.
(f) Almacene los n
umeros en un arreglo
(g) Cuente cuantos n
umeros del arreglo son menores a 10 y cuantos mayores a 100
(h) Despliegue en pantalla el resultado de la operacion.
(i) Posteriormente pregunte al usuario por un numero.
(j) El programa debe buscar si el n
umero solicitado se encuentra en el arreglo de
numeros
(k) Si el n
umero se encuentra en el arreglo desplegar la posicion en la que se encuentra
(ejemplo: El numero se encuentra en la posici
on 3)
(l) Si el n
umero no se encuentra en el arreglo indicarlo con un mensaje (ejemplo: El
n
umero no se encuentra en la lista)
6. Escriba un program en Fortran que lea una matriz de 5 renglones y 5 columnas de
valores enteros. Una vez leda la matriz el programa debe desplegar la matriz en forma
ordenada y debe desplegar un men
u para realizar las siguientes operaciones:
1. Mnimo y maximo de la matriz
2. Buscar un n
umero
3. Promedio de los valores de la matriz
4. Promedio por renglones
5. Promedio por columnas
DCI - DIQEB, Universidad de Guanajuato

6.4 Ejercicios

67

6. Elementos mayores al promedio


7. Elementos menores al promedio
8. Salir del programa
El programa debe regresar al men
u despues de realizar la operacion seleccionada (excepto cuando se selecciona - salir del programa-, aqu el programa finaliza)
En la opcion numero dos, el programa debe preguntar al usuario por el n
umero a buscar.
En las opciones 1, 2, 6 y 7 el programa debe indicar la posicion del elemento(s), as
como el valor del elemento (ejemplo: El n
umero 80 se encuentra en la posicion a(2,3),
Los elementos mayores al promedio son: a(1,1) = 100, a(3,2) = 300, etc. )
7. Dibuje un diagrama de flujo que lea dos matrices del mismo tama
no (numero de renglones 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:

ci,j =

m
X

ai,k bk,j i, j

k=1

8. Escriba un programa en C y uno en Fortran que lea un numero entero y despliegue


como salida la suma de cada uno de los dgitos que forman al n
umero leido. Ejemplo:
si el n
umero de entrada es 2155, entonces la salida debe ser: 13 (2+1+5+5).
9. Escriba un programa en C que :
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
d(P1 , P2 ) =

(x2 x1 )2 + (y2 y1 )2

DCI - DIQEB, Universidad de Guanajuato

Pr
actica 7
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.

El preprocesador tiene su propio lenguaje


Los programas son mas faciles de leer
Los programas son mas faciles de modificar
Facilita la transferencia a otros arquitecturas
#include

Se utiliza para incluir otro archivo de definiciones o archivo de biblioteca y de esta forma
compilar otro archivo.
#include <archivo>
DCI - DIQEB, Universidad de Guanajuato

7.2 El preprocesador de C

69

#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.
#define <Nombre-Cte-Macro> <Nombre-de-Remplazo>
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
#i f ,

e s %d\n , A[ i ] , B [ i ] , MIN(A[ i ] , B [ i ] ) ) ;

#i f d e f

Eval
ua una expresion constante entera. Siempre se debe terminar con #endif para delimitar el fin de esta sentencia. Se puede utilizar else ( #elif o #else)
Elemplo
#define
#define

Maximo 300
Minimo 0

#define MEX 0
DCI - DIQEB, Universidad de Guanajuato

7.2 El preprocesador de C
#define EUA 1
#define GB 2
#define PAIS ACTIVO MEX
#i f PAIS ACTIVO == MEX
char moneda [ ] = p e s o s ;
#e l i f PAIS ACTIVO == EUA
char moneda [ ] = d o l a r ;
#e l s e
char moneda [ ] = l i b r a ;
#endif
Otro metodo de compilacion condicional es utilizar las clausulas #ifdef y #ifndef. Sintaxis:

#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.

DCI - DIQEB, Universidad de Guanajuato

70

7.3 Funciones en C

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.
Una funcion es un conjunto de instrucciones (declaraciones, definiciones, ...), que realizan una tarea especifica.
En C, la funcion main es la que indica donde comienza la ejecucion de nuestro programa,
es decir es la funcion principal
Funciones vs. Procedimientos
Una funcion regresa un valor
Un procedimiento no regresa un valor, pero puede modificar sus argumentos.
En C, una funcion puede o no regresar un valor y puede o no modificar sus argumentos.
Recordando el primer programa ...
#include <s t d i o . h>
int main ( void )
{
p r i n t f ( Programacion b a s i c a . \ n ) ;
return 0 ;
}
Podemos escribir una funcion que realice lo mismo
void imprimeMensaje ( void )
{
p r i n t f ( Programacion b a s i c a . \ n ) ;
}
La diferencia entre la funcion imprimeMensaje y la funcion main, esta en la primer linea,
la cual indica:
DCI - DIQEB, Universidad de Guanajuato

71

7.3 Funciones en C

72

Quien puede invocarla


El tipo de valor que regresa
Su nombre
Los argumentos que requiere
Escribiendo e invocando una funcion. Valor de retorno?
#include <s t d i o . h>
void imprimeMensaje ( void )
{
p r i n t f ( Programacio n b a s i c a . \ n ) ;
}
int main ( void )
{
imprimeMensaje ( ) ;
return 0 ;
}
El formato general de una funcion en C es:
Tipo dato que regresa
Nombre De La Funcio n ( L i s t a d e A r g u m e n t o s )
{
D e c l a r a c i o n de v a r i a b l e s l o c a l e s
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 DCI - DIQEB, Universidad de Guanajuato

7.4 Funciones y procedimientos en Fortran


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 )
{
int m; // d e c l a r a l a v a r i a b l e m para almacenar e l r e s u l t a d o
i f ( a<b )
m = a;
else
m = b;

// a s i g n a un v a l o r de acuerdo a l o s par
a metros

return (m) ;

// r e g r e s a e l v a l o r

7.4

Funciones y procedimientos en Fortran

Una funcion o procedimiento es un conjunto de instrucciones (declaraciones, definiciones, ...), que realizan una tarea especifica (unidad programatica).
En Fortran, el procedimiento program es la que indica donde comienza la ejecucion de
nuestro programa, es decir es el programa principal (procedimiento principal)
Funciones vs. Procedimientos
Una funcion regresa un valor
Un procedimiento no regresa un valor, pero puede modificar sus argumentos.
En Fortran existen cuatro tipos de unidades programaticas:
1. program que es la unidad programatica principal.
DCI - DIQEB, Universidad de Guanajuato

73

7.4 Funciones y procedimientos en Fortran


2. subroutine (subrutina o procedimiento) unidad programatica que contempla instrucciones ejecutables.
3. function (funcion) unidad programatica que contempla instrucciones ejecutables
4. module unidad programatica que contempla instrucciones de declaracion de variables,
inicializacion de variables, interfaces entre funciones y subrutinas.
Una subrutina es subprograma de orden jerarquico de nivel inferior al programa principal.
Sintaxis:
subroutine <nombre >[(< argumentos ( f i c t i c i o s ) >)]
! 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 l o s argumentos ( f i c t i c i o s )
:
! 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 l o s o b j e t o s ( v a r i a b l e s ) l o c a l e s
:
! instrucciones ejecutables
:
end subroutine <nombre>
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.
< i d e n t i f i c a c i o n unidad p rograma tica >
:
c a l l <nombre>[<argumentos ( usados ) >]
:
end <unidad p rogram a ti ca >
Ejemplo: procedimiento para obtener el area de un crculo
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
DCI - DIQEB, Universidad de Guanajuato

74

7.4 Funciones y procedimientos en Fortran

75

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:
FUNCTION Nombre funcion ( l i s t a de argumentos ) RESULT ( v a r i a b l e r e s u l t a d o )
DCI - DIQEB, Universidad de Guanajuato

7.4 Funciones y procedimientos en Fortran


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
FUNCTION Mayor (A, B,C) RESULT (D)
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
DCI - DIQEB, Universidad de Guanajuato

76

7.5 Ejercicios

END FUNCTION Mayor

7.5

Ejercicios

Los objetivo de esta sesion son:


1. Solsucionar dudas sobre sesiones anteriores
2. Comprender como operan los arreglos , estructuras y su relacion con las funciones y
procedimientos
3. Comprender el uso de funciones y procedimientos
4. comprender el alcance de las variables.
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
1. El siguiente programa en Fortran calcula las potencias de un conjunto de n
umeros dados
por el usuario. El programa utiliza una funcion y un procedimiento.
Edite y compile el programa
Verifique su funcionamiento
Comente el programa
A partir del codigo fuente genere el diagrama de flujo correspondiente.

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 ;
DCI - DIQEB, Universidad de Guanajuato

77

7.5 Ejercicios

78

integer k
do while ( ( Max . l t . 0 ) . o r . (Max . g t . 1 0 ) )
print , Cuantos numeros d e s e a s c a l c u l a r su p o t e n c i a (1 10)?
read ,Max
enddo
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
end program Cpotencia

subroutine l e e d a t o s ( dat , nPot , n )


integer : : j , n
real , dimension ( 1 0 ) : : dat
integer , dimension ( 1 0 ) : : nPot
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)
DCI - DIQEB, Universidad de Guanajuato

7.5 Ejercicios
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

2. Modifique la funcion potencia descrita anteriormente, como se muestra a continuacion


y mencione cuales son las diferencias al ejecutar el programa. Cual es su explicacion
para que exista tal diferencia?
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 = 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
3. Escriba un programa en Fortran que lea un arreglo de enteros de 10 elementos y encuentre el minimo y maximo, utilizando funciones y procedimientos
4. Escriba un programa en Fortran que lea un arreglo de enteros de 10 elementos y los
ordene. Utilize funciones y procedimientos
5. Escriba un programa en Fortran para resolver un sistema de partculas cargadas. El
programa debe utilizar funciones y subrutinas. El programa tambien puede utilizar
estructuras.
DCI - DIQEB, Universidad de Guanajuato

79

7.5 Ejercicios

80

Considere un sistema de N = 100 partculas puntuales, confinadas en el plano xy


dentro de una caja cuadrada de longitud L = 10. Dichas partculas interaccionan va
el potencial de Coulomb, es decir
u(|~rij |) = K

qi qj
|~rij |

donde qi y qj son la carga de i-esima y j-esima partcula respectivamente, K es la


amplitud del potencial de Coulomb y |~rij | es la distancia que hay entre las dos partculas.
|~rij | = |~ri ~rj |
En ausencia de un campo externo, la energa de exceso total se define como:
N

Uexc

1 XX
u(|~rij |)
=
2 i=1 j=1

Notas:
(a) Utilice un generador de n
umeros aleatorios para colocar las N partculas de manera
aleatoria dentro de la caja cuadrada.
(b) Calcule la energa de exceso total considerando que 500 partculas tienen carga
q+ = 1 y el resto tienen carga q = 1 para un valor de K = 1.8.
(c) Todos los valores son adimensionales
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 peque
no. Definir otra macro
min3(a,b,c) en terminos de min(a,b). Incorporar las macros en un programa demostrativo en donde se pida al usuario tres n
umeros y se muestre el mas peque
no.
8. El siguiente programa en C calcula la distancia entre dos puntos utilizando la siguiente
ecuacion:

d(P1 , P2 ) =

(x2 x1 )2 + (y2 y1 )2

DCI - DIQEB, Universidad de Guanajuato

7.5 Ejercicios

81

Modifique el programa para que el calculo de la distancia se realice mediante una


funcion llamada Distancia

#include <s t d i o . h>


#include <math . h>
int main ( void )
{
struct Punto {
double x ;
double y ;
};
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 )
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 )
s c a n f ( %l f %l f , &B . x , &B . y ) ;

\n ) ;
\n ) ;

// 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 .
D i s t a n c i a = s q r t ( pow ( (B . xA. x ) ,2)+pow ( (B . yA. y ) , 2 ) ) ;
p r i n t f ( La d i s t a n c i a e s : %l f \n , D i s t a n c i a ) ;
return ( 0 ) ;
}

Nota: Recuerde que para crear el ejecutable incluir la libreria math.h en el enlazador
(caso particular de fedora)
gc c NombrePrograma . c lm o NombrePrograma . out

DCI - DIQEB, Universidad de Guanajuato

Pr
actica 8
Apuntadores y Archivos
8.1

Introducci
on

Esta practica introduce al estudiante al uso de apuntadores y archivos en lenguaje C. Al termino 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.
Un apuntador es una variable que almacena la direccion de memoria donde el dato de
interes esta almacenado.
Cuando deseamos que un apuntador no contenga una direccion asociada a un dato, se
dice que el apuntador no apunta a ning
un lado y se expresa como NULL.
Cuando se declara un apuntador, una cierta cantidad de memoria se reserva para contenerlo.
Nunca se debe asumir que un apuntador tiene un tama
no definido.
Para declarar una apuntador se utiliza el *
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
DCI - DIQEB, Universidad de Guanajuato

8.2 Apuntadores

83

Para declarar una apuntador se utiliza el *

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
Tabla 8.1: Operadores utilizados con apuntadores
OperadorDescripcion
*
dereference : indica que se
accesa el contenido de la
variable o memoria a la cual
apunta el apuntador
&
Direccion:
Indica la direccion fsica de memoria
donde la variable es almacenada (dada una variable, &
apunta hacia la variable)
A continuacion se ejemplifica como funcionan los apuntadores en C por medio de el codigo
y su representacion grafica correspondiente.
a
iptr
jptr

int a , i p t r , j p t r . k p t r

kptr

i p t r = &a ;
// i p t r apunta a l c o n t e n i d o de a

iptr
jptr
kptr

jptr = iptr
// j p t r apunta a l o que apunta i p t r

DCI - DIQEB, Universidad de Guanajuato

iptr
jptr
kptr

8.2 Apuntadores
jptr = 100;
// s e a c c e s a e l e s p a c i o
// de memoria a l que apunta

k p t r = NULL;
// apuntador v a c i o
// 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

84

100

iptr
jptr
kptr

100

iptr
jptr
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
#include < s t d l i b . h>
int g ( int i p t r ) {
i f ( ( i p t r = ( int ) m a l l o c ( s i z e o f ( int ) ) ) = = NULL)
return 1;
return 0 ;
}
malloc : reserva espacio de memoria
free: libera la memoria reservada por malloc
Referencias: arreglos y apuntadores. Loas apuntadores tambien pueden ser utilizados
para la manipulacion de arreglos. Los siguientes segmentos de codigo son similares en la
manipulacion de arreglos pero uno es por medio de arreglos y otro por medio de apuntadores.

DCI - DIQEB, Universidad de Guanajuato

8.2 Apuntadores

85

Arreglos
Apuntadores
int f ( ) {
int g ( ) {
int a [ 1 0 ] , i p t r ;
iptr = a ;
iptr [ 0 ] = 5;

int a [ 1 0 ] , i p t r ;
iptr = a ;
iptr = 5;

return 0 ;
return 0 ;
}
}
...

...

x [ i ]=10;
a[ i ][ j ]

( x+i )=10;
(( a + i ) + j )

Figura 8.1: Ejemplo de manipulacion de datos continuos utilizando arreglos.

Argumentos por valor y por referencia


DCI - DIQEB, Universidad de Guanajuato

8.2 Apuntadores

Figura 8.2: Ejemplo de manipulacion de datos continuos utilizando apuntadores.

En C, los argumentos de las funciones siempre pasan solo su valor. Es decir, se


hace una copia del valor de cada argumento, y son estas copias las que se procesan en la
funcion. Como consecuencia, la variables que pasan como argumentos a las funciones
NO CAMBIAN.
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.

DCI - DIQEB, Universidad de Guanajuato

86

8.3 Archivos

87

Intercambio Incorrecto

Intercambio correcto

void cambio1 ( int x , int y )


{

void cambio2 ( int x , int y )


{

int tmp ;
tmp = x ;
x = y;
y = tmp ;

int tmp ;
tmp = x ;
x = y ;
y = tmp ;

return ;

return ;

.
.
.

.
.
.

cambio1 ( a , b ) ;

cambio2(&a ,&b ) ;

Uso en funciones
Arreglos

Apuntadores

int f 1 ( int a [ ] ) {

int f 2 ( int a ) {

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.

DCI - DIQEB, Universidad de Guanajuato

8.3 Archivos

88

Un archivo se define por su nombre y su extension


La extension del archivo nos indica parcialmente el tipo y contenido del archivo
Los lenguajes de programacion contienen funciones basicas para accesar y manipular
archivos

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:
FILE f o p e n ( const char nombreDELarchivo , const char modo ) ;
fopen retorna un apundador al archivo si la llamada fue exitosa, de otra forma regresa
NULL
Existen diversas formas de abrir o crear un archivo (ver tabla 8.2)

Tabla 8.2: modos de acceso para un archivo en C


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 despues de) cualquier contenido previo
r+
Abre para modificaciones (lectura y escritura)
w+
Abre o crea para modificacion. Descarta (destruye) cualquier contenido previo
a+
Abre o crea para modificacion. Agrega a cualquier
contenido previo

Ejemplo de declaracion, apertura y cierre de un archivo:

DCI - DIQEB, Universidad de Guanajuato

8.3 Archivos

89

#include < s t d l i b . h>


#include <s t d i o . h>
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
f s c a n f ( FILE a r c h i v o , const char formato ,

....);

Escritura
f p r i n t f ( FILE a r c h i v o , const char formato ,

....);

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)
DCI - DIQEB, Universidad de Guanajuato

8.3 Archivos
{
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 /
}
/ Aqu va e l c o d i g o para manipular e l a r c h i v o /
return 0 ;
}

8.3.2

Archivos en Fortran

Existen diversas formas de abrir o crear un archivo (ver tabla 8.3)


Tabla 8.3: Comados basicos para manipulacion de archivos en Fortran
Comando
Descripcion
open
Apertura de un archivo. Asigna un numero de unidad para referir el archivo.
close
Cierra un archivo. Requiere el numero
de unidad para realizar el cierre del
archivo
read
Lectura de datos desde un archivo.
write
Escritura de datos hacia el archivo.
rewind
Posiciona el control de acceso del
archivo al inicio del mismo.
Backspace Retrocede el control de acceso al registro anterior.
Ejemplo del uso de comandos para apertura y lectura de un archivo
open ( u n i t =1, f i l e = Datos )
r ead ( u n i t =1, FMT=100) X
Con open se asigna la unidad 1 al archivo Datos, con read se lee un valor de la unidad 1
y formato 100. El valor leido se asigna a X
Al igual que C, Fortran contempla unidades predeterminadas de entrada/salida (ver
tabla 8.4)
Ejemplo:

DCI - DIQEB, Universidad de Guanajuato

90

8.3 Archivos
Tabla 8.4: Unidades predeterminadas de Entrada y Salida en Fortran
unidad Descripcion
0
Se predetermina como pantalla o como
teclado.
5
Se predetermina como teclado.
6
Se predetermina como pantalla.
*
Se predetermina como pantalla y teclado.
...
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

open ( [ u n i t =] unidad [ , a c c e s s=a c c e s o ]


[ a c t i o n=a c c i o n ] [ , blank= b l a n c o s ]
[ , b l o c k s i z e= tama
no d e l b l o q u e ]
[ , c a r r i a g e c o n t r o l= c o n t r o l de c a r r o ]
[ , delim= l m i t e ] [ , e r r=e r r o r ] [ , f i l e = a r c h i v o ]
[ , form= forma ]
[ , i o f o c u s= punto l o g i c o e n t r a d a / s a l i d a ]
[ , i o s t a t= edo de e n t r a d a / s a l i d a ] [ , pad=b l a n c o s ]
[ , p o s i t i o n= p o s i c i o n ] [ , r e c l= r e l l a m a d a ]
[ , s h a r e= compartido ] [ , s t a t u s= e s t a d o ] )
Sintaxis del comando close, las opciones son similares a las 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
DCI - DIQEB, Universidad de Guanajuato

91

8.3 Archivos

Tabla 8.5: Descripcion de las opciones del comando open


Descripcion
Entero que especifica el n
umero de la unidad externa.
Modo de acceso para el archivo. Uno de APPEND, DIRECT, o
SEQUENTIAL (Por Omision, en forma automatica).
action
Que accion se pretende realizar dentro del archivo. Puede ser: READ
(el proceso es solo leer el archivo), WRITE (se pretende solo escribir en
el archivo), o READWRITE (se pretende realizar las dos acciones leer
y escribir)..
file
Nombre del archivo que se desea abrir.
form
Determina la forma de apertura puede ser CON FORMATO o SIN
FORMATO, o BINARIO.
position Indica la posicion de inicio dentro del archivo. Puede ser ASIS (En
forma automatica), REWIND, o APPEND. Si es REWIND, un
archivo existente se posiciona en el principio. Si es APPEND, en un
archivo existente el apuntador de registro se mueve hasta el final. Si es
ASIS, la posicion en un archivo activo no cambia, mientras que en un
archivo inactivo la posicion sera hasta el principio.
status
Cadena que describe la naturaleza del archivo a ser abierto: OLD El
archivo debe existir. Si existe, se abre. Si no existe, ocurre un error de
entrada salida, que dice Archivo In-existente.
NEW El archivo no debe existir. Si no existe el archivo es creado. Si
existe, entonces genera un error que dice Archivo ya existente .
SCRATCH Si se omite el parametro file al abrir el archivo, el valor del
estado del archivo es SCRATCH. Los archivos Scratch son temporales
( Volatiles). Estos archivos son borrados cuando la unidad se cierra o
termina el programa.
REPLACE El archivo abierto reemplaza a uno del mismo nombre. Si no
existe un archivo con el mismo nombre, este se creara. UNKNOWN (en
forma automatica ) Primero se trata de abrir un archivo existente (status
igual a OLD), y despues con el status NEW. Si el archivo existe, se
abre; si no existe lo crea..
opcion
unit
acess

DCI - DIQEB, Universidad de Guanajuato

92

8.3 Archivos

93

i n t e g e r numero
print , Introduzca enteros p o s i t i v o s :
numero = 0
open ( u n i t =1, f i l e = numeros . dat , s t a t u s= unknown )
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
type ( alumno ) datos alumno
open ( u n i t =1, f i l e = P r o g b a s i c a . d a t , s t a t u s=unknown )
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)
DCI - DIQEB, Universidad de Guanajuato

8.4 Ejercicios
end program

8.4

Ejercicios

Los objetivo de esta sesion son:


1. Solucionar dudas sobre sesiones anteriores
2. Entender el uso de apuntadores y su relacion con los arreglos
3. Entender el uso de las funciones y procedimientos.
4. Entender el uso de archivos
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
1. El siguiente programa en C ejemplifica el uso de apuntadores. Edite, compile y ejecute el
programa. Describa el funcionamiento del programa y comente cada linea del programa
de acuerdo a lo observado en la ejecucion del programa

#include <s t d i o . h>


int main ( void )
{
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 ) ;

DCI - DIQEB, Universidad de Guanajuato

94

8.4 Ejercicios

95

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 ) ;
11 0672326663 CH11

6/10/04

2:03 PM

Page 237

238

Chapter 11 Pointers

Program 11.2 illustrates some interesting properties of pointer variables. Here, a


pointer
character is cada
used. linea del programa
2. Cual es la salida de los programas en la figura
8.3 to
? acomente
237
Defining a Pointer Variable
Program 11.2 More Pointer Basics
de acuerdo a las acciones realizadas .
Program 11.1 Illustrating Pointers

// Further examples of pointers

// Program to illustrate pointers

#include <stdio.h>

#include <stdio.h>

int main (void)


{
char c = 'Q';
char *char_pointer = &c;

int main (void)


{
int
count = 10, x;
int
*int_pointer;

printf ("%c %c\n", c, *char_pointer);


c = '/';
printf ("%c %c\n", c, *char_pointer);

int_pointer = &count;
x = *int_pointer;

*char_pointer = '(';
printf ("%c %c\n", c, *char_pointer);

printf ("count = %i, x = %i\n", count, x);


return 0;

return 0;

(a)
Program 11.1 Output

(b)
Program 11.2 Output

Figura 8.3: Programa que utilizan


apuntadores.
Q Q

count = 10, x = 10

/ /
( (

3.

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,
int count =segmento
10, x, *int_pointer;
El siguiente
de codigo ejemplifica el uso
de that
apuntadores
automeaning
whatever valueyisoperadores
stored inside thisde
variable
should be treated as an indire
reference
(pointer)
to
a
character.
Notice
that
you
can
assign
an initial value to this vari
Next, the address
operator isla
applied
to the variable
count.This has theCu
effectaof
creating
incremento.
Siguiendo
secuencia
de instrucciones,
l es
el valor
(contenido)
able intothe
fashion.The
value that
you assign to de
char_pointer in the program
a pointer to this variable, which is then assigned by the program
thenormal
variable
a pointer to the variable c, which is obtained by applying the address operator to the
cada
variable. ?
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 refx = *int_pointer;
erenced in an expression.)
declaration
of the variable char_pointer and the assignment of its initial value
proceeds as follows:The indirection operator tells the C systemThe
to treat
the variable
could
have
been
equivalently
expressed in two separate statements as
int_pointer as containing a pointer to another data item.This pointer is then used to

DCI - DIQEB,
Universidad de Guanajuato char *char_pointer;
access the desired data item, whose type is specified by the declaration
of the pointer

char_pointer
= &c;
variable. Because you told the compiler that int_pointer points
to integers
when you
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

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 ;

4. La siguiente funcion calcula el factorial de un numero de forma recursiva. Escriba un


programa en C para verificar el funcionamiento del codigo. Explique que es la recursi
on
en programacion y como esta siendo aplicada en la funcion fact.

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 ) ;
}

5. Escriba un programa en C que despliegue en pantalla la informacion contenida de un


archivo de texto. El archivo (nombre y ubicacion debe ser dado por el usuario)

DCI - DIQEB, Universidad de Guanajuato

96

Bibliografa
[1] Programming in C, Stephen Kochan. Sams 3rd Ed.
[2] C primer plus Stephen Prata. Ed. Sams 5th Ed.
[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.
[5] Revistas y Artculos especficos sobre programacion.

DCI - DIQEB, Universidad de Guanajuato

Das könnte Ihnen auch gefallen