Некоммерческое акционерное общество

АЛМАТИНСКИЙ УНИВЕРСИТЕТ  ЭНЕРГЕТИКИ  И  СВЯЗИ

Кафедра инженерной кибернетики

 

 

 

 

 

ТЕХНОЛОГИИ ПРОГРАММИРОВАНИЯ

Методические указания к выполнению лабораторных работ

 для студентов всех форм обучения

специальности 5В070200 – Автоматизация и управление

 

 

 

 

Алматы 2011 

СОСТАВИТЕЛИ: Н.В. Сябина. Технологии программирования. Методические указания к выполнению лабораторных работ для студентов всех форм обучения специальности 5В070200 – Автоматизация и управление. - Алматы: АУЭС, 2011. -  35 с. 

 

Настоящие методические указания включают 8 лабораторных работ по дисциплине «Технологии программирования», которые позволят студентам 1 курса получить практические навыки разработки программ на языке высокого уровня С++. Контрольные вопросы, приведенные в конце каждой лабораторной работы, помогут закрепить полученные теоретические знания.

В приложении содержится необходимый справочный материал.

         Методические указания предназначены для студентов всех форм обучения специальности 5В070200 – Автоматизация и управление.

         Табл. 9, прилож. 1, библиогр. –  15 назв. 

 

 

         Рецензент: канд.тех.наук, доцент Федоренко И.А. 

 

 

         Печатается по плану издания некоммерческого акционерного общества «Алматинский институт энергетики и связи» на 2007 г. 

 

 

 

 

© НАО «Алматинский университет энергетики и связи», 2011 г.

  

Содержание

 

1 Лабораторная работа. Использование базовых и дополнительных

структур С++ при решении задач. Характерные приемы программирования                  4

2 Лабораторная работа. Использование структур языка С++ при решении задач численными методами                                                                                      9

3  Лабораторная работа. Массивы и их обработка                                        14

4 Лабораторная работа. Методы сортировки массивов                                18

5 Лабораторная работа. Обработка символьных данных                              22

6 Лабораторная работа. Работа со структурами и объединениями               25

7 Лабораторная работа. Файлы и работа с ними                                            29

8 Лабораторная работа. Функции. Рекурсия                                                  30

Приложение А                                                                                                 34

Список литературы                                                                                         35

 

1 Лабораторная работа. Использование базовых и дополнительных структур С++ при решении задач. Характерные приемы программирования

 

Цель: научиться практически применять знания, полученные в курсе Информатики, к решению задач вычислительного характера на языке высокого уровня С++; получить практические навыки работы со стандартными алгоритмами – характерными приемами программирования в С++.

 

1.1 Общие сведения

 

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

а)     следование - обозначает последовательное выполнение действий;

б)    ветвление -  выбор одного из двух вариантов действий;

в)    цикл-пока - определяет повторение действий, пока не будет нарушено некоторое условие, выполнение которого проверяется в начале цикла.

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

а)     выбор - выбор одного варианта из нескольких в зависимости от значения некоторой величины;

б)    цикл-до - повторение действий до выполнения заданного условия, проверка которого осуществляется после выполнения действий в цикле;

в)    цикл с заданным числом повторений (счетный цикл) - повторение некоторых действий указанное количество раз.

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

Для изображения алгоритмов структурных программ могут использоваться:

1) блок-схемы;

2) псевдокоды;

3) Flow-формы;

4) диаграммы Насси-Шнейдермана.

В таблице А.1 отражается соответствие различных способов описания алгоритмов.

 

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

Каждой управляющей конструкции, рассмотренной в п.1.1.1, можно поставить в соответствие оператор С++. Так, например, к базовым следует отнести:

а) оператор присваивания   переменная = выражение;

б) оператор условного перехода:

- в полной форме    if (условие) оператор1; else оператор2;

- в краткой форме   if (условие) оператор;

в) оператор цикла с предварительным условиемпредусловием)

while (условие)            или             while (условие)

{                                                                 оператор;

оператор1;

оператор2;

операторN;

}

Дополнительным конструкциям следует поставить в соответствие:

а) оператор-переключатель switch (оператор выбора или варианта)

switch (выражение)

{

case n1 : оператор1; break;

case n2 : оператор2; break;

case nk : операторК; break;

default : операторN; break;

}

б) троичный условный оператор

(выражение1) ? выражение2: выражение3;

 

в) оператор цикла с последующим условиемпостусловием)

do                                 или             do {

{оператор;}                                     оператор1;

while (условие);                             оператор2;

                                                        операторN;

                                                        } while (условие);       

г) оператор цикла с параметром

for (инициализация; проверка; приращение)

{оператор1;

оператор2;

операторN; }

 

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

- до открытия цикла задается начальное значение накапливаемого или предположительное значение искомого параметра;

- внутри цикла осуществляется непосредственно накапливание или поиск.

Рекомендации по практическому осуществлению характерных приемов программирования приведены в таблице А.2.

 

1.2 Задание к лабораторной работе

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

Таблица 1.1Варианты заданий

Вариант

Задание

Вычислить:

1

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

2

Момент времени t, в который будет достигнута максимальная скорость точки, если уравнение движения точки дано в виде: .

3

Минимальное значение среди сгенерированной последовательности из k случайных чисел в диапазоне от 0 до 100, вывести эти числа на экран.

