Мой комп - Железо. Windows. Интернет. Программы

Написание программного кода с использованием процедур. Вопросы и задания Ввод данных с клавиатуры

«Принтер для печати пластиковых карт» - Возможность разместить в два раза больше информации на одной пластиковой карте. Стоимость. Принтер для печати пластиковых карт. ZEBRA P110i/ P120i. Обзор модельного ряда. Экономичные полноцветный принтеры для печати пластиковых карт. Высокая производительность Широкий выбор дополнительных устройств кодирования.

«Периферийные устройства ПК» - Периферийные устройства. Принтеры. Запись. Цифровые фотоаппараты. Иерархия средств подключения. Видеоадаптеры. Классификация ПУ. Универсальная последовательная шина. CD-R. Параметры выбора. Встроенная вспышка. Первопроходцы. Природа. Модем. Видеотерминал. Сканеры. Периферийные устройства ПК. Классификация мышковидных.

«Средства ввода и вывода информации» - Сканер. Плоттер. ЭЛТ. Принтеры. Клавиатура. Цифровые камеры и фотоаппараты. Функции. Универсальное устройство для ввода. Устройства ввода и вывода информации. Графический планшет. Мышь.

«Устройства вывода информации» - Устройство компьютера. Чем больше разрешающая способность монитора, тем выше качество изображения. Недостатки струйных принтеров: Большой расход чернил; Высокая стоимость заправки. Плоские мониторы на жидких кристаллах (ЖК) компактны и не имеют излучения. Устройства вывода информации. Монитор является универсальным устройством вывода информации.

«Принтеры» - Локальные. Термоблок, печка, fuser - узел в котором тонер впекается в бумагу. Лазерные. Матричные (игольчатые). Со временем теряют свои свойства и подлежат регулярной замене специалистом. Струйные. Сетевые. Меняется пользователем. Характеристики принтеров. Девелопер, носитель, developer - мельчайшие металлические частицы, переносящие тонер на фотовал.

«Подсистема ввода-вывода» - Точка прерывания. Таблицы. Непрерывное размещение. Атрибут. Разрешения на доступ к файлам. Связный список индексов. Данные. Физическая организация. Прямой доступ к памяти. Индексно-последовательный файл. Монтирование. Ввод-вывод, управляемый прерываниями. Разрешения на доступ к каталогам. Организация параллельной работы.

Всего в теме 27 презентаций

В качестве первого операнда – "выражение1" – может быть использовано любое выражение, результатом которого является значение типа bool . Если результат равен true , то выполняется оператор, заданный вторым операндом, то есть, "выражение2".

Если же первый операнд paвен false , то выполняется третий операнд – "выражениеЗ". Второй и третий операнды, то есть "выражение2" и "выражениеЗ", должны возвращать значения одного типа и не должны иметь тип void . Результатом выполнения условного оператора является результат "выражения2" либо результат "выражение3", в зависимости от результата "выражение1".

Ограничения по использованию оператора

Оператор на основании значения "выражение1" должен вернуть одно из двух значений - либо "выражение2", либо "выражение3". Существует ряд ограничений на эти выражения:

  1. Нельзя смешивать пользовательский тип с простым типом или перечислением . Для указателя допустимо использовать NULL .
  2. Если типы значений простые, то типом оператора будет максимальный тип (смотри Приведение типов).
  3. Если одно из значений имеет тип перечисление, а второе является числовым типом, то перечисление заменяется на int и действует второе правило.
  4. Если оба значения являются значениями перечислений, то их типы должны быть одинаковыми, и типом оператора будет перечисление.

Ограничения для пользовательских типов (классов или структур):

  1. типы должны быть одинаковыми или один должен наследоваться от другого.
  2. если типы не одинаковы (наследование), то потомок неявно приводится к родителю, то есть типом оператора будет тип родителя.
  3. нельзя смешивать объект и указатель – либо оба выражения являются объектами, либо указателями . Для указателя допустимо использовать NULL .

Примечание

Будьте внимательны при использовании условного оператора в качестве аргумента перегруженной функции , так как тип результата условного оператора определяется на момент компиляции программы. И этот тип определяется как больший тип из типов "выражение2" и "выражение3".

Пример:

void func(double d) { Print ("double argument: " ,d); }
void func(string s) { Print ("string argument: " ,s); }

