Sunteți pe pagina 1din 13

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P01
-------------------------------------------------------------------------------------------------------------------------------LINUX y Editor Vi
Ejercicios:
01. Creacin de un fichero con el editor vi:
- Activar el terminal de comandos de Linux con el icono existente en la pantalla principal o con
el men "Aplicaciones/Accesorios/Terminal" (el smbolo $ aparecer).
- Activar el editor "vi" para crear un fichero de texto de nombre cualquiera y contenido
cualquiera, escribiendo el comando de Linux "$vi TuNombreFichero".
02. Comandos ms habituales del editor vi:
Practicar las rdenes mas usuales de vi, pulsando inicialmente ESC para entrar en el modo
comando:
- Aadir texto despus de la posicin del cursor (ESC a).
- Aadir texto al final de la lnea actual (ESC A).
- Insertar texto antes de la posicin del cursor (ESC i).
- Insertar una lnea en blanco debajo de la lnea actual (ESC o).
- Insertar una lnea en blanco encima de la lnea actual (ESC O).
- Eliminar el carcter actual (ESC x).
- Eliminar el carcter previo al actual (ESC X).
- Eliminar la palabra actual (ESC dw).
- Eliminar la lnea actual (ESC dd).
- Deshacer la ltima operacin erronea (ESC u).
- Repetir la ltima operacin (ESC.).
Guardar el fichero en el disco (ESC :x <ENTER>, o bien ESC :wq <ENTER>)
03. Ordenes bsicas del Sistema Operativo LINUX: ls, cat, cp, rm, mv.
- Comprobar que el fichero de texto del apartado anterior ha quedado grabado en el disco
mediante el comando de visualizacin de directorios de Linux: $ls.
- Visualizar el contenido del fichero mediante el comando de Linux: $cat TuNombreFichero.
- Modificar el nombre del fichero para llamarlo basura1, con el siguiente comando de Linux:
$mv TuNombreFichero basura1. Confirmar su existencia con: $ls.
- Copiar el fichero basura1 a otro fichero basura2: $cp basura1 basura2. Confirmar con
$ls.
- Eliminar los dos ficheros basura mediante el comando de Linux: $rm basura*. Confirmar.
04. Compilador de lenguaje C en UNIX / LINUX: comando gcc:
- Mediante el editor vi escribir un programa llamado nombre.c, que escriba centrado en
pantalla tu nombre. Llamar luego al compilador mediante la orden: gcc nombre.c
- Observar mediante el comando ls que el archivo ejecutable final que aparece en el disco se
llama por defecto a.out.
- Ejecutar el fichero con la orden a.out, y despus ./a.out. Cul es la forma correcta?
- Confirme que para obtener el fichero ejecutable con otro_nombre, la orden es:
gcc nombre.c -o otro_nombre
- Elimine el fichero inicial a.out con el comando de Linux: $rm a.out

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
1

LABORATORIO DE PROGRAMACION

PRACTICAS

05. Redireccin de la entrada/salida estandar (<,>, >>):


- Construir un programa ejecutable llamado suma.exe que recibe por teclado (scanf) dos
numeros enteros, calcula la suma de ellos y la muestra en pantalla. Ejecutarlo y comprobar su
funcionamiento.
- Crear con el editor vi un archivo de texto llamado datos.txt que contenga los dos nmeros
enteros de entrada, por ejemplo: 27 10
- Ejecute la orden: ./suma.exe<datos.txt que se obtiene?
- Si se ejecuta la orden: ./suma.exe <datos.txt>suma.txt que se obtiene?
- Si despus se ejecuta la orden: ./suma.exe <datos.txt>>suma.txt
que se obtiene?
06. Crear un programa que mueva un nombre de alumno a travs de la pantalla, de arriba
abajo y de lado a lado, utilizando el editor de textos vi. El programa comienza mostrando el
nombre en la esquina superior izquierda de la pantalla y lo desplaza lentamente por ella de
forma continua rebotando en todos los bordes. Para parar la ejecucin del programa, pulsar
CTRL+C y Enter.
Se adjunta el cdigo fuente de este programa. Modificar los valores de las variables para ver el
efecto en la pantalla (incrementar la velocidad, anchura o altura del movimiento). Ajustarlos
para que se produzca un rebote limpio (sin patinar) en los bordes inferior (variable altura) y
derecho (variable anchura). Maximizar el tamao de la ventana del Terminal, para ver mejor
los resultados.
#include <stdio.h>
void espacios(int n);
main()
{
int i, lin=0, signolin=1, col=0, signocol=1;
int velocidad=5;
//ajustar la velocidad de movimiento
int altura=48, anchura=140;
//ajustar al tamao de la pantalla
double x;
while(1)
{
system("clear");

//bucle infinito
//borrar pantalla

for(i=0; i<lin; i++) printf("\n");

//imprimir lineas en blanco superiores

espacios(col); printf("+-------+\n");
espacios(col); printf("I JAIME I\n");
espacios(col); printf("+-------+\n");
for(x=0; x < 5*10e6/velocidad; x++);

//imprimir con blancos a la izqda.

//bucle de retardo

lin+=signolin;
//cambiar n de lineas en blanco superiores
if (lin>altura || lin==0)
//vigilar limite inferior y superior
signolin = -signolin;
col+=signocol;
//cambiar n de espacios a la izquierda
if (col>anchura || col==0)
//vigilar limite inferior y superior
signocol = -signocol;
}
}
void espacios(int n)
{
int i;
for(i=0; i<n; i++)
printf(" ")
}

