Соотнеси фрагменты кода и категории.
Кто-то перепутал наши программы! Помоги разложить их по папкам.
Программа печатает строку
Программа печатает число
Интерпретатор выдаёт ошибку
Всего: 17 1–17
Добавить в вариант
Задания Д24 C1 № 5532
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG INPUT N sum = 0 WHILE N >= 9 digit = N MOD 10 sum = sum + digit N = N 10 WEND PRINT sum END |
var N: longint; digit, sum: integer; begin readln(N); sum := 0; while N >= 9 do begin digit := N mod 10; sum := sum + digit; N := N div 10; end; writeln(sum); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N; int digit, sum; cin >> N; sum = 0; while (N >= 9) { digit = N % 10; sum = sum + digit; N = N / 10; } cout « sum « endl; } |
алг нач цел N, digit, sum ввод N sum := 0 нц пока N >= 9 digit := mod(N, 10) sum := sum + digit N := div(N, 10) кц вывод sum кон |
Python | |
n = int(input()) sum = 0 while n >= 9: digit = n % 10 sum += digit n //=10; print(sum) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 352.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
3. Укажите одно число для которого эта программа будет работать верно.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 3.
Задания Д24 C1 № 5468
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG DIM product AS LONG INPUT N product = N mod 10 WHILE N >= 10 digit = N MOD 10 product = product*digit N = N 10 WEND PRINT product END |
var N, product: longint; digit: integer; begin readln(N); product := N mod 10; while N >= 10 do begin digit := N mod 10; product := product*digit; N := N div 10; end; writeln(product); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N, product; int digit; cin >> N; product = N % 10; while (N >= 10) { digit = N % 10; product = product*digit; N = N / 10; } cout << product; } |
алг нач цел N, digit, product ввод N product := mod(N, 10) нц пока N >= 10 digit := mod(N, 10) product := product*digit N := div(N, 10) кц вывод product кон |
Python | |
n = int(input()) product = n % 10 while n >= 10: digit = n % 10 product = product*digit n //= 10 print(product) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 532.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 1.
Задания Д24 C1 № 5500
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG INPUT N max_digit = 9 WHILE N > 9 digit = N MOD 10 IF max_digit < digit THEN max_digit = digit END IF N = N 10 WEND PRINT max digit END |
var N: longint; digit, max_digit: integer; begin readln(N); max_digit := 9; while N > 9 do begin digit := N mod 10; if max_digit < digit then max_digit := digit; N := N div 10; end; writeln(max_digit); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N; int digit, max_digit; cin >> N; max_digit = 9; while (N > 9) { digit = N % 10; if (max_digit < digit) max_digit = digit; N = N /10; } cout « max_digit « endl; } |
алг нач цел N, digit, max_digit ввод N max_digit := 9 нц пока N > 9 digit := mod(N, 10) если max_digit < digit то max_digit := digit все N := div(N, 10) кц вывод max_digit кон |
Python | |
n = int(input()) max_digit = 9 while n > 9: digit = n % 10 if max_digit < digit: max_digit = digit n //= 10; print(max_digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 738.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 1., ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 2., ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 3., ЕГЭ по информатике 30.05.2013. Основная волна. Урал. Вариант 4.
Задания Д24 C1 № 5596
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится произведение цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG DIM product AS LONG INPUT N product = 0 WHILE N >= 10 digit = N MOD 10 product = product*digit N = N 10 WEND PRINT product END |
var N, product: longint; digit: integer; begin readln(N); product := 0; while N >= 10 do begin digit := N mod 10; product := product*digit; N := N div 10; end; writeln(product); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N, product; int digit; cin >> N; product = 0; while (N >= 10) { digit = N % 10; product = product*digit; N = N / 10; } cout << product; } |
алг нач цел N, digit, product ввод N product := 0 нц пока N >= 10 digit := mod(N, 10) product := product*digit N := div(N, 10) кц вывод product кон |
Python | |
n = int(input()) product = 0 while n >= 10: digit = n % 10 product = product*digit n //= 10 print(product) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 429.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 2.
Задания Д24 C1 № 5692
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG INPUT N max_digit = 10 WHILE N >= 10 digit = N MOD 10 IF max_digit < digit THEN max_digit = digit END IF N = N 10 WEND PRINT max_digit END |
var N: longint; digit, max_digit: integer; begin readln(N); max_digit := 10; while N >= 10 do begin digit := N mod 10; if max_digit < digit then max_digit := digit; N := N div 10; end; writeln(max_digit); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main () { long int N; int digit, max_digit; cin >> N; max digit = 10; while (N >= 10) { digit = N % 10; if (max_digit < digit) max_digit = digit; N = N / 10; } cout « max_digit « endl; } |
алг нач цел N, digit, max_digit ввод N max_digit := 10 нц пока N >= 10 digit := mod(N, 10) если max_digit < digit то max_digit := digit все N := div(N, 10) кц вывод max_digit кон |
Python | |
n = int(input()) max_digit = 10 while n >= 10: digit = n % 10 if max_digit < digit: max_digit = digit n //= 10 print(max_digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 528.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Сибирь. Вариант 5.
Задания Д24 C1 № 6014
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится максимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM N AS LONG INPUT N max_digit = 9 WHILE N >= 10 digit = N MOD 10 IF digit > max_digit THEN max_digit = digit END IF N = N 10 WEND PRINT max_digit END |
var N: longint; digit, max_digit: integer; begin readln(N); max_digit := 9; while N >= 10 do begin digit := N mod 10; if digit > max_digit then max_digit := digit; N := N div 10; end; writeln(max_digit); end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { long int N; int digit, max_digit; cin >> N; max_digit = 9; while (N >= 10) { digit = N % 10; if (digit > max_digit) max_digit = digit; N = N /10; } cout « max_digit « endl; } |
алг нач цел N, digit, max_digit ввод N max_digit := 9 нц пока N >= 10 digit := mod(N, 10) если digit > max_digit то max_digit := digit все N := div(N, 10) кц вывод max_digit кон |
Python | |
n = int(input()) max_digit = 9 while n >= 10: digit = n % 10 if digit > max_digit: max_digit = digit n //= 10 print(max_digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 423.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: Демонстрационная версия ЕГЭ—2014 по информатике.
Задания Д24 C1 № 5372
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM N AS LONG INPUT N sum = 1 WHILE N > 1 N = N 10 sum = sum + 1 WEND PRINT sum END |
var N: longint; sum: integer; begin readln(N); sum := 1; while N > 1 do begin N := N div 10; sum := sum + 1; end; writeln(sum); end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { long int N; int sum; cin >> N; sum = 1; while (N > 1) { N = N /10; sum = sum + 1; } cout « sum « endl; } |
алг нач цел N, sum ввод N sum := 1 нц пока N > 1 N := div(N, 10) sum := sum + 1 кц вывод sum кон |
Python | |
n = int(input()) sum = 1 while n > 1: n //= 10 sum += 1 print(sum) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 938.
2. Укажите одно число для которого эта программа будет работать верно.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 1.
Задания Д24 C1 № 6199
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится сумма чётных цифр в десятичной записи этого числа или 0, если чётных цифр в записи нет. Ученик написал такую программу:
Бейсик | Паскаль |
---|---|
DIM N AS LONG INPUT N S = 0 WHILE N > 1 IF N MOD 2 = 0 S = N MOD 10 END IF N = N 10 WEND PRINT S END |
var N: longint; s: integer; begin readln(N); s := 0; while N > 1 do begin if N mod 2 = 0 then begin s := N mod 10; end; N := N div 10; end; write(s); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N; int s; cin >> N; s = 0; while (N > 1) { if (N%2 == 0) { s = N % 10; } N = N / 10; } cout « s « endl; } |
алг нач цел N, s ввод N s := 0 нц пока N > 1 если mod(N,2) = 0 то s := mod(N,10) все N := div(N,10) кц вывод s кон |
Python | |
N = int(input()) s = 0 while N > 1: if N % 2 == 0: s = N % 10 N //= 10 print(s) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 1984.
2.Приведите пример числа, при вводе которого программа выдаст верный ответ.
3. Найдите в программе все ошибки (их может быть одна или несколько).
Для каждой ошибки выпишите строку, в которой она допущена, и приведите эту же строку в исправленном виде. Обратите внимание: вам нужно исправить приведённую программу, а не написать свою. Вы можете только заменять ошибочные строки, но не можете удалять строки или добавлять новые. Заменять следует только ошибочные строки: за исправления, внесённые в строки, не содержащие ошибок, баллы будут снижаться.
Задания Д24 C1 № 7796
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество единиц в двоичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на пяти языках программирования.)
Бейсик | Python |
---|---|
INPUT x cnt = 0 WHILE x > 0 cnt = cnt + 1 x = x MOD 2 WEND PRINT cnt END |
x = int(input()) cnt = 0 while x > 0: cnt = cnt+1 x = x % 2 print(cnt) |
Паскаль | Алгоритмический язык |
var x,cnt: integer; begin readln(x); cnt := 0; while x > 0 do begin cnt:=cnt + 1; x := x mod 2 end; writeln(cnt) end. |
алг нач цел x, cnt ввод x cnt := 0 нц пока x > 0 cnt := cnt+1 x := mod(x, 2) кц вывод cnt кон |
Си++ | |
#include <iostream> using namespace std; int main() { int x,cnt; cin >> x; cnt = 0; while (x > 0) { cnt = cnt + 1; x = x % 2; } cout « cnt « endl; } |
Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 6.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк. Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Задания Д24 C1 № 5884
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG INPUT N min_digit = 9 WHILE N >= 10 digit = N MOD 10 IF digit < min_digit THEN digit = min_digit END IF N = N 10 WEND PRINT min_digit END |
var N: longint; digit, min_digit: integer; begin readln(N); min_digit := 9; while N >= 10 do begin digit := N mod 10; if digit < min_digit then digit := min_digit; N := N div 10; end; writeln(min_digit); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N; int digit, min_digit; cin >> N; min_digit = 9; while (N >= 10) { digit = N % 10; if (digit < min_digit) digit = min_digit; N = N / 10; } cout << min_digit << endl; } |
алг нач цел N, digit, min_digit ввод N min_digit := 9 нц пока N >= 10 digit := mod(N, 10) если digit < min_digit то digit := min_digit все N := div(N, 10) кц вывод min_digit кон |
Python | |
n = int(input()) min_digit = 9 while n >= 10: digit = n % 10 if digit < min_digit: digit = min_digit n //= 10 print(min_digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 823.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 2.
Задания Д24 C1 № 5948
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG INPUT N min_digit = 0 WHILE N > 0 digit = N MOD 10 IF digit < min_digit THEN min_digit = digit END IF N = N 10 WEND PRINT digit END |
var N: longint; digit, min_digit: integer; begin readln(N); min_digit := 0; while N > 0 do begin digit := N mod 10; if digit < min_digit then min_digit := digit; N := N div 10; end; writeln(digit); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int N; int digit, min_digit; cin >> N; min_digit = 0; while (N > 0) { digit = N % 10; if (digit < min_digit) min_digit = digit; N = N / 10; } cout « digit « endl; } |
алг нач цел N, digit, min_digit ввод N min_digit := 0 нц пока N > 0 digit := mod(N, 10) если digit < min_digit то min_digit := digit все N := div(N, 10) кц вывод digit кон |
Python | |
n = int(input()) min_digit = 0 while n > 0: digit = n % 10 if digit < min_digit: min_digit = digit n //= 10 print(digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 862.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 4.
Задания Д24 C1 № 9659
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число A, не превосходящее 109, и выводится произведение его цифр. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM A AS LONG DIM pr AS LONG INPUT A pr = 0 WHILE A >= 10 pr = pr * (A MOD 10) A = A 10 WEND PRINT pr END |
var A,pr: longint; begin readln(A); pr := 0; while A >= 10 do begin pr:=pr * (A mod 10); A := A div 10; end; writeln(pr); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int A,pr; cin >> A; pr = 0; while (A >= 10) { pr = pr * (A%10); A = A /10; } cout « pr « endl; } |
алг нач цел A, pr ввод A pr := 0 нц пока A >= 10 pr := pr * mod (A, 10) A := div(A, 10) кц вывод pr кон |
Python | |
A = int(input()) pr = 0 while A >= 10: pr = pr * (A % 10) A //= 10 print(pr) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 123.
2. Найдите все ошибки в этой программе (их может быть одна или несколько).
Для каждой ошибки:
а) выпишите строку, в которой сделана ошибка;
б) укажите, как исправить ошибку: приведите правильный вариант строки.
Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Задания Д24 C1 № 5436
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится количество цифр этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования).
Бейсик | Паскаль |
---|---|
DIM N AS LONG INPUT N sum = 0 WHILE N >= 9 N = N 10 sum = sum + 1 WEND PRINT sum END |
var N: longint; sum: integer; begin readln(N); sum := 0; while N >= 9 do begin N := N div 10; sum := sum + 1; end; writeln(sum); end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { long int N; int sum; cin >> N; sum = 0; while (N >= 9) { N = N / 10; sum = sum + 1; } cout « sum « endl; } |
алг нач цел N, sum ввод N sum := 0 нц пока N >= 9 N := div(N, 10) sum := sum + 1 кц вывод sum кон |
Python | |
N = int(input()) sum = 0 while N >= 9: N //= 10 sum += 1 print(sum) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 584.
2. Укажите одно число для которого эта программа будет работать верно.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Укажите все строки (одну или более), содержащие ошибки, и для каждой такой строки приведите правильный вариант.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Дальний Восток. Вариант 4.
Задания Д24 C1 № 5852
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бэйсик | Паскаль |
---|---|
DIM N AS LONG INPUT N min_digit = 0 WHILE N > 0 digit = N MOD 10 IF digit > min_digit THEN min_digit = digit END IF N = N 10 WEND PRINT min_digit END |
var N: longint; digit, min_digit: integer; begin readln(N); min_digit := 0; while N > 0 do begin digit := N mod 10; if digit > min_digit then min_digit := digit; N := N div 10; end; writeln(min_digit); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main () { long int N; int digit, min_digit; cin >> N; min_digit = 0; while (N > 0) { digit = N % 10; if (digit > min_digit) min_digit = digit; N = N / 10; } cout « min_digit « endl; } |
алг нач цел N, digit, min_digit ввод N min_digit := 0 нц пока N > 0 digit := mod(N, 10) если digit > min_digit то min_digit := digit все N := div(N, 10) кц вывод min_digit кон |
Python | |
N = int(input()) min_digit = 0 while N > 0: digit = N % 10 if digit > min_digit: min_digit = digit N //= 10; print(min_digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 461.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 1.
Задания Д24 C1 № 5980
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число N, не превосходящее 109, и выводится минимальная цифра этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM N AS LONG INPUT N min_digit = 9 WHILE N >= 10 digit = N MOD 10 IF digit < min_digit THEN min_digit = digit END IF N = N 10 WEND PRINT digit END |
var N: longint; digit, min_digit: integer; begin readln(N); min_digit := 9; while N >= 10 do begin digit := N mod 10; if digit < min_digit then min_digit := digit; N := N div 10; end; writeln(digit); end. |
Си++ | Алгоритмический |
#include <iostream> using namespace std; int main() { long int N; int digit, min_digit; cin >> N; min_digit = 9; while (N >= 10) { digit = N % 10; if (digit < min_digit) min_digit = digit; N = N / 10; } cout « digit « endl; } |
алг нач цел N, digit, min_digit ввод N min_digit := 9 нц пока N >= 10 digit := mod(N, 10) если digit < min_digit то min_digit := digit все N := div(N, 10) кц вывод digit кон |
Python | |
N = int(input()) min_digit = 9 while N >= 10: digit = N % 10 if digit < min_digit: min_digit = digit N //= 10 print(digit) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 547.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, — приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Источник: ЕГЭ по информатике 30.05.2013. Основная волна. Центр. Вариант 5.
Задания Д24 C1 № 7769
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число x, не превосходящее 1000, и выводится количество значащих цифр в двоичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на пяти языках программирования.)
Бейсик | Python |
---|---|
INPUT x cnt = 0 WHILE x > 0 cnt = cnt + x MOD 2 x = x 10 WEND PRINT cnt END |
x = int(input()) cnt = 0 while x > 0: cnt = cnt+x % 2 x = x // 10 print(cnt) |
Паскаль | Алгоритмический язык |
var x,cnt: integer; begin readln(x); cnt := 0; while x > 0 do begin cnt:=cnt + x mod 2; x := x div 10 end; writeln(cnt); end. |
алг нач цел x, cnt ввод x cnt := 0 нц пока x > 0 cnt := cnt+mod(x,2) x := div(x, 10) кц вывод cnt кон |
Си++ | |
#include <iostream> using namespace std; int main() { int x,cnt; cin >> x; cnt = 0; while (x > 0) { cnt = cnt + x%2; x = x /10; } cout « cnt « endl; } |
Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 15.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.
Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т. е. приведите правильный вариант строки.
Достаточно указать ошибки и способ их исправления для одного языка программирования. Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Задания Д24 C1 № 9705
Требовалось написать программу, при выполнении которой с клавиатуры считывается натуральное число A, не превосходящее 109, и выводится количество цифр в десятичной записи этого числа. Программист торопился и написал программу неправильно. (Ниже для Вашего удобства программа представлена на четырёх языках программирования.)
Бейсик | Паскаль |
---|---|
DIM A AS LONG INPUT A cnt = 0 WHILE A > 1 cnt = cnt + A MOD 10 A = A 10 WEND PRINT cnt END |
var A: longint; cnt: integer; begin readln(A); cnt := 0; while A > 1 do begin cnt:=cnt + A mod 10; A := A div 10; end; writeln(cnt); end. |
Си++ | Алгоритмический язык |
#include <iostream> using namespace std; int main() { long int A; int cnt; cin >> A; cnt = 0; while (A > 1) { cnt = cnt + A%10; A = A /10; } cout « cnt « endl; } |
алг нач цел A, cnt ввод A cnt := 0 нц пока A > 1 cnt := cnt + mod(A, 10) A := div(A, 10) кц вывод cnt кон |
Python | |
A = int(input()) cnt = 0 while A > 1: cnt += A % 10 A //= 10 print(cnt) |
Последовательно выполните следующее.
1. Напишите, что выведет эта программа при вводе числа 111.
2. Найдите все ошибки в этой программе (их может быть одна или несколько). Для каждой ошибки:
а) выпишите строку, в которой сделана ошибка;
б) укажите, как исправить ошибку: приведите правильный вариант строки.
Обратите внимание на то, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.
Всего: 17 1–17
Обработка ошибок увеличивает отказоустойчивость кода, защищая его от потенциальных сбоев, которые могут привести к преждевременному завершению работы.
Прежде чем переходить к обсуждению того, почему обработка исключений так важна, и рассматривать встроенные в Python исключения, важно понять, что есть тонкая грань между понятиями ошибки и исключения.
Ошибку нельзя обработать, а исключения Python обрабатываются при выполнении программы. Ошибка может быть синтаксической, но существует и много видов исключений, которые возникают при выполнении и не останавливают программу сразу же. Ошибка может указывать на критические проблемы, которые приложение и не должно перехватывать, а исключения — состояния, которые стоит попробовать перехватить. Ошибки — вид непроверяемых и невозвратимых ошибок, таких как OutOfMemoryError
, которые не стоит пытаться обработать.
Обработка исключений делает код более отказоустойчивым и помогает предотвращать потенциальные проблемы, которые могут привести к преждевременной остановке выполнения. Представьте код, который готов к развертыванию, но все равно прекращает работу из-за исключения. Клиент такой не примет, поэтому стоит заранее обработать конкретные исключения, чтобы избежать неразберихи.
Ошибки могут быть разных видов:
- Синтаксические
- Недостаточно памяти
- Ошибки рекурсии
- Исключения
Разберем их по очереди.
Синтаксические ошибки (SyntaxError)
Синтаксические ошибки часто называют ошибками разбора. Они возникают, когда интерпретатор обнаруживает синтаксическую проблему в коде.
Рассмотрим на примере.
a = 8
b = 10
c = a b
File "", line 3
c = a b
^
SyntaxError: invalid syntax
Стрелка вверху указывает на место, где интерпретатор получил ошибку при попытке исполнения. Знак перед стрелкой указывает на причину проблемы. Для устранения таких фундаментальных ошибок Python будет делать большую часть работы за программиста, выводя название файла и номер строки, где была обнаружена ошибка.
Недостаточно памяти (OutofMemoryError)
Ошибки памяти чаще всего связаны с оперативной памятью компьютера и относятся к структуре данных под названием “Куча” (heap
). Если есть крупные объекты (или) ссылки на подобные, то с большой долей вероятности возникнет ошибка OutofMemory
. Она может появиться по нескольким причинам:
- Использование 32-битной архитектуры Python (максимальный объем выделенной памяти невысокий, между 2 и 4 ГБ);
- Загрузка файла большого размера;
- Запуск модели машинного обучения/глубокого обучения и много другое;
Обработать ошибку памяти можно с помощью обработки исключений — резервного исключения. Оно используется, когда у интерпретатора заканчивается память и он должен немедленно остановить текущее исполнение. В редких случаях Python вызывает OutofMemoryError
, позволяя скрипту каким-то образом перехватить самого себя, остановить ошибку памяти и восстановиться.
Но поскольку Python использует архитектуру управления памятью из языка C (функция malloc()
), не факт, что все процессы восстановятся — в некоторых случаях MemoryError
приведет к остановке. Следовательно, обрабатывать такие ошибки не рекомендуется, и это не считается хорошей практикой.
Ошибка рекурсии (RecursionError)
Эта ошибка связана со стеком и происходит при вызове функций. Как и предполагает название, ошибка рекурсии возникает, когда внутри друг друга исполняется много методов (один из которых — с бесконечной рекурсией), но это ограничено размером стека.
Все локальные переменные и методы размещаются в стеке. Для каждого вызова метода создается стековый кадр (фрейм), внутрь которого помещаются данные переменной или результат вызова метода. Когда исполнение метода завершается, его элемент удаляется.
Чтобы воспроизвести эту ошибку, определим функцию recursion
, которая будет рекурсивной — вызывать сама себя в бесконечном цикле. В результате появится ошибка StackOverflow
или ошибка рекурсии, потому что стековый кадр будет заполняться данными метода из каждого вызова, но они не будут освобождаться.
def recursion():
return recursion()
recursion()
---------------------------------------------------------------------------
RecursionError Traceback (most recent call last)
in
----> 1 recursion()
in recursion()
1 def recursion():
----> 2 return recursion()
... last 1 frames repeated, from the frame below ...
in recursion()
1 def recursion():
----> 2 return recursion()
RecursionError: maximum recursion depth exceeded
Ошибка отступа (IndentationError)
Эта ошибка похожа по духу на синтаксическую и является ее подвидом. Тем не менее она возникает только в случае проблем с отступами.
Пример:
for i in range(10):
print('Привет Мир!')
File "", line 2
print('Привет Мир!')
^
IndentationError: expected an indented block
Исключения
Даже если синтаксис в инструкции или само выражение верны, они все равно могут вызывать ошибки при исполнении. Исключения Python — это ошибки, обнаруживаемые при исполнении, но не являющиеся критическими. Скоро вы узнаете, как справляться с ними в программах Python. Объект исключения создается при вызове исключения Python. Если скрипт не обрабатывает исключение явно, программа будет остановлена принудительно.
Программы обычно не обрабатывают исключения, что приводит к подобным сообщениям об ошибке:
Ошибка типа (TypeError)
a = 2
b = 'PythonRu'
a + b
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
in
1 a = 2
2 b = 'PythonRu'
----> 3 a + b
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Ошибка деления на ноль (ZeroDivisionError)
10 / 0
---------------------------------------------------------------------------
ZeroDivisionError Traceback (most recent call last)
in
----> 1 10 / 0
ZeroDivisionError: division by zero
Есть разные типы исключений в Python и их тип выводится в сообщении: вверху примеры TypeError
и ZeroDivisionError
. Обе строки в сообщениях об ошибке представляют собой имена встроенных исключений Python.
Оставшаяся часть строки с ошибкой предлагает подробности о причине ошибки на основе ее типа.
Теперь рассмотрим встроенные исключения Python.
Встроенные исключения
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- StopAsyncIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
| +-- ModuleNotFoundError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
| +-- RecursionError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
Прежде чем переходить к разбору встроенных исключений быстро вспомним 4 основных компонента обработки исключения, как показано на этой схеме.
Try
: он запускает блок кода, в котором ожидается ошибка.Except
: здесь определяется тип исключения, который ожидается в блокеtry
(встроенный или созданный).Else
: если исключений нет, тогда исполняется этот блок (его можно воспринимать как средство для запуска кода в том случае, если ожидается, что часть кода приведет к исключению).Finally
: вне зависимости от того, будет ли исключение или нет, этот блок кода исполняется всегда.
В следующем разделе руководства больше узнаете об общих типах исключений и научитесь обрабатывать их с помощью инструмента обработки исключения.
Ошибка прерывания с клавиатуры (KeyboardInterrupt)
Исключение KeyboardInterrupt
вызывается при попытке остановить программу с помощью сочетания Ctrl + C
или Ctrl + Z
в командной строке или ядре в Jupyter Notebook. Иногда это происходит неумышленно и подобная обработка поможет избежать подобных ситуаций.
В примере ниже если запустить ячейку и прервать ядро, программа вызовет исключение KeyboardInterrupt
. Теперь обработаем исключение KeyboardInterrupt
.
try:
inp = input()
print('Нажмите Ctrl+C и прервите Kernel:')
except KeyboardInterrupt:
print('Исключение KeyboardInterrupt')
else:
print('Исключений не произошло')
Исключение KeyboardInterrupt
Стандартные ошибки (StandardError)
Рассмотрим некоторые базовые ошибки в программировании.
Арифметические ошибки (ArithmeticError)
- Ошибка деления на ноль (Zero Division);
- Ошибка переполнения (OverFlow);
- Ошибка плавающей точки (Floating Point);
Все перечисленные выше исключения относятся к классу Arithmetic
и вызываются при ошибках в арифметических операциях.
Деление на ноль (ZeroDivisionError)
Когда делитель (второй аргумент операции деления) или знаменатель равны нулю, тогда результатом будет ошибка деления на ноль.
try:
a = 100 / 0
print(a)
except ZeroDivisionError:
print("Исключение ZeroDivisionError." )
else:
print("Успех, нет ошибок!")
Исключение ZeroDivisionError.
Переполнение (OverflowError)
Ошибка переполнение вызывается, когда результат операции выходил за пределы диапазона. Она характерна для целых чисел вне диапазона.
try:
import math
print(math.exp(1000))
except OverflowError:
print("Исключение OverFlow.")
else:
print("Успех, нет ошибок!")
Исключение OverFlow.
Ошибка утверждения (AssertionError)
Когда инструкция утверждения не верна, вызывается ошибка утверждения.
Рассмотрим пример. Предположим, есть две переменные: a
и b
. Их нужно сравнить. Чтобы проверить, равны ли они, необходимо использовать ключевое слово assert
, что приведет к вызову исключения Assertion
в том случае, если выражение будет ложным.
try:
a = 100
b = "PythonRu"
assert a == b
except AssertionError:
print("Исключение AssertionError.")
else:
print("Успех, нет ошибок!")
Исключение AssertionError.
Ошибка атрибута (AttributeError)
При попытке сослаться на несуществующий атрибут программа вернет ошибку атрибута. В следующем примере можно увидеть, что у объекта класса Attributes
нет атрибута с именем attribute
.
class Attributes(obj):
a = 2
print(a)
try:
obj = Attributes()
print(obj.attribute)
except AttributeError:
print("Исключение AttributeError.")
2
Исключение AttributeError.
Ошибка импорта (ModuleNotFoundError)
Ошибка импорта вызывается при попытке импортировать несуществующий (или неспособный загрузиться) модуль в стандартном пути или даже при допущенной ошибке в имени.
import nibabel
---------------------------------------------------------------------------
ModuleNotFoundError Traceback (most recent call last)
in
----> 1 import nibabel
ModuleNotFoundError: No module named 'nibabel'
Ошибка поиска (LookupError)
LockupError
выступает базовым классом для исключений, которые происходят, когда key
или index
используются для связывания или последовательность списка/словаря неверна или не существует.
Здесь есть два вида исключений:
- Ошибка индекса (
IndexError
); - Ошибка ключа (
KeyError
);
Ошибка ключа
Если ключа, к которому нужно получить доступ, не оказывается в словаре, вызывается исключение KeyError
.
try:
a = {1:'a', 2:'b', 3:'c'}
print(a[4])
except LookupError:
print("Исключение KeyError.")
else:
print("Успех, нет ошибок!")
Исключение KeyError.
Ошибка индекса
Если пытаться получить доступ к индексу (последовательности) списка, которого не существует в этом списке или находится вне его диапазона, будет вызвана ошибка индекса (IndexError: list index out of range python).
try:
a = ['a', 'b', 'c']
print(a[4])
except LookupError:
print("Исключение IndexError, индекс списка вне диапазона.")
else:
print("Успех, нет ошибок!")
Исключение IndexError, индекс списка вне диапазона.
Ошибка памяти (MemoryError)
Как уже упоминалось, ошибка памяти вызывается, когда операции не хватает памяти для выполнения.
Ошибка имени (NameError)
Ошибка имени возникает, когда локальное или глобальное имя не находится.
В следующем примере переменная ans
не определена. Результатом будет ошибка NameError
.
try:
print(ans)
except NameError:
print("NameError: переменная 'ans' не определена")
else:
print("Успех, нет ошибок!")
NameError: переменная 'ans' не определена
Ошибка выполнения (Runtime Error)
Ошибка «NotImplementedError»
Ошибка выполнения служит базовым классом для ошибки NotImplemented
. Абстрактные методы определенного пользователем класса вызывают это исключение, когда производные методы перезаписывают оригинальный.
class BaseClass(object):
"""Опередляем класс"""
def __init__(self):
super(BaseClass, self).__init__()
def do_something(self):
# функция ничего не делает
raise NotImplementedError(self.__class__.__name__ + '.do_something')
class SubClass(BaseClass):
"""Реализует функцию"""
def do_something(self):
# действительно что-то делает
print(self.__class__.__name__ + ' что-то делает!')
SubClass().do_something()
BaseClass().do_something()
SubClass что-то делает!
---------------------------------------------------------------------------
NotImplementedError Traceback (most recent call last)
in
14
15 SubClass().do_something()
---> 16 BaseClass().do_something()
in do_something(self)
5 def do_something(self):
6 # функция ничего не делает
----> 7 raise NotImplementedError(self.__class__.__name__ + '.do_something')
8
9 class SubClass(BaseClass):
NotImplementedError: BaseClass.do_something
Ошибка типа (TypeError)
Ошибка типа вызывается при попытке объединить два несовместимых операнда или объекта.
В примере ниже целое число пытаются добавить к строке, что приводит к ошибке типа.
try:
a = 5
b = "PythonRu"
c = a + b
except TypeError:
print('Исключение TypeError')
else:
print('Успех, нет ошибок!')
Исключение TypeError
Ошибка значения (ValueError)
Ошибка значения вызывается, когда встроенная операция или функция получают аргумент с корректным типом, но недопустимым значением.
В этом примере встроенная операция float
получат аргумент, представляющий собой последовательность символов (значение), что является недопустимым значением для типа: число с плавающей точкой.
try:
print(float('PythonRu'))
except ValueError:
print('ValueError: не удалось преобразовать строку в float: 'PythonRu'')
else:
print('Успех, нет ошибок!')
ValueError: не удалось преобразовать строку в float: 'PythonRu'
Пользовательские исключения в Python
В Python есть много встроенных исключений для использования в программе. Но иногда нужно создавать собственные со своими сообщениями для конкретных целей.
Это можно сделать, создав новый класс, который будет наследовать из класса Exception
в Python.
class UnAcceptedValueError(Exception):
def __init__(self, data):
self.data = data
def __str__(self):
return repr(self.data)
Total_Marks = int(input("Введите общее количество баллов: "))
try:
Num_of_Sections = int(input("Введите количество разделов: "))
if(Num_of_Sections < 1):
raise UnAcceptedValueError("Количество секций не может быть меньше 1")
except UnAcceptedValueError as e:
print("Полученная ошибка:", e.data)
Введите общее количество баллов: 10
Введите количество разделов: 0
Полученная ошибка: Количество секций не может быть меньше 1
В предыдущем примере если ввести что-либо меньше 1, будет вызвано исключение. Многие стандартные исключения имеют собственные исключения, которые вызываются при возникновении проблем в работе их функций.
Недостатки обработки исключений в Python
У использования исключений есть свои побочные эффекты, как, например, то, что программы с блоками try-except работают медленнее, а количество кода возрастает.
Дальше пример, где модуль Python timeit
используется для проверки времени исполнения 2 разных инструкций. В stmt1
для обработки ZeroDivisionError
используется try-except, а в stmt2
— if
. Затем они выполняются 10000 раз с переменной a=0
. Суть в том, чтобы показать разницу во времени исполнения инструкций. Так, stmt1
с обработкой исключений занимает больше времени чем stmt2
, который просто проверяет значение и не делает ничего, если условие не выполнено.
Поэтому стоит ограничить использование обработки исключений в Python и применять его в редких случаях. Например, когда вы не уверены, что будет вводом: целое или число с плавающей точкой, или не уверены, существует ли файл, который нужно открыть.
import timeit
setup="a=0"
stmt1 = '''
try:
b=10/a
except ZeroDivisionError:
pass'''
stmt2 = '''
if a!=0:
b=10/a'''
print("time=",timeit.timeit(stmt1,setup,number=10000))
print("time=",timeit.timeit(stmt2,setup,number=10000))
time= 0.003897680000136461
time= 0.0002797570000439009
Выводы!
Как вы могли увидеть, обработка исключений помогает прервать типичный поток программы с помощью специального механизма, который делает код более отказоустойчивым.
Обработка исключений — один из основных факторов, который делает код готовым к развертыванию. Это простая концепция, построенная всего на 4 блоках: try
выискивает исключения, а except
их обрабатывает.
Очень важно поупражняться в их использовании, чтобы сделать свой код более отказоустойчивым.
»
Какой фрагмент XML будет порожден в результате выполнения следующего кода:
from xml.dom import minidome1 = minidom.Element(«»A»»)e2 = minidom.Element(«»B»»)e3 = minidom.Element(«»C»»)e1.appendChild(e2)e1.appendChild(e3)print e1.toxml()
- <A><B><B/><C><C/></A>
- (Правильный ответ) <A><B/><C/></A>
- <A><B><C></A>
- <A><B><C/></B></A>
Как называется отношение, которое имеют следующие два класса:
class A(object): def __init__(self, x): self._mydata = x def m1(self): raise NotImplementedErrorclass B(A): def __init__(self, x): super(B, self).__init__(x) def m1(self): return self._mydata
- агрегация. Экземпляры A содержат экземпляры класса B
- (Правильный ответ) наследование. B получается наследованием A
- ассоциация. Экземпляры A содержат ссылки на экземпляры класса B
- наследование. A получается наследованием B
Как используется строка Main Heading в следующем примере?
<h1 tal:content=»»here/title»»>Main Heading</h1>
- строка не используется
- (Правильный ответ) в качестве заглушки, чтобы в средствах визуального форматирования было видно, что форматируется
- содержит значение, на которое можно сослаться в другом месте документа
- в качестве имени переменной для макроподстановки
Что делает метод normalize() DOM-объекта?
- готовит XML для красивого вывода
- исправляет XML, добавляя пропущенные теги
- убирает пробелы вокруг текста
- (Правильный ответ) сводит воедино все идущие подряд текстовые узлы
Что делает следующая программа?
import threadingl = threading.RLock()def proc(nm, n=0): l.acquire() try: if n < 5: print «»*»», return proc(nm, n+1) else: return nm finally: l.release() for i in range(5): threading.Thread(target=proc, args=(str(i),)).start()
- печатает 5 звездочек
- аварийно завершается при попытке выполнить l.acquire() во второй раз
- (Правильный ответ) печатает 25 звездочек
- печатает 1 звездочку и зависает
- беспрерывно печатает звездочки
Имеется определение класса:
class Ex: def __init__(self, x, y): xy = x, y self.position = xy self._length = self.__len(x, y) def __len(self, x, y): return abs(x) + abs(y) def getlen(self): return self._lengthp = Ex(1, 2)
Какой из вариантов его применения не допустим в программах на Python, которые пользуются экземплярами класса Ex?
- print p.getlen()
- (Правильный ответ) print p.__len(1,2)
- print p.position
Дан массив:
>>> c = array([[1,2], [2,3], [4,5]])
Чему равен срез c[:,1]?
- array([1, 2, 4])
- (Правильный ответ) array([2, 3, 5])
- array([1, 2])
- array([2, 3])
Класс имеет методы __iter__() и next(). О чем это говорит и как пользоваться этим методом?
class A: #… def __iter__(self): #… def next(self): #…a = A(1, 2, 3)
- (Правильный ответ) итератор. Пользоваться можно так: for i in a: print i
- нет особого названия. Пользоваться можно так: print a.next()
- генератор. Пользоваться можно так: for i in a(): print i
- последовательность. Пользоваться можно так: print a[2]
Какие новые имена появятся в текущем модуле после выполнения следующего кода:
import sre as refrom re import compile
- нельзя одновременно делать import и from-import
- только имена sre и compile
- (Правильный ответ) только имена re и compile
- имена sre, re и compile
Чему будет равен результат выполнения
urlparse.urlsplit(«»http://google.com/search?q=Python#1″»)
?
- (Правильный ответ)
(‘http’, ‘google.com’, ‘/search’, ‘q=Python’, ‘1’) - (‘http’, ‘google.com’, ‘/search’, », ‘q=Python’, ‘1’)
- (‘http’, ‘google.com’, ‘search’, ‘q=Python’, ‘1’)
- (‘http://’, ‘google.com/’, ‘search?’, ‘q=Python#’, ‘1’)
Начало определения функции f выглядит так:
def f(a, b, c=1, *p, **k):
Какие из следующих вариантов вызова не приведут к ошибке на этапе присваивания фактических параметров формальным?
- (Правильный ответ) f(1, 2, 3, 4)
- f()
- (Правильный ответ) f(1, 2, d=3, c=4)
- f(1, d=2, 3)
- (Правильный ответ) f(1, 2)
- (Правильный ответ) f(1, 2, d=3)
Для чего применяется метод nextset() объекта-курсора?
- для получения следующего набора записей результата запроса
- для получения следующей записи результата запроса
- для перехода к следующей записи результата запроса
- (Правильный ответ) для перехода к следующему набору записей результата запроса
Какой код порождает следующее расположение кнопок?
# 1b1.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=SE)b2.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=NE)b3.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=SW)b4.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=NW)# 2b1.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=SE)b2.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=NE)b3.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=SW)b4.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=NW)# 3b1.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=NW)b2.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=SW)b3.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=NE)b4.place(relx=0.2, rely=0.2, relwidth=0.4, relheight=0.4, anchor=SE)# 4b1.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=NW)b2.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=SW)b3.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=NE)b4.place(relx=0.5, rely=0.5, relwidth=0.4, relheight=0.4, anchor=SE)
- 1
- 3
- (Правильный ответ) 4
- 2
В каком модуле нужно искать функции, помогающие тестировать программу?
- dictutils
- (Правильный ответ) unittest
- profile
- pdb
Каким образом в модуле poplib представлен сеанс работы с POP3-сервером?
- список кортежей
- набор функций
- (Правильный ответ) экземпляр класса РОРЗ
- кортеж
Какие значения получат группы в следующем примере?
>>> m = re.match(«»(?P<a>A*?)(?:B+)(?P<b>B+?)(?P<c>C??)»», «»AAAABBBBC»»)>>> m.groupdict()
- {‘a’: ‘AAAA’, ‘c’: ‘C’, ‘b’: ‘B’}
- {‘a’: ‘AAAA’, ‘b’: ‘BBBB’}
- (Правильный ответ) {‘a’: ‘AAAA’, ‘c’: », ‘b’: ‘B’}
- {‘a’: ‘AAAA’, ‘b’: ‘B’}
Какой из перечисленных обработчиков mod_python выполняется раньше других?
- (Правильный ответ) PythonPostReadRequestHandler
- PythonFixupHandler
- PythonAuthenHandler
- PythonHandler
Что будет получено в результате вычисления следующего выражения:
(0 < 5 <= 3) and (0 / 0)
- будет возбуждено исключение ZeroDivisionError (деление на нуль)
- синтаксическая ошибка
- (Правильный ответ) False (или 0)
- True (или 1)
Что будет выведено в результате выполнения сопоставления с регулярным выражением?
>>> m = re.match(«»(a*?)(a+)(b+?)»», «»aaabbb»»)>>> print m.groups()
- (Правильный ответ) (», ‘aaa’, ‘b’)
- (‘aa’, ‘a’, ‘b’)
- (‘aa’, ‘a’, ‘bbb’)
- (‘a’, ‘aa’, ‘b’)
Какое из приведенных ниже регулярных выражений некорректно?
- [a]*?
- (Правильный ответ) a+b++
- (a+b+)+
- (?P<k>(ac))
Зачем в XML пространства имен?
- пространства имен позволяют включать однотипные XML-документы друг в друга
- (Правильный ответ) для сочетания в одном документе XML с различными DTD
- пространства имен позволяют указывать опции для приложения, обрабатывающего XML
- для маркировки тегов с целью более удобного поиска
Следующая программа производит замену одной подстроки на другую в тексте слева, записывая текст в виджете справа. Какие ошибки в ней допущены?
from Tkinter import *from ScrolledText import ScrolledTextdef transl(): txt = t1.get(«»1.0″», END).replace(e1.get(), e2.get()) t2.delete() t2.insert(END, txt)tk = Tk()f = Frame(tk)e1 = Entry(f, background=»»White»», width=32)e1.pack(side=LEFT)b = Button(f, text=»»>>»», command=transl)b.pack(side=LEFT)e2 = Entry(f, background=»»White»», width=32)e2.pack(side=LEFT)f.grid(row=0, column=0, columnspan=2)t1 = ScrolledText(tk, background=»»White»», width=40)t1.grid(row=1, column=0)t2 = ScrolledText(tk, background=»»White»», width=40)t2.grid(row=1, column=1)tk.mainloop()
- виджет f должен занимать три ячейки, а не две (в нем кнопка и две полоски ввода)
- ошибок нет
- (Правильный ответ) метод delete текста не содержит позиций удаляемого текста
- функция transl() должна иметь аргумент
Что такое регулярное выражение?
- шаблон для операции форматирования
- (Правильный ответ) шаблон, описывающий множество строк
- шаблон для поиска файлов в каталоге
- синтаксически правильное выражение на языке Python
Какой код порождает следующее расположение кнопок?
- b1.pack(side=BOTTOM); b2.pack(side=BOTTOM)
- b1.pack(side=TOP); b2.pack(side=BOTTOM)
- (Правильный ответ)
b2.pack(side=BOTTOM); b1.pack(side=BOTTOM) - b1.pack(side=BOTTOM); b2.pack(side=TOP)
Для чего нужны функции модуля gettext?
- для показа строки ввода на экране и ввода текста от пользователя
- для получения текста от пользователя
- для чтения строки со стандартного ввода
- (Правильный ответ) для обеспечения интернационализации программы
Аналогом какой функции является функция x?
def x(a, b): for c in b: yield a(*c)
- itertools.izip()
- (Правильный ответ) itertools.starmap()
- itertools.imap()
- map(None, …)
Чему равен атрибут namespaceURI у элемента <foaf:nick> из следующего фрагмента XML
<rdf:RDF xmlns:foaf=»»http://xmlns.com/foaf/0.1/»»>…<foaf:nick>donna</foaf:nick>
- foaf
- rdf:RDF
- nick
- (Правильный ответ) http://xmlns.com/foaf/0.1/
- логистическое программирование
- (Правильный ответ) императивное программирование
- (Правильный ответ) структурный стиль
- (Правильный ответ) модульное программирование
Может ли возникнуть deadlock в следующей программе:
import threadingres_A = threading.Lock()res_B = threading.Lock()res_C = threading.Lock()def proc1(): res_A.acquire(); res_B.acquire(); res_C.acquire() # … res_B.release(); res_C.release(); res_A.release()def proc2(): res_B.acquire(); res_C.acquire(); res_A.acquire() # … res_C.release(); res_B.release(); res_A.release()def proc3(): res_C.acquire(); res_A.acquire(); res_B.acquire() # … res_A.release(); res_B.release(); res_C.release()p1 = threading.Thread(target=proc1, name=»»t1″»)p2 = threading.Thread(target=proc2, name=»»t2″»)p3 = threading.Thread(target=proc3, name=»»t3″»)p1.start(); p2.start(); p3.start()p1.join(); p2.join(); p3.join();
- (Правильный ответ) да, возможно
- нет, не возникнет
- да, обязательно
Какое значение threadsafety соответствует ситуации, когда потоки могут одновременно использовать как DB-API 2.0 совместимый модуль, так и соединения, получаемые на основе этого модуля
- 3
- 1
- 0
- (Правильный ответ) 2
Можно ли в XML использовать собственные теги?
- можно, если они указаны DTD
- (Правильный ответ) можно
- нельзя
- можно, если указаны пространства имен
В каком порядке Zope будет искать index_html для следующего URL?
http://zopeserver/Zigzag/Example/index_html
- в каталогах /Zigzag/Example и /Zigzag
- (Правильный ответ) в каталогах /Zigzag/Example, /Zigzag и /????
- только в каталоге /Zigzag/Example/
- в каталогах /, /Zigzag и /Zigzag/Example
Экземпляры какого класса сочетают замок и средство коммуникации между потоками?
- (Правильный ответ) Condition
- Event
- Timer
- Lock
Как средствами самого Python определить имена формальных аргументов функции func(), если известно, что функция написана на Python?
- func.func_locals
- никак
- func.func_globals
- (Правильный ответ)
inspect.getargspec(func)
Какие кодировки исходного текста программы поддерживает интерпретатор Python?
- (Правильный ответ) большинство кодировок, распространенных сегодня
- ASCII
- ASCII, Latin-1, UTF-8
- ASCII, Unicode
Какую роль играет xx в Python-программе, и чему должен быть равен XXX:
class A(object): def xx(): return A.__name__ xx = XXX(xx)
- метод, XXX равен instancemethod
- метод класса, XXX равен classmethod
- функция, XXX можно опустить
- (Правильный ответ) статический метод, XXX равен staticmethod
Какой метод позволяет узнать, имеет ли данное сообщение несколько частей?
- (Правильный ответ) is_multipart()
- (Правильный ответ) get_main_type()
- get_payload()
- items()
Что будет выведено в результате выполнения следующего кода:
from xml.sax.saxutils import XMLGeneratorg = XMLGenerator(encoding=»»utf-8″»)g.startDocument()g.startElement(«»A»», {})g.startElement(«»B»», {‘b’: ‘1’})g.endElement(«»B»»)g.startElement(«»B»», {‘b’: ‘2’})g.endElement(«»B»»)g.endElement(«»A»»)g.endDocument()
- <?xml version=»»1.0″» encoding=»»utf-8″»?><A><B b=1></B><Bb=2></B></A>
- <?xml version=»»1.0″» encoding=»»utf-8″»?><A><B b=»»1″»><Bb=»»2″»></B></B></A>
- <?xml version=»»1.0″» encoding=»»utf-8″»?><A><B b=»»1″» b=»»2″»></B></A>
- (Правильный ответ)
<?xml version=»»1.0″» encoding=»»utf-8″»?><A><B b=»»1″»></B><Bb=»»2″»></B></A>
Какие ошибки допущены в следующем примере?
import threading, Queueitem = Queue.Queue()def consumer(nm): for i in range(3): print item.get(), nmdef producer(nm): for i in range(4): item.put(nm)for n in range(4): threading.Thread(target=consumer, args=(«»c»»+str(n),)).start()for n in range(3): threading.Thread(target=producer, args=(«»p»»+str(n),)).start()
- объекту, соответствующему потоку, нужно давать отдельное имя
- потоки-потребители очереди запущены раньше потоков-производителей
- программа зависнет, так как производителей меньше, чем потребителей
- (Правильный ответ) ошибок нет
Какая строка получится в результате следующей операции:
«»=%1s %2.2f %03i=»» % («»abc»», 1.234, 4)
- =a 01.23 004=
- =c 1.23 004=
- =a 1.23 004=
- (Правильный ответ) =abc 1.23 004=
Что будет выведено следующей программой:
a = «»AB»» b = «»BC»»print «»%sa, b»» % a, b
- (‘AB’, ‘BC’)a, b
- «AB», «BC»a, b
- (AB, BC)a, b
- (Правильный ответ) ABa, b BC
Какая строка получится в результате следующей операции:
«»=%-3s %1.0f %-3i=»» % («»a»», 1.234, 4)
- =a 1 4=
- = a 1 4=
- (Правильный ответ) =a 1 4 =
Что включает в себя Zope?
- СУБД общего назначения
- поддержку CGI-сценариев
- (Правильный ответ) поддержку сценариев DTML
- (Правильный ответ) собственный web-сервер
Как перевести Unicode-строку u в кодировку koi8-r?
- string.decode(u, ‘koi8-r’)
- (Правильный ответ) u.encode(‘koi8-r’)
- u.recode(‘unicode’, ‘koi8-r’)
- u.decode(‘koi8-r’)
К какому уровню модели взаимодействия открытых систем относится протокол FTP?
- сетевому
- представления
- сеансовому
- транспортному
- (Правильный ответ) приложений
Какие из перечисленных функций имеют побочные эффекты:
import osglobal vv = 0def A(x, y): return abs(x + y)B = lambda k, v: os.environ.setdefault(k, v)def C(x): global v v = v + 1 return v + x
- никакие
- (Правильный ответ) только B и C
- только C
- A, B, C
- только A и C
Какие утверждения о следующем фрагменте программы, работающей с POP3-сервером, правильные?
import poplib, emailp = poplib.POP3(‘pop3.SERVER’)p.getwelcome()p.user(‘USERNAME’)p.pass_(‘USERPASSWORD’)lst = p.list()## обработка lst#p.quit()
- ошибок нет
- делать quit() необязательно, он выполнится сам
- (Правильный ответ) метод list() имеет другой формат результата: ответ сервера, список строк и длина ответа. Правильно было бы написать: response, lst, octets = p.list()
- учетные данные пользователя (логин и пароль) передаются сразу в методе user, а не отдельным методом pass_()
Что делает следующая программа?
import threading, Queueitem = Queue.Queue()def consumer(nm): while True: print item.get(), nmdef producer(nm): while True: item.put(nm)for n in range(3): threading.Thread(target=consumer, args=(«»c»»+str(n),)).start() threading.Thread(target=producer, args=(«»p»»+str(n),)).start()
- (Правильный ответ) программа беспрерывно печатает строки вида pN cM, где N — номер производителя, а M — номер потребителя
- программа содержит ошибку в цикле, где запускаются потоки
- программа беспрерывно печатает строки вида p0 c0, p1 c1 или p2 c2, где число после p — номер производителя, а число после c — номер потребителя
- программа ничего не делает или, в некоторых случаях, успевает напечатать несколько строк вида pN cM, после чего останавливается на попытке прочитать из пустой очереди
Какая встроенная функция Python лучше всего подходит для цепочечных вычислений (в частности, вычислений значения многочлена по схеме Горнера)?
- (Правильный ответ) reduce()
- map()
- chain()
- filter()
Какой модуль стандартной библиотеки Python позволяет работать с WWW на более низком уровне?
- (Правильный ответ) httplib
- urlparse
- htmllib
- urllib2
Какому значению paramstyle соответствует следующий пример разметки:
«» «» «» INSERT INTO tv (tvdate, tvweekday, tvchannel)VALUES (%s, %s, %s);»» «» «»
- (Правильный ответ) ‘format’
- ‘pyformat’
- ‘named’
- ‘qmark’
Какой код порождает следующее расположение кнопок?
# 1b1.grid(row=0, column=0, rowspan=2)b2.grid(row=0, column=1)b3.grid(row=1, column=1)# 2b1.grid(row=0, column=0, columnspan=2)b2.grid(row=1, column=0)b3.grid(row=1, column=1)# 3b1.grid(row=1, column=1, rowspan=2)b2.grid(row=1, column=0)b3.grid(row=0, column=0)# 4 b1.grid(row=1, column=1, columnspan=2)b2.grid(row=0, column=1)b3.grid(row=0, column=0)
- 2
- (Правильный ответ) 1
- 3
- 4
Какие утверждения о следующем фрагменте программы, работающей с POP3-сервером, правильные?
import poplib, emailp = poplib.POP3(‘pop3.SERVER’)p.getwelcome()p.user(‘USERNAME’)p.pass_(‘USERPASSWORD’)response, lst, octets = p.list()## обработка lst#p.quit()
- делать quit() необязательно, он выполнится сам
- учетные данные пользователя (логин и пароль) передаются сразу в методе user, а не отдельным методом pass_()
- (Правильный ответ) ошибок нет
- метод list() имеет другой формат результата: просто список. Ошибки (response) в случае необходимости передаются возбуждением исключений
Сокрытие информации о внутреннем устройстве объекта, при котором вся работа с объектом ведется только через общедоступный интерфейс называется
- агрегацией
- абстракцией
- декомпозицией
- (Правильный ответ) инкапсуляцией
Какими из перечисленных ниже способов можно получить случайный элемент последовательности lst с помощью модуля random?
- random.random(lst)
- (Правильный ответ) random.choice(lst)
- (Правильный ответ) random.shuffle(lst); lst[0]
- (Правильный ответ) lst[random.randrange(len(lst))]
Как можно получить список активных на данный момент потоков?
- (Правильный ответ) threading.enumerate()
- threading.currentThreads()
- threading.active()
- threading.activeCount()
Как начать интерактивную отладку функции f с двумя аргументами (условно: x и y)?
- import pdb; pdb.runcall(f(x, y))
- import pdb; pdb.runcall(f, (x, y))
- import pdb; pdb.runcall(«»f(x, y)»»)
- (Правильный ответ)
import pdb; pdb.runcall(f, x, y)
Какая строка получится в результате следующей операции:
«»=%r %0.1f %03i=»» % («»abc»», 1.234, 3)
- =abc 1.2 3=
- (Правильный ответ) =’abc’ 1.2 003=
- =’abc’ .2 3=
- =’abc’ 1.2 3 =
С помощью какого макроса удобнее всего определить строку документации при использовании C API?
- (Правильный ответ) PyDoc_STRVAR
- PyDoc
- PyDoc_VAR
- PyDoc_STR
Что будет выведено следующей программой:
a = «»A»»b = «»B»»b = b + aprint a + b
- (Правильный ответ) AВА
- сообщение об ошибке в третьей строке
- ВА
- АВ
Какой из перечисленных обработчиков mod_python выполняется раньше других?
- PythonHeaderParserHandler
- (Правильный ответ) PythonPostReadRequestHandler
- PythonAuthenHandler
- PythonHandler
Как называется отношение, которое имеют между собой следующие два класса:
class A(object): def __init__(self, **atts): self._atts = atts def __repr__(self): return «»:»» + str(self._atts)class B(list): def __init__(self, *params): super(B, self).__init__(params)
- (Правильный ответ) классы не связаны между собой
- ассоциация. Экземпляры A содержат ссылки на экземпляры B
- агрегация. Экземпляры B содержат экземпляры A
- ассоциация. Экземпляры B содержат ссылки на экземпляры A
В каких частях программы допущены ошибки в следующем примере?
import threading# 1def proc(*args): print «»Процесс в потоке пошел!»» while 1: pass# 2p1 = threading.Thread(target=proc(), name=»»t1″», args=[2])# 3p1.start()
- ошибок нет
- (Правильный ответ) 2
- 3
- 1
С помощью какого класса из какого модуля пакета email можно вложить в сообщение бинарный файл?
- модуль MIMEMultipart, класс MIMEMultipart
- модуль MIMEMessage, класс MIMEMessage
- (Правильный ответ) модуль MIMEBase, класс MIMEBase
- модуль Utils, класс MIME
В какой переменной окружения передается имя пользователя (если применяется авторизация)?
- (Правильный ответ) REMOTE_USER
- LOGIN
- USER_NAME
- USER
В каких из перечисленных ниже случаев удобнее встроить интерпретатор Python в программную систему?
- (Правильный ответ) когда системе требуется функциональность, которую пользователю удобнее описать на языке сценария, но система изначально написана на C/C++
- система доступна в виде бинарной библиотеки
- когда система позволяет вызывать внешние сценарии
- система поставляется как пакет прикладных программ
Сколько элементов будет содержать словарь D (то есть, чему будет равно len(D)) после выполнения следующего к»
Хотелось бы еще узнать какой это язык, но впринципе нет в этом особой необходимости.
Я так понимаю, что запись данного примера должна выглядеть как-то так:
Вывод будет соответственно
Почему именно так? Потому что сначала выведется «1» а затем, без всяких разделителей будет выведено «5», таким образом значение «склеится» и получится «15».
Это обычная итерация, т.е. увеличение значения переменной на единицу.
т.е, к примеру i=7, i=i+1 -> переменная i будет равна «8»
Во многих языках допускается сокращенная запись данной итерации, и выглядит она следующим образом:
i += 1
Либо есть еще такие конструкции:
++i либо
i++ либо
отличие только в том, когда они применяются и могут отличаться по своей работе от языка к языку.
Помогите сделать
Требовалось написать программу, при выполнении которой с клавиатуры
считывается натуральное число x, не превосходящее 1000, и выводится
количество единиц в двоичной записи этого числа. Программист торопился
и написал программу неправильно.
Pascal | ||
|
Последовательно выполните следующее:
1. Напишите, что выведет эта программа при вводе числа 6.
2. Приведите пример такого числа x, что, несмотря на ошибки, программа
печатает правильный ответ.
3. Найдите все ошибки в этой программе (их может быть одна или несколько). Известно, что каждая ошибка затрагивает только одну строку и может быть исправлена без изменения других строк.
Для каждой ошибки:
1) выпишите строку, в которой сделана ошибка;
2) укажите, как исправить ошибку, т.е. приведите правильный вариант строки.
Обратите внимание, что требуется найти ошибки в имеющейся программе, а не написать свою, возможно, использующую другой алгоритм решения. Исправление ошибки должно затрагивать только строку, в которой находится ошибка.