BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR MATEK-INFO VERSENY 2017, április 1 INFORMATIKA I. TÉTELSOR A versenyzők figyelmébe:

Hasonló dokumentumok
A rész (30 pont) A.1. Vajon mit csinál? (5 pont) A generál(n) algoritmus egy n természetes számot dolgoz fel (0 < n < 100).

BABEŞ BOLYAI TUDOMÁNYEGYETEM MATEMATIKA ÉS INFORMATIKA KAR BBTE Matek-Infó verseny 1. tételsor INFORMATIKA írásbeli. A versenyzők figyelmébe:

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny - minta Informatika írásbeli

BBTE Matek-Infó verseny mintatételsor Informatika írásbeli vizsga

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR Felvételi verseny 1. Tételsor Informatika írásbeli

INFORMATIKA javítókulcs 2016

INFORMATIKA tétel 2019

Felvételi vizsga mintatételsor Informatika írásbeli vizsga

Alkalmazott modul: Programozás 4. előadás. Procedurális programozás: iteratív és rekurzív alprogramok. Alprogramok. Alprogramok.

Felvételi tematika INFORMATIKA

Examenul de bacalaureat naional 2016 Proba E. d) Informatică. Limbajul C/C++

INFORMATIKA tétel 2018

Programozási alapismeretek :: beadandó feladat. Felhasználói dokumentáció. Molnár Tamás MOTIABT.ELTE

Írásbeli vizsga Matematika Informatika szak

EXAMENUL DE BACALAUREAT Probă scrisă la Geografie Europa România Uniunea Europeană Proba D/E/F

Programozási alapismeretek beadandó feladat: ProgAlap beadandó feladatok téma 99. feladat 1

1. numere.txt n (1 n 10000) n növekvő kilenc a) Pascal/C++ Például: NUMERE.TXT

2015, Diszkrét matematika

INFORMATIKA tétel 2017

Permutáció n = 3 esetében: Eredmény: permutációk száma: P n = n! romámul: permutări, angolul: permutation

Programozás C nyelven (10. ELŐADÁS) Sapientia EMTE

1. Alapok. Programozás II

I. ALAPALGORITMUSOK. I. Pszeudokódban beolvas n prim igaz minden i 2,gyök(n) végezd el ha n % i = 0 akkor prim hamis

Olimpiada Naţională de Matematică Etapa Naţională, Braşov, 2 aprilie CLASA a VIII-a

BME MOGI Gépészeti informatika 5.

Edényrendezés. Futási idő: Tegyük fel, hogy m = n, ekkor: legjobb eset Θ(n), legrosszabb eset Θ(n 2 ), átlagos eset Θ(n).

Algoritmizálás. Horváth Gyula Szegedi Tudományegyetem Természettudományi és Informatikai Kar

Megjegyzés: A programnak tartalmaznia kell legalább egy felhasználói alprogramot. Példa:

Programozási módszertan. Dinamikus programozás: A leghosszabb közös részsorozat

2018, Diszkrét matematika

Érdekes informatika feladatok

2018, Funkcionális programozás

Alkalmazott modul: Programozás. Programozási tételek, rendezések. Programozási tételek Algoritmusok és programozási tételek

2018, Diszkre t matematika. 10. elo ada s

/* Az iter függvény meghívása és a visszatérő érték átadása a gyok változóba */ gyok = iter( n, a, e ) ;

6. gyakorlat Egydimenziós numerikus tömbök kezelése, tömbi algoritmusok

Programozás I. Metódusok C#-ban Egyszerű programozási tételek. Sergyán Szabolcs

Algoritmusok és adatszerkezetek gyakorlat 03 Oszd meg és uralkodj. Nagy

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

C programozás. { Márton Gyöngyvér, 2009 } { Sapientia, Erdélyi Magyar Tudományegyetem }

2016, Diszkrét matematika

<... < s n. Írjuk le a megoldási módszert, és adjunk meg egy megjegyzésekkel ellátott Pascal-programot. A bemeneti adatokat helyesnek tekintjük.

Bevezetés a programozásba I 10. gyakorlat. C++: alprogramok deklarációja és paraméterátadása

1. Feladat: beolvas két számot úgy, hogy a-ba kerüljön a nagyobb

Programozási alapismeretek 2009/2010

Programozás. (GKxB_INTM021) Dr. Hatwágner F. Miklós április 4. Széchenyi István Egyetem, Gy r

