C/Exercicios:Traballar con ficheiros

< C

Exercicio 1 editar

Realizar un programa que lea un ficheiro cunha lista de palabras. Ditas palabras estarán separadas no ficheiro por saltos de liña. O programa imprimirá as palabras en pantalla. O nome ou especificación do ficheiro recibirase como argumento na liña de ordes.

Recursos útiles:
  Solución.

Exercicio 2 editar

Realizar un programa que lea un ficheiro cunha lista de palabras ─separadas no ficheiro por saltos de liña─ e cree un novo ficheiro co mesmo contido, pero cun prefixo en cada liña (→ <liña orixinal>). As rutas dos ficheiros de entrada e saída recibiranse como argumento na liña de ordes.

Recursos útiles:
  Solución.

Exercicio 3 editar

Realizar un programa que lea un ficheiro cunha lista de palabras ─separadas no ficheiro por saltos de liña─ e cree un novo ficheiro coas iniciais desas palabras separadas espazos en branco (<inicial x> <inicial y>). As rutas dos ficheiros de entrada e saída recibiranse como argumento na liña de ordes.

Recursos útiles:
  Solución.

Exercicio 4 editar

Realizar un programa que reciba do usuario os datos do “5 inicial” dun equipo para un partido de fútbol sala, os garde nun ficheiro binario cuxa ruta se especifique como argumento, e a continuación pregunte ao usuario se quere revisalos. Se o usuario contesta que si (s), o programa lista os datos en pantalla léndoos do ficheiro especificado.

De cada un dos 5 xogadores quere saberse o nome e apelidos (cadea de 63 caracteres), o alcume (cadea de 31 caracteres), a idade (unsigned short int), o número da camiseta (unsigned short int) e a súa media de goles por partido (float).

Recursos útiles:
  Solución.

Exercicio 5 editar

Codificar unha función ─“funcion1”─ que reciba un ficheiro de texto aberto que conteña unha serie de nomes separados por saltos de liña (en cada liña do ficheiro de texto hai un nome). A función deberá obter unha matriz dinámica coa lista de nomes lidos.

Os nomes que aparezan máis dunha vez no ficheiro só poderán aparecer unha vez na matriz. Para facer isto, funcion1 chamará a unha segunda función ─“funcion2”─ que buscará cada novo nome na matriz dinámica. Así, funcion2 devolverá -1 se non atopa o nome na matriz, en cuxo caso funcion1 poderá engadilo á matriz, ou devolverá a posición da matriz na que xa exista o nome en caso contrario.

Escribirase unha terceira función ─“funcion3”─ que reciba a matriz dinámica coa lista de nomes distintos, e garde os nomes xunto cunha idade asignada a cada un ─pediráselle ao usuario durante a execución da función─ nun ficheiro binario. A función recibe o nome do ficheiro, e o crea ─ou substitúe en caso de que existise previamente─ ela mesma.

Recursos útiles:
  Solución.

Exercicio 6 editar

Codificarase un programa que traballará cun ficheiro en disco que conterá os datos dos alumnos dun centro escolar. O ficheiro conterá en formato binarios un rexistro coa seguinte estrutura de datos por cada alumno:

struct
{
  char codigo[7]; // O código do alumno, de 6 caracteres, máis o carácter '\0'.
  char nome[66];
  unsigned short int idade;
  float notas[3];
  float notafinal; // Calcularase automaticamente facendo a media das tres “notas”.
  signed short int marca; // Esta variable valerá 0 cando o rexistro sexa lixo, e dicir, cando non se corresponda cun alumno do centro.
};

O programa abrirá o ficheiro cos datos dos alumnos, cuxa ruta se lle fornecerá ao programa como argumento na liña de ordes. En caso de que o usuario non introduza o nome do ficheiro na chamada, este pediráselle por teclado. En caso de que o ficheiro fornecido na chamada á función non exista, preguntaráselle ao usuario se quere crear un ficheiro baleiro na ruta indicada para posteriormente poder introducir ou engadir novos rexistros.

A continuación, o programa imprimirá en pantalla o seguinte menú:

  1. Engadir un rexistro.
  2. Eliminar un rexistro.
  3. Consultar un rexistro en pantalla.
  4. Saír (por defecto).

A opción 1, «Engadir un rexistro», chamará a unha función co seguinte prototipo:

void <nome da función>(FILE * ficheiro, signed long int rexistro);

Esta función permitirá introducir datos no rexistro número rexistro do ficheiro, e en caso de que este non sexa lixo ─é dicir, en caso de que marca non sexa 0─ imprimirá os datos actuais e preguntaralle ao usuario se está seguro de que quere substituír os datos con novos datos. A continuación solicitaralle ao usuario os novos datos, e substituirá os datos actuais do rexistro con eles.

A opción 2, «Eliminar un rexistro», chamará a unha función co seguinte prototipo:

void <nome da función>(FILE * ficheiro, signed long int rexistro);

En caso de que o rexistro número rexistro do ficheiro teña a 0 o valor de marca ─é dicir, que sexa lixo─, a función indicaralle ao usuario que o rexistro xa está borrado. Se o contido do ficheiro non é lixo, a función visualizará o contido actual do rexistro, e pedirá confirmación por parte do usuario antes de marcalo como lixo.

A opción 3, «Consultar un rexistro en pantalla», chamará a unha función co seguinte prototipo:

void <nome da función>(FILE * ficheiro, signed long int rexistro);

Esta función accederá aos datos do rexistro número rexistro do ficheiro e amosará a información do alumno en pantalla. En caso de que o rexistro estea marcado como lixo ─se marca vale 0─ a función imprimirá unha mensaxe indicando que o rexistro está baleiro no seu lugar.

Despois de cada unha destas tres opcións, a función regresa ao menú. A última opción, evidentemente, pon fin ao programa.

Recursos útiles:
  Solución.