4

Число π с заданной пользователем точностью, для чего воспользоваться числовым рядом , значение частичной суммы которого при суммировании достаточно большого количества членов приближается к значению π/4.

5

Среднее геометрическое среди сгенерированной последовательности из 10 случайных чисел в диапазоне от 1 до 10, вывести эти числа на экран.

6

Факториал числа, введенного с клавиатуры.

7

, где n – целое число, введенное с клавиатуры.

8

Через сколько лет арендатором накопится сумма S, достаточная для покупки собственного помещения, если его стартовый капитал – k тенге, ежемесячный доход – n%, аренда помещения – m тенге.

9

Значение первого положительного элемента сформированной  последовательности, если известно, что a0  = -20, ai = ai-1 + i/2.

10

Наибольший общий делитель двух целых чисел.

 Продолжение таблицы 1.1

11

Максимальное значение среди сгенерированной последовательности из k случайных чисел в диапазоне от 0 до 50, вывести эти числа на экран.

12

Момент времени t, в который будет достигнуто максимальное ускорение точки, если уравнение движения точки дано в виде: .

13

Значение первого отрицательного элемента сформированной  последовательности, если известно, что a0 =15, ai = ai-1 i/2.

14

Количество элементов среди сгенерированной последовательности из N случайных чисел в диапазоне от -100 до 100, больших по модулю, чем первое из них. Вывести все числа на экран.

Вывести на экран:

15

Таблицу степеней числа 2. Количество степеней n задается пользователем.

16

Работающие «электронные часы», которые функционируют до нажатия любой клавиши.

17

Таблицу умножения на число n, задаваемое пользователем.

18

Таблицу квадратов m первых целых положительных чисел.

19

Таймер, который по истечении заданного промежутка времени t, величина которого вводится с клавиатуры, выдает звуковой сигнал.

20

Изображение шахматной доски: черные клетки отображать «звездочкой», белые – пробелом.

21

Таблицу степеней (от нулевой до k-ой) числа Z; количество степеней k задается пользователем.

Проверить:

22

Является ли функция периодической, если аргумент х изменяется в интервале [0;5T], а период Т=2π?

23

Знание пользователем таблицы умножения: вывести k примеров и выставить оценку (90-100% правильных ответов - «отлично», 75-89% - «хорошо», за 55-74% - «удовлетворительно», менее 55% - «плохо»).

24

Предложить пользователю угадать сгенерированное компьютером целое число в диапазоне от 1 до 10 за 5 попыток.

25

Являются ли k целых чисел, введенных пользователем, простыми?

 

 

Окончание таблицы 1.1

Численно убедиться в справедливости равенства, для чего для заданного пользователем значения аргумента х вычислить левую его часть и разложение, стоящее в правой части с заданной погрешностью:

26

27

28

29

30

 

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

1.3.1                  Какие алгоритмические структуры относятся к базовым? Какие к дополнительным? Приведите примеры базовых и дополнительных структур.

1.3.2       Как графически изображаются схемы алгоритмов? Какое преимущество имеют Flow-формы и диаграммы Насси-Шнейдермана? Какие достоинства и недостатки имеют блок-схемы?

1.3.3                  В чем отличие между оператором и операцией? Какие виды операций существуют? Перечислите известные Вам операции присваивания в С++.

1.3.4       В чем заключаются особенности форматного ввода – вывода?

1.3.5       Какие операторы С++ реализуют ветвление? В чем их особенности? Приведите примеры использования.

1.3.6                  Какую структуру имеет оператор выбора? С какой целью используется оператор break?

1.3.7       Какие операторы С++ реализуют циклы? В чем их особенности? Приведите примеры использования.

1.3.8       Как с помощью цикла while можно сымитировать цикл for?

1.3.9       Приведите алгоритм поиска среднего арифметического элементов последовательности а1, а2, а3 …а10. Чем будет отличаться поиск среднего геометрического элементов той же последовательности?

1.3.10  Приведите алгоритм поиска максимального значения среди элементов последовательности а1, а2, а3 …а10. 

 

2 Лабораторная работа. Использование структур языка С++ при решении задач численными методами

 

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

 

2.1   Общие сведения

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

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

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

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

Алгоритмы вычислений с помощью этих методов подробно рассматриваются в [1, 12].

 

2.2 Задание к лабораторной работе

2.2.1 Вычислить значение суммы (см. таблицу 2.1) с заданной пользователем точностью ε.

Таблица 2.1Варианты заданий

Вариант

Задание

1

, |x| < 1;

2

;

3

;

4

;

5

, |x| < 1;

6

;

7

;

8

;

9

;

10

;

11

;

12

;

13

;

14

;

Окончание таблицы 2.1

15

;

16

;

17

;

18

;

19

;

20

;

21

, |x| < 1;

22

;

23

;

24

;

25

;

26

;

27

;

28

;

29

;

30

;

 

2.2.2 В соответствии с выбранным вариантом (см. таблицу 2.2) выполнить вычисления:

Таблица 2.2Варианты заданий

Вариант

Вычислить

приближенное значение:

Метод

Точность, ε

1

корня уравнения х32-3=0 на интервале [0.5,1.5]

деления отрезка пополам

0.00001

