Megoldások - 2025. aug.

II.1.d

Ciklusok átírása

Elöltesztelő ciklusból hátultesztelőbe:

Eredeti:

    ...
    amíg feltétel
    |    utasítások
    []
    ...

Átírva:

    ...
    ha felt. akkor
    |    végezd el
    |    |    uasítások
    |    |amíg feltétel
    |    []
    []
    ...

Vagy:

    ...
    ha felt. akkor
    |    ismételd
    |    |    ...
    |    |ameddig !(feltétel)
    |    []
    []
    ...

A d) alpont egy lehetséges megoldása:

    beolvas x,y (különböző term. számok)
    cx <- 0; cy <- 0
    ┌ha x≥10 vagy y≥10 akkor
    |   ┌végezd el
    |   │   ┌amíg x+y≠0 végezd el
    |   │   │   cx <- cx+x%10; x <- [x/10]
    |   │   │   cy <- cy+y%10; y <- [y/10]
    |   │   └■
    |   │   x <- cx; cx <- 0; y <- cy; cy <- 0
    |   │
    |   │amíg x≥10 vagy y≥10
    |   └■
    └■
    ┌ha x=y akkor kiír "DA ",x
    │különben kiír "NU ",x," ",y
    └■

Hátultesztelő ciklusból elöltesztelőbe:

Eredeti:

    végezd el
    |   utasítások
    |amíg feltétel
    []

Átírva (a belső utasításokat elvégezzük a ciklus előtt is):

    utasítások
    amíg feltétel v.e.
    |    utasítások
    []

II.3.

1
2
3
4
5
6
7
8
struct bijuterie
{
    int greutate;
    struct {
        char denumire[31];
        int pret;
    } metal;
} b;

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
#include <iostream>
#include <fstream>
using namespace std;

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

    int minZ, minP;
    fin >> minZ >> minP;

    int x;
    int poz = 0;

    int start = -1, sum = 0;
    bool volt = false;

    while (fin >> x) {
        poz++;

        if (x >= minZ) {
            if (start == -1) {
                start = poz;
                sum = x;
            }
            else {
                sum += x;
            }
        }
        else {
            // start ..... poz-1  -> poz-1 - start + 1 db elem
            //                       = poz - start db elem

            if (start != -1 && poz-start >= 2 && sum >= minP)
            {
                cout << start << " " << poz-1 << " " << sum << endl;
                volt = true;
            }

            start = -1;
        }
    }

    // start ... poz
    if (start != -1 && poz+1-start >= 2 && sum >= minP) {
        cout << start << " " << poz << " " << sum << endl;
        volt = true;
    }

    if (!volt)
        cout << "nu exista" << endl;

    return 0;
}