Vous êtes sur la page 1sur 47

Universidad Mayor de San Andres

Facultad de Ingeniera
Ingeniera Electr
onica

Gua de Laboratorio de Programaci


on
ETN - 307
*
Autor Ing. Maximo O. Torrez H.

GUIA DE LABORATORIO No - 1
TEMA: Introduccion al Dev C++
ETN-307
PROGRAMACION

1.

Objetivo
Conocer los antecedentes que llevaron a la creacion del lenguaje C++.
Reconocer el entorno de desarrollo Dev-C++.
Conocer la estructura general de un programa en C, sus tipos de datos y operadores.
Conocer como se declaran las variables y constantes dentro de un codigo fuente.
Conocer el procedimiento b
asico para la edicion compilacion, depuracion y ejecucion de un programa.

2.

El Lenguaje C++

2.1.

Antecedentes

El lenguaje C es un lenguaje de proposito general que fue desarrollado en los laboratorios Bell en 1972.
Sus creadores son Dennis Ritchie y Ken Thompson, y cuyo predecesor fue el lenguaje B (1967 por Martin
Richards).Sus aplicaciones iniciales fueron en Unix, en el desarrollo de su Kernel y otras funciones.
En 1980 ANSI desarrolla ANSI C estandary posteriormente ANSI C++ principalmente por Bjarne Stroustrup. que involucra manipulaci
on de objetos y se transforma en un lenguaje hbrido(programacion estructurada y programaci
on orientada a objetos ).
C++ tiene la posibilidad de re-definir los operadores, y crear nuevos tipos que se comporten como tipos
fundamentales.
La mayora de los compiladores actuales soportan la programacion en C Estandar, C Orientado a Objetos
y La Programaci
on Visual.
Algunos de los compiladores existentes son:
Gcc
C++
Turbo C ++
Borland C++
Entre las aplicaciones mas conocidas desarrolladas en lenguaje C++ se tiene:
Facebook
Google
Unix
Office
YouTube

2.2.

Los IDEs y el entorno de desarrollo Dev-C++

Un IDE es un conjunto de herramientas destinadas a facilitar la edicion(editor de codigo), depuraci


on
(debugger), compilaci
on y ejecuci
on de programas, entre otras muchas herramientas mas. Entre los IDEs
(Entornos de desarrollo integrado) tenemos:
Ultimate++, RAD multiplataforma para C++. Para Windows y Linux.
Code Blocks es otra completa solucion gratis para Windows, Linux y Mac OS X.
1

Anjuta DevStudio es un IDE para C/C++ especialmente para Gnome en Linux.


Eclipse famoso por su creaci
on como entorno por excelencia para Java, pero que tambien soporta C y
C++ adem
as funciona en Linux, Windows y Mac Os X gracias que esta hecho en Java.
Microsoft Visual Studio Express es una version de desarrollo y gratis del IDE de Bill Gates para
programar en sus lenguajes Visual Basic, C#, C++, Solo para Windows.
Dev-C++ es un IDE gratis para el lenguaje Dev-C++. Para Windows.
NetBeans IDE tambien soporta C y C++ ademas de Java, Ruby, PHP entre otros.
Borland C++ versi
on 5.5 del compilador disponible para descargar gratis para Windows. Solo el compilador no el IDE, pero merece la pena.

Que es el Dev C++


El Dev-C++ es libre, lo que implica que se puede acceder al mismo y/o
a su c
odigo fuente de forma gratuita, en s no es el compilador, sino simplemente un entorno gr
afico para utilizar el verdadero compilador: el MinGW
(Minimalist Gnu Windows). Este compilador, como puede deducirse por el
nombre, es tambien software libre bajo la licencia GNU. El compilador es
un port (conversor) del famoso compilador GCC de los sistemas GNU/linux
y, de hecho, puede ser utilizado como el original, por lnea de comandos y
con sus mismos argumentos. Se puede descargar gratuitamente de:
http://www.bloodshed.net/dev/devcpp.html
En la secci
on Downloads se tiene la versi
on: Dev-C++ 5.0 beta 8 (4.9.8.0) (12
MB) with Mingw/GCC 3.2 y varios lugares para descargarlo.(no confundir
con la versi
on de 2MB, que incluye u
nicamente del IDE, no el compilador)
El entorno

Figura 2: El entrono del Dev C++

Figura 1: Logo de Dev-C++

2.3.

El Men
u y la barra de herramientas

Aqu se muestra el men


u con los tpicos comandos de Windows (abrir, guardar, copiar y pegar?). Tambien
tenemos una serie de iconos en las barras de herramientas que no son mas que una parte de las opciones que
tenemos en los men
us, as si se acerca el cursor a uno de los iconos aparecera la representacion de los atajos
o combinaci
on de teclas que perite su ejecucion. . (Como veremos, los atajos de teclado tambien se pueden
configurar)

2.4.

Explorador de proyectos

Dependiendo de la pesta
na que seleccionemos en esta area tendremos acceso a:
1. Explorador de proyectos, que muestra los archivos por los
que est
a formado nuestro proyecto (o los que son necesarios para generar nuestra aplicacion) bien sean de codigo, de
encabezados, o de recursos.
2. Explorador de clases, una de las funciones mas u
tiles. En este
caso veremos cada una de las estructuras y/o clases definidas
en los ficheros de nuestro proyecto, as como los metodos y
datos que forman parte de la estructura/clase, incluyendo
sus argumentos y su tipo. Tambien veremos una lista de las
funciones globales que tenemos en el proyecto, tambien con
sus argumentos. Pulsando doble clic en un metodo, funcion
o clase, iremos directamente al archivo y lnea donde se ha
definido.

Figura 3: Explorador de Proyectos

3. Informaci
on de depuraci
on, aqu podremos definir las variables que queramos cuando estemos depurando un programa.
2.4.1.

Area
de edici
on

Figura 4: Area
de Edicion
Aqu aparecer
an los ficheros de c
odigo que esten activos. Se puede tener mas de un fichero abierto a la
vez, y seleccionarlo por medio de las pesta
nas que apareceran en la parte superior de este area.
3

2.4.2.

Salida de compilaci
on y mensajes

Figura 5: Salida de Compilacion y Mensajes


En esta serie de pesta
nas se encuentran la informacion acerca del proceso de compilacion y depuraci
on.
Cuando se selecciona una pesta
na se expandira para mostrar los resultados, al tiempo que aparecer
a una
nueva pesta
na que se sumar
a a las cinco anteriores.
La pesta
na compilador muestra los errores y advertencias que ha generado la compilacion del codigo (si
los hubiera). Pulsando doble clic en uno de ellos remitira directamente a la lnea que provoco dicho error
o advertencia. En la pesta
na resultados del compilador, se tiene toda la salida que genera el compilador
gcc (que recordemos se maneja por lnea de comandos) Esto tambien incluye errores y avisos, al igual que
en la pesta
na anterior. Sin embargo no se tiene la opcion del doble clic para ir directamente a la lnea que
provoc
o el error.
En la pesta
na depurar se tiene los controles de depuracion que son los mismos que los que hay en el
men
u Depurar.
2.4.3.

El men
u File

Permite realizar operaciones con ficheros y ademas salir del programa.


Nuevo proyecto
Nueva plantilla
Abrir proyecto existente o Archivo
Abrir archivos recientes
Fichero nuevo
Nuevo recurso
Guardar
Guardar con otro nombre
Guardar todos los Archivos abiertos
Cerrar proyecto
Figura 6: El men
u File

Cerrar ventana actual


Exportar a HTML o RTF (Word)
Imprimir
Setup impresora
Salir del Programa

2.4.4.

El men
u Edit

Se refiere a las acciones que se pueden realizar en la edicion del texto.


Algunas de las operaciones que se pueden realizar son:
Deshacer
Rehacer
Cortar
Copiar
Pegar
Insertar
Insertar una marca
Ir a una marca
Seleccionar todo el contenido de la ventana
2.4.5.

Figura 7: El men
u Edit

El men
u Search

Se refiere a las acciones de b


usqueda de texto en el codigo abierto.
Algunas de las operaciones que se pueden realizar son:
Buscar
Buscar la siguiente aparici
on
Buscar y reemplazar
Ir a la lnea n
umero. . .
2.4.6.

El men
u Proyecto

Figura 8: El men
u Search

Se refiere a la creaci
on de proyectos y su administracion.
Algunas de las operaciones que se pueden realizar son:
Crear nuevo proyecto
Adicionar al proyecto
Remover del Proyecto
opciones de Proyecto
2.4.7.

Figura 9: El men
u Proyecto

El men
u View

Se refiere a las posibles acciones de Vistas del proyecto o codigo


abierto.
Algunas de las operaciones que se pueden realizar son:
ventana de vision del proyecto o clases
Vista de barra de estados
barra de herramientas
...
Ir a ventana de ....

2.4.8.

El men
u Ejecutar

Se refiere a la accion de ejecucion del programa.


Algunas de las operaciones que se pueden realizar son:
Crear nuevo proyecto
Adicionar al proyecto
Remover del Proyecto
opciones de Proyecto

2.5.
2.5.1.

Procedimiento del Laboratorio


inicializacion del Dev-C++

1. Haga clic en bot


on Inicio (Windows), busque la opcion Todos los Programas y luego, apunte a Bloodshed Dev C++ y haga clic en (Dev C++) para ejecutar nuestro entorno de desarrollo. Luego aparecer
a la
ventana del compilador vaca
2. Para crear un nuevo programa (c
odigo fuente), haga clic en Archivo y luego apunte a la opcion Nuevo,
y por u
ltimo, haga clic en Archivo fuente.
3. Ahora proceda a crear cada uno de los siguientes programas:
a) Programa Hola mundo
Transcribir el siguiente C
odigo en el editor de codigos
#include<stdio.h>
#include<conio.h>
// Este es un comentario
/*Este es un programa en C
para mostrar el famoso Hola Mundo */
int main(){
printf("Hola Mundo\n");
getche();
return(0);
} //fin main
La Linea
#include<stdio.h>
Define la inclusi
on de la librera de funciones estandar de entradas y salidas ANSI C.
La directiva #include hace que el compilador incluya otro archivo fuente en el que tiene la
directiva #inculde. El nombre del archivo fuente a leer debe estar entre dobles comillas o
entre los smbolos < ... >
La Linea
#include<conio.h>
Define la inclusi
on de la librera de funciones ne manejo de pantalla.
Las Lineas
// Este es un comentario
/*Este es un programa en C
para mostrar el famoso Hola Mundo */

Se utilizan para introducir comentarios que ayuden a el mejor entendimiento de de un c


odigo
fuente, muy u
til para el mantenimiento de un programa. Existen dos formas de realizar comentarios.
//
/*...*/

Es utilizado para realizar un comentario corto que puede entrar en una sola linea
Es utilizado para realizar un comentario largo que sobrepasa mas de una linea