2

интеграла

прямоугольников

0.001

3

корня уравнения 2х3+3х-1=0 на интервале [0,0.5]

деления отрезка пополам

0.0001

4

интеграла

прямоугольников

0.001

5

корня уравнения х5-х-0.2=0 на интервале [0.7,1.0]

итераций

0.00001

6

интеграла

Симпсона

0.001

7

интеграла

Симпсона

0.001

8

интеграла

Симпсона

0.001

9

корня уравнения х3+3х-1=0 на интервале [0,0.8]

итераций

0.00001

10

интеграла

прямоугольников

0.001

11

интеграла

Симпсона

0.001

12

интеграла

прямоугольников

0.001

13

корня уравнения х5-х-0.2=0 на интервале [0.9,1.1]

деления отрезка пополам

0.0001

14

интеграла

прямоугольников

0.001

 

Окончание таблицы 2.2

15

корня уравнения х4-2х3-х-1=0 на интервале [0.1,1.2]

итераций

0.0001

 

16

интеграла

прямоугольников

0.001

17

корня уравнения х32+1=0 на интервале [0,1.2]

деления отрезка пополам

0.0001

18

интеграла

прямоугольников

0.001

19

интеграла

Симпсона

0.001

20

интеграла

Симпсона

0.0001

21

корня уравнения х43-1=0 на интервале [0,0.9]

итераций

0.0001

22

интеграла

Симпсона

0.001

23

интеграла

Симпсона

0.0001

24

корня уравнения

х4-2х3-х-1=0 на интервале [0,1.0]

деления отрезка пополам

0.00001

25

корня уравнения х32-3=0 на интервале [0.9,1.9]

итераций

0.0001

26

интеграла

Симпсона

0.001

27

интеграла

Симпсона

0.0001

28

интеграла

прямоугольников

0.001

29

корня уравнения

х4+х-1.5=0 на интервале [0,1.0]

деления отрезка пополам

0.00001

30

интеграла

прямоугольников

0.0001

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

2.3.1   Какие вычислительные процессы считаются итерационными?

2.3.2   Какие формулы называются рекуррентными?

2.3.3   С какой целью в итерационных циклах используются условия?

2.3.4   Каковы преимущества численных методов интегрирования?

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

2.3.6   В чем заключается суть метода дихотомии?

2.3.7   Приведите алгоритм метода прямоугольников.

2.3.8   В чем заключается суть метода итераций?

2.3.9   Приведите алгоритм метода Симпсона.

2.3.10 Каковы особенности метода касательных? 

 

3 Лабораторная работа. Массивы и их обработка

 

Цель: получить практические навыки работы с массивами и представления о способах их обработки.

 

3.1             Общие сведения

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

тип_элементов   имя_массива [N1][N2]...[Nk];

Количество индексов [N1][N2]...[Nk] опре­деляет размерность массива. При объявлении массива указыва­ется общее число элементов массива. Индексация элементов массива в С++ по умолчанию начинается с нуля. Размер массива может задаваться константой или константным выражением. Нельзя задать массив переменного размера, для этой цели используется отдельный механизм - динамическое выделение памяти. В языке C++ возможна инициализация массива при его объяв­лении.

К элементам массива применимы две операции: присваива­ние и выборка. Для выборки элементов массива и их обработки чаще всего используются циклы.  

 

3.2 Задание к лабораторной работе

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

Таблица 3.1Варианты заданий

Вариант

Задание

1

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

2

Дана целочисленная прямоугольная матрица, содержащая элементы равные 1. Определить количество столбцов, не содержащих ни одного элемента равного 1; среднее геометрическое элементов строки, содержащей минимальный элемент побочной диагонали.

3

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

4

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

5

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

6

Дана целочисленная прямоугольная матрица. Матрица А имеет седловую точку Аij,, если   A ij  является минимальным элементом в  i–той строке и максимальным в j-столбце. Определить:  сумму элементов в тех строках, которые  содержат хотя бы один отрицательный элемент.

7

Для заданной матрицы размером 10х10 найти такие k, что k-я строка совпадает с k-м столбцом. Найти сумму элементов в тех строках, которые содержат хотя бы один отрицательный элемент.

8

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

9

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

Продолжение таблицы 3.1

10

Дана целочисленная прямоугольная матрица. Матрица А имеет седловую точку Аij,, если   A ij  является минимальным элементом в  i–той строке и максимальным в j-столбце. Определить:  произведение элементов в тех строках, которые  содержат хотя бы один положительный элемент.

11

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

12

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

13

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

14

Дана целочисленная квадратная матрица. Определить: среднее арифметическое элементов в тех строках, которые не содержат отрицательных элементов. Результат переписать в вектор.

15

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

16

Найти среднее геометрическое элементов, расположенных выше побочной диагонали вещественной матрицы 10х10. Переписать элементы, расположенные после минимального элемента в вектор.

17

Дан двумерный массив размерностью 6х5, заполненный целыми числами. Сформировать одномерный массив, каждый элемент которого равен количеству отрицательных элементов, кратных 2 или 4, соответствующей строки.

18

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

19

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

20

Характеристикой строки целочисленной матрицы А размерности 10х8 назовем сумму ее положительных четных элементов. Переставляя строки заданной матрицы, расположить их в соответствии с ростом характеристик.

