Szorgalmi feladatok

A feladatok megoldásai az admin portálon adhatók be. A szorgalmi feladatokkal egy pontversenyben is részt lehet venni. Alapbeállítás szerint anonim módon jelensz meg a táblázatban. Ha szeretnél névvel megjelenni vagy teljesen eltűnni, az admin portálon beállíthatod.

A verseny állásának megtekintéséhez is be kell jelentkezni.

1. Sakktábla (257 megoldás)

Adott az alábbi, sakktáblát kirajzoló program:

#include <stdio.h>

int main() {
    printf("XX..XX..XX..XX..\n");
    printf("XX..XX..XX..XX..\n");
    printf("..XX..XX..XX..XX\n");
    printf("..XX..XX..XX..XX\n");
    printf("XX..XX..XX..XX..\n");
    printf("XX..XX..XX..XX..\n");
    printf("..XX..XX..XX..XX\n");
    printf("..XX..XX..XX..XX\n");
    printf("XX..XX..XX..XX..\n");
    printf("XX..XX..XX..XX..\n");
    printf("..XX..XX..XX..XX\n");
    printf("..XX..XX..XX..XX\n");
    printf("XX..XX..XX..XX..\n");
    printf("XX..XX..XX..XX..\n");
    printf("..XX..XX..XX..XX\n");
    printf("..XX..XX..XX..XX\n");
    return 0;
}

Végezz el ezen két módosítást!

  • Szüntesd meg a sormintát! Ahol látsz bármilyen ismétlést, azt mind tüntesd el a programból!
  • Jelenleg minden mező 2 egység széles: két darab X és . van vízszintesen és függőlegesen is. Oldd meg, hogy a felhasználó adhassa meg ezt a számot, vagyis hogy beállítható legyen a sakktábla mérete!

Elfogadott megoldások: 257 darab.
Szerezhető: 1 pont. Leadási határidő: 2018-09-10 04:00:00.

2. Kismutató, nagymutató (137 megoldás)

Kismutató, nagymutató

Az SVG (scalable vector graphics) egy szöveges fájlformátum, amellyel vektorgrafikus rajzok adhatók meg. Ez azt jelenti, hogy a fájlban geometriai formák, körök, egyenesek stb. leírása van. Elterjedten használják weboldalakon (mi is az InfoC-n), mert a böngészőprogramok is meg tudják nyitni.

Egy SVG fájl a következőképpen néz ki:

<svg width="200" height="200" xmlns="http://www.w3.org/2000/svg" version="1.1">
  <circle cx="100" cy="50" r="20" stroke="black" fill="yellow" />
  <line x1="100" y1="70" x2="100" y2="90" stroke="black" />
  <circle cx="90" cy="45" r="3" stroke="black" fill="blue" />
  <circle cx="110" cy="45" r="3" stroke="black" fill="blue" />
  <rect x="80" y="80" width="40" height="70" stroke="black" fill="blue" />
  <line x1="90" y1="150" x2="60" y2="190" stroke="black" />
  <line x1="110" y1="150" x2="140" y2="190" stroke="black" />
  <line x1="80" y1="90" x2="40" y2="70" stroke="black" />
  <line x1="120" y1="90" x2="160" y2="70" stroke="black" />
</svg>

Vagyis a kezdő svg és lezáró /svg között különféle formákat lehet megadni:

  • circle = kör cx,cy középponttal, r sugárral és stroke, fill színnel,
  • rect = téglalap, x,y bal felső sarokkal, width,height méretekkel,
  • line = szakasz, x1,y1 ponttól x2,y2 pontig,
  • és még egy csomó egyéb dolgot.

Az SVG-ről itt olvashatsz még: Basic shapes. A fenti fájlból egyébként az alábbi kép lesz.

Példa SVG képe

A feladat egy C program írása, amely három számot vár a szabványos bemenetén, szóközzel elválasztva. Ezek egy időpontot mutatnak: óra, perc és másodperc. A program az ora.svg nevű SVG fájlt hozza létre kimenetként, amelyben minden koordinátát a program maga számolt ki (sin, cos). Az órán legyen meg mindhárom mutató! A mutatók ne mindig pontosan az egész órára és percekre mutassanak! (Ha pl. fél kilenc van, a kismutató a nyolcas és a kilences között van középen. De ilyet a percmutató is csinál.) A számlapról ne hiányozzanak a percenkénti osztások sem, sőt az egész órákhoz tartozó osztások legyenek különbözőek, mint a többi!

