Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

алгоритмизация и программирование 7 глава




Начало  
+
i<=100
i++
Вывод i
i = 1  
Конец

//Schet_ot_1_do_100; #include <conio.h> #include <iostream> using namespace std;   int main(){ setlocale(LC_ALL,"Rus"); cout<<"\nЧисла от 1 до 100:\n "; int i=1; //начальное значение параметра цикла do{ cout<<" "<<i<<" ";//вывод на экран значения i i++; // Увеличение параметра цикла на 1 } while (i<=100) //перебираем первые 100 чисел _getch(); return 0; }

4.4. Вложенные циклы

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

тело цикла
j = j0..jn, h2
i = i0..in, h1
тело цикла
j = j0..jn, h
условие
+
тело цикла
условие
+
j = j0..jn, h
a)
b)
c)

Рисунок 4.2 Блок-схемынекоторых из возможных вариантов реализации двойного цикла

Цикл, который содержит вложенный цикл, называется внешним. В двойном цикле вложенный цикл называется внутренним. На рисунке 4.2.a предложена блок-схема алгоритма, в котором для реализации и внешнего и внутреннего циклов использован оператор цикла с параметром (for). Такой вид двойного цикла используется при работе с двумерными массивами (таблицами). На рисунке 4.2.b для реализации внешнего цикла использован оператор цикла с предусловием (while), а внутреннего цикла – оператор цикла с параметром (for). На рисунке 4.2.c внешний цикл представлен оператором цикла с параметром (for), а внутренний – оператором цикла с предусловием (while).

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

Внешний и внутренний циклы могут использовать любой вид операторов цикла C++ (while, do while, for) (рис. 4.2).

Пример. Дано число вида , где Вывести на экран все числа .

1. Математическая модель

Выпишем все эти числа в ряд:

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

Сначала увеличиваются единицы от 0 до 9, при этом значение десятков не меняется. Только когда перебор единиц завершён, десятки увеличиваются на 1. После этого опять происходит изменение единиц от 0 до 9. В переменной a – будут десятки, в b – единицы.

2. Блок-схема
s = a*10+b
Вывод s
a = 1..2
b = 0..9
Начало  
Конец

3. Программа   #include <iostream> #include <conio.h> #include <math.h>   using namespace std;   int main() { int s;   for(int a=1;a<=2;a++) for(int b=1;b<=9;b++) { s = a*10+b; cout<<" "<<s; }   _getch(); return 0; }  

 

Результат работы программы

10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

 


Лабораторная работа № 4
Программирование алгоритмов циклической структуры

ЦЕЛЬ РАБОТЫ: приобретение навыков программирования вычислительных повторяющихся процессов с использованием циклических операторов.

Выполнение работы: в соответствии с вариантом составить и реализовать программы.

Задание I

Используя оператор цикла с параметром, решить предложенную задачу:

1. Вычислить сумму и произведение первых n натуральных чисел. Предусмотреть ввод n с клавиатуры.

2. Вычислить

3. Вычислить сумму первых n членов ряда с общим членом .

4. Определить средний рост девочек, и мальчиков одного класса. В классе учится n учеников. (n ≥ 15).

5. Вводя в цикле по 4 оценки каждого студента группы, подсчитать число студентов, не имеющих оценок 2 и 3. В группе учится n студентов. Предусмотреть ввод n с клавиатуры.

6. Вводя в цикле по 4 оценки, полученные студентами в сессию, определить средний балл группы по всем экзаменам. В группе учится n студентов. Предусмотреть ввод n с клавиатуры.

7. Задано n троек, чисел а, b, с. Вводя их по очереди с клавиатуры в порядке возрастания и интерпретируя их как длины сторон треугольника, определить, сколько троек может быть использовано для построения треугольника.

8. В ЭВМ по очереди поступают результаты соревнований по плаванию на дистанции 200 м, в которых участвует n спортсменов (n > 10). Выдать на экран дисплея лучший результат после ввода результата очередного спортсмена.