Окончание таблицы 3.1

21

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

22

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

23

Найти сумму элементов целочисленной матрицы 10х8 в тех столбцах, которые содержат хотя бы один отрицательный элемент. Переписать их в одномерный массив.

24

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

25

Дана целочисленная квадратная матрица. Определить минимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы. Суммы переписать в одномерный массив.

26

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

27

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

28

Найти сумму модулей элементов, расположенных выше главной диагонали целочисленной матрицы 10х10. Переписать элементы, расположенные после максимального элемента в вектор.

29

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

30

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

 

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

3.3.1   Что представляет собой массив элементов?

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

3.3.3   Как объявляется массив?

3.3.4   С какой целью используется механизм выделения динамической памяти?

3.3.5   Как  инициализируются элементы массива?

3.3.6   Как можно сформировать случайным образом массив элементов?

3.3.7   Какие способами ввода элементов массива существуют в С++?

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

3.3.9   Каковы особенности обработки квадратной матрицы?

3.3.10 Как организовать обработку матрицы произвольной размерности по столбцам (по строкам)?

 

 

 

4 Лабораторная работа. Методы сортировки массивов

 

Цель: получить практические навыки использования различных алгоритмов сортировки массивов в С++.

 

4.1 Общие сведения

Во многих задачах бывает необходимо переставить элементы массива таким образом, чтобы они располагались в порядке возрастания или убывания. Такие массивы называются упорядо­ченными, а процесс их получения — сортировкой.

4.1.1 Сортировка простым выбором.

Самым простым алгоритмом является сортировка простым выбором. В сортируемом массиве находится минимальный элемент, который обменивается местами с элементом в начале массива. Оставшаяся часть массива рассматривается как самостоятельный массив, в котором также производится поиск наименьшего элемента и его обмен с первым элементом укороченного массива. Действия повторяются до тех пор, пока массив не укоротится до одного элемента.

4.1.2 Метод пузырьковой сортировки.

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

Можно уменьшить количество проходов сортировки, выполняя их не (N-1)2 раз, а пока массив не будет отсортирован. Определить этот факт достаточно просто: если массив уже отсортирован, то в процессе прохода в нем не происходит никаких перестановок. Перед началом просмотра нужно установить признак отсутствия перестановок (флаг). В случае, если производится хотя бы одна перестановка, флаг изменяет свое значение. Если к моменту завершения прохода значение флага осталось первоначальным, значит, массив отсортирован и дальнейшие проходы не нужны.

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

 

4.2 Задание к лабораторной работе

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

Таблица 4.1Варианты заданий

Вариант

Задание

1

Дана целочисленная матрица В(10,7). Методом простой сортировки расположить элементы по возрастанию в строках.

2

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

3

Переписать все отрицательные элементы матрицы А(6,5) в вектор В. Используя метод пузырьковой сортировки с оптимизацией по количеству проходов, расположить их по убыванию.

4

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

5

Дана вещественная матрица С(6,8). Методом простой сортировки расположить элементы в ее строках по возрастанию.

6

Переписать все положительные элементы матрицы Х(10,10) в вектор Y. Используя метод пузырьковой сортировки с оптимизацией по количеству проходов, расположить по возрастанию.

7

Переписать все четные элементы целочисленной матрицы Z(10,10) в вектор Y. Используя метод простой сортировки, расположить их по возрастанию.

8

Дана целочисленная матрица А(8,8). Методом простой сортировки расположить элементы в ее строках по возрастанию.

 

 

 

Продолжение таблицы 4.1

9

Переписать все отрицательные элементы матрицы А(6,5) в вектор В. Используя метод пузырьковой сортировки без оптимизации, расположить их по убыванию.

10

Дана целочисленная матрица А(8,7). Переписать все положительные элементы в вектор. Методом пузырьковой сортировки без оптимизации расположить элементы по возрастанию.

11

Переписать все ненулевые элементы матрицы А(6,5) в вектор В. Используя метод пузырьковой сортировки с оптимизацией по количеству проходов, расположить по убыванию.

12

Переписать все положительные элементы матрицы С(6,8) в вектор А. Используя метод простой сортировки, расположить их по возрастанию.

13

Дана целочисленная прямоугольная матрица С(9,9). Методом простой сортировки расположить элементы в ее столбцах по убыванию.

14

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

15

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

16

Дана вещественная матрица А(4,7). Переписать все положительные элементы в вектор. Методом пузырьковой сортировки без оптимизации расположить элементы по возрастанию.

17

Переписать все ненулевые элементы матрицы А(6,6) в вектор С. Используя метод пузырьковой сортировки с оптимизацией по количеству проходов, расположить по возрастанию.

18

Переписать все отрицательные элементы матрицы А(6,5) в вектор В. Используя метод простой сортировки, расположить их по убыванию.

19

Переписать все нечетные элементы целочисленной матрицы Z(8,12) в вектор Х. Используя метод простой сортировки, расположить их по убыванию.

20

Дана вещественная матрица А(5,8). Методом простой сортировки расположить элементы в ее строках по возрастанию.

21

Дана целочисленная матрица К(6,8). Методом пузырьковой сортировки с оптимизацией по времени выполнения каждого прохода расположить элементы по убыванию в столбцах.