bool Expression1=true;
double Expression2=M_PI;
string Expression3= "3.1415926" ;

void OnStart ()
{
func(Expression2);
func(Expression3);

func(Expression1?Expression2:Expression3);
func(!Expression1?Expression2:Expression3); // получим предупреждение компилятора о явном приведении к типу string
}

// Результат:
// double argument: 3.141592653589793

// string argument: 3.141592653589793
// string argument: 3.1415926

В предыдущем параграфе мы познакомились со структурой программы на языке Паскаль, научились описывать данные, рассмотрели оператор присваивания. Этого достаточно для того, чтобы записать программу преобразования данных. Но результат этих преобразований нам виден не будет.

Для вывода данных из оперативной памяти на экран монитора используется оператор вывода write:

Здесь в круглых скобках помещается список вывода - список выражений, значения которых выводятся на печать. Это могут быть числовые, символьные и логические выражения, в том числе переменные и константы.

Произвольный набор символов, заключенный в апострофы, считается строковой константой. Строковая константа может содержать любые символы, набираемые на клавиатуре.

Пример . Оператор write ("s=" , s) выполняется так:

  1. на экран выводятся символы, заключенные в апострофы: s=
  2. на экран выводится значение переменной, хранящееся в ячейке оперативной памяти с именем s.

Если значение переменной s равно 15 и она имеет целочисленный тип, то на экране появится: s=15.

Если значение переменной s равно 15, но она имеет вещественный тип, то на экране появится: s=l.5Е+01.

При выполнении оператора вывода все элементы списка вывода печатаются непосредственно друг за другом. Так, в результате работы оператора write (1, 20, 300) на экран будет выведена последовательность цифр 120300, которая будет восприниматься нами как число 120300, а не как три отдельные числовые константы. Сделать выводимые данные более доступными для восприятия можно разными способами:

Формат вывода - это указываемое после двоеточия целое число, определяющее, сколько позиций на экране должна занимать выводимая величина. Если цифр в числе меньше, чем зарезервированных под него позиций на экране, то свободные позиции дополняются пробелами слева от числа. Если указанное в формате вывода после двоеточия число меньше, чем необходимо, то оно автоматически будет увеличено до минимально необходимого.

Для вывода вещественного числа в формате с фиксированной запятой в списке вывода для каждого выражения указывается два параметра:

  1. общее количество позиций, отводимых под число;
  2. количество позиций в дробной части числа.

При выполнение нового оператора write вывод продолжается в той же строке. Чтобы осуществить переход к новой строке, используется оператор writeln. Других различий между операторами write и writeln нет.

4.2.2. Первая программа на языке Паскаль

Пользуясь рассмотренными операторами, составим программу, вычисляющую длину окружности и площадь круга радиуса 5,4 см.

Исходными данными в этой задаче является радиус: r - 5,4 см. Результатом работы программы должны быть величины С - длина окружности и S - площадь круга. С, S и r - величины вещественного типа.

Исходные данные и результаты связаны соотношениями, известными из курса математики: С = 2πr, S = πr + . Программа, реализующая вычисления по этим формулам, будет иметь вид:

Эта программа верна и решает поставленную задачу. Запустив её на выполнение, вы получите следующий результат:

И всё-таки составленная нами программа имеет существенный недостаток: она находит длину окружности и площадь круга для единственного значения радиуса (5,4 см).

Для того чтобы вычислить длину окружности и площадь круга для другого значения радиуса, потребуется вносить изменения непосредственно в текст программы, а именно изменять оператор присваивания. Внесение изменений в существующую программу, по меньшей мере, не всегда удобно (например, когда программа большая и операторов присваивания много). Ниже вы познакомитесь с оператором, позволяющим вводить исходные данные в процессе работы программы, не прибегая к изменению текста программы.

4.2.3. Ввод данных с клавиатуры

Для ввода в оперативную память значений переменных используется оператор ввода read:

При выполнении оператора read компьютер переходит в режим ожидания данных: пользователь должен ввести данные с клавиатуры и нажать клавишу Enter. Несколько значений переменных числовых типов могут вводиться через пробел или через запятую. При вводе символьных переменных пробел и запятая воспринимаются как символы, поэтому ставить их нельзя.

Первое введённое пользователем значение переменной помещается в ячейку памяти, имя которой расположено первым в списке ввода, и т. д. Поэтому типы вводимых значений (входного потока) должны соответствовать типам переменных, указанных в разделе описания переменных.

Пример . Пусть

var i, j: integer; x: real; a: char;

Присвоим переменным i, j, x, а значения 1, 0, 2.5 и "А". Для этого воспользуемся оператором read (i, j, x, a) и организуем входной поток одним из следующих способов:

Здесь мы не только использовали различные разделители (пробел, запятая), но и входной поток представляли в виде одной, двух и четырёх строк.

Для ввода данных с клавиатуры можно также использовать оператор readln, который отличается от оператора read только тем, что после его выполнения курсор переходит на новую строку.

Усовершенствуем программу n_1, организовав в ней ввод данных с помощью оператора read. А чтобы пользователь знал, для чего предназначена программа, и понимал, какое именно действие ожидает от него компьютер, выведем соответствующие текстовые сообщения с помощью оператора writeln:

Результат работы усовершенствованной программы:

Теперь наша программа может вычислить длину окружности и площадь круга для любого значения r. Иначе говоря, она решает не единичную задачу, а целый класс задач. Кроме того, в программе понятно и удобно организован ввод исходных данных и вывод получаемых результатов. Это обеспечивает дружественность пользовательского интерфейса.

Самое главное

Для ввода в оперативную память значений переменных используются операторы ввода read и readln.

Для вывода данных из оперативной памяти на экран монитора используются операторы вывода write и writeln.

Ввод исходных данных и вывод результатов должны быть организованы понятно и удобно; это обеспечивает дружественность пользовательского интерфейса.

Вопросы и задания

  1. Запишите оператор, обеспечивающий во время работы программы ввод значения переменной summa.
  2. Целочисленным переменным i, у, k нужно присвоить соответственно значения 10, 20 и 30. Запишите оператор ввода, соответствующий входному потоку:
      а) 20 10 30
      б) 30 20 10
      в) 10 30 20
  3. Опишите переменные, необходимые для вычисления площади треугольника по его трём сторонам, и запишите оператор, обеспечивающий ввод необходимых исходных данных.
  4. Что является результатом выполнения оператора?
      а) write (а)
      б) write (1 а ")
      в) write (1 а=1, а)
  5. Какой тип имеет переменная f, если после выполнения оператора write (f) на экран было выведено следующее число?
      а) 125
      б) 1.25Е+2
  6. Каким образом можно вывести на экран вещественное число в формате с фиксированной запятой?
  7. Запишите операторы ввода двух чисел и вывода их в обратном порядке.
  8. Дан фрагмент программы:

    read (a); read (b); c:=a+b; write (a, b); write (с)

    Упростите его, сократив число операторов ввода и вывода.

  9. Дан фрагмент программы:

    а:=10; b:=a+l: a:=b-a; write (а, Ь)

    Какие числа будут выведены на экран компьютера?

  10. Напишите программу, которая вычисляет площадь и периметр прямоугольника по двум его сторонам.

Программный код представлен на рис. 4.3-9.

Option Strict On Option Explicit On Imports System.Math Public Class Form1 "Функция ввода координаты точки в TextBox Function vvod(ByVal T As TextBox) As Single Return CSng(Val(T.Text)) End Function "Процедура вывода результата в TextBox Sub vivod(ByVal Z As Single, ByVal T As TextBox) T.Text = CStr(Z) End Sub "Функция вычисления длины отрезка по координатам двух точек Public Function ДлинаОтрезка(ByVal x1 As Single, _ ByVal y1 As Single, ByVal x2 As Single, _ ByVal y2 As Single) As Single Return CSng(Sqrt((x2 - x1) ^ 2 + (y2 - y1) ^ 2)) End Function "Процедура вычисления периметра и площади треугольника Sub PS(ByVal x1 As Single, ByVal y1 As Single, _ ByVal x2 As Single, ByVal y2 As Single, _ ByVal x3 As Single, ByVal y3 As Single, _ ByRef P As Single, ByRef S As Single) Dim A, B, C, Pp As Single A = ДлинаОтрезка(x1, y1, x2, y2)"Вызов ф-ции выч-я дл.отр. B = ДлинаОтрезка(x2, y2, x3, y3) C = ДлинаОтрезка(x3, y3, x1, y1) P = (A + B + C) : Pp = P / 2 S = CSng(Sqrt(Pp * (Pp - A) * (Pp - B) * (Pp - C))) End Sub "Процедура обработки события нажатия на кнопку Button1 Private Sub Button1_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button1.Click Dim x1 As Single, x2 As Single, x3 As Single Dim y1 As Single, y2 As Single, y3 As Single Dim Пер As Single, Пло As Single x1 = vvod(TextBox1) : x2 = vvod(TextBox2) : x3 = vvod(TextBox3) y1 = vvod(TextBox6) : y2 = vvod(TextBox7) : y3 = vvod(TextBox8) PS(x1, y1, x2, y2, x3, y3, Пер, Пло) vivod(Пер, TextBox4) : vivod(Пло, TextBox5) End Sub Private Sub Button2_Click(ByVal sender As System.Object, _ ByVal e As System.EventArgs) Handles Button2.Click End End Sub End Class

