Download PracticaCII

Survey
yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts
no text concepts found
Transcript
Autor:Kepa Bengoetxea
Práctica: Desarrollo de Librerías y Proyectos en C
PRACTICA: Desarrollo de Librerías y Proyectos en C (II)
Objetivos:
-Manejo del Lenguaje C
-Uso de funciones de librería y ficheros cabecera
-Uso de compilador: gcc
-Crear librerías dinámicas y estáticas
-Gestionar los proyectos con make
AVISO:
Sólo los ejercicios 5 y 6 son obligatorios, los demás son optativos.
1.-Programa que preguntando al usuario el nombre de un fichero calcula su tamaño en bytes(nº
de caracteres).
2.-Programa que preguntando al usuario por el nombre de un fichero escribe en este el
abecedario tanto en minúsculas como en mayúsculas, cada uno en una fila.
3.-Programa que preguntándole al usuario por el nombre de un fichero y por el número bytes
por el que quieres partir dicho fichero. Parta el fichero especificado en ficheros de tantos bytes de
tamaño como indique el número leído , salvo quizás el último de ellos. Para nombrar los ficheros a
generar, utilizar la siguiente nomenclatura: @@@@.000,@@@@.001,@@@@.002 ... Realizar
primeramente un “gen_nom.h” con las declaraciones de las siguientes funciones y “gen_nom.c”con
la definición:
a. Generar_Primer_Nombre será un procedimiento al que se le pasa un array de
caracteres como parámetro por referencia. Este procedimiento introduce el nombre
de fichero @@@@.000 en el array que se le pasa por referencia (utiliza strcpy)
b. Una función Generar_Siguiente_Nombre que pasándole un array de caracteres por
refenrencia donde estará el último nombre de fichero generado, ej: @@@@.073 .
Se deberá incrementar en 1 la extensión devolviendo @@@@.074 en el array
pasado por referencia. Además devolverá un valor 0 si todo ha ido correctamente y
en caso de que el nombre pasado por referencia sea @@@@.999 devolverá un
valor –1 (incorrecto).Nota: Utilizar la función atoi,sprintf,strcpy,strcat,strlen,...
4.-Volver a realizar el programa organizándolo de la siguiente manera:
a.-Crear una librería estática “libgeneral.a” que contenga las funciones de gen_nom.c .Una vez
creada la librería utilizarla para crear el ejecutable partir que ahora la llamaremos “partirestatica” .
b.-Cree una librería dinámica con las funciones de gen_nom.c y cree un ejecutable que se
llamará partirdinamic que la utilice.
c.-Compilar utilizando el make sin utilizar librerías.
5.-Dado los siguientes módulos en C
En /home/kepa/include/ tenemos los siguientes .h:
aritmetica.h:
#ifndef _ARITMETICA_H
#define _ARITMETICA_H
int producto (int a, int b);
int resta (int a, int b);
Autor:Kepa Bengoetxea
Práctica: Desarrollo de Librerías y Proyectos en C
int suma (int a, int b);
#endif
constante.h
#ifndef _CONSTANTE_H
#define _CONSTANTE_H
#define PI 3.1415
#endif
area.h
#ifndef _AREA_H
#define _AREA_H
int rectangulo (int x, int y);
float circulo (int x);
#endif
En /home/kepa/fuentes/ tenemos
aritmetica.c:
int suma (int a, int b) { return a+b; }
int resta (int a, int b) { return a-b; }
int producto (int a, int b) {return a*b; }
area.c:
int rectangulo (int x,int y){return producto(x,y);}
float circulo (int x){return (PI * producto(x,x));}
a) Incluye todos los #include en los ficheros aritmética y área
b) Realizar una aplicación llamado “examen.c” que pida 2 números enteros por teclado y nos
muestre por pantalla la suma de los dos números y el área del rectángulo, utilizando los módulos de
arriba (suponiendo que estos módulos no están en ninguna librería)
c) Compila cada módulo y finalmente la aplicación utilizando dichos módulos.
d) Introduce área y aritmética en una librería dinámica que se llamará libdinamica y vuelve a
compilar y ejecutar examen esta vez utilizando los módulos de la librería. Guarda la librería en
/home/kepa/librerias.
e) Idem que c) pero utilizando el make
6.-Dado el siguiente programa principal incompleto llamado “numaesfich.c”
int main()
{
char nombre[80],c;
FILE *fp;
int contador=0;
printf ("¿De qué fichero deseas conocer el número de aes?");
scanf("%s",nombre);
fp=fopen(nombre,"r");
if (fp==NULL)
{
Autor:Kepa Bengoetxea
Práctica: Desarrollo de Librerías y Proyectos en C
printf("No se puede abrir el fichero %s \n",nombre);
return -1;
}
else
{
contador=fNumCaracFich('a',fp);
fclose(fp);
printf("El número de a-s es de %d",contador);
}
return 0;
}
a)Crea la función “fNumCaracFich” que pasándole el carácter a buscar y el descriptor de
fichero, nos devuelve el número de veces que aparece el carácter en dicho fichero de texto.
Introducela en un módulo, y introduce dicho módulo en una librería dinámica. El módulo se llamará
“general” y la librería “libgeneral”.
b) Crea el ejecutable principal usando la librería dinámica. Completa el programa principal
“numaesfich.c” para que todo funcione correctamente.