22

Переписать все положительные элементы матрицы Х(10,10) в вектор Y. Используя метод простой сортировки, расположить их по возрастанию.

Окончание таблицы 4.1

23

Дана вещественная матрица А(4,7). Переписать все положительные элементы в вектор. Методом пузырьковой сортировки без оптимизации расположить элементы по возрастанию.

24

Дана целочисленная матрица А(6,9). Переписать все отрицательные элементы в вектор. Методом пузырьковой сортировки без оптимизации расположить элементы по убыванию.

25

Дана вещественная прямоугольная матрица С(9,9). Методом простой сортировки расположить элементы в ее строках по убыванию.

26

Дана вещественная матрица А(6,5). Переписать все отрицательные элементы в вектор. Методом пузырьковой сортировки без оптимизации расположить элементы по убыванию.

27

Дана вещественная матрица С(7,9). Методом простой сортировки расположить элементы в ее столбцах по убыванию.

28

Дана вещественная матрица А(4,7). Переписать все положительные элементы в вектор. Методом простой сортировки расположить элементы по возрастанию.

29

Дана целочисленная матрица F(4,7). Методом пузырьковой сортировки без оптимизации расположить элементы по убыванию в столбцах.

30

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

 

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

4.3.1   Перечислите известные Вам методы сортировки.

4.3.2   В чем заключается суть метода сортировки простым выбором?

4.3.3   Приведите блок-схему метода сортировки простым выбором.

4.3.4   Перечислите отличительные особенности метода пузырьковой сортировки?

4.3.5   В чем смысл оптимизации метода пузырьковой сортировки?

4.3.6   Как можно уменьшить количество проходов сортировки при использовании метода пузырьковой сортировки?

4.3.7   С какой целью используется признак отсутствия перестановок при оптимизации метода пузырьковой сортировки?

4.3.8   В чем заключается суть оптимизации метода пузырьковой сортировки по времени выполнения каждого прохода?

 

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

4.3.10 Приведите пример алгоритма обменной сортировки с признаком завершения.

 

 

 

5 Лабораторная работа. Обработка символьных данных

 

Цель: получить практические навыки работы с символьной информацией – строками.

 

5.1 Общие сведения

Строка представляет собой массив значений типа char, завершающийся нулевым байтом ‘\0’, что следует учитывать при объявлении строки, т.е. указывать не N, а N+1 элемент. При инициализации строк используются традиционные методы объявления.

Для определения константы, равной длине инициализированной строковой переменной, можно воспользоваться функцией sizeof().

Для ввода символьных переменных и строк в C предназначены функции scanf() (ввод до первого пробельного символа) или gets() из библиотеки <stdio.h>. С++ дополнительно предоставляет пользователю две функции cin,get  и  cin.getline из библиотеки <iostream.h>. Для вывода в этих же библиотеках существуют аналогичные функции.

При работе со строками чаще всего используются функции библиотеки <string.h>, в частности:

а) склеивание – последовательное объединение нескольких строк:

          strcat (str1, str2);

б) копирование строк:

          strcpy(str1, str2);

в) сравнение строк:

          strcmp(str1,str2);

г) длина строки:

          lenth=strlen(str1);

д) преобразование строчных символов в прописные:

          strlwr(str1);

е) преобразование прописных символов в строчные:

          strupr(str1);

ж) заполнение строки некоторым символом:

          strset(str1,’символ’);

з) получить код символа:

          n=int(a);

 

5.2 Задание к лабораторной работе

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

Таблица 5.1Варианты заданий

Вариант

Задание

1

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

2

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

3

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

4

Из строки, введенной пользователем, вывести на экран все слова, которые повторяются более 1 раза.

5

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

6

Сравнить строки, введенные пользователем с клавиатуры, и вывести результаты сравнения на экран.

7

В строке, введенной пользователем и состоящей из нескольких предложений, определить количество предложений.

8

В строке, введенной пользователем, поменять местами каждые два соседних слова.

9

Подсчитать количество слов в строке, введенной пользователем.

10

В строке, введенной пользователем, изменить порядок слов на обратный.

11

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

12

В строке, введенной пользователем, поменять первое слово с последним.

13

В строке, введенной пользователем, определить самое длинное слово.

14

Строку, введенную пользователем, переписать в обратном порядке.

15

Объединить все n строк, введенные пользователем. При вводе после каждой строки следует нажимать клавишу Enter.

16

В строке, введенной пользователем, заменить все строчные буквы прописными и наоборот.

17

В строке, введенной пользователем, заменить первые и последние k символов на символ *.

18

В строке, введенной пользователем, определить самое короткое слово.

19

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

Окончание таблицы 5.1

20

В строке, введенной пользователем, удвоить все буквы а.

21

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

22

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

23

Разделить текст из нескольких предложений, введенный пользователем, на отдельные строки.

24

В тексте из нескольких предложений, введенном пользователем, определить, какой из знаков препинания встречается чаще.

25

Определить, сколько во введенной пользователем строке слов, состоящих более, чем из шести букв.

26

В тексте из нескольких предложений, введенном пользователем, определить самое длинное предложение.

27

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

28

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

29

Из строки, введенной пользователем, удалить все удвоенные согласные.

30

