Profesor: Alonso Ramírez Manzanares               

               

 

 

alram@cimat.mx

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

      Partes de la computadora

      El Hardware

       Archivo de Comandos MS-DOS en .doc 

       Convertir de Decimal a Binario

         Java 2 Runtime

         Programa Karel

        Manual para Aprender Karel

        Winzip 8.0

        Curso de Programación en C

        Tutorial de Apuntadores

        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:

         Programa Karel

   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

Archivo Word

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;

}