9. В ЭВМ вводятся по очереди координаты n точек (n ≥ 10). Определить, сколько из них попадет в круг радиуса r с центром в точке (а, b).

10. Ученикам первого класса назначается стакан молока (200 мл), если их вес составляет меньше 30 кг. Определить, сколько литров молока потребуется, ежедневно для одного класса, состоящего из n учеников. После взвешивания вес каждого ученика вводится в ЭВМ.

11. В ЭВМ вводятся номер по списку и рост учеников 10 класса. Вывести на экран номера по списку тех учеников, рост которых больше 170 см.

12. В соревнованиях по бегу на дистанции 100 м принимают участие n спортсменов. Вводя очереди номера по списку и результаты участников в ЭВМ, определить, сколько из них выполнили норму, и напечатать их номера (норма равна 13,2 сек.)

13. В ЭВМ вводятся по очереди координаты n точек. Определить, сколько из них попадет в кольцо с внутренним радиусом r 1, внешним r 2 и центром в начале координат.

14. В ЭВМ по очереди вводятся координаты n точек. Определить, сколько из них принадлежит фигуре, ограниченной осью абсцисс и аркой синусоиды, построенной для аргумента со значениями от 0 до p.

15. Задана окружность радиуса r с центром в начале координат. Вводя последовательно в ЭВМ координаты n точек, являющихся центрами других окружностей того же радиуса, определить, сколько из этих окружностей пересекает данную.

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

17. Найти сумму целых положительных чисел, больших 20, меньших 100 и кратных 3.

18. Вычислить сумму , где n ≥ 10.

19. Вводя в цикле по 4 оценки, полученные студентами в сессию, определить число неуспевающих студентов группы. В группе учится n студентов. Предусмотреть ввод n с клавиатуры.

20. Цилиндр объема 1 куб.ед. имеет высоту h. Определить радиус основания для значений h от 1 до 6 с шагом 0.5 ед.

21. Вывести на печать последовательность с общим членом , где k = 0, 1,..., K. Предусмотреть ввод K и b с клавиатуры. Вычислить количество элементов, удовлетворяющих условию: 0 ≤ ak ≤ 0.5.

22. В ЭВМ вводятся поочередно n точек. Определить, сколько из них принадлежит фигуре, ограниченной осью ординат и правой полуокружностью х 2 + у 2 = r 2.

23. В ЭВМ по очереди вводятся координаты n точек. Определить, сколько из них принадлежит фигуре, ограниченной линией | х |+ | у | = 1.

24. Составить программу вычисления значений функции при изменении x 0 до 1 с шагом 0.1.

25. Вычислить значение выражения для произвольного действительного числа х из области определения данного выражения.

Задание II

Двумя способами (используя, оператор цикла с предусловием и оператор цикла с постусловием) для данного значения х найти сумму ряда S с точностью до члена ряда, по абсолютной величине меньшего eps = 0.0001. Сравнить эту сумму со значением контрольной функции y.

1.

2.

3.

4.

5.

6.

7.

8.

9.

10.

11.

12.

13.

14.

15.

16.

17.

18.

19.

20.

21.

22.

23.

24.

25.

Задание III

1. Какое количество теплоты потребуется для испарения 100 г воды при 100, 110, …, 200°С?

2. Определите внутреннюю энергию 1 г гелия при температуре 10, 15, …, 50°С.

3. В сосуде объёмом 1 см3 находится 1016 молекул газа. Определить давление газа в сосуде при температуре 0, 1,…,10°С.

4. Какова средняя квадратичная скорость молекул кислорода при 10, 12, …, 20°С?

5. Сколько теплоты выделится при конденсации 100, 200, …, 900 г водяного пара?

6. В котле ёмкостью 6.0 м3 содержится 25 кг перегретого пара. Каково давление пара, если его температура равна 200, 220, …, 300°С?

7. Какова средняя квадратичная скорость молекул водорода при температуре 10, 15, …, 50°С?

