Решение систем линейных уравнений методом Крамера

Автор работы: Пользователь скрыл имя, 25 Декабря 2014 в 14:19, курсовая работа

Описание работы

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

Содержание работы

Введение
2
1 Теоретическая часть
4
1.1 Технология разработки программных средств
4
1.2 Алгоритмизация и программирование
7
1.2.1 История развития алгоритмических языков
7
1.2.2 Основные функции технологии программирования
7
1.2.3 История создания С++
12
1.3 Основы теории и синтаксиса языка программирования С++
15
1.3.1 Синтаксис языка С++
15
1.3.2 Правила записи программы на языке С++
15
1.3.3 Правила формального описания синтаксиса языка программирования
17
2 Практическая часть
18
2.1 Решение систем линейных уравнений методом Крамера
18
2.2 Пример решения системы линейных уравнений методом Крамера
20
2.2.1 Техническое задание на учебный программный продукт
20
2.2.2 Алгоритм решения задачи
21
2.2.3 Список используемых идентификаторов
21
2.2.4 Инструкция по использованию программы
21
2.2.5 Минимальная конфигурация
21
2.2.6 Назначение ПО
22
2.2.7 Документация на учебный программный продукт
22
Заключение
24
Литература

Файлы: 1 файл

Курсовая работа (Захватаев Сергей АиУ-12)(1) (Восстановлен).docx

— 527.94 Кб (Скачать файл)

 

1.2.3 История создания языка С++

 

Язык С++ возник в начале 1980-х годов, когда сотрудник фирмы Bell Labs Бьёрн Страуструп придумал ряд усовершенствований к языку C под собственные нужды. Когда в конце 1970-х годов Страуструп начал работать в Bell Labs над задачами теории очередей (в приложении к моделированию телефонных вызовов), он обнаружил, что попытки применения существующих в то время языков моделирования оказываются неэффективными, а применение высокоэффективных машинных языков слишком сложно из-за их ограниченной выразительности. Так, язык Симула имеет такие возможности, которые были бы очень полезны для разработки большого программного обеспечения, но работает слишком медленно, а язык BCPL достаточно быстр, но слишком близок к языкам низкого уровня и не подходит для разработки большого программного обеспечения.

Вспомнив опыт своей диссертации, Страуструп решил дополнить язык C (преемник BCPL) возможностями, имеющимися в языке Симула. Язык C, будучи базовым языком системы UNIX, на которой работали компьютеры Bell, является быстрым, многофункциональным и переносимым. Страуструп добавил к нему возможность работы

с классами и объектами. В результате практические задачи моделирования оказались доступными для решения как с точки зрения времени разработки (благодаря использованию Симула-подобных классов), так и с точки зрения времени вычислений (благодаря быстродействию C). В первую очередь в C были добавлены классы (с инкапсуляцией), наследование классов, строгая проверка типов, inline-функции и аргументы по умолчанию. Ранние версии языка, первоначально именовавшегося «C with classes» («Си с классами»), стали доступны с 1980 года.

Разрабатывая C с классами, Страуструп написал программу cfront — транслятор, перерабатывающий исходный код C с классами в исходный код простого C. Это позволило работать над новым языком и использовать его на практике, применяя уже имеющуюся в UNIX инфраструктуру для разработки на C. Новый язык, неожиданно для автора, приобрёл большую популярность среди коллег и вскоре Страуструп уже не мог лично поддерживать его, отвечая на тысячи вопросов.

При создании C++ Бьёрн Страуструп хотел:

  • Получить универсальный язык со статическими типами данных, эффективностью и переносимостью языка C.
  • Непосредственно и всесторонне поддерживать множество стилей программирования, в том числе процедурное программирование, абстракцию данных, объектно-ориентированное программирование и обобщённое программирование.
  • Дать программисту свободу выбора, даже если это даст ему возможность выбирать неправильно.
  • Максимально сохранить совместимость с C, тем самым делая возможным лёгкий переход от программирования на C.
  • Избежать разночтений между C и C++: любая конструкция, допустимая в обоих языках, должна в каждом из них обозначать одно и то же и приводить к одному и тому же поведению программы.
  • Избегать особенностей, которые зависят от платформы или не являются универсальными.
  • «Не платить за то, что не используется» — никакое языковое средство не должно приводить к снижению производительности программ, не использующих его.
  • Не требовать слишком усложнённой среды программирования.

Выбор именно C в качестве базы для создания нового языка программи-

рования объясняется тем, что язык C:

  1. Является многоцелевым, лаконичным и относительно низкоуровневым языком;
  2. Подходит для решения большинства системных задач;
  3. Исполняется везде и на всём;
  4. Стыкуется со средой программирования UNIX.

— Б. Страуструп. Язык программирования C++. Раздел 1.6

Несмотря на ряд известных недостатков языка C, Страуструп пошёл на его использование в качестве основы, так как «в C есть свои проблемы, но их имел бы и разработанный с нуля язык, а проблемы C нам известны». Кроме того, это позволило быстро получить прототип компилятора (cfront), который лишь выполнял трансляцию добавленных синтаксических элементов в оригинальный язык C.

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

  • Сохранение действующего кода, написанного изначально на C и прямо перенесённого в C++;
  • Исключение необходимости переучивания программистов, ранее изучавших C (им требуется только изучить новые средства C++);
  • Исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).

