2. Циклические алгоритмы на языке С++


Download 69.38 Kb.
bet1/3
Sana27.01.2023
Hajmi69.38 Kb.
#1131841
  1   2   3
Bog'liq
Создание в C приложений для циклических процессов


Создание в C++ приложений для циклических процессов
План:
Введение

  1. Особенности программирования циклических алгоритмов на С++

2.Циклические алгоритмы на языке С++


3.Циклы в языке С++
Заключение
Список литературы

Особенности программирования циклических алгоритмов на С++
Описание особенностей программирования циклических алгоритмов на С++
Под циклом понимается многократное выполнение одних и тех же операторов при различных значениях промежуточных данных. Число повторений может быть задано в явной или неявной форме.
Для организации повторений в языке C++ предусмотрены три различных оператора цикла.
Оператор
Do < операторы >
while ( < условие > );
организует повторение операторов, помещенных между ключевыми словами do и while, до тех пор, пока выполнится<условие>=true, после чего управление передается следующему за циклом оператору.
Оператор
while ( < условие > ) {< операторы >}
организует повторение операторов, помещенных между { и }, до тех пор, пока не выполнится<условие>=false. Заметим, что если<условие>=false при первом входе, то<операторы> не выполнятся ни разу, в отличие от do..while, в котором они выполнятся хотя бы один раз.
Оператор
for (i=i1; i<=i2; i++)
{< операторы >}
организует повторение операторов при нарастающем изменении переменной цикла i от начального значения i1 до конечного i2 с шагом “единица”. Заметим, что если i2>i1, то<операторы> не выполнятся ни разу
Операторы цикла (таблица 1) используются для организации повтора в программе определенных действий.












Конструкция

Пример




Циклы с фиксированным числом повторений







for (инициализация; условие_ выполнения; изменение)
{
блок_инструкций (тело цикла);
}
Инициализация - инструкция инициализации счетчика циклов.
Условие_выполнения - выражение, значение которого определяет условие, при котором выполняются инструкции цикла (инструкции цикла выполняются до тех пор, пока условие_выполнения истинно, т. е. не равно нулю).
Изменение - инструкция изменения параметров цикла.

for (i=1;i<=10; i++)
{
s=2*i;
printf(“i=%d, s=%d\n”,i,s);
}




Циклы с постусловием







do
{
блок_инструкций (тело цикла);
}
while(условие_повторения);
Сначала выполняется тело цикла, затем проверяется значение выражения условие_повторения, и если условие истинно, то инструкции цикла (тело цикла) выполняются до тех пор, пока условие_повторения не станет ложным.

i=0;
do
{
s=2*i;
printf(“i=%d, s=%d\n”,i,s);
i++;
}
while(i<=10);




Циклы с предусловием







while(условие_выполнения)
{
блок_инструкций (тело цикла);
}
Инструкции цикла (тело цикла) выполняются до тех пор, пока условие_выполнения не станет ложным.

i=0;
while(i<=10)
{
s=2*i;
printf(“i=%d, s=%d\n”,i,s);
i++;
}













