Programozó versenyek

Programozási nyelvek 1, 2019. április 9., K14 ZH

2019. április 9. 14:05 – 2019. április 9. 15:50

Karakterkódolás

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

myheader.h

  1. #ifndef _MYHEADER_H
  2. #define _MYHEADER_H 1
  3. int foo(const void *, const void *);
  4. #endif /* myheader.h */
letöltés szöveges állományként

Írja meg a myheader.h állományban deklarált foo() függvényt, amelyet egy olyan tömb elemeinek az összehasonlítására szeretnénk felhasználni, amely kizárólag angol nagybetűkből álló sztringek mutatóit tartalmazza, és amely paraméterként megkapja az összehasonlítandó két mutató címét (lásd a main.c függvény kódját)! A függvény külön-külön határozzon meg mindkét sztringhez egy-egy kódot, amelyet úgy kapunk, hogy a betűk mindegyikéhez hozzárendeljük az alábbi felsorolás szerinti karakterkódokat, majd ezeket összeadjuk egymással:

A: 1 G: 7 N: 14 U: 21
B: 2 H: 8 O: 15 V: 22
C: 3 I: 9 P: 16 W: 23
D: 4 J: 10 Q: 17 X: 24
E: 5 K: 11 R: 18 Y: 25
F: 6 L: 12 S: 19 Z: 26
M: 13 T: 20

A táblázatbeli értékek alapján például az APPLE szó kódja 1 + 16 + 16 + 12 + 5 = 50, a PEAR szóé 16 + 5 + 1 + 18 = 40 lesz.

A függvény negatív értéket adjon vissza, ha az első paraméterével elért sztring kódja kisebb a második paraméterével elérténél, pozitívat, ha nagyobb annál, és 0-t, ha a két kód értéke megegyezik egymással!

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.     char *t[20] = {"PEAR", "RASPBERRY", "APPLE", "ORANGE"};
  7.     int i;
  8.     qsort(t, 4, sizeof(char *), foo);
  9.     for (i = 0; i < 4; ++i)
  10.         printf("%s\n", t[i]);
  11.     return EXIT_SUCCESS;
  12. }
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. PEAR
  2. APPLE
  3. ORANGE
  4. RASPBERRY
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.