Profesora Ludia Gómez
Trabajo Final de Aplicada II
7 de diciembre de 2011
Integrantes:
Universidad Tecnológica de Panamá
Betegon, Abiam Facultad de Ingeniería en Sistemas y Computación
Girón, Juan
Pitty, Ida Departamento de Programación y Análisis de
8-839-1626 8-879-654
8-849-1280
Vivar, Luis
8-857-210
Sistemas Grupo 1-IL-122 Licenciatura en Ingeniería en Sistemas y Computación
Universidad Tecnológica de Panamá Facultad de Ingeniería en Sistemas y Computación Departamento de Programación y Análisis de Sistemas Licenciatura en Ingeniería en Sistemas y Computación
Programación Aplicada II Profesora Ludia Gómez de Meléndez
Trabajo Final de Aplicada II
Integrantes: Betegon, Abiam
8-839-1626
Giron, Juan
8-879-654
Pitty, Ida
8-849-1280
Vivar, Luis
8-857-210
Grupo 1-IL-122
7 de diciembre de 2011
4to Semestre
Programación Aplicada II Trabajo Final del Curso
1
Profesora Ludia de Meléndez
Índice de Contenido
Introducción ....................................................................................................................................... 3 Objetivos ............................................................................................................................................ 4 Indicaciones....................................................................................................................................... 4 Problema #1 ...................................................................................................................................... 5 Enunciado: ..................................................................................................................................... 5 Código fuente: ............................................................................................................................... 6 Problema #2 .................................................................................................................................... 13 Enunciado: ................................................................................................................................... 13 Código fuente: ............................................................................................................................. 14 Conclusión ....................................................................................................................................... 25 Bibliografía ....................................................................................................................................... 26
Programación Aplicada II Trabajo Final del Curso
2
Profesora Ludia de Meléndez
Introducción Hemos llegado al punto clave de nuestro aprendizaje en este curso, el examen semestral, tras largos meses de esfuerzo lo hemos logrado. En este trabajo final tocaremos diversos temas y/o conceptos cada uno de ellos enlazado y altamente ligado y necesario para desarrollar el siguiente de forma óptima. Pero afortunadamente cada uno de estos temas fueron enfatizados en durante el curso, los cuales son: Arreglos y Matrices: que son estructuras de memoria, bastante explotadas en nuestros cursos de programación en la cual podemos almacenar datos de un solo tipo. Punteros: que es una variable que hace referencia (apunta) a una dirección de memoria de otra variable Asignación Dinámica: la cual es el proceso de separar (reservar) espacio de memoria de nuestro computador para que esta sea utilizada por una variable puntero con diferentes usos. Struct: que son un tipo de dato que permite almacenar diferentes variables con diferentes tipos de datos, son sumamente útiles cuando usamos registros. Las interrupciones: que son situaciones especiales que suspenden la ejecución de un programa de modo que el sistema pueda realizar una acción para tratarla. Con estos conceptos en nuestra mente desarrollaremos entonces dos programas que finalizaran nuestro curso.
Programación Aplicada II Trabajo Final del Curso
3
Profesora Ludia de Meléndez
Objetivos 1. Aplicar los conceptos de interrupciones, en la solución de problemas, manejando a C, como lenguaje de programación. 2. Desarrollar aplicaciones que aplique los conceptos de struct, memoria dinámica, punteros, interrupciones y modo gráfico, en C, con un 100% de efectividad.
Indicaciones 1. 2. 3. 4.
Forme grupo de un mínimo de 4 Indique en que problema participo cada uno Entregue engrapado el trabajo y en un disco sus programas No se aceptan prorrogas
Programación Aplicada II Trabajo Final del Curso
4
Profesora Ludia de Meléndez
Problema #1 Enunciado:
Escriba una aplicación que dado una lista de automóviles con: Dirección, Marca, Modelo, Color, Año. Producir un nuevo listado ordenado por placa, con las placas de aquellos vehículos que terminan en un número par. Al final de la lista deben aparecer además los datos del carro más antiguo de la lista. El programa debe aplicar struct y asignación dinámica.
Programación Aplicada II Trabajo Final del Curso
5
Profesora Ludia de Meléndez
C贸digo fuente: #include<stdio.h> #include<conio.h> #include<stdlib.h> #include<string.h>
#define max 10
struct carro {
char descrip[max]; char marca[max]; char modelo[max]; char color[max]; int ano; double placa;
}; void imprimir(struct carro *automoviles,int a, int d, struct carro *listado) {
int b; clrscr(); puts("\n\n\t\t\tLISTA DE AUTOMOVILES\n\n"); for(b=0;b<a;b++) {
printf("\n\tla descripcion del auto #%i: %s\n",b+1,(automoviles+b)->descrip); printf("\n\tla marca del auto #%i: %s\n",b+1,(automoviles+b)->marca); printf("\n\tel modelo del auto #%i: %s\n",b+1,(automoviles+b)->modelo); printf("\n\tel color del auto #%i: %s\n",b+1,(automoviles+b)->color); printf("\n\t el ano del auto #%i: %i\n",b+1,(automoviles+b)->ano);
Programaci贸n Aplicada II Trabajo Final del Curso
6
Profesora Ludia de Mel茅ndez
printf("\n\t la placa del auto #%i: %.0lf\n\n",b+1,(automoviles+b)->placa); getch(); clrscr(); } puts("\n\n\t\t\tLISTA DE AUTOS POR PLACA\n"); for(b=0;b<d;b++) {
printf("\n\tla descripcion del auto #%i: %s\n",b+1,(listado+b)->descrip); printf("\n\tla marca del auto #%i: %s\n",b+1,(listado+b)->marca); printf("\n\tel modelo del auto #%i: %s\n",b+1,(listado+b)->modelo); printf("\n\tel color del auto #%i: %s\n",b+1,(listado+b)->color); printf("\n\t el ano del auto #%i: %i\n",b+1,(listado+b)->ano); printf("\n\t la placa del auto #%i: %.0lf\n\n",b+1,(listado+b)->placa); getch(); clrscr();
} puts("\n\n\t\t\tAUTOMOVIL MAS VIEJO"); printf("\n\tla descripcion del auto #%i: %s\n",d+1,(listado+d+1)->descrip); printf("\n\tla marca del auto #%i: %s\n",d+1,(listado+d+1)->marca); printf("\n\tel modelo del auto #%i: %s\n",d+1,(listado+d+1)->modelo); printf("\n\tel color del auto #%i: %s\n",d+1,(listado+d+1)->color); printf("\n\t el ano del auto #%i: %i\n",d+1,(listado+d+1)->ano); printf("\n\t la placa del auto #%i: %.0lf\n\n",d+1,(listado+d+1)->placa); } void acofecha(struct carro *automoviles, struct carro *listado,int a,int d) { int b=0,c, aux, pos=0; aux= (automoviles+b)->ano; Programaci贸n Aplicada II Trabajo Final del Curso
7
Profesora Ludia de Mel茅ndez
clrscr();
for(b=1;b<a;b++) { if((automoviles+b)->ano<aux) { aux= (automoviles+b)->ano; pos=b; } } listado=(carro*) realloc(listado,1*sizeof(carro)); (listado+d+1)->ano= (automoviles+pos)->ano; (listado+d+1)->placa= (automoviles+pos)->placa; strcpy((listado+d+1)->descrip,(automoviles+pos)->descrip); strcpy( (listado+d+1)->modelo,(automoviles+pos)->modelo); strcpy((listado+d+1)->marca,(automoviles+pos)->marca); strcpy((listado+d+1)->color,(automoviles+pos)->color); } void acomodo(struct carro *listado, int cont) { int a,b=0,fe; double pla,aux; char mo[max],ma[max],des[max],col[max]; clrscr(); aux=(listado+b)->placa; for(b=1;b<cont;b++) { if((listado+b)->placa>aux) {
fe=(listado+b)->ano; pla=(listado+b)->placa;
Programaci贸n Aplicada II Trabajo Final del Curso
8
Profesora Ludia de Mel茅ndez
strcpy(mo,(listado+b)->modelo); strcpy(ma,(listado+b)->marca); strcpy(col,(listado+b)->color); strcpy(des,(listado+b)->descrip); strcpy((listado+b)->descrip,(listado+b-1)->descrip); strcpy( (listado+b)->modelo,(listado+b-1)->modelo); strcpy((listado+b)->marca,(listado+b-1)->marca); strcpy((listado+b)->color,(listado+b-1)->color); (listado+b)->ano=(listado+b-1)->ano; (listado+b)->placa=aux; strcpy((listado+b-1)->descrip,des); strcpy((listado+b-1)->modelo,mo); strcpy((listado+b-1)->marca,ma); strcpy((listado+b-1)->color,col); (listado+b-1)->ano=fe; (listado+b-1)->placa=pla; aux=(listado+b)->placa; } } }
void buscar(struct carro *automoviles,struct carro *listado, int a) { int b,cont=0,w; clrscr(); for(b=0;b<a;b++) Programaci贸n Aplicada II Trabajo Final del Curso
9
Profesora Ludia de Mel茅ndez
{ w=((automoviles+b)->placa); if(w%2==0) {
(listado+cont)->placa= (automoviles+b)->placa;
strcpy((listado+cont)->descrip,(automoviles+b)->descrip); strcpy( (listado+cont)->modelo,(automoviles+b)->modelo); strcpy((listado+cont)->marca,(automoviles+b)->marca); strcpy((listado+cont)->color,(automoviles+b)->color); (listado+cont)->ano=(automoviles+b)->ano; cont++; } } } void main() { struct carro *automoviles, *listado; int a,b,c,d=0,m; float e,f,g; double x; char todo[max]; clrscr(); puts("\n\ninttoduzca la cantidad de espacio a pedir\n\n"); scanf("%i",&a); automoviles= (carro*) calloc(a,sizeof(carro)); if(automoviles != NULL) { for(b=0;b<a;b++) { clrscr(); Programaci贸n Aplicada II Trabajo Final del Curso
10
Profesora Ludia de Mel茅ndez
printf("\n\nintroduzca la descripcion del auto # %i\n",b+1); fflush(stdin); gets((automoviles+b)->descrip); printf("\n\nintroduzca la marca del auto # %i\n",b+1); fflush(stdin); gets((automoviles+b)->marca); printf("\n\nintroduzca el modelo del auto # %i\n",b+1); fflush(stdin); gets((automoviles+b)->modelo); printf("\n\nintroduzca el color del auto # %i\n",b+1); fflush(stdin); gets((automoviles+b)->color); printf("\n\nintroduzca el ano del auto # %i\n",b+1); fflush(stdin); gets(todo); c=atoi(todo); (automoviles+b)->ano=c; printf("\n\nintroduzca la placa del auto # %i\n",b+1); fflush(stdin); gets(todo); x=atof(todo); (automoviles+b)->placa=x; m=x; if(m%2==0) d=d+1; } Programaci贸n Aplicada II Trabajo Final del Curso
11
Profesora Ludia de Mel茅ndez
listado=(carro*) calloc(d,sizeof(carro)); clrscr(); if(listado != NULL) {
buscar(automoviles, listado, a); acomodo(listado,d); acofecha(automoviles, listado, a,d); imprimir(automoviles,a,d,listado);
} else puts("\n\nNO HAY ESPACIO DE MEMORIA\n");
} else puts("\n\nno hay suficiente espacio de memoria\n"); getch(); free(automoviles); free(listado);
}
Programaci贸n Aplicada II Trabajo Final del Curso
12
Profesora Ludia de Mel茅ndez
Problema #2 Enunciado:
Elabore un programa que seleccione una página de video activa y luego haga lo siguiente: Muestre un rombo Limpie toda la pantalla y visualice Un arbolito de Navidad Y debajo de él diga Noche de Paz y Noche de Alegría
Programación Aplicada II Trabajo Final del Curso
13
Profesora Ludia de Meléndez
C贸digo fuente:
#include <stdio.h> #include <conio.h> #include <stdlib.h> #include <dos.h>
char pagina=0; char color=7; void cursor(char x, char y) {
_AH=2;
// servicio
_DH=y;
// posicion en x
_DL=x;
// posicion en y
_BH=pagina;
// paginacion
asm int 10h } void limpieza() //interrupcion 10h {
_AH=7;
//puede ser servicio 6 y servicio 7
_AL=0;
//borra todas las lineas
_CX=0;
//comienzo de fila y columna de la esquina superior izquierda
_DX=0x184f;//fin de la fila y columna de la esquina inferior derecha _BH=0; //las lineas en blanco se oscurecen asm int 10h; } void pixel(int x, int y, int color)
Programaci贸n Aplicada II Trabajo Final del Curso
14
Profesora Ludia de Mel茅ndez
{
_AH= 0x0C; _AL= color; _BH= 0; _CX= x; _DX= y; asm int 10h;
} void triangulo(int x, int y,int color,int r) {
int i,e=60; for(i=x+r;i<x+e-r;i++) pixel (i,y,color);
} void pausa() //interrupcion 16h {
_AH=0; asm int 16h
} void video() { _AH=0; _AL=13; //EGA=13 VGA =14, 16 colores 640 x 200, 60 filas x 40 columnas asm int 10h; } void imprime(char caracter) { _AH=0xE;
//interrupcion 10h
//servicio Eh
_AL=caracter; _BL=2;
Programaci贸n Aplicada II Trabajo Final del Curso
15
Profesora Ludia de Mel茅ndez
_BH=0; asm int 10h } void nieve() {
int g; for (g=0;g<200;g++){ delay(4); pixel (1+rand()%400,g,15);}
} void tierra() {
int g; for (g=0;g<200;g++) pixel (1+rand()%400,100+g,7);
}
void letrero() {
cursor(5,23); char *p="noche de paz y noche de alegria"; for(int g=0;g<31;g++) imprime(p[g]);
} void todo() {
Programaci贸n Aplicada II Trabajo Final del Curso
16
Profesora Ludia de Mel茅ndez
int j,r=0; limpieza(); video();
// rombo for(j=0;j<30;j++) { triangulo(130,80-j,12,r); r++; }
r=0; for(j=0;j<30;j++) { triangulo(130,80+j,12,r); r++; }
r=0;
// fin del rombo pausa(); limpieza();
Programaci贸n Aplicada II Trabajo Final del Curso
17
Profesora Ludia de Mel茅ndez
for (int u=0;u<75;u++) for (j=0;j<640;j++) pixel(j,125+u,15);
for(j=0;j<30;j++) { triangulo(130,80-j,2,r); r++; } r=0;
for(j=0;j<30;j++) { triangulo(130,100-j,2,r); r++; } r=0;
for(j=0;j<30;j++) {
Programaci贸n Aplicada II Trabajo Final del Curso
18
Profesora Ludia de Mel茅ndez
triangulo(130,120-j,2,r); r++; } for(int e=0;e<30;e++) for(j=155;j<165;j++) pixel (j,121+e,4); for ( int g=0;g<10;g++) for( int t=0+g;t<10+g;t++) for ( int d=75+g;d<90+g;d++) pixel (d,170-t,7);
for (g=0;g<15;g++) pixel (89-g,161,2);
for (g=0;g<10;g++) pixel (89+g,161-g,2);
for (g=0;g<10;g++) pixel (89,161+g,2);
for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=100+g;d<115+g;d++) pixel (d,180-t,12);
Programaci贸n Aplicada II Trabajo Final del Curso
19
Profesora Ludia de Mel茅ndez
for (g=0;g<15;g++) pixel (114-g,171,10);
for (g=0;g<10;g++) pixel (114+g,171-g,10);
for (g=0;g<10;g++) pixel (114,171+g,10); for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=165+g;d<180+g;d++) pixel (d,160-t,11);
for (g=0;g<15;g++) pixel (179-g,151,10);
for (g=0;g<10;g++) pixel (179+g,151-g,10);
for (g=0;g<10;g++) pixel (179,151+g,10);
for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=125+g;d<140+g;d++)
Programaci贸n Aplicada II Trabajo Final del Curso
20
Profesora Ludia de Mel茅ndez
pixel (d,180-t,8);
for (g=0;g<15;g++) pixel (139-g,171,10);
for (g=0;g<10;g++) pixel (139+g,171-g,10);
for (g=0;g<10;g++) pixel (139,171+g,10);
for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=125+g;d<140+g;d++) pixel (d,150-t,3);
for (g=0;g<15;g++) pixel (139-g,141,10);
for (g=0;g<10;g++) pixel (139+g,141-g,10);
for (g=0;g<10;g++) pixel (139,141+g,10);
Programaci贸n Aplicada II Trabajo Final del Curso
21
Profesora Ludia de Mel茅ndez
for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=145+g;d<160+g;d++) pixel (d,180-t,4);
for (g=0;g<15;g++) pixel (159-g,171,10);
for (g=0;g<10;g++) pixel (159+g,171-g,10);
for (g=0;g<10;g++) pixel (159,171+g,10);
for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=145+g;d<160+g;d++) pixel (d,180-t,9);
for (g=0;g<15;g++) pixel (159-g,171,10);
for (g=0;g<10;g++) pixel (159+g,171-g,10); for (g=0;g<10;g++)
Programaci贸n Aplicada II Trabajo Final del Curso
22
Profesora Ludia de Mel茅ndez
pixel (159,171+g,10);
for ( g=0;g<10;g++) for( t=0+g;t<10+g;t++) for (d=165+g;d<180+g;d++) pixel (d,180-t,9);
for (g=0;g<15;g++) pixel (179-g,171,10);
for (g=0;g<10;g++) pixel (179+g,171-g,10);
for (g=0;g<10;g++) pixel (179,171+g,10); } void main () {
int x=0; limpieza(); todo(); while(x<10) {
x++; nieve(); if ((x%2)==0) tierra();
Programaci贸n Aplicada II Trabajo Final del Curso
23
Profesora Ludia de Mel茅ndez
} letrero(); pausa(); }
Programaci贸n Aplicada II Trabajo Final del Curso
24
Profesora Ludia de Mel茅ndez
Conclusión Una vez finalizado este trabajo nos damos cuenta lo mucho que cada uno de nosotros ha avanzado en nuestro proceso como programadores, nunca nos podremos detener ahora consiguiendo cada vez más herramientas de trabajo para en su forma única cada uno de nosotros cambiar al mundo. En este trabajo podemos resaltar la importancia de tres conceptos claves: Los structs porque con ellos podemos agrupar varios tipos de datos que tenemos a la disposición y usarlos al mismo tiempo que guardamos información en ellos La asignación dinámica que nos ayuda a tomar la memoria que necesitamos para cualquier trabajo con las funciones calloc y malloc, y también muy importante modificando este espacio de trabajo, ya sea expandiéndolo o comprimiéndolo dependiendo de las necesidades del problema en ese momento Las interrupciones que nos ayudan a comunicarnos mejor con la maquina pero esta vez a un nivel bajo, en donde podemos navegar a través de las pantallas (paginas) de video, y hacer todas las funciones que antes conocíamos(como formar triángulos, hacer líneas, limpiar, leer, etc..) pero a bajo nivel Y en estos momentos que poseemos estas herramientas este trabajo no se hizo más fácil sino que nos obligó a tomar nuestros conocimientos y la lógica para dar como resultado lo que hemos logrado.
Muchas gracias
Programación Aplicada II Trabajo Final del Curso
25
Profesora Ludia de Meléndez
Bibliografía 1. Ludia de Meléndez, Plataforma Moodle:http://web.unvi.utp.ac.pa/moodle/file.php/216/TRABAJOFINAL2011INTER STRCT.pdf. 2011 2. 3. 4. 5. 6. 7.
Interrupciones en el computador. Profesora Ludia de Meléndez. 2011. PowerPoint Teoría de Unión. Profesora Ludia de Meléndez. 2011. Word Asignación Dinámica. Profesora Ludia Gómez. 2011. PDF Estructuras. Profesora Ludia Gómez de Meléndez. 2011. PDF Teoría de Punteros. Profesora Ludia Gómez. 2011. PDF Vectores y Matrices-Capitulo#1. Profesora Ludia de Meléndez. 2011. PDF
8. Las interrupciones. Wikipedia. es.wikipedia.org/wiki/Interrupción 9. Interrupciones en C. Servidor Terra. www.terra.es/personal/fremiro/interrupciones.htm 10. Estructuras Dinámicas. Programatium. Manual de Programación. www.programatium.com/manuales/c/10.htm
Programación Aplicada II Trabajo Final del Curso
26
Profesora Ludia de Meléndez