Заключение
Функции и структура программы
Разработка программ при работе с массивами
Массивы и указатели
Текстовые строки как массивы символов
Картинки массивов при записи предусловий, постусловий и инвариантов. Примеры: задачи разделения и слияния массивов, перестановка сегментов массива (циклический сдвиг) и т.п. Линейный и бинарный поиск в массиве. Оптимальность алгоритмов поиска. Оптимизация программ. Простые алгоритмы сортировки (выбором, вставками, обменами). Работа с двумерными и многомерными массивами.
Создание и использование функций. Вызов функции (аргументы функции) и возврат значения. Передача параметров по значению, по ссылке. Глобальные и локальные переменные. Классы памяти и область действия. Автоматические переменные. Внешние переменные. Статические переменные. Внешние статические переменные. Регистровые переменные. Указатели. Функции с переменным количеством аргументов. Представление программы в виде набора функций. Многофайловая структура программы. Использование функции как параметра другой функции; пример применения - итерационные методы решения нелинейных уравнений.
9. Организация ввода/вывода и работа с файлами
Последовательность (как модель файла) и файл. Потоки и работа с файлами. Базовые операции с файлами. Типовые действия с файлами: генерация, чтение, копирование. Форматирование ввода и вывода. Схема однопроходных алгоритмов обработки файлов (вычисление функций на последовательностях). Примеры.
Основные тенденции и направления развития методов и языков программирования. Связь с учебной дисциплиной по программированию (дополнительные главы) следующего семестра.
Приложение. Некоторые полезные примеры и иллюстрации к разделам конспекта
Все программы, приведенные в этом разделе, реализованы в среде MS Visual C++ 2010.
Примеры к разделу 5
// Факториал.cpp: определяет точку входа для консольного приложения.
// Различные реализации функций для вычисления факториала числа
#include "stdafx.h"
#include <iostream>
#include <iomanip> // для манипулятора setw()
#include <limits.h> // для ULONG_MAX - максимальное значение типа unsigned long
using namespace std;
unsigned Factorial_Err(unsigned n)
// При n > 12 значение n! превышает максимальное значение ULONG_MAX типа unsigned
// и функция возвращает неправильные значения
{
unsigned i = 0; // Текущее значение i
unsigned F = 1; // Текущее значение i!
while (i < n)
{
++ i; // i = i + 1
F *= i; // F = F * i - Текущее значение i!
}
return F; // Возвращаем значение n!
}
unsigned Factorial(unsigned n)
// При переполнении возвращает 0 с сообщением об ошибке
// Реализация с помощью цикла while
{
unsigned i = 0; // Текущее значение i
unsigned F = 1; // Текущее значение i!
while (i < n)
{
++ i; // i = i + 1
if (ULONG_MAX / i < F)
{
F = 0;
cout << "Ошибка. При вычислении n! максимальное "
"значение n не может превышать " << --i << endl;
break;
}
F *= i; // F = F * i - Текущее значение i!
}
return F; // Возвращаем значение n!
}
unsigned Factorial_1(unsigned n)
// При переполнении возвращает 0 с сообщением об ошибке
// Реализация с помощью цикла for
{
unsigned F = 1; // Значение 0!
for (unsigned i = 1; i < n; ++i, F *= i)
if (ULONG_MAX / i < F)
{
F = 0;
cout << "Ошибка. При вычислении n! максимальное "
"значение n не может превышать " << --i << endl;
break;
}
return F; // Возвращаем значение n!
}
unsigned Factorial_2(unsigned n)
// При переполнении возвращает 0 без сообщения об ошибке
// Реализация с помощью цикла for
{
unsigned F = 1; // Значение 0!
for (unsigned i = 1; (i < n) && F; ++i, F = (ULONG_MAX / i < F)? 0: F * i);
return F; // Возвращаем значение n!
}
int main()
// Для проверки работы одного из вариантов необходимо
// снять комментарии с соответствующей строки цикла for
// и закомментировать остальные
{
for (int i = 0; i <= 13; ++ i)
{
cout << setw(2) << right << i << "! = " << Factorial_Err(i) << endl;
// cout << setw(2) << right << i << "! = " << Factorial(i) << endl;
// cout << setw(2) << right << i << "! = " << Factorial_1(i) << endl;
// cout << setw(2) << right << i << "! = " << Factorial_2(i) << endl;
}
system ("Pause");
return 0;
}