//imprime n espacios en blanco

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
2

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P02
-------------------------------------------------------------------------------------------------------------------------------Punteros
Ejercicios:
01. Escribir un programa que:
01.1. Declare tres variables de tipo int, y una variable de tipo float.
01.2. Escriba la direccin de memoria asignada a cada una de ellas, usando:
printf ("%lx\n", (long)direccin), para imprimir una direccin de memoria.
02. Escribir un programa que:
02.1. Declare dos variables enteras y las inicialice a un valor.
02.2. Declare un puntero a entero.
02.3. Imprima la direccin de memoria de las variables enteras.
02.4. Asigne a la variable puntero la direccin de la primera variable.
02.5. Imprima el contenido del dato apuntado por el puntero.
02.6. Asigne a la variable puntero la direccin de la segunda variable entera.
02.7. Imprima el contenido del dato apuntado por el puntero.
03. Comprobar con un programa que, si se declara una variable junto con un puntero a esa
variable, inicializado para que la apunte, se puede leer dicha variable desde el teclado con
la funcin scanf() poniendo como argumento el puntero sin el operador "&".
04. Escribir un programa que:
04.1. Declare un array de 5 enteros y un puntero que apunte a su primer elemento..
04.2. Compruebe que la direccin de comienzo del array (la de su primer elemento)
coincide con el nombre del array.
05. Escribir un programa que:
05.1. Declare un array de 5 enteros.
05.2. Compruebe que estos enteros ocupan 20 bytes sucesivos en memoria (los datos int
miden 4 bytes), haciendo uso del operador sizeof y luego escribiendo sus
direcciones.
05.3. Declare dos punteros a entero y les asigne las direcciones del primer y ltimo
elemento del array.
05.4. Imprima la diferencia entre ambos punteros.
05.5. Incremente en una unidad el puntero que apunta al primer elemento, y compruebe
que la direccin de memoria apuntada se ha incrementado en cuatro unidades (por
ser puntero a int).

NOTA:
Para este ejercicio y los sucesivos, utilice el editor de texto gedit en lugar del vi (comando
$gedit prog02.c desde la ventana de Terminal de comandos).

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
3

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P03
-------------------------------------------------------------------------------------------------------------------------------Punteros y Arrays
Ejercicios:
01. Construir un array llamado edad de elementos que se introducen por teclado. Pedir por
teclado inicialmente el nmero de elementos del array (20 mximo).
02. Inicializar un puntero p para que apunte al primer elemento del array edad.
03. Imprimir el array edad en pantalla usando el puntero p.
04. Encontrar el mayor y el menor elemento del array usando punteros, indicando su valor y
su posicin dentro del array.
05. Calcular la media aritmetica de los elementos del array usando punteros.
06. Calcular la desviacin tpica de los elementos del array mediante la frmula:

NP 1
2
( x i xmedia )
i0
NP
donde xmedia es la media aritmtica.
Nota 1: La raz cuadrada requiere la funcin matemtica sqrt( ). El compilador gcc necesita la
opcion -lm para cargar la librera matematica:
gcc p03.c -lm -o p03.exe
Nota 2: Cuando se usan variables float, nuestro compilador necesita, para que sea cargado el
soporte de coma flotante, que aparezca inicializada una variable con un valor float (0.0, por
ejemplo):
float variable_sin_uso=0.0;