8. Определите внутреннюю энергию 1 г гелия при температуре 20, 22, …, 40°С.

9. В сосуде объёмом 480 см3 при давлении 2.5·104 Н/м2 находится газ. Подсчитать количество молекул газа для значений температуры 10, 11, …, 20°С.

10. Сколько теплоты потребуется для испарения 200 г воды при температуре 100, 110, …, 200°С?

11. Какова средняя квадратичная скорость молекул углекислого газа при температуре 0, 5, …, 30°С?

12. Определить среднюю квадратичную скорость молекул водорода при 0, 5,…, 50°С.

13. В сосуде объёмом 450 см3 при давлении 2.5·104 Н/м2 находится газ. Подсчитать количество молекул газа для значений температуры 10, 12, …, 20°С.

14. Определите внутреннюю энергию 1 г водорода при температуре 20, 21, …, 30°С.

15. Определить среднюю кинетическую энергию вращательного движения молекул водорода, содержащихся в 1.0 моль при 10, 11, …, 20°С.

16. Плотность воздуха при нормальных условиях 1.3 г/л. Какова плотность воздуха при давлении 4.0·105 Н/м2 и температуре 50, 60, …, 100°С?

17. Определите внутреннюю энергию 1 г углекислого газа при температуре 10, 15, …, 50°С.

18. В колбе содержится газ при нормальных условиях. Сколько молекул газа содержится в колбе, если её ёмкость равна 0.1, 0.2, …, 0.5 л?

19. Какова средняя квадратичная скорость молекул водорода при 0, 2, …, 20°С?

20. Какова средняя квадратичная скорость молекул кислорода при температуре 0, 2, …, 10°С?

21. В сосуде объёмом 400 см3 при давлении 2.5·104 Н/м2 находится газ. Подсчитать количество молекул газа для значений температуры 0, 1, …, 10°С.

22. Сколько теплоты потребуется для испарения 150 г воды при температуре 100, 105, …, 150°С?

23. Определите внутреннюю энергию 1 г гелия при температуре 20, 21, …, 30°С.

24. Какова средняя квадратичная скорость молекул углекислого газа при температуре 0, 5, …, 30°С?

25. Определите внутреннюю энергию 1 г кислорода при температуре 10, 15, …, 50°С.

Контрольные вопросы

1. Какие базовые алгоритмические конструкции можно реализовать средствами языка С++?

2. Что называется циклом?

3. Что такое тело цикла?

4. Что такое параметр цикла?

5. Что такое итерация?

6. Что такое зацикливание?

7. Какие типы циклов существуют?

8. Какие инструкции используются для реализации циклов на С++?

9. Какая инструкция используется для реализации цикла с параметром?

10. Можно ли использовать в теле цикла переменную, являющуюся параметром цикла?

11. Какая инструкция используется для реализации цикла с предусловием?

12. От чего зависит количество повторений тела цикла с предусловием?

13. Какая инструкция используется для реализации цикла с постусловием?

14. Какие из конструкций повторения могут привести к зацикливанию?

15. Как работает цикл со счетчиком?

16. В каком случае в теле цикла используются операторные скобки?

17. Каковы отличия между циклами с пред- и с постусловием?

Пример выполнения лабораторной работы

Задание I. Составить программу табулирования функции

на отрезке [-4, 4] с шагом 0.2.

Решение

1. Математическая модель

Прежде всего, определим число повторений тела цикла: .

Аргументы: переменная x вещественного типа.

Результаты: значение заданной функции y (вещественного типа).

Промежуточные величины: счетчик i целого типа.


2. Алгоритм 3. Программа
Вывод x, y
i:= 1.. 41
Начало  
Конец
x:= -4.0
x:= x+0.2

  #include <iostream> #include <conio.h> #include <math.h>   using namespace std;   int main() { double x = -4, y; for(int i=1;i<=41;i++) { y = exp(x)*(2.42*pow(x, 2.0)- 6.47*x+1.03)/(x-5.8); cout<<" x = "<<x<<" y = "<<y<<endl; x+=0.2; } _getch(); return 0; }

