Файл: Лабораторная работа 3 по дисциплине Информатика и программирование i часть.docx
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 09.11.2023
Просмотров: 81
Скачиваний: 3
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ
ФЕДЕРАЦИИ
ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ
ВЫСШЕГО ОБРАЗОВАНИЯ
«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»
Учебный Центр Информационных Технологий «Информатика»
Лабораторная работа №3
по дисциплине «Информатика и программирование I часть»
Направление подготовки: 230105 - «Программное обеспечение вычислительной техники
и автоматизированных систем»
Выполнил слушатель: Танеева Дина Ришатовна
Вариант: 7
Дата сдачи:
Преподаватель: Родионов Владислав Дмитриевич
Новосибирск, 2022г.
-
Задание
Изучение итерационных процессов и циклов.
Найти значение sh(x) используя разложение данной функции в ряд по формуле:
, где x и n-натуральные числа.
Вывести на экран ряд sh(x).
-
Теоретический материал
Операторы создают то, что в обыденном сознании ассоциируется с понятием алгоритм – описание последовательности действий, выполняемых программой, или логика ее работы. В Си реализован общий для большинства языков программирования «джентльменский набор» управляющих конструкций:
-
линейная последовательность действий; -
условная конструкция (если-то-иначе); -
конструкция повторения (цикл); -
переход (и его разновидности).
Управляющая конструкция - линейная последовательность действий является основной в языках программирования.
В соответствии с принципом вложенности элементами последовательности могут быть не только элементарные действия (простые операторы), но и вложенные синтаксические конструкции, которые на текущем уровне также выполняются последовательно друг за другом.
В Си используется такой принцип: если составной частью управляющей конструкции является единственный оператор, то он никак синтаксически не выделяется. Если же составной частью является последовательность операторов, то она заключается в фигурные скобки ({}) и образует блок.
Блок, или составной оператор выступает как единая синтаксическая единица, вложенная в конструкцию верхнего уровня. В начале его могут быть определены собственные переменные блока, действие которых не распространяется за его пределы, а время существования совпадает со временем его выполнения. Операторы, составляющие блок, выполняются последовательно друг за другом.
Единственный условный оператор имеет две разновидности: с else и без него.В качестве условия выступает выражение, которое может иметь любой целый результат и интерпретируется в соответствии с принятыми в Си соглашениями о логических значениях: 0 –«ложь», не 0 – «истина». Действует он как и во всех языках программирования: если значение выражения есть «истина», то выполняется первый оператор, если «ложь» - второй (после else). Конструкция является структурированной, обе ветви – прямая и альтернативная – «сливаются» в одную.
В Си имеется три вида циклических конструкций. Общее у них одно: все условия в них являются условиями продолжения, то есть циклы продолжаются, пока значение этих условных выражений – «истина». Операторы цикла состоят из заголовка, в котором определяется характер циклического процесса и оператора - тела цикла. Скобки в заголовке цикла являются неотъемлемым элементом синтаксиса языка.
Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор также называется именем макроса, а процесс замещения называется подстановкой макроса. Стандартный вид директивы следующий: #define имя_макроса последовательность_символов.
Массив – совокупность элементов одного типа.
тип имя_массива [количество_элементов]
тип – задает тип элемента массива и может быть как стандартный, так и определенный пользователем.
имя_массива – задается пользователем и используется для обращения к массиву, может состоять из символов английского алфавита, цифр и символов подчеркивания но недолжно начинаться с цифры и недолжно совпадать с зарезервированными словами среды разработки.
количество_элементов – целочисленная константа определяющая сколько элементов будет в массиве.
Доступ к элементу массива осуществляется с помощью индекса, например A[0] – первый элемент, A[1] – второй элемент, A[n] – n-й элемент массива. Нумерация элементов начинается с нуля. В памяти элементы массива хранится последовательно т.е. A[0], A[1], A[2]…A[n]. Имя массива это адрес ячейки памяти по которому находится первый элемент.
-
Описание алгоритма
Цель данной программы – нахождение суммы ряда “sh(x)” для n членов и вывод ряда на экран. В начале программы реализована проверка корректности ввода данных. Алгоритм программы построен так, что на каждой итерации в функции fact вычисляется значение n-го элемента ряда и дальше в основном теле программы оно добавляется к сумме предыдущих значений. Алгоритм нахождения искомого значения показан ниже в Рис.1 и Рис.2.
Рис.1. Нахождение факториал и вывод на экран n-го члена ряда
Рис.2. Ввод данных и вывод результатов
-
Описание реализации
Препроцессорные директивы:
#include - используется для включения в исходный код заголовочных файлов библиотек;
#define – используется для определения символьных подстановок.
Подключаемые заголовочные файлы библиотеки:
"stdio.h" ;
" windows.h ";
"stdlib.h".
Используемые функции:
main – вызывает функцию 3Lab;
printf – вывод форматированного текста на экран;
system("cls") – для очистки экрана;
scanf – для ввода информации с клавиатуры;
getch – ожидание ввода символа с клавитуры.
Используемые конструкции:
if – условный оператор, для создания ветвления ;
for – оператор цикла.
-
Пример работы программы
Рис. 3. Результат работы программы
-
Выводы
Целью этой лабораторной работы было знакомство со средой программирования, а также изучение операторов, знакомство с вычислением рядов на практике.
Перед выполнением этой работы, был изучен теоретический материал по данным темам. Затем необходимо было составить блок схему будущей программы, для общего представления ее конструкции. После чего, я приступил к написанию исходного кода.
На завершающем этапе было проведено контрольное тестирование программы, которое показало правильность ее работы.
-
Приложение.
Текст программы с комментариями.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#include
using namespace std;
int fact(int n) //нахождение факториал и вывод на экран n-го члена ряда
{
int rez = 1;
for (int i = 1; i <= n; i++)
rez*=i;
return rez;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
float res, x, n; //Ввод данных x, n
printf("Введите значение x: ");
scanf("%f", &x);
printf("Введите значение n: ");
scanf("%f", &n);
printf("x");
res = x;
for (int i = 1; i <= n; i++) //Вычисление и вывод результата
{
res = res + pow(x, 2 * i + 1) / fact(i*2+1);
printf(" + x^%d/%d",(2 * i + 1), fact(i*2+1));
}
printf("\n сумма ряда равна : %.2f", res);
}
-
Защита:
Восстановить в общем виде формулу степенного ряда, вычисляемого в данной функции:
double s,sn; int n;
for(s=0, sn=1, n=1; fabs(sn)>eps; n++)
{s+=sn;
sn=-sn*x/n;}
Дописать программу по части кода. Определить, что данная программа делает, а так же области допустимых вводимых значений.
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
using namespace std;
double sum(double x, double eps)
{
int n;
double s, sn;
for (s = 0, sn = 1, n = 1; fabs(sn) > eps; n++)
{
s += sn;
sn = -sn * x / n;
}
return s;
}
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
float x, eps;
printf("Введите x в диапазоне [-1 ;1] :");
scanf("%f", &x);
printf("Введите eps в диапазоне (0;1) :");
scanf("%f", &eps);
printf("результат %f", sum(x, eps));
}
В программе реализована функция, в которой вычисляется частичная сумма ряда(s), sn-член ряда. На вход программа принимает два значения- типа float – x и eps. Итерации продолжаются до тех пор, пока значение n-го члена ряда больше заданного eps. Область допустимых значений eps – отрезок (0;1). Область допустимых значений x-[-1;1]. Данный ряд является функциональным рядом, то есть его члены являются функциями одной или нескольких независимых переменных. n-ный член ряда равен (-1)^n*x^n/n!.