Programozó versenyek

Magas szintű programozási nyelvek 1, 2018. március 28., Sz10 ZH

2018. március 28. 10:15 – 2018. március 28. 12:00

Drónfelvételek

Sok túrázó még csapadékos időben is járja Magyarország túraútvonalait. Ilyenkor az ösvényről drónnal készített felvételen kétféle dolgot szúrhatunk ki: az embereket és a pocsolyákat. Ismerve a túrázók aktuális helyzetét, és tudva azt, hogy mindegyik túrázó szeretné szárazon megúszni a túrát, könnyen meghatározható a túrázók helyzete a következő lépés megtétele utáni pillanatban. A túrázók az ösvényeken balról jobbra haladnak, a következő lépés megtétele utáni pillanatban mindegyikük a soron következő olyan helyre kerül, ahol nincs pocsolya. Így lesznek olyan túrázók, akik csak egy kis lépést tesznek meg az ösvény soron következő szomszédos szakaszára, de lesznek olyanok is, akiknek nagyobbat kell lépniük, hogy átugorjanak az előttük lévő pocsolyákat követő ösvényszakaszra.

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

myheader.h

  1. #ifndef _MYHEADER_H
  2. #define _MYHEADER_H 1
  3. void foo(const char *, char *);
  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, amely paraméterként megkapja két sztring kezdőcímét! A függvény az első sztringben egy ösvényt leíró karaktersorozatot kap, amelyben csillag ('*') karakter jelzi az embereket, kukac ('@') karakter a pocsolyákat, egyenlőségjel ('=') pedig az ösvény szabad szakaszait. A foo() függvény állítsa elő a túrázók következő pillanatbeli helyzetét, hasonló formátumú sztring formájában! Feltételezheti, hogy a kiindulási helyzetben még senki sem érte el a túra célját, és nem is egy pocsolyába tűzték ki a célt jelző zászlót, ezért mindegyik résztvevő előtt lesz még legalább egy üres terület, ahova léphet.

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 <string.h>
  4. #include "myheader.h"
  5. int main()
  6. {
  7.     char source[100], destination[100];
  8.     while (fgets(source, 100, stdin) != NULL)
  9.     {
  10.         if (source[strlen(source) - 1] == '\n')
  11.             source[strlen(source) - 1] = '\0';
  12.         foo(source, destination);
  13.         printf("%s\n", destination);
  14.     }
  15.     return EXIT_SUCCESS;
  16. }
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

Példa bemenet

  1. ==*====*====
  2. ===@===
  3. **@@@==*@@=*@*=
  4. *=*=*=*=*=*=
  5. ==*@===*=*@=
letöltés szöveges állományként

A példa tesztprogram kimenete

  1. ===*====*===
  2. ===@===
  3. =*@@@*==@@*=@**
  4. =*=*=*=*=*=*
  5. ===@*===*=@*
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.