Szkriptnyelvek - 7. gyakorló feladatsor

JavaScript vezérlési szerkezetek, függvények, stringek

Megoldás: A feladatsor egy lehetséges megoldása elérhető ide kattintva.

1. feladat: Kézfogás (2 pont)

Egy több tagú baráti társaságban mindenki mindenkivel kezet fog (nyilván önmagával senki sem fog kezet, ennyire kétségbeesettek azért nem vagyunk). Írj egy kezfogas nevű függvényt, amely a társaságban lévő emberek számát kapja paraméterül, és visszaadja, hogy összesen hány kézfogás történt!

Példa:

Input: 10
Return: 45

2. feladat: Egyezés (2 pont)

Írj egy egyezes nevű függvényt, amely két tetszőleges típusú paramétert vár! A függvény adja vissza, hogy a két paraméter értékre és típusra is megyezik-e!

Példa:

Input: 1, true
Return: false

Input: false, false
Return: true

3. feladat: Város (2 pont)

Amikor egy városba látogatunk, egy üdvözlő tábla fogad minket. Írj egy udvozol nevű függvényt, amely egy város nevét várja paraméterül, és visszatér egy Udvozoljuk {varosNeve} varosaban! alakú szöveggel (a kapcsos zárójelek közé a paraméterben kapott városnév legyen behelyettesítve)!

Érd el, hogy a függvény paraméterének ne legyen kötelező értéket adni a függvényhíváskor! Abban az esetben, ha nem adjuk meg a paraméter értékét, akkor a város neve legyen alapból Szeged!

Példa:

Input: 'Mucsarocsoge'
Return: 'Udvozoljuk Mucsarocsoge varosaban!'

Input:
Return: 'Udvozoljuk Szeged varosaban!'

4. feladat: Kedves Ferenc (3 pont)

Egy tudományos kutatás megállapította, hogy a Ferenc nevű emberek kedvesek. Írj egy kedves nevű függvényt, amely egy nevet kap paraméterül! Ha a név Ferenc, akkor a függvény térjen vissza igaz, egyéb név esetén pedig hamis értékkel! Ha a függvényhíváskor nem adunk át paramétert a függvénynek, akkor a visszatérési érték legyen null!

A feladat megoldása során NE használj default paraméter értéket! Ehelyett a gyakorlati jegyzetben tárgyalt módon ellenőrizd, hogy megadták-e a függvény paraméterének értékét!

Példa:

Input: 'Ferenc'
Return: true

Input: 'Bela'
Return: false

Input: 
Return: null

5. feladat: Köbösszeg (3 pont)

Írj egy kobosszeg nevű függvényt, amely két egész számot kap paraméterül: rendre egy zárt intervallum alsó és felső végpontját! A függvény adja vissza az intervallumba eső számok köbének az összegét! (A végpontok természetesen még beletartoznak az intervallumba.)

Példa:

Input: 1, 3
Return: 36

Input: 10, 100
Return: 25500475

6. feladat: "Okosabb" köbösszeg (4 pont)

Használjuk fel az előző feladatban megírt kobosszeg függvényt, miután meggyőződtünk arról, hogy helyes paraméterekkel hívjuk meg azt!

Írj egy kobosszegetMeghiv függvényt, amely 3 paramétert vár: két egész számot és egy callback függvényt (ez most a kobosszeg függvény lesz)! Amennyiben minden paraméter megfelelő típusú (két szám és egy függvény), hívd meg a paraméterben kapott callback függvényt úgy, hogy az első paramétere a két szám közül a kisebbik, míg a második paramétere a két szám közül a nagyobbik legyen! A callback függvény visszatérési értékével térj vissza!

Példa:

Input: 100, 10, kobosszeg
Return: 25500475

7. feladat: Teve (5 pont)

A TeveClub oldalon virtuálisan nevelhetünk tevéket. Egy új teve igénylésekor meg kell adnunk a teve nevét és hívójelét (ez kb. egy jelszónak feleltethető meg).

Írj egy tevetIgenyel függvényt, amely két paramétert vár: rendre a teve nevét és hívójelét (szöveges adatok)! A függvényben ellenőrizd, hogy a megadott hívójel megfelelő erősségű-e! Ezt a következőképpen tedd meg:

Példa:

Input: 'MyEpicCamel', 'epicTeve20'
Return: 'Tiltott szoveg a hivojelben!'

Input: 'Leenhurbertindrund', 'sivatag4life'
Return: 'Sikeres teveigenyles!'

