Файл: Лабораторная работа 3 по дисциплине Информатика и программирование i часть.docx

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 09.11.2023

Просмотров: 81

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.



МИНИСТЕРСТВО НАУКИ И ВЫСШЕГО ОБРАЗОВАНИЯ РОССИЙСКОЙ

ФЕДЕРАЦИИ

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ

ВЫСШЕГО ОБРАЗОВАНИЯ

«НОВОСИБИРСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ»

Учебный Центр Информационных Технологий «Информатика»




Лабораторная работа №3

по дисциплине «Информатика и программирование I часть»


Направление подготовки: 230105 - «Программное обеспечение вычислительной техники

и автоматизированных систем»

Выполнил слушатель: Танеева Дина Ришатовна

Вариант: 7

Дата сдачи:

Преподаватель: Родионов Владислав Дмитриевич

Новосибирск, 2022г.
  1. Задание


Изучение итерационных процессов и циклов.

Найти значение sh(x) используя разложение данной функции в ряд по формуле:

, где x и n-натуральные числа.

Вывести на экран ряд sh(x).
  1. Теоретический материал


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

  • линейная последовательность действий;

  • условная конструкция (если-то-иначе);

  • конструкция повторения (цикл);

  • переход (и его разновидности).

Управляющая конструкция - линейная последовательность действий является основной в языках программирования.

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

В Си используется такой принцип: если составной частью управляющей конструкции является единственный оператор, то он никак синтаксически не выделяется. Если же составной частью является последовательность операторов, то она заключается в фигурные скобки ({}) и образует блок.

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


Единственный условный оператор имеет две разновидности: с else и без него.В качестве условия выступает выражение, которое может иметь любой целый результат и интерпретируется в соответствии с принятыми в Си соглашениями о логических значениях: 0 –«ложь», не 0 – «истина». Действует он как и во всех языках программирования: если значение выражения есть «истина», то выполняется первый оператор, если «ложь» - второй (после else). Конструкция является структурированной, обе ветви – прямая и альтернативная – «сливаются» в одную.

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

Директива #define определяет идентификатор и последовательность символов, которой будет замещаться данный идентификатор при его обнаружении в тексте программы. Идентификатор также называется именем макроса, а процесс замещения называется подстановкой макроса. Стандартный вид директивы следующий: #define имя_макроса последовательность_символов.

Массив – совокупность элементов одного типа.

тип имя_массива [количество_элементов]

тип – задает тип элемента массива и может быть как стандартный, так и определенный пользователем.

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

количество_элементов – целочисленная константа определяющая сколько элементов будет в массиве.

Доступ к элементу массива осуществляется с помощью индекса, например A[0] – первый элемент, A[1] – второй элемент, A[n] – n-й элемент массива. Нумерация элементов начинается с нуля. В памяти элементы массива хранится последовательно т.е. A[0], A[1], A[2]…A[n]. Имя массива это адрес ячейки памяти по которому находится первый элемент.




  1. Описание алгоритма


Цель данной программы – нахождение суммы ряда “sh(x)” для n членов и вывод ряда на экран. В начале программы реализована проверка корректности ввода данных. Алгоритм программы построен так, что на каждой итерации в функции fact вычисляется значение n-го элемента ряда и дальше в основном теле программы оно добавляется к сумме предыдущих значений. Алгоритм нахождения искомого значения показан ниже в Рис.1 и Рис.2.




Рис.1. Нахождение факториал и вывод на экран n-го члена ряда



Рис.2. Ввод данных и вывод результатов

  1. Описание реализации


Препроцессорные директивы:

#include - используется для включения в исходный код заголовочных файлов библиотек;

#define – используется для определения символьных подстановок.

Подключаемые заголовочные файлы библиотеки:

"stdio.h" ;

" windows.h ";

"stdlib.h".

Используемые функции:

main – вызывает функцию 3Lab;

printf – вывод форматированного текста на экран;

system("cls") – для очистки экрана;

scanf – для ввода информации с клавиатуры;

getch – ожидание ввода символа с клавитуры.

Используемые конструкции:

if – условный оператор, для создания ветвления ;

for – оператор цикла.
  1. Пример работы программы

На рисунке 3 показан результат работы программы. В начале с клавиатуры вводится аргумент функции X, потом осуществляется ввод длины ряда. По окончании работы программы на экран выводится искомое значение функции I.




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

  1. Выводы


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

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


На завершающем этапе было проведено контрольное тестирование программы, которое показало правильность ее работы.
  1. Приложение.

Текст программы с комментариями.




#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);
}

  1. Защита:


Восстановить в общем виде формулу степенного ряда, вычисляемого в данной функции:
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!.