Выполнение приложения и получение результатов

Результат приведен на рис. 4.3-10.

Доказательство правильности результата

A =
= 2.82843 B =
= 2

C = = 2 Р = А + В + С = 6.828427; Рр = Р/2 = 3.414213 S= = 2


Контрольные вопросы по теме

«Структура VB-программ, модули и процедуры.

Средства программирования алгоритмов линейной структуры»

1. Что представляет собой математическая модель?

2. Какие основные этапы включает в себя решение задач на компьютере?

3. Какие этапы компьютерного решения задач осуществляются без участия компьютера?

4. Что называют математической моделью объекта или явления?

5. Из каких последовательных действий состоит процесс разработки программы?

6. Что называется алгоритмом?

7. Какими основными свойствами должен обладать алгоритм?

8. Какие существуют способы описания алгоритмов?

9. Какими графическими символами принято изображать в схемах алгоритма?

10. Как работает интерпретатор?

11. Как работает компилятор?

12. Какой алгоритм называется линейным?

13. Какой алгоритм называется циклическим?

14. Какой алгоритм называется разветвляющимся?

15. В чем отличие передачи результатов выполнения функций и процедур?

16. Доказывает ли получение правдоподобного результата правильность программы?

17. Какие ошибки могут остаться не выявленными, если не провести проверку (просмотр, прокрутку) программы?

18. Чем тестирование программы отличается от её отладки?

19. Можно ли с помощью тестирования доказать правильность программы?

20. На какой стадии работы над программой вычисляются эталонные результаты тестов?

21. Назовите основные этапы процесса тестирования.

22. В чём отличие синтаксических ошибок от семантических?

23. О чём свидетельствует отсутствие сообщений машины о синтаксических ошибках?

24. Какие разновидности ошибок транслятор не в состоянии обнаружить?

25. Что такое программа?

26. На каком этапе происходит поиск и устранение ошибок в программе?

27. Что такое система программирования?

28. Что такое процедура?

29. Какими преимуществами обладает программа, имеющая процедуры?

30. Какие средства процедурного программирования имеются в языке VB?

31. Каким образом происходит обмен данными между отдельными процедурами программы?

32. Что такое фактические и формальные параметры?

33. Каким образом передать в качестве параметра: константу, переменную, выражение?

34. Как используются глобальные переменные?

35. Как используются локальные переменные?

36. Что называется формальными параметрами?

37. Что называется фактическими параметрами?

38. Что происходит при вызове процедуры?

39. Каким образом параметры могут передаваться в процедуру?

40. Какие параметры передаются по значению?

41. Какие параметры передаются по адресу?

42. Что относится к средствам процедурного программирования?

43. Что является результатом выполнения функции?

44. Каким образом надо объявить отдельные переменные, чтобы внутри функции они были локальными?

45. Какой оператор используется для досрочного выхода из функции?

46. Что контролируется при вызове функций и процедур?

47. Как необходимо объявить формальные параметры, чтобы передать параметр-переменную по значению?

48. Как необходимо объявить формальные параметры, чтобы передать параметр-переменную по адресу?

49. Каким образом осуществляется вызов процедуры-функции из вызывающей программы?

50. Что может быть результатом выполнения процедуры?

51. Какой оператор используется для досрочного выхода из процедуры?

52. Где могут находиться описания функций и процедур?

53. Где будет доступна переменная, объявленная с помощью оператора Public?

54. Где может находиться оператор Private?

55. Что такое комментарий и правила его записи?

56. Какие значения имеют переменные в начале программы?