La Linea
int main () {
Define la declaraci
on de la funcion principal main.La
unica funcion que debe estar absolutamente
presente, siendo la primera funcion que es llamada cuando comienza al ejecucion del programa.

int Establece que el valor que retorna la funcion main es un entero


() Establece los valores que requiere la funcion main como argumentos
{
Establece el inicio de las declaraciones que realizara la funcion main
}
Establece el fin de las declaraciones que realizara la funcion main
Las Lineas
printf("Hola Mundo\n");
getche();
return(0);
Define las operaciones que realizara el programa
printf(Hola Mundo \ n );
Imprime en la pantalla el mensaje Hola mundo
\n
Realiza un salto de linea
getche();
funci
on de entrada por consola que imprime un caracter en la pantalla en la posicion actual del
cursor
return(0);
retorna un valor igual a 0 a la funcion principal

Guardamos el programa con el nombre de ejemplo 1.cpp y compilamos con Ctrl+F9 o por medio
del men
u ejecutar y compilar o simplemente en el icono
Luego ejecutar el programa, para ello
haga clic en el icono
, por medio de el men
u o finalmente por medio de las teclas Ctrl+F10
si existiera alg
un problema o error verificar que:
Revisar bien la sintaxis, cada coma, punto es fundamental que se encuentre en la secuencia
correcta.
Ser cuidadoso con el uso apropiado de may
usculas y min
usculas, debido a que C es CaseSensitive.
Recordar el conjunto de palabras reservadas de C, las cuales no se pueden usar como nombres
de variables.
b) Pedir dos n
umeros al usuario y hacer operaciones con ellos
Transcribir el siguiente C
odigo en el editor de codigos
#include<stdio.h>
#include<conio.h>
main()
{
7

int a,b; //entradas


int c; //salidas
printf("Introduzca valor de a:\t");
scanf("%d",&a);
printf("Introduzca valor de b:\t");
scanf("%d",&b);
printf("********** Operaciones basicas ************ \n");
//calcula y muestra el resultado de una suma
c=a+b;
printf("a+b= %d\n",c);
//calcular y muestra resultado de la resta
c=a-b;
printf("a-b= %d\n",c);
//Ahora el producto
c=a*b;
printf("a*b= %d\n",c);
//Muestra resultado del cociente entero
c=a/b;
printf("a entre b= %d\n",c);
//y finalmente, el resultado del residuo de una division
c=a%b;
printf("residuo de a entre b = %d\n",c);
getche();
} //fin main
La Linea
int a,b;
Define la forma de declarar variables en el programa. La Linea
scanf("%d",&a);
La funci
on scanf() es la funcion de entrada con formato. Esta funcion se puede utilizar para
introducir n
umeros con formato de maquina, caracteres o cadena de caracteres, a un programa.
La Linea
c=a+b;
Realiza la operaci
on de suma de las variables a y b donde el resultado se le asigna a la variable c.
La Linea
printf("a+b= %d\n",c);
imprime en pantalla el texto a+b= y acontibuacion el valor de c donde se ubica el especificador %d.
c) Similar al programa anterior pero con la utilizacion de la librera de funciones entradas-salidas de
C++ (iostream.h) Transcribir el siguiente Codigo en el editor de codigos
#include <iostream.h>
#include<conio.h>
int main()
{
int a,b; //entradas
int c; //salidas
cout<<"Introduzca valor de a:\t";
cin>>a;
cout<<"Introduzca valor de b:\t";
cin>>b;
//calcula y muestra el resultado de una suma
c=a+b;
cout<<"a+b="<<c;
8

getche();
return(0);
} //fin main
La Linea
#include <iostream.h>
Incluye la librera est
andar de funciones de entrada y salida de C++. Las Lineas
cout<<"Introduzca valor de a:\t";
cin>>a;
cout(( y cin)) son las funciones de entrada y salida estandar en C++ y son mas flexibles, note que
ya no se utiliza los especificadores.
2.5.2.

Problemas para resolver

1. Realizar un programa que ordene tres n


umeros que se introducen por teclado de mayor a menor.
2. Realizar un programa que cuente el numero de caracteres que se encuentra de una palabra introducida
por teclado
3. imprimir en pantalla los c
odigos ASCII

2.6.

Temas de se deben investigar

1. Averiguar que es una directiva en C/C++.


2. Investigar que es el Preprocesador en C/C++.
3. Averiguar como se declaran variables globales y locales.
4. Averiguar que tipo de variables puede manipular C/C++.
5. Averiguar las libreras est
andar ANSI.

Nota
Los trabajos deben enviarse al correo prog 307L@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

GUIA DE LABORATORIO No - 2
TEMA: Fundamentos del C/C++
ETN-307
PROGRAMACION

1.

Objetivo
Conocer los fundamentos de la estructura y codificacion de un programa en lenguaje C++
Conocer la estructura de un programa en C++.
Conocer los tipos de datos y operadores.
Conocer conocer los operadores existentes .
Conocer el procedimiento b
asico para la edicion compilacion, depuracion y ejecucion de un programa.

2.

Estructura de un programa en C++

Todo programa en C o C++ consta de una o mas funciones, una de las cuales se llama main. El programa
comienza en la funci
on main, desde la cual es posible llamar a otras funciones. El resto de las funciones
necesarias pueden declararse antes o despues de la funcion main.
Cada funci
on estar
a formada por la cabecera de la funcion, compuesta por el nombre de la misma y
la lista de argumentos (si los hubiese), la declaraci
on de las variables a utilizar y la secuencia de
sentencias a ejecutar.
Un ejemplo generico:

2.1.

Un ejemplo gen
erico en C++.

// C
o digo 1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
/* P r o g r a m a c i
on I
*/
/* L a b o r a t o r i o n o 2
*/
/* TEMA : M a n i p u l a c i
o n de Datos */
/*
en el C / C ++
*/
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
# include < iostream >
int main ()
{
int a , b ;
a =5;
b =++ a ;
std :: cout < < b ;
return 0;
}

3.
3.1.

Variables, Constantes, operadores y expresiones C++


Declaraci
on

tipo variable_1 , variable_2 = Constante ;

3.2.

Tipos de datos

Los tipos de datos que manipula el lenguaje C pueden ser agrupados de diferentes maneras, primitivos y
complejos. De los datos primitivos podemos tener dos grupos enteros y de punto flotante, como se muestra
en la tabla:
Tipo
char
int
float
double
void

Tama
no en Bytes
1
2
4
8
-

Ancho en bits
8
16
32
64

Rango en PC
-128 a 127
-32768 a 32767
3.4E-38 a 3.4E+38
1.7E-308 a 1.7E+308
sin valores

Cuadro 1: Tipos de Datos

Tipo
char
unsigned char
signed char
int
unsigned int
signed int
short int
unsigned short int
signed short int
long int
signed long int
unsigned long int
float
double
long double

Tama
no en Bytes
1
1
1
2
2
2
2
2
2
4
4
4
4
8
8

Ancho en bits
8
8
8
16
16
16
16
16
16
32
32
32
32
64
64

Rango en PC
-128 a 127
0 a 256
-128 a 127
-32768 a 32767
0 a 65535
-32768 a 32767
-32768 a 32767
0 a 65535
-32768 a 32767
-2147483648 a 2147483647
-2147483648 a 2147483647
0 a 4294967295
3.4E-38 a 3.4E+38
1.7E-308 a 1.7E+308
1.7E-308 a 1.7E+308

Cuadro 2: Tipos de Datos con modificadores

3.2.1.

Ejemplo de uso de declaraciones

// C
o digo 2
// D e c l a r a c i
o n de tipos de datos
void main ()
{
unsigned int i , j =2; // d e c l a r a c i o
n de varias v a r i a b l e s en una l
nea y su i n i c i a l i z a c i
on
unsigned ii ;
int k = -20;
char a = A ;
float f_1 , f_2 =20.45;
double df_1 = 2. 0 00 00 00 0 00 1;
i = j;
}

En C++ se adiciona un tipo de variable denominado bool que puede tener solo dos valores verdadero y
falso (TRUE,FALSE), y es usada como respuesta a preguntas como El color de la pizarra es blanca?

3.3.

Declaraci
on de Constantes

Ejemplos de constantes
// C
o digo 3
# define pi 3.1415
# define verdad 1
const int a =3;

3.4.
3.5.

Declaraci
on de variables del tipo complejo
Variables globales y locales

Las variables se agrupan en dos tipos globales y locales Las variables globales son aquellas que se puede
acceder ellas en todo lugar del programa y las variables locales solo en la funcion donde fue definida

