Файл: Основные структуры алгоритмов:сравнительный анализ и примеры их использования.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 05.04.2023

Просмотров: 170

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

Введение

Курсовая работа представляет собой теорию по основам программирования где мы изучим основы работы с языком программирования С++ и написание программного кода на языке С++. В ней будут рассмотрены задания: Попадает ли точка в заштрихованную фигуру, поиски переменных, различных массивов и индексов, производится вычисления в уравнениях. Для выполнения этих задач использовалась программа VisualStudio 2015. Так же под каждым заданием будет добавлено изображение с выполнением проверки на правильность написания программы и выводом ответа.

1. Программирование линейных алгоритмов

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

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

Свойства алгоритма:

Однозначность алгоритма: Это единственность толкования исполнителем правил и порядка выполнения действий. Для этого алгоритм должен быть записан командами из системы команд исполнителя.

Конечность алгоритма – обязательность завершения каждого из действий и всего алгоритма в целом.

Результативность алгоритма, предполагающая, что его выполнение завершится получением определённых результатов.

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

Правильность алгоритма: Это способность алгоритма выдавать правильные результаты решения поставленной задачи.


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

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

Задание 1.

Составить программу вычисления значения функции. Исходные значения ввести с клавиатуры.

Словесный алгоритм:

  • Ввод исходных данные x, z, a.
  • Вычисление значения переменной b (выражение).
  • Вывод результата на экран.

Описание переменных

x,z,a – Исходные

b–Выражение

Листинг программы

#include"iostream"

usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "russian");

floatx, z, a, b;

cout<<"Введите значение x=";

cin>> x;

cout<<"Введите значение z=";

cin>> z;

cout<<"Введите значение a=";

cin>> a;

b = ((pow(x, 3) + z) / (cos(pow(x, 2) + 1))) + tan(pow(x, 2)) - sqrt(sin(x) - a) + (exp(x) / 3 * pow(x, 2));

cout<<"Ответ b="<< b <<endl;

system("pause");

}

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

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

Задание 2.

Решить задачу для индивидуального варианта.

Напряжение на концах участка цепи , сила тока в проводнике . Каким должно быть напряжение , чтобы в том же проводнике сила тока была ? Определить сопротивление участка цепи.

Словесный алгоритм:

  • Вводим -напряжение цепи, -Силу тока (исходных данные).
  • Находим напряжение , определяем сопротивление участка цепи -и
  • Вывод результата на экран.

Описание переменных

u1, u2 –Напряжение цепи

i1, i2 –Силатока

r1, r2 – Сопротивление участка цепи

Листинг программы

#include"iostream"

Usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "russian");

float u1, u2, i1, i2, r1, r2;

cout<<"Введите значение u1=";

cin>> u1;

cout<<"Введите значение i1=";

cin>> i1;

cout<<"Введитезначение i2=";

cin>>i2;

u2 = (u1*i2 / i1);

cout<<"Ответ =u2 "<<u2 <<endl;

r1 = (u1 / i1);

cout<<"Ответ =r1 "<<r1 <<endl;

r2 = (u2 / i2);

cout<<"Ответ =r2 "<< r2 <<endl;

system("pause");

}

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

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


2. Программирование разветвляющихся алгоритмов

Вычислительный процесс называется разветвляющимся, если для его реализации предусмотрено несколько направлений (ветвей). Каждое разветвление является следствием проверки какого-либо условия, при выполнении которого вычисления идут по одной ветви, а при невыполнении – по другой.

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

Условный оператор

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

Краткая форма условного оператора записывается следующим образом:

??<условие>

<оператор>;

где <условие> — это выражение логического типа, про которое можно сказать, что оно «истина» или «ложь» (фактически, это вопрос, предполагающий только 2 варианта ответа — «Да» или «Нет»), В зависимости от <условия> (от ответа на вопрос) происходит дальнейшее выполнение программы.