Cadenas de Caracteres
Ejercicio:
01. Leer desde el teclado una palabra o frase y verificar si es palndromo, es decir, si se lee lo
mismo de izquierda a derecha que de derecha a izquierda, suprimiendo los espacios en blanco
y sin tener en cuenta la diferencia maysculas/minsculas.
Ejemplos de palndromos:
- Somos
- Amor a Roma
- Dbale arroz a la zorra el abad

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
4

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P04
-------------------------------------------------------------------------------------------------------------------------------Punteros y Estructuras
Ejercicios:
01. Crear un array de hasta 10 estructuras con 2 campos:
alumno (nombre de hasta 20 caracteres)
nota
(numero real)
Por ejemplo, se puede usar:
typedef struct
{ unsigned char alumno[21];
float nota;
} fic;
y referir todo al nuevo tipo de dato fic.
02. Crear un puntero a este tipo de estructuras e inicializarlo para que apunte al primer
elemento del array.
03. Introducir los contenidos de dichas estructuras por el teclado, usando el puntero.
04. Presentar una lista por pantalla con los nombres y notas de los aprobados, usando el
puntero.
05. Calcular la nota mxima y el alumno a quien corresponde.
06. Calcular la nota media.
07. Presentar el array ordenado alfabticamente.

Un posible algoritmo de ordenacin creciente de los NMAX elementos de un array, segn el


campo ITEM es:
FOR (i=0; i<NMAX-1; i++)
FOR (j=i+1; j<NMAX; j++)
IF ( ITEM[i]>ITEM[j] )
Intercambiar los dos elementos: ITEM[i] y ITEM[j];

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
5

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P05
-------------------------------------------------------------------------------------------------------------------------------Funciones
Ejercicios:
01. Crear una estructura con dos campos o elementos:
alumno (de tipo unsigned char de hasta 20 caracteres)
nota
(de tipo float)
02. Escribir un programa que, usando la estructura del apartado anterior, cree un array de 10
estructuras y tambien un array de 10 punteros a dichas estructuras. Apuntar cada
elemento del array de punteros a cada elemento del array de estructuras.
03. Aadir y las sentencias necasarias para permitir la introduccin de fichas (registros) hasta
que se introduzca la marca de fin de archivo ^Z (que es cuando gets(cadena)==NULL).
04. Crear la funcin "ordenar_array()" que ordene el array de punteros anterior de forma
alfabtica con respecto al campo "nombre", y sin acudir a la reordenacin del array de
estructuras, con el prototipo:
void ordenar_array(fic **,int);
05. Crear la funcin "presentar_estruct()" que presente las estructuras segn estn escritas
en la memoria, con el prototipo: void presentar_estruct(fic *,int);
06. Crear la funcin "presentar_punter()" que presente las estructuras segn el orden del
array de punteros por el que estn apuntadas, con el prototipo:
void presentar_punter(fic **,int);
07. Aadir al programa principal anterior las sentencias necesarias para que se imprima por
pantalla el contenido de las fichas segn los criterios anteriores.
08. Crear una funcin "media()", que calcule la nota media, con el prototipo:
float media(fic **,int);
09. Aadir al programa anterior las sentencias necesarias para que se imprima la nota media.

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
6

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P06
-------------------------------------------------------------------------------------------------------------------------------Argumentos en la lnea de rdenes
Ejercicios:
01. Escribir un programa de calculo aritmtico, que para ejecutarse, necesite tres argumentos
de entrada en la lnea de rdenes del sistema operativo, separados por espacios en blanco.
Estos argumentos sern del siguiente tipo:
1 Un nmero entero.
2 Uno de los operadores:

+ (suma)
- (resta)
x, X (producto)
/, \ (cociente)
% (resto de la division entera)

3 Otro nmero entero.


El programa debe mostrar en pantalla el resultado de la operacin aritmtica introducida
mediante los argumentos de entrada.
Ejemplo: tecleando:
el programa debe mostrar:

nombreprog 5 x 10
5 x 10 = 50

Ejemplo: tecleando:
el programa debe mostrar:

nombreprog 5 j 10
Para usar este programa debe escribir:
nombreprog numero operacion numero

Este programa debe hacer uso de la funcin estandar atoi() que convierte una cadena
numrica de caracteres a su nmero entero equivalente.

02. Escribir un programa que ordene un array en orden ascendente o descendente, segun
sea el argumento en la linea de ordenes (a/d).
Los valores del array los pide el programa.

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
7

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P07
-------------------------------------------------------------------------------------------------------------------------------Ficheros 1
Ejercicios:
01. Escribir un programa que:
01.1 Pida por teclado un nombre de fichero de texto, lo intente abrir, y si no lo consigue (por
no existir), lo vuelva a pedir indefinidamente hasta que le demos un nombre vlido.
01.2. Cree un nuevo fichero, cuyo nombre est formado por la concatenacin de la
palabra "_Z" mas los TRES primeros caracteres del nombre que hemos introducido, y
cuyo contenido sea igual al del fichero original, pero sustituyendo todas las letras minusculas
por maysculas, y ademas se aadirn al final dos lneas en blanco, seguidas de las lneas:
ESCUELA UNIVERSITARIA POLITECNICA.
LABORATORIO DE PROGRAMACION.

NOTA:
Para leer de un fichero manejado por un puntero pufr a FILE, se puede usar:
LEER UNA VEZ;
while(!feof(pufr)&&!ferror(pufr))
{
TRABAJAR CON LO LEIDO;
LEER UNA VEZ;
}
LEER UNA VEZ significa usar la funcin de lectura adecuada dependiendo del tipo de datos:
car1=fgetc(pufr);
//
o
fgets(cadena_leer,_LONGITUD,pufr);
//
o
fread(&ESTRUCTURA_LEER,sizeof(ESTRUCTURA_LEER),1,pufr);

Para escribir en un fichero manejado por un puntero pufw a FILE, se puede usar:
fputc(car1,pufw);
//
o
fputs(cadena_escribir,pufw);
//
o
fwrite(&ESTRUCTURA_ESCRIBIR,sizeof(ESTRUCTURA_ESCRIBIR),1,pufw);

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
8

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P08
-------------------------------------------------------------------------------------------------------------------------------Ficheros 2
Ejercicios:
Escribir un programa que gestione una base de datos formada por registros con la siguiente
estructura:
struct ficha
{
unsigned long clave;
unsigned char nombre[20];
float nota;
};
La base de datos est en un fichero del disco. Los registros se leen asignando memoria
dinmicamente, manejando esas direcciones por medio de un array de punteros.
El programa dispondr de un men con el que se puedan realizar las siguientes operaciones:
A
B
C
L
Z

aadir un registro.
borrar un registro.
ordenar la base segun la clave.
listar la base.
salir del programa.

Si se termina la practica con el contenido anterior, se puede ampliar el menu con las
siguientes opciones:
I imprimir el listado en un fichero.
M modificar un registro.
N ordenar la base segun el nombre.

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
9

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P09
-------------------------------------------------------------------------------------------------------------------------------Ficheros 3
Ejercicios:
Haciendo referencia al programa que gestiona una base de datos (que est en un fichero de
disco) formada por registros con la siguiente estructura:
struct ficha
{
unsigned long clave;
unsigned char nombre[20];
float nota;
};
Se trata de modificar las opciones del men actual, de modo que las operaciones se realicen
en el propio fichero de datos del disco.
Las modificaciones a efectuar son:
B
C
I
L
M
N
Z

borrar un registro.
ordenar la base segun la clave.
imprimir el listado en un fichero.
listar la base.
modificar un registro.
ordenar la base segun el nombre.
salir del programa.

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
10

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P10
-------------------------------------------------------------------------------------------------------------------------------Listas enlazadas
Ejercicios:
Tomando como referencia la estructura:
typedef struct lista l_e;
struct lista
{
int clave;
l_e *psig;
};
01. Escribir un programa que maneje una lista enlazada con las siguientes opciones para los
registros:
Aadir Borrar Listar Modificar Ordenar Salir
02. Escribir un programa que maneje una lista enlazada ordenada con las siguientes
opciones para los registros:
Aadir Borrar Listar Modificar Salir
03. Escribir un programa que maneje una lista enlazada ordenada y grabe el fichero final en
disco, con las siguientes opciones para los registros:
Aadir Borrar Listar Modificar Salir

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
11

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P11
-------------------------------------------------------------------------------------------------------------------------------Pilas y Colas
Ejercicios:
Tomando como referencia la estructura:
typedef struct lista l_e;
struct lista
{
int clave;
l_e *psig;
};
01. Escribir un programa que maneje una pila con las siguientes opciones para los registros:
Listar Meter Sacar Salir
02. Escribir un programa que maneje una cola con las siguientes opciones para los registros:
Listar Meter Sacar Salir

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
12

LABORATORIO DE PROGRAMACION

PRACTICAS

-------------------------------------------------------------------------------------------------------------------------------PRACTICA P12
-------------------------------------------------------------------------------------------------------------------------------Arboles
Ejercicios:
01. Tomando como referencia la estructura:
struct nodo
{
int clave;
struct nodo *izdo;
struct nodo *dcho;
};
Escribir un programa que maneje un arbol con las siguientes opciones:
Aadir Inorden Postorden Preorden Salir
02. Tomando como referencia la estructura:
struct nodo
{
unsigned char clave[40];
struct nodo *izdo;
struct nodo *dcho;
};
Escribir un programa que maneje un arbol con las siguientes opciones:
Aadir Inorden Postorden Preorden Salir

___________________________________________________________________________________________________
LABORATORIO DE PROGRAMACION - PRACTICAS
13

S-ar putea să vă placă și