Вычисление факториала числа

Заключение

Функции и структура программы

Разработка программ при работе с массивами

Массивы и указатели

Текстовые строки как массивы символов

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

Создание и использование функций. Вызов функции (аргументы функции) и возврат значения. Передача параметров по значению, по ссылке. Глобальные и локальные переменные. Классы памяти и область действия. Автоматические переменные. Внешние переменные. Статические переменные. Внешние статические переменные. Регистровые переменные. Указатели. Функции с переменным количеством аргументов. Представление программы в виде набора функций. Многофайловая структура программы. Использование функции как параметра другой функции; пример применения - итерационные методы решения нелинейных уравнений.

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;

}


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: