Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Оператор пошагового цикла for




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

Структура оператора

for([нач_выр]; [усл_выр]; [выр_прир])

{

тело

цикла

}

где for – ключевое слово (для);

нач_выр – выражение, задающее начальное значение параметра цикла;

усл_выр – выражение, определяющее проверку условия повторения цикла;

выр_прир – выражение, формирующее текущее значение параметра цикла через предыдущее;

; – разделители выражений;

() – ограничители выражений;

[ ] – признак необязательности содержимого;

тело цикла – совокупность операторов, выполнение которых требуется повторять;

{ } – ограничители тела цикла.

Внимание! В операторе цикла for символ окончания (;) не указывается.

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

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

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

· если выражение усл_выр истинно (результат не равен нулю):

выполняется тело цикла;

формируется новое текущее значение параметра (выр_прир);

повторяется его проверка в усл_выр;

· если усл_выр ложно (результат равен нулю):

выполнение оператора цикла прекращается;

управление передается следующему после тела цикла оператору (цикл завершается).

Схема выполнения оператора

 
 


for(нач_выр; усл_выр; выр_прир)

ЛОЖЬ ИСТИНА

{

тело

цикла

}

Правила записи и выполнения

В качестве начального выражения (нач_выр) используются одно простое (последовательное) или несколько (разделенных запятыми) присваиваний, например xi = xn (a=b=c=1.) или xi = xn, y=0., z=2.5, a=b=c=1.

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

xi = xn; /* формирование начального значения */

for(; xi <= xk; xi = xi + dx)

{

...

yi = sin(xi);

...

}

В качестве усл_выр могут использоваться любые выражения Си/Си++. Арифметические, например (sin(b)+0.5), (2*c–d/f), (a) или простые (составные) логические выражения, например (а!= b), (sin(x) < b), (x <= a && x >= b).

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

ü Внимание! Выход из такого цикла невозможен – требуется перезагрузка операционной системы.

Один из вариантов предотвращения подобной ситуации заключается в формировании в теле цикла отрицания условного выражения в виде оператора if со структурой, например if(усл_выр) break;

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

for(xi = xn;; xi = xi + dx) { ... if(!(xi <= xk)) break; yi = sin(xi); ... } for(xi = xn;; xi = xi + dx) { ... if(xi > xk) break; yi = sin(xi); ... }

В качестве выражения приращения (выр_прир) используются одно (несколько разделенных запятыми) присваиваний вида xi = j(xi - 1), например xi=xi +dx или xi = xi+dx, b=b+2.

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

ü Внимание! Выход из такого цикла невозможен – требуется перезагрузка операционной системы.

Один из вариантов предотвращения подобной ситуации – формирование закона изменения параметра в теле цикла, например:

for(xi = xn; xi <= xk;) /* заголовок цикла */

{

...

yi = sin(xi);

...

xi = xi + dx; /* закон изменения параметра*/

}

В принципе, нач_выр и выр_прир могут формироваться вне заголовка цикла. Первое – до него, второе – в теле цикла, например:

xi = xn;/*формирование начального значения параметра*/

for(; xi <= xk;) /* заголовок цикла */

{

...

yi = sin(xi);

...

xi = xi + dx; /* закон изменения параметра*/

}

В этом случае оператор for выполняет функции оператора while.

Тело цикла оформляется одним оператором (составным или простым).

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

for(ai=an; ai > b; ai= ai + da) { ... if(c < ai) break; ... } d = 15.; for(ai=an; ai > b; ai= ai + da) { ... if(c < ai) goto k; ... } d = 15.; ... k: d=12.; for(ai=an; ai > b; ai= ai + da) { ... if(c < ai) continue; ... } d = 15.;

Первый фрагмент предписывает искусственный выход из цикла при выполнении в теле цикла условия c < ai с передачей управления оператору d = 15. Второй – нарушает естественный порядок вычисления тела цикла при c < ai с передачей управления оператору d=12., помеченному меткой k. Третий прерывает выполнение тела цикла по тому же условию, но управление возвращается заголовку цикла.

В теле цикла возможно использование других (вложенных) операторов цикла.

Вывод: оператор for позволяет программировать арифметические циклы с параметром, например, представленные схемами рис. 5.6 (блоки 4, 5, 6, 7); рис. 5.7в (блоки 4, 5, 6). При этом задание начального значения параметра, его проверка на соответствие диапазону счета и изменение осуществляются в заголовке цикла (блок 4).

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

ü Внимание! Используемые в алгоритме переменные Зi и Зi-1 математически представляют текущие и предыдущее значения одной и той же переменной. Поэтому в программе они должны идентифицироваться как одна именованная ячейка (переменная).

Идентификация переменных задачи приведена в табл. 5.2.

Таблица 5.2

Обозначения в алгоритме Зн Зк пн Зi Зi-1 Налi N
Обозначения в программе zn zk dz pn zi zi nali n

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

Программа по алгоритму цикла с предусловием

Анализ алгоритмов, выполненных в виде цикла с предусловием (рис. 5.4, 5.7а) и структур операторов цикла, позволяет сделать вывод, что программирование возможно только с while. Вариант программы имеет вид:

/*Задача 5.1. Программа цикла с предусловием. */

/* Составил студент гр. А033 Бушуев И.А.*/

#include <stdio.h>

#include <stdlib.h> /* директивы */

#include <math.h> /* препроцессора */

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

{

float zn,zi,zk,dz,pn,nali;/*описание вещественных переменных*/

int n; /* описание целой переменной */

scanf("%5f%5f%4f%3f",&zn,&zk,&dz,&pn);/*ввод переменных*/

printf(" zn=%7.2f zk=%7.2f dz=%6.2f pn=%5.2f\n",zn,zk,dz,pn);

zi=zn; /* формирование начального значения параметра цикла*/

while(zi<=zk) /* заголовок цикла */

{

nali=(zi*pn)/100.; /*вычисление текущего значения налога */

printf(" %10.2f %10.2f\n",zi,nali); /* печать zi, nali */

zi=zi+dz;/*вычисление текущего значения параметра цикла */

}

n=(zk-zn)/dz+1; /* оператор, следующий за циклом */

printf(" N=%2d\n",n);

}

2842.5500.300.13.

Под телом программы расположена строка численных значений вводимых переменных.

Результаты решения представлены в приложении 5.1.

Программа по алгоритму цикла с постусловием

Анализ алгоритмов, выполненных в виде цикла с постусловием (рис. 5.5, 5.7б) и структур операторов цикла, позволяет сделать вывод, что программирование возможно только с do... while. Вариант программы имеет вид:

/*Задача 5.1. Программа цикла с постусловием. */

/* Составил студент гр. А033 Бушуев И.А.*/

#include <stdio.h>

#include <stdlib.h> /* директивы */

#include <math.h> /* препроцессора */

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

{

float zn,zi,zk,dz,pn,nali; /*описание вещественных переменных*/

int n; /* описание целой переменной */

scanf("%5f%5f%4f%3f",&zn,&zk,&dz,&pn);/*ввод переменных*/

printf(" zn=%7.2f zk=%7.2f dz=%6.2f pn=%5.2f\n",zn,zk,dz,pn);

zi=zn; /* формирование начального значения параметра цикла */

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

{

nali=(zi*pn)/100.; /* вычисление текущего значения налога*/

printf(" %10.2f %10.2f\n",zi,nali); /* печать zi, nali */

zi=zi+dz; /*вычисление текущего значения параметра цикла*/

}

while(zi<=zk); /* проверка условия повторения цикла */

n=(zk-zn)/dz+1; /* оператор, следующий за циклом */

printf(" N=%2d\n",n);

}

2842.5500.300.13.

Под телом программы расположена строка численных значений вводимых переменных.

Результаты решения представлены в приложении 5.2.

Программа по алгоритму цикла с параметром

Анализ алгоритмов, выполненных в виде цикла с параметром (рис. 5.6, 5.7в) и структур операторов цикла, позволяет сделать вывод, что программирование возможно только с for. Вариант программы имеет вид:

/*Задача 5.1. Программа с использованием пошагового цикла */

/* Составил студент гр. А033 Бушуев И.А.*/

#include <stdio.h>

#include <stdlib.h> /* директивы */

#include <math.h> /* препроцессора */

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

{

float zn,zi,zk,dz,pn,nali;/*описание вещественных переменных*/

int n; /* описание целой переменной */

scanf("%5f%5f%4f%3f",&zn,&zk,&dz,&pn);/*ввод переменных*/

printf(" zn=%7.2f zk=%7.2f dz=%6.2f pn=%5.2f\n",zn,zk,dz,pn);

for(zi=zn;zi<=zk;zi=zi+dz) /* заголовок цикла */

{

nali=(zi*pn)/100.; /* тело */

printf(" %10.2f %10.2f\n",zi,nali); /* печать zi, nali */

}

n=(zk-zn)/dz+1; /* оператор, следующий за циклом */

printf(" N=%2d\n",n);

}

2842.5500.300.13.

Под телом программы расположена строка численных значений вводимых переменных.

Результаты решения представлены в приложении 5.3.

Арифметические циклы с табличным заданием аргумента

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

yi = f(xi)

при задании аргумента конкретными численными значениями (массивом), в простейшем случае

x1, x2,..., xi,..., xm,

Массив– упорядоченная совокупность однородных элементов (данных), имеющих одно имя и разные индексы.

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

Имя– основная часть обозначения массива (каждого его элемента).

В качестве имени массива в математике, как правило, используются заглавные буквы, например: A, X, B. Элементы массива обозначают строчными буквами с индексами, например: a1, xk, bi j, yk 8, zk p t.

Размерность– число измерений (направлений изменения) массива.

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

Одномерный массив имеет одно направление изменения, а каждый элемент – один индекс. Если измерений больше одного, массив относится к многомерным. Большинство из многомерных массивов – двумерные и трёхмерные.

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

Трехмерный массив – последовательная совокупность одинаковых по структуре таблиц (страниц). Следовательно, каждый элемент такого массива имеет три индекса, первый из которых определяет номер страницы, второй – номер строки, третий – номер столбца, где расположен элемент.

В качестве индексов элементов могут использоваться числа, переменные и арифметические выражения целого типа, например: 8, i, j+2. Поэтому обозначения элементов одномерного массива X – x1, xj, xj+2; двумерного Y – y2 6, yi j, yk j+3; трехмерного Z – z 2 6 4, z i j k, z i j+6 k-4.

Размер– величина, определяющая максимальное количество элементов массива.

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

Например, обозначения Y(7), X(m) определяют одномерные массивы Y и X размером 7 и m элементов соответственно. Двумерный массив D, состоящий из 20 строк и 30 столбцов, обозначается как D(20х30). Его размер определяет число элементов (20х30=600) в массиве. Двумерный массив Z из m строк и n столбцов обозначается как Z(mхn), а его размер вычисляют как произведение указанных величин. Трехмерный массив S из десяти страниц с пятью строками и пятнадцатью столбцами на каждой обозначается как S(10х5х15), т.е. состоит из 10х5х15=750 элементов.

Следовательно, в рассматриваемой задаче вычисления yi = f(xi) табличное задание аргумента соответствует одномерному массиву X(m) с именем X и размером m, текущий элемент которого обозначается xi.

Рассмотрим программирование арифметических циклов с табличным изменением аргумента на конкретной задаче (5.2) о кладах.

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

Рассчитать размер вознаграждений, получаемых сдатчиками кладов, если известно, что он составляет 25 % оценочной стоимости, при условии, что количество кладов равно 7, а оценочные стоимости составляют 492 тыс. р., 503, 948, 738, 892, 320, 250 тыс. р.





Поделиться с друзьями:


Дата добавления: 2015-11-23; Мы поможем в написании ваших работ!; просмотров: 683 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Если президенты не могут делать этого со своими женами, они делают это со своими странами © Иосиф Бродский
==> читать все изречения...

2507 - | 2379 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.008 с.