2. Задание
программирование циклический алгоритм оператор
Написать программу приближенного вычисления интеграла методом трапеций.
3. Блок-схема алгоритма
4. Листинг программы
#include
#include
#include
#define PI 3.1415926536
using namespace std;
void main(){
setlocale(LC_ALL, "Russian");
cout « "Программа вычисления интеграла sin(x) / x" « endl;
int n = 100;
double a = 0, b = PI;
double h = (b - a) / n;
double step = PI / n;
double sum = 0, x = step;
for (int i = 1; i < n; ++i, x += step)
sum += sin(x) / x;
sum *= step;
cout « "Значение интеграла: " « sum « endl;
system("pause");
5. Результаты тестирования программы
В обычной повседневной жизни повторяющиеся действия встречаются довольно часто, выполняя их, мы тратим время, а как то упростить эти действия не получается. В программировании, в отличии от повседневной жизни, существуют циклические алгоритмы, которые обеспечивают выполнение повторяющихся действий. Этим облегчается написание программ и сокращается объем кода. В данной курсовой работе я рассмотрю основные варианты циклических алгоритмов и исследую способы работы с ними.
В мире существует громадное количество языков программирования, но большинство из них различается только синтаксисом и методом компиляции. Циклические алгоритмы в них несут одинаковую смысловую нагрузку и практически не отличаются по методам применения. Поэтому для данной курсовой работы будет использоваться язык программирования С++, как наиболее распространенный и чаще всего используемый.
Цель и задачи
Выбрав эту тему для курсовой работы, ставлю перед собой задачу, рассмотреть методы и условия применения циклических алгоритмов. Обработка массивов информации является одной из основных задач программирования и наша цель исследовать работу с массивами с помощью циклов.

Циклические алгоритмы на языке С++


Довольно часто встречаются задачи требующие повторения определенных действий. Причем повторения происходят до достижения, какого либо условия, либо некоторое количество раз. Например, забивание гвоздя, бьем по гвоздю пока не будет забит - циклический алгоритм с условием или прикручиваем колесо к машине, где операция «прикрутить болт» встречается 6 раз - это циклический алгоритм со счетчиком. Цикл -- многократное прохождение по одному и тому же коду программы. Циклы необходимы программисту для многократного выполнения одного и того же кода, пока истинно какое-то условие. Если условие всегда истинно, то такой цикл называется бесконечным, у такого цикла нет точки выхода.
В языке программирования С++ существуют такие циклы:
· цикл for
· цикл while
· цикл do…while
Цикл for
Цикл со счетчиком позволяет выполнить один или несколько операторов определенное количество раз. Синтаксис данного цикла:
for (начальная_инструкция; условие; выражение)
{
инструкции;
}
Семантика (смысл) цикла for такова, что сначала выполняется начальная_инструкция - она инициализует переменную, используемую в цикле. Затем проверяется условие. Если оно истинно, то выполняются инструкции, вычисляется выражение, и управление передается обратно в начало цикла for с той разницей, что начальная_инструкция уже не выполняется. Это продолжается до тех пор, пока условие не станет ложно, после чего управление передается следующей_инструкции. Каждый проход цикла называется итерацией цикла.
Начальной_инструкцией может быть просто объявление или же сложное выражение либо инструкция.
Цикл for является итерационной инструкцией, обычно используется с увеличивающейся либо уменьшающейся переменной. Например, в следующем коде инструкция for используется для сложения целых чисел от 1го до 10и:
rez=0;
for(int i=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 станет равным 2, а значение счетчика j = 4. При этом условие для второго счетчик не выполняется (т.к. j строго должен быть меньше 4) и цикл будет прерван. На экране будет выведено 02.
В цикле for может присутствовать локальное объявление переменной управления циклом, как в следующем примере.
for (int i = 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)
e) Изменение управляющей переменной в следующей последовательности:
99, 88, 77, 66, 55, 44, 33, 22, 11, 0.
for (int j = 99; j >= 0; j -= 11)
Если мы скомпилируем этот код и запустим программу, то она покажет нам ответ: 500500. Это и есть сумма всех целых чисел от 1 до 1000. Если считать это вручную, понадобится очень много времени и сил. Цикл выполнил всю рутинную работу за нас.
Ниже на рисунке 1 отображен исходный код программы, считающей сумму всех целых чисел от 1 до 1000.

Рисунок 1- цикл for
Заметьте, что конечное значение счетчика я задал нестрогим неравенством ( <= -- меньше либо равно), поскольку, если бы я поставил знак меньше, то цикл произвел бы 999 итераций, т.е. на одну меньше, чем требуется. Это довольно важный момент, т.к. здесь часто допускают ошибки, особенно при работе с массивами. Значение шага цикла я задал равное единице. i++ -- это тоже самое, что и i = i + 1.
Исполнение любого цикла включает первоначальную инициализацию переменных цикла, проверку условия выхода, исполнение тела цикла и обновление переменной цикла на каждой итерации. Кроме того, большинство языков программирования предоставляют средства для досрочного управления циклом, например, операторы завершения цикла, то есть выхода из цикла независимо от истинности условия выхода (в языке Си - break) и операторы пропуска итерации (в языке Си - continue).
Различают следующие виды циклов.
1. Безусловные циклы. Циклы, выход из которых не предусмотрен логикой программы. Специальных синтаксических средств для создания бесконечных циклов, ввиду их нетипичности, языки программирования не предусматривают, поэтому такие циклы создаются с помощью конструкций, предназначенных для создания обычных (или условных ) циклов. Например, В языке С используется цикл for(;;) с незаполненными секциями
2. Условные циклы. Это циклы, выполнение которых управляется некоторым условием, проверяемым в начале или конце тела цикла. Соответственно, условные циклы бывают с предусловием и с постусловием. Цикл с предусловием - цикл, который выполняется пока истинно некоторое условие, указанное перед его началом. Это условие проверяется до выполнения тела цикла, поэтому тело может быть не выполнено ни разу (если условие с самого начала ложно). В большинстве процедурных языков программирования реализуется оператором while , отсюда его второе название - while-цикл. На языке С++ такой цикл имеет вид:
while(<условие>)
<тело цикла>
Цикл с постусловием - цикл, в котором условие проверяется после выполнения тела цикла. Отсюда следует, что цикл всегда выполняется хотя бы один раз. В языке Паскаль этот цикл реализует оператор repeat..until , в Си - do…while , например:
<тело цикла>
while(<условие продолжения цикла>);
В разных языках в использовании условия цикла с постусловием есть некоторые различия. В Паскале и языках, произошедших от него, условие такого цикла трактуется как условие выхода - цикл завершается, когда условие истинно. В Си - как условие продолжения (цикл завершается, когда условие ложно, такие циклы иногда называют «цикл пока»).
Цикл с выходом из середины - наиболее общая форма условного цикла. Синтаксически такой цикл оформляется с помощью трёх конструкций: начала цикла, конца цикла и команды выхода из цикла. Конструкция начала определяет точку программы, в которой начинается тело цикла, конструкция конца - точку, где тело заканчивается. Внутри тела должна присутствовать команда выхода из цикла, при выполнении которой цикл заканчивается и управление передаётся оператору, следующему за конструкцией конца цикла. Естественно, чтобы цикл выполнился более одного раза, команда выхода должна вызываться не безусловно, а только при выполнении условия выхода из цикла.
Основной особенностью цикла данного типа является то, что часть тела цикла, расположенная после начала цикла и до команды выхода, выполняется всегда (даже если условие выхода из цикла истинно при первой итерации), а часть тела цикла, находящаяся после команды выхода, не выполняется при последней итерации. С помощью цикла с выходом из середины можно легко смоделировать и цикл с предусловием (разместив команду выхода в начале тела цикла), и цикл с постусловием (разместив команду выхода в конце тела цикла).
Цикл со счётчиком - цикл, в котором некоторая переменная изменяет своё значение от заданного начального значения до конечного значения с некоторым шагом, и для каждого значения этой переменной тело цикла выполняется один раз. В большинстве процедурных языков программирования реализуется оператором for , в котором указывается счётчик (так называемая «переменная цикла»), требуемое количество проходов (или граничное значение счётчика) и, возможно, шаг, с которым изменяется счётчик.
В некоторых языках, например, Си и других, произошедших от него, цикл for , несмотря на синтаксическую форму цикла со счётчиком, в действительности является циклом с предусловием. То есть в Си конструкция цикла:
for (i = 0; i < 10; ++i)
Тело цикла
фактически представляет собой другую форму записи конструкции:
while (i < 10)
Тело цикла
То есть в конструкции for сначала пишется произвольное предложение инициализации цикла, затем - условие продолжения и, наконец, выполняемая после каждого тела цикла некоторая операция (это не обязательно должно быть изменение счётчика; это может быть правка указателя или какая-нибудь совершенно посторонняя операция). Для языков такого вида вышеописанная проблема решается очень просто: переменная-счётчик ведёт себя совершенно предсказуемо и по завершении цикла сохраняет своё последнее значение.endl;
3. Цикл do while
Цикл do while отличается от while тем, что при его выполнении цикла один проход цикла будет выполнен независимо от условия. Программа для решения задачи на поиск суммы чисел от 1 до 1000 с применением цикла do while :
#include
using namespace std;
setlocale(0, "");
int i = 0; // инициализируем счетчик цикла.
int sum = 0; // инициализируем счетчик суммы.
do {// выполняем цикл.
} while (i < 1000); // пока выполняется условие.
cout << "Сумма чисел от 1 до 1000 = " << sum << endl;
1. Разработать программу на языке С++ для решения задачи, соответствующей выбранному варианту.
2. Ввести, отладить и откомпилировать программу. Проверить правильность ее работы.
1. Блок-схема алгоритма программы.
2. Листинг программы с комментариями.
3. Результаты контрольных прогонов.
Абсолютно независимых фрагментов не существует хотя бы потому, что в любом модуле есть упомянутые фиксированные фрагменты начала и конца. Поэтому независимый фрагмент, в общем случае, имеет ограниченную двумя взаимно зависимыми фрагментами область возможного местоположения. То есть более строгое определение независимого фрагмента звучит следующим образом: независимым относительно двух фиксированных фрагментов будем называть такой фрагмент, который может быть размещен в любом месте последовательности фрагментов, ограниченной сверху и снизу указанными фиксированными фрагментами.
Программирование циклических вычислительных процессов
Цель работы
Получить навыки программирования циклических вычислительных процессов. Изучить циклы с шагом и циклы с условием.
1. Записать расчетные формулы для вычисления слагаемого и конечной суммы
2. Составить алгоритм вычисления с заданной точностью суммы конечного числа членов ряда в указанном диапазоне изменения параметра x с заданным шагом. Для получения шага диапазон изменения x разделить на 10.
3. Составить программу решения задачи. В программе для каждого значения x предусмотреть вычисление как приближенной, так и точной суммы соответствующего ряда y по приведенной в таблице формуле.


Download 69.38 Kb.

Do'stlaringiz bilan baham:
  1   2   3




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling