Студ

Library

Решение строительной задачи методом линейного программирования

Как Писать Курсовую Работу , Как Писать Диссертацию , Как Написать Диссертацию , Выполнение Курсовых Работ , Структура Курсовой , Цели И Задачи Дипломной Работы , Квадратные Уравнения Контрольная Работа , Отчет По Преддипломной Практике Программиста , Правила Написания Курсовой














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


Введение


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

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

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

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

§Процедурно-ориентированное;

§Объектно-ориентированное;

§Логическое;

§Функциональное;

§Машинно-ориентированное программирование.

Процедурно-ориентированная парадигма предполагает, что программа строится из отдельных выполняемых и описательных операторов, некоторых алгоритм. Существуют следующие языки: алгол, фортран, кобол, пл/1, паскаль, си.

К объектно-ориентированным относят smalltalk, с++, object-pascal и java. В основе этих языков лежит понятие объектового типа, позволяющее описывать пользовательские типы и операции над ними.

К логической и функциональной парадигмам относят языки пролог, рефал, липс.

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

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

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

Второй задачей являлось изучение объектно-ориентировочного языка программирования с++, а также работы со средой разработки программного обеспечения visual studio, в частности visual c++, ввиду того, что в описании задания к курсовой работе четко указана необходимость использования языка программирования с++ при разработке алгоритма программы для решения поставленного задания.

Далее, после изучения среды разработки, в которой будет написано программное обеспечение, а также, собственно, самого языка программирования, следовала, соответственно, разработка алгоритма для решения задачи, определенной в техническом задании курсовой работы. В данной курсовой работе описывается класс решаемых задач систем линейных уравнений методом Крамера, назначение, условия применения и характеристики программного обеспечения, объясняется структура входных и выходных данных и алгоритмы работы программы. Затем следовало написание самой программы в visual c++ производства фирмы microsoft. Завершающим шагом являлось тестирование программы на работоспособность и на корректность расчетов.


1. Теоретическая часть

программа уравнение крамер

1.1 Технология разработки программных средств


Основные этапы технологического процесса разработки программ:

·Постановка задачи;

·Построение математической модели;

·Разработка (выбор и адаптация) алгоритма;

·Составление программы;

·Тестирование и отладка;

·Сдача в эксплуатацию.

Постановка задачи. На этом этапе раскрывается организационно-экономическая сущность задачи:

·Формулируется цель ее решения;

·Определяется взаимосвязь с другими задачами;

·Указывается периодичность ее решения;

·Раскрывается состав и форма представления входной, промежуточной и выходной информации;

·Характеризуются формы и методы контроля достоверности информации;

·Описываются формы взаимодействия пользователя с эвм.

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

·Форма представления отдельных данных;

·Количество знаков, выделяемых для записи данных, исходя из их максимальной значимости;

·Источник возникновения данных;

Кроме того, для цифровой информации указывается - целочисленный или дробный характер данных (для дробных указывается количество 10-х знаков) и допустимый диапазон изменения величин.

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

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

Построение математической модели объекта. На этом этапе производится анализ и исследование задачи. Структура этапа:

1.Анализ существующих аналогов задачи;

2.Анализ технических и программных средств;

.Разработка математической модели;

.Разработка структур данных;

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

При выборе метода решения предпочтение отдается методу, который:

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

2.Позволяет использовать уже готовые стандартные программы.

.Ориентирован на минимальный объем информации.

.Наиболее быстрое получение результатов.

План написания постановки задачи (пз):

·Наименование задачи;

·Назначение;

·Достигаемая цель;

·Для кого предназначена;

·Технические средства;

·Периодичность использования;

·Входная информация;

·Выходная информация (формируется по запросам);

·Метод проверки правильности (сравнивается с контрольным примером);

·Организация внедрения задачи;

·Разработка контрольного примера (входная информация с конкретными данными, выходная информация);

·Методы защиты.

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

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

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


.2 Алгоритмизация и программирование


.2.1 История развития алгоритмических языков

Первые вычислительные устройства появились ещё в XVII веке благодаря работам Блюса Паскаля.