В тексте из нескольких предложений, введенном пользователем, определить самое короткое предложение.

 

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

5.3.1   Что представляет собой строка?

5.3.2   Как объявляются строковые переменные?

5.3.3   Назовите основные особенности строк.

5.3.4   Как можно определить длину инициализированной строковой переменной?

5.3.5   Как осуществляется ввод строк?

5.3.6   Приведите пример ввода строки фиксированной длины с использованием библиотеки <stdio.h>.

5.3.7   Какие функции предлагаются для вывода строк?

5.3.8   Приведите пример построчного ввода символьных данных.

5.3.9   Приведите пример посимвольного ввода строки.

5.3.10 Какие основные функции предусмотрены для работы со строками?

  

6 Лабораторная работа. Работа со структурами и объединениями

 

Цель: получить практические навыки работы с такими сложными типами данных в С++ как структуры и объединения

 

6.1 Общие сведения

Структура (struct) состоит из фиксированного числа компо­нентов (элементов) разных типов. Описание типа struct имеет следующий вид:

struct   имя_структуры

{ тип1 имя_элемента1;

 типN имя_элементаN; }

имя_переменной_типа_структуры;

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

Объединения (union) в языке C++ отличаются от структур спо­собом хранения информации. В каждый момент времени объеди­нение хранит значение только одного элемента. Память распре­деляется для хранения наибольшего элемента объединения. Описание типа union имеет вид:

union   имя_объединения

{ тип1 имя_элемента1;

типN имя_элементаN;

} имя_переменной_типа_объединения;

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

Еще большей экономии памяти в програм­мах на языке C++ можно достичь, если использовать анонимные объединения. В анонимных объединениях нет имени, переменная объединения не объявляется:

union {  

тип1   имя_элемента1;

типN   имя  элементаN;   

} ;

К элементам анонимного объединения обращаются по имени (без точки), как к обычным переменным в программе.

 

6.2 Задание к лабораторной работе

Решить задачу, соответствующую варианту, выбранному по таблице 6.1. Организовать ввод элементов структурного массива, который содержит не менее 10 строк (записей).

Таблица 6.1Варианты заданий

Вариант

Задание

1

Дан массив структурного типа, в котором хранятся данные о студентах группы: фамилия, имя, отчество, адрес – улица, дом, квартира, домашний телефон. Вывести на экран фамилию, имя и адрес тех студентов, у которых нет телефона.

2

Дан массив структурного типа, в котором хранятся сведения  об обслуживании абонемента библиотеки: автор книги; название; ФИО читателя; номер читательского билета; срок сдачи. Вывести на экран данные читателей, обязанных вернуть книги до введенной пользователем даты.

3

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

4

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

5

Дан массив структурного типа, в котором хранятся данные о стипендии студентов: ФИО студента; курс; средний балл; размер стипендии; надбавки. Вывести информацию о студентах, которые получают повышенную стипендию.

6

Дан массив структурного типа, в котором хранятся данные о работниках фабрики: фамилия, имя, отчество, адрес  и дата поступления на работу (месяц, год). Определить, есть ли в списке  однофамильцы и вывести их адреса.

7

Дан массив структурного типа, в котором хранятся сведения  о результатах выставки собак: порода, кличка, возраст, владелец, место. Вывести информацию о собаках, чей возраст старше 2 лет.

8

Дан массив структурного типа, в котором хранятся сведения  о компьютерах фирмы: модель; комплектация; стоимость; количество. Вычислить общую стоимость всех компьютеров фирмы.

9

Дан массив структурного типа, в котором хранятся сведения  о дисках: название альбома; исполнитель; год выпуска; стоимость. Вывести на экран информацию о дисках одного исполнителя.

10

Дан массив структурного типа, в котором хранятся данные об аренде автомобилей: марка; год выпуска; стоимость аренды; срок аренды. Вывести на экран информацию об автомобилях, арендованных на длительный срок (более 3 месяцев).

Продолжение таблицы 6.1

11

Дан массив структурного типа, в котором хранятся сведения  о состоянии библиотечного фонда: автор книги; название; издательство; год выпуска; количество. Определить количество имеющихся в наличии книг автора, запрашиваемого пользователем.

12

Дан массив структурного типа, в котором хранятся сведения  о плательщиках и получателях: расчетный счет плательщика, имя плательщика, расчетный счет получателя, имя получателя, перечисляемая сумма. Вывести на экран информацию о сумме, перечисленной с расчетного счета плательщика, введенного с клавиатуры и кому она перечислена. Если такого расчетного счета нет, выдать соответствующее сообщение.

13

Дан массив структурного типа, в котором хранятся сведения  о товарах в магазине: название товара, название отдела, стоимость товара в тенге. Вывести на экран информацию о товарах,  которые продаются в определенном отделе, название которого вводится пользователем.

14

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

15

Дан массив структурного типа, в котором хранятся сведения  о соревнованиях по определенному виду спорта: страна; год; вид соревнований; команда; место. Вывести информацию о призерах соревнований, проходивших в год, введенный с клавиатуры пользователем.

16

Дан массив структурного типа, в котором хранятся данные о стипендии студентов: ФИО студента; курс; средний балл; размер стипендии; надбавки. Вывести информацию о студентах, которые не получают стипендию.

17

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

18

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

19

