сборник лабораторных работ

СБОРНИК ЛАБОРАТОРНЫХ РАБОТ

по дисциплине
Основы алгоритмизации и программирования

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




среднего профессионального образования
(базовый уровень)


Аннотация
Дисциплина "Основы алгоритмизации и программирования" является одной из базовых дисциплин общепрофессиональной подготовки по специальности Программное обеспечение вычислительной техники и автоматизированных систем. В результате изучения дисциплины студенты должны приобрести навыки решения задач на языке программирования C/C++. Курс рассчитан на четыре семестра и изучается на протяжении 2 и 3 курсов. Первая часть курса (3-5 семестры) посвящена изучению основ алгоритмизации и программированию на языке С/С++ с использованием структурной методологии, вторая часть курса (5-6 семестры) посвящена объектно-ориентированному программирования на С/С++.
Одной из форм организации работы на занятиях по данной дисциплине является выполнение лабораторных работ. Выполнение лабораторных работ является необходимым условием для получения допуска к экзамену/зачету.
Данный сборник лабораторных работ соответствует рабочей программе по дисциплине и предназначен для изучения основ структурного программирования на языке C/C++.

Содержание
13 TOC \o "1-3" \h \z \t "Подзаголовок;2" 1413LINK \l "_Toc209365983"14Введение 13 PAGEREF _Toc209365983 \h 1461515
13LINK \l "_Toc209365984"14Лабораторная работа №1 13 PAGEREF _Toc209365984 \h 1491515
13LINK \l "_Toc209365985"14Тема: Простые вычисления 13 PAGEREF _Toc209365985 \h 1491515
13LINK \l "_Toc209365986"141.1 Краткая теоретическая справка 13 PAGEREF _Toc209365986 \h 1491515
13LINK \l "_Toc209365987"141.1.1 Математические функции стандартной библиотеки С 13 PAGEREF _Toc209365987 \h 1491515
13LINK \l "_Toc209365988"141.1.2 Справочная информация о величинах геометрических фигур 13 PAGEREF _Toc209365988 \h 14101515
13LINK \l "_Toc209365989"141.1.3 Расстояние между двумя точками 13 PAGEREF _Toc209365989 \h 14111515
13LINK \l "_Toc209365990"141.2 Индивидуальные задания 13 PAGEREF _Toc209365990 \h 14121515
13LINK \l "_Toc209365991"14Лабораторная работа №2 13 PAGEREF _Toc209365991 \h 14141515
13LINK \l "_Toc209365992"14Тема: Программирование разветвленных алгоритмов 13 PAGEREF _Toc209365992 \h 14141515
13LINK \l "_Toc209365993"142.1 Краткая теоретическая справка 13 PAGEREF _Toc209365993 \h 14141515
13LINK \l "_Toc209365994"142.2 Типовые задачи 13 PAGEREF _Toc209365994 \h 14161515
13LINK \l "_Toc209365995"142.3 Индивидуальные задания 13 PAGEREF _Toc209365995 \h 14171515
13LINK \l "_Toc209365996"14Лабораторная работа №3 13 PAGEREF _Toc209365996 \h 14221515
13LINK \l "_Toc209365997"14Тема: Суммирование рядов 13 PAGEREF _Toc209365997 \h 14221515
13LINK \l "_Toc209365998"143.1 Краткая теоретическая справка 13 PAGEREF _Toc209365998 \h 14221515
13LINK \l "_Toc209365999"143.1.1 Представление аналитических функций в виде рядов Тейлора 13 PAGEREF _Toc209365999 \h 14221515
13LINK \l "_Toc209366000"143.1.2 Общая схема алгоритма суммирования 13 PAGEREF _Toc209366000 \h 14231515
13LINK \l "_Toc209366001"143.1.3 Учет рекуррентной зависимости членов ряда 13 PAGEREF _Toc209366001 \h 14231515
13LINK \l "_Toc209366002"143.1.4 Учет погрешности вычисления суммы членов ряда 13 PAGEREF _Toc209366002 \h 14241515
13LINK \l "_Toc209366003"143.2 Индивидуальные задания 13 PAGEREF _Toc209366003 \h 14251515
13LINK \l "_Toc209366004"14Лабораторная работа №4 13 PAGEREF _Toc209366004 \h 14281515
13LINK \l "_Toc209366005"14Тема: Арифметические задачи 13 PAGEREF _Toc209366005 \h 14281515
13LINK \l "_Toc209366006"144.1 Краткая теоретическая справка 13 PAGEREF _Toc209366006 \h 14281515
13LINK \l "_Toc209366007"144.1.1 Свойства делимости 13 PAGEREF _Toc209366007 \h 14281515
13LINK \l "_Toc209366008"144.1.2 Работа с цифрами числа 13 PAGEREF _Toc209366008 \h 14281515
13LINK \l "_Toc209366009"144.1.3 Типовые задачи 13 PAGEREF _Toc209366009 \h 14281515
13LINK \l "_Toc209366010"144.2 Индивидуальные задания 13 PAGEREF _Toc209366010 \h 14321515
13LINK \l "_Toc209366011"14Лабораторная работа №5 13 PAGEREF _Toc209366011 \h 14351515
13LINK \l "_Toc209366012"14Тема: Работа с массивами 13 PAGEREF _Toc209366012 \h 14351515
13LINK \l "_Toc209366013"145.1 Краткая теоретическая справка 13 PAGEREF _Toc209366013 \h 14351515
13LINK \l "_Toc209366014"145.1.1 Типовые задачи 13 PAGEREF _Toc209366014 \h 14351515
13LINK \l "_Toc209366015"145.2 Индивидуальные задания 13 PAGEREF _Toc209366015 \h 14371515
13LINK \l "_Toc209366016"14Лабораторная работа №6 13 PAGEREF _Toc209366016 \h 14401515
13LINK \l "_Toc209366017"14Тема: Работа с двумерными массивами 13 PAGEREF _Toc209366017 \h 14401515
13LINK \l "_Toc209366018"146.1 Краткая теоретическая справка 13 PAGEREF _Toc209366018 \h 14401515
13LINK \l "_Toc209366019"146.1.1 Обход матрицы 13 PAGEREF _Toc209366019 \h 14401515
13LINK \l "_Toc209366020"146.2 Индивидуальные задания 13 PAGEREF _Toc209366020 \h 14411515
13LINK \l "_Toc209366021"14Лабораторная работа №7 13 PAGEREF _Toc209366021 \h 14451515
13LINK \l "_Toc209366022"14Тема: Работа с функциями 13 PAGEREF _Toc209366022 \h 14451515
13LINK \l "_Toc209366023"147.1 Краткая теоретическая справка 13 PAGEREF _Toc209366023 \h 14451515
13LINK \l "_Toc209366024"147.2 Индивидуальные задания 13 PAGEREF _Toc209366024 \h 14461515
13LINK \l "_Toc209366025"14Лабораторная работа №8 13 PAGEREF _Toc209366025 \h 14511515
13LINK \l "_Toc209366026"14Тема: Обработка строк 13 PAGEREF _Toc209366026 \h 14511515
13LINK \l "_Toc209366027"148.1 Краткая теоретическая справка 13 PAGEREF _Toc209366027 \h 14511515
13LINK \l "_Toc209366028"148.1.1 Определение класса символов и преобразование символов 13 PAGEREF _Toc209366028 \h 14511515
13LINK \l "_Toc209366029"148.1.2 Стандартный функции для работы со строками 13 PAGEREF _Toc209366029 \h 14531515
13LINK \l "_Toc209366030"148.2 Индивидуальные задания 13 PAGEREF _Toc209366030 \h 14561515
13LINK \l "_Toc209366031"14Лабораторная работа №9 13 PAGEREF _Toc209366031 \h 14591515
13LINK \l "_Toc209366032"14Тема: Работа со структурами 13 PAGEREF _Toc209366032 \h 14591515
13LINK \l "_Toc209366033"149.1 Краткая теоретическая справка 13 PAGEREF _Toc209366033 \h 14591515
13LINK \l "_Toc209366034"149.2 Индивидуальные задания 13 PAGEREF _Toc209366034 \h 14591515
13LINK \l "_Toc209366035"14Лабораторная работа №10 13 PAGEREF _Toc209366035 \h 14621515
13LINK \l "_Toc209366036"14Тема: Работа с файлами 13 PAGEREF _Toc209366036 \h 14621515
13LINK \l "_Toc209366037"1410.1 Краткая теоретическая справка 13 PAGEREF _Toc209366037 \h 14621515
13LINK \l "_Toc209366038"1410.2 Индивидуальные задания 13 PAGEREF _Toc209366038 \h 14621515
13LINK \l "_Toc209366039"14Лабораторная работа №11 13 PAGEREF _Toc209366039 \h 14621515
13LINK \l "_Toc209366040"14Тема: Многофайловая разработка программ 13 PAGEREF _Toc209366040 \h 14621515
13LINK \l "_Toc209366041"1411.1 Краткая теоретическая справка 13 PAGEREF _Toc209366041 \h 14621515
13LINK \l "_Toc209366042"1411.2 Индивидуальные задания 13 PAGEREF _Toc209366042 \h 14621515
13LINK \l "_Toc209366043"14Лабораторная работа №12 13 PAGEREF _Toc209366043 \h 14621515
13LINK \l "_Toc209366044"14Тема: Библиотеки динамической компоновки 13 PAGEREF _Toc209366044 \h 14621515
13LINK \l "_Toc209366045"1412.1 Краткая теоретическая справка 13 PAGEREF _Toc209366045 \h 14621515
13LINK \l "_Toc209366046"1412.2 Индивидуальные задания 13 PAGEREF _Toc209366046 \h 14621515
15


Введение
Лабораторные работы по дисциплине "Основы алгоритмизации и программирования" проводятся для достижения следующих целей:
формирования практических навыков программирования и работы в современных вычислительных системах;
овладения одним из алгоритмических языков высокого уровня – языком С/С++.
Все лабораторные работы данного сборника состоят из краткой теоретической справки (где могут содержаться сведения из рассматриваемой предметной области и примеры решения типовых задач), а также перечня индивидуальных заданий. Вариант определяется преподавателем.
Выполнение лабораторной работы включает следующие этапы:
1. Допуск к работе.
На этом этапе преподаватель проверяет подготовленность студента по теме работы, задавая контрольные вопросы или контрольные упражнения.
2. Проектирование и реализация программы решения задачи.
Этот этап включает:
разработку и описание алгоритма поставленной задачи,
написание программы в соответствии с требованиями к лабораторной работе,
трансляцию и отладку программы на тестовых примерах (набор тестов подбирает студент).
3. Защита лабораторной работы.
К защите студент должен продемонстрировать работу программы на тестовых примерах и подготовить отчет по работе. Защита состоит в обсуждении алгоритма и программы, ответе на вопросы преподавателя.
Названия файлов с исходным кодом программ должны соответствовать следующему шаблону:
lr_cNNtMvKK_FULLNAME.cpp,
где NN – двузначный номер лабораторной работы,
M – номер задачи,
KK – двузначный номер варианта,
FULLNAME – фамилия автора работы.
Отчет по лабораторной работе может быть выполнен в рукописной или печатной форме. Если отчет сдается в электронной форме, имя файла должно соответствовать шаблону:
lr_cNNvKK_FULLNAME.rtf,
где NN – двузначный номер лабораторной работы,
KK – двузначный номер варианта,
FULLNAME – фамилия автора работы.
Отчет по лабораторной работе включает следующие разделы:
1. Условие задачи
2. Анализ задачи
3. Алгоритм решения задачи
4. Текст программы (основной функции/функций)
5. Набор тестов
6. Результаты работы программы
Анализ задачи необходим для достижения следующих целей:
установить входные и выходные данные;
выделить основные отношения между входными и выходными данными (если возможно, то описать их с помощью формул);
выделить основные подзадачи, которые надо решить, чтобы достичь результата.
На основании этого определяется подход к разработке алгоритма решения задачи (т.е. метод ее решения), который позволяет в общем виде сформулировать, что должен делать алгоритм, чтобы преобразовать исходные данные в результат.
Как правило, в условии задачи нет каких-либо ограничений на размер и тип исходных данных, поэтому необходимо определить класс входных данных, которые должны обрабатываться алгоритмом. Например, входными данными является матрица. В этом случае необходимо задать максимально допустимое число строк и максимально допустимое число столбцов. При этом студент должен не сужать, а максимально расширять класс входных данных, чтобы разработать наиболее универсальную программу.
Алгоритм решения задачи – это не программа ее решения, а способ дать человеку представление о структуре алгоритма, о смысле его шагов и их логической взаимосвязи. Можно использовать любую удобную форму представления алгоритма (словесную, блок-схему, псевдокод и т.п.), если в условии лабораторной работы не указаны более точные требования.
Пример. По заданному целому X сформировать матрицу A размера 10x10 следующим образом:

Описание алгоритма на псевдоязыке:
begin
{ввод заданного числа X};
{Заполнить 1ю строку матрицы A};
for i :=2 to 10 do
begin
{заполнить первые девять элементов
i-й строки, взяв их из (i-1) строки};
{заполнить последний элемент i-й строки};
end
end.
Если необходимо, нужно продолжить описание, детализируя отдельные шаги.



Тема: Простые вычисления
Цели: закрепление навыков программирования линейных алгоритмов; получение навыков применения для решения задач основных математических функций стандартной библиотеки языка C
Краткая теоретическая справка
Математические функции стандартной библиотеки С
Для реализации операций с основными типами данных предназначены операции языка программирования и функции стандартной библиотеки. Прототипы математических функций и определения некоторых констант содержатся в заголовочном файле math.h.
Наиболее часто используемые функции:
Функция
Краткое описание

abs
нахождение абсолютного значения выражения типа int

acos
вычисление арккосинуса

asin
вычисление арксинуса

atan
вычисление арктангенса х

ceil
нахождение наименьшего целого, большего или равного х

cos
вычисление косинуса

exp
вычисление экспоненты

fabs
нахождение абсолютного значения типа double

floor
нахождение наибольшего целого, меньшего или равного х
кстати, floor(x+0.5) округлит x до ближайшего целого,
floor(x*10n+0.5)/10n округлит x до заданного (n-ого) десятичного знака

labs
нахождение абсолютного значения типа long

log
вычисление натурального логарифма

log10
вычисление логарифма по основанию 10