Первая электронно-вычислительная машина была разработана в XIX веке Чарльзом Баббидином. Бурное развитие вычислительной техники началось в середине 50-х годов, программы для таких машин писали в машинных кодах. Такие программы были трудны для понимания, разработкой таких программ занимались люди, которые очень хорошо знали устройство данной машины. Для облегчения труда программистов были придуманы алгоритмические языки высокого уровня. Программа на таком языке пишется с помощью команд. Первый алгоритмический язык был разработан в 1949 году short code. Алгоритмические языки: fortаn (середина 50-х), algol 60 (1962),

. Рli 1(1964)

. Cobol (1963)

. Algol 68 (1968)

. Раsсаl(1970)

. С++(1972)

. Ваs1с(1964).

Семь основных элементов программирования.

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

как ввести информацию в программу (ввод);

как хранить информацию в программе (данные);

как указать правильные команды для обработки данных (операции);

как передать обратно данные из программы пользователю (вывод).

Программист может упорядочить команды таким образом, чтобы:

некоторые из них выполнялись только, если выполняется некоторое условие или ряд условий (условное выполнение);

другие выполнялись повторно некоторое число раз (циклы);

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


1.2.2 Основные функции технологии программирования

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

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

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

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

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

·Защита от сбоев аппаратуры;

·Защита от влияния "чужой" программы;

·Защита от отказов "своей" программы;

·Защита от ошибок оператора (пользователя);

·Защита от несанкционированного доступа;

·Защита от защиты.

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

Защита от влияния "чужой" программы относится прежде всего к операционным системам или к программам, выполняющим частично их функции. Различают две разновидности этой защиты:

·Защита от отказов,

·Защита от злонамеренного влияния "чужой" программы.

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

·Защиту памяти,

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

·Два вида операций: привилегированные и ординарные, корректную реализацию прерываний и начального включения компьютера,

·Временное прерывание.

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

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

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

Защита от несанкционированного доступа обеспечивается использованием

Секретных слов (паролей). В этом случае каждому пользователю предоставляется определенные информационные и процедурные ресурсы (услуги), для использования которых требуется предъявления пс некоторого пароля, ранее зарегистрированного в пс этим пользователем. Другими слова, пользователь как бы «вешает замок» на выделенные ему ресурсы, «ключ» от которого имеется только у этого пользователя. Однако, в отдельных случаях могут быть предприняты настойчивые попытки взломать такую защиту, если защищенные ресурсы представляют для кого-то чрезвычайную ценность. Для такого случая приходится предпринимать дополнительные меры защиты от взлома защиты.

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

Другая разновидность такой защиты связана с защитой сообщений, пересылаемых по компьютерным сетям, преднамеренных (или злонамеренных) искажений. Такое сообщения может перехватываться на "перевалочных" пунктах компьютерной сети и подменяться другим сообщением от автора перехваченного сообщения. Такая ситуация возникает прежде всего при осуществлении банковских операций с использованием компьютерной сети. Путем подмены такого сообщения, являющего распоряжением владельца банковского счета о выполнении некоторой банковской операции деньги с его счета могут быть переведены на счет "взломщика" защиты (своеобразный вид компьютерного ограбления банка). Защиту от такого взлома защиты можно осуществить следующим образом. Наряду с функцией f определяющей компьютерную подпись владельца секретного слова x, которую знает адресат защищаемого сообщения (если только ее владелец является клиентом этого адресата), в пс определена другая функция stamp, по которой отправитель сообщения должен вычислить число s=stamp(x,r), используя секретное слово x и текст передаваемого сообщения r. Функция stamp также считается хорошо известной всем пользователям пс и обладает таким свойством, что по s практически невозможно ни восстановить число x, ни подобрать другое сообщение r с соответствующей компьютерной подписью.

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


Отладка = тестирование + поиск ошибок + редактирование.


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

Успех отладки в значительной степени предопределяет рациональная организация тестирования. При отладке отыскиваются и устраняются, в основном, те ошибки, наличие которых в пс устанавливается при тестировании. Как было уже отмечено, тестирование не может доказать правильность пс, в лучшем случае оно может продемонстрировать наличие в нем ошибки. Другими словами, нельзя гарантировать, что тестированием пc практически выполнимым набором тестов можно установить наличие каждой имеющейся в пc ошибки. Поэтому возникает две задачи. Первая: подготовить такой набор тестов и применить к ним пс, чтобы обнаружить в нем по возможности большее число ошибок. Однако, чем дольше продолжается процесс тестирования (и отладки в целом), тем большей становится стоимость пc. Отсюда вторая задача: определить момент окончания отладки пс (или отдельной его компоненты). Признаком возможности окончания отладки является полнота охвата пропущенными через нс тестами (т.е. Тестами, к которым применено пс) множества различных ситуаций, возникающих при выполнении программ пс, и относительно редкое проявление ошибок в пс на последнем отрезке процесса тестирования. Последнее определяется в соответствии с требуемой степенью надежности пc, указанной в спецификации его качества.


