Felmérőre - szöveges fájlok, RLE

Anyag

Szerdán, 2024. nov. 27-én felmérő a következőkből:

Tétel

Munkaidő: 40 perc. Hivatalból 1 pont jár, helyes programszerkezet, indentálás és értelmes változónevek használatáért további 1 pont.

  1. A bemenet.txt nevű fájlból beolvassuk az a és b egész számokat. A kimenet.txt fájlba írjuk ki szóközzel elválasztva az [a,b] intervallum egész szám elemeit, vagy azt az üzenetet, hogy „ures” ha a > b (beolvasás 1p, helyes kimenet 1p).

Megoldás:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream be("bemenet.txt");
    ofstream ki("kimenet.txt");

    int a,b;
    be >> a >> b;

    if (a <= b) {
        for (int i = a; i <= b; i++)
            ki << i << " ";
        ki << endl;
    }
    else
        ki << "ures" << endl;

    return 0;
}
  1. Az input.txt fájlban adottak 1000-nél nem nagyobb pozitív egész számok, nem tudjuk előre, hogy hány darab (1p a helyes beolvasásért). A konzolablakba írjuk ki a következő statisztikai adatokat:
    • Hány szám volt a fájlban? – 1p
    • Mennyi a legkisebb és legnagyobb érték? – 1p
    • Mennyi az elemek átlaga? – 1p

Megoldás:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <fstream>
#include <climits>
using namespace std;

int main()
{
    ifstream be("input.txt");

    int db = 0;
    int s = 0;

    int maximum = INT_MIN;
    int minimum = INT_MAX;

    int szam;
    while (be >> szam) {
        db++;

        s = s + szam;

        if (szam > maximum)
            maximum = szam;

        if (szam < minimum)
            minimum = szam;
    }

    cout << db << endl;
    cout << minimum << " " << maximum << endl;

    cout << (double) s / db << endl;

    return 0;
}
  1. Az input.txt fájlban adott egy n pozitív egész, majd egy n elemű sorozat. Írjuk ki a konzolablakba annak a leghosszabb sorozatrésznek a hosszát, amely csak 3-as számjegyre végződő elemekből áll, illetve azt, hogy hányadik elemnél kezdődik ez (0.5p a beolvasás, 1p a hossz, 0.5p a kezdőpozíció).

Megoldás:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream be("input.txt");

    int n;
    be >> n;

    int maxdb = 0;
    int maxelso = -1;

    int db = 0;
    int akt_elso = -1;

    for (int i = 1; i <= n; i++) {
        int szam;
        be >> szam;

        if (szam % 10 == 3) {
            db++;
            if (db == 1)
                akt_elso = i;
        }
        else {
            if (db > maxdb) {
                maxdb = db;
                maxelso = akt_elso;
            }

            db = 0;
        }
    }

    if (db > maxdb){
        maxdb = db;
        maxelso = akt_elso;
    }

    cout << maxdb << endl;
    cout << maxelso << endl;

    return 0;
}

Vagy:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    ifstream be("input.txt");

    int n;
    be >> n;

    int maxdb = 0;
    int max_utolso = -1;

    int db = 0;

    for (int i = 1; i <= n; i++) {
        int szam;
        be >> szam;

        if (szam % 10 == 3) {
            db++;

        }
        else {
            if (db > maxdb) {
                maxdb = db;
                max_utolso = i-1;
            }

            db = 0;
        }
    }

    if (db > maxdb){
        maxdb = db;
        max_utolso = n;
    }

    cout << maxdb << endl;
    cout << max_utolso - maxdb + 1 << endl;

    return 0;
}