Ejemplo
// C
o digo 4
# include < stdio .h >
# include < conio .h >
int a =3 , b =1;
// v a r i a b l e global
int fun_1 ( int ); // d e c l a r c i
o n de la funci
on
int main ()
{
int x =2;
printf ( " \ t El
printf ( " \ t El
printf ( " \ t El
// se m o d i f i c a
a =5;
printf ( " \ t El
a = fun_1 ( x );
printf ( " \ t El
return 0;
}
int fun_1 ( int a )
{
b = b *9;
printf ( " \ t El
printf ( " \ t El
return a *2;
}

valor de la
valor de la
valor de la
la v a r i a b l e

variable local x= %d \ n " ,x );


variable global a= %d \ n " ,a );
variable global b= %d \ n " ,b );
global

valor de la variable global a= %d \ n " ,a );


valor de la variable global a= %d \ n " ,a );

valor de la variable global b= %d \ n " ,b );


valor de la variable local a= %d \ n " ,a );

Caracteres especiales
Algunos caracteres son usados en C/C++ para dar formato la salida de un programa, como los mostrados
en la figura, generalmente son usados con la funcion printf

3.6.

Los operadores

Los operadores indican al compilador que traduzca a lenguaje maquina la operacion correspondiente
entre los operandos, que pueden ser constantes o variables. La lista de operadores se pueden agrupar en
aritmeticos, de incremento,relacionales - logicos y a nivel de bits, etc. Se muestran en las tablas siguientes
con ejemplos para su uso.
3.6.1.

Operadores Aritm
eticos

Los operadores aritmeticos se muestran en la siguiente tabla y un ejemplo de su uso


3

C
odigo
\b
\f
\n
\r
\t
\
\
\0
\\
\v
\a
\o
\x

Significado
Espacio Atras
Salto de pagina
Salto de lnea
Retorno de carro
Tabulador horizontal
Comillas Dobles
Comilla simple
Nulo
Barra invertida
Tabulador vertical
Alerta
Constante octal
Constante hexadecimal

Cuadro 3: Smbolos especiales y su significado


Operador
+
*
/

++

Acci
on
Resta, tambien menos monario
suma
multiplicacion
division
decremento
incremento

Cuadro 4: Operadores aritmeticos

Ejemplo
// C
o digo 5
// M a n i p u l a c i
o n de datos y o p e r a d o r e s a r i t m
eticos
# include < stdio .h >
# include < conio .h >
int main ()
{
int x , y ;
x = 10;
y = 3;
printf ( " Se realiza la operaci
o n " );
printf ( " \ t x / y= %d \ t " , x / y ); // m o s t r a r a 3
printf ( " \ t x %y= %d \ n " , x %y ); // m o s t r a r a 1 el resto de la d i v i s i
o n entera
// forma a l t e r n a t i v a
x = 1;
y = 2;
printf ( " Se realiza la operaci
o n " );
printf ( " \ t x / y= %d \ t x %y= %d \ n " ,x /y , x %y );
// El o p e r a d o r ++ i n c r e m e n t o
y = x;
x = x + 1; // x se suma 1 y se asigna a x
y ++;
// y se i n c r e m e n t a en uno pero hace la misma o p e r a c i
on
// orden de o p e r a c i o n e s
// se realiza por el lado i z q u i e r d o
x = 10;
y = ++ x ;
// se i n c r e m e n t a en uno a x y el r e s u l t a d o se asigna a y sin cambiar x
// el " x " es 10 y " y " es 11

x = 10;
y = x ++;

// el " x " es 11 y " y " es 11


// orden de p r e c e d e n c i a

x = 2;
y = 3;
// La p r e c e d e n c i a de los o p e r a d o r e s a r i t m
eticos
printf ( " \ t La precedencia de los operadores aritm
e ticos \ n " );
printf ( " \ t Mayor
++ , - \ n " );
printf ( " \ t
- ( menos monario )
\ n " );
printf ( " \ t
* , / , %
\ n " );
printf ( " \ t Menor
+, \ n " );
printf ( " \ t Si x= %d y y= %d
\ n " ,x , y ); // se i m p r i m i r
a 5=(2 +1) -3+ (2*3 )
x = x ++ - y + x * y ;
printf ( " \ t La operaci
o n %d = x ++ - y + x * y \ n " ,x ); // se i m p r i m i r
a 5=(2 +1) -3+ (2*3 )
printf ( " \ t Si x= %d y y= %d
\ n " ,x , y ); // se i m p r i m i r
a 5=(2 +1) -3+ (2*3 )
x = x ++ -( y + x )* y ;
printf ( " \ t La operaci
o n %d = x ++ -( y + x )* y \ n " ,x ); // se i m p r i m i r
a 5=(2 +1) -3+ (2*3 )
return 0;
}

3.6.2.

Operadores Relacionales,l
ogicos

Los operadores Relacionales,l


ogicos se muestran en la siguiente tabla y un ejemplo de su uso
Operador
>
>=
<
<=
==
!=

Acci
on
Mayor que
Mayor que o igual
Menor que
Menor que o igual
igual
no igual

Cuadro 5: Operadores Relacionales

Operador
&&
||
!

Acci
on
Y
O
No

Cuadro 6: Operadores logicos

3.6.3.

Operadores a nivel de bit

Los operadores Operadores a nivel de bit se muestran en la siguiente tabla y un ejemplo de su uso

Ejemplo
// C
o digo 6
// M a n i p u l a c i
o n de datos y o p e r a d o r e s r e l a c i o n a l e s l
o gicos y a nivel de bit
# include < stdio .h >
# include < conio .h >
int main ()

Operador
&
|

>>
<<

Acci
on
Y
O
O exclusiva (XOR)
complemento a uno
desplazamiento a la derecha
desplazamiento a la izquierda

Cuadro 7: Operadores a nivel de bit

{
int x , y ;
x = 10;
y = 3;
// La p r e c e d e n c i a de los o p e r a d o r e s r e l a c i o n a l e s
printf ( " \ t La precedencia de los operadores relacionales y l
o gicos \ n " );
printf ( " \ n " );
printf ( " \ t Mayor
!
no
\ n " );
printf ( " \ t
> , >= , < , <=
Mayor que
\ n " );
printf ( " \ t
== , !=
igual
\ n " );
printf ( " \ t
&&
Y
\ n " );
printf ( " \ t Menor
||
O
\ n " );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ n " );
printf ( " \ t Los operadores relacionales devuelven un valor de 1 o 0 \ n " );
printf ( " \ t seg
u n sea cierto o falso r es pe ct i va me nt e
\ n " );
printf ( " \ n " );
printf ( " \ t Como x= %d es mayor que y= %d el resultado de x > y da %d \ n " ,x ,y ,x > y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t La siguiente operaci
o n !1&&0 da como resultado
%d \ n " ,!1&&0);
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t La siguiente operaci
o n !(1&&0) da como resultado %d \ n " ,!(1&&0));
// O p e r a d o r e s a nivel de bits
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ n " );
printf ( " \ t Los operadores a nivel de bits devuelven la operaci
o n l
o gica a bits \ n " );
printf ( " \ t Esto es ejemplo 5= 0101 y 6= 0110 5&6=4
\ n " );
printf ( " \ t
5
&
6
=
4
\ n " );
printf ( " \ t
0
&
0
=
0
\ n " );
printf ( " \ t
1
&
1
=
1
\ n " );
printf ( " \ t
0
&
1
=
0
\ n " );
printf ( " \ t
1
&
0
=
0
\ n " );
printf ( " \ n " );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t Como x= %d y y= %d el resultado de x & y da %d \ n " ,x ,y , x & y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t Como x= %d y y= %d el resultado de x | y da %d \ n " ,x ,y , x | y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t Como x= %d y y= %d el resultado de x ^ y da %d \ n " ,x ,y , x ^ y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t Como x= %d
el resultado de ~ x= %d
\ n " ,x ,~ x );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
y =x < <1; // rota a la i z q u i e r d a 1 vez
printf ( " \ t Como x= %d se rota a la izquierda y = x < <1 = %d
\ n " ,x , y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
y =x > >1; // rota a la i z q u i e r d a 1 vez
printf ( " \ t Como x= %d se rota a la derecha
y =x > >1 = %d
\ n " ,x , y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
return 0;
}

3.7.

Manipulaci
on de datos y operadores especiales

3.7.1.

El operador ?

Es un operador ternario que funciona evaluando una condicion y si es cierto devuelve la segunda expresi
on
y si es falsa devuelve la tercera expresi
on como muestra el ejemplo a continuacion.

Ejemplo
// C
o digo 7
// M a n i p u l a c i
o n de datos y o p e r a d o r e s e s p e c i a l e s
# include < stdio .h >
# include < conio .h >
int main ()
{
int x , y ;
x = 10;
y = 3;
// El o p e r a d o r t e r n a r i o ?
u til para r e e m p l a z a r if - then - else
printf ( " \ t El operador ternario ? util para reemplazar if - then - else \ n " );
printf ( " \ n " );
printf ( " \ t La forma general del operador ternario es
\ n " );
printf ( " \ t
Exp1 ? Exp2 : Exp3
\ n " );
printf ( " \ t
Si Exp1 es cierta entonces
\ n " );
printf ( " \ t
se eval
u a Exp2 y
toma el valor de Exp2
\ n " );
printf ( " \ t
Si Exp1 es falsa entonces
\ n " );
printf ( " \ t
se evalua Exp3 y
toma el valor de Exp3
\ n " );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ n " );
printf ( " \ t Como x= %d y y= %d y x > y la exp . y = x > y ? 100 : 200;
\ n " ,x , y );
y = x > y ? 100 : 200; // y toma el valor de 100
printf ( " \ t Toma el valor de
100
\ n " ,x , y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ t Como x= %d y y= %d y
la exp . y = x < y ? 100 : 200;
\ n " ,x , y );
y = x < y ? 100 : 200; // y toma el valor de 100
printf ( " \ t Toma el valor de
200
\ n " ,x , y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );

return 0;
}

3.7.2.

Los operadores & y * (punteros)

Son una poderosa herramienta para la referencia a valores, variables y mas y se muestra su aplicaci
on en
el siguiente ejemplo.

Ejemplo
// C
o digo 8
// M a n i p u l a c i
o n de datos y o p e r a d o r e s de puntero ( o p e r a d o r monario )
# include < stdio .h >
# include < conio .h >
# include < locale .h >
int main ()
{
setlocale ( LC_CTYPE , " Spanish " );

int x ,* y , z ;
x = 10;
// El o p e r a d o r t e r n a r i o ? util para r e e m p l a z a r if - then - else
printf ( " \ t Los operadores & y *
\ n " );
printf ( " \ n " );
printf ( " \ t Proporcionan una rapida forma de referenciar a un elemento \ n " );
printf ( " \ t o elementos de un arreglo ( array )
\ n " );
printf ( " \ t Permiten a las funciones de C modificar los par
a metros
\ n " ,160);
printf ( " \ t de llamada
\ n " );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ n " );
printf ( " \ t El operador & x devuelve la direcci
o n de memoria del operando x \ n " ,x , y );
y = &x;
printf ( " \ t la variable x= %d y cuyo valor esta almacenado en la direcci
o n \ n " ,x );
printf ( " \ t de memoria & x= %x h es la direcci
o n interna de la computadora \ n " ,y );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
printf ( " \ n " );
printf ( " \ t El operador * x devuelve el valor almacenado en la direcci
o n \ n " );
printf ( " \ t que se especifica
\ n " );
z = *y;
printf ( " \ t la direcci
o n * y= %x contiene el valor de %d \ n " ,y , x );
printf ( " \ t la operaci
o n z =* y almacena en z el valor de %d " ,z );
printf ( " \ t _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ \ n " );
return 0;
}

4.

Procedimiento

1. Transcribir los C
odigos del 1 al 8 compilar y ejecutar.
2. Modificar los valores y par
ametros de cada codigo par probar su validez

5.

Para Resolver

1. Realizar un programa que verifique el tama


no de cada uno de los identificadores.
2. realizar un programa que acceda a una cadena de caracteres
3. Imprimir en pantalla los c
odigos ASCII extendido de una tabla de valores almacenados como constantes

5.1.

Temas de se deben investigar

1. Averiguar que es una directiva en C/C++.


2. Investigar que es el enum , sizeof.
3. Averiguar como se utiliza el operador ,.
4. Averiguar como se utiliza los operadores . y -.
5. Averiguar como se realiza una conversion de tipo de dato.

Nota
Los trabajos deben enviarse al correo prog 307L@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

GUIA DE LABORATORIO No - 3
TEMA: Algoritmos, Diagramas de flujo, y Sentencias de Control.
ETN-307
PROGRAMACION

1.

Objetivo
Conocer la utilidad de los algoritmos para representar procesos de tratamiento de datos.
Conocer la representaci
on de los algoritmos en forma de diagramas graficos llamados diagrama de flujo.
Reconocer las caractersticas de la programacion estructurada.
Conocer las variedad que ofrece los lenguajes de programacion en cuanto a las sentencias que permiten
el control del flujo del proceso.
Realizar aplicaciones practicas para la concepcion de los procesos.

2.

Los Algoritmos

Es una representaci
on de un conjunto ordenado de operaciones sistematicas que permite hacer un una
evaluaci
on, toma de decisi
on, y acci
on que conlleve ala solucion de un o varios tipos de problemas. su
representacion puede ser por medio de:
Ejemplo 1 Se desea calcular la distancia recorrida [m] por un movil que tiene velocidad constante [m/s]
durante un tiempo T [s], considerar que es un M.R.U.(movimiento rectilneo y uniforme).
Lenguaje Natural
Lenguaje Simbolico
Lenguaje simbolico
Se leen los datos de velocidad V Diagramas de flujo
y de tiempo T
se opera mediante la formula
d=V T
se muestra el resultado d
pseudoc
odigo
Leer v
Leer t
d=v*t
Escribir d

3.
3.0.1.

Los Diagramas de Flujo


Simbolismo utilizado

En la cuadro 1 se muestra una representacion de las figuras utilizadas para la representacion de los
algoritmos en diagramas de flujo, que son u
tiles para realizar la programacion.

4.
4.0.2.

Sentencias de Control
La sentencia IF

La estructura de control IF permite decidir entre dos opciones resultantes de la evaluacion de una sentencia. Si la evaluaci
on es positiva hace una cosa, tambien podemos especificar acciones para realizar en caso
1

Inicio y fin de programa

Entrada y salida de datos

imprimir mensajes

procesamiento de datos

funciones

evaluar cierto o falso

......
Cuadro 1: Smbolos de diagramas de flujo
de que la evaluaci
on sea negativa.
1
2

// C
o digo 1 E s t r u c t u r a s e n t e n c i a IF
if ( sentencia 1 ) sentencia 2

La estructura anterior es u
til siempre y cuando la sentencia2 es u
nica, pero su se debe hacer un grupo
de sentencias es posible seguir la siguiente estructura
1
2
3
4
5
6
7
8
9

// C
o digo 2 E s t r u c t u r a s e n t e n c i a IF
if ( sentencia 1 )
{
grupo de s e n t e n c i a s // por s e n t e n c i a 1 e s v e r d a d e r a o c i e r t a
}
else
{
grupo de s e n t e n c i a s // por s e n t e n c i a 1 e s f a l s a
}

Otra estructura u
til son los IF anidados

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

// C
o digo 3 E s t r u c t u r a s e n t e n c i a IF a n i d a d o s
if ( sentencia 1 )
{
grupo de s e n t e n c i a s // por s e n t e n c i a 1 e s v e r d a d e r a
}
else i f ( sentencia 2 )
{
grupo de s e n t e n c i a s // por s e n t e n c i a 2 e s v e r d a d e r a
} else i f ( sentencia 3 )
..
..
else
{
grupo de s e n t e n c i a s // por d e f e c t o s e e j e c u t a
}

Hay que hacer notar que la estructura IF del codigo 1 tiene la misma estructura del operador .
4.0.3.

La sentencia SWITCH

Esta sentencia es una generalizaci


on de las sentencias if...else. En el caso de las sentencias if, la expresi
on
que se eval
ua como condici
on es booleana, lo que quiere decir que solo hay dos valores verdadero y falso,
y por lo tanto, s
olo se puede elegir entre dos sentencias a ejecutar. En el caso de la sentencia switch, la
expresi
on a evaluar ser
a entera, por lo tanto, el n
umero de opciones es mucho mayor, y en consecuencia,
tambien es mayor el n
umero de diferentes sentencias que se pueden ejecutar.
1
2

// C
o digo 4 E s t r u c t u r a s e n t e n c i a SWITCH
switch ( e x p r e s i
on entera )

case e x p r e s i
on constante1 : sentencias1
case e x p r e s i
on constante2 : sentencias2
...
case e x p r e s i o
n constanten : sentenciasn
default : s e n t e n c i a

4
5
6
7
8

Cuando se usa la sentencia switch el control se transfiere al punto etiquetado con el case cuya expresi
on
constante coincida con el valor de la expresion entera evaluada dentro del switch. A partir de ese punto
todas las sentencias ser
an ejecutadas hasta el final del switch, es decir hasta llegar al . Esto es as porque
las etiquetas s
olo marcan los puntos de entrada despues de una ruptura de la secuencia de ejecucion, pero
no marcan los puntos de salida. Para que solo una secuencia de sentencias sea ejecutada se puede adicionar
la palabra reservada break que permite salir de la sentencia switch

5.

Los Bucles

Son sentencias de iteraci


on tambien denominadas bucles que permiten que un conjunto de instrucciones
sea ejecutado hasta que alcance una cierta condicion. que puede estar predefinida como en el bucle for o no
como en el bucle while y do

5.1.

El bucle FOR

La forma general de la sentencia bf for es :


1
2
3
4
5

// C
o digo 5 E s t r u c t u r a s e n t e n c i a FOR
for ( i n i c i a l i z a c i o
n ; condici
on ; incremento )
{
grupo de s e n t e n c i a s ;
}

El grupo de sentencias es ejecutada repetidamente mientras la condicion resulte verdadera, o expresado de


otro modo, hasta que la evaluaci
on de la condicion resulte falsa. Antes de la primera iteracion se ejecutar
a la

iniciaci
on del bucle, que puede ser una expresion o una declaracion. En este apartado se suelen iniciar las
variables usadas en el bucle. Estas variables tambien pueden ser declaradas en este punto, pero en ese caso
tendr
an validez (
ambito) s
olo dentro del bucle for. Despues de cada iteracion se ejecutara el incremento
de las variables del bucle. Este incremento tambien es una sentencia de asignacion, y no tiene por que ser
necesariamente un incremento. En general, podemos considerar que la parte de inicializacion establece las
condiciones iniciales del bucle, la parte de la condicion establece la condicion de salida, y la parte del
incremento, modifica las condiciones iniciales para establecer las de la siguiente iteracion del bucle, o para
alcanzar la condici
on de salida. Todas las expresiones son opcionales, y si no se especifica la condici
on se
asume que es verdadera.

5.2.

El bucle WHILE

Su forma general es:


// C
o digo 6 E s t r u c t u r a s e n t e n c i a WHILE
while ( c o n d i c i o
n )
3
{
4
grupo de s e n t e n c i a s
5
}
1
2

La sentencia es ejecutada repetidamente mientras la condicion sea verdadera. Si no se especifica condici


on
se asume que es true, y el bucle se ejecutara indefinidamente. Si la primera vez que se eval
ua la condici
on
resulta falsa, la sentencia no se ejecutar
a ninguna vez. Las condiciones no son otra cosa que expresiones de
tipo booleano, cualquier otro tipo de expresion se convertira a tipo booleano, si es posible. Y si no lo es, se
producir
a un error.

5.3.

el bucle DO / WHILE

Su forma general es:


// C
o digo 7 E s t r u c t u r a s e n t e n c i a DO / WHILE
do {
3
grupo de s e n t e n c i a s
4
} while ( c o n d i c i
on )
1
2

La sentencia es ejecutada repetidamente mientras la condicion resulte verdadera. Si no se especifica


condici
on se asume que es true, y el bucle se ejecutara indefinidamente. A diferencia del bucle while, la
evaluaci
on de la condici
on se realiza despues de ejecutar la sentencia, de modo que esta se ejecutara al menos
una vez.

6.
6.1.

Sentencias especiales
La sentencia BREAK

La sentencia break tiene dos usos. se puede usar para finalizar un case en una sentencia switch, lo que
ya se ha explicado, pero tambien se puede usar para forzar la terminacion inmediata de un bucle, saltando
la evaluaci
on condicional normal del ciclo.
// C
o digo 8 E s t r u c t u r a s e n t e n c i a BREAK
int c = 0 ;
3{
4
f o r ( i n t x =0; x < 1 0 0 ; x++) c+=x ;
5
break ;
6
c += 1 0 0 ;
7}
8c /= 1 0 0 ;
1
2

En este ejemplo, la sentecia c += 100; no se ejecutara, ya que la sentencia break transfiere la ejecuci
on
secuencial fuera del bloque.

6.2.

La sentencia exit()

Se puede salir anticipadamente de un programa usando la funcion exit() . Da lugar a la terminaci


on
inmediata del programa. forzando la vuelta al sistema operativo, su uso la convierte en un dispositivo de
control de programa.
// C
o digo 9 E s t r u c t u r a s e n t e n c i a e x i t ( )
i f ( ! condicio
n ) e x i t ( ) ; // s i c o n d i c i o
n no s e da
3c o n t i n u a r
1
2

6.3.

s e s a l e d e l programa

La sentencia CONTINUE

La sentencia continue funciona de una forma algo similar a break. Sin embargo en vez de forzar la
terminaci
on, continue fuerza una nueva iteracion del bucle y salta cualquiera otra sentencia
// C
o digo 10 E s t r u c t u r a s e n t e n c i a CONTINUE
do {
3
c i n >>num ;
4
i f (num<0) continue ;
5
cout<<x ;
6} w n i l e ( x ! 1 0 0 )
1
2

6.4.

La sentencia ETIQUETA / GOTO

Es un salto incondicional al lugar donde se encuentre declarada la etiqueta, su uso no es muy recomendado
pero es util en ciertas ocaciones.
// C
o digo 11 E s t r u c t u r a s e n t e n c i a ETIQUETA / GOTO
x =1;
3b u c l e :
4x++;
5i f ( x <100) goto b u c l e ;
1
2

para salir de varios niveles de anidamiento


Util
1
2
3
4
5
6
7
8

// C
o digo 12 E s t r u c t u r a s e n t e n c i a ETIQUETA / GOTO
for ( . . . ) {
for ( . . . ) {
while ( . . . ) {
i f ( . . . ) goto p a r a r ;
}
}
}

9
10
11

parar :
cout<< e r r o r de programa ;

GUIA DE LABORATORIO No - 4
TEMA: Funciones.
ETN-307
PROGRAMACION

1.

Objetivo
Conocer el metodo de declaraci
on y utilizacion de las funciones.
Conocer las libreras y las funciones del estandar ANSI.
Conocer como se pasan los argumentos a las funciones y como retorna valores
Desarrollar programas de ejemplo para la utilizacion de las funciones.

2.

Las libreras del est


andar ANSI

< assert.h>
< complex.h>
< ctype.h>

< errno.h>
< fenv.h>
< float.h>

< inttypes.h>
< iso646.h>
< limits.h>
< locale.h>
< math.h>
< setjmp.h>
< signal.h>
< stdarg.h>
< stdbool.h>
< stdint.h>
< stddef.h>
< stdio.h>
< stdlib.h>

< string.h>
< tgmath.h>
< time.h>
< wchar.h>
< wctype.h>

Contiene la macro assert (asercion), utilizada para detectar errores logicos y otros tipos de fallos
en la depuraci
on de un programa.
Conjunto de funciones para manipular n
umeros complejos (nuevo en C99).
Contiene funciones para clasificar caracteres seg
un sus tipos o para convertir entre may
usculas y
min
usculas independientemente del conjunto de caracteres (tpicamente ASCII o alguna de sus
extensiones).
Para analizar los c
odigos de error devueltos por las funciones de biblioteca.
Para controlar entornos en coma flotante (nuevo en C99).
Contiene la definici
on de constantes que especifican ciertas propiedades de la biblioteca de coma
flotante, como la diferencia mnima entre dos n
umeros en coma flotante ( EPSOLON), el n
umero
m
aximo de dgitos de precision ( DIG), o el rango de valores que se pueden representar ( MIN,
MAX).
Para operaciones de conversion con precision entre tipos enteros (nuevo en C99).
Para utilizar los conjuntos de caracteres ISO 646 (nuevo en NA1).
Contiene la definici
on de constantes que especifican ciertas propiedades de los tipos enteros, como
rango de valores que se pueden representar ( MIN, MAX).
Para la funci
on setlocale() y las constantes relacionadas. Se utiliza para seleccionar el entorno local
apropiado (configuracion regional).
Contiene las funciones matematicas comunes.
Declara las macros setjmp y longjmp para proporcionar saltos de flujo de control de programa no
locales.
Para controlar algunas situaciones excepcionales como la division por cero.
posibilita el acceso a una cantidad variable de argumentos pasados a una funcion.
Para el tipo booleano (nuevo en C99).
Para definir varios tipos enteros (nuevo en C99).
Para definir varios tipos de macros de utilidad.
Proporciona el n
ucleo de las capacidades de entrada/salida del lenguaje C (incluye la venerable
funci
on printf).
Para realizar ciertas operaciones como conversion de tipos, generacion de n
umeros pseudoaleatorios, gesti
on de memoria dinamica, control de procesos, funciones de entorno, de se
nalizaci
on
(??), de ordenaci
on y b
usqueda.
Para manipulaci
on de cadenas de caracteres.
Contiene funcionalidades matematicas de tipo generico (type-generic) (nuevo en C99).
Para tratamiento y conversion entre formatos de fecha y hora.
Para manipular flujos de datos anchos y varias clases de cadenas de caracteres anchos (2 o m
as
bytes por car
acter), necesario para soportar caracteres de diferentes idiomas (nuevo en NA1).
Para clasificar caracteres anchos (nuevo en NA1).

3.

Definici
on de una funci
on
La estructura de una funci
on es muy simple La forma de definir una funcion es por medio de el prototipo

// D e c l a r a c i
o n de una funci
on
e s p e c i f i c a d o r _ d e ti po _d e _f un c i
o n ( lista de par
a metros )
{
cuerpo de la funci
on
}

Cuadro 1: Declaracion de una Funcion


y posteriormente el cuerpo de la misma.
// D e c l a r a c i
o n de una funci
on
# include < iostream >
# include < conio .h >
using namespace std ;
int
f_suma_e ( int , int );
// funci
o n para sumar enteros P R O T O T I P O DE LA FUNCI O N
main ()
{
int a ,b , c ;
cout < < " \ n \ t Introduzca el valor entero de a = " ;
cin > > a ;
cout < < " \ n \ t Introduzca el valor entero de b = " ;
cin > > b ;
c = f_suma_e (a , b );
cout < < " \ n \ t La suna de los enteros c = a + b = " <<c ;
}
int
f_suma_e ( int e , int d ) // D E F I N I C I O N DE LA FUNCI O N
{
return ( e + d );
}

Cuadro 2: Declaracion de una Funcion


Es posible seguir la siguiente secuencia donde se declaran las funciones y posteriormente la funci
on
principal, ya que el pre procesador necesita saber que funciones se van a utilizar en la funcion principal y
que argumentos tienen, se debe hacer notar para hacer un buen reconocimiento de las funciones, la primera
forma es la mas recomendada.
// D e c l a r a c i
o n de una funci
on
# include < iostream >
using namespace std ;
int
f_suma_e ( int e , int d )
{
return ( e + d );
}
main ()
{
int a ,b , c ;
cout < < " \ n \ t Introduzca el valor entero de a = " ;
cin > > a ;
cout < < " \ n \ t Introduzca el valor entero de b = " ;
cin > > b ;
c = f_suma_e (a , b );
cout < < " \ n \ t La suna de los enteros c = a + b = " <<c ;
}

Cuadro 3: Declaracion de una Funcion


Aqu se ve la utilidad de la sentencia return que devuelve un parametro donde la funcion fue llamada.
todas las funciones exceptuando las del tipo void devuelven un valor.Hay que hacer notar que una funci
on
no puede recibir un valor como una asignacion. Cuando se usa la sentencia return en la funcion main, el

programa devuelve un c
odigo de terminacion de proceso de llamada(generalmente es el sistema operativo).
el valor devuelto debe ser un entero generalmente (0), un otro valor indica que se producido un tipo de error.

4.

Llamada por valor y llamada por referencia

Es posible llamar a funciones por valor (ejemplo anterior)y por referencia(haciendo referencia a su direcci
on). esto es posible utilizando los punteros. En cuanto a los argumentos se debe observar que tanto en el
// Paso por r e f e r e n c i a
# include < iostream >
using namespace std ;
void i n t e r c a m b i a r _ c r a c t e r e s ( char * , char *);

// d e c l a r a c i
o n de sus a r g u m e n t o s
// en forma de p u n t e r o s

int main ()
{
char c_1 , c_2 ;
cout < < " \ n \ t Introducir primer carcter caracter
cin > > c_1 ;
cout < < " \ n \ t Introducir segundo carcter caracter
cin > > c_2 ;
cout < < " \ n \ tlos carcteroes son c_1 = " << c_1 < < " \ t
// se imprime el valor de c_1 y c_2
i n t e r c a m b i a r _ c r a c t e r e s (& c_1 ,& c_2 );
// se pasa el la d i r e c c i o n de c_1 y c_2
cout < < " \ n \ tlos carcteroes son c_1 = " << c_1 < < " \ t
// se i m p r i m e n los valores en el orden c -1 y c_2
return 0;
}
void i n t e r c a m b i a r _ c r a c t e r e s ( char * c1 , char * c2 )
// c1 y c2 c o n t i n e n e las d i r e c c i o n e s de c_1 y c_2
{
char tem ;
tem =* c1 ;
* c1 =* c2 ;
* c2 = tem ;
}

";
";
y c_2 = " << c_2 ;

y c_2 = " << c_2 ;

Cuadro 4: Declaracion de una Funcion


prototipo como en la declaraci
on de la funcion se especifica el tipo de variable que va a utilizar.

5.

Funciones que devuelven punteros


Es posible las funciones puedan devolver punteros a variables como a estructuras que permitan

// Paso de a r g u m e n t o s a main
# include < iostream >
# include < conio .h >
# include < stdio .h >
using namespace std ;
char * encuantra ( char , char *); // d e c l a r a c i
o n de sus a r g u m e n t o s en forma de p u n t e r o s
int main ()
{
char s [80] ,* p , c ;
gets ( s );
cout < < " \ n \ t La cadena
buscada ser
a =\" " <<s < < " \"\ n " ;
c = getche ();
cout < < " \ n \ t El caracter buscado ser
a =\" " <<c < < " \"\ n " ;
p = encuantra (c , s );
if (* p )
{
cout < < " \ n \ n \ t " <<c < < " \ t SI se encuentra en " <<s ;
}
else
{
cout < < " \ n \ n \ t " <<c < < " \ t NO se encuentra en " <<s ;
}
cout < < " \ n \ n " ;
return 0;
}
char * encuantra ( char c , char * s )
{
register int cont =0;
while ( c != s [ cont ]&& s [ cont ]) cont ++;
return (& s [ cont ]);
}

Cuadro 5: Declaracion de una Funcion

6.

Paso de argumentos ala funci


on main

La forma de pasar argumentos a la funcion main es escribiendo el nombre de el archivo ejecutable(xxx.exe)


y un espacio seguido de los argumentos que pueda manipular la funcion principal. As el ejemplo de la figura
si se guarda con el nombre de saludo.cpp y se compila la salida de la compilacion sera el archivo saludo.exe.
Por lo tanto se puede llamar a la funci
on de la siguiente manera.

// Paso de a r g u m e n t o s a main
# include < iostream >
using namespace std ;
int main ( int argc , char * argv []) // argc define el n
u mero de a r g u m e n t o s (1 por defecto ) ,
// define un puntero a una arreglo de p u n t e r o s a c a r a c t e r
{
if ( argc !=2)
{
cout < < " Ha olvidado escribir su nombre !!! " ;
return 1;
}
cout < < " Hola " << argv [1];
return 0;
}

Cuadro 6: Declaracion de una Funcion

7.

Procedimiento

1. Transcribir los ejemplos compilar y ejecutar.


2. Realizar los diagramas de flujo y pseudocodigo.
3. Modificar los valores y par
ametros de cada codigo par probar su validez

8.

Para Resolver

1. Elabore una funci


on que calcule dados sus coordenadas en el plano: los lados de un triangulo, su
area
y las coordenadas del centro del triangulo.
2. Elabore una caratula como una funcion para una presentacion de codigos
3. Dados 100 puntos que pertenecen a una funcion(sus coordenadas(x,y)), determinar la derivada, y la
integral de la misma funci
on. Los puntos estan espaciados por x

8.1.

Temas de se deben investigar

1. Que relaci
on existen entre la biblioteca de los compiladores Borlan C, Gcc, Turbo C y otros.
2. Que es una librera est
atica y din
amica.
3. Como se crean libreras
4. Que estructura deben tener las Libreras

Nota
Los trabajos deben enviarse al correo progr 307l@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

GUIA DE LABORATORIO No - 5
TEMA: Arreglos y Punteros.
ETN-307
PROGRAMACION

1.

Objetivo
Conocer la forma de declarar un arreglo y al acceso de los datos que contiene.
Conocer las formas de operar manipular los arreglos.
Conocer como se declaran arreglos multi dimensionales y su uso como punteros.
conocer como se asignas arreglos o crean los mismos en forma dinamica.

2.

Declaraci
on de un arreglo

Un arreglo no es mas que una colecci


on de datos de un solo tipo ordenados en forma continua(uno al lado
del otro), cuya direcci
on en la memoria es por lo tanto tambien continua, donde el acceso a los mismos se
los hace a travez de indices que indican la posicion en el arreglo. La forma de declararlos es la siguiente Los
1 // Forma g e n e r a l de l a d e c l a r a c i o
n de un a r r e g l o
2 tipo nombre arreglo [ nu
mero de elementos del arreglo ] ;

Cuadro 1: Declaracion de una arreglo


arreglos deben ser declarados en forma explicita para que el compilador reserve el espacio suficiente en la
memoria. El siguiente ejemplo muestra la forma de declaracion, su inicializacion y el acceso a los elementos
del arreglo. es posible notar que si sobrepasamos las dimensiones de la capacidad de almacenamiento de una
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

// M a n i p ul a c i o
n de a r r e g l o s
#include<i o s t r e a m >
using namespace s t d ;
i n t main ( )
{
char a r r e g l o [ 8 0 ] ; // e s t e e s un a r r e g l o de 8 e l e m e n t o s t i p o c a r
acter
int i ;
f o r ( i =0; i <=7; i ++)
{
cout<<"\n \t Introduzca el primer car
a cter " <<e n d l ;
c i n >>a r r e g l o [ i ] ;
cout<<"\n \t se almacen
o en arreglo ["<<i <<"] el valor de "<<a r r e g l o [ i ]<< e n d l ;
}
cout<<"\n\ tEl arreglo es " ;
cout<<"\n\t arreglo =[ " ;
f o r ( i =0; i <=6; i ++)
{
cout<<a r r e g l o [ i ]<<" - " ;
}
cout<<a r r e g l o [ i ]<<" ]"<<e n d l ;
return 0 ;
}

Cuadro 2: Declaracion y manipulacion de un arreglo


variable se accede a la variable contigua como muestra el ejemplo.
1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// m a n i p u l a c i o n de a r r e g l o s
#include<i o s t r e a m >
using namespace s t d ;
i n t main ( )
{
char s ;
unsigned char a r r e g l o [ 6 5 5 3 5 ] ; // e s t e e s un a r r e g l o de 8 e l e m e n t o s t i p o c a r a c t e r
char a r r e g l o c o n t i g u o [ 8 ] = { 1 , 2 , 5 2 , 1 , 1 , 1 , 1 } ;
int i ;
f o r ( i =0; i <=65535; i ++)
{
a r r e g l o [ i ]= i ;
}
cout<<"\n \t arreglo ["<<i 2<<" ]= "<<a r r e g l o [ i 2]<< e n d l ;
cout<<"\n \t arreglo ["<<i 1<<" ]= "<<a r r e g l o [ i 2]<< e n d l ;
cout<<"\n \t arreglo ["<<i <<" ]= "<<a r r e g l o [ i ]<< e n d l ;
cout<<"\n \t arreglo ["<<i +1<<" ]= "<<a r r e g l o [ i +1]<< e n d l ;
cout<<"\n \t arreglo ["<<i +2<<" ]= "<<a r r e g l o [ i +2]<< e n d l ;
return 0 ;
}

Cuadro 3: Error de acceso a otras variables por sobrepasar las dimensiones del arreglo

3.

Paso de arreglos a funciones

La forma de pasar un arreglo a una funcion es de tres maneras posibles como puntero, como arreglo
delimitado o no delimitado.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

// paso de a r r e g l o s a f u n c i o n e s
#include<i o s t r e a m >
int f s u m a r a r r e g l o p u n t e r o ( int ) ;
int f s u m a r a r r e g l o d e l i m i t a d o ( int ) ;
int f s u m a r a r r e g l o n o d e l i m i t a d o ( int ) ;
using namespace s t d ;
i n t main ( )
{
int a r r e g l o [ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
cout<<"\n\t la suma de 1+2+3+4+5= "<<f s u m a r a r r e g l o p u n t e r o ( a r r e g l o )<<e n d l ;
cout<<"\n\t la suma de 1+2+3+4+5= "<<f s u m a r a r r e g l o p u n t e r o ( a r r e g l o )<<e n d l ;
cout<<"\n\t la suma de 1+2+3+4+5= "<<f s u m a r a r r e g l o p u n t e r o ( a r r e g l o )<<e n d l ;
return 0 ;
}
int f s u m a r a r r e g l o p u n t e r o ( int a r r e g l o )
{
i n t suma=0;
f o r ( i n t i =0; i <=4; i ++)
{
suma=suma+ a r r e g l o ;
a r r e g l o ++;
}
return suma ;
}
i n t f s u m a r a r r e g l o d e l i m i t a d o ( i n t a r r e g l o [ 1 5 5 ] ) //
{
i n t suma=0;
f o r ( i n t i =0; i <=4; i ++)
{

33
34
35
36
37
38
39
40
41
42
43
44
45
46

suma=suma+a r r e g l o [ i ] ;
}
return suma ;
}
int f s u m a r a r r e g l o n o d e l i m i t a d o ( int a r r e g l o [ ] )
{
i n t suma=0;
f o r ( i n t i =0; i <=4; i ++)
{
suma=suma+a r r e g l o [ i ] ;
}
return suma ;
}

Cuadro 4: Error de acceso a otras variables por sobrepasar las dimensiones del arreglo

4.

Las cadenas

Las cadenas de caracteres son tambien otro tipo de arreglos donde son un conjunto de caracteres que
terminan en un elemento denominado nulo \0 . es bueno hacer notar que la terminacion de una cadena es
un ntro un espacio en blanco.
2

1
2
3
4
5
6
7
8
9

#include <i o s t r e a m >


using namespace s t d ;
i n t main ( )
{
char cadena [ 1 5 ] ;
c o u t << "\n \t Introducir una palabra de no mas 15 caracteres "<<e n d l ;
c i n >>cadena ;
cout<<"\n \t esta es una cadena "<<cadena<<e n d l ;
return 0 ;
}

Cuadro 5: Manipulacion de cadenas


Existe una librera para la manipulaci
on de cadenas como lo es string.h que tiene funciones implementadas
como son *strcpy , *strcat, strlen y otras.
1
2
3
4
5
6
7
8
9
10
11
12

#include <i o s t r e a m >


#include <s t r i n g . h>
using namespace s t d ;
i n t main ( )
{
char c a d e n a 1 [ 1 5 ] , c a d e n a 2 [ 1 5 ] ;
c o u t << "\n \t Introducir cadena_1 "<<e n d l ; //
c i n >>c a d e n a 1 ;
c o u t << "\n \t Introducir cadena_2 "<<e n d l ; //
c i n >>c a d e n a 2 ;
cout<<"\n \t la longitud de las cadenas anteriores son "<<s t r l e n ( c a d e n a 1)<<" y " <<s t r l e
return 0 ;
}

Cuadro 6: Condicional if

Cuadro 7: Condicional if

5.

Arreglos bidimensionales

Es posible declarar arreglos como un conjunto bidimensional de elementos como una matriz de filas y
columnas y utilizarlos par operaciones muy u
tiles como en el algebra lineal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

#include <i o s t r e a m >


#include <s t r i n g . h>
using namespace s t d ;
i n t main ( )
{
float A[ 3 ] [ 3 ] ;
c o u t << "\n \t Introducir la matriz A "<<e n d l ; //
c o u t << "\n " ;
f o r ( i n t j =0; j <3; j ++)
{
c o u t <<"\t" ;
f o r ( i n t i =0; i <3; i ++)
{
c o u t <<"A["<<i <<" ,"<<j <<" ]= " ;
c i n >>A[ i ] [ j ] ;
c o u t <<"\t" ;
}
c o u t <<"\n" ;
}
c o u t << "\n \t La matriz A es = "<<e n d l ; //
c o u t << "\n " ;
f o r ( i n t j =0; j <3; j ++)
{
c o u t << "\t" ;
f o r ( i n t i =0; i <3; i ++)
{
c o u t <<A[ i ] [ j ] ;
c o u t <<"\t" ;
}
c o u t << "\n" ;
}
return 0 ;
}

6.

Un arreglo como puntero


Es posible utilizar un arreglo como un puntero, pues son equivalentes en la siguiente notacion

1
2
3
4
5
6
7
8
9
10
11
12

#include <i o s t r e a m >


#include <s t r i n g . h>
using namespace s t d ;
i n t main ( )
{
i n t p ,A[ 6 ] = { 2 , 3 , 4 , 5 , 6 , 7 } ;
p=A;
cout<<"\n\ tel valor de A [0]= "<<p ;
cout<<"\n\ tel valor de A [1]= "<<p [ 1 ] ;
cout<<"\n\ tel valor de A [3]= "<<(p +2);
cout<<"\n\ tel valor de A [5]= "<<A [ 5 ] ;
return 0 ;
}

Cuadro 8: Condicional if

7.

Procedimiento

1. Transcribir los ejemplos compilar y ejecutar.


2. Completar los diagramas de flujo, pseudocodigo y codigo.
3. Modificar los valores y par
ametros de cada codigo par probar su validez

8.

Para resolver

1. Realizar un programa que reconozca de una cadena de caracteres aleatoria cuantos de ellos son letras
y cunatos espacios y cuantos son n
umeros
2. Realizar un programa que calcule la matriz inversa de una matriz definida por teclado comprobando
que AA1 = I
3. Crear un programa que imprima la siguiente tabla

8.1.

Temas de se deben investigar

1. Averiguar como se almacena en memoria los arrgleos en C/C++.


2. El n
umero de elementos que puede contener un arreglo (datos de u tipo), puede variar segun su tipo
en C/C++.

Nota
Los trabajos deben enviarse al correo progr 307l@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

GUIA DE LABORATORIO No - 6
TEMA: Estructuras y uniones.
ETN-307
PROGRAMACION

1.

Objetivo
Conocer las forna de definir de un tipo especial como las estructura y uniones.
Manipular y acceder a los datos incluidos en las estructuras
Aplicar a ejemplos pr
acticos

2.

Estructuras

El tipo struct permite agragar al programa componente de diferentes tipos de datos con un solo nombre
y su forma de declaraci
on es:
1 // Forma g e n e r a l de l a d e c l a r a c i o
n de una e s t r i c t u r a
2 struct n o m b r e e s t r u c t u r a {
3
tipo variable1 ;
4
t i p o v a r i a b l e 2=c o n s t a n t e ;
5
};

Cuadro 1: Declaracion de una estructura


Con esto se esta declarando un nuevo tipo de dato, que puede ser utilizado en cualquier lugar del programa.
para poder utilizar una estructura primero debemos crear o declarar la nueva estructura como
1 // Forma g e n e r a l de l a d e c l a r a c i o
n de una e s t r i c t u r a
2 struct n o m b r e e s t r u c t u r a {
3
tipo variable1 ;
4
t i p o v a r i a b l e 2=c o n s t a n t e ;
5
};

Cuadro 2: Declaracion de una estructura


Los arreglos deben ser declarados en forma explicita para que el compilador reserve el espacio suficiente en
la memoria. El siguiente ejemplo muestra la forma de declaracion, su inicializacion y el acceso a los elementos
del arreglo. es posible notar que si sobrepasamos las dimensiones de la capacidad de almacenamiento de una
variable se accede a la variable contigua como muestra el ejemplo.

3.

Paso de arreglos a funciones

La forma de pasar un arreglo a una funcion es de tres maneras posibles como puntero, como arreglo
delimitado o no delimitado.
1
2
3
4
5
6
7
8
9
10

// paso de a r r e g l o s a f u n c i o n e s
#include<i o s t r e a m >
int f s u m a r a r r e g l o p u n t e r o ( int ) ;
int f s u m a r a r r e g l o d e l i m i t a d o ( int ) ;
int f s u m a r a r r e g l o n o d e l i m i t a d o ( int ) ;
using namespace s t d ;
i n t main ( )
{

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

// M a n i p ul a c i o
n de a r r e g l o s
#include<i o s t r e a m >
using namespace s t d ;
i n t main ( )
{
char a r r e g l o [ 8 0 ] ; // e s t e e s un a r r e g l o de 8 e l e m e n t o s t i p o c a r
acter
int i ;
f o r ( i =0; i <=7; i ++)
{
cout<<"\n \t Introduzca el primer car
a cter " <<e n d l ;
c i n >>a r r e g l o [ i ] ;
cout<<"\n \t se almacen
o en arreglo ["<<i <<"] el valor de "<<a r r e g l o [ i ]<< e n d l ;
}
cout<<"\n\ tEl arreglo es " ;
cout<<"\n\t arreglo =[ " ;
f o r ( i =0; i <=6; i ++)
{
cout<<a r r e g l o [ i ]<<" - " ;
}
cout<<a r r e g l o [ i ]<<" ]"<<e n d l ;
return 0 ;
}

Cuadro 3: Declaracion y manipulacion de un arreglo


11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

int a r r e g l o [ 5 ] = { 1 , 2 , 3 , 4 , 5 } ;
cout<<"\n\t la suma de 1+2+3+4+5= "<<f s u m a r a r r e g l o p u n t e r o ( a r r e g l o )<<e n d l ;
cout<<"\n\t la suma de 1+2+3+4+5= "<<f s u m a r a r r e g l o p u n t e r o ( a r r e g l o )<<e n d l ;
cout<<"\n\t la suma de 1+2+3+4+5= "<<f s u m a r a r r e g l o p u n t e r o ( a r r e g l o )<<e n d l ;
return 0 ;
}
int f s u m a r a r r e g l o p u n t e r o ( int a r r e g l o )
{
i n t suma=0;
f o r ( i n t i =0; i <=4; i ++)
{
suma=suma+ a r r e g l o ;
a r r e g l o ++;
}
return suma ;
}
i n t f s u m a r a r r e g l o d e l i m i t a d o ( i n t a r r e g l o [ 1 5 5 ] ) //
{
i n t suma=0;
f o r ( i n t i =0; i <=4; i ++)
{
suma=suma+a r r e g l o [ i ] ;
}
return suma ;
}
int f s u m a r a r r e g l o n o d e l i m i t a d o ( int a r r e g l o [ ] )
{
i n t suma=0;
f o r ( i n t i =0; i <=4; i ++)
{
suma=suma+a r r e g l o [ i ] ;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

// m a n i p u l a c i o n de a r r e g l o s
#include<i o s t r e a m >
using namespace s t d ;
i n t main ( )
{
char s ;
unsigned char a r r e g l o [ 6 5 5 3 5 ] ; // e s t e e s un a r r e g l o de 8 e l e m e n t o s t i p o c a r a c t e r
char a r r e g l o c o n t i g u o [ 8 ] = { 1 , 2 , 5 2 , 1 , 1 , 1 , 1 } ;
int i ;
f o r ( i =0; i <=65535; i ++)
{
a r r e g l o [ i ]= i ;
}
cout<<"\n \t arreglo ["<<i 2<<" ]= "<<a r r e g l o [ i 2]<< e n d l ;
cout<<"\n \t arreglo ["<<i 1<<" ]= "<<a r r e g l o [ i 2]<< e n d l ;
cout<<"\n \t arreglo ["<<i <<" ]= "<<a r r e g l o [ i ]<< e n d l ;
cout<<"\n \t arreglo ["<<i +1<<" ]= "<<a r r e g l o [ i +1]<< e n d l ;
cout<<"\n \t arreglo ["<<i +2<<" ]= "<<a r r e g l o [ i +2]<< e n d l ;
return 0 ;
}

Cuadro 4: Error de acceso a otras variables por sobrepasar las dimensiones del arreglo
44
45
46 }

}
return suma ;

Cuadro 5: Error de acceso a otras variables por sobrepasar las dimensiones del arreglo

4.

Las cadenas

Las cadenas de caracteres son tambien otro tipo de arreglos donde son un conjunto de caracteres que
terminan en un elemento denominado nulo \0 . es bueno hacer notar que la terminacion de una cadena es
un ntro un espacio en blanco.
2

1
2
3
4
5
6
7
8
9

#include <i o s t r e a m >


using namespace s t d ;
i n t main ( )
{
char cadena [ 1 5 ] ;
c o u t << "\n \t Introducir una palabra de no mas 15 caracteres "<<e n d l ;
c i n >>cadena ;
cout<<"\n \t esta es una cadena "<<cadena<<e n d l ;
return 0 ;
}

Cuadro 6: Manipulacion de cadenas


Existe una librera para la manipulaci
on de cadenas como lo es string.h que tiene funciones implementadas
como son *strcpy , *strcat, strlen y otras.
1
2
3
4
5

#include <i o s t r e a m >


#include <s t r i n g . h>
using namespace s t d ;
i n t main ( )
{
char c a d e n a 1 [ 1 5 ] , c a d e n a 2 [ 1 5 ] ;

6
7
8
9
10
11
12 }

c o u t << "\n \t Introducir cadena_1 "<<e n d l ; //


c i n >>c a d e n a 1 ;
c o u t << "\n \t Introducir cadena_2 "<<e n d l ; //
c i n >>c a d e n a 2 ;
cout<<"\n \t la longitud de las cadenas anteriores son "<<s t r l e n ( c a d e n a 1)<<" y " <<s t r l e
return 0 ;

Cuadro 7: Condicional if

5.

Arreglos bidimensionales

Es posible declarar arreglos como un conjunto bidimensional de elementos como una matriz de filas y
columnas y utilizarlos par operaciones muy u
tiles como en el algebra lineal.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32

#include <i o s t r e a m >


#include <s t r i n g . h>
using namespace s t d ;
i n t main ( )
{
float A[ 3 ] [ 3 ] ;
c o u t << "\n \t Introducir la matriz A "<<e n d l ; //
c o u t << "\n " ;
f o r ( i n t j =0; j <3; j ++)
{
c o u t <<"\t" ;
f o r ( i n t i =0; i <3; i ++)
{
c o u t <<"A["<<i <<" ,"<<j <<" ]= " ;
c i n >>A[ i ] [ j ] ;
c o u t <<"\t" ;
}
c o u t <<"\n" ;
}
c o u t << "\n \t La matriz A es = "<<e n d l ; //
c o u t << "\n " ;
f o r ( i n t j =0; j <3; j ++)
{
c o u t << "\t" ;
f o r ( i n t i =0; i <3; i ++)
{
c o u t <<A[ i ] [ j ] ;
c o u t <<"\t" ;
}
c o u t << "\n" ;
}
return 0 ;
}

6.

Un arreglo como puntero


Es posible utilizar un arreglo como un puntero, pues son equivalentes en la siguiente notacion

1
2
3
4

#include <i o s t r e a m >


#include <s t r i n g . h>
using namespace s t d ;
i n t main ( )

Cuadro 8: Condicional if
5 {
6
7
8
9
10
11
12 }

i n t p ,A[ 6 ] = { 2 , 3 , 4 , 5 , 6 , 7 } ;
p=A;
cout<<"\n\ tel valor de A [0]= "<<p ;
cout<<"\n\ tel valor de A [1]= "<<p [ 1 ] ;
cout<<"\n\ tel valor de A [3]= "<<(p +2);
cout<<"\n\ tel valor de A [5]= "<<A [ 5 ] ;
return 0 ;

Cuadro 9: Condicional if

7.

Procedimiento

1. Transcribir los ejemplos compilar y ejecutar.


2. Completar los diagramas de flujo, pseudocodigo y codigo.
3. Modificar los valores y par
ametros de cada codigo par probar su validez

8.

Para resolver

1. Realizar un programa que reconozca de una cadena de caracteres aleatoria cuantos de ellos son letras
y cunatos espacios y cuantos son n
umeros
2. Realizar un programa que calcule la matriz inversa de una matriz definida por teclado comprobando
que AA1 = I
3. Crear un programa que imprima la siguiente tabla

8.1.

Temas de se deben investigar

1. Averiguar como se almacena en memoria los arrgleos en C/C++.


2. El n
umero de elementos que puede contener un arreglo (datos de u tipo), puede variar segun su tipo
en C/C++.

Nota
Los trabajos deben enviarse al correo progr 307l@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

GUIA DE LABORATORIO No - 6
TEMA: Estructuras y uniones.
ETN-307
PROGRAMACION

1.

Objetivo
Conocer las forna de definir de un tipo especial como las estructura y uniones.
Manipular y acceder a los datos incluidos en las estructuras
Aplicar a ejemplos pr
acticos

2.

Estructuras

El tipo struct permite agragar al programa componente de diferentes tipos de datos con un solo nombre
y su forma de declaraci
on es:
1 // Forma g e n e r a l de l a d e c l a r a c i o
n de una e s t r i c t u r a
2 struct n o m b r e e s t r u c t u r a {
3
tipo variable1 ;
4
t i p o v a r i a b l e 2=c o n s t a n t e ;
5
};

Cuadro 1: Declaracion de una estructura


Con esto se esta declarando un nuevo tipo de dato, que puede ser utilizado en cualquier lugar del programa.
para poder utilizar una estructura primero debemos crear o declarar la nueva estructura como
1 // Forma g e n e r a l de c r e a r una e s t r i c t u r a
2
3 En C++
4 nombre estructura estructura 1;
5 nombre estructura estructura 2;
6
7 EN C
8
9 struct n o m b r e e s t r u c t u r a e s t r u c t u r a 3 ;

Cuadro 2: Declaraci
on de una dato tipo estructura (nombre estructura)

3.
1
2
3
4
5
6
7
8
9
10
11
12

Un ejemplo

#include <i o s t r e a m >


#include <c o n i o . h>
#include<s t d i o . h>
#include<windows . h>
#define c a s a d o 1
#define s o l t e r o 0
using namespace s t d ;
COORD c o o r d ={0 ,0};
void gotoxy ( i n t x , i n t y )
{
c o o r d .X=x ;
c o o r d .Y=y ;

13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49

S e t C o n s o l e C u r s o r P o s i t i o n ( GetStdHandle (STD OUTPUT HANDLE) , c o o r d ) ;


}
struct d a t o s p e r s o n a l e s {
char nombre [ 2 0 ] ;
char A p e l l i d o P [ 2 0 ] ;
char A p e l l i d o M [ 2 0 ] ;
int C I ;
i n t edad ;
bool e s t a d o=s o l t e r o ;
};
i n t main ( )
{
i n t i , u=1;
d a t o s p e r s o n a l e s alumno [ 5 ] ;
c o u t << "\n\t Introducir los datos personales de los alumnos " << e n d l ;
c o u t << "\n N o \ tNombre \ tAp . Pat .\ tAp . Mat .\ tC .I .\ tEdad \ tEstado " << e n d l ;
c o u t << " ============================================================== "<< e n d l ;
f o r ( i =0;u ; i ++)
{
gotoxy ( 2 , i +7);
c i n >>alumno [ i ] . nombre ;
gotoxy ( 1 2 , i +7);
c i n >>alumno [ i ] . A p e l l i d o P ;
gotoxy ( 2 2 , i +7);
c i n >>alumno [ i ] . A p e l l i d o M ;
gotoxy ( 3 2 , i +7);
c i n >>alumno [ i ] . C I ;
gotoxy ( 4 2 , i +7);
c i n >>alumno [ i ] . edad ;
gotoxy ( 5 2 , i +7);
c i n >>alumno [ i ] . e s t a d o ;
gotoxy ( 1 9 , 0 ) ;
cout<<" desea seguir introduciendo nombres por si 1 por no 0 "<<e n d l ;
c i n >>u ;
}
return 0 ;
}

Cuadro 3: Codigo ejemplo de estructuras

4.

Procedimiento

1. Transcribir el ejemplo compilar y ejecutar.


2. Realizar el diagramas de flujo, pseudocodigo.
3. Modificar los valores y par
ametros de cada codigo par probar su validez

5.

Para resolver

1. Crear un programa que solo liste los nombres con mayora de edad
2. Crear un Programa que seleccione los nombres por orden de CI

5.1.

Temas de se deben investigar

1. Averiguar como se declaran las uniones en C/C++.


2. Investigar las funciones malloc y free

Nota
Los trabajos deben enviarse al correo progr 307l@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

GUIA DE LABORATORIO No - 7
TEMA: Archivos
ETN-307
PROGRAMACION

1.

Objetivo
Conocer las forma de almacenamiento de de datos en archivos.
Manipular y acceder a los datos almacenados en ficheros.
Aplicar a ejemplos pr
acticos.

2.

Manejo de Archivos en C/C++

La manipulaci
on de grandes cantidades de datos y su almacenamiento normalmente se hace en un dispositivo de memoria secundaria(fsico - disco ) y se conocen como archivos, que es un conjunto de datos
estructurados en entidades elementales denominadas registros de igual tipo y que a su vez constan de campos.

Tipos de Archivos
Existen dos tipos de archivos:
1. Archivos de texto
2. Archivos binarios.
Los Archivos de texto son una secuencia de caracteres organizadas en lneas terminadas por un car
acter
de nueva lnea. estos suelen ser generalmente de uso para fuentes de programas, base de datos simples, etc.
Un archivo binario es una secuencia de bytes que tienen una correspondencia uno a uno con un dispositivo
externo. Son usados para almacenar Fotografas,texto con formatos, archivos ejecutables (aplicaciones), etc.
En c, un archivo es un concepto l
ogico que puede aplicarse a muchas cosas desde archivos de disco hasta
terminales o una impresora.
Se asocia una secuencia con un archivo especifico realizando una operacion de apertura y en ese instante
la informaci
on puede ser intercambiada entre este y el programa.
Se puede conseguir la entrada y la salida de datos a un archivo a traves del uso de la biblioteca de
funciones;

3.

Funciones que se pueden utilizar

Se debe incluir la librera STDIO.H. Observe que la mayora de las funciones comienzan con la letra ?f?,
esto es un vestigio del est
andar C de Unix.
Nombre
fopen()
fclose()
fgets()
fputs()
fseek()
fprintf()
fscanf()
feof()
ferror()
rewind()
remove()
fflush()

Funcion
Abre un archivo.
Cierra un archivo.
Lee una cadena de un archivo.
Escribe una cadena en un archivo
Busca un byte especifico de un archivo.
Escribe una salida con formato en el archivo.
Lee una entrada con formato desde el archivo.
Devuelve cierto si se llega al final del archivo.
Devuelve cierto si se produce un error.
Coloca el localizador de posicion del archivo
al principio del mismo.
Borra un archivo.
Vaca un archivo.

Cuadro 1: librera STDIO.H

3.1.

El puntero a un archivo

El puntero a un archivo es la conexi


on entre el sistema de E/S con un buffer que almacena temporalmente
informaci
on acerca del archivo, el puntero a un archivo define varias cosas sobre el mismo, como el nombre,
estado y la posici
on actual de lectura en el archivo. Este cambia a medida que se realiza acciones sobre el.
La variable de tipo puntero al tipo FILE que se define en STDIO.H. Un programa necesita utilizar punteros
a archivos para leer o escribir en los mismos. Para obtener una variable de este tipo se utiliza una secuencia
como esta:
1 FILE F ; // d e c l a r a c i
o n d e l p u n t e r o a un a r c h i v o
2
//La f u n c i o
n f o p e n ( ) a b r e una s e c u e n c i a para que pueda
3
// s e r u t i l i z a d a y l a a s o c i a a un a r c h i v o . Su p r o t o t i p o e s :
4 FILE f o p e n ( const char no mb re ar ch ivo , c o s t charmodo ) ;

Cuadro 2: Apertura de un archivo


Donde nombrearchivo es un puntero a una cadena de caracteres que representan un nombre valido del
archivo y puede incluir una especificaci
on del directorio. La cadena charmododetermina como se abre el
archivo. La siguiente tabla muestra los valores permitidos para modo.
Modo
r
w
a
rb
wb
ab
r+
w+
a+
r+b
w+b
a+b

Significado
Abre un archivo de texto para lectura.
Crea un archivo de texto para escritura.
Abre un archivo de texto para a
nadir.
Abre un archivo binario para lectura.
Crea un archivo binario para escritura.
Abre un archivo binario para a
nadir.
Abre un archivo de texto para lectura / escritura.
Crea un archivo de texto para lectura / escritura.
A
nade o crea un archivo de texto para lectura
/ escritura.
Abre un archivo binario para lectura / escritura.
Crea un archivo binario para lectura / escritura.
A
nade o crea un archivo binario para lectura
/ escritura.

Cuadro 3: Modos de acceso a un archivo

3.2.

La funci
on fopen()

Devuelve un puntero a archivo. Un programa nunca debe alterar el valor de ese puntero. Si se produce
un error cuando se esta intentando abrir un archivo, fopen() devuelve un puntero nulo. Se puede abrir un
archivo bien en modo texto o binario. En la mayora de las implementaciones, en modo texto, la secuencias
de retorno de carro salto de lnea se convierten a caracteres de salto de lnea en lectura. En la escritura,
ocurre lo contrario: los caracteres de salto de lnea se convierten en salto de lnea. Estas conversiones no
ocurren en archivos binarios

La macro NULL (puntero nulo)est


a definida en STDIO.H. fopen() devuelve este valor si ha ocurrido
cualquier error al abrir un archivo: como por ejemplo disco lleno o protegido contra escritura antes de
comenzar a escribir en el.
Si se usa fopen() para abrir un archivo en modo escritura, entonces cualquier archivo existente con el
mismo nombre se borrar
a y se crea uno nuevo. Si no existe un archivo con el mismo nombre, entonces se
crear
a. Si se quiere a
nadir al final del archivo entonces debe usar el modo a. Si se usa a y no existe el archivo,
se devolver
a un error.
La apertura de un archivo para las operaciones de lectura requiere que exista el archivo. Si no existe,
fopen() devolver
a un error. Finalmente, se abre un archivo para las operaciones de lectura / escribir, la
computadora no lo borrar
a si existe; sin embargo, si no existe, la computadora lo creara.

3.3.

Cierre de un archivo

La funci
on fclose() cierra una secuencia que fue abierta mediante una llamada a fopen(). Escribe toda la
informaci
on que todava se encuentre en el buffer en el disco y realiza un cierre formal del archivo a nivel del
sistema operativo. Un error en el cierre de una secuencia puede generar todo tipo de problemas, incluyendo
la perdida de datos, destrucci
on de archivos y posibles errores intermitentes en el programa. El prototipo de
esta funci
on es:
1 i n t f c l o s e ( FILE F ) ;

Donde F es el puntero al archivo devuelto por la llamada a fopen(). Si se devuelve un valor cero significa
que la operaci
on de cierre ha tenido exito. Generalmente, esta funcion solo falla cuando un disco se ha
retirado antes de tiempo o cuando no queda espacio libre en el mismo.
Para introducir u obtener datos de un archivo tenemos:
1 fprintf () y fscanf ()

Estas funciones se comportan exactamente como prinft() y scanf(), excepto que operan sobre archivo.
Sus prototipos son:
1 i n t f p r i n t f ( FILE F , const char c a d e n a d e c o n t r o l , . . . . . ) ;
2 i n t f s c a n f ( FILE F , const char c a d e n a d e c o n t r o l , . . . . . ) ;

fprintf() y fscanf() dirigen sus operaciones de E/S al archivo al que apunta F.


Las funciones fgets() y fputs() pueden leer y escribir cadenas a o desde los archivos. Los prototipos de
estas funciones son:
1 char f p u t s ( char s t r , FILE F ) ;
2 char f g e t s ( char s t r , i n t long , FILE F ) ;

La funci
on puts() escribe la cadena a un archivo especifico. La funcion fgets() lee una cadena desde el
archivo especificado hasta que lee un caracter de nueva lnea o longitud-1 caracteres.
Si se produce un EOF (End of File) la funcion gets retorna un NULL.

3.4.

Funcion feof()

Cuando se abre un archivo para entrada binaria, se puede leer un valor entero igual de la marca EOF.
Esto podra hacer que la rutina de lectura indicase una condicion de fin de archivo a
un cuando el fin fsico
del mismo no se haya alcanzado. Para resolver este problema, C incluye la funcion feof(), que determina
cuando se ha alcanzado el fin del archivo leyendo datos binarios. La funcion tiene el siguiente prototipo:
1 i n t f e o f ( FILE F ) ;

Su prototipo se encuentra en STDIO.H. Devuelve cierto si se ha alcanzado el final del archivo, en cualquier
otro caso, 0. Por supuesto, se puede aplicar este metodo a archivos de texto tambien.
Ahora bien para el ejemplo anterior usted incluira los datos de la forma:
Nombre del alumno1 nota Nombre del alumno2 nota .....

Algunas veces usted necesitara manipular por separado el nombre del alumno y su nota, para esto
es necesario separarlo en campos. Se puede realizar introduciendo caracteres delimitadores entre campo y
campo, por ejemplo:
fprinft(C,?
Esto generara un archivo de tipo:
Nombre del alumno1;nota Nombre del alumno2;nota .....
La funci
on rewind() inicializa el indicador de posicion, al principio del archivo, indicado por su argumento.
Su prototipo es:
void rewind (FILE *F);
Donde F es un puntero a un archivo valido. Esta funcion se encuentra en STDIO.H
La funci
on ferror() determina si se ha producido en error en una operacion sobre un archivo. Su prototipo
es:
int ferror(FILE *F);
Donde F es un puntero a un archivo valido. Devuelve cierto si se ha producido un error durante la ultima
operaci
on sobre el archivo. En caso contrario, devuelve falso. Debido a que cada operacion sobre el archivo
actualiza la condici
on de error, se debe llamar a ferror() inmediatamente despues de la operacion de este
tipo; si no se ase as, el error puede perderse. Esta funcion se encuentra en STDIO.H
La funci
on remove() borra el archivo especificado. Su prototipo es el siguiente:
1 i n t remove ( char n o m b r e a r c h i v o ) ;

Devuelve cero si tiene exito. Si no un valor distinto de cero. La funcion fflush() escribe todos los datos
almacenados en el buffer sobre el archivo asociado con un apuntador. Su prototipo es:
int fflush(FILE *F);
Si se llama esta funci
on con un puntero nulo se vacian los buffers de todos los archivos abiertos. Esta
funci
on devuelve cero si tiene exito, en otro caso, devuelve EOF.
1 #include <g r a p h i c s . h>

Cuadro 4: Inclusion de la librera grafica


Para inicializar el modo gr
afico se utiliza la funcion initgraph() y para detenerlo la funcion closegraph().
A la funci
on initgraph se le deben pasar 3 argumentos que permitiran detectar de forma automatica la placa
de video y fijar el modo de video m
as alto posible:
1 i n t d r i v e r=DETECT, modo ;
2 i n i t g r a p h (& d r i v e r ,&modo , ?C: \ \TC\\BGI ? ) ;

Cuadro 5: Inicializacion del modo grafico


El primer par
ametro (&driver) es asignado a DETECT, por la tanto la funcion detectgraph() es llamada,
y un dispositivo y modo gr
afico (segundo parametro) apropiados seran seleccionados. El tercer par
ametro
especifica el directorio donde los dispositivos graficos estan localizados.
Si la funci
on initgraph() falla, puede interceptarse un codigo de error e informar al usuario de dicho
problema:
1
2
3
4
5

i f ( g r a p h r e s u l t ( ) ! = grOk ) {
c o u t << ? E r r o r a l i n i c i a r e l modo g r
a f i c o , e l programa f i n a l i z a r a
?;
getch ( ) ;
exit (1);
}

Cuadro 6: Inicializacion del modo grafico


De ahora en adelante es posible utilizar cualquier funcion grafica en nuestro programa. Para finalizar el
modo gr
afico ejecutamos la siguiente instruccion:
4

closegraph();
Generalmente al iniciar el modo gr
afico se dispone de una resolucion de 640x480. Es decir disponemos
de 640 pixeles en el eje x y 480 pixeles en el eje y. Para comprobar esto, podemos hacer uso de la funciones
getmaxx() y getmaxy() que devuelven el maximo pxel del eje x e y respectivamente.
1 cout <<?R e s o l u c i o
n : ? << getmaxx ( ) << ? x ? << getmaxy ( ) ;

Cuadro 7: Inicializacion del modo grafico


En caso de contar con una resoluci
on de 640x480, la lnea de codigo anterior mostrara en pantalla lo
siguiente: Resoluci
on:
1 639 x479

Cuadro 8: Inicializacion del modo grafico


Esto se debe a que el u
ltimo pxel de eje x es 639, y el u
ltimo pxel del eje y es 479, ya que ambos ejes
comienzan en el pxel 0.

Establecer colores
Para seleccionar el color de fondo en modo grafico debemos utilizar la funcion setbkcolor() y para establecer el color de dibujo setcolor(). Para limpiar la pantalla en modo grafico se utiliza la funcion cleardevice()
que dejar
a la pantalla con el color establecido en setbkcolor().

Algunas funciones utilizadas


1. rectangle (int X1, int Y1, int X2, int Y2); Dibuja un rectangulo sin relleno en la pantalla marcado por
los puntos (X1, Y1) y (X2, Y2), donde X1 es el extremo izquierdo del rectangulo, Y1 es el extremo
superior, X2 es el extremo derecho e Y2 el extremo inferior del rectangulo.
rectangle (100, 200, 300, 400);

4.

Procedimiento

1. Transcribir los ejemplos compilar y ejecutar.


2. Completar los diagramas de flujo, pseudocodigo y codigo.
3. Modificar los valores y par
ametros de cada codigo par probar su validez

5.

Para resolver

1. Realizar un programa que reconozca de una cadena de caracteres aleatoria cuantos de ellos son letras
y cunatos espacios y cuantos son n
umeros
2. Realizar un programa que calcule la matriz inversa de una matriz definida por teclado comprobando
que AA1 = I
3. Crear un programa que imprima la siguiente tabla

5.1.

Temas de se deben investigar

1. Averiguar como se almacena en memoria los arrgleos en C/C++.


2. El n
umero de elementos que puede contener un arreglo (datos de u tipo), puede variar segun su tipo
en C/C++.
5

Nota
Los trabajos deben enviarse al correo progr 307l@outlook.com hasta mas tardar 10:00 pm del lunes antes
de cada clase.

Vous aimerez peut-être aussi