Опубликовано 1 год назад по предмету
Информатика
от ksushkast2009
Соотнеси фрагменты кода и категории.
Кто-то перепутал наши программы! Помоги разложить их по папкам.
Программа печатает строку
Программа печатает число
Интерпретатор выдаёт ошибку

-
Ответ
Ответ дан
restIessОтвет находится во вложении

-
Ответ
Ответ дан
ksushkast2009Спасибо большое ❤️
-
Не тот ответ, который вам нужен?
Найди нужный
Самые новые вопросы
![]()
Математика — 2 года назад
Сколько здесь прямоугольников
![]()
История — 3 года назад
Какое управление было в древнейшем риме? как звали первого и последнего из царей рима?
![]()
Литература — 3 года назад
Уроки французского ответе на вопрос : расскажите о герое по следующему примерному плану: 1.почему мальчик оказался в райцентре ? 2.как он чувствовал себя на новом месте? 3.почему он не убежал в деревню? 4.какие отношения сложились у него с товарищами? 5.почему он ввязался в игру за деньги? 6.как характеризуют его отношения с учительницей ? ответе на эти вопросы пожалуйста ! сочините сочинение пожалуйста
![]()
Русский язык — 3 года назад
Помогите решить тест по русскому языку тест по русскому языку «местоимение. разряды местоимений» для 6 класса
1. укажите личное местоимение:
1) некто
2) вас
3) ни с кем
4) собой
2. укажите относительное местоимение:
1) кто-либо
2) некоторый
3) кто
4) нам
3. укажите вопросительное местоимение:
1) кем-нибудь
2) кем
3) себе
4) никакой
4. укажите определительное местоимение:
1) наш
2) который
3) некий
4) каждый
5. укажите возвратное местоимение:
1) свой
2) чей
3) сам
4) себя
6. найдите указательное местоимение:
1) твой
2) какой
3) тот
4) их
7. найдите притяжательное местоимение:
1) самый
2) моего
3) иной
4) ничей
8. укажите неопределённое местоимение:
1) весь
2) какой-нибудь
3) любой
4) этот
9. укажите вопросительное местоимение:
1) сколько
2) кое-что
3) она
4) нами
10. в каком варианте ответа выделенное слово является притяжательным местоимением?
1) увидел их
2) её нет дома
3) её тетрадь
4) их не спросили
![]()
Русский язык — 3 года назад
Переделай союзное предложение в предложение с бессоюзной связью.
1. океан с гулом ходил за стеной чёрными горами, и вьюга крепко свистала в отяжелевших снастях, а пароход весь дрожал.
2. множество темноватых тучек, с неясно обрисованными краями, расползались по бледно-голубому небу, а довольно крепкий ветер мчался сухой непрерывной струёй, не разгоняя зноя
3. поезд ушёл быстро, и его огни скоро исчезли, а через минуту уже не было слышно шума
![]()
Русский язык — 3 года назад
помогите прошу!перепиши предложения, расставляя недостающие знаки препинания. объясни, что соединяет союз и. если в предложении один союз и, то во втором выпадающем списке отметь «прочерк».пример:«я шёл пешком и,/поражённый прелестью природы/, часто останавливался».союз и соединяет однородные члены.ночь уже ложилась на горы (1) и туман сырой (2) и холодный начал бродить по ущельям.союз и соединяет:1) части сложного предложенияоднородные члены,2) однородные членычасти сложного предложения—.поэт — трубач зовущий войско в битву (1) и прежде всех идущий в битву сам (ю. янонис).союз и соединяет:1) части сложного предложенияоднородные члены,2)
![]()
Физика — 3 года назад
Вокруг прямого проводника с током (смотри рисунок) существует магнитное поле. определи направление линий этого магнитного поля в точках a и b.обрати внимание, что точки a и b находятся с разных сторон от проводника (точка a — снизу, а точка b — сверху). рисунок ниже выбери и отметь правильный ответ среди предложенных.1. в точке a — «от нас», в точке b — «к нам» 2. в точке a — «к нам», в точке b — «от нас» 3. в обеих точках «от нас»4. в обеих точках «к нам»контрольная работа по физике.прошу,не наугад важно
Информация
Посетители, находящиеся в группе Гости, не могут оставлять комментарии к данной публикации.
Что ты хочешь узнать на сайте Знания ком?
Задай вопрос
Все предметы
Математика
Литература
Алгебра
Русский язык
Геометрия
Английский язык
Химия
Физика
Биология
История
Обществознание
Окружающий мир
География
Українська мова
Информатика
Українська література
Қазақ тiлi
Экономика
Музыка
Право
Беларуская мова
Французский язык
Немецкий язык
МХК
ОБЖ
Психология
Оʻzbek tili
Кыргыз тили
Астрономия
Физкультура и спорт
Другие предметы
a = float(input()) #код
b = float(input())
c = float(input())
D = b ** 2 - 4 * a * c
from math import *
x = (-b + sqrt(D)) / (2 * a)
x2 = (-b - sqrt(D)) / (2 * a)
if D < 0:
print("Нет корней")
elif D == 0:
print(-b / (2 * a))
else:
print(min(x,x2), max(x, x2), sep="n")
Error:
Traceback (most recent call last):
File "jailed_code", line 9, in <module>
x = (-b + sqrt(D)) / (2 * a)
ValueError: math domain error
задан 26 мая 2022 в 17:19
3
Ну потому что проверять знак D нужно до того, как вы пытаетесь из него корень извлечь:
D = b ** 2 - 4 * a * c
if D < 0:
print("Нет корней")
elif D == 0:
print(-b / (2 * a))
else:
x = (-b + sqrt(D)) / (2 * a)
x2 = (-b - sqrt(D)) / (2 * a)
print(min(x,x2), max(x, x2), sep="n")
ответ дан 26 мая 2022 в 17:44
CrazyElfCrazyElf
62.2k5 золотых знаков19 серебряных знаков47 бронзовых знаков
1
Похожие вопросы:
налить в 9-литровое 9 литров отлить 2 раза по 4 л. останется 1 л его вылить в 4х литровое налить полное 9-литровое ведро и отлить из него в 4х литровое в котором уже есть 1 литр ту…Подробнее
ответов: 3
у васи флешка желтая. и больше флешки пети. значит, у пети или 4гб или 8гб. егору не понравилась красная, значит красная у пети, а у егора зеленая. суммарное колличество флешок ва…Подробнее
ответов: 4
пусть х основание системы счисления, тогда: 122х (здесь х должен стоять нижним индексом) = 1*х² + 2*х¹ + 2*х⁰=х²+2х+2 — это десятичная запись исходного числа, значит: х²+2х+2=65…Подробнее
ответов: 3
во всех областях деятельности холодильных предприятий как в обработке и хранении, так и в производстве продукции основной является своевременное и равномерное выполнен…Подробнее
ответов: 3
f8 формула: =b12*5. b5 формула: =а4+d6. c7 формула: =d6/$a$2. f9 формула: =$c$5-g1. e5 формула: =c$5-$e9….Подробнее
ответов: 3
2^i = n 2^i = 64 i = 6 бит. ответ. 6 бит…Подробнее
ответов: 3
program ssd; uses crt,graph; var d,m: integer; begin clrscr; initgraph(d,m,»); arc(200,200,360,180,50); …Подробнее
ответов: 3
512 бит = 512/8= 64 байт 1073741824 байт =1073741824/1024=1048576 кбайт / 1024= 1024 мбайт 1024 кбайт = 1024*1024=1048576 байт 4 дискета 3,5 = 720 кбайт сd= 650 мбайт dvd= 1,…Подробнее
ответов: 3
Писать иероглифы красиво и уметь писать их кистью с чернилами…Подробнее
ответов: 3
по введенному натуральному числу n(n< =100) обозначаешему количество ворон вывести надпись ,на дереве n ворон.где ворона склоняеться соответсвено n: ‘ворон’.’ворона»вороны’ в сл…Подробнее
ответов: 3
var a,res: integer; begin writeln(‘введите число’); readln(a); res: =sqr(a); writeln(‘квадрат числа,’a’, равен,’res’,’); readln; end….Подробнее
ответов: 1
ну, в первом тексте информационный объем одного символа составляет n=2^i 32=2^5 i=5 бит во втором текте 64=2^6 i=6 значит, в 1,2 раза (6: 5=1,2)…Подробнее
ответов: 3
Всего: 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
Я пытаюсь распечатать все возможности данной строки для фиксированной длины 3. Вот моя программа
import java.util.*;
import java.lang.*;
class Ideone
{
public static void main (String[] args) throws java.lang.Exception
{
// your code goes here
String input = "abc";
int i=0,j=0,k=0;
for(i=0;i<3;i++){
for(j=0;j<3;j++){
for(k=0;k<3;k++){
System.out.println(input.charAt(i)+input.charAt(j)+input.charAt(k));
}
}
}
}
}
Но он печатает перестановки чисел в этом формате. Но я собираюсь напечатать aaa, aab, aac, bbb … таким образом.
291
292
293
292
293
294
293
294
295
292
293
294
293
294
295
294
295
296
293
294
295
294
295
296
295
296
297
3 ответа
Лучший ответ
input.charAt(i) возвращает char, который является целочисленным типом. Поэтому + выполняет сложение int вместо конкатенации String s.
Добавление пустой строки в начало выражения решит вашу проблему:
System.out.println(""+input.charAt(i)+input.charAt(j)+input.charAt(k));
1
Eran
20 Окт 2015 в 10:13
charAt возвращает целочисленный тип (на самом деле char, который в Java является 16-битным целочисленным типом без знака). + просто суммирует значения.
Один из способов — добавить к выражению префикс в виде пустого строкового литерала: это заставляет Java интерпретировать + как конкатенацию : "" + input.charAt(/*etc*/
На мой взгляд, это недостаток Java, позволяющий использовать + в качестве оператора конкатенации строк.
1
Bathsheba
20 Окт 2015 в 10:19
Вы использовали эту строчку. Это может решить вашу проблему.
System.out.println(Character.toString(input.charAt(i))+Character.toString(input.charAt(j))+Character.toString(input.charAt(k)));
char a_char = input.charAt(0); // This is also return only a char
1
Shiladittya Chakraborty
20 Окт 2015 в 10:16
Почему моя программа печатает «.project», когда я пытаюсь напечатать строку?
Я должен сделать программу, которая вводит три аргумента, которые позже будут вычислены. Первый и третий аргументы — это числа в строковом формате (например, «три»), а второй аргумент — операция (например, «-», «+»). Все работает нормально, за исключением случаев, когда я использую операцию «*». Я попытался напечатать строку, поскольку она передает функцию парсера, потому что именно здесь возникает ошибка, и она печатает «.project» вместо числа в строковом формате.
static int converter(String x)
{
System.out.println(x);
int value = 0;
String zero = "0";
String one = "1";
String two = "2";
String three = "3";
String four = "4";
String five = "5";
String six = "6";
String seven = "7";
String eight = "8";
String nine = "9";
String ten = "10";
String eleven = "11";
String twelve = "12";
String thirteen = "13";
String fourteen = "14";
String fifteen = "15";
String sixteen = "16";
String seventeen = "17";
String eighteen = "18";
String nineteen = "19";
String twenty = "20";
String thirty = "30";
String forty = "40";
String fifty = "50";
String sixty = "60";
String seventy = "70";
String eighty = "80";
String ninety = "90";
if(x.compareTo("zero")==0)
value = Integer.parseInt(zero);
else if(x.compareTo("one")==0)
value = Integer.parseInt(one);
else if(x.compareTo("two")==0)
value = Integer.parseInt(two);
else if(x.compareTo("three")==0)
value = Integer.parseInt(three);
else if(x.compareTo("four")==0)
value = Integer.parseInt(four);
else if(x.compareTo("five")==0)
value = Integer.parseInt(five);
else if(x.compareTo("six")==0)
value = Integer.parseInt(six);
else if(x.compareTo("seven")==0)
value = Integer.parseInt(seven);
else if(x.compareTo("eight")==0)
value = Integer.parseInt(eight);
else if(x.compareTo("nine")==0)
value = Integer.parseInt(nine);
else if(x.compareTo("ten")==0)
value = Integer.parseInt(ten);
else if(x.compareTo("eleven")==0)
value = Integer.parseInt(eleven);
else if(x.compareTo("twelve")==0)
value = Integer.parseInt(twelve);
else if(x.compareTo("thirteen")==0)
value = Integer.parseInt(thirteen);
else if(x.compareTo("fourteen")==0)
value = Integer.parseInt(fourteen);
else if(x.compareTo("fifteen")==0)
value = Integer.parseInt(fifteen);
else if(x.compareTo("sixteen")==0)
value = Integer.parseInt(sixteen);
else if(x.compareTo("seventeen")==0)
value = Integer.parseInt(seventeen);
else if(x.compareTo("eighteen")==0)
value = Integer.parseInt(eighteen);
else if(x.compareTo("nineteen")==0)
value = Integer.parseInt(nineteen);
else if(x.compareTo("twenty")==0)
value = Integer.parseInt(twenty);
else if(x.compareTo("thirty")==0)
value = Integer.parseInt(thirty);
else if(x.compareTo("forty")==0)
value = Integer.parseInt(forty);
else if(x.compareTo("fifty")==0)
value = Integer.parseInt(fifty);
else if(x.compareTo("sixty")==0)
value = Integer.parseInt(sixty);
else if(x.compareTo("seventy")==0)
value = Integer.parseInt(seventy);
else if(x.compareTo("eighty")==0)
value = Integer.parseInt(eighty);
else if(x.compareTo("ninety")==0)
value = Integer.parseInt(ninety);
else {
System.out.println("Error.");
System.exit(0);
}
return value;
}
Программа работает нормально, если я ввожу «*» вместо «*».
1 ответы
Потому что когда вы вызываете свою программу, оболочка расширяет подстановочный знак.
Рассмотрим сходство между
dir *.txt
и
java MyProg.class 2 * 3
Звездочка будет заменена всеми файлами в каталоге.
Создан 08 июля ’13, 21:07
Не тот ответ, который вы ищете? Просмотрите другие вопросы с метками
java
parsing
calculator
or задайте свой вопрос.
|
0 / 0 / 0 Регистрация: 12.09.2016 Сообщений: 46 |
|
|
1 |
|
Программа печатает первые пять символов введенной строки15.09.2016, 20:14. Показов 2897. Ответов 1
Программа печатает первые пять символов введенной строки
__________________
0 |
|
Puporev Почетный модератор 64270 / 47569 / 32739 Регистрация: 18.05.2008 Сообщений: 115,182 |
||||
|
15.09.2016, 20:16 |
2 |
|||
|
Решение
1 |
Обработка ошибок увеличивает отказоустойчивость кода, защищая его от потенциальных сбоев, которые могут привести к преждевременному завершению работы.

Прежде чем переходить к обсуждению того, почему обработка исключений так важна, и рассматривать встроенные в 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 их обрабатывает.
Очень важно поупражняться в их использовании, чтобы сделать свой код более отказоустойчивым.
Проблема в том, что вы смешиваете вызовы с getline() с помощью оператора >>. Помните, что оператор >> проигнорировал ведущее белое пространство, поэтому будет верно продолжаться по границам строк. Но перестает читать после того, как вход успешно восстановлен и, таким образом, не проглотит завершающие символы «n». Таким образом, если вы используете getline() после >>, вы обычно ошибаетесь, если не будете осторожны (сначала удалите символ «n», который не был прочитан).
Хитрость заключается в том, чтобы не использовать оба типа ввода. Если вы используете getline после cin >> yourdata, вам нужно сбросить новую строку из буфера между ними.
#include <iostream>
#include <string>
using namespace std;
int main(){
int n = 1;
string data[13];
while(n > 0){
cin >> n;
cin.ignore(10,'n'); // insert this into your code
for(int i = 0; i < n; i++){
getline(cin,data[i]);
cout << data[i] << endl;
}
}
return 0;
}
Узнай цену своей работы
Формулировка задачи:
Программа печатает первые пять символов введенной строки
Код к задаче: «Программа печатает первые пять символов введенной строки»
textual
Листинг программы
var s:=string; begin readln(s); write(copy(s,1,5)); readln end.
Полезно ли:
8 голосов , оценка 3.875 из 5
Похожие ответы
- Распечатать коды первых десяти символов введенной строки
- Распечатать последние 4 символа введенной строки
- Подсчитать общее число вхождений символов +,*,- в строку
- Упорядочить матрицу по убыванию элементов первой строки
- Удалить из строки первое и последнее вхождение заданной подстроки.
- Процедуры и функции: в строке заменить все символы верхнего регистра в символы нижнего регистра
- Подсчитать количество вхождений заданного слова в строку
- Получить элементы вектора x, равные сумме чётных элементов каждой строки
- Вводится строка. Затем по нажатию на пробел производится скроллинг этой строки
- Найти среднее среди трех введенных чисел
Сообщение было отмечено july1997 как решение