Pénzügyi algoritmusok

2018, Funkcionális programozás

Bánsághi Anna 2014 Bánsághi Anna 1 of 68

Függvények int, long 1. Adott a mellékelt f alprogram.

Algoritmusok pszeudókód... 1

Maximum kiválasztás tömbben

Szövegek C++ -ban, a string osztály

A 2017/2018 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának feladatai. INFORMATIKA II. (programozás) kategória

A félév során előkerülő témakörök

Információs Technológia

Tartalomjegyzék Algoritmusok - pszeudókód

Összetett programozási tételek Rendezések Keresések PT egymásra építése. 10. előadás. Programozás-elmélet. Programozás-elmélet 10.

1. beadandó feladat: Programozási tételek alkalmazása. Közös követelmények:

Sorozatok I. Brósch Zoltán (Debreceni Egyetem Kossuth Lajos Gyakorló Gimnáziuma)

end function Az A vektorban elõforduló legnagyobb és legkisebb értékek indexeinek különbségét.. (1.5 pont) Ha üres a vektor, akkor 0-t..

2018, Funkcionális programozás

1. Írjunk programot mely beolvas két egész számot és kinyomtatja az összegüket.

7. fejezet: Mutatók és tömbök

A függvény kód szekvenciáját kapcsos zárójelek közt definiáljuk, a { } -ek közti részt a Bash héj kód blokknak (code block) nevezi.

Kupac adatszerkezet. A[i] bal fia A[2i] A[i] jobb fia A[2i + 1]

A C++ Standard Template Library rövid összefoglalás

1. Tétel. Példa: Adatbázis tétel. Szövegszerkesztés és operációs rendszer tétel

Dinamikus programozás II.

Operációs rendszerek. 9. gyakorlat. Reguláris kifejezések - alapok, BASH UNIVERSITAS SCIENTIARUM SZEGEDIENSIS UNIVERSITY OF SZEGED

// keressük meg a legnagyobb faktoriális értéket, ami kisebb, // mint százmillió

ISA szimulátor objektum-orientált modell (C++)

Programozás II. 2. Dr. Iványi Péter

Segédanyagok. Formális nyelvek a gyakorlatban. Szintaktikai helyesség. Fordítóprogramok. Formális nyelvek, 1. gyakorlat

Programozási módszertan. Dinamikus programozás: szerelőszalag ütemezése Mátrixok véges sorozatainak szorzása

2. Rekurzió. = 2P2(n,n) 2 < 2P2(n,n) 1

Programozás alapjai C nyelv 9. gyakorlat. Rekurzió. Rekurzív algoritmus

A 2010/2011 tanévi Országos Középiskolai Tanulmányi Verseny második fordulójának megoldása. II. (programozás) kategória

Alkalmazott modul: Programozás. Programozási tételek, rendezések Giachetta Roberto

Programozás alapjai. 6. gyakorlat Futásidő, rekurzió, feladatmegoldás

Algoritmusok bonyolultsága

2. Milyen értéket határoz meg az alábbi algoritmus, ha A egy vektor?. (2 pont)

HORVÁTH ZSÓFIA 1. Beadandó feladat (HOZSAAI.ELTE) ápr 7. 8-as csoport

Partíció probléma rekurzíómemorizálással

2016, Diszkrét matematika

STL gyakorlat C++ Izsó Tamás május 9. Izsó Tamás STL gyakorlat/ 1

Bevezetés a Programozásba II 2. előadás. Adattípusok megvalósítása egységbe zárással. Adattípusok megvalósítása egységbe zárással

Bevezetés a programozásba. 8. Előadás: Függvények 2.

Gráfelméleti feladatok. c f

Fibonacci számok. Dinamikus programozással

Kupac adatszerkezet. 1. ábra.

Számláló rendezés. Példa

Adatbázis rendszerek Gy: Algoritmusok C-ben

Programozás alapjai C nyelv 8. gyakorlat. Mutatók és címek (ism.) Indirekció (ism)

Mutatók és címek (ism.) Programozás alapjai C nyelv 8. gyakorlat. Indirekció (ism) Néhány dolog érthetőbb (ism.) Változók a memóriában

I. Egydimenziós tömb elemeinek rendezése

Funkcionális Nyelvek 2 (MSc)

Szerző Lővei Péter LOPSAAI.ELTE IP-08PAEG/25 Daiki Tennó

