Контрольные задания > Определите значение переменной s после выполнения фрагмента программы при указанных значениях a. Фрагмент программы:
```
p:=a;
s:=0;
while p>0 do
begin
s:=s+p mod 10;
p:=p div 10;
end;
```
a = 23, a = 32, a = 109
Вопрос:
Определите значение переменной s после выполнения фрагмента программы при указанных значениях a. Фрагмент программы:
```
p:=a;
s:=0;
while p>0 do
begin
s:=s+p mod 10;
p:=p div 10;
end;
```
a = 23, a = 32, a = 109
Ответ:
Вот решение для каждого значения 'a', как если бы мы прогоняли программу вручную:
Случай 1: a = 23
| p | s | p > 0 |
| --- | --- | ----- |
| 23 | 0 | true |
| | 3 | |
| 2 | 3 | true |
| | 5 | |
| 0 | 5 | false |
Ответ: s = 5
Разъяснение:
1. `p` инициализируется значением `a` (23), `s` инициализируется нулем.
2. Первый цикл:
* `p mod 10` равно 3 (остаток от деления 23 на 10).
* `s` становится равным `s + 3 = 0 + 3 = 3`.
* `p` становится равным `p div 10 = 23 div 10 = 2` (целочисленное деление).
3. Второй цикл:
* `p mod 10` равно 2 (остаток от деления 2 на 10).
* `s` становится равным `s + 2 = 3 + 2 = 5`.
* `p` становится равным `p div 10 = 2 div 10 = 0` (целочисленное деление).
4. Цикл завершается, так как `p > 0` больше не является истиной.
5. Значение `s` равно 5.
Случай 2: a = 32
| p | s | p > 0 |
| --- | --- | ----- |
| 32 | 0 | true |
| | 2 | |
| 3 | 2 | true |
| | 5 | |
| 0 | 5 | false |
Ответ: s = 5
Разъяснение:
1. `p` инициализируется значением `a` (32), `s` инициализируется нулем.
2. Первый цикл:
* `p mod 10` равно 2 (остаток от деления 32 на 10).
* `s` становится равным `s + 2 = 0 + 2 = 2`.
* `p` становится равным `p div 10 = 32 div 10 = 3` (целочисленное деление).
3. Второй цикл:
* `p mod 10` равно 3 (остаток от деления 3 на 10).
* `s` становится равным `s + 3 = 2 + 3 = 5`.
* `p` становится равным `p div 10 = 3 div 10 = 0` (целочисленное деление).
4. Цикл завершается, так как `p > 0` больше не является истиной.
5. Значение `s` равно 5.
Случай 3: a = 109
| p | s | p > 0 |
| --- | --- | ----- |
| 109 | 0 | true |
| | 9 | |
| 10 | 9 | true |
| | 9 | |
| 1 | 9 | true |
| | 10 | |
| 0 | 10 | false |
Ответ: s = 10
Разъяснение:
1. `p` инициализируется значением `a` (109), `s` инициализируется нулем.
2. Первый цикл:
* `p mod 10` равно 9 (остаток от деления 109 на 10).
* `s` становится равным `s + 9 = 0 + 9 = 9`.
* `p` становится равным `p div 10 = 109 div 10 = 10` (целочисленное деление).
3. Второй цикл:
* `p mod 10` равно 0 (остаток от деления 10 на 10).
* `s` становится равным `s + 0 = 9 + 0 = 9`.
* `p` становится равным `p div 10 = 10 div 10 = 1` (целочисленное деление).
4. Третий цикл:
* `p mod 10` равно 1 (остаток от деления 1 на 10).
* `s` становится равным `s + 1 = 9 + 1 = 10`.
* `p` становится равным `p div 10 = 1 div 10 = 0` (целочисленное деление).
5. Цикл завершается, так как `p > 0` больше не является истиной.
6. Значение `s` равно 10.