57. Для чего описываются (определяются) процедуры и функции?

58. Как осуществляется вызов процедур?

59. Как осуществляется вызов функций?


Похожая информация.


Оператор - это элемент языка, задающий полное описание действия, которое необходимо выполнить. Каждый оператор представляет собой законченную фразу языка программирования и определяет некоторый вполне законченный этап обработки данных. В состав операторов могут входить служебные слова, данные, выражения и другие операторы. В английском языке данное понятие обозначается словом “statement”, означающим также “предложение”.

Каждый оператор в любом языке программирования имеет определенный синтаксис и семантику . Под синтаксисом оператора понимается система правил (грамматика), определяющая его запись с помощью элементов алфавита данного языка, в который наряду с различными символами входят, например, и служебные слова. Под семантикой оператора понимают его смысл, т.е. те действия, которым соответствует запись того или иного оператора. Например, запись i:= i + 1 является примером синтаксически корректной записи оператора присваивания в языке Pascal, семантика которого в данном случае такова: извлечь значение ячейки памяти, соответствующей переменной i, сложить его с единицей, результат записать в ту же ячейку памяти.

В большинстве процедурных языков программирования набор операторов практически одинаков и состоит из оператора присваивания, операторов выбора, операторов цикла, оператора вызова процедуры, операторов перехода. Иногда выделяют также пустой (отсутствие действия) и составной операторы. Многие операторы являются способом представления определенных алгоритмических конструкций (см. “Алгоритмические конструкции ” ) в языке программирования. Рассмотрим группы операторов подробнее, используя синтаксис языка Pascal.

Оператор присваивания

Присваивание - это действие компьютера, в результате которого переменная получает значение вычисленного выражения (оно помещается в соответствующую переменной ячейку памяти). Для описания такого действия в языках программирования существует оператор присваивания .

В общем виде оператор присваивания записывается так:

<переменная> <знак присваивания> <выражение>

Например, в языке Pascal в качестве знака присваивания используется комбинация символов:=. В ряде других языков - знак равенства.

Результатом выполнения оператора присваивания является изменение состояния данных: все переменные, отличные от переменной , стоящей в левой части оператора присваивания, не меняют своего значения, а указанная переменная получает значение выражения , стоящего в правой части оператора присваивания. В большинстве случаев требуется, чтобы тип выражения совпадал с типом переменной . Если это не так, то оператор либо считается синтаксически некорректным, либо производится преобразование типа выражения к типу переменной (см. “Типы данных ” ).

Операторы выбора

По-другому эти операторы называют условными операторами . Условные операторы используются для программирования алгоритмов, содержащих алгоритмическую конструкцию ветвление.

В языках программирования имеется несколько видов условных операторов. Полный условный оператор соответствует алгоритмической структуре полного ветвления:

В языке программирования соответствующий условный оператор имеет вид:

if B then S1 else S2

Если выражение B , которое вычисляется в начале выполнения условного оператора, имеет значение “истина”, то будет выполняться оператор S1 , в противном случае - оператор S2 . Операторы S1 и S2 могут быть составными.

Алгоритмическая структура неполного ветвления реализуется с помощью неполного условного оператора, который имеет вид:

if B then S

Здесь B - логическое выражение, а S - произвольный оператор. Оператор S будет выполняться, если выражение B окажется истинным.

Если условный оператор реализует всего две ветви выбора (“да” и “нет”), то с помощью оператора варианта (case -оператора) можно запрограммировать многоветвящуюся структуру. Оператор варианта имеет вид:

case E of

Выполняется данный оператор так: значение выражения E ищется среди перечисленных в записи оператора значений V1, V2, …, Vn , и если такое значение находится, то выполняется соответствующий оператор S1, S2, …, Sn .

В разных языках программирования синтаксис и даже семантика перечисленных операторов могут отличаться, но возможности, предоставляемые программисту подобными конструкциями, примерно одинаковы.

Пример 1. В статье “Алгоритмические конструкции ”2 был приведен пример записи алгоритма решения обобщенного квадратного уравнения с помощью конструкций ветвления. Приведем фрагмент программы на языке Pascal, реализующий этот же алгоритм:

if a = 0 then

if b = 0 then

if c = 0 then writeln("x - любое")

else writeln("нет корней")

else writeln(-c/b)

else begin

D:= b*b - 4*a*c;

if D < 0 then writeln("нет корней")

else begin

x1:= -b + sqrt(D);

x2:= -b - sqrt(D);

writeln(x1:0:2,""", x2:0:2)

Операторы цикла

Операторы цикла реализуют циклические алгоритмические конструкции, они используются для действий, повторяющихся многократно. Во многих языках программирования существуют три вида операторов цикла: “c предусловием”, “c постусловием”, “с параметром”.

Необходимой и достаточной алгоритмической структурой для программирования циклов является цикл “с предусловием”, поэтому его можно назвать основным типом цикла. Оператор цикла с предусловием имеет вид:

while B do S

Оператор S , для многократного выполнения которого создается цикл, называется телом цикла . Выполнение оператора цикла сводится к повторному выполнению тела цикла, пока значение логического выражения B истинно (до тех пор, пока оно не станет ложным). Фактически подобные операторы цикла реализуют повторное выполнение условных операторов if B then S, пока истинно условие B .

Пример 2. Рассмотрим применение такого оператора цикла для подсчета суммы цифр натурального числа N :

while N > 0 do begin

S:= S + N mod 10;

N:= N div 10

В цикле с постусловием тело цикла предшествует условию В. В отличие от цикла с предусловием здесь В - это условие окончания цикла. Оператор цикла с постусловием в Паскале имеет вид:

repeat S until B

При такой организации цикла тело цикла S хотя бы один раз обязательно выполнится.

Практически во всех процедурных языках существует оператор цикла c параметром . Схематично его можно представить так:

for < переменная> E1 to E2 step E3 do S

Здесь значение переменной (параметра цикла) меняется от значения выражения E1 до E2 с шагом E3. Для каждого такого значения параметра цикла выполняется оператор S. В языке Pascal понятие шага в описании этого оператора отсутствует, а сам шаг для целочисленного параметра цикла может быть равен либо 1, либо –1. Оператор “цикл с параметром” используется для программирования циклов с заданным числом повторений. Для программирования итерационных циклов (число повторений которых заранее неизвестно) он не годится.

Оператор вызова процедуры

В статье “Подпрограммы ” подробно рассказывается о таком виде подпрограмм, как процедуры. Стандартные подпрограммы языка программирования, которые входят в одну из библиотек подпрограмм, а также пользовательские подпрограммы, описанные внутри данного блока, вызываются с помощью оператора вызова процедуры :

<имя процедуры>(E1,E2,…,En)

Здесь E1,E2,…,En - переменные или выражения, представляющие собой фактические параметры обращения к процедуре. Наиболее часто используемыми стандартными процедурами являются процедуры ввода и вывода данных (read и write в Pascal).

Вызов процедуры семантически эквивалентен выполнению блока, описанного в качестве тела процедуры, после передачи в него начальных значений некоторых переменных (параметров-значений) или замены имен некоторых переменных (параметров-переменных) на имена фактических переменных, указанных при вызове процедуры.

Пример 3. Пусть у нас описана процедура abc:

procedure abc(a,b:integer;var c: integer);

Вызов этой процедуры abc(2,3,x) эквивалентен блоку действий:

Операторы перехода

Наиболее известным в данной группе операторов является оператор безусловного перехода goto . Если ко всем или некоторым уже имеющимся операторам программы добавить метки , то в программе становится возможным использовать оператор перехода вида:

goto <метка>

Метка в данном случае соответствует началу того оператора, с которого должно продолжиться выполнение программы. Такой оператор позволяет записывать в языке программирования алгоритмы, имеющие сколь угодно сложную структуру. Но зачастую использование безусловного перехода неоправданно, т.к. ведет к запутанной, плохо читаемой программе. Практически единственным осмысленным применением оператора goto является выход сразу из нескольких вложенных циклов, например, при обработке двухмерных массивов.

Пример 4. Пусть нам требуется определить, есть ли в двухмерном массиве a элемент, равный 0:

for i:= 1 to N do

for j:= 1 to N do

if a = 0 then begin

1: if b then write("есть") else write("нет");

Программа, разработанная по правилам структурного программирования, не должна содержать операторов безусловного перехода. Приведенную выше программу без использования оператора goto можно переписать следующим образом:

while not b and (i < N) do begin

while not b and (j < N) do begin

if a = 0 then b:= true;

if b then write("есть") else write("нет");

В данном случае структурная программа менее наглядна, чем программа с goto .

В языках программирования могут быть определены и другие операторы перехода. Например, в языке Pascal: break (досрочное прерывание цикла, переход на оператор, который должен выполняться после завершения цикла), continue (досрочное завершение текущей итерации цикла и переход к следующей), exit (досрочное прерывание подпрограммы, выход из нее), halt (досрочное прерывание программы, переход на ее конец). Аналогичные операторы существуют и в языках С, С++, Java.

Составной оператор

Составной оператор - это группа операторов, заключенных в операторные скобки (в Pascal - begin end ; в C, C++ - {…}).

Составной оператор введен в языки программирования для облегчения описания конструкций языка. Так, например, в Pascal исполняемая часть каждого блока (программа, процедура, функция) представляет собой один составной оператор. Ровно так же тело любого оператора цикла состоит только из одного оператора, быть может, составного. Альтернативой составному оператору может быть служебное слово, обозначающее окончание того или иного оператора, например, END IF в языке Basic.

Тема “Операторы языка программирования” обычно изучается только в контексте рассмотрения определенного языка программирования. При ее рассмотрении важно показать связь базовых алгоритмических конструкций и операторов: алгоритмические конструкции записываются в языке программирования с помощью соответствующих операторов. Исключение в некотором смысле составляет последовательная конструкция, она определяет линейный порядок выполнения действий. Действия в строго линейной программе реализуются только операторами присваивания и операторами вызова процедуры.

На начальном этапе обучения программированию у школьников возникает много проблем. Первый психологический барьер им приходится преодолевать при изучении оператора присваивания. Одна из основных задач, которую необходимо решить вместе с учениками, это обмен местами значений двух переменных. Можно предложить школьникам мысленно решить задачу, как поменять местами содержимое двух ящиков, например, письменного стола. Обычно на данном этапе обсуждения ученики догадываются, что для решения задачи необходим третий ящик (переменная). Тем не менее при записи данного алгоритма они часто путают, в какой части оператора присваивания (левой или правой) должна стоять та или иная переменная.

Ошибки в записи арифметических и логических выражений возникают из-за незнания старшинства операций, которые используются в выражении. При этом под операциями понимаются не только арифметические, но и операции сравнения и логические связки, а в языке С и операция присваивания, что весьма непривычно для школьников. Ситуация осложняется тем, что в разных языках программирования одни и те же операции имеют разные относительные приоритеты. Обращать внимание следует и на соответствие типов переменной и выражения в левой и правой частях оператора присваивания (см. “Типы данных ”).

При освоении операторов выбора полезно предложить школьникам запрограммировать алгоритм, содержащий многоветвящуюся структуру, как с помощью комбинации условных операторов, так и с помощью оператора выбора.

Пример. В целочисленную переменную N вводится возраст человека в годах. Напечатать фразу “Мне K лет ”, заменяя слово лет на год или года в зависимости от числа K . Приведем два решения этой задачи:

if (k mod 100) in

then writeln("Мне ",k," лет")

case k mod 10 of

0,5..9:writeln("Мне ",k," лет");

1:writeln("Мне ",k," год");

2..4:writeln("Мне ",k," года");

var k, n: integer;

readln(k); n:= k mod 10;

if (k mod 100) in

then writeln("Мне ",k," лет") else

if n = 1 then writeln("Мне ",k," год")

if (n >=) and (n <= 4)

then writeln("Мне ",k," года")

else writeln("Мне ",k," лет")

При рассмотрении операторов цикла полезно предложить одну и ту же задачу запрограммировать тремя разными способами с использованием трех операторов цикла, и наоборот, по условию задачи научиться определять, какой именно оператор цикла является наиболее подходящим в том или ином случае.

Оператор вызова процедуры только на первый взгляд является простым. Здесь важно объяснить правила передачи параметров в процедуры и функции, различие между параметрами-переменными и параметрами-значениями (в последнем случае мы можем передавать не только имя переменной, но и константу или даже выражение соответствующего типа). Формальные и фактические параметры должны соответствовать по типам, но не по именам, что является далеко не очевидным для учеников.

Изучение условного и особенно составного оператора - хороший повод поговорить с учениками о стиле написания программ. Для языка Pascal существует несколько распространенных способов записи структурированных программ, но все они содержат отступы для размещения вложенных структур. Важны для записи программ и комментарии.