modf
разложение х на дробную и целую часть

pow
вычисление х в степени у

sin
вычисление синуса

sqrt
нахождение квадратного корня

tan
вычисление тангенса

Некоторые константы:
M_E
Основание натуральных логарифмов (e)

M_PI
Отношение длины окружности к ее диаметру (()

Пример: Вычислить y=13 EMBED Equation.3 1415.
#include

void main(){

y = pow(2, x)/cos(x)+pow(3, x);

}
Справочная информация о величинах геометрических фигур
Рассмотрим несколько фигур:
13 EMBED PBrush 1415
13 EMBED PBrush 1415

треугольник
трапеция

13 EMBED PBrush 1415
13 EMBED PBrush 1415

ромб
четырехугольник

В данной лабораторной работе будут использоваться следующие обозначения (см. рисунок): a, b, c, d – стороны фигур; A, B, C, D – вершины; ha, hb, hc – высоты, опущенные на соответствующие стороны треугольника; r и R – радиусы вписанной и описанной окружностей соответственно; h – высота трапеции; e – диагональ трапеции; e1 и e2 – диагонали четырехугольника; d1 и d2 – диагонали ромба; p и S – соответственно полупериметр и площадь фигуры.
При решении задач могут пригодиться следующие формулы:
Для треугольника:
13 EMBED Equation.3 1415 – Теорема синусов
13 EMBED Equation.3 1415 – Теорема косинусов
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415 – Формула Герона
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415
Для ромба:
13 EMBED Equation.3 1415
Для трапеции
A+B=C+D=1800
13 EMBED Equation.3 1415
Трапецию, ромб и произвольный четырехугольник всегда можно разделить на треугольники и свести вычисления к известной задаче.
Замечание: аргументы тригонометрических функций стандартной библиотеки должны быть заданы в радианах (результаты вычисления обратных тригонометрических функции будут представлены в радианах, соответственно). Для пересчета градусов в радианы используется следующая формула:
13 EMBED Equation.3 1415
Замечание: для вычисления котангенса и арккотангенса в библиотеке отсутствуют функции. Для их вычисления можно воспользоваться формулами:
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415
Расстояние между двумя точками
Часто при решении различных задач, связанных с геометрией, задается не длина отрезка, а координаты вершин. По крайней мере, одну формулу нужно всегда помнить (или уметь выводить) – это расстояние между двумя точками.
13 SHAPE \* MERGEFORMAT 1415
Эта задача сводится к Теореме Пифагора – у нас есть прямоугольный треугольник ABC с известными катетами AC=|x1-x2| и BC=|y1-y2| (см. рисунок). Гипотенуза треугольника (расстояние между точками) равна:
13 EMBED Equation.3 1415
Индивидуальные задания
Задача 1. Вычислите значение выражения. Математические функции стандартной библиотеки не использовать. Значения параметров вводятся с клавиатуры. Предусмотреть диалог с пользователем. Предполагается, что данные корректны (проверку выполнять не требуется).

выражение

выражение

выражение

1
13 EMBED Equation.3 1415
11
13 EMBED Equation.3 1415
21
13 EMBED Equation.3
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ation.3 1415
28
13 EMBED Equation.3 1415

9
13 EMBED Equation.3 1415
19
13 EMBED Equation.3 1415
29
13 EMBED Equation.3 1415

10
13 EMBED Equation.3 1415
20
13 EMBED Equation.3 1415
30
13 EMBED Equation.3 1415


Задача 2. Вычислите значение выражения, используя математические функции стандартной библиотеки. Значения параметров вводятся с клавиатуры. Предусмотреть диалог с пользователем. Предполагается, что данные корректны (проверку выполнять не требуется).

выражение

выражение

выражение

1
13 EMBED Equation.3 1415
11

·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·1415

8
13 EMBED Equation.3 1415
18
13 EMBED Equation.3 1415
28
13 EMBED Equation.3 1415

9
13 EMBED Equation.3 1415
19
13 EMBED Equation.3 1415
29
13 EMBED Equation.3 1415

10
13 EMBED Equation.3 1415
20
13 EMBED Equation.3 1415
30
13 EMBED Equation.3 1415


Задача 3. Решите геометрическую задачу. Значения параметров вводятся с клавиатуры. Предусмотреть диалог с пользователем. Предполагается, что данные корректны (проверку выполнять не требуется).

Формулировка задачи

1
Заданы координаты трех вершин треугольника (x1,y1), (x2,y2), (x3,y3). Найти его периметр и площадь

2
В треугольнике заданы две стороны a, b и угол между ними C. Найти остальные элементы треугольника (c, A, B)

3
В треугольнике заданы сторона a и прилегающие к ней углы B и C. Найти остальные элементы треугольника (b, c, A)

4
В треугольнике заданы три стороны a, b и c. Найти углы треугольника (A, B, C)

5
В треугольнике заданы две стороны a, b. Площадь треугольника равна S. Найти остальные элементы треугольника (c, A, B, C)

6
В треугольнике заданы сторона a, угол B и радиус описанной окружности R. Найти остальные элементы треугольника (b, c, A, C)

7
В треугольнике заданы углы B, C и радиус описанной окружности R. Найти остальные элементы треугольника (a, b, c, A)

8
В треугольнике заданы две стороны a, b и радиус описанной окружности R. Найти остальные элементы треугольника (c, A, B, C)

9
В треугольнике заданы две стороны a, b и половина периметра p. Найти остальные элементы треугольника (c, A, B, C)

10
В треугольнике заданы углы A, C и высота hb. Найти остальные элементы треугольника (a, b, c, B)

11
В треугольнике заданы стороны a, b и высота hb. Найти остальные элементы треугольника (c, A, B, C)

12
В треугольнике заданы сторона c, угол A и высота hb. Найти остальные элементы треугольника (a, b, B, C)

13
В ромбе заданы сторона a и угол A. Найти угол B, высоту h и диагонали d1 и d2

14
В ромбе заданы диагонали d1 и d2. Найти сторону a, высоту h и углы A и B

15
В ромбе заданы диагональ d1 и площадь S. Найти сторону a, высоту h, диагональ d2 и углы A и B

16
В ромбе заданы сторона a и диагональ d1. Найти высоту h, диагональ d2 и углы A и B

17
В трапеции заданы стороны a, b, c, d. Найти высоту h и диагональ e

18
В трапеции заданы стороны a, b, d и высота h. Найти сторону c и диагональ e

19
В трапеции заданы стороны a, b, d и угол A. Найти сторону c, диагональ e и высоту h

20
В четырехугольнике заданы стороны a, b, c, d и диагональ e1. Найти высоту hd и диагональ e2

21
В четырехугольнике заданы стороны a, b, c, d и диагональ e1. Найти углы A, B, C, D

22
Дана сторона равностороннего треугольника. Найти площадь этого треугольника, его высоты, радиусы вписанной и описанной окружностей

23
В треугольнике заданы три стороны a, b и c. Вычислить высоты треугольника ha, hb, hc

24
В трапеции заданы стороны b, d и угол A, трапеция равнобедренная. Найти площадь трапеции S и ее полупериметр p

25
В прямоугольном треугольнике заданы катеты a и b. Найти углы A и B, площадь треугольника S и его полупериметр p

26
В треугольнике заданы три угла A, B, C и радиус описанной окружности R. Найти стороны треугольника a, b, c

27
В ромбе заданы высота h и площадь S. Найти сторону a, диагонали d1 и d2 и углы A и B

28
В ромбе заданы радиус вписанной окружности и площадь S. Найти сторону a, диагонали d1 и d2 и углы A и B

29
В треугольнике заданы угол C, сторона a, полупериметр p и радиус вписанной окружности r. Найти стороны треугольника b, c и угол A

30
В треугольнике заданы три угла A, B, C и радиус вписанной окружности r. Найти стороны треугольника a, b, c


Тема: Программирование разветвленных алгоритмов
Цели: получение навыков программирования разветвленных алгоритмов; получение практических навыков решения задач с использованием операторов if и switch
Краткая теоретическая справка
Для выполнения данной лабораторной работы потребуется вспомнить некоторые формулы и определения аналитической геометрии.
Окружность – геометрическое множество точек, равноудаленных от одной точки – центра окружности. Формула окружности выводится просто – опять по теореме Пифагора:
13 EMBED Equation.3 1415
Т.е., квадрат расстояния от центра до точки на окружности равен квадрату радиуса окружности.
Для точек, лежащих внутри окружности, выполняется неравенство 13 EMBED Equation.3 1415; для точек, лежащих вне окружности – 13 EMBED Equation.3 1415.
Уравнение прямой может быть представлено в различном виде в зависимости от каких-либо заданных начальных условий:
1. Общее уравнение прямой:
Ax + By + C = 0
Причем постоянные А, В не равны нулю одновременно, т.е. А2 + В2
· 0. Это уравнение первого порядка называют общим уравнением прямой.
В зависимости от значений постоянных А,В и С возможны следующие частные случаи:
C = 0, А
· 0, В
· 0 {Ax + By = 0} – прямая проходит через начало координат
А = 0, В
· 0, С
· 0 {By + C = 0} – прямая параллельна оси Ох
В = 0, А
· 0, С
· 0 {Ax + C = 0} – прямая параллельна оси Оу
В = С = 0, А
· 0 {Ax = 0} – прямая совпадает с осью Оу
А = С = 0, В
· 0 {By = 0} – прямая совпадает с осью Ох
2. Уравнение прямой с угловым коэффициентом:
y - yo = k (x - xo),
где k - угловой коэффициент прямой, то есть k = tg
·
·, где
·
·- величина угла, образованного прямой с осью Оx, M(xo, yo) - некоторая точка, принадлежащая прямой.
Уравнение принимает вид y = kx + b, если M (0, b) есть точка пересечения прямой с осью Оy.
3. Уравнение прямой в отрезках:
13 EMBED Equation.3 1415,
где a и b - величины отрезков, отсекаемых прямой на осях координат.
4. Уравнение прямой, проходящей через две данные точки A(x1, y1) и B(x2, y2):
13 EMBED Equation.3 1415
5. Уравнение прямой, проходящей через данную точку A(x1, y1) параллельно данному вектору a(m, n):
13 EMBED Equation.3 1415
Прямая, уравнение которой Ax+By+C=0, разбивает плоскость на две полуплоскости. На практике для выяснения того, в какой полуплоскости мы имеем Ax+By+C<0, а в какой Ax+By+C>0, применяют метод контрольных точек. Для этого берут контрольную точку (разумеется, не лежащую на прямой, уравнение которой Ax+By+C = 0) и проверяют, какой знак имеет в этой точке выражение Ax+By+C. Тот же знак имеет указанное выражение и во всей полуплоскости, где лежит контрольная точка. Во второй полуплоскости Ax+By+C имеет противоположный знак.
Типовые задачи
Определить, попадает ли точка с координатами (x, y) в заштрихованную фигуру.

Алгоритм решения задачи:
Ввести значения координат x и y
Подставить значения координат в логическое выражение для проверки попадания точки в заштрихованную фигуру. Если логическое выражение истинно, вывести "да", иначе – "нет"
Основная сложность – определить логическое выражение.
Прежде всего, обратим внимание на то, что эту сложную фигуру целесообразно разбить на несколько более простых: треугольник, лежащий в I и IV координатных четвертях и треугольник, лежащий во II и III четвертях. Таким образом, точка может попасть внутрь одной из этих фигур, либо на линию, их ограничивающую. Количество отношений, описывающих какую-либо область, обычно совпадает с количеством линий, эту область ограничивающих. Чтобы точка попала внутрь области, необходима истинность каждого из отношений, поэтому над ними выполняется операция && (логическое И). Так как вся область была разбита на несколько, то между отношениями, описывающими каждую из них, используется операция || (логическое ИЛИ).
Уравнения прямых для первого (левого) треугольника (x
·0): y=-x, y=-1.5x-1; для второго треугольника (x
·0): y=x, y=1.5x-1. Полуплоскости задаются неравенствами, знак которых определяем простой подстановкой. Границы принадлежат фигуре, поэтому неравенства будут нестрогими.
Учитывая приведенные здесь соображения и записав уравнения всех ограничивающих фигуру линий, получаем логическое выражение:
(x <= 0) && (y >= –1.5 * x – 1) && (y <= – x) ||
(x >= 0) && (y >= 1.5 * x – 1) && (y <= x)
Определение переменных
Для реализации алгоритма нужны переменные для хранения значений координат x и y, оба числа – действительные числа. В условии не приведены требования к точности вычислений, рисунок представлен с довольно невысокой точностью, можно было бы использовать тип float. Но в соответствии с общим стилем программирования на C выберем для них тип double.
Текст программы:
void main(){
double x, y; //x, y – координаты точки

//Ввод координат точки:
printf("Введите координаты точки (x, y):\n");
scanf("%ld%ld", &x, &y);

//Проверка условия и получение результата:
if((x <= 0) && (y >= –1.5 * x – 1) && (y <= – x) ||
(x >= 0) && (y >= 1.5 * x – 1) && (y <= x))
printf("Точка (%.2f, %.2f) находится внутри фигуры\n", x, y);
else
printf("Точка (%.2f, %.2f) не попадает внутрь фигуры\n",x,y);
}
Тестовые примеры
(-0.5, -0.2) – точка в первом треугольнике
(0.5, 0) – точка во втором треугольнике
(0, 0) – точка на границе фигуры, на границе двух треугольников
(2, 1) – точка в I четверти, ниже фигуры
(1, 0.7) - точка в I четверти, выше фигуры
(-0.7, -0.7) – точка в III четверти, ниже фигуры
(-1, 0.7) - точка во II четверти, выше фигуры

Индивидуальные задания
Задача 1. Вычислить заданное целочисленное выражение для данных a, b. Результат Х - тоже целочисленный. Исходные данные и результат должны проверяться на область допустимых значений.

Функция

Функция

1
13 EM
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·15

Задача 2. Определить, попадает ли точка с координатами (x, y) в заштрихованную фигуру.

фигура

фигура

1
13 EMBED PBrush 1415
11
13 EMBED PBrush 1415

2
13 EMBED PBrush 1415
12
13 EMBED PBrush 1415

3
13 EMBED PBrush 1415
13
13 EMBED PBrush 1415

4
13 EMBED PBrus
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·Задача 3. Решить задачу с использованием оператора switch

Формулировка задачи

1
Дан номер месяца (1 – январь, 2 – февраль, ...). Вывести название соответствующего времени года ("зима", "весна" и т.д.).

2
Дан номер месяца. Определить название месяца по его номеру, например, 1 - январь, 2 - февраль и т. д.

3
Дан номер месяца (1 – январь, 2 – февраль, ...). Вывести число дней в этом месяце для невисокосного года.

4
Установить название дня недели по его номеру, например, 1 - понедельник, 2 - вторник и т.д.

5
Определить название заданной цифры, например 1 - один, 5 - пять т.д.

6
Дано целое число в диапазоне 0 – 9. Вывести строку – название соответствующей цифры на русском языке (0 – "ноль", 1 – "один", 2 – "два", ...).

7
Дано целое число в диапазоне 1 – 5. Вывести строку – словесное описание соответствующей оценки (1 – "плохо", 2 – "неудовлетворительно", 3 – "удовлетворительно", 4 – "хорошо", 5 – "отлично").

8
Над числами определены 4 арифметические действия: + – сложение, - – вычитание, * – умножение, / – деление. Заданы действие и два числа A и B (В не равно нулю) в формате: «А» «действие» «В». Выполнить над числами указанное действие и вывести результат.

9
Единицы длины пронумерованы следующим образом: 1 – дециметр, 2 – километр, 3 – метр, 4 – миллиметр, 5 – сантиметр. Дан номер единицы длины и длина отрезка L в этих единицах (вещественное число). Вывести длину данного отрезка в метрах.

10
Единицы массы пронумерованы следующим образом: 1 – килограмм, 2 – миллиграмм, 3 – грамм, 4 – тонна, 5 – центнер. Дан номер единицы массы и масса тела M в этих единицах (вещественное число). Вывести массу данного тела в килограммах.

11
Робот может перемещаться в четырех направлениях ("С" – север, "З" – запад, "Ю" – юг, "В" – восток) и принимать три цифровые команды: 0 – продолжать движение, 1 – поворот налево, –1 – поворот направо. Дан символ C – исходное направление робота и число N – посланная ему команда. Вывести направление робота после выполнения полученной команды.

12
Локатор ориентирован на одну из сторон света ("С" – север, "З" – запад, "Ю" – юг, "В" – восток) и может принимать три цифровые команды: 1 – поворот налево, –1 – поворот направо, 2 – поворот на 180 градусов. Дан символ C – исходная ориентация локатора и числа N1 и N2 – две посланные ему команды. Вывести ориентацию локатора после выполнения данных команд.

13
Элементы окружности пронумерованы следующим образом: 1 – радиус (R), 2 – диаметр (D), 3 – длина (L), 4 – площадь круга (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке). В качестве значения Pi использовать 3.14.

14
Элементы равнобедренного прямоугольного треугольника пронумерованы следующим образом: 1 – катет (a), 2 – гипотенуза (c), 3 – высота, опущенная на гипотенузу (h), 4 – площадь (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).

15
Элементы равностороннего треугольника пронумерованы следующим образом: 1 – сторона (a), 2 – радиус вписанной окружности (R1), 3 – радиус описанной окружности (R2), 4 – площадь (S). Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данного треугольника (в том же порядке).

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

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

18
Дано целое число в диапазоне 20 – 69, определяющее возраст (в годах). Вывести строку – словесное описание указанного возраста, обеспечив правильное согласование числа со словом "год", например: 20 – "двадцать лет", 32 – "тридцать два года", 41 – "сорок один год".

19
Дано целое число в диапазоне 100 – 999. Вывести строку – словесное описание данного числа, например: 256 – "двести пятьдесят шесть", 814 – "восемьсот четырнадцать".

20
В восточном календаре принят 60-летний цикл, состоящий из 12-летних подциклов, обозначаемых названиями цвета: зеленый, красный, желтый, белый и черный. В каждом подцикле годы носят названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, курицы, собаки и свиньи. По номеру года вывести его название, если 1984 год был началом цикла – годом зеленой крысы.


Тема: Суммирование рядов
Цели: получение навыков программирования циклических алгоритмов; практическое освоение на примере суммирования рядов методов реализации итерационных алгоритмов, использующих рекурсивно описанное решающее правило.
Краткая теоретическая справка
Ситуации, когда каждый следующий элемент последовательности выражается через предыдущие элементы, встречаются часто. Формулы для определения таких элементов называются рекуррентными соотношениями. Определение любого элемента последовательности в таких формулах невозможно без знания одного или нескольких предыдущих элементов. Элементы последовательности должны получаться по порядку, один за другим.
Представление аналитических функций в виде рядов Тейлора
Для вычисления значений аналитической функции можно воспользоваться ее представлением в виде степенного ряда
13 EMBED Equation.3 1415
обычно называемого рядом Тейлора. Необходимым и достаточным условием существования такого разложения функции f(x) в некоторой окрестности |x
·
·|· является существование для f(x) всех производных в этой окрестности и сходимость остаточного члена Rn(x) к нулю при n
·.
В случае элементарных функций ряды Тейлора имеют вид (степенные ряды при
·=0 представлены в форме Маклорена):
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415
и т.д.
Общая схема алгоритма суммирования
При наличии представления функции f(x) в виде ряда Тейлора проблема вычисления значений f(x) в точках интервала (–r, r) может быть сведена к задаче нахождения частичных сумм числового ряда общего вида:
13 EMBED Equation.3 1415
Общая схема алгоритма суммирования может быть представлена в виде:
13 SHAPE \* MERGEFORMAT 1415
Как следует из приведенной блок-схемы, алгоритм суммирования представляет собой итерационную процедуру, на каждой итерации которой к переменной Sum прибавляется очередной член ряда ai. Как результат, в переменной Sum (называемой далее сумматором) обеспечивается накопление частичных сумм числового ряда. Величина N, используемая в общей схеме алгоритма для задания момента завершения цикла суммирования, определяет количество суммируемых членов ряда и может рассматриваться как показатель требуемой точности вычисления значения функции.
Учет рекуррентной зависимости членов ряда
Выполнение итерации алгоритма суммирования включает вычисление значения очередного члена числового ряда. Данные вычисления могут оказаться достаточно трудоемкими. Так, например, общий член ряда при разложении функции sin(x) имеет вид:
13 EMBED Equation.3 1415
и для его вычисления необходим подсчет значений степенной функции и функции факториала. С другой стороны, во многих случаях суммирования рядов соседние пары элементов имеют общую вычислительную часть и, как результат, каждый последующий член ряда может быть получен быстрее и с меньшими затратами при учете имеющихся значений предыдущих элементов. Так, для функции sin(x) подобная рекуррентная формула имеет вид:
13 EMBED Equation.3 1415
При наличии подобного рекуррентного соотношения между членами ряда генерация суммы числового ряда может быть обеспечена при использовании только начального члена ряда a0 и рекуррентного множителя q. Уточненный вариант алгоритма (с учетом рекуррентности) имеет вид:
13 SHAPE \* MERGEFORMAT 1415
где FirstMember – начальный член ряда a, Member – очередной вычисляемый член ряда ai, RecurrentMultiplier – рекуррентный множитель , Sum – искомая частичная сумма.
Учет погрешности вычисления суммы членов ряда
В рассмотренном выше решении предполагается, что нам известно количество членов ряда, сумму которых мы вычисляем. Но возникает вопрос: можно ли подобрать такое число N, которое для любой функции позволяло бы получить минимальную погрешность (размер остаточного члена ряда)?
В данном случае лучше пойти от обратного. Для любой функции можно выделить как раз приемлемый размер остаточного члена ряда, и от этой величины будет зависеть количество суммируемых членов ряда (т.е. количество итераций нашего алгоритма – n).
Каждый новый член ряда вычисляется по формуле: 13 EMBED Equation.3 1415, т.е. в числителе этой дроби находится степенная функция, в знаменателе – факториал. При увеличении значения n степенная функция будет расти медленнее, чем факториал, следовательно, значение дроби будет уменьшаться, т.е. ai будет меньше ai-1. Мы можем заранее определить некоторое достаточно маленькое число 13 QUOTE 1415 и каждый новый член ряда сравнивать с 13 QUOTE 1415: если очередной элемент меньше 13 QUOTE 1415, вычисления заканчиваются (следующие элементы будут еще меньше, следовательно, их значениями можно пренебречь). Число 13 QUOTE 1415 будем называть погрешностью.
Тогда уточненный вариант алгоритма (с учетом рекуррентности и погрешности) будет иметь вид:
13 SHAPE \* MERGEFORMAT 1415
Индивидуальные задания
Задача 1. Расчет конечных сумм.
Составить программу расчета конечной суммы. Число членов суммы вводится с клавиатуры. Получить 3 значения при различных N. Результат сравнить с контрольным значением. Вычислить погрешность.

Вид суммы
Контрольное значение


·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
· 1415
13 EMBED Equation.3 1415

12
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

13
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

14
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

15
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

Задача 2. Разложение функций ряд Маклорена (Тейлора).
Составить программу, вычисляющую f(x) в виде бесконечного ряда с заданной точностью
·=10-3 (10-6, 10-9). Значение x вводится с клавиатуры. Проверить вычислении с помощью системной функции. Подсчитать количество итераций, потребовавшихся для получения результата с заданной точностью.

Функция f(x)
Разложение в ряд

1
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

2
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

3
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415

4
13 EMBED Equation.3
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·–
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·
·ion.3 1415

15
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415
13 EMBED Equation.3 1415


Тема: Арифметические задачи
Цели: закрепление навыков программирования циклических алгоритмов; получение практических навыков решения задач, основанных на свойствах чисел.
Краткая теоретическая справка
Свойства делимости
Такие арифметические процедуры как сокращение дробей, разложение числа на простые множители, определение наименьшего общего кратного, наибольшего общего делителя, поиск простых чисел и т.д. основаны на проверке свойств делимости чисел.
Для проверке свойств делимости чисел используется операция получения остатка от деления "%", число делится на другое число, если остаток от деления равен 0:
if(a % k != 0) //если a не делится на k
if(a % k) //то же самое (выражение в скобках не ноль,
значит истина)
Свойства делимости определены только для целых чисел, которым в языке С соответствуют типы данных int, long, char и short.
Работа с цифрами числа
Отдельные цифры числа можно получить, используя правила определения значения числа из цифр: вес следующей цифры десятичного числа в 10 раз больше текущей. Тогда остаток от деления числа n на 10 можно интерпретировать как значение младшей цифры числа, частное от деления на 10 как отбрасывание младшей цифры числа, из чего составляется простой цикл получения цифр числа в обратном порядке. Выражение s*10 "дописывает" к числу 0 справа, а s = s*10 + k добавляет к нему очередную цифру k:
Выражение
Интерпретация

