← Ко всем темам

🧮 Выражения C++ / Pascal: тип и значение

Считаешь по приоритету изнутри наружу, определяешь тип результата. Частая ловушка — целочисленное деление.

1. Правила, которые решают всё

ТемаC++Pascal
Деление/ двух int → int; с double → double/ → real; div → int
Остаток% только целые (float → ошибка)mod только целые
Код символаint('0')=48, int('9')=57ord('0')=48
Перечислениеenum{a,b,c,d} → 0,1,2,3ord(a)=0…
Отбросить дробь(int)x / trunctrunc(x)
Приоритет: скобки → функции (ord, trunc, sqrt, sqr) → * / div mod %+ − → сравнения → логические (and/&&, or/||).

2. Как определить ТИП результата

• целое op целое (включая div, mod, %) → целое (integer / int)

• есть деление / (Pascal) или вещественное число → вещественный (real / double)

• сравнение или логика → логический (boolean / bool)

3. Разбор примера (2024, вар.2)

Даны: a=2, b=4, x=7.87, zi=joi (перечисление, ord(joi)=3).
(a*ord(zi)>b) and (b<>x) → (2·3>4) and (4≠7.87) → True and True = True [boolean] b*trunc(x) − sqr(a) → 4·7 − 4 = 24 [integer] (ord('2')−ord('9')) div 3 → (50−57) div 3 = −7 div 3 = −2 [integer] sqrt(9*y)+2*ord(miercuri) → sqrt(36)+2·2 = 6+4 = 10 (y=4) [real]

4. ✍️ Задачи — определи значение и тип

1. int: a=2,b=4 → b*5 - a*a
показать
20 − 4 = 16, тип int
2. 17 % 5 и 17 / 5 (оба int)
показать
17 % 5 = 2; 17 / 5 = 3 (целочисленное!). Тип int
3. (int('a') - int('A'))
показать
97 − 65 = 32, тип int (строчные на 32 больше прописных)
4. (2025) enum vv{a,b,c,d}; w=c; x=(5>2). y=(d>w), s=sqr(ord(x)+3*ord(w))
показать
y = true (d=3 > w=2); s = sqr(1 + 3·2) = sqr(7) = 49
5. Тип выражения sqrt(25) + 2 ?
показать
5.0 + 2 = 7, но sqrt даёт double → тип double/real
6. (7 mod 2 = 1) and (−3 < 0) — значение и тип?
показать
True and True = True, тип boolean