Rekurzió. Programozás alapjai C nyelv 9. gyakorlat. Rekurzív algoritmus. Rekurzív algoritmus fajtái. Példa: n! (2) Példa: n!

Programozás alapjai. (GKxB_INTM023) Dr. Hatwágner F. Miklós szeptember 27. Széchenyi István Egyetem, Gy r

Átírás:

BABEŞ-BOLYAI TUDOMÁNYEGYETEM MATEMATIKA-INFORMATIKA KAR MATEK-INFO VERSENY 2017, április 1 INFORMATIKA I. TÉTELSOR A versenyzők figyelmébe: 1. A feladatok megoldásait pszeudokódban vagy egy programozási nyelvben (Pascal/C/C++) kell megadnotok. 2. A megoldások értékelésekor az első szempont az algoritmus helyessége, majd a hatékonysága, ami a végrehajtási időt és a felhasznált memória méretét illeti. 3. A tulajdonképpeni megoldások előtt, kötelezően leírjátok szavakkal az alprogramokat, és megindokoljátok a megoldásotok lépéseit. Feltétlenül írjatok megjegyzéseket (kommenteket), amelyek segítik az adott megoldás technikai részleteinek megértését. Adjátok meg az azonosítok jelentését és a fölhasznált adatszerkezeteket. Ha ez hiányzik, a tételre kapható pontszámotok 10%-kal csökken. 4. Ne használjatok különleges fejállományokat, előredefiniált függvényeket (például STL, karakterláncokat feldolgozó sajátos függvények stb.). I. Tétel (35 pont) 1. Fénysugár (20 pont) Legyen egy tükrökből kialakított, téglalap alakú keret. Egy fénysugár elindul a téglalap bal alsó sarkából, 45 o fokos szöget alkotva a téglalap alsó oldalával, és nekiütközik a téglalap felső vagy jobboldali oldalának. Itt tükröződik (elindul egy másik oldal felé, szintén 45 o fokos szöget alkotva azzal az oldallal, amelybe beleütközött). Így folytatja az útját, amíg a keret valamelyik sarkába nem ér. 6 1 9 4 7 3 0 8 5 2 Írjatok alprogramot, amely kiszámítja, hogy hányszor (váltsz) változtatja a tükröződés irányát a fénysugár, amíg leáll valamelyik sarokban. A kiindulási pontot nem számítjuk be ebbe a számba. Az alprogram bemeneti paraméterei a téglalap hossza (1 < a < 10 000) és szélessége (1 < b < 10 000), míg a váltsz kimeneti paraméter. 1. Példa: ha a = 8 és b = 3, akkor váltsz = 9. 2. Példa: ha a = 8 és b = 4, akkor váltsz = 1. 2. Erős számok (15 pont) Egy nullától különböző sz természetes számnak az erőssége k, ha bináris alakjában pontosan k darab 1-es számjegy található. Például, a 23 erőssége 4 (kettes számrendszerben felírva, 4 darab 1-es számjegye van). Adott számsorozat k erősségű csoportjának nevezzük azt a részsorozatot, amely a sorozat k erősségű elemeit tartalmazza, az elemek eredeti sorrendjében. Például, az s = (7, 12, 3, 13, 24, 19), sorozat k = 2 erősségű csoportja a (12, 3, 24) részsorozat. Írjatok alprogramot, amely meghatároz minden erősségi csoportot, amelyek az adott x sorozat elemeiből létrehozhatók. Bemeneti paraméterek: a nem nulla, 30 000-nél kisebb, különböző természetes számokból álló x sorozat és a sorozat n hossza (1 < n < 100). Kimeneti paraméterek: a csszáma (a csoportok száma) és a csoportok (a létrehozott csoportok, erősségük szerint növekvően rendezve). Példa: ha n = 6 és x = (12, 3, 24, 16, 15, 32), akkor csszáma = 3, és csoportok: (16, 32), (12, 3, 24), (15). II. Tétel (15 pont) Adott a következő alprogram, amelynek három, természetes szám bemeneti paramétere van: a, b és sz, amelyeknek értékei kisebbek, mint 10 000:

Algoritmus f(a, b, sz): k 0 Amíg b < sz végezd el: k k + 1 b a + b a b - a vége(amíg) térítsd k Vége(algoritmus) a. Adjátok meg a feladat szövegét, amelyet ez az algoritmus old meg, ha a = 1 és b = 0 értékekre hívjuk meg. b. Mit térít az F(1,0,10) hívás? c. Írjátok le egy rekurzív változatát a fenti algoritmusnak, megőrizve az iteratív (nem rekurzív) változat fejlécét. III. Tétel (40 pont) Előszelet Sors-számjegynek hívjuk azt a természetes számot, amelyet adott természetes számra a következőképpen számítunk ki: összeadjuk a szám számjegyeit, majd a kapott összeg számjegyeit, és így tovább, amíg a kapott összeg nem válik egyszámjegyű számmá. Például, a 182 sors-számjegye 2 (1 + 8 + 2 = 11, 1 + 1 = 2). Egy pontosan k számjegyű p számot egy legkevesebb k számjegyű q szám előszeletének nevezünk, ha a q szám első k számjegyéből alkotott szám (balról jobbra tekintve) egyenlő p-vel. Például, 17 előszelete 174-nek, és 1713 előszelete 1 713 242-nek. Legyen az sz természetes szám (0 < sz 30 000) és az m sorral és n oszloppal (0 < m 100, 0 < n 100) rendelkező A mátrix (kétdimenziós tömb), amelynek elemei 30 000-nél kisebb természetes számok. Írjatok programot, amely meghatározza és kiírja az sz szám leghosszabb előszeletét, amelyet az adott mátrix elemeinek megfelelő sors-számjegyeiből fel lehet építeni. Egy ilyen sors-számjegyet akárhányszor fel lehet használni. Ha nem építhető fel előszelet, a program írja ki a nem létezik előszelet üzenetet. Példa: ha sz = 12319, m = 3, n = 4 és a mátrix:, akkor a leghosszabb előszelet 1231, a megfelelő sors-számjegyek pedig: Mátrixelem értéke 182 12 274 22 1 98 56 5 301 51 94 Sors-számjegy 2 3 4 4 1 8 2 5 4 6 4 A megoldásban fölhasználjátok a következő alprogramokat: a. a bemeneti adatok beolvasása billentyűzetről; b. adott számhoz rendelhető sors-számjegy meghatározása; c. a leghosszabb előszelet meghatározása; d. a leghosszabb előszelet kiírása a képernyőre; ha nincs előszelet, a megfelelő üzenet kiírása. Megjegyzések: 1. Minden tétel kidolgozása kötelező. 2. A megoldásokat a vizsgalapokra írjátok, (a piszkozatokat nem vesszük figyelembe). 3. Hivatalból jár 10 pont. 4. Rendelkezésetekre áll 3 óra.

BAREM VARIANTA I OFICIU... 10 puncte SUBIECTUL I... 35 puncte 1. Rază... 20 puncte Varianta 1: determinarea corectă a valorii nrschimb bazată pe utilizarea cmmdc(a, b)... 20 puncte cmmdc(a, b) (sau cmmmc(a,b))... 5 puncte calculul valorii nrschimb... 15 puncte Varianta 2: determinarea corectă a valorii nrschimb cu alt algoritm corect (simulare)... 15 puncte 2. Numere cu forță... 15 puncte stabilirea forței unui număr... 5 puncte determinarea numărului grupurilor de elemente cu aceeași forță (nrgr) și a componenței lor (grupuri)... 10 puncte SUBIECTUL II... 15 puncte Numărul numerelor Fibonacci mai mici decât numărul nr dat Cerința a. enunț problemă... 5 puncte Cerința b. rezultat calculat corect (7)... 3 puncte Cerința c. algoritm... 3 puncte autoapel corect... 2 puncte condiție de oprire din recursivitate... 2 puncte SUBIECTUL III... 40 puncte Prefix Subprograme: citirea datelor de intrare... 3 puncte determinarea cifrei de control asociată unui număr... 5 puncte determinarea celui mai lung prefix... 15 puncte afișarea celui mai lung prefix/mesaj... 3 puncte Program principal:... 3 puncte comunicare prin parametri: (signatura subalgorimilor și apelul corect)... 5 puncte lizibilitate: comentarii... 2 puncte indentare... 2 puncte denumiri sugestive... 2 puncte

