trabajo final de aplicada ii
DESCRIPTION
trabajo final de aplicada IITRANSCRIPT
Pro
fes
ora
Lu
dia
Gó
me
z
7 d
e d
icie
mb
re d
e 2
011
Tra
bajo
Fin
al d
e A
plica
da
II
Integrantes:
Betegon, Abiam 8-839-1626
Girón, Juan 8-879-654
Pitty, Ida 8-849-1280
Vivar, Luis 8-857-210
Grupo 1-IL-122
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
1
Programación Aplicada II
Trabajo Final del Curso
Profesora Ludia de Meléndez
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
2
Programación Aplicada II
Trabajo Final del Curso
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
3
Programación Aplicada II
Trabajo Final del Curso
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.
4
Programación Aplicada II
Trabajo Final del Curso
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. Forme grupo de un mínimo de 4
2. Indique en que problema participo cada uno
3. Entregue engrapado el trabajo y en un disco sus programas
4. No se aceptan prorrogas
5
Programación Aplicada II
Trabajo Final del Curso
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.
6
Programación Aplicada II
Trabajo Final del Curso
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);
7
Programación Aplicada II
Trabajo Final del Curso
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;
8
Programación Aplicada II
Trabajo Final del Curso
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;
9
Programación Aplicada II
Trabajo Final del Curso
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++)
10
Programación Aplicada II
Trabajo Final del Curso
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();
11
Programación Aplicada II
Trabajo Final del Curso
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;
}
12
Programación Aplicada II
Trabajo Final del Curso
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);
}
13
Programación Aplicada II
Trabajo Final del Curso
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
14
Programación Aplicada II
Trabajo Final del Curso
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)
15
Programación Aplicada II
Trabajo Final del Curso
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) //interrupcion 10h
{ _AH=0xE; //servicio Eh
_AL=caracter;
_BL=2;
16
Programación Aplicada II
Trabajo Final del Curso
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()
{
17
Programación Aplicada II
Trabajo Final del Curso
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();
18
Programación Aplicada II
Trabajo Final del Curso
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++)
{
19
Programación Aplicada II
Trabajo Final del Curso
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);
20
Programación Aplicada II
Trabajo Final del Curso
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++)
21
Programación Aplicada II
Trabajo Final del Curso
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);
22
Programación Aplicada II
Trabajo Final del Curso
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++)
23
Programación Aplicada II
Trabajo Final del Curso
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();
24
Programación Aplicada II
Trabajo Final del Curso
Profesora Ludia de Meléndez
}
letrero();
pausa();
}
25
Programación Aplicada II
Trabajo Final del Curso
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
26
Programación Aplicada II
Trabajo Final del Curso
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. Interrupciones en el computador. Profesora Ludia de Meléndez. 2011. PowerPoint
3. Teoría de Unión. Profesora Ludia de Meléndez. 2011. Word
4. Asignación Dinámica. Profesora Ludia Gómez. 2011. PDF
5. Estructuras. Profesora Ludia Gómez de Meléndez. 2011. PDF
6. Teoría de Punteros. Profesora Ludia Gómez. 2011. PDF
7. 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