Дан массив структурного типа, в котором хранятся сведения  о товарах в магазине: название товара, количество, стоимость товара в тенге. Вывести на экран информацию о товаре,  название которого введено с клавиатуры. Если таких товаров нет, выдать соответствующее сообщение.

Окончание таблицы 6.1

20

Даны массив структурного типа, в котором хранятся сведения: фамилия, имя, знак зодиака, дата рождения. Вывести информа-цию о людях, родившихся под знаком, введенным с клавиатуры.

21

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

22

Дан массив данных структурного типа о клиентах фирмы: ФИО, телефон, приобретенный товар, количество, сумма. Вывести на экран данные тех, кто приобрел товаров на указанную сумму.

23

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

24

Дан массив структурного типа, в котором хранятся сведения  о плательщиках: расчетный счет плательщика, имя плательщика, расчетный счет получателя, сумма. Вывести на экран информа-цию о сумме, хранящейся на расчетном счете плательщика, введенного с клавиатуры.

25

Дан массив структурного типа, в котором хранятся сведения  о товарах: название товара, название магазина, стоимость товара в тенге. Вывести на экран информацию о товаре,  название которого введено с клавиатуры.

26

Дан массив структурного типа, в котором хранятся сведения  о самолетах: модель самолета; ФИО конструктора; год выпуска; количество мест; грузоподъемность. Вывести на экран информацию о самолетах одного конструктора.

27

Дан массив структурного типа, в котором хранятся сведения  о заказах фирмы: дата заказа; язык перевода; стоимость за страницу; объем; срок выполнения; исполнитель. Вывести на экран информацию о заказе клиента, введенного с клавиатуры.

28

Дан массив структурного типа, в котором хранятся сведения о кредитах: название кредита; банк; процентная ставка; срок кредита; максимальная сумма кредита. Вывести на экран информацию о кредитах, предоставляемых указанным банком.

29

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

30

Дан массив структурного типа, в котором хранятся сведения  о заказах фирмы: дата заказа; язык перевода; стоимость за страницу; объем; срок выполнения; исполнитель. Вычислить итоговую сумму заказа клиента, введенного с клавиатуры.

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

6.3.1 Что представляет собой тип данных структура?

6.3.2 Как описываются данные типа структуры?

6.3.3 Как описывают массивы структур? С какой целью их используют?

6.3.4 Как осуществляется доступ к элементам структурного массива?

6.3.5 Дайте определение объединения.

6.3.6 Как осуществляется доступ к элементам объединения?

6.3.7 Чем отличаются от структур объединения?

6.3.8 В чем сходство структур и объединений?

6.3.9 С какой целью используются анонимные объединения?

6.3.10 Можно ли вложить структуру в объединение?

  

7 Лабораторная работа. Файлы и работа с ними

 

Цель: получить практические навыки работы с файлами в С++.

 

7.1 Общие сведения

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

Для того чтобы программа на языке C++ могла работать с файлами, необходимо в начало программы включить заголовоч­ный файл <fstream.h>. В языке С с этой целью используется библиотека <stdio.h>.

Запись данных в файл воз­можна в двух режимах:

1) создание нового файла (перезапись существующего, ранее созданного файла) с помощью оператора:

ofstream  имя_потока ("имя_файла.расширение");

2) добавление данных в существующий файл:

         ofstream   имя_потока ("имя_файла.расширение", ios::app);

Вывод в файл осуществляется с помощью оператора вставки (<<).

Для закрытия файла используется функция close().

Ввод (чтение) данных из файла. Для открытия файла в режиме ввода используется оператор:

ifstream    имя_потока ("имя_файла.расширение");

Ввод из файла осуществляется с помощью оператора извлече­ния (>>).

Иногда требуется записывать в файл и читать из файла не символьные строки, а сложные типы данных, такие, как массивы и структуры. Для этих целей в C++ использу­ются функции write (запись) и read (чтение).

  

7.2 Задание к лабораторной работе

7.2.1 Для задачи, решенной в лабораторной работе № 4 (таблица 4.1), организовать ввод элементов указанного массива из файла. Полученные результаты следует вывести в тот же файл.

7.2.2 Для задачи, решенной в лабораторной работе № 6 (таблица 6.1), организовать ввод данных из файла. Результаты выборки или вычислений (в зависимости от варианта) также следует вывести в отдельный файл.

 

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

7.3.1 Что представляет собой файл данных? Дайте определение.

7.3.2 Приведите пример стандартного потока ввода-вывода.

7.3.3 Какие возможности для работы с файлами предоставляют С и С++?

7.3.4 Что такое режим доступа?

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

7.3.6 Как организуется чтение файла?

7.3.7 Как организовать построчное считывание данных из файла? Приведите пример.

7.3.8 Как организуется вывод данных в файл?

7.3.9 Как организовать добавление данных в существующий файл?

7.3.10 Каков механизм действий, связанных с закрытием файла?

 

8 Лабораторная работа. Функции. Рекурсия

 

Цель: получить практические навыки использования функций в С++.

 

8.1 Общие сведения

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

Структура функции похожа на структуру программы main. Описание функции содержит заголовок функции, объявления пе­ременных и операторы:

тип_функции    имя_функции (список_формальных_параметров)

{

объявления переменных;

оператор1;

…;

операторN;

}

