Megoldások - 2023. simulare

III.2.

 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
#include <iostream>
#include <cstring>
using namespace std;

int main ()
{
    char s[250];
    char rez[250] = "";

    cin.getline(s, 101);

    char *p = strtok(s, " ");
    while (p != NULL) {
        if (p[strlen(p)-1] == '.') {
            if (p[0] == 'F')
                strcat(rez, "fam.");
            else if (p[0] == 'G')
                strcat(rez, "gen.");
            else
                strcat(rez, "spe.");
        }
        else {
            strcat(rez, p);
        }

        strcat(rez, " ");
        p = strtok(NULL, " ");
    }

    rez[strlen(rez)-1] = '\0';
    strcpy(s, rez);

    cout << s << endl;

    return 0;
}

III.3.

b)

 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
#include <iostream>
#include <fstream>
using namespace std;

int main ()
{
    ifstream fin("bac.txt");

    int maximum = -1;
    int elozo = -1;
    int poz = 0;

    int akt;
    while (fin >> akt) {
        poz++;

        if (akt >= maximum && akt != elozo) {
            cout << poz << " ";
            maximum = akt;
        }

        elozo = akt;
    }

    cout << endl;
    return 0;
}

a)

A program sorra veszi egyenként a fájl elemeit, közben nyilvántartja az előző elemet és az eddigi legnagyobb értéket. Kiírja azon elemek (1-től számozott) pozícióját, amelyek nem kisebbek az eddigi maximumnál és nem egyenlők az előttük levővel.

A program hatékony memória szempontjából, ugyanis nem tárolja el egyszerre a teljes sorozatot, konstans mennyiségű memóriát használ.

Idő szempontjából azért hatékony mert egyszer halad végig az elemeken, mindegyikre konstans számú műveletet végez el.