Процедуры и функции, написанные программистом, предназначены для оптимизации программ.
Основным их преимуществом является возможность многократного использования, более легкого и удобного тестирования и отладки независимо от других модулей.
В Паскале главная программа начинается с декларативной части, в которую, в частности, входят и описания всех процедур и функций. Обычно, в Паскале декларативная часть состоит из раздела определения констант, за которым следует раздел объявления переменных, а затем все процедуры и функции. Главное правило – любой объект должен быть описан до его первого использования.
Пример задачи: написать программу, которая определяет сумму квадратов n первых натуральных чисел. Сумма определяется в функции пользователя.
function powers (n: integer) : integer;
var i, sum:integer;
write (‘Сколько чисел нужно cложить?’);
writeln (‘сумма квадратов ‘,e,’ чисел’);
writeln (‘Число членов = ‘,e,’. Сумма = ‘,f);
Функции обычно применяются в расчетных задачах, когда необходимо выполнить ряд вычислений и передать их значения основной программе.
35 Функции (def) в Python. Определение и вызов функции
Первая строка описания функции называется заголовком. Она включает в себя имя функции, имя и тип каждого формального параметра, а также тип результата.
Например: function powers (n:integer):real;
Здесь имя функции – powers, у нее один формальный параметр – n, принадлежит типу integer. Функция возвращает результат типа integer.
За заголовком функции следует объявление локальных переменных подпрограммы.
Например: var i, sum:integer;
Локальные переменные, объявленные в подпрограмме, никак не связаны с объектами главной программы, даже если у них одинаковые имена.
За объявлениями, если они есть, следует пара ограничителей begin-end, окружающих набор предложений, составляющих саму функцию. При этом самым последним должно быть выполнено предложение, которым имени функции назначается некоторое значение, оно будет возвращено в главную программу.
Процедуры применяются, когда приходится решать задачи, в которых интересует не вычисление какого-то конкретного значения, а выполнение некоторой совокупности действий, например, отпечатать список чисел. Процедура обычно не возвращает в основную программу никакого значения. А если и передает данные, то только через глобальные переменные.
Но существуют, так называемы, процедуры с параметрами, в которые (и даже из которых) можно передавать данные. В этой теме будут рассмотрены и примеры таких процедур. В Электронном задачнике даются задачи именно на такие процедуры.
Между функцией и процедурой имеется несколько различий. Наиболее существенное состоит в том, что функция всегда возвращает одно конкретное значение, тогда как процедура нет. Это различие отражается в особенности объявления процедур и функций.
Пример: procedure test (a: real; var b: integer);
где test – заголовок процедуры, параметр – a типа real, параметр b типа integer.
Функции c++ примеры. Синтаксис. Объявление, реализация функции. Параметры, аргументы. C++ #33
Вызов процедуры из главной программы представляет собой просто имя процедуры со списком аргументов. Например: test (x,y). Процедуры вообще могут не иметь параметров.
Например, сумма n первых натуральных чисел:
program primer; // процедура без параметров
var a,k,sum : integer;
writeln(a ,’ чисел, сумма ‘,sum);
writeln(‘последовательное сложение натуральных чисел’);
write(‘сколько первых натуральных чисел сложить? ‘);
Пример решения задач из Электронного задачника:
Program Proc1; // процедура с параметрами
procedure powerA3(a:real;var b:real);
writeln(‘Вычисление 3-й степени числа:’);
writeln(3-я степень числа:’,c:2:1);
Program Proc3; // процедура с параметрами
procedure Mean(x,y:real;var AMean,GMean:real);
writeln(‘Введите числа a,b,c,d’);
program Proc16; // функция
if x=0 then sign:=0;
if x>0 then sign:=1;
writeln (‘vv a i b’);
writeln (‘sign(a)+sign(b) = ‘,sign(a)+sign(b));
program Proc17; // функция
var a1, b1,c1:real;
if d=0 then RootsCount:=’один корень’;
if d>0 then RootsCount:=’два корня’;
writeln (‘введи коэффициенты квадратного уравнения a, b,c’);
Наберите и отладьте следующие программы, разберитесь в их работе:
1. Программа «Неповторяющиеся случайные числа» с использованием массива и процедуры без параметров.
q:array[1..15] of integer;
if a=b then continue;
if q[a]=q[b] then begin q[a]:=random(20); qw; end;
2. Проверка целого числа на четность (использование функции).
if (n mod 2)= 0 then Chet:=TRUE else Chet:=FALSE;
writeln(‘Введите целое число и нажмите Enter’);
writeln(‘Для завершения введите 100’);
then writeln( m,’ — четное число’)
else writeln( m,’ — нечетное число ‘);
3. Вычисление длины и площади окружности (использование процедуры с параметрами).
writeln(‘Вычисление длины окружности и площади круга:’);
write(‘Задайте радиус и нажмите Enter ‘);
writeln(‘Радиус окружности: ‘,t:3:1);
writeln(‘Длина окружности: ‘,l:3:1,’,площадь: ‘,s:3:1);
Выполните задания с Proc2 по Proc15 по электронному задачнику (стр.37) и с Proc18 по Proc22 по электронному задачнику (стр.39). Открыть его можно в режиме Помощь – Электронный задачник РТ.
Источник: www.sites.google.com
Процедуры и функции в паскале
Процедуры и функции аналогичны программам в миниатюре и имеют общее название — подпрограммы.
Подпрограмма — это часть программы, описывающая некоторый алгоритм, который можно многократно использовать, обращаясь к нему из различных точек программы.
Зачем нужны подпрограммы?
Применение подпрограмм дает возможность уменьшать число повторений одной и той же последовательности операторов, а также конструировать программу как набор отдельных подпрограмм. Это позволяет получить более логичный процесс программирования.
Где располагаются подпрограммы в программе?
В программе описание процедур и функций должно располагаться между разделами переменных и операторов.
Как работает компьютер по программе, имеющую подпрограммы?
Выполнение программы, имеющую подпрограмму, начинается с выполнения основной программы. Как только в программе идет обращение к подпрограмме, данные из основной программы (входные данные) передаются в подпрограмму, которая начинает выполняться. Затем результаты подпрограммы (выходные данные) передаются в основную программу в то место, откуда был сделан вызов подпрограммы, и продолжает выполняться основная программа.
Как оформляется подпрограмма?
Подпрограмма оформляется подобно основной программе, т.е. состоит из заголовка, раздела описаний, раздела операторов.
Различие глобальных и локальных переменных?
Все имена, представленные в разделе описаний основной программы, называются глобальными. Они действуют как во всей основной программе, так и в любой подпрограмме. Имена, представленные в разделе описаний подпрограммы, называют локальными. Они действуют только в рамках подпрограммы и недоступны операторам основной программы.
Два вида подпрограмм в Паскале?
В языке Паскаль имеется два вида подпрограмм:
процедура (PROCEDURE), функция (FUNCTION)
Чем процедура похожа на функцию?
И процедура и функция – отдельные программные блоки.
И процедура и функция вызываются по имени из любой части основной программы.
В процедуру или функцию можно передавать фактические параметры (числа, слова и т.п.) для их работы (если они нужны)
После их выполнения продолжается выполнение основной программы с того места, где были вызваны процедура или функция.
Чем процедура отличается от функции?
После выполнения процедура не возвращает никакого результата в основную программу. Она не может быть вставлена внутрь арифметического выражения. Самый простой пример процедуры – СходитьВМузей(). Назад домой вы ничего не принесли .
Функция после выполнения возвращает результат (единственное значение!) в основную программу. Поэтому функцию можно использовать в арифметических выражениях. Самый простой пример функции – КупитьХлеб(деньги). Домой принесли хлеб.
Примечание: Если мы хотим в результате выполнения функции получить несколько значений (а возвращает только одно), то надо использовать подпрограмму и глобальные переменные.
Оформление процедуры.
PROCEDURE имя (формальные параметры);
раздел описаний
раздел операторов
Вызывается процедура по имени:
имя (фактические параметры);
Фактические и формальные параметры.
С помощью фактических и формальных параметров данные передаются из программы в процедуру и из процедуры в программу. В качестве формальных параметров могут быть только переменные с указанием типа, а в качестве фактических параметров могут быть константы, переменные, выражения без указания их типа. Порядок передачи фактических параметров должен соответствовать порядку формальных параметров, иначе возникнет путаница.
Как это делается:
Допустим, фактические параметры – это числа, с которыми должна работать процедура или функция. При вызове процедуры (функции) эти числа указываются в скобках. Тем самым они передаются телу функции для обработки. Однако процедура напрямую не работает с этими числами (или переменными, содержащими числа – можно их и так передать в функцию).
Процедура присваивает их (значения переменных или числа) своим формальным параметрам – внутренним (локальным) переменным. Функция (процедура) начинает работать со своими локальными переменными.
Результат выполнения передается в основную программу по-разному.
Ещё раз о параметрах процедуры
Процедура может содержать несколько операторов и несколько результатов выполнения. Каждый результат обозначается своим именем. В основной программе после вызова процедуры мы можем пользоваться этими результатами, сохраняя те же имена или давая другие.
Пример. Допустим, вызывается процедура нахождения площади прямоугольника: PLOSH(A,B,S) или PLOSH(3,2.5,S). Переменные А и В содержат значения сторон, которые передаются в процедуру для решения. После решения ответ передается в переменную S. Эту S можно использовать в основной программе, так как она объявлена как глобальная переменная. Это был вызов процедуры.
Понятно, что прежде чем вызывать процедуру, ее нужно описать. В нашем случае заголовок будет выглядеть так:
PROCEDURE PLOSH(dlina, shirina:integer; VAR otvet: integer);
Переменные dlina, shirina, otvet – формальные переменные (внутренние переменные процедуры). Им в соответствие ставятся фактические переменные А, В, S при вызове процедуры. Далее при вызове происходит следующее: значение переменной А присваивается переменной dlina, значение переменной В присваивается переменной shirina, а после всех вычислений значение переменной otvet присваивается переменной S. Таким образом результат из процедуры выходит «наружу», в основную программу.
Параметры процедуры делятся на отдельные виды, но в простых программах чаще всего используются параметры-значения (у нас А, В) и параметры-переменные (у нас S). В формальных параметрах процедуры перед параметрами-переменными ставится слово VAR. Данные этих параметров передаются в обоих направлениях: из программы в процедуру и, наоборот, из процедуры в программу.
В случае переопределения этих данных в процедуре, они все равно доступны программе. Если в процедуре перед формальными параметрами не стоит слово VAR, то такие параметры называются параметрами-значениями. Их можно передавать только в одном направлении: из программы в процедуру. Эти параметры не могут быть результатом выполнения процедуры. Таким образом, параметры-значения могут быть только входными для процедуры, а параметры-переменные как входными, так и выходными.
Пусть имеется процедура:
Procedure summa(a:integer; var b:integer);
Посмотрим, чему будут равны значения А и В в основной программе после выполнения следующих операторов:
Здесь значения А = 5 и В = 5 передаются в процедуру, где вычисляются новые значения А=5+3=8 и В=5+3=8. Новое значение В передается в программу, а значение А – нет. Поэтому в основной программе будем иметь А=5, В=8.
Примеры программ с процедурами.
Пример 1. Вычислить:
Степень находить так: X N = X X X . X
program pr1;
var d,z,m,,a,b,c:integer;
y,y1,y2,y3: real;
var i:integer;
for i:=1 to n do
Пример 2. Среди трехзначных чисел найти такие, в которых сумма факториалов цифр равнялась бы самому числу. (факториал числа – это последовательное произведение чисел, начиная с 1 и до этого числа: 4! = 1*2*3*4)
program pr2;
var a,b,c,i,s1,s2,s3:integer;
procedure faktor(x:integer; var s:integer);
var i:integer;
for i:=1 to x do
for i:=100 to 999 do
if s1+s2+s3=i then writeln (i);
Оформление функций.
Функция, как и процедура, может содержать несколько операторов, несколько входных параметров, но результат ее выполнения только один. Этот единственный результат обозначается именем функции и передается в основную программу. Если нам нужно возвратить больше одного результата, то придется иметь дело с процедурой.
В общем виде функция записывается так:
FUNCTION ИМЯ(список формальных параметров: тип): тип;
Вызывается функция по ее имени с указанием фактических параметров. При этом вызов функции можно делать непосредственно внутри выражения, подобно тому, как используются стандартные встроенные функции, например SIN(X).
Примеры программ с функциями:
Тот же самый пример , но с использованием функции:
program pr1;
var d,z,m,a,b,c:integer;
function step(x,n:integer):real;
var i,w:integer;
for i:=1 to n do
y:=(step (d,a)+step (z,b))/step (m,c);
Пример.
Даны действительные числа S и T. Получить: F(T,-2*S,1.17) + F(2.2,T,S-T),
program pr3;
var y,t,s:real;
function form(a,b,c:real):real;
y:=form(t,-2*s,1.17)+form(2.2,t,s-t);
Пример 4. Даны действительные числа a,b,c. Получить:
program pr4;
var a,b,c,z:real;
function max(x,y:real):real;
var m:real;
if x>y then m:=x else m:=y;
Ещё различие процедур и функций.
Функции являются частным случаем процедур и принципиально отличаются от них тем, что:
1. результат выполнения функции — одно значение, а процедуры — одно или несколько;
2. результат выполнения функции передается в основную программу как значение имени этой функции, а результаты выполнения процедуры — как значения ее параметров.
ЗАДАНИЯ на использование процедур:
Даны координаты вершин треугольника и точки внутри него. Найти расстояние от данной точки до ближайшей стороны треугольника.
1. Нахождение длин сторон (OB, OC,OA,BA,CA,BC). (Процедура dlin)
2. Нахождение площади трех треугольников S1(ABO), S2 (OBC), S3 (OCA). (Процедура pl)
3. Нахождение высот треугольников. (Процедура vis)
4. Сравнение высот (нахождение до ближайшей стороны). (Процедура min)
Проверить результаты выполнения программы по таблице:
Источник: studfile.net
13) Функции в Си
Функция в C-программировании – это многократно используемый блок кода, который облегчает понимание, тестирование программы и может быть легко изменен без изменения вызывающей программы. Функции делят код и модулируют программу для лучшего и эффективного результата. Короче говоря, большая программа делится на различные подпрограммы, которые называются функциями
Когда вы разделяете большую программу на различные функции, становится легко управлять каждой функцией по отдельности. Всякий раз, когда в программе возникает ошибка, вы можете легко исследовать неисправные функции и исправлять только эти ошибки. Вы можете легко вызывать и использовать функции всякий раз, когда они требуются, что автоматически приводит к экономии времени и места.
В этом уроке вы узнаете
- Библиотека Vs. Пользовательские функции
- Объявление функции
- Определение функции
- Вызов функции
- Аргументы функции
- Переменная сфера
- Статические переменные
- Рекурсивные функции
- Встроенные функции
Библиотека Vs. Пользовательские функции
Каждая программа «C» имеет по крайней мере одну функцию, которая является основной, но программа может иметь любое количество функций. Функция main () является отправной точкой программы.
В программировании «С» функции делятся на два типа:
- Библиотечные функции
- Пользовательские функции
Разница между библиотекой и пользовательскими функциями заключается в том, что нам не нужно писать код для библиотечной функции. Он уже присутствует в заголовочном файле, который мы всегда включаем в начало программы. Вам просто нужно ввести имя функции и использовать его вместе с правильным синтаксисом. Printf, scanf являются примерами библиотечной функции.
Принимая во внимание, что пользовательская функция – это тип функции, в которой мы должны написать тело функции и вызывать функцию всякий раз, когда нам требуется, чтобы функция выполняла какую-то операцию в нашей программе.
Пользовательская функция всегда пишется пользователем, но позже она может быть частью библиотеки ‘C’. Это главное преимущество программирования на «С».
В «С» функции программирования делятся на три вида деятельности, такие как:
- Объявление функции
- Определение функции
- Вызов функции
Объявление функции
Объявление функции означает написание имени программы. Это обязательная часть для использования функций в коде. В объявлении функции мы просто указываем имя функции, которую мы собираемся использовать в нашей программе как объявление переменной. Мы не можем использовать функцию, если она не объявлена в программе. Объявление функции также называется « Прототип функции ».
Объявления функций (называемые прототипом) обычно выполняются над функцией main () и имеют общий вид:
return_data_type function_name (data_type arguments);
- Return_data_type : это тип данных значения функции вернулась обратно в вызывающем заявлении.
- Имя_функции : следуют круглые скобки
- Имена аргументов с их объявлениями типов данных могут быть заключены в круглые скобки.
Рассмотрим следующую программу, которая показывает, как объявить функцию куба для вычисления значения куба целочисленной переменной
#include /*Function declaration*/ int add(int a,b); /*End of Function declaration*/ int main()
Имейте в виду, что функция не обязательно возвращает значение. В этом случае используется ключевое слово void.
Например, объявление функции output_message указывает, что функция не возвращает значение: void output_message ();
Определение функции
Определение функции означает просто написание тела функции. Тело функции состоит из операторов, которые собираются выполнить определенную задачу. Тело функции состоит из одного или блока операторов. Это также обязательная часть функции.
int add(int a,int b) //function body
Вызов функции
Вызов функции означает вызов функции всякий раз, когда это требуется в программе. Всякий раз, когда мы вызываем функцию, она выполняет операцию, для которой она была разработана. Вызов функции является необязательной частью в программе.
result = add(4,5);
#include int add(int a, int b); //function declaration int main() < int a=10,b=20; int c=add(10,20); //function call printf(«Addition:%dn»,c); getch(); >int add(int a,int b) //function body
Addition:30
Аргументы функции
Аргументы функции используются для получения необходимых значений при вызове функции. Они соответствуют позиции; первый аргумент передается первому параметру, второй – второму параметру и так далее.
По умолчанию аргументы передаются по значению, в котором копия данных передается вызываемой функции. Фактически переданная переменная не изменится.
Мы рассмотрим следующую программу, которая демонстрирует параметры, передаваемые по значению:
int add (int x, int y); int main() < int a, b, result; a = 5; b = 10; result = add(a, b); printf(«%d + %d = %dn», a, b, result); return 0;>int add (int x, int y)
5 + 10 = 15
Имейте в виду, что значения a и b, переданные функции add, не изменились, поскольку в параметр x было передано только его значение.
Переменная сфера
Область видимости переменных означает видимость переменных в коде программы.
В C переменные, которые объявлены внутри функции, являются локальными по отношению к этому блоку кода и не могут быть указаны вне функции. Однако переменные, которые объявлены вне всех функций, являются глобальными и доступны из всей программы. Константы, объявленные с помощью #define вверху программы, доступны из всей программы. Рассмотрим следующую программу, которая печатает значение глобальной переменной из основной и пользовательской функций:
#include int global = 1348; void test(); int main() < printf(«from the main function : global =%d n», global); test () ; return 0;>void test ()
from the main function : global =1348 from user defined function : global =1348
Обсуждаем детали программы:
- Мы объявляем целочисленную глобальную переменную с 1348 в качестве начального значения.
- Мы объявляем и определяем функцию test (), которая не принимает аргументы и не возвращает значение. Эта функция печатает только значение глобальной переменной, чтобы продемонстрировать, что к глобальным переменным можно получить доступ в любом месте программы.
- Мы печатаем глобальную переменную внутри главной функции.
- Мы вызываем тестовую функцию в orde для вывода значения глобальной переменной.
В C, когда аргументы передаются в параметры функции, параметры действуют как локальные переменные, которые будут уничтожены при выходе из функции.
Когда вы используете глобальные переменные, используйте их с осторожностью, потому что это может привести к ошибкам, и они могут измениться в любом месте программы. Они должны быть инициализированы перед использованием.
Статические переменные
Статические переменные имеют локальную область видимости. Однако они не уничтожаются при выходе из функции. Следовательно, статическая переменная сохраняет свое значение навсегда и может быть доступна при повторном вводе функции. Статическая переменная инициализируется при объявлении и требует префикса static.
Следующая программа использует статическую переменную:
#include void say_hi(); int main() < int i; for (i = 0; i < 5; i++) < say_hi();>return 0;> void say_hi()
Hi number 1 Hi number 2 Hi number 3 Hi number 4 Hi number 5
Рекурсивные функции
Рассмотрим факториал числа, который рассчитывается следующим образом 6! = 6 * 5 * 4 * 3 * 2 * 1.
Этот расчет выполняется как многократный расчет факта * (факт -1), пока факт не станет равен 1.
Рекурсивная функция – это функция, которая вызывает себя и включает условие выхода для завершения рекурсивных вызовов. В случае вычисления факториального числа условие выхода равно 1. Фактически рекурсия работает путем «суммирования» вызовов до тех пор, пока условие выхода не станет истинным.
#include int factorial(int number); int main() < int x = 6; printf(«The factorial of %d is %dn», x, factorial(x)); return 0;>int factorial(int number) < if (number == 1) return (1); /* exiting condition */ else return (number * factorial(number — 1)); >
The factorial of 6 is 720
Здесь мы обсуждаем детали программы:
- Мы объявляем нашу рекурсивную факториальную функцию, которая принимает целочисленный параметр и возвращает факториал этого параметра. Эта функция будет вызывать сама себя и уменьшать число до выхода или до достижения базового условия. Когда условие истинно, ранее сгенерированные значения будут умножены друг на друга, и будет возвращено окончательное факториальное значение.
- Мы объявляем и инициализируем целочисленную переменную со значением «6», а затем печатаем ее факториальное значение, вызывая нашу факториальную функцию.
Рассмотрим следующую таблицу, чтобы лучше понять рекурсивный механизм, который состоит в том, чтобы вызывать саму функцию, пока не будет достигнут базовый случай или условие остановки, и после этого мы собираем предыдущие значения:
Встроенные функции
Функции используются для хранения наиболее часто используемых инструкций. Он используется для модуляции программы.
Всякий раз, когда вызывается функция, указатель инструкции переходит к определению функции. После выполнения функции указатель инструкции возвращается к оператору, с которого он перешел к определению функции.
Всякий раз, когда мы используем функции, нам требуется дополнительная головка указателя, чтобы перейти к определению функции и вернуться к выражению. Чтобы исключить необходимость использования таких указателей, мы используем встроенные функции.
Во встроенной функции вызов функции напрямую заменяется реальным программным кодом. Он не перепрыгивает ни на один блок, потому что все операции выполняются внутри встроенной функции.
Встроенные функции в основном используются для небольших вычислений. Они не подходят для больших вычислений.
Встроенная функция похожа на обычную функцию, за исключением того, что ключевое слово inline помещается перед именем функции. Встроенные функции создаются со следующим синтаксисом:
inline function_name () < //function definition >
Давайте напишем программу для реализации встроенной функции.
inline int add(int a, int b) //inline function declaration < return(a+b); >int main()
Addition: 30
Выше программа демонстрирует использование встроенной функции для сложения двух чисел. Как мы видим, мы вернули сложение по двум числам внутри встроенной функции только без написания лишних строк. Во время вызова функции мы только что передали значения, по которым мы должны выполнить сложение.
Резюме
- Функция – это мини-программа или подпрограмма.
- Функции используются для модульной программы.
- Библиотека и определяемые пользователем два типа функций.
- Функция состоит из объявления, тела функции и части вызова функции.
- Объявление функции и тело являются обязательными.
- Вызов функции может быть необязательным в программе.
- С программа имеет хотя бы одну функцию; это основная функция ().
- Каждая функция имеет имя, тип данных возвращаемого значения или void, параметры.
- Каждая функция должна быть определена и объявлена в вашей C-программе.
- Имейте в виду, что обычные переменные в функции C уничтожаются, как только мы завершаем вызов функции.
- Аргументы, передаваемые в функцию, не будут изменены, поскольку они передаются по значению none по адресу.
- Область видимости переменной называется видимостью переменных в программе
- В программировании на С есть глобальные и локальные переменные
Источник: coderlessons.com
§ 9.2. Процедуры и функции
В различных примерах программ мы обращали ваше внимание на повторяющийся код, который значительно увеличивал объем этих программ. Для оптимизации программного кода, чтобы сделать его более понятным и удобным для восприятия, используются подпрограммы. Подпрограмма (англ. subroutine) позволяет вынести часть реализации (некоторую вполне самостоятельную подзадачу или алгоритм) за пределы основной программы и обращаться к ней, по мере необходимости, по имени, из любой части программы. Таким образом, можно не только сократить программный код, но и сделать его более структурированным.
Существует две разновидности подпрограмм: процедуры и функции. Но это деление чисто условное. В C++ между функциями и процедурами нет больших синтаксических различий, поэтому они имеют общее наименование – функции. Функция может принимать аргументы (не обязательно) и возвращать некоторое значение, возможно пустое ( void ). Если функция не возвращает никакого значения, то такая функция называется процедурой. В отличие от процедур, функции всегда возвращают результат в точку вызова.
Просмотр данного материала ограничен! Это закрытая часть сайта, которая доступна только подписчикам! Оформить подписку вы можете на этой странице
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник: inf-w.ru