n % 10
младшая цифра числа n

n=n/10
отбросить младшую цифру n

for (i=0; n!=0; i++, n/=10) { ... n%10... }
получить цифры числа в обратном порядке

s = s*10 + k
добавить цифру k к значению числа s справа

Типовые задачи
Перестановка цифр числа Дано целое число. Переставив его цифры в обратном порядке получить новое число. Например, 1234  4321.
Нам требуется последовательно получать цифры заданного числа, добавляя их к новому. Цифры числа получаются циклом деления числа на 10 (figure=x%10) с последующим добавлением их к новому числу (y = y*10+figure).
long OldNumber, NewNumber;
char figure;

//получить значение OldNumber:


NewNumber = 0;
while(OldNumber){ //пока есть еще цифры
figure = OldNumber%10; //получить последнюю цифру
NewNumber = NewNumber*10 + figure; //добавить цифру к NewNumber
OldNumber /= 10; //отбросить последнюю цифру
}

Простые вопросы по решению задачи:
Как подсчитать количество цифр числа?
Будет ли данный алгоритм работать, если OldNumber<0?
Поиск делителей числа Найти все делители числа a (0У числа a гарантированно есть два делителя: 1 и a. Попробуем оценить остальные: самым маленьким из оставшихся является число 2, если 2 – делитель, то частное будет равно a/2, следовательно, a/2 – самый большой возможный делитель. Идея решения проста: перебрать все числа от 2 до a/2, проверить каждое – если нашли делитель, то распечатать.
int a; //исследуемое число
int divisor; //значение делителя

cout << "Введите число: ";
cin>>a;

cout<<"Делители числа "<
//перебираем возможные делители:
for(divisor=2; divisor<=a/2; divisor++)
//если очередное число – делитель, печатаем его:
if(a%divisor == 0) cout<
cout<
Кстати, для представления переменных задачи выбран тип int – целый, диапазон значений типа включает заданный в задаче диапазон для числа a.
Простые вопросы по решению задачи:
Как подсчитать количество делителей числа?
Как проверить, является число простым (делится только на 1 и на себя)?
Разложение на можетели Разложить заданное число на простые множители.
Простые множители числа – простые числа, произведение которых дает заданное число, например: 72 = 2*2*2*3*3.

int val; // исследуемое число
int m; // значение множителя
char n = 0; // количество множителей

for(m=2; m<=val/2; m++){
if(val%m == 0){ // если нашли множитель
cout <<(n ? "*" : "")<< m; // печатаем его
val /= m; // уменьшаем val
m--; // для проверки нескольких одинаковых делителей
n++; // увеличиваем количество найденных делителей
}
}
// последний множитель:
cout<<(n++ ? "*" : "")<< val;

Для решения задачи требуется организовать некоторый повторяющийся процесс, на каждом шаге которого получается очередной множитель. Процесс должен продолжаться пока очередной возможный множитель меньше или равен val/2.
Простой множитель – минимальное простое число, на которое исходное делится без остатка.
Если очередной множитель найден (m), то на следующем шаге цикла его нужно "исключить" из раскладываемого числа, то есть использовать вместо исходного числа val частное от деления его на m (val = val/m).
Число может иметь несколько одинаковых простых множителей, поэтому после того, как множитель найден, нужно вернуться к его проверке еще раз.
Простые вопросы по решению задачи:
Измените решение так, чтобы переменная val могла принимать отрицательные значения.
Поиск простых чисел Найти все простые числа, не превышающие заданное. Простое число – число, которое делится нацело только на 1 и на само себя.
Сущность решения состоит в проверке всех чисел от 2 до заданного числа (val) и выводе их на печать, если они простые. Простое число не делится ни на одно число в диапазоне от 2 до val/2 включительно.
int i; // Номер очередного простого числа
int m; // Очередное проверяемое число
int simple; // Признак, что число простое
int k; // Очередной возможный делитель числа

for(i=0, m=2; m // Проверяем, является ли число простым:
for(simple=1; k=2; k<=m/2; k++)
if(m%k == 0){
simple=0;
break;
}
if(simple) cout<}

Замечание: для проверки числа на то, что оно простое, мы проверяли, что оно не делится ни на одно число в диапазоне от 2 до m/2 включительно. Можно также использовать другую проверку – что оно не делится ни на одно простое число от 2 до m/2 включительно. Для этого можно накапливать предыдущими шагами цикла простые числа например в массиве, и проверять очередное число на делимость этих чисел.
Простые вопросы по решению задачи:
Как найти произведение простых чисел, не превышающих заданное?
Как найти количество простых чисел, не превышающих заданное?
Как найти n простых чисел?
Наибольший общий делитель (НОД), НОК Найти наибольший общий делитель двух чисел.
Наибольший общий делитель (НОД) двух чисел – наибольшее число, на которое делятся без остатка оба числа. Поиск НОД можно производить классическим способом поиска чего-либо – простым перебором возможных значений. Но это непроизводительный метод. Воспользуемся алгоритмом Евклида для поиска НОД.
Евклид, самый влиятельный математик всех времен и народов, описал его в одной из книг его знаменитых «Начал» (книги (13 томов), наибольшее число раз изданной и более всего изучавшейся в истории Западного мира (после Библии, конечно)). Алгоритм был известен в древнегреческой математике, по крайней мере, за век до Евклида под названием «антифайресис» – «последовательное взаимное вычитание».
Идея поиска НОД(a, b) состоит в следующем:
Если числа a и b равны, то НОД(a, b)=a,
Если a>b, то НОД(a, b)= НОД(a-b, b), иначе НОД(a, b)= НОД(b, b-a) (т.е. "заменить большее число на разность")
Пример: НОД(32, 18) = НОД(14, 18) = НОД(14, 4) = НОД(10, 4) = НОД(6, 4)= НОД(2, 4) = НОД(2, 2)= 2
while(a!=b){
if(a>b) a -= b;
else b -= a;
}
// a - НОД
Чаще используется другая интерпретация с использованием остатков от деления:
Пусть даны два числа a и b ; a і 0, b і 0, считаем, что a > b. Алгоритм:
Если b = 0 , то НОД=а
Заменить а на b, b на остаток от деления а на b
Пример: НОД(32, 18) = НОД(18, 14) = НОД(4, 2) = НОД(2, 0)
Формулировка чуть длиннее, но результат получили быстрее.
while(a!=0 && b!=0){
if(a>=b) a=a%b;
else b=b%a;
}
// a+b - НОД
Часто требуется решить похожую задачу – найти наименьшее общее кратное чисел (НОК) – наименьшее число, которое делится на оба числа. Для поиска НОК используется соотношение:
НОК(a , b) = a*b / НОД(a, b).
Простые вопросы по решению задачи:
Как найти НОД нескольких чисел? (замечание: НОД(a,b,c)=НОД(НОД(a,b),c))
Как найти наименьшее общее кратное 5 чисел?
Поиск чисел с заданными свойствами Найти все трехзначные числа, равные кубу суммы своих цифр. Например 512 = (5+1+2)3=83
Все подобные задачи решаются единообразно. Перебираются все числа в диапазоне поиска, в тело цикла вписываются проверки всех ограничений, которые видны в условии задачи. Все, что " просеивается" через эти ограничения, и является решением задачи.
int a,n,k,s;

// диапазон проверки – трехзначные число от 100 до 999:
for(a=100; a<1000; a++){
//поиск суммы цифр:
for(n=a, s=0; n!=0; n=n/10){
k=n%10;
s=s+k;
}
//проверка условия задачи:
if(a==s*s*s) printf("%d^3=%d\n",s,a);
}
Простые вопросы по решению задачи:
Как подсчитать количество таких чисел?
Как найти числа, равные сумме кубов своих цифр?
Индивидуальные задания
Задача 1.

Формулировка задачи

1
Вводятся натуральное число n и цифра c. Сколько цифр введенного числа равны введенной цифре.

2
Найти наименьшее общее кратное n чисел. Количество чисел выбирается пользователем. Числа вводятся последовательно с клавиатуры.

3
Найти наибольший общий делитель n чисел. Количество чисел выбирается пользователем. Числа вводятся последовательно с клавиатуры.

4
Для натуральных чисел, не превосходящих заданного k, проверить признак делимости на 9 (сумма цифр числа, делящегося на 9, также делится на 9). Распечатать m последних таких чисел (m<
5
Найти все натуральные числа, не превосходящие заданного m, сумма цифр в десятичном представлении каждого из которых равна заданному k.

6
Найти первые m более чем 2-разрядных чисел-палиндромов, то есть чисел, десятичная запись которых читается одинаково в прямом и обратном направлениях, например: 353, 234432.

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

8
Найти все числа, большие 10 и меньшие 1000, равные сумме k-х степеней своих цифр, где k – разрядность числа.

9
Найти все трехзначные числа кратные 7, сумма цифр которых тоже кратна 7.

10
Утверждается, что разность любого натурального числа и суммы его цифр кратна 9. Проверить этот факт для всех чисел, лежащих между заданными m и n.

11
По введенному целому числу M распечатать все трехзначные десятичные числа, сумма цифр которых равна M. Подсчитать количество таких чисел или сообщить о том, что их нет.

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

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

14
Составьте программу вычисления суммы всех трехзначных чисел, кратных m.

15
Для заданного М вывести все: а) квадраты натуральных чисел, не превосходящие М; б) факториалы натуральных чисел, не превосходящие М; в) целые степени данного числа К, не превосходящие М.

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

