Enrere

Mòdul 8

Fonaments de programació. Llenguatge C/C++---

 

 

Exercicis

 

 


 

 

1. Treure els comentaris d’un arxiu font C/C++  

Escriviu un programa que llegeixi un arxiu C/C++ i en creï un de nou amb l’extensió .txt on les línies de comentari siguin eliminades.

Quan es posen els símbols //, tot el que hi ha a continuació i fins al final de la línia és ignorat pel compilador.

 

Els caràcters /* inicien un comentari, que acaba amb els caràcters */. Aquests comentaris no es poden imbricar i no poden estar dins de cadenes de caràcters. Utilitzareu aquesta sintaxi si voleu posar un comentari de més d’una línia.

Anomeneu l'arxiu font m8e1.cpp.

   

 

2. Llibres

Escriviu un programa anomenat PAIS per executar des de l'indicador d'ordres que permeti obtenir un nou fitxer LLIBRES.DAT a partir del fitxer ISBN.DAT.

En aquest últim (ISBN.DAT) arxiu, hi ha tot el fons editorial de la biblioteca del centre i conté els camps següents:

-          ISBN (10 dígits)

-          Títol del llibre

-          Autor

-          Any (4 posicions)

-          Nombre de pàgines

 
Des de l'indicador d'ordres executeu el programa acompanyat d’una cadena que correspon a l‘identificador de país o àrea geogràfica. El programa, a partir d’aquesta informació, llegeix tot el fitxer ISBN.DAT i grava en LLIBRES.DAT només aquells llibres que pertanyen a l’anomenat identificador.
Els camps dins ISBN.DAT estan separats per ‘*’ i el final de la informació referida a un llibre finalitza amb els caràcters //. La informació emmagatzemada i referida a un llibre no supera els 100 caràcters.
  Exemple:

               C:> PAIS 84  

ISBN.DAT

970-17-0254-9*C++  CÓMO PROGRAMAR*Deitel, H.M.*1999*1184//

84-481-3173-8*Java 2. Manual de referencia*Herbert Schildt*2001*958//

968-880-798-2*Estructura de datos con C/C++”*Yedidyah Langsam*1996*672//

84-415-0829-1*Visual Basic 6.0*Evangelos Petroutsos*1999*853//  

LLIBRES.DAT

84-481-3173-8*Java 2. Manual de referencia*Herbert Schildt*2001*958//

84-415-0829-1*Visual Basic 6.0*Evangelos Petroutsos*1999*853//  

 

Nota:

El codi ISBN (ISBN - INTERNATIONAL STANDARD BOOK NUMBER) és un sistema internacional de numeració i identificació de títols d’una determinada editorial i aplicat també al programari; està constituït per 10 dígits precedits per la paraula ISBN i dividit en 4 segments. El fonament d’aquest sistema és indentificar un títol d’una determinada editorial. Un cop atribuïda aquesta identificació, aquest número és únic, només es pot aplicar a aquesta obra i no pot ser reutilitzat.

                            ISBN 12 - 34567 - 89 - 0

·         (12) Identificador del país o l'àrea geogràfica. Aquest segment té una longitud que varia segons l’àrea geogràfica o país. Per a Espanya és el 84.

·         (34567) Identificador de l’editor. Aquest segon segment és de longitud variable i identifica a l’editor.

·         (89) Indicador de títol. Aquest segment identifica el títol.

·         (0) Dígit de verificació. L’últim segment de l’ISBN o dígit de control permet la verificació automàtica amb exactitud.

Anomeneu l'arxiu font m8e2.cpp.

 

 

3. Dividir un arxiu en trossos d'1.450.000 octets

L'aplicació de la pràctica 6 només permet solucionar el problema a mitges. Feu una aplicació que faci les parts que siguin necessàries perquè cadascuna de les parts càpiga en un disc de 3 1/4 polzades. Per exemple, si l'arxiu original té una mida de 5.356.320 octets, s'han de fer 4 parts, tres d'1.450.000 i una d'1.006.320 octets. Feu que el nom de l'arxiu original s'introdueixi com un argument de la funció main(). Els noms de les parts seran: arxiu1.dat, arxiu2.dat....

Anomeneu l'arxiu font m8e3.cpp.

 

 

 

4. Guardar i recuperar registres de la base de dades de pel·lícules

Feu un programa que permeti guardar i recuperar en disc les dades de la base de dades de l'exercici 1 del mòdul anterior. Seguiu el mateix procés de la pràctica 8. Recordeu que els registres són de l'estructura definida a continuació:

struct {
   
char titol[50];
   
char director[50];
   
char protagonista[50];
   
int duracio;
} ;

Podeu optar per fer dos programes o un de sol amb un menú que permeti triar l'opció guardar en disc o recuperar del disc. 

A l'opció Guarda s'ha de comprovar si el camp titol introduït per teclat és la cadena buida. En cas afirmatiu, finalitza l'entrada de dades. A l'opció Recupera ha permetre treure totes les dades de tots els registres a la pantalla.

Anomeneu l'arxiu font m8e4.cpp.

 

 

Problemes complementaris

Aquests exercicis serveixen per completar aquest mòdul, però suposen una ampliació voluntària. No és necessari entregar-los. No obstant això, és convenient fer-los i lliurar-los.

 

 

5. Miniagenda telefònica

Podeu perfeccionar la miniagenda telefònica de la pràctica 1 del mòdul 7 per permetre que els registres es guardin en un arxiu. Podeu triar el nivell de perfeccionament que vulgueu fent servir totes o alguna de les indicacions següents:

·         L'opció de nova_entrada ha d'obrir l'arxiu en mode d'afegir dades ("a+"). Aquest mode fa que es creï l'arxiu si no existeix prèviament.

·         En qualsevol moment es pot calcular el nombre de registres emmagatzemats en disc amb la mida de l'arxiu dividit entre la mida de l'estructura.

·         L'opció d'esborrar_entrada ha de permetre triar un número d'entrada. Com que les entrades són correlatives, és fàcil trobar la posició correcta del registre que voleu eliminar. L'esborrament total s'aconsegueix copiant l'arxiu en un altre arxiu i deixant de copiar els octets corresponents al registre que voleu copiar. Després s'esborra l'arxiu original i es canvia el nom del segon arxiu.

Normalment, a les bases de dades reals no s'esborren definitivament els registres, només es marquen com a esborrats, i totes les funcions de cerca i presentació de registres ignoren els que estan marcats. Només una segona confirmació elimina definitivament els registres de la base de dades.

·         Incorpora també opcions de cerca, de moment cerca seqüencial, encara que es poden crear opcions d'ordenar els registres per un camp determinat i que hi hagi l'opció de cerques binàries per a aquest camp. 

Tot això representa moltes millores possibles a la miniagenda telefònica. Feu les que pugueu. Incorporar totes aquestes millores podria representar un dels projectes de final de curs.

Anomeneu l'arxiu font m8e5.cpp.

6. Emmagatzematge de vectors en disc

Feu una aplicació on es declari un vector de tipus double de 100 elements:

double element[100];

L'aplicació ha de permetre introduir aquests números per teclat fins a un màxim de 100. La introducció d'un -1 ha de servir per finalitzar la introducció de dades. El número -1  no s'ha de guardar. Una vegada introduïts tots aquests números, s'han de guardar en disc en una sola operació amb la funció fwrite(). El nombre de l'arxiu on es guardaran tots aquests números també s'introduirà per teclat abans d'introduir qualsevol dada.

Feu també la versió que permet recuperar les dades del disc i imprimir-les a la pantalla.

Anomeneu l'arxiu font m8e6.cpp.

7. Còpia encriptada

A partir dels programes de la pràctica 4 i de la pràctica 3 del mòdul 6, feu un programa que permeti encriptar i desencriptar arxius amb el mètode de Juli Cèsar. El programa ha de ser molt semblant al de la pràctica 4, és a dir, s'ha de passar a la funció main dos arguments que corresponen al nom de l'arxiu que es vol encriptar i al nom de l'arxiu encriptat. Abans de fer l'encriptació, el programa ha de demanar el codi. Aquest codi serà un número entre 0 i 25. Per desencriptar un arxiu, només s'ha de tornar a cridar el mateix programa amb un codi igual a 26 (codi anterior).

 

Anomeneu l'arxiu font m8e7.cpp.