8_1 цикл прим.pptx
- Количество слайдов: 29
ИННОВАЦИОННАЯ ОБРАЗОВАТЕЛЬНАЯ ПРОГРАММА
Циклические алгоритмы Примеры Лекция 8_1 Иллюстративный материал к лекциям по Информатике Автор Саблина Н. Г. 08. 02. 2018 2011 г. 2
Содержание Пример 1. Вычисление интеграла методом прямоугольников Пример 2. Сумма членов ряда Диалог о повторе Особенности применения функций ввода, вывода Итоги Библиографический список Автор 08. 02. 2018 каф. РТС дисциплина Информатика 3
Пример 1. Вычисление интеграла методом прямоугольников Условие задачи: – Вычислить приближенно значение определенного интеграла методом прямоугольников 1. Постановка задачи – Исходные данные: • • • пределы интегрирования a и b, количество интервалов разбиения n. подынтегральная функция f(x) Значения a, b и n вводятся с клавиатуры. Вид f(x) определяется формулой в тексте программы. – Выходные данные • 08. 02. 2018 приближенное значение интеграла Y, выводится на экран. 4
Пример 1. Вычисление интеграла Этап 2 (слайд 1 из) Метод решения Значение определенного интеграла численно равно площади подынтегральной фигуры, образованной графиком функции (см. рис. 1). С помощью метода прямоугольников значение интеграла вычисляется приближенно. – площадь подынтегральной фигуры представляется в виде суммы площадей Si небольших прямоугольников, на которые мы разбиваем эту фигуру. 08. 02. 2018 5
y Пример 1. Вычисление интеграла Рисунок 1 f(xi) 0 08. 02. 2018 a xi h b х 6
Пример 1. Вычисление интеграла Этап 2 (слайд 3 из 3 ) – Ширина всех прямоугольников одинаковая и равна h. Определение h: h=(b-a)/n. – Высота прямоугольника равна значению функции f(xi) в точке деления xi. – Приближенное значение интеграла вычисляется по следующей формуле: – где xi=x 0+i*h, h – шаг интегрирования, чем меньше шаг интегрирования (т. е. больше число интервалов разбиения n), тем точнее вычисления значения интеграла. 08. 02. 2018 7
Пример 1. Вычисление интеграла Этап 3 Алгоритм решения задачи – Циклический – Количество повторений известно – Действия в цикле: 08. 02. 2018 8
Начало Вычисление интеграла методом прямоугольников Введите пределы интегрирования и число интервалов a, b, n h=(b-a)/n Y=0, x=a Y=Y+f(x) x=x+h Y=Y · h Y 08. 02. 2018 Конец 9
Пример 1. Вычисление интеграла Этап 4 4. Написание текста программы – Пусть: #include <stdio. h> #include <math. h> int main() {float a, b, x, y=0. , h; int n, i; //заставка printf("n Вычисление интеграл методом прямоугольников n"); //ввод исходных данных printf("Введите пределы интегрированияn a= "); scanf("%f", &a); printf("b= "); scanf("%f", &b); printf("n Количество интервалов разбиения n="); scanf("%d", &n); 08. 02. 2018 10
Пример 1. Вычисление интеграла Этап 4 //вычисления h=(b-a)/n; x=a; for (i=1; i<=n; i++) {y+=log(2+sin(x)); x+=h; } y*=h; //Вывод результата printf("n. Значение интеграла %fn", y); return 0; } 08. 02. 2018 Можно написать цикл for не используя счетчик i: //вычисления h=(b-a)/n; for (x=a; x<b; x+=h) y+=log(2+sin(x)); y*=h; 11
Пример 2. Сумма членов ряда Условие задачи Вычислить сумму тех членов ряда: (/x/<1, k=3, 5, 7, 9, …), абсолютная величина которых больше eps>0. 08. 02. 2018 12
Пример 2. Сумма членов ряда Этап 1 1. Постановка задачи – Исходные данные: х и eps (вводятся с клавиатуры). – Выходные данные: Sum – искомая сумма, значение k (номер слагаемого), до которого производились вычисления; выводятся на экран монитора. 08. 02. 2018 13
Пример 2. Сумма членов ряда Этап 2 2. Метод решения – Для каждого слагаемого вычисляем отдельно знаменатель (факториал k!) и числитель члена ряда. – Каждое новое значение факториала вычисляется путем умножения предыдущего значения на очередные два числа. – Аналогично получаем числитель умножением на х2 числителя предыдущего слагаемого. – Полученный член ряда добавляем к сумме 08. 02. 2018 14
Пример 2. Сумма членов ряда Этап 3 3. Алгоритм решения задачи – Циклический – Количество повторений цикла не известно – Действия в теле цикла: 08. 02. 2018 15
Пример 2. Схема алгоритма рис. 2. 1 Начало Суммирование членов ряда Введите значения х и eps x, eps Sum=0; fakt=6; chis=x; k=3 Slag=chis/fakt 08. 02. 2018 1 16
Пример 2. Схема алгоритма рис. 2. 2 1 /Slag/>eps да нет Sum, k Sum=Sum+Slag k=k+2 Конец fakt=fakt (k-1) k Chis=chis x 2 Slag=chis / fakt 08. 02. 2018 17
Пример 2. Сумма членов ряда Этап 4 Текст программы #include <stdio. h> #include <math. h> #include <conio. h> main() { float chis, slag, sum, x, eps; long int fakt; unsigned short int k; char t; //заставка printf("n Вычисление суммы членов ряда n"); //ввод исх. данных printf("Введите значение x= "); scanf("%f", &x); printf("Введите значение eps= "); scanf("%f", &eps); Начало Суммирование членов ряда Введите значения х и eps x, eps Sum=0; fakt=6; chis=x; k=3 Slag=chis/fakt 08. 02. 2018 1 18
Пример 2. Сумма членов ряда Этап 4 while (fabs(slag)>eps) /Slag/>eps да { sum+=slag; k+=2; fak*=(k-1)*k; chis*=x*x; slag=chis/fakt; } нет Sum, k Sum=Sum+Slag k=k+2 Конец fakt=fakt (k-1) k Chis=chis x 2 Slag=chis / fakt printf("n Сумма членов ряда, меньших %f равна %fn", eps, sum); return 0; } 08. 02. 2018 19
Диалог о повторе Позволяет многократно выполнить обработку данных, предусмотренную программой. Завершается программа, когда пользователь отказался от повторения. Повторяем программу, начиная с ввода исходных данных. Удобно реализовать с помощью цикла do … while ( ) 08. 02. 2018 20
Текст программы do_while. cpp #include <stdio. h> int main (void) { char ch; setbuf(stdout, NULL); // вспомогательный вызов функции; // обеспечивает нормальную работу консоли Eclipse // заставка printf("n. Пример цикла do-whilen Автор: студент гр. Р-100601 Иванов И. И. 2011 г. "); do { //ввод исходных данных. . . //вычисления. . . //вывод результата. . . printf("nn Завершить программу? (y/n)"); fflush(stdin); scanf("%c", &ch); } while(ch!='y' && ch!='Y'); } 08. 02. 2018 21
Особенности применения функций ввода/вывода в программе, работающей в среде Eclipse Стандартные функции имеют особенности (проблемы) при запуске «внутри» среды Eclipse. При запуске исполняемого файла программы из «реальной» консоли (например, из cmd. exe или far. exe) все перечисленные функции работают стандартно. 08. 02. 2018 22
Функция printf() Поведение при «стандартном» вызове: любой вывод в консоль отсутствует до окончания программы. – В частности, если используется функция scanf(), вывод не появляется до тех пор, пока не будут введены все данные. Варианты решения: – задать нулевой размер буфера вызовом функции (в начале программы): setbuf(stdout, NULL); – после каждого вызова printf() использовать вызов функции fflush(stdout); Эта особенность консольного вывода не проявляется для операций C++ cin/cout. 08. 02. 2018 23
Функция scanf() Поведение: при работе программы функция «пропускается» , ничего не вводя с клавиатуры. Связано это с тем, что scanf() читает данные не непосредственно с клавиатуры, а из области памяти, называемой буфером ввода Иногда случается, что предыдущая команда чтения не полностью освобождает буфер ввода, «оставляя» там несколько символов. Обычно это символы перевода строки и возврата каретки (’n’, ’r’) или один из них. Именно эти символы и считываются функцией scanf(), что выглядит как «отсутствие срабатывания» . Чаще всего это случается при вводе одиночных символов, например: 08. 02. 2018 24
Функция scanf() ввод одиночных символов, например: char ch; … // пусть в этом месте один из операторов программы // оставил в буфере ввода stdin символ ‘n’ … scanf("%c", &ch); // функция считывает код символа ‘n’ и // помещает его в переменную ch // программа продолжает выполнение без остановки … Решение: для очистки буфера ввода использовать функцию fflush(): fflush(stdin); scanf("%c", &ch); 08. 02. 2018 25
Функции (getch, getche) Поведение при «стандартном» вызове: – теряется управление программой. Программу приходится завершать принудительно (кнопкой "Terminate" в Eclipse, рисунок 12). Решение: – Вместо getche() можно использовать вызовы функций: fflush(stdin); scanf("*c"); 08. 02. 2018 26
Итоги Рассмотренные вопросы: Циклический алгоритм – Цикл с параметром – Цикл с предусловием – Цикл с постусловием 08. 02. 2018 27
Библиографический список • Подбельский В. В. Язык СИ++. Учебное пособие. М. : Финансы и статистика, 2003. – 560 с. • Павловская Т. А. C/C++. Программирование на языке высокого уровня: учебник для студентов вузов, обучающихся по направлению "Информатика и вычисл. техника" СПб. : Питер, 2005. - 461 с. • Березин Б. И. Начальный курс C и C++ / Б. И. Березин, С. Б. Березин. - М. : ДИАЛОГ-МИФИ, 2001. - 288 с • Каширин И. Ю. , Новичков В. С. От С к С++. Учебное пособие для вузов. – М. : Горячая линия – Телеком, 2005. – 334 с. 08. 02. 2018 28
Автор: Саблина Наталья Григорьевна Ст. преподаватель каф. РТС УГТУ-УПИ 08. 02. 2018 29
8_1 цикл прим.pptx