8. feladat: Számjegyek átlaga (5 pont)

Írj egy szamjegyAtlag nevű függvényt, amely egy egész számot vár paraméterül (akár negatív paraméter is lehet), és visszaadja a számban található számjegyek átlagát (tehát osszuk el a számjegyek összegét a számjegyek darabszámával)! Ha a függvény nem szám típusú paramétert kap, akkor a visszatérési érték legyen -1!

Példa:

Input: 741258
Return: 4.5

Input: -97968
Return: 7.8

Input: 'kecske'
Return: -1

9. feladat: Cenzúra (3 pont)

Ninja az egyik Discord szerveren az indokolatlan tagelgetéseivel sikeresen magára haragította az egyik admint. Emiatt azt a büntetést kapta, hogy mostantól az üzenetei cenzúrázva jelennek meg.

Írj egy cenzura függvényt, amely Ninja egy üzenetét kapja paraméterül, és ezt átalakítja úgy, hogy az összes magánhangzót lecseréli a * (csillag) karakterre! A magánhangzók vizsgálata során a kis- és nagybetűket ne különböztesd meg! A paraméterben érkező szöveg garantáltan nem tartalmaz ékezetes betűket.

Példa:

Input: 'He, miert igy jelennek meg az uzeneteim?'
Return: 'H*, m**rt *gy j*l*nn*k m*g *z *z*n*t**m?'

Input: 'Elhagyom ezt a csoportot, mert serto az elmult tobb mint 10 eves Discordos tapasztalatom es multammal szemben.'
Return: '*lh*gy*m *zt * cs*p*rt*t, m*rt s*rt* *z *lm*lt t*bb m*nt 10 *v*s D*sc*rd*s t*p*szt*l*t*m *s m*lt*mm*l sz*mb*n.'

10. feladat: Színkód (3 pont)

Ági a NASA-nál dolgozik webfejlesztőként. Egyik napon a NASA úgy döntött, hogy a CSS kódjaikban található összes hexadecimális színkódot át szeretnék írni decimális RGB-formátumra. Írj egy konvertal nevű függvényt, amely egy hexadecimális színkódot (string) vár paraméterben, és visszaadja a színnek megfelelő decimális RGB-kódot rgb({vörös szín mennyisége}, {zöld szín mennyisége}, {kék szín mennyisége}) formátumban!

A feladat megoldásához szükséges ismeretek:

Egy hexadecimális színkód úgy néz ki, hogy # (kettőskereszt) karakter után szerepel 6 darab, 16-os számrendszerbeli számjegy - például #FF0077 (az input mindig ilyen formátumú lesz, a hexadecimális színkódok tömörebb megadási módjával nem foglalkozunk).

Egy hexadecimális színkód a következőképpen váltható át decimális RGB-formátumra:
  1. Átváltjuk a kettőskereszt után lévő 2 számjegyet 10-es számrendszerbe, ezzel megkapjuk a vörös szín mennyiségét.
  2. Az ezután lévő 2 számjegyet is átváltjuk 10-es számrendszerbe, ezzel megkapjuk a zöld szín mennyiségét.
  3. Az utolsó 2 számjegyet is átváltjuk 10-es számrendszerbe, ezzel megkapjuk a kék szín mennyiségét.

Például #FF0077 decimális RGB-alakban: rgb(255, 0, 119).
Tipp: Keress rá az interneten, hogy hogyan lehet JavaScriptben egyszerűen átváltani egy hexadecimális (16-os számrendszerbeli) számot decimálisba (10-es számrendszerbe)!

Példa:

Input: '#FF0077'
Return: 'rgb(255, 0, 119)'

Input: '#06C2E9'
Return: 'rgb(6, 194, 233)'

11. feladat: Betűcsere (3 pont)

Írj egy betucsere nevű függvényt, amely egy szöveget kap paraméterül! A függvény visszatérési értéke egy szöveg, amit úgy kapunk, hogy a paraméterben kapott szövegben felcseréljük a kis- és nagybetűket (tehát ami az eredeti szövegben kisbetű volt, az a visszatérési értékben nagybetű lesz és fordítva).

Példa:

Input: 'SegITsEg! elROMloTt A cAPs LocK!'
Return: 'sEGitSeG! ELromLOtT a CapS lOCk!'

12. feladat: Python (3 pont)

Tomi kedvenc programozási nyelve a Python. Amikor JavaScriptet kezdett el tanulni, akkor Tomi nagyon hiányolta a nyelvből a Pythonból ismerős negatív string-indexelést, ezért úgy döntött, hogy ír erre egy függvényt.

