Sesiones de laboratorio
ver: paper
ver: demos hechos en clase 2005
ver: Página de comandos Linux
                                              
Sesión 1.

 Ambientación en comandos  Linux:
- regularizar situación de usuario del sistema Linux en red.
- Probar que el teclado este configurado adecuadamente.
- Abrir una ventana de comandos (shell).
- ejecutar id, muestra tu numero de usuario.
- ejecutar pwd, para ver el nombre del directorio (carpeta).
- ejecutar ls y ls -l, muestra los archivos del directorio.
- ejecutar ps, muestra los programas (procesos) que estan corriendo.
- ejecutar md nombreNuevoDirectorio, crea un directorio dentro del actual.
- ejecutar cd nombreNuevoDirectorio, pwd y ls
- ejecutar un editor de texto simple. Pueden ser: vi, gedit, kedit, etc.
- editar un archivo dentro de nombreNuevoDirectorio y ejecutar cat archivo y more archivo.
- otros comandos: rm archivo, rm -r directorio, mv archivo1 archivo2, cp archivo1 archivo2
- ingresar con navegador a: http://atenea.inf.udec.cl/~jlopez y hacer el problema 100.
- practicar en la casa  y/o en el laboratorio antes de la proxima sesion.

Se recomienda instalar Linux en computador en su casa o bién practicar el los laboratorios del DIICC.

Sesión 2.

 Crear un programa ejecutable a partir de:
- archivo fuente, a.c, fuente generar el archivos ejecutable:
         gcc -o a a.c
   
- que las funciones se llamen mutuamente
- que la llamada a funcion este fuera de una funcion
- que el cuerpo (declaracion de una funcion) este dentro de otra
- que una funcion imprima hola 10 veces seguida
- idem anterior pero 600 veces
- que una funcion se llame a si misma 


Sesión 3.
scanf: es una función que recibe lee datos desde teclado y los almacena en las variables de acuerdo a formato, ejemplo:
                            scanf("%i  %f  %c",&entero, &flotante, &caracter);
Despues de esta llamada a scanf, las variables int entero, float real y char caracter tendrán almacenado los valores ingresados por teclado.
Notar que se usa & antes de cada variable (explicación en la materia de punteros).

1. Hacer un programa que  imprima en pantalla el resultado de la suma de 10  numeros enteros ingresados por teclado.
2. Resolver  los problemas 101, 102, 110 y 111 en la plataforma http://atenea.inf.udec.cl/~jlopez/CENTRO_PHP
Optativos:
3. Imprimir en formatos decimales y hexadecimales de 'a' y 'z' y de los dígitos numéricos desde '0' al '9'.
4. Imprimir el resto de la division entera (modulo) de 10/4, 20/4, 30/4.
5. A la variable entera cuyo contenido es 1234567,  7 veces:  (obtener su módulo de 10, imprimirlo y dividir la el contenido de la variable por 10).
6. Hacer lo mismo de la 7 pero almacenando los dígitos del entero en 7 variables enteras.
7. Hacer un programa que calcule e imprima el promedio de 10 numeros de punto flotante ingresados por teclado.
8. Hacer un programa que sume los k primeros enteros. el k se entra por teclado.
9.  Hacer un programa que reconozca cadenas impares de 1's. recibidos en una cadena (string). El alfabeto de entrada es: {0, 1}

Sesión 4.  Sistema de Entrada/salida gráfica simple              

    a) bajar el archivo en formato tar: MiGraficoIO.tar (ANSI C)  ver: manual de funciones gráficas.
    b) descomprimirlo: tar -xvf MiGraficoIO.tar
       Se crean los Directorios:
                     MiGraficoIO   |--- lib: archivos de librería (.a)  (no modificar)
                                             
|---  include: archivos de include  (.h) (no modificar)
                                              |--- manual: los manuales en html. (no modificar)
                                              |--- archivos de demostración básicos y los nuevos que desees crear.
                                             
|--- CC: comando para compilar en el ambiente gráfico.
                                        
   c) Cambiarse de directorio: cd MiGraficoIO
   d) Compilar  los archivos con extensión .c : CC  x  x.c
       los archivos .c y la compilación se deben realizar en le directorio MiGraficoIO para que compile.
   e) Construir un programa con una función que tenga el prototipo: void rectangulo(int x, int y, int dx ,int dy);
        la función, repetidamente, debe leer de teclado los valores de x, y, dx , dy. Debe llamar a la función
        rectangulo(...) la que debe dibujar el rectangulo en color rojo. (a partir de 2_rectangulo.c)
   f) La función, en un ciclo iterativo, debe dibujar una fila de 10 rectangulos hacia la derecha separados por 10 pixeles. (a partir de 2_rectangulo.c). La altura de los rectangulos debe estar en un arreglo global de 10 enteros.

Si quieres profundizar en modo gráfico ver: manual de xlib (X11 avanzado)