4. Результат работы программы

x = -3.6 y = -0.161865

x = -3.4 y = -0.185016

x = -2.2 y = -0.373639

Задание II. Для x = 0.47 найти сумму ряда

с точностью до члена ряда, меньшего (по абсолютной величине) eps = 0.0001, используя оператор цикла с предусловием. Сравнить полученную сумму со значением функции для контроля .

Решение

1. Математическая модель. Обозначим через p1 последовательные произведения нечетных чисел. Через р2 – последовательные произведения четных чисел.

В C++ (math.h), есть функция arcsin х, поэтому для вычисления контрольной функции воспользуемся соотношением: у = asin(x).

Аргументы: x переменная вещественного типа, -1 < x < 1.

Результаты: summa – сумма членов ряда вещественного типа;

y – значение контрольной функции (вещественного типа).

Промежуточные величины:

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

p1 – последовательные произведения нечетных чисел, вещественного типа;

р2 – последовательные произведения четных чисел, вещественного типа;

p – частное, получаемое при делении p1 на p2, вещественного типа;

n – номер члена ряда, целого типа; u – текущий член ряда, вычисляемый по формуле , вещ. типа;

 

2. Алгоритм 3. Программа

+
-
 
Начало  
eps = 1e-4
Ввод x
n = 1
summa = 0
u = x; p1 = 1; p2 = 2
|u| > eps
summa = summa + u
p = p1 / p2
n = n + 1
p1 = p1(2n-1)
Конец
Вывод x, summa, y
p2 = 2np2

    // вычисление суммы членов ряда #include <iostream> #include <conio.h> #include <math.h>   using namespace std;   int main() {// описание и инициализация заданной точности double eps = 0.0001; // описание переменных, ввод х, начальные // установки double x, u, p1, p2, p; cout<<"Введите значение x: "; cin>>x; int n = 1; double summa = 0; u = x; p1 = 1; p2 = 2; // организация вычисления суммы членов ряда while(abs(u) > eps) { summa += u; p = p1/p2; u = p*pow(x, 2*n+1)/(2*n+1); n++; p1 = p1*(2*n-1); p2 = p2*2*n; } // вычисление значения контрольной функции double y = asin(x); // вывод результатов cout<<" Сумма данного ряда при x = "<<x<<", c точностью 0.0001, S = "<< summa<<endl; cout<<" Значение контрольной функции, у = "<<y; _getch(); return 0; }

4. Результат работы программы

Введите значение х: 0.47

Сумма данного ряда при х = 0.4700 с точностью до 0.0001, S = 0.4893

Значение контрольной функции, у = 0.4893

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

Замечание. Чтобы записать программу, используя цикл с постусловием, достаточно в приведенной ниже программе конструкцию while (abs(u)> = eps) { тело цикла } заменить на do { тело цикла } while (abs(u) >= eps);


5. Подпрограммы

5.1. Понятие подпрограммы

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

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

- встроенные подпрограммы;

- библиотечные подпрограммы;

- подпрограммы, создаваемые программистом.

В С++ (как и в С) подпрограммы реализуются в виде функций. Различают библиотечные (стандартные) функции и функции, создаваемые программистом.

Библиотечные (стандартные) функции

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

Функции, создаваемые программистом

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

5.2. Формальные и фактические параметры

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

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

Фактические параметры – это информация о том, какие значения нужно передать аргументам подпрограммы и каким именам программы передать значения результатов подпрограммы.

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

5.3. Локальные и глобальные переменные

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

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

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

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

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

Время жизни может быть постоянным (в течение выполнения блока).

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

Для задания класса памяти используются следующие спецификаторы:

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

- extern – означает, что переменная определяется в другом месте программы (в другом файле или дальше по тексту). Используется для создания переменных, доступных во всех модулях программы, в которых они объявлены.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...