Загрузка данных



Копировать
нужно все выполнить 
ЮНИТ 14. ФУНКЦИИ И ПРОЦЕДУРЫ В ЯЗЫКЕ 1 С
(ПРОДОЛЖЕНИЕ)
В юните 13 мы начали знакомство с функциями и процедурами
в языке lC 8.3. Так как это действительно важная тема, продолжим
их изучение.
Функции
- продолжение ...
Итак, мы уже уяснили, что все программы состоят из команд компьютеру.
А функции
- это способ группировки этих команд точно так же,
как, например, папки на компьютере
- способ группировки для
файлов.
Еще функцию можно рассматривать как черный ящик, внутри
которого лежат какие-то команды для компьютера. Черный ящик
имеет имя. И чтобы заставить компьютер выполнить команды из
этого ящика, нам нужно указать его имя, например, так:
ЧёрныйЯщик();
Как видите, вызов "черного ящика" сам по себе является командой. При вызове черного ящика выполнятся все команды, которые
находятся внутри него.
Более того, один ящик может содержать в себе не только команды, но и другие ящики, точно так же, как папки могут быть вложенными в другие папки. Вполне понятная аналогия.
Но черные ящики ( функции) имеют такую особенность:
1. Они могут содержать входные отверстия ( одно или несколько)
для того, чтобы мы в них могли что-то положить (параметры).
78
2. И они обязательно содержат одно выходное отверстие, из которого мы сможем забрать результат работы ящика ..
3. Ящик-функция просто обязан вернуть нам хотя бы какой-то
результат в выходное отверстие.
Пусть нам нужен ящик, в который мы будем класть два числа,
а он будет возвращать их сумму.
1. Придумываем имя для этого ящика - "Сумма Чисел".
2. Придумываем имена для входных отверстий этого ящика (параметров). Их два (числа), поэтому пусть будет - "ЧислоА" и "ЧислоБ'.
3. Пишем объявление самого ящика (функции):
Функция Сумма Чисел ЧислоА, ЧислоБ)
Конец Функции
4. Теперь нам осталось поместить внутри ящика команды, которые посчитают сумму входных параметров ( ЧислоА и ЧислоБ) и вернут их в выходное отверстие (команда Возврат):
Функция Сумма Чисел ЧислоА, ЧислоБ)
Результат = ЧислоА + ЧислоБ;
Во врат Результат;
Конец Функции
5. Отлично! Теперь мы можем использовать этот черный ящик
в своей работе. Вызывается он так:
Число С = Сумма Чисел( 1 , 25);
Сообщить ЧислоС ; // выведет 35
6. Обращаю ваше внимание, что при вызове мы указали имя ящика (Сумма Чисел), а затем его входные параметры в круглых скобках.
Ящик выполнил свою работу и вернул результат в переменную ЧислоС, значение которой мы вывели командой Сообщить.
А вот как выглядит ящик, который принимает всего одно число
и возвращает квадрат этого числа:
Функция КвадратЧисла ЧислоА)
Результат = ЧислоА * ЧислоА;
Во врат Результат;
Конец Функции
Вызывается он так:
Сообщить КвадратЧисла lО)) ; // выведет 100
Функции (ящики) могут принимать и один, и два, и три и гораздо
больше входных параметров. А могут и совсем не принимать.
79
Для примера давайте напишем функцию, которая всегда возвращает в качестве результата работы строку "Привет":
Функция Привет()
Во врат "Привет" ;
Кон цФункции
Так как функция (ящик) совсем не содержит входных параметров
(отверстий), то внутри круглых скобок при вызове писать ничего не
нужно:
Строка = Привет() ;
Сообщить( Строка ;
Процедуры - продолжение ...
Что же такое процедуры? Да те же черные ящики:
И входные отверстия (параметры) у них имеются.
И команды они в себе также могут содержать.
И другие ящики они также в себя могут включать.
А главное отличие процедур от функций в том, что они не содержат выходного отверстия. То есть процедура не возвращает нам обратный результат.
Таким образом, если нам нужно объединить группу команд, которая что-то сделает и вернет нам результат (например, сумму чисел),
то используем функции.
А если обратного результата не будет - то процедуры. Процедуры
являются как бы укороченными функциями. Более простыми. Они
могут принимать входные параметры и что-то с ними делать, но они
не возвращают нам обратный результат после своей работы.
Давайте в качестве примера напишем такой ящик-процедуру, который будет принимать на вход число и, если это число больше или
равно нулю, то прямо внутри ящика будет выводится сообщение
"положительное число", иначе "отрицательное число".
1. Определим имя нашего ящика - "ОписаниеЧисла".
2. Определим имя входного параметра - "ЧислоА".
3. Определим описание нашего ящика:
Проц дура Описание Числа ЧислоА)
Кон цПроцедуры
4. Теперь поместим внутрь ящика команды, которые выведут описание числа в зависимости от его знака:
80
Проце ура Описание Числа ЧислоА)
Если ЧислоА >= О Тогда
Сообщить(" положительное число");
Иначе
Сообщить "отрицательное число");
КонецЕсли;
КонецПроцедуры
5. А вызывать наш ящик будем так:
ОписаниеЧисла(- );
Задание №37. Напишите ящик, который принимает радиус круга,
а возвращает его площадь. Продемонстрируйте его использование.
Решение
//*** Модуль уроки *** /// Функция ПлощадьКруга Радиус) Экспорт
Пи = 3.14;
Возврат Пи * Радиус * Радиус ;
Конец Функции
//*** Модуль управляемого приложения *** /// Радиус = ;
Ввести Число Радиус);
ОткрытьЗначение(
"Площадь круга радиусом " + Радиус +
" равна " + Уроки ПлощадьКруга Радиус)
Задание №38. Напишите ящик, который принимает две строки,
а возвращает их объединение (или, как говорят, конкатенацию). То
есть передали "Иван" и "Петров", а вернул "Иван Петров". Продемонстрируйте его использование.
Решение
//*** Модуль уроки *** /// Функция ФИО Имя, Фамилия) Экспорт
Возврат Имя + " " + Фамилия;
Конец Функции
//*** Модуль управляемого приложения *** /// ВашеИмя = "" · ' ВвестиСтроку ВашеИмя, "Введите ваше имя");
Ваша Фамилия = "";
81
ВвестиСтроку ВашаФамилия , "Введите вашу фамилию");
ОткрытьЗначение(" Здравствуйте, " + Уроки ФИО ВашеИмя, ВашаФамилия));
Задание №39. Напишите ящик, который принимает два числа,
а при своей работе выводит на экран все целые числа в промежутке
от первого до второго числа. Например, передали 1 и 5, а он вывел:
123 4 5. Продемонстрируйте его использование.
Решение
//*** Модуль уроки *** // Процедура ВывестиЧисла ПервоеЧисло, ПоследнееЧисло) Экспорт
Строка = "";
Для Шаг = Первое Число По Последнее Число Цикл
Строка = Строка + Шаг + " "; КонецЦикла;
ОткрытьЗначение Строка);
КонецПроцедуры
//*** Модуль управляемого приложения *** // ПервоеЧисло = ;
ВвестиЧисло ПервоеЧисло, "Введите первое число");
ВтороеЧисло = ;
ВвестиЧисло ВтороеЧисло , "Введите второе число");
Уроки ВывестиЧисла ПервоеЧисло, ВтороеЧисло);
Пройдите тест по следующему примеру:
Процедура Привет(Число)
Сообщить("Привет!");
Сообщить("Я процедура и меня только что вызвали.");
Сообщить("У меня всего один параметр и его имя Число.");
Сообщить("При моем вызове его значение указали равным " + Число);
КонецПроцедуры
Тест
1. Имя описанной процедуры:
1) Число;
2) Сообщить;
3) Привет;
4) Процедура.
82
2. Перед нами:
1) вызов функции;
2) описание процедуры;
3) вызов процедуры;
4) описание функции.
3. У процедуры Привет:
1) 1 параметр;
2) нет параметров;
3) 2 параметра;
4) 3 параметра.
4. Чтобы вызвать процедуру Привет со значением параметра Число,
равным 1 О, нуисно написать:
1) Привет(lО);
2) Привет{lО};
3) Привет 10;
4) Привет[lО];
5. Если написать Привет(JО); Привет(JО); сколько строк появится
в окне сообщений?
1) 16;
2) 12;
3) 4;
4) 8.
6. Чтобы при ка исдом вызове процедуры Привет первой строкой выводилось не "Привет!", а "Пока!":
1) необходимо дописать после Сообщить("Привет!") Сообщить
("Пока!");
2) это невозможно;
3) необходимо заменить Сообщить("Привет ") на Сообщить
("Пока!").
7. Как мы мо;;1сем внутри процедуры Привет обращаться к значению
параметра, указанного при вызове?
1) по имени ЗначениеПараметра;
2) по имени Параметр;
3) по имени Значение;
4) по имени Число.
Пройдите тест по следующему примеру:
Функция Утроение( Строка)
Сообщить("Я функция Утроение. Меня вызвали.");
83
Сообщить("Мне передали параметр с именем Строка и значением"+ Строка);
Сообщить("Я утрою этот параметр и верну как результат своей
работы.");
Возврат Строка + Строка + Строка;
КонецФункции
Тест
1. Перед нами:
1) вызов функции;
2) вызов процедуры;
3) описание функции;
4) описание процедуры.
2. Имя описанной функции:
1) Возврат;
2) Функция;
3) КонецФункции;
4) Утроение.
3. У функции Утроение:
1) 3 параметра;
2)
3)
4)
нет параметров;
1 параметр;
2 параметра.
4. Функция Утроение:
1) выводит сообщения и возвращает утроенное значение параметра, переданного при вызове;
2) только возвращает утроенное значение параметра, переданного при вызове;
3) только выводит сообщения;
4) она ничего не делает.
5. Чтобы вызвать функцию Утроение с параметром ''Лето·~ необходимо написать:
1) Утроение["Лето"];
2) Утроение("Лето");
3) Утроение{"Лето"};
4) Утроение "Лето".
6. К параметру ''Лето·: переданному в функцию Утроение при вызове:
1) из функции можно обращаться по имени Значение;
2) из функции можно обращаться по имени Число;
3) из функции можно обращаться по имени Строка;
4) из функции можно обращаться по имени Параметр.
84
7. Чтобы сохранить результат, который вернет функция Утроение,
необходимо написать:
1) Утроение(Результат, "Лето");
2) Утроение("Лето") = Результат;
3) Утроение("Лето", Результат);
4) Результат= Утроение("Лето").
8. Сработает ли такой вызов Утроение(''Лето ·~ "Весна")?
1) выдаст ошибку, ведь в описании функции указан всего один
параметр;
2) сработает без ошибок, но "Весна" проигнорируется;
3) сработает без ошибок, к значению "Весна" можно будет также обращаться из функции;
4) сработает без ошибок, но функция не вернет результата.
ЮНИТ 15. ОТЛАДКА В ЯЗЫКЕ 1 С
Как вы знаете, выполнение программы lC компьютером - это
последовательное исполнение команд, написанных программистом.
В данном юните мы научимся останавливать компьютер во время
выполнения определенной команды и просматривать значения переменных в этот самый момент.
Этот процесс в 1 С называется отладкой и он бывает очень полезен
для того, чтобы разобраться в том, как программа работает. Благодаря отладке мы также можем легко находить ошибки, которые допустили на этапе написания кода.
Итак, давайте начнем наш эксперимент.
Напишите в модуле управляемого приложение следующий код:
· ' = 5· ' Сумма А + ;
Сообщить Сумма);
Сумма = Сумма * 2;
Сообщить Сумма);
Код очень простой. Сначала мы определяем две переменные
с именами А и Б и значениями 3 и 5 соответственно. Затем складываем эти числа и кладем результат сложения в переменную с именем
Сумма. Затем выводим это значение на экран. Затем удваиваем это
значение. И снова выводим.
Как уже было сказано, компьютер выполняет все эти команды
последовательно, одну за другой. Давайте заставим его остановиться
на пятой строчке, в которой мы выводим результат сложения двух
чисел.
85
Для этого установим курсор мыши в пятую строчку:
О КонФиrgрация: MOAgnь gnравпя моrо приложения l = ;
Б = S;
Сух,~ма = А + Б ;
Сообщитъ ) ;
Сух,~иа = Cyt.n-ta 1t 2 ;
Сообщитъ Сумма ;
И в главном меню выберем команду тладка" - "Точка останова".
1 Отла.ака ] Аа,,,,инистрирование Сервис Окна CnQ
Нача,ъ отла.о,ку FS
Начало отла.аки ►
Остановка о ошибке ...
о.аключение ...
t) Точка останова FЭ 1
ю Точка останова с )'словием ...
Отключить точк;• останова Q~ ... Shtt+f 9
~ Убра,ъ все точки останова
Тогда слева от пятой строки появится красный кружок. Этот кружок и означает, что компьютер при переходе к этой строке елает
остановку. В момент остановки у нас удет возможность более детально исследовать состояние нашей программы.
86
CJ Кон : Моду,ь уnравnяемого приnо:хения
= ;
В == 5 ;
Сумма = А - ;
Сообfдить Сумма ;
Сумма = Сумма * 2;
Сообщить ( Сумма ) ;
Теперь запустим отладку программы. Для этого через главное
меню выполним команду "Отладка" - "Начать отладку".
Отладка J Администрирование ~рвис Qкна U1Q
1
@ Нач пь oтлaJll(}' F5
Начало тладки ►
Остановка по ошибке ...
Подключение ...
t) Точка останова F9
Ю Точка останова с условием ...
~ Отключить ,очку останова
~ Убрать все 'ЮЧl<И останова
И увидим, что компьютер дошел до пятой строчки и замер в ожидании наших дальнейших действий. Об этом свидетельствует стрелка, появившаяся слева от пятой строки. Эта стрелка указывает нам,
на какой команде находится компьютер в данный tv1омент исполнения программы.
А = ;
Б = S;
Сумма = А + ;
\.9 ~ообwить ( Сумма : ;
Сумма = Сумма 1t 2 ;
Сообщить ( Сумма) ;
Предположим, что мы хотим увидеть, чему равно значение переменной Сумма в данный момент. Для этого выделим мышкой эту
переменную:
1 Сообщить 1@j,jp1;
И выполним через главное меню команду "Отладка"-"Вычислить
выражение... " :
87
От лаа.ка Администрирование .{;ервис Q.кна CnQ
► Продолжить отпа.цк~ F5
Начало отпа.ц и ►
► Пере а~стить Ctrl+Shlt+F5
.... Завершить Sh/t+F5
11 Остановить
Остановка по ошибке ...
Подключение. ..
р
Вы~нс11ить выраженне t+
Табло Ct,l+At+W
~ Стек вы3080в Ct,l+Ak+C
ф амер прои водительности
Откроется следующее окно, в котором мы видим нашу переменную и ее значение в данный момент. Оно действительно равно восьми. Закройте это окно.
~-
~ние:
ё"m
Рщnьrс~т:
СеоАспsо 1 Значение ITm Сумма 8 Число
Но давайте заставим компьютер выполнить текущую команду и перейти к следующей. Для этого вьшолним "Отладка"-"Шагнуть через":
-
Отлаа.ка АдмЮiистрирован1-1е ~ервис Q. а л.12
[ ~ Продолжить отпаnк~ F5
Начало отмд и ►
~ еза стиrь Ctrl+Shift+F5
[} Эавеl)Wl,Пь Shirt+F5
W.I Останоеиrь
О ст овка о оw1-1бке. ..
П 04КJIIО'(ение ...
~} Wа н~ье F11
oi аrн~ь ерез Fl','\
oi Wаrн~ьиз Shift+F11
о Ид 1-1 до !IPCOl)a Shift+F10
88
И мы увидим, что стрелка выполнения переместилась на следующую команду, которая удваивает значение переменной Сумма:
= ;
а S;
Сумма = + ;
О Сообщить Сумма);
◊ умма = умма "' 2 ;
Сообщить Сумма);
И еще раз выполним "Отладка"-"Шагнуть через", чтобы стрелочка оказалась на последней строке:
= ;
Б • S;
Сумма = А + ;
U Сообщить Сумма);
Cyt·U-ta = Сумма ~ 2 ;
◊ Сообщить Сумма);
А теперь снова выделим переменную Сумма и выполним
"Отладка" "Вычислить выражение ... ". Как видите, значение переменной Сумма теперь стало равно 16:
Выражение
~ыраже ие:
liliSiS&
еg ьтат:
Свойство Зкаче ие
16
п
Чис о
Чтобы прекратить отладку программы, выполним команду
"Отладка" "Завершить".
QтtWЩt а ~~ ~ Qкн.ii
r ► Продолжить OТJ\ao.K!I - ~
H~JIO ОТ!WЩКИ
П~ить
Осr-'НОеКа по ош-16ке .
►
Ctll+Sh:ft+F5
89
Когда отладка закончена и мы не хотим, чтобы компьютер останавливался во время выполнения программы, просто выполним
"Отладка" "Убрать все точки останова", и все красные точки из программы исчезнут.
Выполните отладку следующей программы:
МассивЧисел = Новый Массив ; // объявим массив на
// 5 ящиков
МассивЧисел ] = 10;
МассивЧисел ] = 5;
МассивЧисел ] = 450;
МассивЧисел ] = 654;
МассивЧисел ] = 34;
/ / изначально делаем наименьшее число заведомо очень
// большим
Наименьшее Число = 1000000;
Для Шаг = О По 4 Цикл // пробегаемся по всем
/ / значениям массива
// если в массиве есть число меньшее,
// чем НаименьшееЧисло
Если МассивЧисел Шаг] < НаименьшееЧисло Тог а
/ / тогда его и делаем новым наименьшим числом
Наименьшее Число = МассивЧисел Шаг];
КонецЕсли;
КонецЦикла;
Сообщить "Наименьшее из введенных чисел равно " + Наи -
меньшее Число);
В процессе отладки установите в качестве точки останова саму
первую строку и последовательно выполняйте команды одну за одной. На каждом шаге вычисляйте значения переменных. Экспериментируйте до тех пор, пока не освоите этот замечательный и столь
необходимый в работе инструмент.
Пройдите тест
1. В программе встретилась новая для вас команда. Как посмотреть
справку именно по ней?
1) установить курсор на ее имя и нажать Ctrl + Пробел;
2) установить курсор на ее имя и нажать Ctrl + Shift + Пробел;
3) установить курсор на ее имя и нажать Shift + Fl;
4) установить курсор на ее имя и нажать Ctrl + Fl.
90
2. Вы пишите длинное название команды. Написа и ее часть (начао) и хотите, чтобы JC допо нила ее написание.
1) нажмите Ctrl + F 1;
2) нажмите Ctrl + Shift + Пробел;
3) нажмите Shift + Fl;
4) нажмите Ctrl + Пробел.
3. Вы написа и вызов команды, поставили открыва1ощуюся круглую
скобку и хотите, чтобы JC пока а вам справку по параметрам для
этой команды.
1) нажмите Shift + Fl;
2) нажмите Ctrl + Fl;
3) нажмите Ctrl + Пробел;
4) нажмите Ctrl + Shift + Пробел.
Дома нее задан е
Найдите и изучите в синтакс-помощнике информацию по едующим, уже знакомым нам объектам:
• ЦиклДля;
• Цикл Пока;
• Ус овный оператор Если Тог а;
• Структура.