Sesión 5. Depuración de programas. ver pagina del ayudante.

Sesión 6.  Arreglos y estructuras.
   a) bajar el archivo en formato tar: MiGraficoIO.tar
   b) Crear una estructura que contenga las coordenadas x e y de la esquina superior izquierda de un rectangulo y el ancho y el alto.
       Crear un arreglo de estructuras e inicilizarlas y una función que dibuje los rectangulos con el ancho y el alto.
   c) Lo mismo que en b) pero que la función dibuje una línea desde el centro del lado derecho de un rectangulo al centro del lado izquierdo de su sucesor.
   d) Dado un vector de enteros, hacer que se dibuje una línea horizontal de largo proporcional por cada elemento. Las líneas deben estar separadas horizontalmente en forma equidistante.
  e) (DESAFIO). Hacer que el programa detecte que cuadrados se intersectan con otros.
   

Sesión 7. Listas encadenadas.
a) Bajar el archivo en formato tar: MiGraficoIO.tar
b) Ejecutar el comando: man malloc para ver su prototipo. malloc es un función que asigna memoria global al programa durante la ejecución, esto se conoce como "memoria dinámica". la función free devuelve la memoria asignada por malloc.
c) Hacer un programa con un puntero global a una estructura y luego vaya solicitando memoria mediante malloc. El programa debe llamar a una función que dibuja una figura (nodo) a partir de la estructura (ver figura 1 más abajo).
d) A partir del programa anterior, hacer que se lean desde teclado los datos para varias instancias de  nodo, solicitando la memoria correspondiente. Se debe usar estructuras con campo puntero a próximo nodo, para "encadenarlos" o "enlazarlos" como en la figura 1. El último nodo ingresado debe quedar apuntado por el puntero p. El programa debe redibujar todos los nodos cada vez que se incorpora uno nuevo. Si un puntero debe a apuntar a la "nada" se le asigna la constante NULL que se encuentra definida en <stdio.h> 
e) Dibujar una línea desde cada figura a la siguiente. Se debe ver parecido a la figura 1.
f) Desafio 1: que al hacer un click del mouse sobre la figura de un nodo, se desplieguen las coordenadas en algún punto de la ventana.
g) Desafío 2: que al hacer un click del mouse se agregue un nodo en las coordenadas del cursor del mouse.

 
  p
__\__ __     
__ __ __     __ __ __
|__|__|__|--->
|__|__|__|--->|__|__|__|--->NULL
        
figura 1 lista simple
La estructura debe ser:
struct nodo {
    int x,y;
    struct nodo *prox
}
  
p: puntero al último nodo (figura) ingresado.
NULL: constante que representa "nada"


Sesión 8. Estructuras: listas doblemente encadenadas.
 
         izq                          der
__\__ __    
__ __ __   __\__ __
|  |  |  |--->|  | | |--->|  |  |  |--->NULL
NULL
<---|__|__|__|<---|__|__|__|<---|__|__|__|

figura 2 lista doblemente encadenada
La estructura debe ser:
struct nodo {
    int x,y;
    struct nodo *izq;
    struct nodo *der;
}
  
 La lista está apuntada por struct nodo *izq, *der.

a) Usando MiGraficoIO.tar: modificar las funciones de insertar nodo, eliminar nodo dibujar lista.
b) Crear un arreglo de punteros struct nodo *izq[..], *der[..]. Se debe utilzar un índice para operar con una lista específica. El índice se cambia con las teclas <-- y --> . Las funciones deben manejar la lista que el índice indique.
c)  Crear la función que elimina el nodo que es apuntado por el cursor (botón del centro)
d)  Crear una función que agrega un nodo después del nodo apuntado por el cursor (botón derecho) y antes (botón izquierdo)

Sesión 9. Archivos.1
a) Usando los resultados de la sesión 7 u 8, agregar la capacidad de grabar una lista en un archivo mediante la tecla G. (el nombre debe ser ingresado como argumento)
b) A partir de a) agregar también la capacidad de leer la lista desde el archivo. (el nombre debe ser ingresado como argumento)

Sesión 10. Archivos 2.
Usando la estructura:
struct alumno{
    char nombre[64];
    int promedio;
}

a) Hacer un programa que cada vez que se ejecuta, agregue los datos de un alumno a un archivo binario. Los datos se pasan desde argumentos de la línea de comando (argv) al final de un archivo.
b) Hacer un programa que imprime los datos de los alumnos que se encuentran almacenados en el archivo.
c) Hacer un programa que imprime los nombres de los alumnos que tienen promedio mayor o igual que 4 (cuatro).
d) Hacer un programa que imprime la nota promedio de un alumno cuyo nombre se pasa como argumento.
e) Hacer un programa que genera un archivo con alumnos aprobados y otro archivo de alumnos reprobados a partir del archivo original.


 

  (>///<)
( '.' )
("")("")
  (::)(::)