Описание работы краткой формы оператора. Оператор И” в краткой форме работает следующим образом:

  • • вычисляется выражение, записанное в условии (формулируется ответ на вопрос, записанный в условии);
  • • если получили результат — «истина» (не равно 0 — ответ «Да»), то выполняется <оператор>;
  • • если «ложь» (равно 0 — ответ «Нет»), то выполняется следующая за условным оператором строка программы.

На схеме алгоритма краткая форма j представлена следующим образом

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

- условный оператор (if...else);

- переключатель (switch).

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

Условный оператор может иметь одну из двух форм: или полную форму – if … else, или сокращенную форму – if…(т.е. без else).

В случае полной формы синтаксис условного оператора имеет вид:

if (выражение-условие)


оператор1

else

оператор2

Такой условный оператор работает следующим образом. Вычисляется выражение-условие, и, если оно истинно (т.е. значение выражения отлично от нуля), то выполняется оператор1, а если выражение-условие ложно (значение выражения равно нулю), то выполняется оператор2.

Переключатель switch

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

Переключатель имеет следующий синтаксис:

switch (селектор)

{

caseконстантное_выражение_1 :<операторы1>

...

...

...

caseконстантное_выражение_N :<операторыN>

default :<операторы>

}

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

caseконстантное_выражение:

Если значение селектора не совпадает ни с одним из константных выражений, то выполняется переход к оператору, отмеченному меткой default. В каждом переключателе должно быть не больше одной метки default, однако эта метка может и отсутствовать. В случае отсутствия метки default при несовпадении селектора ни с одним из константных выражений, помещаемых вслед за case, в переключателе не выполняется ни один из операторов.

Сами по себе метки caseконстантное_выражение_j: и default: не изменяют последовательности выполнения операторов. Если не предусмотрены переходы или выход из переключателя (который выполняется с помощью оператора break), то в переключателе последовательно выполняются все операторы, начиная с той метки, на которую передано управление.


Условная операция

В отличие от других операций языка С++ условная операция используется с тремя операндами, поэтому она называется тернарной. В изображении условной операции два размещенных не подряд символа ' ? ' и ' : ', которые связывают три операнда-выражения:

выражениие_1?выражение_ 2:выражение_ 3

Первым вычисляется значение выражения_1. Если оно истинно, т.е. не равно нулю, то вычисляется значение выражения_2, которое становится результатом условной операции. Если при вычислении выражения_1 получится 0, то в качестве результата берется значение выражения_3. Классический пример:

х < 0 ? -х : х ;

Данное выражение возвращает абсолютное значение переменной х.

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

Логические значения и выражения

Язык Си++ унаследовал от языка Си соглашение, согласно которому целочисленные значения и, соответственно, арифметические выражения, дающие целочисленный результат, могут в зависимости от контекста трактоваться как логические, если они встречаются там, где предусмотрено наличие логического значения (выражения-условия в условных операторах и операторах цикла). Целое значение 0 считается логическим "false" (ложное значение), а ненулевое целое – логическим "true" (истинным значением). Кроме того, в языке Си++ был еще добавлен специальный логический тип bool. Переменные типа bool могут принимать значения true и false, которые при необходимости автоматически преобразуются в выражениях в значения 1 и 0. Тип данных bool можно использовать в программах точно так же, как и другие базовые типы, такие как int, char, float, double и др. (например, для описания переменных, принимающих логические значения, или для создания функций, возвращающих значения типа bool).

В языке С++ определены следующие логические операции:

&&И

|| ИЛИ

! НЕ

Операции && и || являются бинарными, а операция ! – унарной. Типы первого и второго операндов могут быть различными. Операнды логических выражений вычисляются слева направо. Если значения первого операнда достаточно, чтобы определить результат операции, то второй операнд не вычисляется.

Приоритет у логических && и || операций ниже, чем у операций отношения.

Логическая операция И(&&) вырабатывает значение 1 (истина), если оба операнда имеют ненулевое значение. Если один из операндов равен 0 (ложь), то результат также равен нулю. В табл. 1.1 показаны результаты логической операции И для различных значений операндов.