Programozó versenyek

Magas szintű programozási nyelvek 1, 2015. június 2., K14 ZH

2015. június 2. 14:00 – 2015. június 2. 17:45

Vének tanácsa

Adott a következő fejlécállomány:

myheader.h

  1. #ifndef _MYHEADER_H
  2. #define _MYHEADER_H 1
  3. struct person
  4. {
  5.     char name[30];
  6.     int birth_year, birth_month, birth_day;
  7. };
  8. int foo(char *, struct person *, int, int);
  9. #endif /* myheader.h */
letöltés szöveges állományként

Írja meg a myheader.h fejlécállományban deklarált foo() nevű C függvényt, amely paraméterként megkapja egy bináris állomány nevét, egy struct person típusú adatokat tartalmazó tömb kezdőcímét, a tömb elemeinek számát, valamint egy egész számot, amely egy években mért életkorhatárt ad meg! A függvény a következő tevékenységeket végezze:

  1. határozza meg és visszatérési értékként adja meg azt, hogy hány olyan személy található a paraméterként megkapott tömbben, akinek az életkora meghaladja a paraméterként megkapott határértéket (2015. június 2-höz viszonyítva);
  2. a paramétereként megkapott bináris állományba írja ki az előző feltételnek megfelelő tömbelemeket a személyek születési időpontja alapján csökkenő sorba rendezve (előre kerüljön a legfiatalabb személy); ha két vagy több személy is azonos napon született volna, akkor őket a nevük alapján lexikografikusan növekvő sorba rendezze!

Megjegyzés

A függvényt helyezze a foo.c nevű állományba, és ezt az állományt küldje be megoldásként a kiértékelő rendszernek! Megoldását az alábbi állományok segítségével tesztelheti. Megoldásának kiértékelését a tesztelő rendszer nem feltétlenül ezeknek az állományoknak a felhasználásával végzi!

main.c

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include "myheader.h"
  4. int main()
  5. {
  6.     struct person p, t[] = {{"Teszt Elek",     1992, 10, 8},
  7.                             {"Meno Jeno",      1990,  6, 1},
  8.                             {"Bena Bela",      1991,  6, 1},
  9.                             {"Cserepes Virag", 1991,  6, 2}};
  10.     FILE *fin;
  11.     foo("foo.bin", t, 4, 24);
  12.     if ((fin = fopen("foo.bin", "rb")) == NULL)
  13.     {
  14.         fprintf(stderr, "Error!\n");
  15.         return EXIT_FAILURE;
  16.     }
  17.     while (fread(&p, sizeof(p), 1, fin) == 1)
  18.         printf("*%s* (%d-%02d-%02d)\n", p.name, p.birth_year, p.birth_month, p.birth_day);
  19.     fclose(fin);
  20.     return EXIT_SUCCESS;
  21. }
letöltés szöveges állományként

Makefile

  1. SRCS = main.c foo.c
  2. OBJS = $(SRCS:%.c=%.o)
  3. TARGETS = main
  4. .PHONY: clean
  5. all: $(TARGETS)
  6. main: $(OBJS)
  7. $(CC) $(OBJS) -o main
  8. %.o: %.c
  9. $(CC) -Wall -c $< -o $@
  10. clean:
  11. rm -rf $(OBJS) *~ $(TARGETS)
letöltés szöveges állományként

A példa tesztprogram kimenete

  1. *Bena Bela* (1991-06-01)
  2. *Meno Jeno* (1990-06-01)
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.