Profesor: Alonso Ramírez Manzanares
|
|
Datos
Ext. 49641 Lab H-16
Ayudantes:
Ivan
Munguía munguia@cimat.mx
Ángel E. Muñoz aemz@cimat.mx
Jorge
Pérez C. jorge_oax@cimat.mx
Horario de Clases
-
Lunes Jueves y Viernes de 11:00 am - 12:30 pm
Horario de Asesorias
- Martes
y miércoles de 11:00 am - 12:30 pm
Forma de Calificar a 100 puntos en el semestre:
- Primer parcial
Examen - 25ptos. Tareas 15ptos. Proyecto 10ptos.
- Segundo parcial
Examen - 25ptos. Tareas 15ptos. Proyecto 10ptos.
FORMATO DEL ARCHIVO ZIP PARA MANDAR LAS TAREAS
<apellido
paterno><primera letra nombre><fecha de entrega en
DDMM><contador alfabetico (a,b,c,..)si es mas de una tarea>.zip
Material de Apoyo
Archivo de Comandos MS-DOS en .doc
Convertir de Decimal a Binario
Manejo de 256 Colores y res 800 x 600
Bibliografía:
Computación &
informática de hoy: Una mirada a la tecnología
del mañana. George Beekman,
Ernesto Morales. Argentina
Addison-Wesley. # Biblioteca de
Cimat QA76 B44.
Tareas:
3.- Realizar un archivo de procesamiento por lotes en MS-DOS, tambien conocido como BATCH. Este archivo debe de contener por lo menos 10 comandos del MS-DOS de la lista proporcionada y en total debe de utilizarse por lo menos 3 parámetros para los comandos (parámetros de la forma "/algo" ). El archivo ejecutará la acciones que ustedes quieran (sean creativos!!). Deberán de entregar por e-mail el archivo batch, el listado del directorio en donde se pueda ver el resultado del proceso y una explicación verbal de lo que hace su archivo.
Fecha de entrega: Lunes 18 de Agosto antes de la hora de clase.
4.- Problemas de Karel.
- Leer el manual de Karel hasta la página 5 (antes de los problemas). Le pueden sacar copias del juego que dejé en clase o bien bajarlo aquí Manual Karel.
- Resolver los siguientes problemas ( OJO ! ) en PAPEL .
Fecha de entrega: Lunes 18 de
Agosto antes de la hora de clase
5.- Instalar Java 2 Runtime, se puede bajar de:
Java 2
Runtime (Recuerden probar primero si ya está instalado).
Instalar el programa Karel , se puede bajar de:
Entrega: el
miércoles 19 de agosto.
6.- Releer la sección 3 del manual de Karel, hacer los ejercicios de la sección 3.1
y además hacer el siguiente ejercicio:
Solucionar este problema de Karel, utilizando
instrucciones nuevas (subrutinas) para poder hacerlo con el menor
número de líneas posibles (se puede hacer con 39 lineas (o quizá menos)
utilizando el tipo de notación vista y únicamente las instrucciones dadas hasta
la sección 3 del documento).
Configuración Inicial:
Configuración Final:
Entrega: el miércoles 27 de Agosto, mandar un solo archivo ZIP con el archivo del escenario (*.esc) y con el archivo del programa (*.k). MANDAR LA TAREA A mailto:aemz@cimat.mx
(OJO CAMBIÓ LA FECHA DE ENTREGA!!!, tienen 2 dias más)
- Releer la secciones ya vistas en clase: Seccion 4 , 5 y 6.
- Hacer los problemas de dichas secciones (subsecciones: 4.4, 5.2 y 6.1).
- Los archivos de código karel (*.k) deben de tener comentarios que indiquen lo que hace una o un bloque de instrucciones.
Entrega: el miércoles 27 de Agosto, mandar un solo archivo ZIP con el archivo del escenario (*.esc) y con el archivo del programa (*.k). MANDAR LA TAREA A mailto:aemz@cimat.mx
(OJO CAMBIÓ LA FECHA DE ENTREGA!!!, tienen 2 dias más).
-
Instalar Borlandc 3.1en
su máquina de trabajo.
-
Hacer lel primer
programa Hola mundo en C
Fecha de entrega:
miércoles 3 de septiembre antes de la clase.
-
Demostrar usando un
programa en C, que el numero 0.1 no se guarda exactamente
en la computadora,
es decir, que se almacena una aproximación.
- Capturar y ejecutar el programa que convierte de grados Fahrenheit a Celsius.
- Se debe de mandar el código fuente y la salida del programa en un archivo ZIP.
Fecha de entrega: Lunes 8 de septiembre antes de la clase.
-
Leer el documento en
WORD sobre el control de Flujo en C BAJAR AQUÍ.
Debe de estar leído para el lunes 8 de
septiembre.
- Hacer un programa que utilice cada una de las instrucciones de control de flujo que se explican en el Documento.
Fecha de entrega:
Miércoles 10 de septiembre antes de la clase.
Problema de Examen
para llevar a casa!!
9.- (1 pto.)¡¡ Problema para para llevar !!. Imagina
un que tenemos a Karel “el ratón”, el cual se debe de mover
por las paredes (como los ratones) para ir a
comer su “quesito”, en un escenario como el que se muestra en el dibujo.
Esto
se conoce en robótica como un robot seguidor de contornos.
Escribe el pedazo de código
para que el “ratón” llegue a su “quesito” y lo levante. Ni tú, ni el ratón
saben cuantos pasos miden las paredes. Utiliza el mismo pedazo de código para
hacer tareas similares. Se entrega EN PAPEL en la clase del miércoles 17.
Indicar porque el programa visto en clase que calcula la
serie de Fibonacci de manera recursiva imprime números de más, y proponer una
solución para mostrar solamente el número de la serie que se pide por teclado
(y no toda la serie).
Fecha de entrega: Lunes 22
de Septiembre antes de la clase.
Realizar
un programa en C que convierta un número de base a 10 a un número en cualquier
base entre 2 y 10, modificando el visto en clase. El número en base 10 y la
base a la que se convierte se leen desde teclado. El trabajo se hace usando una
función.
OJO!! : A partir de ahora TODAS, TODAS las tareas
se envian a :
Angel Muñoz aemz@cimat.mx.
No me envien las tareas con copia a mí, ni con
copia a nadie más.
Fecha de entrega: Jueves 25
de Septiembre antes de la clase.
TAREA : PARA LUNES 29 Codigo fuente y salida a
pantalla.
1.- Hacer un programa que muestre en pantalla:
0000000000
1111111111
2222222222
3333333333
4444444444
5555555555
6666666666
7777777777
8888888888
9999999999
2.- Hacer un programa que muestre en pantalla
1
22
333
4444
55555
666666
7777777
88888888
999999999
3.- Hacer un programa que muestre en pantalla el
triángulo de Pascal. (hasta el número 8 es suficiente)
0
_1
1
_1 _1
2
_1 _2 _1
3 _1 _3
_3 _1
4 _1 _4
_6 _4 _1
5 _1 _5 10
10 _5 _1
4.- Leer una matriz de 3x3 desde teclado y
almacenarla en una matriz de flotantes, de tal forma que se capture elemento a
elemento, por renglones.
5.-Dada la serie armónica H(n)=1 +1/2 + 1/3 +1/4
+...+ 1/n, considere el siguiente problema: dado un numero real c>0, ¿Cuál
es el menor valor de n tal que H(n)>c?
6.- Haz un programa que aproxime el logaritmo
natural de 2, usando Log2 = 1 – 1/2 + 1/3 – 1/4 + (-1)n+1/n ,
¿Cuántas iteraciones se necesitan para tener una precisión de diezmilésimas con
el valor verdadero?
Haz un programa en C que
encuentre el valor de x en el intervalo [0,4] donde la función f(x) = -2x^3
+5x^2+3x tiene un máximo.
Fecha de entrega: Lunes 6
de Octubre antes de la clase.
Realizar un programa en C
que utilize el modo gráfico incluyendo la librería <graphics.h>, esto es,
realizar un programa que utilize por lo
menos una ves las siguientes funciones:
void setcolor(int color);
void putpixel(int x,int y,
int color)
void far line(int x1, int
y1, int x2, int y2);
void far moveto(int x, int
y);
void far outtextxy(int x, int
y, char far *cadena_texto);
void far circle(int x, int
y, int radio);
void
far rectangle(int izquierda, int superior, int derecha, int inferior);
Fecha de entrega: Jueves 9
de Octubre antes de la clase.
El codigo de un ejemplo de
putpixel es:
#include <graphics.h>
#include
<stdlib.h>
#include
<stdio.h>
#include
<conio.h>
#include
<dos.h>
#define PIXEL_COUNT
1000
#define
DELAY_TIME 100 /* in milliseconds */
int main(void)
{
/* request auto detection */
int gdriver = DETECT, gmode, errorcode;
int
i, x, y, color, maxx, maxy,
maxcolor, seed;
/* initialize
graphics and local variables */
initgraph(&gdriver, &gmode,
"c:\\borlandc\\bgi");
/* read result of
initialization */
errorcode = graphresult();
/* an error occurred
*/
if (errorcode != grOk)
{
printf("Graphics error: %s\n",
grapherrormsg(errorcode));
printf("Press any key to
halt:");
getch();
/* terminate with an
error code */
exit(1);
}
maxx = getmaxx() + 1;
maxy = getmaxy() + 1;
maxcolor = getmaxcolor() + 1;
while (!kbhit())
{
/* seed the random
number generator */
seed = random(32767);
srand(seed);
for (i=0; i<PIXEL_COUNT; i++)
{
x = random(maxx);
y = random(maxy);
color = random(maxcolor);
putpixel(x, y, color);
}
delay(DELAY_TIME);
srand(seed);
for (i=0; i<PIXEL_COUNT; i++)
{
x = random(maxx);
y = random(maxy);
color = random(maxcolor);
if (color == getpixel(x, y))
putpixel(x, y, 0);
}
}
/* clean up */
getch();
closegraph();
return 0;
}
TAREA LUNES 20 de Octubre.
Escribir un programa en C que utilize el modo gráfico e imprima la gráfica de una función f(x) continua en un intervalo dado, utilizando para ello las transformaciones de coordenadas de mundo a coordenadas de pantalla vistas en clase.
Para evitar discontinuidades en la gráfica puden utilizar el trazado de lineas en lugar de dibujar píxel a píxel.
Fecha de entrega: Jueves 23
de Octubre antes de la clase.
Problema para llevar del segundo examen
OJO!! Al momento de probar el algoritmo de llenado de figura (problema 4) es necesario “llenar”
una figura pequeñita, de lo contrario se puede acabar la memoria de la máquina. Hagan un cuadrado
de 10 por 10 y pruébenlo ahí, con eso es más que suficiente.
Tarea Viernes 31 de Octubre de 2003
Implementar todas las funciones de Cola vistas en clase, en un programa sencillo que encole y desencole 5 o 6 elementos. Los elementos se deben de definir en base a una estructura, de tal forma que la información que se encola sea genérica.
Fecha de entrega Viernes 7 de Noviembre antes de la clase.
OJO! AQUÍ PUEDEN BAJAR
UNA DEFINICIÓN PRELIMINAR
DE LA SIMULACIÓN
DEL BANCO Archivo TXT
Aquí esta la librería para poder usar 256 colores, el archivo ZIP contiene un ejemplo CPP
y la librería BGI necesaria, la cual debe de estar en el mismo directorio de la aplicación. Además permite cambiar
la resolución a 800 x 600 pixeles.
Manejo de 256 Colores y res 800 x 600
Tarea 17 de noviembre.- El archivo con la imagen de 100 pixeles de ancho y 75 pixeles de alto esta aquí:
imagen100x75.txt y otra más figura100x75.txt
el cual asigna un
valor a cada píxel entre 0 y 1 donde cero es negro y 1 es blanco, y
los valores
intermedios son valores de gris.
El codigo que YO usé para
escribir el archivo es:
FILE * fp =
fopen("imagen100x75.txt","w+");
for(int i=0; i< 75 ; i++){
for(int j=0; j < 100 ; j++){
fprintf(fp,"%.3f
",f[i][j]);
}
fprintf(fp,"\n");
}
fclose(fp);
La fecha de entrega de este
programa es el viernes 28 de Noviembre a cualquier hora.
18 de noviembre, Tarea: Se trata de hacer las 9 funciones que se definen en el código C que aparece abajo, de tal forma que la función main
(que tambien aparece abajo) se ejecute exactamente como yo la escribí. Una descripción de lo que hace cada función se indica en
comentarios.
La fecha de entrega de este
programa es el viernes 5 de Diciembre a cualquier hora.
#include<stdio.h>
#define TIPO float
//el tipo de una matriz
typedef struct TMatrix{
TIPO **datos;
int rens,cols;
TIPO traza;
TIPO determinante;
} Matrix;
// a)si la matriz que recibe
como parametro tiene datos (datos != NULL),
// entonces le libera la
memoria.
// b) le da memoria
(dinamicamente) a la matriz que se le manda como
// parametro deacuerdo a los
renglones y columnas y le actuliza sus propios
// valores rens y cols.
// C) si no puede obtener la
memoria correctamente regresa por la izquierda 0
// de lo contrario regresa 1
int iniMatrix(Matrix *m,int ren,int col);
// a) libera la memoria de la
matriz
// b) pone datos=NULL
// c) pone los renglones y
columnas igual a cero
void destruyeMatrix(Matrix
*m);
//calcula la traza y el
determinante de la matriz que se le manda y los
// guarda en los campos
respectivos
void
calculaTrazaYDeterminante(Matrix *m);
// copia la matriz mOrigen en
mDestino, si mDestino no tiene memoria o bien
// tiene memoria para
dimensiones diferentes, se debe de liberar e inicializar
// correctamente
void igualaMatrix(Matrix
*mOrigen,Matrix *mDestino);
// a)guarda el resultado de la
multiplicacion de la matriz mA por la matriz
// mB el la matriz mResultado,
si mResultado no tiene memoria o bien
// tiene memoria para
dimensiones diferentes, se debe de liberar e inicializar
// correctamente, recordar que
el resultado de la multiplicación de dos matrices de
// dimensiones (n,m) y (m,o) tiene dimensiones (n,o)
// b) si las matrices no se
pueden multiplicar por problemas de dimension o memoria
// pedida regresa 0 de lo
contrario regresa 1.
int multiplicaMatrices(Matrix
*mA,Matrix *mB,Matrix *mResultado);
//llena la matriz que se le
manda como parametro desde teclado
void
leeMatrixDesdeTeclado(Matrix *m);
// imprime el contenido de la
matriz que se le manda como parametro en la
// pantalla
void
imprimeMatrixAPantalla(Matrix *m);
// Calcula la transpuesta de
la matriz que se le manda como parametro
// y la guarda en si misma.
void hazlaTranspuesta(Matrix
*a);
// a)escribe el contenido de
la matriz que se le manda al archivo con el nombre
// que hay en la variable
char* nombreArchivo, si el archivo existe se sobre-escribe.
// b) si no puede abrir el
archivo regresa 0 de lo contrario regresa 1
int escribeArchivo(Matrix
*m,char* nombreArchivo);
void main(void){
Matrix a,b,c,d;
a.datos = NULL;
b.datos = NULL;
c.datos = NULL;
d.datos = NULL;
if(iniMatrix(&a,3,4)==0){
printf("Error: No alcanza la memoria");
return;
}
if(iniMatrix(&b,4,6)==0){
printf("Error: No alcanza la memoria");
destruyeMatrix(&a);
return;
}
printf("introduzca Matriz A:\n");
leeMatrixDesdeTeclado(&a);
printf("introduzca Matriz B:\n");
leeMatrixDesdeTeclado(&b);
calculaTrazaYDeterminante(&a);
calculaTrazaYDeterminante(&b);
printf("Datos de A y B: %f %f %f
%f\n",a.traza,a.determinante,b.traza,b.determinante);
if(multiplicaMatrices(&a,&b,&c) == 0){
printf(“Error: no se pudo multiplicar”);
destruyeMatrix(&a);
destruyeMatrix(&b);
return;
}
calculaTrazaYDeterminante(&c);
printf("Datos de C %f %f\n",c.traza,c.determinante);
printf("El resultado de la multiplicacion es:\n");
imprimeMatrixAPantalla(&c);
if(escribeArchivo(&c,"unaMat.txt") == 0)
printf("Error no pude escribir en archivo
%s","unMatrix.txt");
igualaMatrix(&b,&d);
hazlaTranspuesta(&d);
printf("La transpuesta de la matriz B es:\n");
imprimeMatrixAPantalla(&d);
//regresar la memoria pedida
destruyeMatrix(&a);
destruyeMatrix(&b);
destruyeMatrix(&c);
destruyeMatrix(&d);
return;
}