.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:

.Является многоцелевым, лаконичным и относительно низкоуровневым языком;

2.Подходит для решения большинства системных задач;

.Исполняется везде и на всём;

.Стыкуется со средой программирования unix.

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

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

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

·Сохранение действующего кода, написанного изначально на c и прямо перенесённого в c++;

·Исключение необходимости переучивания программистов, ранее изучавших c (им требуется только изучить новые средства c++);

·Исключение путаницы между языками при их совместном использовании («если два языка используются совместно, их различия должны быть или минимальными, или настолько большими, чтобы языки было невозможно перепутать»).

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

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

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


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


.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>

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

/* собственно текст программы */main( void )/* <-- заголовок главной функции */

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

/*исполняемые операторы -* */= 2.345; /*присвоим переменной num

Значение 2.345 */( " 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. Практическая часть


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


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



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



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



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


матрица - столбец неизвестных переменных. После нахождения неизвестных переменных x1, x2, …, xn, матрица



Становится решением системы уравнений и равенство a ? x = b обращается в тождество .

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

Метод Крамера основывается на двух свойствах определителя матрицы:

1.Определитель квадратной матрицы


a = ||aij||, i = 1,2, …,n, j = 1,2, …, n


равен сумме произведений элементов какой-либо строки (столбца) на их алгебраические дополнения:



P = 1,2, …,n, q = 1,2, …, n

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



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



Сложим все левые части уравнения системы, сгруппировав слагаемые при неизвестных переменных x1, x2, …, xn, и приравняем эту сумму к сумме всех правых частей уравнений:



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



И предыдущее равенство примет вид



Откуда



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



Складываем все уравнения системы, группируем слагаемые при неизвестных переменных x1, x2, …, xn и применяем свойства определителя:



Откуда



Аналогично находятся оставшиеся неизвестные переменные.

Если обозначить



То получаем формулы для нахождения неизвестных переменных по методу крамера



2.2 пример решения систем линейных уравнений методом крамера


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



2.2.1 техническое задание на учебный программный продукт

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

Основание для разработки

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

Назначение

Предназначена для решения систем линейных уравнений по методу крамера в различных технических дисциплинах, в частности, для преподаваемого курса «высшая математика» по теме «решение систем линейных уравнений».

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

Требование к программе или программному изделию

Требование к функциональным характеристикам

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

·Расчет определителей матрицы;

·Нахождение неизвестных переменных в системах линейных уравнений по методу крамера.

Для этих задач должны быть реализованы:

алгоритмы, обеспечивающие получение точного решения;

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

Требование к надежности

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

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

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

Требование к составу и параметрам технических средств.

Система должна работать на ibm совместимых персональных компьютерах.

Требование к информационной и программной совместимости

Система должна работать под управлением семейства windows xp и выше.

Требование к программной документации

Разрабатываемые система должна включать справочную информацию о работе системы и подсказки пользователю.

В состав сопровождающей документации должны входить:

Пояснительная записка.

Руководство пользователя.


.2.2 алгоритм решения задачи

1) ввод известных переменных линейных уравнений a1, a2, a3, b1, b2, b3, c1, c2, c3, s1, s2, s3;

) расчет главного определителя матрицы и 3 определителей матриц с замененными столбцами, расчет неизвестных коэффициентов x, y, z;

) вывод полученных данных;

) запрос на повтор операции;

) конец.


.2.3 список используемых идентификаторов

1. A1, a2, a3, b1, b2, b3, c1, c2, c3 - известные коэффициенты линейных уравнений;

. S1, s2, s3 - значения уравнений;

. Gopred, opred1, opred2, opred3 - определители искомых матриц;

. X, y, z - искомые величины, результат расчета.