A díszes, színes órákat szeretjük (választhatsz saját színeket, vonalvastagságokat stb.), programozóként azonban legfontosabb a specifikáció pontos követése. Figyelj arra, hogy a program kimenete szabályos, szintaktikai hibától (pl. hiányzó idézőjelek) mentes SVG fájlt legyen! Ilyen szempontból is nagyon szigorú a megoldások értékelése. A helyes SVG fájlokat meg tudják nyitni a böngészők is (bár ha ez sikerül, attól még nem biztos, hogy teljesen helyesek). Legyél kritikus a neten talált írásokkal is: az M_PI konstans nincs már benne a C nyelv szabványában!

Fájlkezelésről, fájlok létrehozásáról a honlapon található segédletben olvashatsz.

Elfogadott megoldások: 137 darab.
Szerezhető: 1 pont. Leadási határidő: 2018-09-17 04:00:00.

3. Paprikás csirkék (0 megoldás)

Ebben a feladatban a ferde hajítással kell dolgozni.

Angry birds

A feladat a következő. Adott egy Angry Birds pálya, amelyen a kör alakú madarat adott szögekben és sebességekkel lehet kilőni. C programot kell írnod, amely kiszámítja és megjeleníti azokat a (szög; sebesség) kombinációkat, amelyekkel egyből el lehet találni a szintén kör alakú malacot! (Visszapattanásokkal nem kell számolni.) A program egy darab SVG rajzot kell létrehozzon az angry.svg nevű fájlban, amely a terepet és a kiszámított röppályákat ábrázolja. A rajzon szerepelhetnek díszletek is, napocska, felhő, fák, hegyek, amelyek a számítás szempontjából nem lényegesek.

A keletkező rajzon minden legyen arányos, pl. 1 méter = 20 pixel! Ha a madarat és a malacot körrel rajzolod, akkor ez azok méretére is érvényes. A programban szereplő összes adat változóval kell legyen megadva (pozíciók, méretek, sebességek, nehézségi gyorsulás). Ne szerepeltesd ugyanazt a számkonstanst rengeteg helyen a forráskódban! Legfontosabb értékelési szempont: ha az adatok (pl. malac pozíciója) a kódban változnak, a rajz nem eshet szét. Figyelj arra, hogy az SVG formátum szintaktikai szabályait pontosan betartsd. Egy alap SVG fájl:

<svg xmlns="http://www.w3.org/2000/svg" version="1.1" width="320" height="200">
  <circle cx="100" cy="50" r="40" stroke="black" stroke-width="2" fill="red" />
</svg>

Néhány SVG idom: line, circle, rect, ellipse, poly (sokszög), lásd a Basic shapes oldalt. Javasolt tesztelés közben a képnéző programban megnyitva tartani a képet: a legtöbb tudja azt, hogy érzékeli a fájl változását, és újrarajzolja a képet.

Figyelj arra, hogy milyen időlépéssel számítod a röppályát. Ha túl nagyot választasz, lehet, nem érzékeled a találatot. A röppálya kirajzolásánál viszont már lehet nagy időlépést választani, különben túl nagy lesz az SVG fájl. Használhatod a fenti terepet, de kitalálhatsz sajátot is. A fentihez további adatok lehetnek: rmadár=rmalac=10 cm, g=9,81 m/s². A kilövés szöge 10° és 60° között állítható, 5°-os lépésekben. A sebessége 10 és 30 m/s között, 1 m/s lépésközzel. Ezekkel az adatokkal három lehetséges röppálya van. Ha azonban szép rajzot szeretnél, akkor más adatokat kell választanod. A fenti rajz ugyanis nem méretarányos, igazából a madár és a malac sokkal kisebbek.

Ellenőrizd a beadás előtt:

  • A keletkező fájl nevét és a fájlkezelést.
  • Az ütközés ellenőrzésének matematikáját.
  • A röppályát számító és rajzoló vezérlési szerkezetet, mint a programkód legösszetettebb részét.
  • Nyelvi eszközök használata. Alkalmazd, amit eddig tanultál, de ne l'art pour l'art tedd!

Jó szórakozást!

Tiltott szavak: 1

Elfogadott megoldások: 0 darab.
Szerezhető: 1 pont. Leadási határidő: 2018-09-24 04:00:00.


A feladatok megoldásához nem szükséges olyan nyelvi elem, amely nem volt még az előadáson. Ha igen, akkor az magyarázattal együtt szerepel a feladat szövegében.

A szorgalmik javítása szigorúbb, mint a számonkéréseké általában. Trehány megjelenésű forráskód, indokolatlan vezérlési szerkezet, hatékonytalanság stb. a visszautasítás okai lehetnek még akkor is, ha a programod működik. Figyelem! Határidő utáni javításra nincs lehetőség. Ha elég hamar leadod a megoldást, lesz lehetőséged javítani is. Ha az utolsó pillanatban, akkor elsőre jónak kell lennie.