17
Дано натуральное число N. Найти: а) сумму цифр числа; б) количество цифр в десятичной записи числа; в) количество цифр в десятичной записи числа, равных 1.

18
Дано натуральное число n. Отбросить в нем все цифры, стоящие правее самой правой единицы либо оставить число без изменений, если единицы в нем нет).

19
Дано натуральное число x. Просуммировать цифры в нем справа до тех пор, пока не будут встречены 2 нуля подряд.

20
Вводится натуральное число n. Определить, является ли оно степенью двойки.

21
Найти четырехзначное число, которое при делении на 133 дает в остатке 125, а при делении на 134 дает в остатке 111.

22
Дано целое число N (N > 1). Вывести наименьшее целое K, при котором выполняется неравенство 3K > N, и само значение 3K.

23
Определить, является ли заданное число совершенным, т.е. равным сумме всех своих (положительных) делителей, кроме самого этого числа (например, число 6 совершенно: 6=1+2+3). Найти все совершенные числа в диапазоне [a, b].

24
В каких двузначных числах удвоенная сумма цифр равна их произведению? Ответ: 36,44,63.

25
Найти двузначное число, равное утроенному произведению его цифр. Ответ: 15,24.

26
Найти все двузначные числа, сумма квадратов цифр которых делится на 17. Ответ: 14,28,29,35,41,53,67,76,82,92.

27
Найти все трехзначные числа, которые можно представить разностью между квадратом числа, образованного первыми двумя цифрами и квадратом третьей цифры.  Ответ: 100,147.

28
Найти все трехзначные числа, средняя цифра которых равна сумме первой и второй цифр.

29
Проверить, содержит ли квадрат данного натурального числа n цифру 3 в своей записи. Найти все двузначные такие числа.

30
Дано число n. Найти количество чисел в интервале от 1 до n, делящихся на сумму своих цифр.

Задача 2.

Формулировка задачи

1
Дано число N. Найти количество чисел в интервале от 1 до N, взаимно простых с N.

2
Можно ли заданное натуральное число М представить в виде суммы квадратов двух натуральных чисел? Написать программу решения этой задачи.

3
Дано натуральное число N. Найти натуральное число в интервале от 1 до N с максимальной суммой делителей (включая единицу, но не включая себя).

4
Дано натуральное число N. Найти количество натуральных чисел в интервале от 1 до N, у которых сумма цифр – простое число (единицу не считать простым числом).

5
n-значное натуральное число является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, совпадает с самим числом. Даны числа a и b. Найти количество чисел Армстронга в диапазоне [a; b].

6
Найти все двузначные числа, сумма цифр которых не меняется при умножении числа на 2, 3, 4, 5, 6, 7, 8, 9.

7
Найти все трехзначные числа, квадраты которых оканчиваются тремя одинаковыми цифрами, отличными от нуля.

8
Выяснить, сколько существует четырехзначных чисел, кратных N (N<5000), две средние цифры которых – k и m (k – количество сотен, m – десятков).

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

10
Найти все четырехзначные числа, у которых сумма первых двух цифр равна сумме двух последних.

11
Представить в записи 42*4* вместо звездочек такие цифры, чтобы полученное пятизначное число делилось на 72.

12
Найти все "пифагоровы" тройки натуральных чисел, наибольшее из которых не превосходит N (Тройка натуральных чисел называется пифагоровой, если сумма квадратов двух из них равна квадрату третьего).

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

14
Один купец купил коров и быков на сумму A талеров. Коровы по B талеров, а быки по C талеров. Сколько коров и сколько быков купил купец? (Найти все возможные варианты).

15
Для какой суммы цифр N-значного числа существует максимальное количество N-значных чисел с этой суммой цифр?

16
Число делится на 11, если разность между суммой цифр, стоящих на нечетных местах, и суммой цифр, стоящих на четных местах, кратна 11. Проверить этот признак для всех натуральных чисел, не превосходящих заданного m, и вывести числа, кратные 11.

17
Составить алгоритм решения ребуса РАДАР=(Р+А+Д)^4 (различные буквы означают различные цифры, старшая – не 0 ).

18
Перевести заданное число в систему римского счета. Римские цифры обозначаются следующими латинскими буквами: 1 – I, 5 – V, 10 – X, 50 – L, 100 – C, 500 – D, 1000 – M, 5000 - 13 EMBED Equation.3 1415, 10 000 - 13 EMBED Equation.3 1415,

19
Перевести заданное целое число, заданное в римской системе счета, в десятичную систему счисления. Римские цифры обозначаются следующими латинскими буквами: 1 – I, 5 – V, 10 – X, 50 – L, 100 – C, 500 – D, 1000 – M, 5000 - 13 EMBED Equation.3 1415, 10 000 - 13 EMBED Equation.3 1415,

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

21
Натуральные числа А и В называются дружественными, если сумма всех делителей числа А (за исключением самого А) равна числу В и наоборот, например, 220 и 284. Проверить, являются ли два данных числа дружественными.

22
Найти все трехзначные числа, представимые в виде сумм факториалов своих цифр. Ответ: 145.

23
Даны целые числа X и Y. Вычислить XY.

24
Даны целые числа X и Y. Вычислить X2^Y (2^Y означает 2Y).

25
Решить арифметический ребус КИО*ИО = ТОКИО. Вместо каждой буквы необходимо поставить некоторую цифру, причем одинаковые буквы означают одинаковые цифры, а различные буквы – различные цифры.

26
Составить алгоритм решения ребуса МУХА+МУХА+МУХА=СЛОН (различные буквы означают различные цифры, старшая – не 0 ).

27
Составить алгоритм решения ребуса ДРУГ-ГУРД=2727 (различные буквы означают различные цифры, старшая – не 0).

28
Составить алгоритм решения ребуса КОТ+КОТ=ТОК (различные буквы означают различные цифры, старшая – не 0).

29
Составить алгоритм решения ребуса АВС+СВА=DAD (различные буквы означают различные цифры, старшая – не 0).

30
Составить алгоритм решения ребуса ABBA=REAR-RAER (различные буквы означают различные цифры, старшая – не 0).


Тема: Работа с массивами
Цели: получение навыков обработки массивов, закрепление навыков программирования циклических алгоритмов.
Краткая теоретическая справка
Типовые задачи
Написать программу, которая для целочисленного массива из 10 элементов определяет, сколько положительных элементов располагается между его максимальным и минимальным элементами
Алгоритм в общем виде:
Определить, где в массиве расположены его минимальный и максимальный элементы, то есть найти их индексы.
Просмотреть все элементы, расположенные между ними. Если элемент массива больше нуля, увеличить счетчик элементов на единицу.
Если рассмотреть тестовый пример, можно наглядно представить себе алгоритм решения задачи:
0
1
2
3
4
5
6
7
8
9

6
-8
15
9
-1
3
5
-10
12
2



max
+

+
+
min



