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.
- 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; }
|
L
a 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.