Írj egy python nevű függvényt, amely rendre egy szöveget és egy (garantáltan egész) indexet kap paraméterül! A függvény adja vissza a string adott indexű karakterét úgy, hogy a Pythonból ismerős negatív indexelés is működjön (ekkor a string végétől kezdünk el számolni)! Amennyiben túl- vagy alulindexeljük a stringet, akkor a visszatérési érték undefined legyen!

Példa:

Input: 'Lehet-e a Pythonos indexelest JavaScriptben szimulalni?', 0
Return: 'L'

Input: 'Lehet-e a Pythonos indexelest JavaScriptben szimulalni?', -1
Return: '?'

Input: 'Lehet-e a Pythonos indexelest JavaScriptben szimulalni?', -45
Return: 'P'

Input: 'Lehet-e a Pythonos indexelest JavaScriptben szimulalni?', -2000
Return: undefined

13. feladat: Karakterek többszörözése (5 pont)

Írj egy karakterTobbszoroz nevű függvényt, amely egy szöveget vár paraméterül! A függvény visszatérési értéke egy szöveg, amit úgy kapunk, hogy a paraméterben kapott szöveg minden karakterét leírjuk annyiszor, mint ahányadik a karakter a szövegben (tehát az 1. karaktert 1-szer, a 2. karaktert 2-szer, a 3. karaktert 3-szor és így tovább).

Amennyiben a függvény paramétere nem string típusú vagy a paraméterben kapott érték az üres string, akkor a függvény térjen vissza a HIBA! szöveggel!

Példa:

Input: 'sajt'
Return: 'saajjjtttt'

Input: true
Return: 'HIBA!'

14. feladat: Háromszög (6 pont)

Írj egy haromszog nevű függvényt, amely egy háromszög 3 oldalának hosszát kapja paraméterül centiméterben (mindhárom oldalhossz garantáltan szám típusú)!

A feladat megoldásához szükséges összefüggések:

Egy háromszög megszerkeszthető, ha bármely oldalának hossza kisebb a másik két oldal hosszának összegénél. Tehát: és és .

Háromszög kerülete: .

Háromszög területe (Hérón-képlet): , ahol .
Tipp: Négyzetgyökvonást a Math.sqrt() függvénnyel végezhetünk, míg 2 tizedesjegyre kerekítésre használhatjuk a toFixed() metódust (leírás és példa a metódussal kapcsolatban).

Példa:

Input: 3, -1, 3
Return: 'HIBA! Nem letezo haromszog!'

Input: 7, 4, 2
Return: 'HIBA! Nem letezo haromszog!'

Input: 5, 4, 7
Return: 'Kerulet: 16.00 cm, terulet: 9.80 cm2'

15. feladat: Leghosszabb nyerőszéria (5 pont)

Gábor a szabadidejében egy online csapatjátékkal játszik. A játék során feljegyzi, hogy a játék egyes köreiben a csapata győzött-e vagy veszített-e.

Írj egy leghosszabbNyeroszeria nevű függvényt, amely a játék egyes köreinek eredményét elkódoló szöveget kap paraméterül! A paraméterben kapott szöveg csak 0 és 1 karaktereket tartalmaz: a 0 azt jelenti, hogy Gábor csapata az adott kört elveszítette, az 1 pedig azt, hogy megnyerte. A függvény adja vissza, hogy mennyi volt Gábor csapatának leghosszabb nyerőszériája a játékban (azaz milyen hosszú a paraméterben kapott szövegben a leghosszabb, közvetlenül egymás utáni 1-esekből álló sorozat)!

Példa:

Input: '0000100111000000110000101'
Return: 3

Input: '1101001111010000011110011'
Return: 4

Input: '0000000000000000000000000'
Return: 0

16. feladat: Tömörített szöveg kibontása (6 pont)

Írj egy kibont nevű függvényt, amely egy tömörített szöveget kap paraméterül, amit "kibont"! A függvény lépkedjen végig a paraméterben kapott szöveg karakterein, és ha számjegy jön, akkor vegye a következő karaktert annyiszor, mint amennyi a számjegy értéke, és az azt követő karakterrel folytassa a műveletet! A kibontott szöveg legyen a függvény visszatérési értéke! Feltehetjük, hogy az inputban egy számjegy után mindig szerepel legalább 1 karakter.

Példa:

Input: 'Hah5o! Van i2t valaki3?'
Return: 'Hahooooo! Van itt valaki???'