Порядок расположения элементов в массиве заранее неизвестен, и сначала может следовать как максимальный, так и минимальный элемент. Поэтому прежде, чем искать сумму положительных элементов, требуется определить порядок этих индексов.
Уточненный алгоритм:
Определить, где в массиве расположены его минимальный и максимальный элементы:
задать начальные значения для индексов максимального и минимального элементов
просмотреть массив, поочередно сравнивая каждый его элемент с ранее найденными минимумом и максимумом. Если очередной элемент больше максимума или меньше минимума, изменить значение соответствующего индекса
Определить границы просмотра массива для поиска положительных элементов, находящихся между максимальным и минимальным элементами:
если максимум расположен в массиве раньше, чем минимум, принять левую границу просмотра равной индексу максимума, иначе – индексу минимума
если максимум расположен в массиве раньше, чем минимум, принять правую границу просмотра равной индексу минимума, иначе – индексу максимума
Обнулить счетчик положительных элементов. Просмотреть массив в указанном диапазоне. Если очередной элемент массива больше нуля, увеличить счетчик элементов на единицу.
#include
void main(){
const int n = 10;
int a[n];
int i, imax, imin, count;

cout << "Введите элементы массива:\n";
for(i 0; i cin >> a[i];

for(i = imax = imin = 0; i if(a[i] > s[imax]) imax = i;
if(a[i] < s[imax]) imin = i;
}
cout<<"\nmax = "<}
После нахождения каждой величины вставлена отладочная печать. Это один из самых простых, но вполне эффективных способов отладки.
Тестовых примеров для этой задачи должно быть по крайней мере три для случаев, когда:
a[min] расположен левее a[max]
a[min] расположен правее a[max]
a[min] и a[max] совпадают
Индивидуальные задания
Задача 1. В одномерном массиве, состоящем из n вещественных элементов, вычислить:

Формулировка задачи

1
Сумму отрицательных элементов массива

2
Сумму положительных элементов массива

3
Произведение элементов массива с четными номерами

4
Сумму элементов массива с нечетными номерами

5
Максимальный элемент массива и количество элементов, равных максимальному

6
Минимальный элемент массива и количество элементов, равных минимальному

7
Номер максимального элемента массива и количество элементов, равных ему

8
Номер минимального элемента массива и количество элементов, равных ему

9
Максимальный по модулю элемент массива

10
Минимальный по модулю элемент массива

11
Номер минимального по модулю элемента массива

12
Номер максимального по модулю элемента массива

13
Количество элементов массива, значение которых лежит в диапазоне от A до B

14
Количество элементов массива, равных 0

15
Количество элементов массива, больших C

16
Количество отрицательных элементов массива

17
Количество положительных элементов массива

18
Количество элементов массива, меньших C

19
Произведение отрицательных элементов массива

20
Произведение положительных элементов массива

21
Количество четных элементов массива

22
Количество нечетных положительных элементов массива

23
Номер первого положительного элемента массива

24
Номер последнего положительного элемента массива

25
Произведение элементов массива, кратных 7

26
Сумму элементов массива, кратных 9

27
Произведение элементов массива, значение которых лежит в диапазоне от A до B

28
Сумму элементов массива, значение которых меньше A или больше B

29
Количество элементов массива, значение которых меньше A или больше B

30
Номер первого элемента, значение которого лежит в диапазоне от A до B

Задача 2. В одномерном массиве, состоящем из n вещественных элементов, вычислить (задачу можно рассматривать как продолжение предыдущей):

Формулировка задачи

1
Произведение элементов массива, расположенных между максимальным и минимальным элементами

2
Произведение элементов массива, расположенных между максимальным по модулю и минимальным по модулю элементами

3
Сумму элементов массива, расположенных между первым и последним нулевыми элементами

4
Сумму элементов массива, расположенных между первым и последним отрицательными элементами

5
Сумму элементов массива, расположенных до последнего положительного элемента

6
Сумму элементов массива, расположенных между первым и последним положительными элементами

7
Сумму элементов массива, расположенных между первым и вторым нулевыми элементами

8
Сумму элементов массива, расположенных между первым и вторым отрицательными элементами

9
Сумму элементов массива, расположенных между первым и вторым положительными элементами

10
Сумму модулей элементов массива, расположенных после первого элемента, равного нулю

11
Сумму модулей элементов массива, расположенных после первого отрицательного элемента

12
Сумму модулей элементов массива, расположенных после первого положительного элемента

13
Сумму элементов массива, расположенных после максимального элемента

14
Сумму элементов массива, расположенных после минимального элемента

15
Произведение элементов массива, расположенных после максимального по модулю элемента

16
Сумму элементов массива, расположенных после минимального по модулю элемента

17
Сумму элементов массива, расположенных после последнего элемента, равного нулю

18
Сумму целых частей элементов массива, расположенных после последнего отрицательного элемента

19
Сумму положительных элементов массива, расположенных до максимального элемента

20
Сумму элементов массива, расположенных до минимального элемента

21
Произведение целых частей элементов массива, между первым и последним отрицательными элементами

22
Произведение целых частей элементов массива, между первым и последним элементами, равными C

23
Произведение четных элементов массива, расположенных между первым и последним нечетными элементами

24
Сумму целых частей нечетных элементов массива, расположенных между первым и последним нечетными элементами

25
Сумму модулей четных элементов массива, расположенных между первым и последним нулевыми элементами

26
Среднее арифметическое значение элементов массива, расположенных после минимального по модулю элемента

27
Сумму элементов массива, расположенных после последнего элемента, равного первому элементу массива

28
Произведение элементов массива, расположенных до первого элемента, равного последнему элементу массива

29
Сумму элементов массива, расположенных после последнего элемента, равного по модулю первому элементу массива

30
Произведение элементов массива, расположенных после первого элемента, равного по модулю последнему элементу массива

Задача 3. В одномерном массиве, состоящем из n вещественных элементов, выполнить преобразования:

Формулировка задачи

1
Преобразовать массив таким образом, чтобы сначала располагались положительные, затем отрицательные элементы (элементы, равные 0, считать положительными)

2
Сжать массив, удалив из него все элементы, модуль которых не превышает 1. Освободившиеся в конце массива элементы заполнить нулями

3
Сжать массив, удалив из него все элементы, модуль которых находится в интервале [a, b]. Освободившиеся в конце массива элементы заполнить нулями

4
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные нулю, затем остальные

5
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в нечетных позициях, а во второй половине – элементы, стоявшие в четных позициях

6
Преобразовать массив таким образом, чтобы сначала располагались все элементы, модуль которых не превышает 1, затем остальные

7
Преобразовать массив таким образом, чтобы элементы, равные нулю, располагались после всех остальных

8
Преобразовать массив таким образом, чтобы в первой его половине располагались элементы, стоявшие в четных позициях, а во второй половине – элементы, стоявшие в нечетных позициях

9
Сжать массив, удалив из него все элементы, значение которых находится в интервале [a, b]. Освободившиеся в конце массива элементы заполнить нулями

10
Преобразовать массив таким образом, чтобы сначала располагались все элементы, целая часть которых лежит в интервале [a, b], затем остальные

11
Упорядочить элементы массива по убыванию модулей элементов

12
Преобразовать массив таким образом, чтобы сначала располагались отрицательные, затем положительные элементы (элементы, равные 0, считать положительными)

13
Заменить все отрицательные элементы массива их квадратами и упорядочит элементы массива по убыванию

14
Упорядочить элементы массива по возрастанию модулей элементов

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

16
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от максимального не более чем на 20%, затем остальные

17
Упорядочить элементы массива, расположенные до максимального, по возрастанию, а после максимального – по убыванию

18
Упорядочить по возрастанию отдельно элементы, стоящие на четных местах, и элементы, стоящие на нечетных местах

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

20
Преобразовать массив таким образом, чтобы сначала располагались все элементы, отличающиеся от среднего арифметического не более чем на 25%, затем остальные

21
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные максимальному, затем все остальные

22
Сжать массив, удалив из него все элементы, расположенные между максимальным и минимальным элементами. Освободившиеся в конце массива элементы заполнить нулями

23
Упорядочить по возрастанию элементы, стоящие на четных местах, и упорядочить по убыванию элементы, стоящие на нечетных местах

24
Упорядочить по убыванию элементы массива расположенные между максимальным и минимальным элементами

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

26
Преобразовать массив таким образом, чтобы сначала располагались все элементы, равные C, затем все остальные

27
Упорядочить по возрастанию положительные элементы массива

28
Сжать массив, удалив из него все элементы, значение которых находится вне интервала [a, b]. Освободившиеся в конце массива элементы заполнить нулями

29
Преобразовать массив таким образом, чтобы сначала располагались все элементы, меньшие среднего арифметического, затем большие среднего арифметического, в порядке их следования

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


Тема: Работа с двумерными массивами
Цели: получение навыков обработки двумерных массивов, закрепление навыков программирования циклических алгоритмов.
Краткая теоретическая справка
Обход матрицы
Под обходом матрицы понимается перечисление всех ее элементов. На следующем рисунке представлены несколько способов обхода элементов матрицы:
Примеры вариантов обхода матрицы: а - обход по строкам, б - обход по столбцам, в - "обход змейкой", г - обход по спирали, д - обход "змейкой по диагоналям", е - "лабиринт"
Для каждого из представленных способов, кроме последнего, который выполняется по правилу выхода из лабиринта, можно предложить закон, связывающий индексы между собой.
Самые простые обходы: по строкам и столбцам.
Обход по строкам реализуется вложением циклов:
for(i=0; i for(j=0; j //обработка элемента a[i][j]
При обходе по столбцам меняются местами циклы по строкам и столбцам:
for(j=0; j for(i=0; i //обработка элемента a[i][j]
В прочих случаях закономерности формирования индексов приходится исследовать, чтобы предложить соответствующий вариант реализации.
Рассмотрим закономерность формирования индексов диагоналей квадратной матрицы.
Определив закономерности, можно построить цикл прохода по диагонали матрицы. Например, для диагонали, проходящей через элемент [р][к] параллельно главной, получаем:
13 SHAPE \* MERGEFORMAT 1415

if p-k>0 then s:=n-p+k else s:=n-k+p;
for i;=1 to s do <обработка элемента a[i,i-p+k]>
Индивидуальные задания
Задача 1

Формулировка задачи

1
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти среднее арифметическое элементов каждого из четных столбцов этой матрицы.

2
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти среднее арифметическое элементов каждого из нечетных столбцов этой матрицы.

3
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти среднее арифметическое элементов каждой из строк этой матрицы.

4
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти среднее арифметическое элементов каждой из четных строк этой матрицы.

5
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти среднее арифметическое элементов каждой из нечетных строк этой матрицы.

6
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти среднее арифметическое из всех отрицательных элементов этой матрицы.

7
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти среднее арифметическое из всех положительных элементов этой матрицы.

8
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти характеристику каждой ее строки (сумму положительных четных элементов в каждой строке).

9
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти характеристику каждого ее столбца (сумму модулей отрицательных нечетных элементов в каждом столбце).

10
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти сумму и произведение всех ее положительных элементов.

11
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти сумму и произведение всех ее отрицательных элементов.

12
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти сумму всех ее положительных и произведение всех ее отрицательных элементов.

13
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти сумму всех ее элементов и заменить ею все диагональные элементы этой матрицы.

14
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти произведение всех ее элементов и заменить им все диагональные элементы этой матрицы.

15
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти минимальное из чисел, встречающееся в данной матрице более одного раза.

16
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти максимальное из чисел, встречающееся в данной матрице более одного раза.

17
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти сумму наибольших элементов каждой строки матрицы и их координаты.

18
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти произведение наибольших элементов каждой строки матрицы и их координаты.

19
Задана квадратная матрица A размером NxN (N<=10), состоящая из действительных элементов. Найти сумму наибольших элементов каждого столбца матрицы и их координаты.

20
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти, сколько положительных элементов содержит данная матрица в каждой строке.

21
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти, сколько отрицательных элементов содержит данная матрица в каждом столбце.

22
Получить новую матрицу путем деления всех элементов данной матрицы на ее наибольший по модулю элемент.

23
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Заменить нулями все ее элементы, расположенные на главной диагонали и выше нее.

24
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Сформировать вектор из суммы элементов строк и найти их среднее арифметическое.

25
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Сформировать вектор из произведения элементов столбцов и найти их среднее арифметическое.

26
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Сформировать вектор из наименьших значений элементов строк и найти их среднее арифметическое.

27
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Сформировать вектор из разностей наибольших и наименьших значений элементов строк.

28
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти сумму элементов строки, в которой расположен наименьший элемент.

29
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Найти сумму элементов столбца, в котором расположен наименьший элемент.

30
Задана квадратная матрица A размером NxN (N<=10), состоящая из целых чисел. Поменять местами строку, содержащую максимальный элемент, со строкой, содержащей минимальный элемент.

Задача 2. Решить задачу с использованием статического двумерного массива. Предполагаемая размерность массива (n , в некоторых случаях m) задается с помощью константы.

Формулировка задачи

1
Составьте программу обмена местами максимального и минимального элементов на побочной диагонали матрицы B[n][n].

2
Составьте программу вычисления среднего арифметического каждого столбца матрицы B[n][n] и запишите данные значения в главную диагональ данной матрицы.

3
Составьте программу вычисления среднего арифметического каждого столбца под главной диагональю (диагональ включать) матрицы B[n][n] и запишите данные значения в последний столбец данной матрицы.

4
В данном числовом массиве A[n][m] найти номер столбца, все элементы которого одинаковы.

5
В данном числовом массиве A[n][n] найти максимальный диагональный элемент и вывести всю строку, в которой он расположен.

6
В данном числовом массиве A[n][n] найти максимальный диагональный элемент и вывести весь столбец, в котором он расположен.

7
В данном массиве A[n][n] поменять местами строки и столбцы.

8
В данном массиве A[n][n] поменять местами две строки с номерами р и q.

9
Преобразовать двумерный массив A[n][m] в одномерный массив B[n*m], соединив все строки в одну.

10
Для данного целого положительного N создать матрицу A[n][n], в которой элементы, стоящие по диагонали, равны единице, а все остальные элементы – нулевые.

11
Для данного целого положительного N сформировать матрицу A[n][n], в которой элементы диагонали равны номеру строки, а все остальные элементы – нулевые.

12
В матрице A[n][m] поэлементно вычесть последнюю строку из всех строк, кроме последней.

13
Матрицу A[n][n] сформировать по следующему принципу: по диагонали расположены единицы, выше диагонали – нули, а элементы, расположенные ниже диагонали, равны сумме соответствующих индексов.

14
Задана матрица В[3][5]. Получить матрицу V путем удаления из В строки и столбца, в которых содержится минимальный элемент.

15
Дана матрица A[m][n]. Дополнить ее (m+1)-й строкой и (n+1)-м столбцом (создать новый массив B[m+1][n+1]), в которых записать суммы элементов соответствующих строк или столбцов исходного массива А.

16
Создать вектор М, содержащий количество отрицательных элементов каждого столбца матрицы z[n][m].

17
Имеется матрица A[m][n]. Найти максимальный из всех минимальных элементов строк. Вывести номер строки, в которой расположено выбранное число.

18
Найти среднее арифметическое элементов матрицы Х[n][m] и сформировать вектор У из элементов, больших среднего арифметического.

19
Сформировать одномерный массив из элементов, стоящих над главной диагональю матрицы K[m][m]. Найти сумму элементов этого массива.

20
Дана матрица X[m][m]. Сформировать вектор из элементов, расположенных по спирали. 13 EMBED PBrush \s \* LOWER 1415

21
Дано число k (0 < k < 11) и матрица размера 4 x 10. Найти сумму и произведение элементов k-го столбца данной матрицы.

22
Дана квадратная матрица размерности N*N, где N –нечетное число. Элементами матрицы являются вещественные числа. Требуется вычислить сумму ее элементов из заштрихованной области: 13 SHAPE \* MERGEFORMAT 1415

23
Дана квадратная матрица размерности N*N, где N –нечетное число. Элементами матрицы являются вещественные числа. Требуется вычислить сумму ее элементов из заштрихованной области: 13 SHAPE \* MERGEFORMAT 1415

24
Дана квадратная матрица размерности N*N, где N –нечетное число. Элементами матрицы являются вещественные числа. Требуется вычислить сумму ее элементов из заштрихованной области: 13 SHAPE \* MERGEFORMAT 1415

25
Дана квадратная матрица размерности N*N, где N –нечетное число. Элементами матрицы являются вещественные числа. Требуется вычислить сумму ее элементов из заштрихованной области: 13 SHAPE \* MERGEFORMAT 1415

26
Дана квадратная матрица порядка M. Зеркально отразить ее элементы относительно горизонтальной оси симметрии.

27
Дана квадратная матрица порядка M. Зеркально отразить ее элементы относительно вертикальной оси симметрии.

28
Дана квадратная матрица порядка M. Зеркально отразить ее элементы относительно главной диагонали.

29
Дана квадратная матрица порядка M. Зеркально отразить ее элементы относительно побочной диагонали матрицы.

30
Написать программу, которая проверяет, является ли введенная с клавиатуры квадратная матрица размерности N*N «магическим» квадратом. Магическим квадратом называется матрица, у которой сумма чисел в каждом горизонтальном ряду, в каждом вертикальном ряду и по каждой из диагоналей одна и та же (см. приведенный рисунок).

2
9
4

13
8
12
1


7
5
3

2
11
7
14


6
1
8

3
10
6
15






16
5
9
4



Задача 3. (задача может быть решена после изучения темы "Указатели"). Решить задачу 2 с использованием динамического двумерного массива. Предполагаемая размерность массива n (в некоторых случаях m) задается пользователем во время выполнения программы.

Тема: Работа с функциями
Цели: получение навыков программирования задач с использованием функций.
Краткая теоретическая справка
Функция – это набор объявлений и операторов, предназначенных для решения какой-либо конкретной задачи.
Объявление функции (прототип, заголовок, сигнатура) задает ее имя, тип возвращаемого значения и список передаваемых параметров.
тип имя(список формальных параметров);
Определение функции содержит, кроме объявления, тело функции, представляющее собой последовательность операторов и описаний в фигурных скобках:
тип имя(список формальных параметров){
тело функции
}
Тип возвращаемого функцией значения может быть любым, кроме массива и функции (может быть указателем на массив или функцию). Если функция не должна возвращать значение, указывается тип void. Если тип возвращаемого значения не указан, то по умолчанию считается, что функция возвращает тип int.
Список параметров определяет величины, которые требуется передать в функцию при ее вызове. Для каждого параметра указываются его тип и имя (в прототипе имя можно не указывать, так как компилятором они игнорируются). Параметры, перечисленные в заголовке описания функции, называются формальными параметрами, или просто параметрами, а записанные в операторе вызова функции – фактическими параметрами, или аргументами.
Тип возвращаемого значения и типы параметров совместно определяют тип функции.
Функция возвращает значение оператором return, что позволяет вернуть только одно значение. Вернуть несколько значений после работы функции можно либо объединив эти значения в структуру, либо передавая указатели через список аргументов функции.
Для вызова функции нужно указать ее имя, за которым в круглых скобках через запятую перечисляются имена передаваемых аргументов:
имя(список фактических параметров);
Вызов функции может находиться в любом месте программы, где по синтаксису допустимо выражение того типа, который формирует функция. Если тип возвращаемого значения не void, она может входить в состав выражений или располагаться в правой части оператора присваивания.
double F(double x, int y); - объявление функции F
double F(double, int); - альтернативное объявление функции F

void main(){
double d=5.67, e;
int n=3;
F(3.14, 5); - вызов функции F
F(d, 2); - вызов функции F
e = F(d, n) + F(d, 2*n); - вызов функции F (в выражении)
}

double F(double s, int n){ - определение функции F
return pow(s, n) + 2*s;
}
Индивидуальные задания
Задача 1. Решить задачу с использованием функций.

Формулировка задачи

1
Даны действительные числа S, T. Получить
13 EMBED Equation.3 1415, где 13 EMBED Equation.3 1415.
Вычисление h() и max() оформить в виде функций.

2
Получить все числа Армстронга из указанного пользователем диапазона. Натуральное число из n цифр является числом Армстронга, если сумма его цифр, возведенных в n-ю степень, равна самому числу ( например, 371 = 33 + 73 + 13 ). Для проверки, является ли целое N числом Армстронга определить функцию IsArmstrong(N).

3
Даны действительные числа a, b, c, d, e. Найти площадь заштрихованного четырехугольника, изображенного на рисунке:
13 SHAPE \* MERGEFORMAT 1415
Определить функцию вычисления площади треугольника по трем его сторонам.

4
Даны действительные числа x, y. Получить
13 EMBED Equation.3 1415, где 13 EMBED Equation.3 1415.
Вычисление q() оформить в виде функции.

5
Даны длины a, b, c сторон некоторого треугольника. Найти медианы треугольника. Возможно, для решения задачи пригодится функция вычисления площади треугольника по трем его сторонам (по формуле Герона). Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

6
Определить функцию Area(Ax,Ay,Bx,By,Cx,Cy), находящую площадь треугольника ABC по трем его сторонам (по формуле Герона). С помощью этой функции найти площади треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D. Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

7
Составить программу для вычисления значения выражения z=(x1+x2)/(y1+y2), где
x1, x2 – корни уравнения ax2+bx+c=0;
y1, y2 – корни уравнения dy2+ey+f=0.
Для вычисления корней уравнения использовать функцию.

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

9
Определить функцию Pi(eps) для вычисления числа ( с заданной точностью eps, воспользовавшись формулой Грегори:
13 EMBED Equation.2 1415
С помощью данной функции вычислить площадь круга с радиусом R для различных пяти значений eps.

10
Заданы три квадратных уравнения
.
Найти минимальное значение среди корней этих уравнений. Решение квадратного уравнения и поиск минимального значения двух чисел оформить в виде функции.

11
Определить функцию Heights(Ax,Ay,Bx,By,Cx,Cy,hA,hB,hC), находящую высоты hA, hB, hC треугольника ABC, проведенные соответственно из вершин A, B, C. С помощью этой процедуры найти высоты треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D.

12
Определить функцию Dist(Px,Py,Ax,Ay,Bx,By,D), находящую расстояние D от точки P до прямой AB по формуле D = 2SPAB / |AB|, где SPAB – площадь треугольника PAB. С помощью этой функции найти расстояния от точки P до прямых AB, AC, BC, если даны координаты точек P, A, B, C. Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

13
Определить функцию Perim(Ax,Ay,Bx,By,Cx,Cy), находящую периметр треугольника ABC по координатам его вершин (Ax, Ay, Bx, By, Cx, Cy – вещественные параметры). С помощью этой функции найти периметры треугольников ABC, ABD, ACD, если даны координаты точек A, B, C, D. Определить отдельную функцию для вычисления расстояния между двумя точками, заданными своими координатами.

14
Определить функцию Exp(x,eps) (параметры x, eps – вещественные, eps > 0), находящую приближенное значение функции exp(x): exp(x) = 1 + x + x2 / 2! + x3 / 3! + ... + xn / n! + ... . В сумме учитывать все слагаемые, большие eps. С помощью этой функции найти приближенное значение экспоненты для данного x при шести данных eps.

15
Определить функцию Sin(x,eps) вещественного типа (параметры x, eps – вещественные, eps > 0), находящую приближенное значение функции sin(x): sin(x) = x – x3 / 3! + x5 / 5! – ... + (–1)n x2n+1 / (2n+1)! + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение синуса для данного x при шести данных значениях eps.

16
Определить функцию Cos1(x,eps) вещественного типа (параметры x, eps – вещественные, eps > 0), находящую приближенное значение функции cos(x): cos(x) = 1 – x2 / 2! + x4 / 4! – ... + (–1)n x2n / (2n)! + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение косинуса для данного x при шести данных значениях eps.

17
Определить функцию Ln(x,n) вещественного типа (параметры x, eps – вещественные, |x| < 1, eps > 0), находящую приближенное значение функции ln(1+x): ln(1+x) = x – x2 / 2 + x3 / 3 – ... + (–1)n xn+1 / (n+1) + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение ln(1+x) для данного x при шести данных значениях eps.

18
Определить функцию Arctg(x,n)2 вещественного типа (параметры x, eps – вещественные, |x| < 1, eps > 0), находящую приближенное значение функции arctg(x): arctg(x) = x – x3 / 3 + x5 / 5 – ... + (–1)n x2n+1 / (2n+1) + ... В сумме учитывать все слагаемые, большие по модулю eps. С помощью этой функции найти приближенное значение arctg(x) для данного x при шести данных значениях eps.

19
Определить функцию Frac(a,b,p,q), преобразующую дробь a/b к несократимому виду p/q (все параметры функции целого типа). Знак результирующей дроби p/q приписывается числителю (т.е. q > 0). С помощью этой функции найти несократимые дроби, равные a/b + c/d, a/b + e/f, a/b + g/h (числа a, b, c, d, e, f, g, h даны). Организовать отдельную функцию для нахождения наибольшего общего делителя двух чисел.

20
Определить функцию SumDigit(N), находящую сумму цифр целого числа N. Используя эту функцию, найти сумму цифр чисел из диапазона [a, b].

21
Определить функцию SumDigit(N,S), находящую сумму цифр S целого числа N (N – входной, S – выходной параметр). Используя эту функцию, найти сумму цифр чисел из диапазона [a, b].

22
Используя функцию Min2(x,y) для нахождения минимального значения из двух вещественных чисел, определить функцию Min4(A,B,C,D), находящую минимальное из четырех вещественных чисел A, B, C и D. С помощью этой функции найти минимальные из наборов (A,B,C,D), (A,B,C,E), (A,C,D,E), если даны числа A, B, C, D, E.

23
Используя функцию Max2(x,y) для нахождения максимального значения из двух вещественных чисел, описать функцию Max4(A,B,C,D), находящую максимальное из четырех вещественных чисел A, B, C и D. С помощью этой функции найти максимальные из наборов (A,B,C,D), (A,B,C,E), (A,C,D,E), если даны числа A, B, C, D, E.

24
Вычислить значение выражения 13 EMBED Equation.3 1415(все переменные – натуральные числа, m>3, e>n). Вычисление сумм оформить в виде функции.

25
Описать функцию Fact(N) целого типа, вычисляющую значение факториала N! = 1·2·...·N (N > 0 – параметр целого типа). С помощью этой функции вычислить факториалы 5 случайных чисел из диапазона [1, 10].

26
Описать функцию Fact2(N) целого типа, вычисляющую значение "двойного факториала": N!! = 1·3·5·...·N, если N нечетное, N!! = 2·4·6·...·N, если N четное (N > 0 параметр целого типа). С помощью этой функции вычислить двойные факториалы 5 случайных чисел из диапазона [3, 12].

27
Описать функцию Fib(N) целого типа, вычисляющую N-е число Фибоначчи F(N) по формуле: F(1) = F(2) = 1, F(k) = F(k–2) + F(k–1), k = 3, 4, ... С помощью этой функции вычислить 10 чисел Фибоначчи со случайными номерами из диапазона [1, 21].

28
Описать функцию IsPrimeNumber(N), проверяющую, является ли целое число простым. С помощью этой функции найти простые числа из диапазона [a, b] (a и b – случайные целые числа, 1
29
Описать функцию IsOneSide(a,b,c,x1,y1,x2,y2), проверяющую, находятся ли точки (x1,y1) и (x2,y2) по одну сторону от прямой ax+by+c=0. Описать функцию LineABC(x1,y1,x2,y2,a,b,c), которая определяет коэффициенты a,b,c прямой ax+by+c=0, заданной двумя точками (x1,y1) и (x2,y2). С помощью этих функций определить, лежит ли точка A(x,y) внутри треугольника BCD, заданного координатами вершин.

30
Описать функцию IsOneSide(a,b,c,x1,y1,x2,y2), проверяющую, находятся ли точки (x1,y1) и (x2,y2) по одну сторону от прямой ax+by+c=0. Описать функцию LineABC(x1,y1,x2,y2,a,b,c), которая определяет коэффициенты a,b,c прямой ax+by+c=0, заданной двумя точками (x1,y1) и (x2,y2). С помощью этих функций определить, является ли четырехугольник ABCD выпуклым.

Задача 2. Решить задачу с использованием функций. Ввод-вывод значений массивов осуществить с помощью функций.

Формулировка задачи

1
По заданным 10-элементным массивам А, В и С вычислить:


2
Заданы три матрицы A[3][3], B[2][2], C[3][3]. Найти минимальное из трех чисел  x, y, z, где  x – след матрицы A,  y – след матрицы B, z – след матрицы C. Следом матрицы называется сумма элементов главной диагонали. Вычисление следа оформить в виде функции.

3
По заданным 10-элементным целым массивам  X  и  Y вычислить

Вычисление суммы оформить в виде функции.

4
Даны коэффициенты многочленов  P(x) и  Q(x) 5-й степени и дано вещественное a. Вычислить P(a+Q(a)P(a+1)).

5
Составить программу для нахождения сумм элементов каждого столбца матриц A и B, используя функцию.

6
Заданы три одномерных массива X, Y, Z. Упорядочить по возрастанию три числа a, b и c, где a – минимальный элемент массива X, b – минимальный элемент массива Y, а c – минимальный элемент массива Z. Поиск минимального элемента оформить в виде функции.

7
Решить уравнение dx=c, где d – длина вектора a={a1,a2,,a10}, c – длина вектора b={b1,b2,,b7}. Вычисление длины вектора оформить в виде функции.

8
Составить программу для вычисления значения функции 13 EMBED Equation.3 1415, где a – среднее арифметическое отрицательных элементов массива x[10], b – среднее арифметическое отрицательных элементов массива y[20]. Для вычисления среднего арифметического элементов массива использовать функцию.

9
Заданы два вектора x={x1,x2,x3,x4} и y={y1,y2,y3,y4}. Определить угол ( между векторами x и y по формуле
13 EMBED Equation.3 1415
Вычисление скалярного произведения векторов оформить в виде функции.

10
Составить программу для вычисления значений функции
13 EMBED Equation.3 1415, где 13 EMBED Equation.3 1415,
xij – элементы матрицы 5x10, yi – элементы массива y[10].
Суммирование оформить функцией. 

11
Заданы четыре вектора x={x1,x2,x3}, y={y1,y2,y3}, z={z1,z2,z3,z4}, p={p1,p2,p3,p4}. Вычислить скалярное произведение векторов x и y, сравнить его со скалярным произведением векторов z и p, найти большее. Вычисление скалярного произведения оформить в виде функции.

12
Описать функцию Polynom(A,N,X), находящую значение полинома P в вещественной точке X. Полином P задается параметрами N (степень полинома, 0 < N < 8) и A (коэффициенты полинома, вещественный массив размера N+1): P(X) = A[0]·XN + A[1]·XN–1 + ... + A[N-1]·X + A[N]. Используя эту функцию, найти значения заданного полинома в пяти данных (случайных) точках.

13
Описать функцию NMin(A,N) целого типа, находящую номер минимального элемента массива A (массив состоит из N вещественных чисел). С помощью этой функции найти номера минимальных элементов массивов A, B, C размера NA, NB, NC соответственно.

14
Описать функцию NMinmax(A,N,NMin,NMax), находящую номера минимального и максимального элемента массива A из N вещественных чисел. Выходные параметры: NMin (номер минимального элемента) и NMax (номер максимального элемента). С помощью этой функции найти номера минимальных и максимальных элементов массивов A, B, C размера NA, NB, NC соответственно.

15
Описать функцию Factors(A,N,F), находящую разложение натурального числа A на простые множители. Количество множителей возвращается в целой переменной N, а сами множители (в порядке неубывания) – в целочисленном массиве F (N и F – выходные параметры; максимальное число элементов массива F считать равным 15). С помощью этой функции разложить на простые множители пять данных чисел.

16
Описать функцию PerimN(X,Y,N), находящую периметр N-угольника, координаты вершин которого (в порядке их обхода) передаются в вещественных массивах X, Y размера N (> 2). С помощью этой функции найти периметры трех данных многоугольников (с числом вершин NA, NB, NC соответственно), если даны координаты их вершин. Для вычисления расстояния между двумя точками определить отдельную функцию.

17
Описать функцию Invert(A,N), меняющую порядок следования элементов массива A из N вещественных чисел на противоположный ("инвертирование массива"). С помощью этой функции инвертировать массивы A, B, C размера NA, NB, NC соответственно.

18
Описать функцию MoveRight(A,N,k)2, осуществляющую циклический сдвиг элементов вещественного массива A размера N на k позиций вправо (0 < k < 5, k < N). С помощью этой функции осуществить сдвиг элементов данного массива размера N на k1 позиций, а затем – сдвиг элементов полученного массива на k2 позиций (k1 и k2 даны). После каждого вызова функции выводить на экран результирующий массив.

19
Описать функцию MoveLeft(A,N,k), осуществляющую циклический сдвиг элементов вещественного массива A размера N на k позиций влево (0 < k < 5, k < N). С помощью этой функции осуществить сдвиг элементов данного массива размера N на k1 позиций, а затем – сдвиг элементов полученного массива на k2 позиций (k1 и k2 даны). После каждого вызова функции выводить на экран результирующий массив.

20
Описать функцию Smooth(A,N), заменяющую каждый элемент вещественного массива A размера N на его среднее арифметическое со своими соседями ("сглаживание массива"). С помощью этой функции выполнить пятикратное сглаживание данного массива A размера N, выводя на экран результаты каждого сглаживания.

21
Описать функцию SumLine(A,M,N,k), вычисляющую сумму элементов вещественной матрицы A размера M x N, расположенных в k-й строке (если k 
· M, то функция возвращает 0). Для данной матрицы A размера M x N и трех данных k найти SumLine(A,M,N,k).

22
Описать функцию SumCol(A,M,N,k), вычисляющую сумму элементов вещественной матрицы A размера M x N, расположенных в k-м столбце (если k 
· N, то функция возвращает 0). Для данной матрицы A размера M x N и трех данных k найти SumCol(A,M,N,k)

23
Описать функцию SwapLine(A,M,N,k1,k2), осуществляющую перемену местами строк вещественной матрицы A размера M x N с номерами k1 и k2 (если k1 или k2 больше или равно M, то матрица не изменяется). Используя эту функцию, поменять для данной матрицы A размера M x N строки с номерами k1 и k2.

24
Описать функцию SwapCol(A,M,N,k1,k2), осуществляющую перемену местами столбцов вещественной матрицы A размера M x N с номерами k1 и k2 (если k1 или k2 больше или равно N, то матрица не изменяется). Используя эту функцию, поменять для данной матрицы A размера M x N столбцы с номерами k1 и k2.

25
Описать функцию Transp(A,M), выполняющую транспонирование квадратной вещественной матрицы A порядка M. Использовать эту функцию для транспонирования данной матрицы A порядка M.

26
Описать функцию Gauss(A,M,N,i1,i2,X), преобразующую вещественную матрицу A размера M x N следующим образом: из строки i1 вычитается строка i2, умноженная на вещественное число X. С помощью этой функции, используя в качестве вспомогательной первую строку, обнулить в остальных строках данной матрицы A размера M x N элементы k-го столбца (число k дано, причем A[0][k]
·0).

27
Описать функцию Simm(A,M,N), преобразующую вещественную матрицу A размера M x N симметричным отображением относительно вертикальной оси:
0
1
2
3
4


4
3
2
1
0





















































Вывести на экран матрицу до выполнения функции и после.

28
Дана матрица A[m][n] действительных чисел. Заменить нулями все элементы, отличающиеся от среднего значения более, чем на заданную величину. Нахождение среднего значения и изменение матрицы оформить с помощью функций.

29
Описать функцию PositivNegativ(A,M,N,B,C), вычисляющую для заданной вещественной матрицы A размерности M x N логические значения двух векторов B[M] и C[N] следующим образом: элемент вектора bi равен истине, если в i-ой строке матрицы есть положительные элементы, и ложь, если нет; аналогично, элемент вектора ci должен показывать наличие в соответствующем столбце отрицательных элементов.

30
Даны две матрицы A[n][k] и B[k][m] целых чисел. Получить матрицу C[n][m] – произведение заданных матриц. Вычисление произведения оформить в виде функции Product(A,B,C,m,n,k).


Тема: Обработка строк
Цели: получение навыков обработки строк с использованием функций стандартной библиотеки и с помощью собственных функций; закрепление навыков программирования подпрограмм (функций).
Краткая теоретическая справка
Работа с символами и строками в языке C подробно рассмотрена в конспекте лекций.
В языке C нет отдельного типа для представления строк. Строка – это последовательность байт, завершаемая байтом с кодом '\0'. В языке С длина строки, в отличие от буфера, нигде не хранится и может быть получена в цикле сканирования строки слева направо. Нулевой байт также считается принадлежащим строке, поэтому строка из n символов требует (n+1)*sizeof(char) байт памяти.
Стандартная библиотека содержит ряд функций для работы со строками.
Файл string.h содержит прототипы функций обработки строк.
Файл stdlib.h содержит прототипы функций преобразования типов (из внутреннего представления – переменной – во внешнее – строку, и наоборот).
Файл ctype.h содержит прототипы функций проверки и преобразования символов.
Список функций можно найти в справочной системе системы программирования, в документации к системе программирования, в конспекте лекций или в учебнике (Например, С.С. Фомин, В.В. Подбельский "Программирование на Си").
Индивидуальные задания
Задача 1. Дана строка, содержащая некоторый текст (включая пробелы и знаки препинания). Под словом понимается набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки. Требуется решить задачу, используя функции стандартной библиотеки.

Формулировка задачи

1
Найти в тексте все слова, начинающиеся на заданную букву русского алфавита. Определить их количество.

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

3
Провести частотный анализ текста. Построить столбиковую гистограмму (например, с помощью символов '*'), отражающую количество слов в тексте, заканчивающихся на буквы заданного алфавита (здесь алфавит – набор символов).

4
Провести частотный анализ текста. Построить столбиковую гистограмму(например, с помощью символов '*'), отражающую частоту появления букв заданного алфавита в тексте (здесь алфавит – набор символов).

5
Найти в тексте все слова, равные заданному. Подсчитать их количество.

6
Организовать принцип «Поиск и замена слов», т.е. найти в тексте все слова заданного вида, и заменить эти слова на новое заданное слово.

7
Описать функцию FillStr(S,C,Len), заполняющую строку S длины Len повторяющимися копиями строки-шаблона C (последняя копия строки-шаблона может входить в результирующую строку частично).

8
Все слова текста заключить в кавычки. Знаки препинания должны остаться за пределами кавычек.

9
Заменить все вхождения четных цифр на символ '+', а нечетные – на символ '–'.

10
Заменить все вхождения цифр на последовательность символов '+' (количество символов равно значению цифры), заключенных в круглые скобки. Например, для строки "Дом 43, кв. 22" должно получиться "Дом (++++)(+++), кв. (++)(++)".

11
Заменить все числа на фразу "(здесь было число)". Например, для строки "Дом 43, кв. 22" должно получиться "Дом (здесь было число), кв. (здесь было число)".

12
Заменить символ '@' на фразу "_собачка_".

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

14
Часто встречающаяся ошибка начинающих наборщиков – дважды записанное слово. Обнаружить такие ошибки в тексте.

15
В строке записано выражение вида <число><знак><число>, где <знак> – знак арифметической операции ('+', '-', '/', '*'), <число> – целое неотрицательное число. Вычислить значение выражения.

16
Задано целое число n – основание системы счисления(2
·n
·16). В строке записано выражение вида <число><знак><число>, где <знак> – знак арифметической операции ('+', '-', '/', '*'), <число> – целое неотрицательное число, заданное в n-ичной системе счисления. Вычислить значение выражения (в 10-ичной системе счисления).

17
Удалить лишние пробелы (в том числе в начале и в конце предложения), оставив в строке по одному пробелу между словами.

18
"Перевернуть" в строке все слова. (Например: "Жили были дед и баба" – "илиЖ илиб дед и абаб").

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

20
Заменить в строке принятое в С обозначение символа с заданным кодом в восьмеричной СС (например, \101) на сам символ (в данном случае – A).

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

22
Удалить из строки комментарии вида "/* ... */". Игнорировать вложенные комментарии.

23
Заменить в строке символьные константы вида 'А' на соответствующие шестнадцатеричные (т.е. 'А' на 0x41, в константе использовать 2 цифры для представления байта).

24
Заменить в строке все цифры соответствующим повторением следующего за ними символа, если этот символ не является цифрой (например "abc5xacb14y" – " abcxxxxxacb1yyyy").

25
Найти самое короткое и самое длинное слово в тексте.

26
Уровнем комментированности текста будем считать отношение объема комментариев к объему всего текста. Определить уровень комментированности данного текста (язык программирования С, используются комментарии вида "/* ... */").

27
Подсчитать количество слов, содержащих цифры.

28
Сравнить две строки: 1) по длине, 2) по алфавиту, 3) с какого символа различаются строки, 4) есть ли общие символы, 5) является ли одна строка частью другой.

29
Удалить из текста все фразы Sf (вводятся пользователем, могут повторяться).

30
Удалить в тексте все фразы Sf (вводятся пользователем, могут повторяться) на фразу "удалено модератором".

Задача 2. Дана строка, содержащая некоторый текст (включая пробелы и знаки препинания). Под словом понимается набор символов, не содержащий пробелов и ограниченный пробелами или началом/концом строки. Требуется решить задачу, без использования стандартных функций, описанных в string.h или stdlib.h.

Формулировка задачи

1
Распечатать введенную строку, исключив из нее те символы, которые находятся между скобками '(' ')'. Сами скобки не удалять. Если хотя бы одной скобки нет – сообщить об этом.

2
Написать и протестировать функцию StoI(n, str), которая преобразует строку десятичных цифр в целое число.

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

4
Написать и протестировать функцию Delete(s1, s2), которая удаляет из строки s1 все символы, встречающиеся в строке s2.

5
Морзянка. Вводимый с клавиатуры или файла текст перевести в последовательность точек и тире с помощью азбуки Морзе.
Для справки – азбука Морзе:
А, A
.-
Б, B
-...
В,W
.--
Г, G
--.
Д, D
-..

Е, Ё, E
.
Ж, V
...-
З, Z
--..
И, I
..
Й, J
.---

К, K
-.-
Л, L
.-..
М, M
--
Н, N
-.
О, O
---

П, P
.--.
Р, R
.-.
С, S
...
Т, T
-
У, U
..-

Ф, F
..-.
Х, H
....
Ц, C
-.-.
Ч
---.
Ш
----

Щ, Q
--.-
Ъ
.--.-.
Ы, Y
-.--
Ь, X
-..-
Э
...-...

Ю
..--
Я
.-.-
1
.----
2
..---
3
...--

4
....-
5
.....
6
-....
7
--...
8
---..

9
----.
0
----
.
.-.-.-
,
--..--
:
---...

?
..--..
,’
.----.
-
-....-
/
-..-
,
-.--.-



6
Дан текст, записанный азбукой Морзе, буквы разделены пробелом, слова - двумя или более пробелами. Перевести его в обычную запись.

7
В заданном тексте найти самое длинное слово.

8
Преобразовать целое число из внутренней формы представления (переменную типа long) во внутреннюю (строку).

9
В имеющемся тексте найти пары слов (анаграммы), при прочтении каждого из которых в обратном направлении образуется другое слово пары, например, (ПОЛК, КЛОП); (БАР, РАБ).

10
В русском языке, как правило, после букв Ж, Ч, Ш, Щ пишется И, А, У, а не Ы, Я, Ю. Проверить заданный текст на соблюдение этого правила и исправить ошибки (с учетом исключений: ЖЮРИ, БРОШЮРА, ПАРАШЮТ).

11
По правилам пунктуации пробел может стоять после, а не перед каждым из следующих знаков: . , ; : ! ? ) ] } ... ; перед, а не после знаков: ( [ {. Заданный текст проверить на соблюдение этих правил и при необходимости исправить. Вместо пробела может быть перевод строки или знак табуляции.

12
Преобразовать вещественное число из внешней формы представления (строки) во внутреннюю (переменную типа double).

13
Вводимый с клавиатуры русский текст перевести на транслит.
А
Б
В
Г
Д
Е
Ж
З
И
Й
К
Л
М
Н
О
П
Р
С
Т
У
Ф
Х
Ц
Ч
Ш
Щ
Ъ
Ы
Ь
Э
Ю
Я

A
B
V,W
G
D
E
Zh
Z
I
J
K
L
M
N
O
P
R
S
T
U
F
H
C,Tc
Ch
Sh
Cch
`
Y
'
]
Ju,Yu
Ja,Ya



14
Перевести английский текст в русскую запись по правилам транслитерации.

15
Описать функцию IsIdent(S) целого типа, проверяющую, является ли строка S допустимым идентификатором языка C. При утвердительном ответе возвращается 0. Если S является пустой строкой, то возвращается –1, если строка начинается с цифры, то возвращается –2. Если S содержит недопустимые символы, то возвращается номер первого недопустимого символа.

16
Найти в строке самую внутреннюю пару скобок и возвратит индекс открывающейся, например “a(bb(c(d)e(f ( ggg)h)))(d)”. Предполагается, что данные корректны (хотя можно выполнить проверку).

17
Найти в тексте все слова, которые содержат более чем заданное число букв.

18
Все слова текста заключить в кавычки. Знаки препинания должны остаться за пределами кавычек.

19
Найти в тексте все слова, которые являются палиндромами, т.е. читаемыми в прямом и обратном направлении (например, «шалаш», «кок» - палиндромы).

20
Найти в тексте все слова, равные заданному. Подсчитать их количество.

21
Найти в строке и удалить из нее последовательности повторяющихся символов (например, "abcxxxxxacbyyyyyyyyyyyyyyyz" - "abcacbz").

22
Найти в тексте слова, которые содержат хотя бы один слог «НА», «ПРИ», «ЗА».

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

24
Найти в тексте слова, которые содержат хотя бы одну заданную букву. Если слово начинается на эту букву, то оставить его без изменения, если заканчивается, то слово «перевернуть», если «внутри», то заменить ее на новую заданную букву.

25
Описать функцию FillStr(S,C,Len), заполняющую строку S длины Len повторяющимися копиями строки-шаблона C (последняя копия строки-шаблона может входить в результирующую строку частично).

26
Описать функцию UpCase(S), преобразующую все строчные буквы строки S в прописные (остальные символы строки S не изменяются).

27
Описать функцию PosLast(subS,S), возвращающую номер позиции, с которой в строке S содержится последнее вхождение подстроки subS. Если в строке S отсутствуют подстроки subS, то функция возвращает -1.

28
Описать функцию WordN(S,k,Sres), возвращающую Sres – k-е слово строки S. Если количество слов в строке меньше k, то функция возвращает пустую строку. Используя эту функцию, выделить из данной строки S слова с номерами k1, k2, k3.

29
Описать функцию NumberToN(S,n,Sres) Перевести целое число, записанное в строке S в n-ичную систему счисления (2
·n
·16), результат записать в строку Sres без начальных нулей.

30
Описать функцию NumberTo10(S,n,Sres) Перевести целое число, записанное в строке S в n-ичной системе счисления (2
·n
·16) в десятичную систему счисления, результат записать в строку Sres без начальных нулей.


Тема: Работа со структурами
Цели: получение навыков обработки структур.
Краткая теоретическая справка
Работа со структурами подробно рассмотрена в конспекте лекций.
В языках С или C++ структура (структурный тип) создается при помощи ключевого слова struct, за которым следуют необязательное имя и список элементов структуры. Имя используется для создания других переменных данного структурного типа. Синтаксис описания структуры выглядит следующим образом:
struct имя_стуктурного_типа{
тип_элемента элемент1;
тип_элемента элемент2;
тип_элемента элемент3;
...
тип_элемента элементN;
};
Далее имя_стуктурного_типа может использоваться как и имя базового типа для создания переменных:
имя_стуктурного_типа список_имен_переменных;
Для обращения к отдельным элементам структур используются две операции: операция доступа к элементу структуры ('.'), также называемая операцией-точкой, и операция косвенного доступа к элементу структуры ('->'), также называемая операцией-стрелкой.
Пример. Определить структуру, описывающую понятие рациональное число. Написать и протестировать функции для сокращения, печати рационального числа, а также для деления двух рациональных чисел.
#include
#include

struct Racion{ //структурный тип "рациональная дробь"
int chis;
int znam;
};

void put(Racion A); //вывод структуры на экран
Racion SOKR(Racion A); //сокращение дроби
void DIV(Racion A, Racion B, Racion *C); //деление дробей

void main(){
Racion A, B, C;
puts("Введите числитель и знаменатель первой, "
"а затем - второй дроби : ");
scanf("%d%d%d%d", &A.chis, &A.znam, &B.chis, &B.znam);
DIV(A, B, &C);
printf("При делении "); put(A); printf (" на "); put(B);
printf("\n получилось "); put(C);
}

//вывод структуры A на экран:
void put(Racion A){
//если числитель и знаменатель имеют разные знаки:
if(A.chis * A.znam < 0) printf("-");
A.chis = abs(A.chis);
A.znam = abs(A.znam);
printf "%d/%d", A.chis, A.znam);
}

//сокращение дроби A:
Racion SOKR(Racion A){
int i, min;
if(abs(A.chis) > abs(A.znam)) min = abs(A.znam);
else min = abs(A.chis);
for(i = min; i >1; i--)
if(A.chis % i = 0 && A.znam % i = 0) break;
A.chis /= i;
A.znam /= i;
return A;
}

//деление дробей A и B, результат возвращается через адрес C:
void DIV(Racion A, Racion B, Racion *C){
A = SOKR(A);
B = SOKR(B);
C->chis = A.chis * B.znam;
C- *C=SOKR(*C);
}
Индивидуальные задания
Задача 1. Описать новый структурный тип. Описать требуемые в задаче функции для работы со структурами. Продемонстрировать выполнение функций. Для ввода-вывода переменной структурного типа описать функции inputStr() и printStr().

Формулировка задачи

1
Ввести перечислимые типы масть, достоинство. С их помощью описать как структуру переменную карта. Составить и протестировать функцию
БЬЕТ (К1, К2, КМ),
которая проверяет, бьет ли карта К1 карту К2, с учетом того, что масть Км является козырной.

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

3
Ввести структуру (с полями числитель и знаменатель) для описания понятия рациональное число. Составить и протестировать функции:
РАВНО(А, В), которая проверяет, равны ли друг другу рациональные числа А,В;
МАКС(Х,N), которая возвращает наибольшее из массива Х(N) рациональных чисел;
СЛОЖ(А, В, С), которая записывает в С результат сложения рациональных чисел А и В;
МИН(А, В), которая возвращает наименьшее из двух рациональных чисел А и В;
УМН(А, В, С), которая записывает в С результат перемножения рациональных чисел А и В.

4
Ввести структуру (с полями число, месяц, год) для описания понятия дата. Составить и протестировать функцию, которая:
вычисляет интервал (в днях), прошедший между двумя датами;
по порядковому номеру дня в году определяет число и месяц года, соответствующие этому дню;
по введенной дате распечатывает дату на N дней вперед.

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

6
Ввести структуру для описания понятия алгебраический полином. Составить и протестировать функции для:
сложения полиномов;
умножения полиномов;
дифференцирования полинома;
интегрирования полинома.

7
Ввести структуру для описания треугольника. Составить и протестировать функции для:
вычисления площади треугольника;
вычисления периметра треугольника;
определения, попадает ли заданная точка внутрь треугольника.
Можно сначала описать структуру для описания точки. Тогда треугольник можно задать с помощью трех точек – вершин треугольника.

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

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

10
Определить структуру – важнейшие исторические даты. Ее поля – год, событие.
Написать и протестировать функции:
подсчитывающую средний интервал между датами;
определяющую наиболее часто встречающуюся первую букву в названии события.

11
Определить структуру, описывающую прямоугольник со сторонами, параллельными осям координат (прямоугольник задается двумя точками – левой нижней и правой верхней).
Написать и протестировать функцию, возвращающую указатель на новый прямоугольник – область пересечения двух прямоугольников. Если пересечения нет – возвращается NULL.

12
Определить структуру, описывающую прямоугольник со сторонами, параллельными осям координат (прямоугольник задается двумя точками – левой нижней и правой верхней). Составить и протестировать функции для:
определения, является ли прямоугольник квадратом;
вычисления площади прямоугольника;
вычисления периметра прямоугольника;
вычисления длины диагонали прямоугольника.

13
Определить структуру, описывающую окружность и точку. Составить и протестировать функции для:
проверки, попадает ли точка внутрь окружности;
вычисления расстояния от центра окружности до точки;
вычисления расстояния от точки до границы окружности.

14
Определить структуру, описывающую кольцо (задается с помощью двух окружностей разных радиусов и с одним центром) и точку. Составить и протестировать функции для:
проверки, попадает ли точка в кольцо;
вычисления расстояния от точки до границы кольца.

15
Определить структуру, описывающую квадрат, задающийся координатами центра и длиной стороны. Составить и протестировать функции для:
вычисления площади квадрата;
вычисления периметра квадрата;
увеличения стороны на заданное число;
определения количества точек с целыми координатами, находящихся внутри квадрата.

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

Тема: Работа с файлами
Цели: получение навыков взаимодействия с файлами.
Краткая теоретическая справка
В конспекте лекций подробно рассмотрены вопросы потокового вода-вывода файлов.
Последовательность работы с файловым потоком следующая:
#include

void main(){
FILE *fp; //описываем указатель на поток

//открываем поток и сразу выполняем проверку:
if((fp=fopen("t.txt", "w")==NULL){
perror("ошибка при открытии файла \n");
exit(0);
}

//выполняем операции обмена данными с потоком

fclose(fp); //закрываем поток
}
Когда программа начинает выполняться, автоматически открываются несколько стандартных потоков:
стандартный поток ввода (stdin – указатель на поток, связанный с устройством стандартного ввода – клавиатура),
стандартный поток вывода (stdout – указатель на поток, связанный со стандартным устройством вывода – экран дисплея),
стандартный поток вывода ошибок (stderr – указатель на поток, связанный со стандартным устройством вывода сообщений об ошибках – экран дисплея).
Для ввода-вывода данных с помощью стандартных потоков (stdin/stdout) в библиотеке языка C определены следующие функции:
getchar()/putchar() – ввод-вывод отдельного символа;
gets()/puts() – ввод-вывод строки;
scanf()/printf() – ввод-вывод в режиме форматирования данных.
Аналогичным образом можно осуществлять работу с файлами на диске. Для этой цели в библиотеку языка C включены следующие функции:
fgetc()/fputc() – ввод-вывод отдельного символа;
fgets()/fputs() – ввод-вывод строки;
fscanf()/fprintf() – ввод-вывод в режиме форматирования данных;
fread()/fwrite() – ввод-вывод блока данных (заданного количества байт).
Для проверки достижения признака конца файла можно использовать функцию
int feof(FILE *fn), возвращающую значение "истина", если конец файла достигнут.
Пример:
FILE *fp;

while(!feof(fp)) //пока не достигнут конец файла
//делать что-нибудь с файлом
Индивидуальные задания
Задача 1. Для данных задачи 2 лабораторной работы 9 (Работа со структурами) описать функции для ввода-вывода значений массива структур из файла произвольного доступа. Создайте файл SortAllStr.out, в который запишите все результаты выполнения сортировки массива по различным полям.
Задача 2. Изменить решение задачи 2 лабораторной работы 8 (Работа со строками) таким образом, чтобы исходные данные находились в файле Str.in (текст может занимать несколько строк), а выходные записывались в файл Str.out.
Задача 2. Изменить решение задачи 3 лабораторной работы 6 (Работа со двумерными массивами) таким образом, чтобы исходные данные находились в файле Matr.in (первая строка содержит размерность (размерности) матрицы, остальные строки файла содержат значения элементов строк матрицы, записанные через пробел), а выходные записывались в файл Matr.out.

Тема: Многофайловая разработка программ
Цели: получение навыков разработки программ, состоящих из нескольких модулей; получение навыков разработки статических библиотек функций.
Индивидуальные задания
Задача 1. Описать аналоги библиотечных функций для работы со строками strlen(), strcat(), strcpy(), strcmp(). Протестировать функции в главной функции на примерах, введенных пользователем. Реализовать задачу с помощью многофайлового проекта: main.cpp – функция main(), mystring.cpp – реализация функций, mystring.h – прототипы функций.
Задача 2. Реализовать задачу 1 данной лабораторной работы с использованием статически подключаемой динамической библиотеки, содержащей реализацию функций для работы со строками.
Задача 3. Реализовать задачу 1 данной лабораторной работы с использованием динамически подключаемой динамической библиотеки, содержащей реализацию функций для работы со строками.









<13 PAGE \* MERGEFORMAT 142015>



A(x1, y1)

B(x2, y2)

C(x2, y1)

x2

x1

y1

y2

x

y

0

A(x0, y0)

B(xi, yi)

C(xi, y0)

xi

x0

y0

yi

x

y

0

r

13 EMBED Equation.3 1415

начало

Sum=0.0

i=1

i<=n

Sum=Sum+ai

i=i+1

Sum

конец

1

0

начало

Sum=0.0

i=1

i<=n

Sum=Sum+ Member

i=i+1

Sum

конец

1

0

x, n

Member=FirstMember

Member=Member*RecurrentMultiplier(i)

начало

Sum=0.0

i=1

|Member|>=
·

Sum=Sum+ Member

i=i+1

Sum

конец

1

0

x,
·

Member=FirstMember

Member=Member*RecurrentMultiplier(i)

0,0
0,1
0,2
0,3

1,0
1,1
1,2
1,3

2,0
2,1
2,2
2,3

3,0
3,1
3,2
3,3



Побочная диагональ: i+j = n-1

Главная диагональ: i=j

Закономерность формирования индексов диагоналей, проходящих через элемент [p][k]:
параллельно главной: i-j = p-k
параллельно побочной: i+j = p+k
Количество элементов диагонали:
параллельно главной: s = n - |p-k|
параллельно побочной: s = n - |n-1 – (p+k)|

b

a

a

d

e

c



Root EntryEquation Native

Приложенные файлы

  • doc 26542298
    Размер файла: 5 MB Загрузок: 0

Добавить комментарий