Curso C - Seminario
Curso C - Seminario
Curso C - Seminario
1
Lenguaje de
programacin C
2
Objetivos
General:
Programar un computador utilizando un lenguaje de
programacin estructurada, lenguaje C.
Especficos:
Utilizar las instrucciones bsicas de un lenguaje de
programacin estructurada: secuencia, seleccin y
repeticin.
Utilizar las capacidades de manejo de estructuras de datos
simples y compuestas.
Disear programas modulares mediante subrutinas.
Desarrollar programas para la manipulacin de archivos de
datos.
2
3
Planificacin (1)
Secuencia, accin simple, acciones
compuestas; seleccin, sentencias if, if
else, switch; repeticin, sentencias
while, do-while, for.
Estructuras de control
Asignacin, entrada de datos, salida de
datos
Sentencias bsicas
Tipos estndares, compatibilidad y
conversin de tipos, reglas de
precedencia de operadores, tipos
definidos por el usuario, tipo enumerado
Tipos de datos simples
Identificadores, comentarios, definicin
de constantes, declaracin de variables.
Declaraciones
Encabezado, declaraciones, cuerpo del
programa
Estructura de un programa C
Anlisis y resolucin de problemas,
pseudo cdigo
Algoritmos
4
Planificacin (2)
Arreglos, manejo de strings (strcpy,
strcat, strcmp, strlen, y otros)
algoritmos de bsqueda, algoritmos
de ordenacin.
Tipos de datos estructurados
Diseo y estructura de programas,
funciones (con y sin retorno de
valores) , parmetros por valor,
variables locales y variables globales.
Subprogramas
3
5
Planificacin (3)
archivos de caracteres (texto)
archivos de enteros/reales
archivos de registros
Manejo de archivos
Struct Tipos de datos estructurados
6
Bibliografa
Libros:
Brian C. Kernighan and Dennis M. Ritchie. El
lenguaje de programacin C. Prentice Hall, 1988.
4
7
Enlaces Interesantes
C GNU http://gcc.gnu.org
C Programming Notes. Steve Summit.
http://www.eskimo.com/~scs/cclass/notes/top.html
Programming in C: A Tutorial. Brian W. Kernighan.
http://www.lysator.liu.se/c/bwk-tutor.html
Programming in C. Unix SystemCalls and Subroutines using C.
A.D. Marshall http://www.cs.cf.ac.uk/Dave/C/CE.html
C Programming. Steve Holmes.
http://www.strath.ac.uk/IT/Docs/Ccourse/
Programming in C. Geocities.
http://www.geocities.com/SiliconValley/Software/5562/
C Language Tutorial.
http://www.physics.drexel.edu/courses/Comp_Phys/General/C_b
asics/c_tutorial.html
8
Algoritmos
5
9
Que es un Computador?
Un computador es una maquina de entradas y
salidas
Entiende trminos de tipo
101011110001010001000101111010010101010
En cambio nosotros
Sumar gastos de hoy a gastos semanales
10
Modelo Bsico de un Computador
Pentium
Atlhon
Cyrix .
Almacenamiento
Secundario
Procesador Central
Salida
Ram
Memoria Principal
Entrada Disco
Duro
6
11
Que es un algoritmo?
Un procedimiento efectivo para resolver un
problema en un numero finito de pasos.
Niklaus Wirth estableci que:
Programas = Algoritmos + Datos
12
Algoritmos vs. Programa
Un algoritmo es una secuencia de pasos finitos,
no ambiguos necesarios para resolver un
problema.
La realizacin de un algoritmo que puede correr
en un computador es llamado programa
Sistemas Operativos, Netscape, juegos, ... son
ejemplos de programas.
7
13
Que es programar?
Mecanismo artificial necesario para decirle al
computador qu hacer.
La programacin no requiere talento inherente
Pre-requisitos:
Atencin a detalle: los detalles cuentan en programacin. No se
puede ser vago.
Manejo de Estupidez: ellos hacen exactamente lo que les dices,
ni ms ni menos. El nivel de especificacin depende del tipo de
lenguaje de programacin.
Buena Memoria: sintaxis del lenguaje, conjunto de funciones
prescritas disponibles para ser llamadas, parmetros a ser
aceptados, las variables y funciones definidas, y la experiencia
del pasado para ser aplicada cuando se reconocen los
sntomas.
Habilidad de pensar abstractamente: Slo si es posible pensar
en pequeas piezas aisladas ser posible trabajar con un gran
programa.
14
Resolucin de un Problema
Respuesta =
2
Problema a
Resolver
Ordenamiento
de las Ideas
Creacin del
Algoritmo
Codificacin
Compilacin
Ejecucin y
obtencin de
resultados
Anlisis
Test
Correcciones
Fin
8
15
Resolucin de un Problema
Start with problem
statement
Analyze problem &
develop algorithm
Write source code
Run & test program
Is there more
problem solving to
be done?
End
yes
no
Use program
16
Anlisis del
problema
Diseo del
Algoritmo
Codificacin
(Programacin)
Ejecucin y
Validacin
Resolucin de un problema
Para resolver un problema se debe seguir los
siguientes pasos:
9
17
Algoritmo
Definiciones:
son mtodos para resolver problemas, posibles de
implementar en un computador.
Es el proceso de descomponer una TAREA, en forma
secuencial y ordenada, en un conjunto de acciones
elementales que manipulan y transforman los datos
de entrada y, por medio de algunas secuencias
bsicas de control, se obtiene una salida que es el
objetivo de la tarea.
Acciones <--->Sentencias
Datos <--->Declaraciones y delimitaciones.
Las sentencias se componen de instrucciones que son acciones
concretas que deben realizar la mquina.
18
Algoritmo
Caractersticas:
Debe ser preciso e indicar un orden de realizacin de
cada paso.
Debe ser definido, es decir, si se repite varias veces,
debe de dar el mismo resultado.
Debe ser finito, es decir, debe terminar en algn
momento.
10
19
Cmo generar un Algoritmo?
Los pasos que se deben seguir para la obtencin de un algoritmo a
partir del problema en estudio son los siguientes:
1. Determinacin del Objetivo del problema.
2. Estipulacin escrita del problema
3. Identificacin de los datos de entrada y salida.
4. Determinacin del proceso y de los datos integrantes del algoritmo.
5. Identificacin de las variables interna.
6. Dividir el proceso en acciones atmicas
7. Determinacin de los cursos de accin
8. Determinacin de la secuencialidad de las acciones en cada uno de los cursos de
accin.
9. Incorporacin de estructuras de control para la unificacin de los cursos de accin.
10. Generacin del algoritmo
20
Datos
Existen datos simples y compuestos.
Simples: Carcter, entero, real, letras, nmeros,
smbolos, datos lgicos.
Compuestos: Matrices, Registros.
Existen datos que son constantes o variables.
Constantes: Son aquellos datos cuyos valores no
cambian durante la ejecucin de un programa.
Variables: Son datos que cambian durante la
ejecucin.
11
21
Pseudo cdigo
Lenguaje informal que ayuda a desarrollar
algoritmos.
No es ejecutado en computadores, similar al
lenguaje hablado.
Nos ayuda a pensar un programa antes de
escribirlo:
Fcil de convertirlo al programa correspondiente
en C
Consiste slo de sentencias ejecutables.
22
Ejemplo
Escribir programa para determinar la velocidad
de un auto
Cules son las entradas?
Cules son las salidas?
Cul es el algoritmo?
12
23
Desarrollo
Cules son las entradas?
Punto de Partida
Punto de llegada
Tiempo transcurrido en horas, minutos y segundos
Cules son las salidas?
Velocidad del auto
Que debe calcular el algoritmo?
Distancia total recorrida DT=PLL-PP
Tiempo transcurrido TT=HoraF+(MinF/60)+(SegF/3600)
Velocidad V=DT/TT
24
Estructuras de Control
13
25
Programacin Estructurada
Definicin:
Conjunto de tcnicas que incorpora un diseo
descendente (top-down), recursos abstractos y
estructuras bsicas.
Recursos Abstractos: Consiste en descomponer
acciones en forma cada vez ms simples.
Estructuras Bsicas : Consiste en ir refinando los
niveles.
Un programa puede ser escrito utilizando 3 estructuras de
control: Secuenciales, selectivas y repetitivas.
26
Es aquella en la cual una accin sigue a otra en forma
secuencial.
Estructuras de Control Secuencial
I ni ci o
acci n 1;
acci n 2;
.
acci n n;
Fi n
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin 1
accin n
accin 2
.
accin 2
accin 1
accin n
14
27
Estructuras de Control Secuencial
Ejemplo:
Calcular la suma y el producto de 2 nmeros.
28
Estructuras de Control Selectivas
Selectivas:
Permiten realizar bifurcacin del programa a travs
de una toma de decisin. Pueden ser simples, dobles
o mltiples.
15
29
Simple (si/entonces)
Estructuras de Control Selectivas
SI condi ci n ENTONCES
acci n;
FI N SI
SI condi ci n ENTONCES
acci n_1;
.
acci n_n;
FI N SI
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin
condicin
s
no
condicin
V F
accin
30
Estructuras de Control Selectivas
Ejemplo:
Mostrar los nmero positivos que se introducen por
teclado.
16
31
SI condi ci n ENTONCES
acci n_1;
SI NO acci n_2;
FI N SI
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin 1
condicin
s no
condicin
V F
accin 1 accin 2
accin 2
Estructuras de Control Selectivas
Doble (si/entonces/sino)
32
Estructuras de Control Selectivas
Ejemplo:
- Determinar si un nmero entero es par o impar
- Buscar el mnimo de 3 nmeros enteros introducidos
por teclado.
17
33
Estructuras de Control Selectivas
Mltiple: Cuando se desea que existan ms de
dos decisiones (segn sea).
SEGUN SEA expr esi n HACER
CASO al t er nat i va_1:
<acci n 1; >
CASO al t er nat i va_2:
<acci n 2; >
.
CASO al t er nat i va_n:
<acci n n; >
FI N SEGUN
Diagrama de Flujo
accin 1
expresin
accin 2 accin n
1
2
n
34
Estructuras de Control Selectivas
Diagrama NASSI-
SCHNEIDERMANN
alternativa
1 2 . n
a
c
c
i
n
1
a
c
c
i
n
n
a
c
c
i
n
2
a
c
c
i
n
p
SEGUN SEA expr esi n HACER
CASO al t er nat i va_1:
<acci n 1; >
CASO al t er nat i va_2:
<acci n 2; >
.
CASO al t er nat i va_n:
<acci n n; >
FI N SEGUN
18
35
Estructuras de Control Selectivas
Ejemplo:
- Resolver ecuacin de 2 grado:
- Realizar un Men.
0
2
= + + c bx ax
36
Estructuras de Control Repetitivas
Repiten la ejecucin de un grupo de acciones
una cierta cantidad de veces.
19
37
Estructuras de Control Repetitivas
Mientras
MI ENTRAS condi ci n HACER
acci n
FI N MI ENTRAS
MI ENTRAS condi ci n HACER
acci n_1;
acci n_n;
FI N MI ENTRAS
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin
condicin
s
no
accin
mientras condicin
38
Estructuras de Control Repetitivas
Ejemplo:
- Calcular la potencia de un nmero
- Calcular el sumatorio de los primeros 20 naturales.
- Contar los nmeros positivos introducidos por teclado.
20
39
Estructuras de Control Repetitivas
Repetir: Permite repetir una accin o un bloque
de acciones mientras la condicin sea
verdadera.
REPETI R
acci n;
HASTA condi ci n;
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin
condicin
s
no
accin
mientras condicin Repetir condicin
40
Repeticin
Ejemplo:
- Calcular n!
- Determinar si un nmero es perfecto (la suma de sus
divisores es igual a l mismo):
6 =3+2+1
28 =1+2+4+7+14
21
41
Estructuras de Control Repetitivas
Desde/Para: Cuando se conoce de antemano el
nmero de veces que se quiere repetir el ciclo.
DESDE variable=inicio
HASTA valor_final
HACER
accin;
FIN DESDE
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin
accin
mientras condicin
Variable:=
inicio,condicin,incremento
Variable:=inicio,
condicin,incremento
42
Repeticin
Ejemplo:
- Calcular la suma de los primero 20 naturales.
- Calcular la siguiente serie:
=
n
i
i
1
1
22
43
Lenguaje de
Programacin C
44
Acerca de C
C fue desarrollado por Brian Kernighan y Dennis Ritchie
en los laboratorios Bell.
Valores son guardados en variables
Programas son estructurados por funciones.
Flujo de Control es controlado usando bucles,
sentencias y llamadas a funciones.
Entrada y Salida son dirigidas a archivos o al terminal.
Datos son almacenados juntos en arreglos o
estructuras.
C permite un control ms preciso de entradas y salidas
Programas pequeos mas eficientes
C es un lenguaje amigable
ANSI C es proclamado la versin estndar del lenguaje.
23
45
Historia
1967, Martin Richard crea el lenguaje BCPL
1970, Ken Thompson crea el lenguaje B.
Transportable.
Lenguaje evolucionado e independiente de la mquina.
1972, Dennis Ritchie y Brian Kernighan en los Laboratorios Bell de
AT&T creanel lenguaje C modicando el lenguaje B. Reescriben
Unix en C.
Se disean tipos y estructuras de datos.
Incluye punteros y funciones.
Riqueza de operadores.
1983, el instituto de estndares americano (ANSI) crea un estndar
que definiera el lenguaje C.
1990, el estndar es adoptado.
46
UNIX
Sistema UNIX fue escrito en C.
C fue inventado especficamente para
implementar UNIX.
Todos los comandos de UNIX mas todas las
facilidades tales como revision de password,
colas de impresin, o controladores de
dispositivos son escritos en C.
Poderosos sistemas pueden ser creados al
escribir en C y utilizando las bibliotecas del
sistema UNIX.
24
47
Usando C y UNIX
Conocimiento previo.
Ciclo:
Escribir el programa en un archivo
Compilar el programa
Ejecutar el programa
Durante el desarrollo del programa, el
programador puede repetir el ciclo muchas
veces, refinando, probando, y depurando hasta
alcanzar el comportamiento deseado.
48
Escribir, Compilar, ejecutar el Programa
UNIX espera que su programa sea guardado en
un archivo cuyo nombre finaliza en .c
Para editar, utilizar un editor como jed, joe
emacs, o vi
>>vi prueba.c
Para Compilar se utiliza un compilador de la
forma:
>>cc prueba.c o prueba
Para ejecutar bajo UNIX se debe escribir:
>>prueba o >>./prueba
Compilador de UNIX
25
49
Traductores
Traducen el lenguaje de alto nivel a lenguaje de
mquina.
Se refieren a la forma en que se ejecuta el
programa
Interpretes: lee el cdigo de un programa lnea a
lnea realizando las instrucciones.
Compiladores: lee el programa entero y lo convierte
en cdigo objeto que puede ser ejecutado por la
maquina directamente.
50
Ejemplo
/* Programa Hola Mundo*/
#include <stdio.h>
int main( )
{
printf(Hola Mundo!!!");
return ( ) ;
}
mipc>>gcc hello.c
mipc>> ./a.out
a.out
Compilar
Compilador
(gcc)
Programa
hola.o
Cdigo
Objeto
Enlace
Enlazador
hola.c
Ejecutable
26
51
Programa ejecutable
Hay que seguir los siguientes pasos para
obtener un programa ejecutable:
Programa
Fuente
Compilador
Programa
Objeto
Enlace Libreras
Programa
Ejecutable
52
Compiladores C
Para el sistema operativo Linux:
lcc
gcc
Para el sistema operativo Windows:
Turbo C/C++
Borland C/C++
Visual C++
Editores de texto para Linux:
jed, emacs, joe, vi.
27
53
Decl ar aci ones gl obal es
f 1( )
{
var i abl es l ocal es
secuenci a de sent enci as
}
.
.
.
f N( )
{
var i abl es l ocal es
secuenci a de sent enci as
}
mai n( ) {
var i abl es l ocal es
secuenci a de sent enci as
}
Estructura de un programa
54
Estructura de un programa
Todos los programas en C consisten en una o
ms funciones.
La nica funcin que debe estar absolutamente
presente es la denominada main() , siendo la
primera funcin que es llamada cuando
comienza la ejecucin del programa.
28
55
Tipos, Operadores y
Expresiones.
56
Introduccin
Variables y Constantes son los objetos de datos
bsicos manipulados en un programa.
Las declaraciones establecen las variables a ser
usadas, su tipo y su valor inicial.
Operadores especifican que se hace con las
variables.
Expresiones combinan variables y constantes
para producir nuevos resultados.
29
57
Nombres de Variables
Nombres son hechos de letras y dgitos.
El smbolo _cuenta como letra.
Letras maysculas y minsculas son diferentes.
Tradicionalmente se utiliza letras minsculas
para nombres de variables y letras maysculas
para nombres de constantes.
Nombres de palabras reservadas no pueden ser
utilizadas:
if, else, int, float, char, switch, case, while, do,
58
auto break case char const continue default
do double else enum extern float for
goto if int long register return short
signed sizeof static struct switch typedef union
unsigned void volatile while
Palabras reservadas
Es un identificador reservado para propsito especfico. No pueden
cambiarse. Siempre debe estar en minscula.
C tiene 32 palabras claves, 27 del estndar de Ritchie y Kernighan
y 5 aadidas por ANSI.
La lista completa de palabras reservadas de C estndar de ANSI:
30
59
Tipos de Variables
En C una variable debe ser declarada antes de
ser usada.
Pueden ser declaradas al comienzo de
cualquier bloque de cdigo, pero la mayora son
encontradas al comienzo de la funcin.
Una declaracin comienza con un tipo, seguido
por el nombre de una o mas variables.
int num=4, cel[20];/*Ver Tipos*/
Tipo Tipo Nombre Nombre
Asignaci Asignaci n n Comentario Comentario
60
Tipos de Variables
double i; Numero de punto flotante de
doble precisin
double
unsigned
int i;
Entero sin rango negativo,
mayor rango positivo
unsigned
long int i; Entero de tamao aumentado long
short int i; Entero de tamao reducido short
char a; Un byte de memoria suficiente
para guardar un caracter
char
float a=4.3; Numero Punto Flotante float
int a=3; Numero Entero int
31
61
Constantes
Son valores fijos que no pueden ser alterados por el
programa. Pueden ser de cualquier tipo de datos.
Una constante en C es slo la versin escrita de un
numero.
Ejemplo: 4, 3e5
Un carcter constante usualmente es solo un carcter
encerrado entre comillas simples a
Valor de un carcter constante es el valor numrico en
el conjunto de caracteres de la maquina.
backslash
\\
Null
\0
Tab
\t
Single quote \
Newline
\n
62
Constantes
Expresin Constante es una expresin que
involucra solo constantes
Son evaluadas en tiempo de compilacin
Ejemplo: #define MAX 1000
String constante es una secuencia de cero o
mas caracteres encerrado entre comillas tal
como Lenguaje de Programacion en C
Las comillas son delimitadores.
El carcter nulo \0 es automaticamente
colocado al final del string
32
63
Declaracin de constantes
Son valores fijos que no pueden ser alterados
por el programa. Pueden ser de cualquier tipo
de datos.
Ejemplo a \n 9 1 123 35000 123.23
Para declarar constantes se puede utilizar la
directiva #define.
Ejemplo
#define Maximo 1000
64
Tipo lista_de_variables;
Declaracin de variables
Todas las variables han de ser declaradas antes
de ser usadas y pueden cambiar su valor
durante la ejecucin del programa.
Forma:
tipo: debe ser un tipo de datos vlido de C-
lista_de_variables : puede consistir en uno o ms
identificadores separados por comas.
33
65
Declaraciones
Todas las variables deben ser declaradas antes
de ser usadas.
Una declaracin especifica un tipo y lista una o
mas variables de ese tipo.
int int a,b,c a,b,c; ;
int int a; a;
int int b; b;
int int c; c;
66
Variables Locales vs. Globales
Variables locales son declaradas dentro del
cuerpo de una funcin y slo pueden ser usadas
dentro de esa funcin.
Estar disponible para otras funciones slo si al
ser llamadas desde la funcin actual, son
pasados los valores de las variables.
Una variable global estar disponible para
todas las funciones.
Prcticas modernas de programacin
recomiendan no abusar del uso de estas
variables.
34
67
Nombre_de_variable = constante;
Inicializacin de variables
La asignacin se realiza usando el signo =,
donde la constante del lado derecho se asigna
al lado izquierdo.
68
Comentarios
Los comentarios en C va entre los smbolos /* y
*/.
Pueden ir ubicados en cualquier parte del
programa.
Ejemplo:
/* Este es un comentario */
...
35
69
Variables Externas
Cuando se utiliza desde una funcin en un archivo A
una variable declarada en un archivo B, debe declararse
en la funcin del archivo A como variable externa.
Archi vo A Archi vo A
Archi vo B Archi vo B
f0(){ f0(){
extern extern int int a; a;
...} ...}
f1(){ f1(){ } }
int int main main(){ (){ } }
int int a; a;
g1(){ g1(){
a=4 a=4; ;
... ...
} }
g2(){ g2(){
} }
int int main main(){ (){ } }
70
Variables Estticas
Son declaradas como Variables locales, pero su
declaracin es precedida por la palabra static
Puede ser accedida slo desde la funcin en
que fue declarada.
Inicializada slo una vez. No es destruida a la
salida de la funcin, sino su valor es
preservado, y estar disponible en la prxima
llamada a la funcin
int int f1(){ f1(){
static static int int a; a;
} }
int int main main(){ (){
f1(); f1();
} }
36
71
Arreglos
72
Arreglos
Los arreglos son una coleccin de variables del
mismo tipo.
Los elementos individuales son identificados por
un ndice entero.
En C el ndice comienza en cero y siempre es
escrito dentro de corchetes
Pueden ser de distintas dimensiones
37
73
Tipos de arreglos
Unidimensional Unidimensional
int int a[20]; a[20];
Bidimensional Bidimensional
Int Int a[6][7]; a[6][7];
Tridimensional Tridimensional
float float a[7][7][4]; a[7][7][4];
74
Arreglos
Si un arreglo es declarado en la funcin
principal main()tendra las dimensiones
incluidas.
Si no se desea tamao fijo se pueden utilizar
punteros.
Cuando se pasa un arreglo a una funcin, esta
ltima no necesita saber el tamao.
38
75
Operadores y Expresiones
76
Operaciones y Expresiones
Una de las Potencias de C es su amplio rango de
operadores necesarios.
Un operador es una funcin que es aplicada a valores
para dar un resultado.
Existen operadores aritmticos, comparacin de valores,
combinacin de estados lgicos y manipulacin de
dgitos individuales unitarios.
Los operadores y valores son combinados para formar
expresiones.
Sentencia de Asignacin:
Una expresin es evaluada y el resultado es guardado en una
variable y=a*x+b
39
77
Operadores Aritmticos
Acci n Oper ador
Rest o de di vi si n
ent er a
%
I ncr ement o ++
Decr ement o - -
Di vi si n /
Mul t i pl i caci n *
Subst r acci n -
Adi ci n +
78
Operadores Relacionales
Accin Operador
I gual ==
No i gual ! =
Menor que o i gual <=
Menor que <
Mayor que o i gual >=
Mayor que >
40
79
Operadores Lgicos
Accin Operador
Y &&
NO !
O ||
Y &&
0 1 0 0 1
0 1 1 1 1
1 1 0 1 0
1 0 0 0 0
!p p||q p&&q q p
Tabla de Verdad Tabla de Verdad
80
Valores booleanos?
Los valores lgicos o booleanos no tienen un
tipo especial.
Se puede utilizar cualquier tipo integral que
tenga un valor 0 representando falso y cualquier
otro valor representando el verdadero.
41
81
Precedencias
Si existen ms de un operador
perteneciente a un mismo
nivel, la prioridad va de
izquierda a derecha.
,
=, +=, -=, *=, /=
||
&&
==, !=
<, <=, >, >=
+, -
*, /, %
!, ++, --, -, (tipo)
()
(x>=10 && x<20) || x<5
If(!NULL) printf( );
82
Datos definidos por
usuario
42
83
Tipos de Datos Simples
Estndar:
char , i nt f l oat , doubl e, voi d.
Definido por usuario:
enum, st r uct .
84
Tipos de Datos Simples
Estndar
char
es un carcter (alfanumrico), ocupa 1 byte.
int
es un numero entero, ocupa 2 bytes.
[-32 768 , 32 767]
float
son nmeros con decimales y/o exponentes, ocupa 4 bytes.
[3.4e-38 , 3.4e38]
double
son nmeros con decimales y/o exponentes, ocupa 8 bytes.
[1.7e-308 , 1.7e308]
void
no posee valor, ocupa 0 bytes.
43
85
signed
unsigned
long
short
Modificadores de tipo
Se utiliza para alterar el significado del tipo base
para que se ajuste ms precisamente a las
necesidades de cada momento.
Predecede al tipo simple.
Modificadores:
86
Se usan para controlar las formas en que se
acceden o modifican las variables.
Las variables de tipo const no pueden ser
cambiadas durante la ejecucin del programa.
Ejemplo:
const
const int cuenta = 100;
Modificadores de acceso
44
87
Tipos de Datos Simples Estndar
Ejemplo:
void main(){
/*Declaracin de las variables*/
int n1,n2;
float r;
char ch;
unsigned int a;
const char p=a;
/*Realizar algo con la variables*/
}
88
Conversin de tipos
Cuando en una expresin se mezclan
constantes y variables de un mismo tipo y
variables de distinto tipos, se convierten a un
tipo nico.
El compilador C convierte todos los operandos
al tipo del mayor operando.
45
89
Conversin de tipos
Se pueden mezclar los tipos de valores en expresiones
aritmticas
Valores pasados a funciones como argumentos debe
ser del tipo correcto
Si los tamaos son diferentes:
El resultante adoptara el tamao mayor
No hay problema en asignar un valor a una variable de
diferente tamao.
Excepciones:
La variable es demasiado pequea para sostener el valor.
CORRUPTO
Si la variable es tipo entera y se le asigna un valor real, el valor
es redondeado.
90
Conversin de tipos
Regla:
Cualquier char y long int es convertido a int. Cualquier float es
convertido a double.
Para todos los pares de operandos, si uno de los operandos es
long double, el otro operando se convierte a long double.
Si no, si un operando es double, entonces el otro se convierte a
double.
Si no, si un operando es long, entonces el otro se convierte a
long.
Si no, si un operando es unsigned, entonces el otro se convierte
a unsigned.
46
91
Conversin de tipos, Ejemplo
char ch;
i nt i ;
f l oat f ;
doubl e d;
r esul t = ( ch / i ) + ( f * d) - ( f + i ) ;
i nt doubl e doubl e
i nt doubl e doubl e
doubl e
doubl e
92
Sirven para forzar que una variable sea de un
cierto tipo.
Forma general:
Ejemplo:
(tipo)expresin
int i;
float x;
x=(float) i/1;
Cast (forzado de tipos)
47
93
struct
union
enum
Tipos definidos por el usuario
El usuario puede definir sus propio tipos de
datos, para ello puede utilizar:
94
Una enumeracin es un conjunto de constantes enteras
con nombres que especifica todos los valores vlidos
que una variable de ese tipo puede tener.
Declaracin:
Ejemplo:
enum etiqueta {lista_de_enumeraciones} lista_de_variables;
enum moneda {penique, niquel, dime, cuarto, medio_dlar, dolar };
enum moneda dinero; /*declara la variable dinero de tipo moneda*/
el se
sent enci a;
66
131
Ejemplo
if(x<0)
//xes negativo
else if(x>0)
//x es positivo
else //x es cero
132
if else con secuencia de sentencias
i f ( condi ci on) {
secuenci a_sent enci as;
}el se{i f ( condi ci on) {
secuenci a_sent enci as;
}
. . .
el se{
secuenci a_sent enci as;
}
67
133
E.C. Selectivas
Mltiple: Cuando se desea que existan ms de
dos decisiones (segn sea).
Diagrama de Flujo
CASE:
switch (alternativa) {
case alternativa_1:
<accin 1;>
case alternativa_2:
<accin 2;>
break;
.
case alternativa_p:
<accin p;>
default:
accin_n;
};
accin 1
expresin
accin 2 accin n
1
2
n
134
Switch
La sentencia switch es una multimanera especial de
tomar decisiones que prueba si una expresin toma
alguno de los valores constantes.
switch evala la expresin entera (integer) en
parntesis.
Cada caso debe ser etiquetado por un entero o carcter
constante o expresin constante.
El caso etiquetado por default (OPCIONAL) es
ejecutado si ninguno de los otros casos son satisfechos.
Los casos deben ser todos diferentes.
68
135
Sentencia Switch
switch ( )
Expresin
seleccion
{
}
constante
sentencia
default ;
sentencia
case
:
136
Estructura Switch
swi t ch( expr esi on_sel ecci on) {
case const ant e1:
secuenci a_sent enci a
br eak;
case const ant e2:
secuenci a_sent enci a
br eak;
def aul t :
secuenci a_sent enci a
}
69
137
Ejemplo
Contar dgitos, espacios en blancos y otros
caracteres.
138
Comparacin if-else vs. Switch-case
mai n( ) {
i nt c, i , n_bl anco, n_ot r o, n_di gi t ;
n_bl anco=n_ot r o=0;
f or ( i =0; i <10; ++i ) n_di gi t [ i ] =0;
whi l e( ( c=get char ( ) ) ! =EOF)
i f ( c>= 0 && c<= 9 )
++n_di gi t [ c- 0 ] ;
el se i f ( c== | | c== \ n | | c== \ t )
++ n_bl anco;
el se
++n_ot r o;
whi l e( ( c=get char ( ) ) ! =EOF)
swi t ch( c) {
case 0 : case 1 : case
2 : case 3 : case
4 : case 5 : case
6 : case 7 : case
8 : case 9 :
n_di gi t [ c- 0 ] ++;
br eak;
case :
case \ n :
case \ t :
n_bl anco++;
br eak;
def aul t :
n_ot r o++;
br eak;
}
printf(digitos=);
for(i=0;i<10;i++)printf(%d,n_digit[i]);
70
139
Switch - Case
break causa una salida inmediata del switch.
140
Ciclos
71
141
Ciclos Haciendo cosas una y otra vez
Ciclos son estructuras de control que repiten
una serie de sentencias sin tener que reescribir
Ciclos son usados comunmente para:
Contar
Sumar
Repetir multiplicaciones, incrementar, decrementar
Mantener un registro de los valores
Mantener una secuencia de comandos o acciones
142
Definiciones
Entrada ciclo: sentencia antes de entrar al ciclo
Cuerpo del ciclo: sentencias que son repetidas
Condicin del ciclo: expresin a ser evaluada en
orden de decidir si es que una nueva repeticin
debera ser ejecutada.
Salida del ciclo: fin del ciclo, donde el flujo de
control deja el ciclo
72
143
Vista Abstracta
Cuando se escribe una instruccin de
repeticin se debera tener en consideracin:
Entrada: las condiciones bajo las cuales se
entra al ciclo
Continuar: condiciones para las cuales se
debera continuar en el ciclo
Exit: las condiciones bajo las cuales se quiere
salir del ciclo
144
Estructura General del Ciclo
Prueba 1
Antes
Prueba 2
Despus
Cuerpo
Ciclo
si
no
si
no
73
145
Las tres condiciones de ciclo
Para entender como construir un ciclo
correctamente, con la condicin relacionada al
cuerpo del ciclo se debe considerar:
Condicin de Entrada: debe cumplirse para que el
cuerpo sea ejecutado
Despus de entrar al ciclo y ejecutar las
sentencias pertenecientes al cuerpo, como
saber si se sigue o no?
Condicin de Repetir o continuar. Si es verdadera la
evaluacin se queda en el ciclo
Condicin de termino o salida: sale si la evaluacin
de la condicin es verdadera.
146
Patrones de Ciclos
74
147
Ciclo Pre- Test (con condicin de entrada)
f or ( n=0; n<10; n++)
{ . . . }
n=0;
whi l e( n<10)
{. . . n++; . . . }
Pre-Prueba
Entrada/repetir?
Cuerpo
Ciclo
si
no
148
Ciclo Post- Test (con condicin de salida)
n=0;
do{
. . . n++; . . .
} whi l e( n<10) ;
no
Repetir?
Cuerpo
Ciclo
si
75
149
E.C. Repetitivas
Repiten la ejecucin de un grupo de acciones
una cierta cantidad de veces.
150
E.C. Repetitivas
Diagrama de
Flujo
accin
Variable:=
inicio,condicin,incremento
FOR
for (inicializacin; condicin;
incremento )
accin;
for (inicializacin; condicin;
incremento ){
acciones;
}
FOR: Cuando se conoce de antemano el nmero de veces que se
quiere repetir el ciclo.
76
151
FOR: Cuando se conoce de antemano el nmero de veces que se
quiere repetir el ciclo.
Diagrama NASSI-
SCHNEIDERMANN
accin
mientras condicin
Variable:=inicio,
condicin,incremento
FOR
for (inicializacin; condicin;
incremento )
accin;
for (inicializacin; condicin;
incremento ){
acciones;
}
E.C. Repetitivas
152
for
f or ( expr 1; expr 2; expr 3)
sent enci a
expr1 y expr 3 son
asignaciones o llamadas a
funciones.
Expr2 es una expresin
relacional.
expr 1;
whi l e( expr 2) {
sent enci a
expr 3;
}
77
153
for (continuacin)
f or ( ; ; ) {
. . .
}
Si expr2 no esta presente
se considera siempre
verdadero bucle
infinito, unica salida break
o return
154
Ciclo for (Repeticin Fija)
Repitiendo una nica sentencia
f or ( ent r ada; pr ueba_sal i da; i n_de_cr ement o)
sent enci a;
Repitiendo secuencias de sentencias
f or ( ent r ada; pr ueba_sal i da; i n_de_cr ement o) {
secuenci a_sent enci a;
} Pre-Prueba
Cuerpo
Ciclo
si
no
Generalmente, ciclos for son
controlados por contador
78
155
Calcular los nmeros fibonacci
f 0=0
f 1=1
f n=f n- 1+f n- 2
f 2=f 1+f 0=1+0=1
f 3=f 2+f 1=1+1=2
f 4=f 3+f 2=2+1=3
f 5=f 4+f 3=3+2=5
f 6=f 5+f 4=5+3=8
f 7=f 6+f 5=8+5=13
156
Desarrollo
/ *Cal cul ar el n- esi mo numer o
f i bonacci */
i nt pr ev_f i b=0; / / =f n- 2
i nt act ual _f i b=1; / / =f n- 1
i nt pr ox_f i b; / / =f n
i nt n, i ;
mai n( ) {
pr i nt f ( Numer os Fi bonacci \ n) ;
pr i nt f ( I nt r oduce numer o n >=0: ) ;
scanf ( %d, n) ;
79
157
Dearrollo(2)
f or ( i =0; i <n; i ++) {
pr ox_f i b=act ual _f i b+pr ev_f i b;
pr ev_f i b=act ual _f i b;
act ual _f i b=pr ox_f i b;
}
pr i nt f ( el %d- esi mo f i bonacci es
%d, n, pr ev_f i b) ;
r et ur n 0;
}
158
Variaciones en el ciclo for
Distintas expresiones de inicializaciones e
incrementos
f or ( x=0, y=0; x<=10; ++x, - - y)
pr i nt f ( x=%d, y=%d\ n, x, y) ;
Sal i endo del ci cl o cuando se
pr esi one una t ecl a ( f unci on kbhi t ( ) )
kbhi t ( ) r et or na ver dader o ( es deci r
di st i nt o de cer o) si una t ecl a es
pr esi onada, si no r et or na 0, es deci r
f al so
80
159
Ejemplo
i nt mai n( ) {
i nt i ;
/ *i mpr i mi r numer os hast a que se
pr esi one l a t ecl a*/
f or ( i =0; ! kbhi t ( ) ; i ++)
pr i nt f ( %d , i ) ;
r et ur n 0;
}
160
Repeticin
Tarea:
Calcular la suma de los primero 20 naturales.
Calcular la siguiente serie:
=
n
i
i
1
1
81
161
E. C. Repetitivas
Mientras
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin
condicin
s
no
accin
mientras condicin
WHILE
while (<condicin>)
accin;
while (<condicin>){
accin_1;
accin_n;
}
162
Ciclo While
Simple sentencia a repetir
whi l e( expr esi on) sent enci a;
Secuencia de sentencias a repetir
whi l e( expr esi on) {
secuenci a_sent enci a
}
Generalmente, ciclo while son
controlados por eventos.
Pre-Prueba
Cuerpo
Ciclo
si
no
82
163
While
while(expresion)
sentencia
Expresin es evaluada
Si es no-cero
sentencia es ejecutada.
Este ciclo continua hasta
que la expresin se hace
cero.
164
Fibonacci con Ciclos While
i nt pr ev_f i b=0; / / =f n- 2
i nt act ual _f i b=1; / / =f n- 1
i nt pr ox_f i b; / / =f n
i nt n, i ;
mai n( ) {
pr i nt f ( Numer os Fi bonacci \ n) ;
pr i nt f ( I ngr ese numer o n >=0: ) ;
scanf ( %d, n) ;
83
165
whi l e( i <n) {
pr ox_f i b=act ual _f i b+pr ev_f i b;
pr ev_f i b=act ual _f i b;
act ual _f i b=pr ox_f i b;
i ++;
}
pr i nt f ( el %d- esi mo f i bonacci es
%d, n, pr ev_f i b) ;
r et ur n 0;
}
166
Cdigo mas eficiente
whi l e( i ++<n) {
pr ox_f i b=act ual _f i b+pr ev_f i b;
pr ev_f i b=act ual _f i b;
act ual _f i b=pr ox_f i b;
}
Precauciones
mai n( ) {
i f ( n==0 | | n==1) {
pr i nt f ( f i bonacci de %d es %d, n, n) ;
r et ur n 0;
}whi l e( ) {}r et ur n 0; }
84
167
Ms Precauciones
mai n( ) {
i f ( n<=1) {/ / casos especi al es
pr i nt f ( f i bonacci de %d es
%d, n, n) ;
}
el se{
whi l e( ) {}
}
r et ur n 0;
}
168
E.C. Repetitivas
Repetir: Permite repetir una accin o un bloque de acciones hasta
que la condicin sea verdadera.
Diagrama de
Flujo
Diagrama NASSI-
SCHNEIDERMANN
accin
condicin
s
no
accin
mientras condicin Repetir condicin
DO/WHILE
do{
accin;
}while (condicin);
85
169
do while
nica sentencia
do sent enci a; whi l e( expr esi on) ;
Secuencia de Sentencias a repetir
do{
sent enci as
}whi l e( expr esi on) ;
Un ciclo do-while siempre completa una iteracin
Repetir?
Cuerpo
Ciclo
si
170
do - while
do{
sent enci a
. . .
}whi l e( expr esi on) ;
cuer po
La condicin de
finalizacin est al final
del bucle.
El cuerpo es ejecutado al
menos una vez.
Primero la sentencia es
ejecutada y luego la
expresin evaluada.
86
171
Ejemplo
/ / i ni ci al i zaci on
voi d mai n( ) {
pr i nt f ( I ngr ese numer o n >0: ) ;
scanf ( %d, n) ;
do{
pr ox_f i b=act ual _f i b+pr ev_f i b;
pr ev_f i b=act ual _f i b;
act ual _f i b=pr ox_f i b;
} whi l e( i ++<n)
pr i nt f ( el %d- esi mo f i bonacci es %d, n,
( n==0) ?0: pr ev_f i b) ;
}
172
Ciclo Infinito
Usando for
f or ( ; ; ) {}
Usando while
whi l e( 1) {}
87
173
Entrada de Teclado
whi l e( 1) {
pr i nt f ( cont i nua( s/ n) \ n) ;
scanf ( %c, &r espuest a) ;
swi t ch( r espuest a) {
case s : case S : br eak;
case n : case N :
pr i nt f ( Pr ogr ama t er mi na\ n) ;
r et ur n 0;
def aul t :
pr i nt f ( I ngr ese sol o y o n \ n) ;
}
}
174
break vs. continue
break:
Permite controlar las salidas de los bucles.
Provee una salida temprana para for, while, do,
switch.
continue:
Es utilizada cuando la parte del bucle que sigue es
complicada.
Provoca la prxima iteracin del bucle cerrado a ser
ejecutado inmediatamente.
88
175
Break
f or ( i =0; i <1000; i ++) {
/ / hacer al go
i f ( kbhi t ( ) ) br eak;
}
176
Alternativa con bucle infinito
f or ( ; ; ) {
/ / hacer al go
i f ( kbhi t ( ) ) br eak;
}
whi l e( 1) {
/ / hacer al go
i f ( kbhi t ( ) ) br eak;
}
Repetir?
Cuerpo
Ciclo
si
89
177
Usando break para salir de ciclos
i nt mai n( ) {
i nt t , cont ;
f or ( t =0; t <100; t ++) {
cont =1;
f or ( ; ; ) {
pr i nt f ( cont ador =%d, cont ) ;
cont ++;
i f ( cont ==10) br eak;
}
pr i nt ( \ n) ;
r et ur n 0;
}
178
Usando continue
Continue es usado para saltar un ciclo
i nt mai n( ) {
i nt x;
f or ( x=0; x<=100; x++) {
i f ( x%2) cont i nue;
pr i nt f ( x=%d, x) ;
}
r et ur n 0;
}
90
179
Ejemplo continue
Sumar valores positivos.
Valores negativos
saltarlos.
#def i ne N 10;
. . .
i nt a[ N] , S;
. . .
f or ( i =0; i <N; i ++) {
i f ( a[ i ] <0)
cont i nue;
S+=a[ i ] ;
. . .
}
180
goto
Requi er e una et i quet a par a l a
oper aci on
x=1;
st ar t :
x++;
secuenci a_sent enci as
i f ( x<100) got o st ar t ;
=
n
i
i
1
123
245
Hacia una definicin recursiva
246
Definicin Recursiva
i nt f act or i al _r ec( i nt n) {
i f ( n==1) r et ur n 1;
r et ur n n*f act or i al _r ec( n- 1) ;
}
>
=
=
1 si ) 1 ( *
1 si 1
: ) (
n n factorial n
n
n factorial
124
247
Ejemplo
#include <stdio.h>
int factorial(int n){
if (n<0) return 0;
if (n==0) return 1;
else if (n==1) return 1;
else return n*factorial(n-1);
}
int main(){
int x,resultado;
printf("\nIngrese un nmero al cul le desea calcular el
factorial = );
scanf("%d",&x);
resultado=factorial(x);
printf("\n %d!=%d",x,resultado);
return 0;
}
248
Las Torres de Hanoi
Definicin del Problema
125
249
Paso 0
Inicializacin: Torre A contiene n discos de diferentes tamaos
Discos pueden solo ir sobre uno de tamao mas pequeo
Objetivo: Movimiento de todos los discos desde la torre A a la torre B
Movimientos: Tomar el disco del tope de una torre y mover el disco a otra
torre.
250
Paso 1 y 2
126
251
Paso 3 y 4
252
Paso 5 y 6
127
253
Paso 7 y 8
254
Paso 9 y 10
128
255
Paso 11 y 12
256
Paso 13 y 14
129
257
Paso 15
258
Ideas para una Solucin Recursiva
Con n discos
Mover torres
Mover torres
Mover torres
Con n-1 discos
Con n-1 discos
es equivalente a
130
259
Algoritmo Recursivo
El Algoritmo Principal
i nt mai n( ) {
i nt n;
pr i nt f ( cuant os di scos) ;
scanf ( %d, &n) ;
i f ( n>0)
mover _t or r e( n, A , B , C ) ;
r et ur n 0;
}
Problema exponencial n discos 2
n
-1
movimientos
260
Continuacin
voi d mover _t or r e( i nt n, char or i gen, char dest i no,
char t emp)
{
i f ( n==1)
mover _di sco( or i gen, dest i no) ;
el se{
mover _t or r e( n- 1, or i gen, t emp, dest i no) ;
mover _di sco( n- 1, or i gen, dest i no) ;
mover _t or r e( n- 1, t emp, dest i no, or i gen) ;
}
}
voi d mover _di sco( char desde, char a) {
pr i nt f ( mover di sco desde t or r e %c a t or r e %c. ,
or i gen, dest i no) ;
}
131
261
Arreglos
262
Arreglos
Un arreglo es una coleccin del mismo tipo que
son referidos por un nombre comn
Los arreglos ofrecen un medio conveniente por
el cual agrupar distintas variables relacionadas,
en una dimensin o ms
A un elemento especfico de un arreglo se
accede mediante un ndice.
Todos los arreglos en C constan de posiciones
de memoria contiguas.
Pueden ser de 1 o ms dimensiones.
132
263
Ejemplos
int numeros[]={1,3,34,54};
char alfabeto[5]={A,B,C,D,E};
Char nombres[][40]={pedro, pablo, luis,
karina, lisa};
Coordenadas[2][2]=
{
{0,0},{1,1}
};
264
Tipos de arreglos
Unidimensional Unidimensional
int int a[20]; a[20];
Bidimensional Bidimensional
Int Int a[6][7]; a[6][7];
Tridimensional Tridimensional
float float a[7][7][4]; a[7][7][4];
133
265
Arreglos
Si un arreglo es declarado en la funcin
principal main()tendra las dimensiones
incluidas.
Si no se desea tamao fijo se pueden utilizar
punteros.
Cuando se pasa un arreglo a una funcin, esta
ultima no necesita saber el tamao.
266
Arreglo Unidimensional
Un arreglo unidimensional es una lista de
variables relacionadas. La forma general de una
declaracin de arreglo 1-dimes
tipo nombre_var[ tamao]
tipo: tipo base del arreglo, determina el tipo de
dato de cada elemento en el arreglo
tamao: Cuntos elementos el arreglo tendr
Ejemplos:
int muestras[10];
char apellido[40];
134
267
Accediendo a elementos del Arreglo
Un elemento individual dentro de un arreglo es
accedido por el uso de un ndice.
Un ndice describe la posicin de un elemento
dentro de un arreglo.
En C/C++el primer elemento tiene el ndice
cero!
268
Ejemplo
#i ncl ude <st di o. h>
i nt mai n( ) {
i nt muest r a[ 10] , t ;
f or ( t =0; t <10; t ++)
muest r a[ t ] =t *t ;
f or ( t =0; t <10; t ++)
pr i nt f ( muest r a[ %d] =%d, t , muest r a
[ t ] ) ;
r et ur n 0;
}
135
269
Representacin de un arreglo en Memoria
En C, un arreglo es mapeado a localizaciones
de memoria continua
Todos los elementos de memoria residen uno al
lado del otro
La direccin ms baja corresponde al primer
elemento, y la ms alta al ltimo elemento
270
Ejemplo
i nt a[ 8] ;
i nt j ;
f or ( j =0; j <8; j ++) a[ j ] =7- j ;
Entonces la representacin de la memoria luce como:
136
271
Encontrar mximo
#i ncl ude<st di o. h>
i nt mai n( ) {
i nt i , max=0;
i nt l i st [ 100] ;
f or ( i =0; i <100; i ++) l i st [ i ] =r and( ) ;
f or ( i =0; i <100; i ++)
i f ( max<l i st [ i ] ) max=l i st [ i ] ;
pr i nt f ( max=%d, max) ;
r et ur n 0;
}
272
Asignaciones ilegales
No se puede asignar un arreglo a otro
Lo siguiente es ilegal:
i nt a[ 10] , b[ 10] ;
/ / hacer al go
a=b; / / error ilegal
En vez, se debe hacer asignaciones por cada
elemento:
i nt i ;
f or ( i =0; i <10; i ++) a[ i ] =b[ i ] ;
137
273
Arreglos Unidimensionales
Caractersticas:
1.- Almacenamiento de los elementos del arreglo en
posiciones contiguas.
2.- Tener un nico nombre de variable que representa a
los elementos y stos se diferencian por un
subndice.
3.- Acceso directo a los elementos.
274
Arreglos Unidimensionales
La forma general de declaracin de un arreglo
unidimensional es:
La cantidad de memoria en bytes viene dada
por:
Todo arreglo tiene el 0 como ndice del primer
elemento.
tipo nombre_de_variable[tamao];
bytes_totales = sizeof(tipo)*tamao;
138
275
Arreglos Unidimensionales.
dato0 dato1
daton-1
tipo nombre_de_variable[tamao];
Ejemplo:
1.- Realizar un programa en el que se ingresen 10
enteros, y luego se sumen sus elementos. Mostrar el
resultado.
276
Ejemplo
#include <stdio.h>
int main(){
int x[10];
int i,suma;
printf ("\n Ingrese 10 nmeros:\n");
for (i=0;i<10;i++)
scanf("%d",&x[i]);//lleva & pq es componente a componente
suma=0;
for (i=0;i<10;i++)
suma+=x[i];
printf("\n El resultado de la suma es = %d ",suma);
return 0;
}
139
277
Paso de Arreglos unidimensionales a
funciones
Forma 1: Arreglo delimitado
#include <stdio.h>
func1(int x[10]){ /*Arreglo delimitado*/
...
}
int main(){
int a[10];
..
func1(a);
...
return 0;
}
Se pasa la direccin del primer
elemento del arreglo a la
funcin
Se debe especificar el tamao
del arreglo
278
Paso de Arreglos unidimensionales a
funciones
Forma 2: Arreglo no delimitado
#include <stdio.h>
func1(int x[]){ /*Arreglo no delimitado*/
...
}
int main(){
int a[10];
..
func1(a);
...
return 0;
}
No se especifica el tamao del
arreglo
140
279
Paso de Arreglos unidimensionales a
funciones
Nota:
Al llamar una funcin pasndole un arreglo como
parmetro, como se le entrega la direccin del primer
elemento, entonces si los valores del arreglo son
modificados dentro de la funcin, tambin son
modificados en la funcin que llama.
280
String
Cadena de Caracteres.
141
281
String
El uso ms comn para un arreglo
unidimensional es guardar un arreglo de
caracteres
Un string esta definido como un arreglo de
caracteres terminado por un smbolo null (\0)
Para que un arreglo sostenga un string de 10
caracteres, char str[11], ya que 11 hace lugar
para el null al final del string.
\ \0 0 a a l l o o h h
282
Leyendo un string desde un teclado
#i ncl ude<st di o. h>
i nt mai n( ) {
char st r [ 80] ;
pr i nt f ( escr i bi r st r i ng) ;
scanf( %s, st r ) ; / / no l l eva &
r et ur n 0;
}
Problema: se detiene cuando lee un espacio
en blanco
142
283
Leyendo un string desde un teclado
#i ncl ude<st di o. h>
i nt mai n( ) {
char st r [ 80] ;
pr i nt f ( escr i bi r st r i ng) ;
gets( st r ) ; / / consi der a espaci o bl anco
r et ur n 0;
}
284
String
Es el uso ms comn de arreglo
unidimensionales.
En C un string es un arreglo de caracteres que
terminan en un caracter nulo: \0.
143
285
String
Constante de cadenas:
Es una sucesin de uno o ms caracteres encerrado
entre comillas.
Ejm: computador
286
String
Declaracin:
Se declaran como arreglos unidimensionales.
Debe contener 1 carcter ms que la cadena ms
larga ms larga que pueda contener.
char cadena[6];
Puede contener hasta
5 caracteres
0 1 2 3 4 5
\0
Caracter quemarcael fin del string
144
287
Librera para Strings
string.h
strcpy() : copia caracteres de un string a otro
strcat() : concatenacin de string
strlen() : largo del string
strcmp() : comparacin de string
288
Funciones de
Manejo de cadenas
Funcin Prototipo Accin Retorna
st r cpy( ) char *st r cpy( char *s1, const char *s2) ; Copi a s2 en s1. s1
st r cat ( ) char *st r cat ( char *s1, const char *s2) ; Concat ena s2 en s1. s1
st r l en( ) i nt st r l en( const char *s1) ; Longi t ud de s1
st r cmp( ) i nt st r cmp( const char *s1, const char *s2) ; Compar a s2 con s1 0 si son i gual es
>0 si s1>s2
<0 si s1<s2
Biblioteca: string.h
145
289
Arreglo 2-dimensional
Un arreglo bidimensional es una lista de arreglos
unidimensional
Para declarar un arreglo bidimensional de enteros
i nt mat r i z[ 3] [ 4] ;
290
#i ncl ude<st di o. h>
i nt mai n( ) {
i nt f i l a, col , mat r i z[ 3] [ 4] ;
f or ( f i l a=0; f i l a<3; f i l a++)
f or ( col =0; col <4; col ++)
mat r i z[ f i l a] [ col ] =f i l a*col ;
r et ur n 0;
}
146
291
Memoria para arreglos bidimensionales
El almacenamiento de los elementos del arreglo
es determinado en el tiempo de compilacin
La memoria usada se requiere mientras el
arreglo exista
La siguiente formula determina el numero de
bytes que necesita ser asignada
Bytes=fila*col*numero_bytes_tipo;
292
Ejemplo
#include <string.h>
#include <stdio.h>
int main(void){
char c1[80],c2[80];
printf("\n Ingrese una cadena de caracteres:");
scanf("%s",c1);
printf("\n Ingrese una cadena de caracteres:");
scanf("%s",c2);
printf("\n Longitudes: %d %d ",strlen(c1),strlen(c2));
if(!strcmp(c1,c2)) printf("\nLas cadenas son iguales");
strcat(c1,c2);
printf("\n %s",c1);
return 0;
}
147
293
Arreglos Multidimensionales
C permite arreglos con mas de dos dimensiones
La forma general de una declaracin de arreglo es
tipo nombre_var[tamao1] [tamao2][tamaoN]
294
Algoritmos de Bsqueda
148
295
Algoritmos de Bsqueda
Definicin:
Muchas veces es necesario encontrar un dato dentro
de un arreglo, para ello se crearon algoritmos que
varan en complejidad, eficiencia, tamao del dominio
de bsqueda.
296
Algoritmos de Bsqueda
Tipos de Bsqueda:
1.- Bsqueda Secuencial.
2.- Bsqueda Binaria.
149
297
Bsqueda Secuencial
Consiste en ir comparando el elemento que se
busca con cada elemento del arreglo hasta
cuando se encuentra.
C o m p u t a c i o n
u u u u u
0 1 2 3 4 5 6 7 8 9 10
Resultado =4
298
Bsqueda Secuencial
Algoritmo:
for (i=0;i<Largo;i++)
if (A[i]==Elemento)
printf(\nElemento Encontrado!!!);
150
299
Bsqueda Binaria
Los elementos del arreglo se encuentran ordenados y
no estn repetidos. En cada iteracin el dominio de
bsqueda se divide en 2.
3 5 8 20 32 45 60 73
32 32
0 1 2 3 4 5 6 7
Resultado =4
32
300
Bsqueda Binaria
Algoritmo
tipo A[Largo]
Max=Largo-1;
min=0;
Encontrado=0;
while(min+1<max && !Encontrado){
Medio=(Max+min)/2;
if (A[Medio]==Elemento){
printf(\nElemento Encontrado!!!);
Encontrado=1; /*Fuerza la salida del ciclo*/
}
if (A[Medio]<Elemento) Max=Medio;
if (A[Medio]>Elemento) min=Medio;
}
151
301
Algoritmos de
Ordenacin
302
Algoritmos de Ordenacin
Definicin:
Son algoritmos que fueron realizados para ordenar
un conjunto de datos. Los algoritmos varan segn su
facilidad de entendimiento, su eficiencia, cantidad de
cdigo necesario para implementarlos, complejidad,
requisitos necesarios de los datos.
152
303
Algoritmos de Ordenacin.
Tipos de Algoritmos:
1.- Ordenamiento Burbuja.
2.- Quick-Sort
304
Ordenacin Burbuja
El algoritmo consiste en que los elementos ms
pesados se hundan y los ms livianos salgan a
flote.
25
25
32
15
1 1
32
15
32
1
15
25
32
1
25
15
32
25
1
15
32
25
15
1
32
25
15
1
153
305
Ordenacin Burbuja
Algoritmo
for (i=Largo-1;i>0;i--)
for (j=0;j<i;j++)
if (A[j]>A[j+1])
Intercambiar(A[j],A[j+1]);
306
Arreglos
Bidimensionales
154
307
Arreglos Bidimensionales.
Definicin:
Es un arreglo de dos dimensiones el cual est
indexado por medio de 2 ndices.
A[i][j]
Declaracin:
tipo nombre_de_variable[tamao_1][tamao_2];
308
Una matriz bidimensional tiene la siguiente
forma:
Para acceder al dato a
ij
se hace de la siguiente
manera:
c=A[i][j];
mxn
mn m m
n
n
a a a
a a a
a a a
A
=
. ..........
....... .......... ..........
. ..........
.........
2 1
2 22 21
1 12 11
Arreglos Bidimensionales
155
309
Bsqueda en Arreglos Bidimensionales
Al igual que en un arreglo unidimensional, se
puede necesitar encontrar un elemento en un
arreglo bidimensional para lo cual se necesita
algn algoritmo de bsqueda.
Veamos la Bsqueda Secuencial.
310
Bsqueda Secuencial
Bsqueda Secuencial:
Consiste en ir comparando el elemento que se busca
con cada elemento del arreglo hasta cuando se
encuentra, el recorrido se puede hacer por filas o por
columnas.
156
311
Algoritmo: Bsqueda por filas
tipo A[filas][columnas]
for (i=0;i<filas;i++)
for (j=0;j<columnas;j++)
if (A[i][j]==elemento)
printf(\nElemento encontrado!!!);
h d k s a
l e v d g
r t k j h
m n w q t
v
v
Posicin:
Fila: 1
Columna: 2
Bsqueda Secuencial
312
Bsqueda Secuencial
Algoritmo: Bsqueda por columnas
tipo A[filas][columnas]
for (j=0;j<columnas;j++)
for (i=0;i<filas;i++)
if (A[i][j]==elemento)
printf(\nElemento encontrado!!!);
h d k s a
l e v d g
r t k j h
m n w q t
v
v
Posicin:
Fila: 1
Columna: 2
157
313
Arreglos
Multidimensionales
314
Arreglos Multidimensionales.
Definicin:
Es un arreglo con k-dimensiones, el cual est
indexado por medio de k ndices.
A[m].[n]
Declaracin:
tipo nombre_de_variable[tamao_1]...[tamao_k];
k
158
315
Estructura de datos
usando Arreglos
316
Stack o Pila
Definicin:
Una pila es una estructura de datos, consistente en un
arreglo al que se le puede insertar o sacar elementos por un
solo lado. Tambin se conoce como LIFO (Last In First Out).
1
Largo
159
317
Stack o Pila
Posee cuatro operaciones bsicas:
Insertar: inserta un elemento en el tope de la pila.
Sacar: Saca un elemento del tope de la pila.
Tope: Muestra el elemento ubicado en el tope de
la pila.
Vaca: Retorna verdadero si la pila est vaca.
318
Estructuras
160
319
Creacin de
Tipos de datos propios.
El lenguaje C proporciona 5 formas diferentes de tipos de datos
propios:
1.- Estructura: es una agrupacin de variables bajo un nombre y
se llama, a veces, un tipo de datos conglomerado.
2.- Campo bits: es una variacin de la estructura y permite un fcil
acceso a los bits dentro de una palabra.
3.- Unin: permite que la misma parte de memoria sea definida
como dos o ms tipos diferentes de variables.
4.- Enumeracin: es una lista de smbolos.
5.- typedef: crea un nuevo nombre para un tipo ya existente.
320
Estructuras
Una estructura es una coleccin de variables
que se denomina bajo un nico nombre,
proporcionando un medio eficaz de mantener
junta la informacin relacionada.
Una declaracin de estructura forma una
plantilla que puede utilizarse para crear
variables de estructuras.
Las variables que componen la estructura se
llaman elementos de la estructura o campo.
161
321
Declaracin de una Estructura.
La palabra clave struct indica al compilador que
se est declarando una estructura.
struct nombre_estructura{
tipo_dato_1 campo_1;
tipo_dato_2 campo_2;
.
tipo_dato_n campo_n;
};
322
Declaracin de Variables
Una vez declarada la estructura se debe
declarar variables con esta estructura:
Cuando se declara una estructura, se est
definiendo, esencialmente un tipo complejo de
variable compuesto por los elementos de la
estructura.
struct nombre_estructura variable_1,variable_2,.;
162
323
Otra forma de Declaracin
struct nombre_estructura{
tipo_dato_1 campo_1;
tipo_dato_2 campo_2;
.
tipo_dato_n campo_n;
}variable_1,variable_2,...;
324
Referencia a los
elementos de una Estructura
A los elementos individuales de una estructura
se hace referencia utilizando el operador .:
variable_1.campo_i;
163
325
Ejemplo
#include <stdio.h>
struct datos{
char nombre[30];
char direccion[30];
int n_empleado,edad;
float sueldo;
}
void main(){
struct datos persona;
printf(\n Ingrese nmero de empleado:);
scanf(%d,&persona.n_empleado);
printf(\n Ingrese nombre:);
scanf(%s,persona.nombre);
printf(\n Ingrese edad:);
scanf(%d,&persona.edad);
printf(\n Ingrese direccin:);
scanf(%s,persona.direccion);
printf(\n Ingrese sueldo:);
scanf(%f,&persona.sueldo);
}
326
Arreglos de Estructuras
Para declarar un arreglo de estructuras, se debe
definir primero la estructura y luego declarar un
variable arreglo de dicho tipo.
struct nombre_estructura variable[Tamao];
164
327
Ejemplo
#include <stdio.h>
struct datos{
char nombre[30];
char direccion[30];
int n_empleado,edad;
float sueldo;
}
void main(){
struct datos persona[10];
for (int i=0;i<10;i++){
printf(\n Ingrese nmero de empleado:);
scanf(%d,&persona[i].n_empleado);
printf(\n Ingrese nombre:);
scanf(%s,persona[i].nombre);
printf(\n Ingrese edad:);
scanf(%d,&persona[i].edad);
printf(\n Ingrese direccin:);
scanf(%s,persona[i].direccion);
printf(\n Ingrese sueldo:);
scanf(%f,&persona[i].sueldo);
}
}
328
Paso de Estructuras a Funciones
Se puede pasar un elemento o la estructura
completa a una funcin.
Paso de un elemento:
struct nombre_estructura{
tipo_dato_1 campo_1;
tipo_dato_2 campo_2;
.
tipo_dato_n campo_n;
}variable_1;
int funcion(tipo_dato_i VARIABLE);
.
funcion(variable_1.campo_i);
165
329
Ejemplo
#include <stdio.h>
struct datos{
char nombre[30];
char direccion[30];
int n_empleado,edad;
float sueldo;
}
float funcion(float *a,int t){
*a=(float) (t*1.015);
return *a;
}
void main(){
float f;
struct datos persona[10];
f=funcion(&persona.sueldo,10);
}
330
Paso de Estructuras a Funciones
Paso de una estructura completa por valor:
struct nombre_estructura{
tipo_dato_1 campo_1;
tipo_dato_2 campo_2;
.
tipo_dato_n campo_n;
}variable_1;
int funcion(struct nombre_estructura VARIABLE);
.
funcion(variable_1);
166
331
Ejemplo
#include <stdio.h>
struct datos{
char nombre[30];
char direccion[30];
int n_empleado,edad;
float sueldo;
}
void mostrar(struct datos A){
printf(\n Nmero de empleado: %d, A.n_empleado);
printf(\n nombre: %s, A.nombre);
printf(\n edad: %d, A.edad);
printf(\n direccin: %s, A.direccion);
printf(\n sueldo: %f, A.sueldo);
}
}
void main(){
struct datos persona;
...
mostrar(persona);
}
332
Paso de Estructuras a Funciones
Paso de una estructura completa por referencia:
struct nombre_estructura{
tipo_dato_1 campo_1;
tipo_dato_2 campo_2;
.
tipo_dato_n campo_n;
};
int funcion(struct nombre_estructura *VARIABLE){
. . .
VARIABLE->campo_1;
. . .
};
. . .
funcion(&variable_1);
167
333
Ejemplo
void modificar(struct datos *A){;
printf(\n Ingrese nmero de empleado:);
scanf(%d,&A->n_empleado);
printf(\n Ingrese nombre:);
scanf(%s,A->nombre);
printf(\n Ingrese edad:);
scanf(%d,&A->edad);
printf(\n Ingrese direccin:);
scanf(%s,A->direccion);
printf(\n Ingrese sueldo:);
scanf(%f,&A->sueldo);
}
void main(){
struct datos persona;
modificar(&persona);
}
#include <stdio.h>
struct datos{
char nombre[30];
char direccion[30];
int n_empleado,edad;
float sueldo;
}
334
Archivos
168
335
Archivos v/s Memoria
Memoria Archivo
Voltil Almacenamiento
Fijo
Limitada y
pequea.
Limitada, pero
con una mayor
capacidad de
almacenamiento
Rpida Lenta
336
Observacin
La Memoria tambin se conoce como
Memoria Principal o Primaria.
Los archivos tambin se conocen como
memoria Secundaria.
Los datos de la memoria secundaria deben
ser transferidos a la memoria principal antes
de ser accedidos por un proceso.
169
337
Flujos y Archivos
El sistema de E/S de C:
Suministra al programador de C un interfaz
consistente e independiente del dispositivo al que se
est accediendo.
Proporciona un nivel de abstraccin entre el
programador y el dispositivo que se est usando.
A la abstraccin se denomina flujo; al dispositivo real
se le denomina archivo.
338
Flujos
Permite trabajar con una amplia variedad de
dispositivos.
El sistema de archivos con buffer transforma cada
dispositivo en un dispositivo lgico llamado flujo.
Todo flujo se comporta de manera similar.
Existen dos tipos de flujos: de texto y binarios.
170
339
Flujos de Texto
Es una secuencia de caracteres.
En un flujo de texto, pueden ocurrir ciertas
conversiones de caracteres si el entorno del
sistema lo requiere.
El nmero de bytes escritos y ledos puede no
ser iguales.
340
Flujos Binarios
Es una secuencia de bytes con una
correspondencia de uno a uno con los
dispositivos externos.
No se realizan conversiones de caracteres.
El nmero de bytes escritos y ledos es el
mismo.
171
341
Archivos
Es un concepto lgico que puede ser aplicado a
cualquier cosa, desde un archivo de disco a un terminal.
Se asocia un flujo con un archivo especfico realizando
una operacin de apertura.
Una vez el archivo abierto se puede intercambiar la
informacin entre el archivo y el programa.
Si el archivo permite acceso directo (poder posicionarse
en algn lugar), al abrir el archivo, el indicador de
posicin se ubica al comienzo.
342
Archivos
Se puede desasociar un archivo de un flujo especfico
con una operacin de cierre.
Cuando se cierra un flujo, se escribe el contenido de su
buffer asociado en el dispositivo externo
172
343
Flujo
Flujos y Archivos
Archivo
0101110
Memoria
Buffer
100101101
CPU
0101110 0101110 100101101 100101101
100101101 0101110
344
Flujos y Archivos
Archivo
Memoria
Buffer
CPU
173
345
Sistema de Archivos ANSI C
Nombre Funci n
fopen() Abre un flujo
fclose() Cierra un flujo
fputc() Escribe un carcter en un flujo
fgetc() Lee un carcter de un flujo
fseek() Busca un Byte especfico de un flujo
fprintf() Equivalente a printf()
fscanf() Equivalente a scanf()
feof() Devuelve Verdadero si llego al final del flujo
ferror() Devuelve Verdadero si se produjo un error.
rewind() Se ubica en el comienzo del archivo
remove() Elimina un archivo
Se requiere incluir la biblioteca stdio.h
346
El puntero a Archivo
Es el hilo comn que unifica el sistema de E/S con
buffer.
Un puntero a un archivo es un puntero a una
informacin que define varias cosas sobre l, incluyendo
su nombre, su estado y su posicin actual.
Es un puntero a una variable de tipo puntero a FILE
Prototipo:
FI LE *ar chi vo;
174
347
fopen()
Abre un flujo para que pueda ser utilizado, lo
asocia a un archivo y despus, devuelve el
puntero a FILE de es flujo.
Prototipo:
modo: apunta a una cadena que contiene el estado
de apertura deseado.
nombre_archivo: cadena de caracteres que
representa un nombre vlido de archivo
FI LE *f open( const char *nombr e_ar chi vo, const char *modo)
348
Valores vlidos de modo
Modo Significado
" r" Abre archivo de texto para lectura
" w" Crea archivo de texto para escritura
" a" Abre archivo de texto para aadir
" rb" Abre archivo binario para lectura
" wb" Crea archivo binario para escritura
" ab" Abre archivo binario para aadir
" r+" Abre archivo de texto para lectura/escritura
" w+" Crea archivo de texto para lectura/escritura
" a+" Abre o crea archivo de texto para lectura/escritura
" r+b" Abre archivo binario para lectura/escritura
" w+b" Crea archivo binario para lectura/escritura
" a+b" Abre o crea archivo binario para lectura/escritura
" rt" Abre archivo de texto para lectura
" wt" Crea archivo de texto para escritura
" at" Abre archivo de texto para aadir
" r+t" Abre archivo de texto para lectura/escritura
" w+t" Crea archivo de texto para lectura/escritura
" a+t" Abre o crea archivo de texto para lectura/escritura
175
349
Deteccin de error de apertura
FI LE *Ar chi vo;
i f ( ( Ar chi vo=f open( nombr e_ar chi vo, modo) ) ==NULL) {
pr i nt f ( \ n Pr obl emas al abr i r el ar chi vo) ;
exi t ( 1) ;
}
350
fclose()
Cierra un flujo que fue abierto por fopen().
Escribe toda la informacin que todava se
encuentre en el buffer del disco al archivo y
cierra el archivo.
Prototipo:
Devuleve 0 si no ocurre ERROR, EOF en caso
de que ocurra un error.
int fclose(FILE *Archivo)
176
351
fputc()
Escribe caracteres en un flujo que haya sido
abierto para escritura.
Prototipo:
c es el carcter que se va a escribir.
Devuelve el carcter escrito si no ocurre
ERROR, EOF en caso de que ocurra un error.
int fputc(int c,FILE *Archivo)
352
fgetc()
Lee caracteres en un flujo que haya sido abierto
para lectura.
Prototipo:
c es el carcter que se va a escribir.
Devuelve el carcter escrito.
EOF en caso de se acabe el archivo.
int fgetc(FILE *Archivo)
177
353
Ejemplo
Realizar un programa en el cual guarde en un
archivo la informacin introducida por el usuario
a travs del teclado. Se termina la introduccin
por el teclado con el carcter $.
Realizar un programa que lea lo introducido.
354
Ejemplo
#include <stdio.h>
int main(){
FILE *Archivo;
char c;
if ((Archivo=fopen("datos.dat","w"))==NULL){
printf("No se puede abrir el archivo");
return 1;
}
do{
c=getchar();
putc(c,Archivo);
}while(c!='$');
fclose(Archivo);
return 0;
}
178
355
fprintf() y fscanf()
Se comportan de manera parecida a printf() y
scanf(), pero se le debe entregar un argumento
ms que corresponde a la variable de flujo con
la que se desea trabajar.
Prototipo:
int fprintf(FILE *Archivo, const char *cadena,...);
int fscanf(FILE *Archivo, const char *cadena,...);
356
fprintf()
Prototipo:
int fprintf(FILE *Archivo,const char *cadena,);
Cdigo Formato
%c Un ni co car ct er
%d Deci mal
%i Deci mal
%e Not aci n ci ent f i ca
%f Deci mal en punt o f l ot ant e
%g Usar el %eo %f , el ms cor t o.
%o Oct al
%s Cadena de car act er es.
%u Deci mal es si n si gno
%x Hexadeci mal es
%% I mpr i me %
%p Muest r a un punt er o
179
357
Ejemplo
#include <stdio.h>
int main(void)
{
FILE *fp;
int i = 100;
char c = 'C';
float f = 1.234;
/* Abrir archivo para actualizacion */
fp = fopen(ARCH.TXT", "w+");
/* Se escribe algo en el archivo */
fprintf(fp, "%d %c %f", i, c, f);
/* Cerrar el archivo */
fclose(fp);
return 0;
}
358
fprintf()
Cdigo Significado
\ b Espaci o at r s
\ f Sal t o de pgi na
\ n Sal t o de l nea
\ r Ret or no de car r o
\ t Tabul aci n hor i zont al
\ " Comi l l as dobl es
\ ' Comi l l a si mpl e
\ 0 Nul o
\ \ Bar r a i nver t i da
\ v Tabul aci n ver t i cal
\ a Al er t a
\ o Const ant e oct al
\ x Const ant e hexadeci mal
180
359
fscanf()
Prototipo:
int fscanf(FILE *Archivo,const char *cadena,.);
Cdigo Formato
%c Un ni co car ct er
%d Deci mal
%i Deci mal
%e Not aci n ci ent f i ca
%f Deci mal en punt o f l ot ant e
%g Usar el %eo %f , el ms cor t o.
%o Oct al
%s Cadena de car act er es.
%u Deci mal es si n si gno
%x Hexadeci mal es
%% I mpr i me %
%p Muest r a un punt er o
360
Ejemplo
#include <stdlib.h>
#include <stdio.h>
int main(void)
{
FILE *fp;
int i;
printf(\n Ingrese un entero: ");
fp=fopen(arch.dat,r+);
/* Se lee un entero del archivo */
if (fscanf(fp, "%d", &i))
printf(El entero leido fue: %i\n", i);
else
{
fprintf(fp, "Error al leer un entero.\n");
exit(1);
}
return 0;
}
181
361
rewind()
Prototipo:
Posiciona el puntero de flujo al comienzo del archivo.
int rewind(FILE *Archivo);
362
ftell
Prototipo:
Retorna la posicin actual del puntero del flujo.
Est medido en Bytes desde el comienzo del archivo.
Si retorna -1L si hubo errores.
long ftell(FILE *Archivo);
182
363
Ejemplo
#include <stdio.h>
int main(void)
{
FILE *Archivo;
Archivo = fopen("MIARCH.TXT", "w+");
fprintf(Archivo, Esta es una prueba");
printf(El puntero al archivo esta en el Byte %ld\n", ftell(Archivo));
fclose(Archivo);
return 0;
}
364
fseek()
Prototipo:
Ubica el puntero de archivo asociado con el flujo a
una nueva posicin, la cual se encuentra a desp
bytes de desde.
desde puede ser:
SEEK_SET Comienzo del archivo.
SEEK_CUR Ubicacin actual.
SEEK_END Fin del archivo.
Retorna 0 si el movimiento fue exitoso.
int fseek(FILE *Archivo, long desp, int desde);
183
365
Ejemplo
#include <stdio.h>
long tamano(FILE *Arch); /*Prototipo de la funcion*/
int main(void)
{
FILE *fp;
fp = fopen(MIARCH.TXT", "w+");
fprintf(fp, Esta es una prueba");
printf(Tamano del archivo MIARCH.TXT es %ld bytes\n", filesize(fp));
fclose(fp);
return 0;
}
long tamano(FILE *Arch)
{
long pos_actual, longitud;
pos_actual = ftell(Arch);
fseek(Arch, 0L, SEEK_END); /* 0L equivale a una longitud de 0*/
longitud = ftell(Arch);
fseek(Arch,pos_actual, SEEK_SET);
return longitud;
}
366
Prototipo:
Elimina un archivo dado por filename.
int remove(const char *filename);
remove
184
367
Ejemplo
#include <stdio.h>
int main(void)
{
char nombre[80];
printf(Archivo a eliminar: ");
scanf("%s",nombre);
/* Borrar el archivo */
if (remove(nombre) == 0)
printf("Archivo Borrado %s.\n",nombre);
else{
printf("Problemas al borrar el archivo");
return 1;
}
return 0;
}
368
feof()
Prototipo:
Retorna 0 si el fin de archivo no se ha alcanzado.
Retorna 1 si es fin de archivo.
int feof(FILE *archivo);
185
369
Ejemplo
#include <stdio.h>
int main(void)
{
FILE *fp;
/* Abrir el archivo para lectura */
fp = fopen(Arch.txt", "r");
/* Lee un caracter del archivo */
fgetc(fp);
/* Revisa EOF */
if (feof(fp))
printf(Se ha llegado al fin de archivo(end-of-file)\n");
/* Cerrar el archivo */
fclose(fp);
return 0;
}
370
Archivos Estructurados
186
371
Archivos Estructurados
Cuando se trabaja con estructuras, por lo
general es necesario transferir la informacin a
un archivo, y as tener la informacin
almacenada en algn medio fsico para su
posterior uso.
Para ello es necesario conocer algunas
funciones para facilitar el traspaso de los datos
de una estructura a un archivo.
372
Archivos Estructurados
Consiste en un tipo especial de Archivo de
Texto en el cual a cada campo de una
estructura se le asigna un espacio equivalente
en el archivo, por lo tanto, se realiza un mapeo
de la estructura al archivo y viceversa.
187
373
fread()
Lee los datos de un flujo.
Prototipo:
Lee n itemes de datos, cada uno con una longitud de
size bytes, de un flujo de entrada dado por el bloque
apuntado por ptr.
El nmero total de bytes ledos es n*size
Valores de Retorno:
Si la tarea se completa exitosamente, se retorna el nmero
de temes que se leyeron.
Retorna 0 al final del archivo o error.
size_t fread(void *ptr, size_t size, size_t n, FILE *stream);
374
Ejemplo
#include <string.h>
#include <stdio.h>
int main(void) {
FILE *stream;
char msg[] = Esta es una prueba";
char buf[20];
if ((stream = fopen(PRUEBA.TXT", "w+"))== NULL){
fprintf(stderr, No se puede abrir archivo.\n");
return 1;
}
/* Se escribe algunos datos al archivo */
fwrite(msg, strlen(msg)+1, 1, stream);
/* Busca el comienzo del archivo */
fseek(stream, SEEK_SET, 0);
/* Lee el dato y lo muestra */
fread(buf, strlen(msg)+1, 1, stream);
printf("%s\n", buf);
fclose(stream);
return 0;
}
188
375
fwrite()
Escribe un flujo
Prototipo:
Adiciona n temes de datos , cada uno con un tamao
de size bytes, al archivo de salida.
El dato escrito comienza en ptr.
El nmero total de bytes escrito es n*size.
Valores Retornados:
Si la tarea se completa exitosamente se retorna el nmero
de temes escritos.
En caso contrario retorna 0 o error.
size_t fwrite(const void *ptr,size_t size, size_t n, FILE* stream);
376
Ejemplo
#include <stdio.h>
struct mi_estructura{
int i;
char ch;
};
int main(void){
FILE *stream;
struct mi_estructura s;
if ((stream = fopen(Archivo.txt", "wb"))== NULL){
fprintf(stderr, No se puede abrir el archivo.\n");
return 1;
}
s.i = 0; s.ch = 'A';
fwrite(&s, sizeof(s), 1, stream); /* escribe la estructura s en el
archivo */
fclose(stream); /* cierra el archivo */
return 0;
}
189
377
Lenguaje de
programacin C