.2.4 инструкция по использованию программы

1.Набор программы;

2.Компиляция программы;

4.Введем известные коэффициенты;

5.Печать значений gopred, opred1, opred2, opred3, а также x, y, z - результат расчета.


2.2.5 минимальная конфигурация

1.тип процессора intel pentium i (либо аналогичный по производительности).

.объем оперативного запоминающего устройства не менее 128 кв.

Требование к информационной и программной совместимости: система должна работать под управлением семейства windows 98 и выше.


.2.6 назначение ПО

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


2.2.7 документация на учебный программный продукт

Архитектурная документация:

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

В тз была представлена рекомендация к языку программирования для написания кода - с++. Указаний по поводу выбора системы программирования в тз не представлено, поэтому средство для написания, трансляции и отладки программы также может быть выбрано программистом. В данном случае выбран программный продукт visualc++ производства фирмы microsoft.

Результат тестирования программы:

Тестирование программы осуществлялось на компьютере с установленной операционной системой microsoft 7 service pack 1.

Технические характеристики компьютера:

Процессор: pentium(r) dual-core cpu t4300 @ 2.10 ghz;

Объем оперативного запоминающего устройства: 3 gb;

Далее представлен пример решенного задания на рис.2.2.1:


Рисунок 2.2.1 расчет контурных токов


Проверка ответа, вычисленного программой:

. Составим матрицу известных числовых коэффициентов, а также матрицу - столбец свободных членов:

??=(8, 3, ?1; 3, 12, 5; ?1, 5, 9), b=(23, 0, ?25).

. Рассчитаем определитель заданной матрицы, используя формулу:

|a| = ( (8*12*9) + (3*5*(-1)) + (3*5*(-1)) ) - ( ((-1)*(-1)*12) + (5*5*8) + (3*3*9)) = = 541;

. Заменим коэффициенты первого столбца в матрице а на значения из матрицы b:

??1=(23, 3, ?1; 0, 12, 5;?25, 5, 9).

. Вычислим определитель полученной матрицы: = ( (23*12*9) + (0*5*(-1)) + (3*5*(-25)) ) - ( ((-1)*(-25)*12) + (5*5*23) + +(0*3*9)) = 1234;

. Аналогично, заменяя 2 и 3 столбец в матрице а, вычислим определители a2=339 и a3=-1554.

. Используя рассчитанные определители, найдем значения неизвестных переменных x, y, z, используя конечные формулы для нахождения неизвестных по методу крамера: =??1/??=1234/541=2.28 =??2/??=339541=0.626=??3/??=?1554/541=?2.872

. Конец.


Заключение


В предоставленной курсовой работе было решено поставленное техническое задание: решение системы линейных уравнений методом Крамера.

Также, в процессе выполнения этих заданий были выполнены следующие задачи:

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

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

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

Далее следовало непосредственно выполнение задания курсовой работы, которое заключалось в первую очередь - в выборе программною обеспечения для написания программы, выполняющей решение задачи. В качестве программного обеспечения был выбран visual c++ производства компании microsoft, так как я посчитал его наиболее практичным. После этого был разработан алгоритм для задачи, что являлось немаловажным условием, так как любая программа действует по определенному алгоритму, который обеспечивает ее надежность и правильное функционирование. Следующим шагом было непосредственно написание программы в visual c++ производства фирмы microsoft, то есть приспособление существующего алгоритма к языку программирования с++, что являлось решающей стадией и в свою очередь проверкой правильности выполненных действий. Последней стадией было тестирование программы, которое осуществлялось путей ввода данных в программу и проверка проверенных значений путем сверки их со значениями, полученными вручную.

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

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

Литература


1.Т.А. Павловская с++ программирование на языке высокого уровня, санкт-петербург, ид «питер», 2009

2.Дэвис стефан р. С++ / 4-е издание: пер. С англ.:- м.: издательский дом «вильямс»,2003

.В. Камаев «технология программирования»

.А.П. Рябушко «сборник индивидуальных заданий по высшей математике: учебное пособие», высшая школа, 1 часть, 2006

.Н. Культин «с++ в задачах и примерах» издательство бхв - петербург, 2008

.Используемые интернет-источники: #"justify">Приложение


Блок-схема алгоритма решения системы линейных уравннеий методом крамера