Здесь: тип_функции - тип результата, возвращаемого в основную программу; имя_функции - уникальное имя, соответствующее по смыслу операции, которую выполняет функция; список_формальных_параметров - перечень формальных параметров и их типов.

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

имя_функции (список_фактических_параметров);

Для возвращения вычисленного значения в основную программу в функциях используется оператор:

return (результат);

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

Локальные переменные объявляются внутри функции точно так же, как и внутри главной функции main. Локальные переменные действуют только внутри функции, в которой они объявлены. Глобальные переменные объявляются в начале программы вне какой-либо функции. Глобальные переменные доступны для лю­бой функции в программе. Если локальная и глобальная переменные имеют одинаковое имя, то переменная в функции воспринимается компилятором C++ как локальная переменная. Если внутри функции нужно исполь­зовать глобальную переменную, совпадающую по имени с локаль­ной переменной, то в этом случае нужно воспользоваться гло­бальным оператором разрешения:

:: имя_переменной

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

 

8.2 Задание к лабораторной работе

Используя рекурсию, решить задачу, соответствующую варианту, выбранному по таблице 8.1.

Таблица 8.1Варианты заданий

Вариант

Задание

1

2

 

Продолжение таблицы 8.1

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

Окончание таблицы 8.1

21

22

23

24

25

26

27

28

29

30

 

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

8.3.1 Дайте определение функции.

8.3.2 Что представляет собой описание функции?

8.3.3 С какой целью используются прототипы?

8.3.4 С какой целью в типе функции используется void?

8.3.5 Как осуществляется обращение к функции? 

8.3.6 Что понимается под фактическими параметрами?

8.3.7 В чем заключается отличие формальных параметров функции от фактических?

8.3.8 Как осуществляется выход из функции?

8.3.9 В чем заключаются преимущества и недостатки рекурсивных функций?

8.3.10 С какой целью используются локальные и глобальные параметры?

 

Приложение А

Способы описания алгоритмов

 

Таблица  А.1 – Соответствие различных способов описания алгоритмов

Струк-тура

Псевдокоды

Flow-формы

Диаграммы

Насси-Шнейдермана

Следо-вание

<действие 1>

<действие 2>

Ветвле-ние

   Если <условие>

      то <действие 1>

      иначе <действие 2>

   Все-если

Цикл-пока

   Цикл-пока <условие>

<действие>

   Все-цикл  

Выбор

   Выбор <код>

   <код 1>: <действие 1>

   <код 2>: <действие 2>

    иначе <действие 3>

   Все-выбор

Цикл с парамет-ром

   Для <индекс> = 

        <n>,<m>,<h>

        <действие >

   Все-цикл

Цикл-до

   Выполнять

<действие>

   До <условие>

 

Таблица  А.2 – Характерные приемы программирования

Прием

программирования

Действия, выполняемые до цикла

Действия, выполняемые в цикле

Накапливание суммы

S = 0

S=S+элемент

Накапливание произведения

P = 1

P=P*элемент

Накапливание количества

K = 0

K=K+1

Поиск максимального значения

max=предполаг_знач

если

   (текущее_знач>max) тогда

   max= текущее_знач;

Поиск минимального значения

min=предполаг_знач

если

   (текущее_знач<min)

тогда

   min= текущее_знач;


Список литературы

 

1.   Ашарина И.В. Основы программирования на языках С и С++. - М.: Горячая линия - Телеком, 2002.

2.   Марченко А.Л. С++. Бархатный путь. - М.: Горячая линия - Телеком, 2002.

3.   Дейтел Х.М., Дейтел П.Дж. Как программировать на С++. – М.: БИНОМ, 1999.

4.   Страуструп Б. Язык программирования С++. – М.: Радио и связь, 1991.

5.   Культин Н.Б. Самоучитель С++Builder. – СПб.: БХВ-Петербург, 2004.

6.   Архангельский А.Я. C++ Builder 6. Справочное пособие. Книга 1. Язык С++. – М.: Бином-Пресс, 2002.

7.   Вирт Н. Алгоритмы и структуры данных. – М.: Мир, 1989.

8.   Культин Н. С/С++ в задачах и примерах. – СПб.: Питер, 2002. 

9.   Аляев Ю.А., Козлов О.А. Алгоритмизация и языки программирования Pascal, C++, Visual Basic: Учебно-справочное пособие. – М.: Финансы и статистика, 2004.

10.   Липпман С., Лажойе Ж. Весь С++ от азов до совершенства. – СПб.: Невский диалект. - М.: ДМК Пресс, 2007.

11.   Давыдов В.Г. Технологии программирования С++. - СПб., 2005.

12.   Мудров А.Е. Численные методы для ПЭВМ на языках Бейсик, Фортран и Паскаль. – Томск: МП «РАСКО», 1991.

13.   Красикова И.Е. С++ просто как. - М., 2005.

14.   Сябина Н.В. Технологии программирования. Конспект лекций (для студентов всех форм обучения спец. 050702, 050703). - Алматы: АИЭС, 2008.

15.   Л.К.Ибраева, Н.В.Сябина. Информатика. Основы С++. Часть 5. Методические указания к выполнению лабораторных работ (для студентов всех специальностей). - Алматы: АИЭС, 2006.