UNIVERSITATEA BABEŞ-BOLYAI FACULTATEA DE MATEMATICĂ ŞI INFORMATICĂ Concurs Mate-Info - 1 aprilie 2017 Proba scrisă la Informatică VARIANTA I // SUBIECTUL I.1 //determina cmmdc a 2 numere a si b int cmmdc(int a, int b){ if ((a == b) && (a == 0)){ return 1; if (a * b == 0){ return a + b; while (a!= b){ if (a > b) a -= b; else b -= a; return a; // calcularea numărului de schimbări de direcție a razei int raza(int a, int b){ int nrschimb; int d = cmmdc(a, b); nrschimb = b / d + a / d - 2; return nrschimb; // SUBIECTUL I.2 const int MAXSIZE = 100; const int MAXCIF = 32; // calcularea fortei unui numar int calculforta(int nr){ int forta = 0; do{ nr &= nr - 1; // și logic intre nr si nr-1 forta++; while (nr); return forta; //gruparea numerelor pe clase de forta //grupurile se vor memora intr-un tablou bidimensional //fiecare linie i corespunde grupului de forta i //primul element de pe linia i reprezinta dimensiunea grupului de forta i //urmatoarele elemente sunt numerele din sirul x cu forta i void forte(int n, int x[], int &nrgr, int grupuri[][maxsize]){ for (int i = 1; i < MAXCIF; i++) // inițializarea tabloului grupuri grupuri[i][0] = 0; nrgr = 0; for (int i = 0; i < n; i++){ int forta = calculforta(x[i]); // determinarea forței elementului x[i] if (grupuri[forta][0] == 0) nrgr++; int pos = grupuri[forta][0] + 1; grupuri[forta][pos] = x[i]; grupuri[forta][0]++;

// SUBIECTUL II int frec(int a, int b, int nr){ if (b < nr) return frec(b, a + b, nr) + 1; // (*) else return 0; // SUBIECTUL III const int MAX = 100; const int NRMAXCIFRE = 10; //citirea unui numar void citirenumar(int &nr){ cin >> nr; //citirea elementelor unei matrici void citirematrice(int &m, int &n, int A[][MAX]){ cin >> m >> n; for (int i = 0; i < m; i++){ for (int j = 0; j < n; j++) cin >> A[i][j]; //citirea numarului si a elementelor din matrice void citiredate(int &nr, int &m, int &n, int A[][MAX]){ citirenumar(nr); citirematrice(m, n, A); //calcularea cifrei de control a unui numar int cifracontrol(int x){ while (x > 9){ int y = x; int s = 0; while (y > 0){ s += y % 10; y /= 10; x = s; return x;

//determinarea prefixului maxim //matricea se parcurgere o singură dată și se construiește un vector de apariții //pentru cifrele de control corespunzătoare elementelor din matrice. //Se rețin într - un vector cifrele numărului dat(nr). //Se parcurge vectorul acestor cifre(începând cu cifra cea mai semnificativă) și //se verifică apariția cifrelor în vectorul de apariții construit anterior int prefixmaxcifre(int nr, int m, int n, int A[][MAX], int cifre[], int &nrcifre){ bool aparitii[nrmaxcifre]; int i = 0; for (i = 0; i < 10; i++) // initializarea vectorului de frecvente aparitii[i] = 0; for (i = 0; i < m; i++){ for (int j = 0; j < n; j++){ aparitii[cifracontrol(a[i][j])] = 1; // aparitia cifrei de control // corespunzatoare elementelui din matricea A nrcifre = 0; // numarul cifrelor numarului nr dat while (nr > 0){ cifre[nrcifre++] = nr % 10; // elementele sirului cifrelor numarului nr dat nr /= 10; i = nrcifre - 1; // parcurgem sirul cifrelor while ((i >= 0) && (aparitii[cifre[i]])) // cifra de control = cu cifra curenta din nr i--; return nrcifre - i - 1; //se afiseaza prefixul maxim de lungime lung cu cifre din vectorul de cifre void afisareprefix(int lung, int cifre[], int nrcifre){ if (lung == 0) cout << "nu exista prefix"; for (int i = 0; (i < lung && i < nrcifre); i++) cout << cifre[nrcifre - i - 1]; cout << endl; int main(){ int nr = -1; int m = -1; int n = -1; int A[MAX][MAX]; citiredate(nr, m, n, A); int cifre[nrmaxcifre]; int nrcifre = 0; int lung = prefixmaxcifre(nr, m, n, A, cifre, nrcifre); afisareprefix(lung, cifre, nrcifre); return 0;