К 1983 году в язык были добавлены новые возможности, такие как виртуальные функции, перегрузка функций и операторов, ссылки, константы, пользовательский контроль над управлением свободной памятью, улучшенная проверка типов и новый стиль комментариев (//). Получившийся язык уже перестал быть просто дополненной версией классического C и был переименован из C с классами в «C++». Его первый коммерческий выпуск состоялся в октябре 1985 года.

Имя языка, получившееся в итоге, происходит от оператора унарного постфиксного инкремента C ++ (увеличение значения переменной на единицу).

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

 

 

 

 

1.3 Основы теории и синтаксиса языка программирования С++

1.3.1Синтаксис языка С++

 

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

  • символы в кавычках переносятся в конструкцию языка так, как они записаны. Кавычки при этом отбрасываются. Например, "while" означает, что в конструкции языка присутствует while;
  • имена, записанные слитно русскими и латинскими буквами, обозначают различные конструкции языка. Например, оператор_цикла;
  • квадратные скобки охватывают элементы языка, которые могут повторяться 0 или 1 раз. Например, "AB"["C"] означает, что в конструкции языка может присутствовать или AB или ABC;
  • фигурные скобки охватывают элементы языка, которые могут повторяться 0 или много раз. Например, "AB" {"C"} означает, что в конструкции языка может присутствовать или AB, или ABC, или ABCC и т.д.;
  • символ | обозначает или, то есть используется для задания альтернативных значений, из списка элементов, разделенных знаком |. Например, "AB"|"C"|"ff" означает, что в конструкции языка может присутствовать или AB или C или ff;
  • круглые скобки используются для группировки. Например, "A"("B"|"C")"D" означает, что в конструкции языка может присутствовать или ABD или ACD;
  • многоточие используется для обозначения очевидных пропущенных значений в перечислении;
  • символ = обозначает - слово есть. Например, буква = "A"|"B"|"C".

 

 

1.3.2 Правила записи программы на языке Си++

 

Программа перед обработкой компьютером должна быть помещена в файл на диске. Обычно этот файл имеет расширение <.c>.

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

/* Включить описания функций  стандартного ввода-вывода */

#include <stdio.h>

/* Включить описания математических  функций */

#include <math.h>

/* Другие включаемые файлы */

/* Собственно текст программы */

void main( void )/* <-- заголовок  главной функции */

{

float num; /* <-- описание типов  данных */

  /*Исполняемые операторы -* */

num = 2.345; /*Присвоим переменной num

 значение 2.345 */

printf( " sin(%f) = %f\n", num, sin(num) );/*Вывод на экран */

}

Любой файл начинается с директив #include, вставляющих в текст программы так называемые заголовочные файлы, которые содержат описания функций, используемых в этом файле. В нашем примере это описания стандартных функций ввода-вывода <stdio.h> и математических функций <math.h>.

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

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

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

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

/*Это комментарий */

// Это тоже комментарии.

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

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

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

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

 

1.3.3 ПРАВИЛА ФОРМАЛЬНОГО  ОПИСАНИЯ СИНТАКСИСА ЯЗЫКА ПРОГРАММИРОВАНИЯ

 

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

-          символы в кавычках переносятся в конструкцию языка так, как они записаны. Кавычки при этом отбрасываются. Например, "while" означает, что в конструкции языка присутствует while;

-          имена, записанные слитно русскими и латинскими буквами, обозначают различные конструкции языка. Например, оператор_цикла;

-          квадратные скобки охватывают элементы языка, которые могут повторяться 0 или 1 раз. Например, "AB"["C"] означает, что в конструкции языка может присутствовать или AB или ABC;

-          фигурные скобки охватывают элементы языка, которые могут повторяться 0 или много раз. Например, "AB" { "C" } означает, что в конструкции языка может присутствовать или AB, или ABC, или ABCC и т.д.;

-          символ | обозначает или, то есть используется для задания альтернативных значений, из списка элементов, разделенных знаком |. Например, "AB"|"C"|"ff" означает, что в конструкции языка может присутствовать или AB или C или ff;

-          круглые скобки используются для группировки. Например, "A"("B"|"C")"D" означает, что в конструкции языка может присутствовать или ABD или ACD;

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

-          символ = обозначает - слово есть. Например, буква = "A"|"B"|"C".

В дальнейшем, синтаксис языка Си будет описываться либо с помощью примеров, либо с помощью расширенной формы Бэкуса-Наура. В последнем случае это будет помечаться аббревиатурой БНФ.

 

 

 

2 Практическая  часть

2.1 Решение систем линейных уравнений методом Крамера

 

Пусть нам требуется решить систему линейных уравнений вида:

где x1, x2, …, xn – неизвестные переменные, ai j , i = 1, 2, …, n, j = 1, 2, …, n – числовые коэффициенты, b1, b2, …, bn - свободные члены. Решением СЛАУ называется такой набор значений x1, x2, …, xn при которых все уравнения системы обращаются в тождества.

В матричном виде эта система может быть записана как A ⋅ X = B, где

- основная матрица системы, ее  элементами являются коэффициенты  при неизвестных переменных,

- матрица – столбец свободных  членов,

Информация о работе Решение систем линейных уравнений методом Крамера