Enrere

Mòdul 8

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

 

 

Exercicis

 

 


 

 

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

Escriu un programa que llegeixi un arxiu C/C++ i 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 anidar i no poden estar dins de cadenes de caràcters. Utilitzarem aquesta sintaxis si volem posar un comentari de més d’una línia.

Anomeneu l'arxiu font: m8e1.cc.

   

 

2. Llibres

Escriu un programa anomenat PAIS per a executar des de la línia de comandos que permeti obtenir un nou fitxer LLIBRES.DAT, a partir del fitxer ISBN.DAT.

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

-          ISBN ( 10 dígits )

-          Títol del llibre.

-          Autor.

-          Any. ( 4 posicions )

-          Número de pàgines.

 

Des de la línia de comandos executarem el programa acompanyat d’una cadena que correspondrà a l‘identificador de país o àrea geogràfica. El programa a partir d’aquesta informació llegirà tot el fitxer ISBN.DAT i gravarà 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ó e 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 la d’indentificar un títol d’una determinada editorial. Un cop atribuïda aquesta identificació, aquest número és únic i només podrà ser aplicat a aquesta obra i no podrà ser reutilitzat.

                            ISBN 12 - 34567 - 89 - 0

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

·         ( 34567 ) Identificador de l’ Editor. Aquest segon segment és de longitud variable e 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.cc.

 

 

3. Encriptació d'un correu

 

En Pere vol codificar els correus electrònics que envia als seus amics. Per aquest motiu va escriure una programa C/C++ per codificar-los i un altre per descodificar-los. Un cop comprovat  el seu funcionament , va fer arribar a la resta d’amics el programa executable per poder llegir els missatges que ell els envia .

 

En Pere fa arribar els missatges a traves d’un fitxer anomenat correu.txt i el sèu contingut és un seguit de zeros ( 0 ) i uns ( 1 ). Per llegir el correu, cal agrupar-los de 8 en 8 i transformar aquest nombre binari en un nombre decimal. El sèu corresponen codi ASCII és el caràcter que ens envia. El conjunt de caràcters a utiltzar corresponen als de la taula ASCII ( del 0 al 127 ).

 

Exemple de les tres primeres lletres que  trobaràs en el fitxer de treball correu.txt :

 

 

caràcter

Binari

decimal

E

01000101

69

l

01101100

108

n

01101110

110

 

 

Es demana que escriguis un programa C/C++ que et permeti llegir els correus que s’envien codificats amb aquest mètode i mostri el missatge en el monitor..

 

En l'arxiu correu.txt  tens un missatge de prova. Si el teu programa funciona correctament hauràs de llegir en la pantalla del teu ordinador la següent dita:

 

  El negoci d'en Robert amb les cabres, que en donava dues negres per una de blanca.

Anomeneu l'arxiu font: m8e3.cc.

 

 

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 del exercici 1 del mòdul anterior. Seguiu el mateix procés de la pràctica 8. Recordarem 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ó guardar 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ó recuperar ha permetre treure totes les dades de tots els registres a la pantalla.

Anomeneu l'arxiu font: m8e4.cc.

 

 

Problemes complementaris

Aquests exercicis serveixen per completar aquest mòdul però suposen una ampliació voluntària. No és necessari lliurar aquests exercicis. 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 tal de permetre que els registres es guardin en un arxiu. Podeu triar el nivell de perfeccionament que volgueu fent servir alguna o totes de les següent indicacions:

·         L'opció de nova_entrada ha d'obrir l'arxiu en mode d'afegir dades ("a+"). Aquest mode farà 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 serà fàcil trobar la posició correcta del registre que volem eliminar. L'esborrat total s'aconsegueix copiant l'arxiu en un altre arxiu deixant de copiar els octets corresponents al registre que volem copiar. Després es borra l'arxiu original i es canvia el nom del segon arxiu.

Normalment, en 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 ignora als que estan marcats. Només una segona confirmació elimina definitivament els registres de la base de dades.

·         Incorporar també opcions de cerca, de moment cerca seqüencial, encara que es pot crear opcions d'ordenar els registres per un camp determinat i que hi hagi l'opció de cerques binàries per 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.cc.

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ó ens 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.cc.

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 tal de desencriptar un arxiu només s'ha de tornar a cridar al mateix programa amb un codi igual a 26-codi anterior.

 

Anomeneu l'arxiu font: m8e7.cc.

 8. Dividir un arxiu en trossos de 1.450.000 octets

L'aplicació de la pràctica 6 només ens permet solucionar el problema a mitges. Feu una aplicació que faci les parts que siguin necessàries per tal que 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 d'octets, s'han de fer 4 parts, tres de 1.450.000 i una de 1.006.320 octets. Feu que el nom de l'arxiu original s'introdueixi com un argument de la funció main(). El noms de les parts serà arxiu1.dat, arxiu2.dat,....

Anomeneu l'arxiu font: m8e8.cc.