Автор Анна Евкова
Преподаватель который помогает студентам и школьникам в учёбе.

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

Содержание:

Введение

Курсовая работа представляет собой теорию по основам программирования где мы изучим основы работы с языком программирования С++ и написание программного кода на языке С++. В ней будут рассмотрены задания: Попадает ли точка в заштрихованную фигуру, поиски переменных, различных массивов и индексов, производится вычисления в уравнениях. Для выполнения этих задач использовалась программа 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 показаны результаты логической операции И для различных значений операндов.

Таблица 1.1 – Результаты логической операции И

операнд1

операнд2

операнд1 && операнд2

1

1

1

1

0

0

0

1

0

0

0

0

Если значение первого операнда равно нулю, то второй операнд не вычисляется.

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

Таблица 1.2 – Результаты логической операции ИЛИ

операнд1

операнд2

операнд1 || операнд2

1

1

1

1

0

1

0

1

1

0

0

0

Логическая операция НЕ (!) вырабатывает значение 1 (истинно), если операнд имеет значение ложно ( 0 ) и наоборот.

Интуитивно логические выражения наподобие "2<7", "1.2!=3.7" и "6>=9" воспринимаются человеком как утверждения, которые могут быть "истинными (true)" или "ложными (false)" (логическая операция "!=" означает "не равно"). Допускается объединение нескольких подобных выражений в более сложное выражение с помощью логических операций "&&" ("И"), "||" ("ИЛИ") и "!" ("НЕ").

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

Таблица 1.3. – Примеры логических выражений

Выражение

Значение выражения

(6 <= 6) && (5 < 3)

(6 <= 6) || (5 < 3)

(5 != 6)

(5 < 3) && (6 <= 6) || (5 != 6)

(5 < 3) && ((6 <= 6) || (5 != 6))

!((5 < 3) && ((6 <= 6) || (5 != 6)))

false

true

true

true

false

true

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

!

>>= <<=

= = !=

&&

||

Составные логические выражения обычно применяются в качестве условий в операторах if и в циклах for. Например:

...

...

if ( total_test_score>= 50 &&total_test_score< 65 )

cout<< "Вы прошли тест со средним результатом.\n";

...

...

Поскольку в Си++ истинное значение ("true") представляется в виде целого числа 1 (большинство компиляторов любое положительное число считают истинным значением), а ложное значение ("false") – в виде значения 0, то это может привести к ошибкам. Например, легко напечатать "=" вместо "= =". Поэтому фрагмент программы

...

if ( number_of_people = 1 )

cout<< "Естьтолькоодинчеловек.\n";

...

всегда будет выводить сообщение "Есть только один человек", даже если до оператора if переменная "number_of_people" была больше 1.

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

Задание 3.

Даны два вещественных числа x и y. Определить, попадает ли точка с координатами x, y в заштрихованную область.

1

y

1

-1

1

x

-1

-1

  • Вводим исходные данные x и y
  • Проверяем попадает ли точка в область ограниченную линиями .
  • Если попадает, то проверяемпопадает ли в область
  • Если точка попала в указанную область, товыводим на экран «Точка попадает»
  • В противном случае «точка не попадает»

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

x, y – Координаты

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

#include"iostream"

Usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "russian");

floatx, y;

cout<<"Введите координату x = ";

cin>> x;

cout<<"Введите координату y = ";

cin>>y;

//проверка

if (y<= 1 - x&&y<= x + 1)

{

if ((y <= 0) && (pow(x, 2) + pow(y, 2) <= 1))

{

cout<<"Точка попадает"<<endl;

}

elsecout<<"Точка не попадает \n";

}

else

{

cout<<"Точка не попадает"<<endl;

}

system("pause");

}

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

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

Задание 4.

Разработать программу в соответствии с заданием. Элементы окружности пронумерованы следующим образом: 1 – радиус R, 2 – диаметр, 3 – длина, 4 – площадь круга. Дан номер одного из этих элементов и его значение. Вывести значения остальных элементов данной окружности (в том же порядке).

Словесное описание алгоритма.

  • Выбираем элемент окружности (a).
  • Ввод исходных данные (aa)
  • В зависимости от выбранного элемента окружности будут производится соответствующие подсчеты для нахождения оставшихся элементов окружности.
  • Результат выводим на экран.

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

R – Радиус

D – Диаметр

P – Длина

S - Площадь круга

a- Элемент окружности

aa-Значениепараметра а

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

#include"iostream"

Usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "russian");

int a;

cout<<"Выбирите 1н из 4 вариантов"<<endl;

cin>> a;

floataa;

cout<<"Введите значение параметра а \n";

cin>>aa;

switch (a)

{

case 1:

cout<<"Ответ: Радиус (R) = "<<aa<<endl;

cout<<"Ответ: Диаметр (D) = "<<aa*2 <<endl;

cout<<"Ответ: Длина (P) = "<< 2 * 3.14*aa<<endl;

cout<<"Ответ: Площадь круга (S) = "<< 3.14*pow(aa, 2) <<endl;

break;

case 2:

cout<<"Ответ: Диаметр (D) = "<<aa<<endl;

cout<<"Ответ: Радиус (R) = "<<aa/2 <<endl;

cout<<"Ответ: Длина (P) = "<< 2 * 3.14*(aa/2) <<endl;

cout<<"Ответ: Площадь круга (S) = "<< 3.14*pow((aa/2), 2) <<endl;

break;

case 3:

cout<<"Ответ: Длина (P) = "<<aa<<endl;

cout<<"Ответ: Радиус (R) = "<<aa/3.14/2 <<endl;

cout<<"Ответ: Диаметр (D) = "<<aa/3.14 <<endl;

cout<<"Ответ: Площадь круга (S) = "<< 3.14*pow((aa / 3.14 / 2), 2) <<endl;

break;

case 4:

cout<<"Ответ: Площадькруга (S) = "<<aa<<endl;

cout<<"Ответ: Радиус (R) = "<<sqrt(aa / 3.14) <<endl;

cout<<"Ответ: Диаметр (D) = "<< (sqrt(aa / 3.14))*2 <<endl;

cout<<"Ответ: Длина (P) = "<< 2 * 3.14*(sqrt(aa / 3.14)) <<endl;

break;

}

system("pause");

}

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

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

3 Программирование программы цикличных структур

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

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

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

· цикл for

· цикл while

· цикл do…while

Цикл for

Цикл со счетчиком позволяет выполнить один или несколько операторов определенное количество раз. Синтаксис данного цикла:

for (начальная_инструкция; условие; выражение)

{

инструкции;

}

Семантика (смысл) цикла for такова, что сначала выполняется начальная_инструкция - она инициализует переменную, используемую в цикле. Затем проверяется условие. Если оно истинно, то выполняются инструкции, вычисляется выражение, и управление передается обратно в начало цикла for с той разницей, что начальная_инструкция уже не выполняется. Это продолжается до тех пор, пока условие не станет ложно, после чего управление передается следующей_инструкции. Каждый проход цикла называется итерацией цикла.

Начальной_инструкцией может быть просто объявление или же сложное выражение либо инструкция.

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

rez=0;

for(inti=1; i<=10;++i)

rez+=i;

Когда инструкция for начинает выполняться, управляющей переменной i задается начальное значение 1. Затем проверяется условие продолжения цикла i <= 10. Поскольку начальное значение i равно 1, это условие удовлетворяется, так что оператор тела инструкции суммирует к значению переменной rez, равному 0, значение счетчика i, равное 1. Затем управляющая переменная i увеличивается на единицу в выражении ++i и цикл опять начинается с проверки условия его продолжения. Поскольку значение i теперь 2, предельная величина не превышена, так что программа снова выполняет тело цикла. Этот процесс продолжается, пока управляющая переменная i не увеличится до 11 -- это приведет к тому, что условие продолжения цикла нарушится и повторение прекратится. Выполнение программы продолжится с первого оператора, расположенного после цикла for.

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

for (j = 0,i = 1; i <= 10; ++i)

j += i;

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

for(i=0,j=0;i<3,j<`4;i++,j+=2)

cout<<i*j;

Данный цикл проведет две итерации, после которых значение счетчика i станет равным 2, а значение счетчика j = 4. При этом условие для второго счетчик не выполняется (т.к. j строго должен быть меньше 4) и цикл будет прерван. На экране будет выведено 02.

В цикле for может присутствовать локальное объявление переменной управления циклом, как в следующем примере.

for (inti = 0; i< N; ++i)

rez+= i*i;

Целая переменная i теперь является объявленной в программе. Это может вносить путаницу, поэтому лучше объявлять все программные переменные в начале блока.

Любое или все выражения в инструкции for могут отсутствовать, но две точки с запятой должны быть обязательно. Если пропущена начальная_инструкция, то никакая инициализация в цикле for не выполняется. Если пропущено выражение, то не производится приращение, а в случае отсутствия условия не производится проверка. Есть специальное правило для тех случаев, когда пропущено условие; в такой ситуации компилятор будет считать условие выполненным всегда. Так, цикл for в следующем фрагменте бесконечен.

for (i = 1, rez = 0 ; ; rez += i++ )

cout<<rez<<endl;

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

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

Если условие продолжения цикла с самого начала не удовлетворяется, то операторы тела инструкции for не выполняются и управление передается оператору, следующему за for.

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

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

Давайте рассмотрим несколько вариантов применения цикла for:

a) Изменение управляющей переменной от 100 до 1 с шагом -1 (с уменьшением на 1).

for (int i = 100; i >= 1; i--)

Распространенная ошибка при программировании, это использование несоответствующей операции отношения в условии продолжения цикла при счете циклов сверху вниз (например, использование i <= 1 при счете циклов сверху до 1 не включая).

b) Изменение управляющей переменной от 7 до 77 с шагом 7.

for (int i = 0; i <= 77; i += 7)

c) Изменение управляющей переменной от 20 до 2 с шагом -2.

for (int i = 20; i >= 2; i -= 2)

d) Изменение управляющей переменной в следующей последовательности:

2, 5, 8, 11, 14.

for (int j = 2;j <= 14; j += 3)

Циклwhile

Когда мы не знаем, сколько итераций должен произвести цикл, нам понадобится цикл while или do...while. Циклический алгоритм while - является циклом с предисловием, а do…while - цикл с постусловием.

Оператор цикла while или цикл while - цикл, повторяющий одно и то же действие, пока условие продолжения цикла while остаётся истинным.

Синтаксис цикла while в C++ выглядит следующим образом.

// форма записи цикла while

while (/*условие продолжения цикла while*/)

{

/*блок операторов*/;

/*управление условием*/;

}

Условие продолжения цикла должно быть истинно - «true», как только условие стало ложным, выполняется выход из цикла. Вначале вычисляется выражение. Если результат отличен от нуля (true), тогда выполняется оператор и управление переходит обратно к началу цикла while. Это приводит к выполнению тела цикла while, а именно оператора, который будет выполняться до тех пор, пока выражение не станет равным нулю (false). Фигурные скобки могут опускаться в том случае, если тело цикла -- это один оператор. Но как правило в цикле выполняется несколько операторов, так как кроме выполнения полезного действия необходимо делать условие цикла while ложным, иначе цикл будет бесконечным, а это, в свою очередь, приведет к зависанию программы.

Если условие цикла ложно - управление передается следующему оператору. Таким образом, цикл может выполняться ноль или более раз.

Рассмотрим применение цикла while на примере движения автомобиля. На псевдокоде, то это будет так: Пока скорость движения автомобиля меньше 60 км/ч, продолжать наращивать скорость.

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

Рассмотрим фрагмент кода на C++ с циклом while решающим поставленную задачу.

1 intspeed = 5; // начальная скорость автомобиля

2 while( speed< 60 ) // заголовок цикла while

3 speed += 10; // телоцикла

Цикл do…while

Цикл do…while отличается от цикла while тем, что в do…while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Из-за такой особенности do…while называют циклом с «постусловием». Таким образом, если условие do…while заведомо ложное, то хотя бы один раз блок операторов в теле цикла do…while выполнится. В итоге do…while отличается от цикла while структурой. Если в while сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do…while работает с точностью да наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do…while, хотя бы раз, выполнится.

Синтаксис цикла do…while выглядит следующим образом:

// форма записи оператора цикла dowhile:

do // началоцикла do while

{

/*блок операторов*/;

}

while (/*условие выполнения цикла*/); // конец цикла dowhile

В начале цикла do…while пишется зарезервированное слово do, после идут фигурные скобки, которые можно опускать, в случае использования одного оператора в теле цикла do…while. После закрывающей фигурной скобки, обозначающей конец тела цикла dowhile, стоит условие цикла do…while, после которого обязательно нужно ставить точку с запятой. Рассмотрим программу с циклом do…while, которая выполняет некоторые транзакции с денежным счётом в банке. На рисунке 6 отображен код данной программы:

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

Задание 5.

Разработать программу вычисления значений функции. Интервал изменения переменных ввести с клавиатуры. Шаг изменения переменных: .

  • Ввод исходных данные xn-(начальное),xk-(конечное), zn-(начальное), zk-(конечное).
  • Вычисление значения переменной y (выражение).
  • Результат выводим на экран

3. Описание переменны

xn, zn- начальные значения переменныхx и z.

xk, zk - конечные значения переменных x и z

x – счетчик цикла

z –счетчик цикла

y-Значений функции

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

#include"iostream"

Usingnamespacestd;

intmain()

{

setlocale(LC_ALL, "Russian");

intxn, xk;

doublezn, zk;

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

cin>>xn;

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

cin>>xk;

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

cin>>zn;

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

cin>>zk;

int x;

double z, y;

for (x = xn; x <= xk; x++)

{

z = zn;

do

{

y = exp(x) / (1 + (fabs(x+sin(z))));

cout<<"x="<< x <<" z="<< z <<" y="<< y <<"\n";

z = z + 0.5;

} while (z <= zk);

}

system("pause");

}

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

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

4. Работа с массивами

Массив — это набор однотипных данных. Например, вы можете хранить все носки в одном месте. Для этого вы используете полку. В C++ множество элементов хранятся в массивах.

Для лучшего понимания давайте рассмотрим следующею картинку:

По ней мы можем понять следующее:

  • Каждый массив должен иметь свое название.
  • Он может в себе содержать от одного элемента до бесконечности (это в теории, на практике размер массива ограничивается памятью компьютера).
  • Все элементы должны быть одного типа. Так, например, вы не можете в одном массиве хранить переменные типа int и типа double.

Теперь, когда вы понимаете концепцию массива, мы можем перейти к его реализацией на С++.

Элементы массива и индексация

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

В примере выше первым элементом в нашем массиве является testResult[0]. Второй — testResult[1]. Десятый — testResult[9]. ПоследнийэлементвмассивеtestResult — testResult[29]. Хорошо, что уже не нужно отслеживать и помнить кучу разных (хоть и похожих) имен переменных – для доступа к разным элементам меняется только индекс.

Важно: В отличие от повседневной жизни, где мы обычно начинаем считать с 1, в массивах и в C++ отсчет всегда начинается с 0!

Для массива длины N элементы массива пронумерованы от 0 до N-1! Это называется диапазоном массива.

Массив можно сделать из любого типа данных.

Описание синтаксиса

Массив создается почти так же, как и обычная переменная. Для хранения десяти фамилий нам нужен массив, состоящий из 10 элементов. Количество элементов массива задается при его объявлении и заключается в квадратные скобки.

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

Для объявления массива необходимо указать две вещи (помимо имени): тип и размер массива:

intmy_array[ 6 ];

Данная строка объявляет массив из шести целочисленных значений. Обратите внимание, что размер массива заключен в квадратные скобки после имени массива.

Для доступа к элементам массива используются квадратные скобки, но на этот раз вы указываете индекс элемента, который хотите получить:

my_array[ 3 ];

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

Массивы в C++Массивы в C++

my_array ссылается на весь массив целиком, в то время как my_array[0] только на первый элемент, my_array[3] — на четвертый. Обратите внимание, что индексация элементов в массиве начинается с 0. Таким образом Обращение к элементам массива всегда будет происходить со смещением, например:

intmy_array[ 4 ]; // объявление массива

my_array[ 2 ] = 2; // установить значение третьего (именно третьего!) равным 2

5. Объявление многомерных массивов в C++

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

Для объявления двумерного массива необходимо указать размерность двух измерений:

inttic_tac_toe_board[3][3];

Визуализация массива с индексами его элементов:

Массивы в C++

Массивы в C++

Для доступа к элементам такого массива потребуется два индекса — один для строки второй для столбца. На изображении показаны нужные индексы для доступа к каждому из элементов.

Использование массивов

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

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

#include <iostream>

usingnamespacestd;

intmain() {

    intarray[8][8]; // Объявляем массив, который выглядит как шахматная доска

    for(inti = 0; i< 8; i++) {

        for(intj = 0; j < 8; j++) {

            array[i][j] = i * j; // Задаем значения каждого элемента

        }

    }

    cout<< "Multiplication table:\n";

    for(inti = 0; i< 8; i++) {

        for(intj = 0; j < 8; j++) {

            cout<< "[ "<<i<< " ][ "<< j << "] = ";

            cout<< array[i][j] << " ";

            cout<< "\n";

        }

    }

}

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

Задание 6. Отсортировать элементы массива по убыванию

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

  • Заполняем массив(mas) данными.
  • Проходим по всем элементам массива.
  • Вывод на экран массива.
  • Сортировка массива.
  • Результат выводим на экран.

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

mas - Массив

max- индекс максимального элемента

n-размерность массива

i,j,in,s-счётчикмассива

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

#include"iostream"

Usingnamespacestd;

int main()

{

setlocal(LC_ALL , "Russian");

constant n=5;

int mas[n], i, j, in, s;

cout<<"Введите элементы массива \n";

for (i=0 ; i< n ; i++)

{

cout<< "mas(" <<i<< ") = ";

cin>>mas [i];

}

cout<<"\n\n Ваш массив до сортировки: \n" ;

for (i=0; i<n; i++)

cout<< "mas(" <<i<< ") = " << mas[i] << "\n";

for(j =0; j < n; j++)

{

in =j;

for (i = in + 1; i< n; i++)

if (mas[i] > mas[in])

in = i;

s= mas[j];

mas[j] = mas[in];

mas[in] = s;

}

cout<<"\n\n Массив после сортировки: \n";

for (i = 0 ; i< n; i++)

cout<< "mas(" <<i<< ") = " << mas[i] << "\n";

system("pause");

}

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

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

Заключение

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

Список использованных источников

1. Александреску, А. Язык программирования D / А. Александреску. — М.: Символ, 2013. — 536 c.

2. Александреску, А. Язык программирования D / А. Александреску. — СПб.: Символ-плюс, 2014. — 544 c.

3. Голицына, О.Л. Языки программирования: Учебное пособие / О.Л. Голицына, Т.Л. Партыка, И.И. Попов. — М.: Форум, НИЦ ИНФРА-М, 2013. — 400 c.

4. Страуступ, Б. Язык программирования С++. Специальное издание / Б. Страуступ. — М.: Бином, 2015. — 1136 c.

5. Ашарина, И.В. Основы программирования на языках С и С++: Курс лекций для высших учебных заведений / И.В. Ашарина. — М.: Гор.линия-Телеком, 2012. — 208 c.

6. Microsoft, Руководство пользователя по VisualStudio, https://msdn.microsoft.com/ru-ru/library/dd831853.aspx.