Upload
ngominh
View
224
Download
0
Embed Size (px)
Citation preview
Estructuras de datos (Prof. Edgardo A. Franco)
1
Laboratorio 04: Anidamiento de estructuras iterativas y selectivas
Prof. Edgardo Adrián Franco Martínez http://computacion.cs.cinvestav.mx/~efranco
@efranco_escom
Contenido
• Kbhit() Detectar una tecla presionada
• while Mientras no se presione una tecla
• Generación de números pseudoaleatorios
• Ejercicios 04 “Anidamiento de estructuras iterativas y selectivas”
2
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
kbhit() Detectar una tecla presionada
Kbhit() *Función incluida en <conio.h> en TurboC, Borland C y en la mayoría de loscompiladores de C bajo Windows.
• Esta función comprueba si se ha pulsadorecientemente una tecla y devuelve valores defalso o verdadero (0 o 1).
• Sintaxis: int kbhit(void);
• MinGW en su librería conio.h incluye dichafunción.
3
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
while() Mientras no se presione una tecla
4
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
//LIBRERIAS
#include<stdio.h>
#include<windows.h> //Libreria no ANSI C (Para Sleep)
#include<conio.h> //Libreria no ANSI C (Para kbhit)
//CONSTANTES
#define TIEMPO 500
//PROGRAMA PRINCIPAL
int main(void)
{
//Mientras no se precione una tecla
while(!kbhit())
{
printf("\a * "); //Alerta y *
Sleep(TIEMPO); //Esperar un tiempo
}
return 0;
}
Ejemplo con kbhit() y gotoxy() “caída.c”
5
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
//LIBRERIAS
#include<stdio.h>
#include<windows.h> //Libreria no ANSI C (Para Sleep) y para las sentencias dentro de la función gotoxy()
#include<conio.h> //Libreria no ANSI C (Para kbhit)
//CONSTANTES
#define NUM_FILAS 23
#define COLUMNA 10
#define TIEMPO 100
//DECLARACIÓN DE FUNCIONES
void gotoxy( int x, int y );
//PROGRAMA PRINCIPAL
int main(void)
{
int fila=0, fila_anterior=0;
//Limpiar la pantalla
system("cls");
//Mientras no se precione una tecla
while(!kbhit())
{
fila_anterior=fila; //Almacenar la fila anterior
fila++; //Incrementar la fila
//Si se rebasa el número de filas
if(fila>NUM_FILAS)
{
fila=0;//Regresar a la fila cero
}
gotoxy(COLUMNA,fila_anterior); //Mover el cursor a la posición anterior
putchar(' '); //Borrar el rastro en la
posición anterior
gotoxy(COLUMNA,fila); //Mover el cursor a la nueva fila
putchar('*'); //Colocar * en la fila
Sleep(TIEMPO); //Esperar un tiempo
}
return 0;
}
//DEFINICIÓN DE FUNCIONES
void gotoxy( int x, int y )
{
HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE);
COORD position = {x,y};
SetConsoleCursorPosition(hStdout,position);
};
Ejercicios 03 “Anidamiento de estructuras iterativas y selectivas”
• Ejercicio 1: Realizar un programa que muestre lacaída de 3 caracteres (al mismo tiempo yvelocidad) en la pantalla, se borre su rastro yfuncione mientras no se presione una tecla.
6
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
• Ejercicio 02: Realice un programa que imprimauna pirámide invertida. Mientras no se presioneuna tecla la pirámide estará borrándose yredibujándose cada 1 segundo, es decir aparece 1segundos y desaparece otro segundo y así hastapresionar una tecla• El tamaño de la base se recibe al inicio
Si el tamaño de la base es impar: Por ejemplo 11
* * * * * * * * * * ** * * * * * * * *
* * * * * * ** * * * *
* * **
7
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
Si el tamaño de la base es par: Por ejemplo 10
* * * * * * * * * ** * * * * * * *
* * * * * ** * * *
* **
• Ejercicio 03: Realizar un programa que muestre uncarácter rebotando en un marco rectangular en lapantalla mientras no se presione una tecla.• El tamaño del marco lo da el usuario; considere también solo
movimientos en diagonal del carácter, i.e. no hay movimientohorizontal ni vertical.
8
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
• Ejercicio 4: Modifique el ejercicio 01 para que elcarácter 1 caiga a una velocidad de 10milisegundos por coordenada, el carácter 2 a 5milisegundos por coordenada y el carácter 3 a 15milisegundos por coordenada.
10 ms5 ms 15 ms
10 ms5 ms
15 ms
9
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez
Ejercicios 04 “Anidamiento de estructuras iterativas y selectivas”
• Diseñar y codificar una solución para cada uno de los ejercicios anteriores:
• Observaciones
1. Diseñar el diagrama de flujo correspondiente a cada uno de los ejercicios.
2. Reportar el texto del ejercicio, el diagrama de flujo y el código en C (concolores) y las pruebas de sus programas.
3. Incluir al reporte las capturas de pantalla
4. El reporte es individual y tiene portada, índice y encabezados de paginacon número de pagina , titulo y nombre del alumno.
5. Mostrar el funcionamiento de cada uno de los ejercicios en la sesión delaboratorio 05, (1CV8 Martes 02 Oct, 1CV7 Miércoles 03 Oct y 1CV10Miércoles 03 Oct).
6. Enviar vía Web en un archivo comprimido (ZIP, RAR o TAR), reporte ycódigos de C de cada problema antes del día Viernes 5 de Octubre de2012 (23:59:59 hora limite).
Grupo Contraseña
1CV8 algoritmia1cv8 10
Alg
ori
tmia
y p
rogr
amac
ión
est
ruct
ura
da
Lab
ora
tori
o 0
4 A
nid
amie
nto
de
estr
uct
ura
s it
erat
ivas
y s
elec
tiva
sP
rof.
Edga
rdo
Ad
rián
Fra
nco
Mar
tín
ez