отчет 1 семестр практика 3 12 вариант
.docxБалтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова
Кафедра И5 «Информационные системы и программная инженерия»
Практическая работа №3 по дисциплине «Информатика: Основы программирования» на тему «Циклы»
Вариант №12
Выполнил: Студент Солярская Олеся Сергеевна Группа О401Б Преподаватель: Лазарева Татьяна Ильинична
Санкт-Петербург 2020 г.
Задача 1
Условие задачи:
Вычислить и вывести n членов арифметической прогрессии с
первым членом а и разностью прогрессии р. Определить их произведение.
Исходные данные:
Количество членов арифметической прогрессии, обозначим n, тип int.
Первый член арифметической прогрессии, обозначим a, тип double.
Разность арифметической прогрессии, обозначим p, тип double.
Результирующие данные:
Члены арифметической прогрессии.
Произведение членов арифметической прогрессии, обозначим pr, тип double.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int n, i;
double a, p, pr;
scanf_s("%d %lf %lf", &n, &a, &p);
pr = 1;
printf("%lf\t", a);
for (i = 1; i < n; i++)
{
a += p;
pr *= a;
printf("%lf\t", a);
}
printf("\nproizvedenie = %lf", pr);
return 0;
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
n = 6, a = 1, p = 1 |
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 proizvedenie = 720.000000 |
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 proizvedenie = 720.000000 |
n = 3, a = 3, p = 3.3 |
3.000000 6.300000 9.600000 proizvedenie = 60.480000 |
3.000000 6.300000 9.600000 proizvedenie = 60.480000 |
n = 4, a = 6, p = 12 |
6.000000 18.000000 30.000000 42.000000 proizvedenie = 22680.000000 |
6.000000 18.000000 30.000000 42.000000 proizvedenie = 22680.000000 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 2
Условие задачи:
Дано действительное а. Вычислить
Исходные данные:
Вещественное число, обозначим ф
Результирующие данные:
Искомое число, обозначим i, тип int.
Дополнительные переменные:
Факториал при значении счетчика, обозначим x, тип int.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
int main()
{
double a, f;
int i, a2;
scanf_s("%lf", &a);
f = 1;
i = 0;
while (i < 14)
{
i += 2;
f *= (a - i) / (a - i + 1);
}
a2 = a;
if ((a <= 14) && (a2 % 2 != 0) && (a > 0))
printf("value infinity\n");
else
printf("value %lf\n", f);
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
a = 15 |
value 0.209473 |
value 0.209473 |
a = 3 |
value infinity |
value infinity |
a = 6 |
value 0.000000 |
value 0.000000 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 3
Условие задачи:
Вычислить значение суммы бесконечного ряда
с заданной точностью и значение функции (для проверки)
учесть, что 0,1 ≤ x ≤ 0,8.
Исходные данные:
Заданная точность 10-4, обозначим eps, тип double.
Значение аргумента, обозначим x, тип double.
Результирующие данные:
Значение функции y, обозначим y, тип double, с точностью .
Значение функции f, обозначим f, тип double, с точностью .
Дополнительные переменные:
Значение прибавляемой дроби, обозначим dr, тип double
Структурная схема программы:
Текст программы: #include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double eps, y, f, x, dr;
int i;
eps = 0.0001;
scanf_s("%lf", &x);
f = 0;
dr = x * cos(3.141592653 / 3);
y = -0.5 * log(1 - 2 * x * cos(3.141592653589793238463 / 3) + x * x);
if ((x < 0.1) || (x > 0.8))
printf("no value exists");
else
{
for (i = 1; fabs(dr) >= eps; i++)
{
dr = (pow(x, i) * cos(i * (3.141592653589793238463 / 3))) / i;
f += dr;
}
printf("f = %.4lf\ny = %.4lf\n", f, y);
}
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
x = 0.5 |
f = 0.1438 y = 0.1438 |
f = 0.1438 y = 0.1438 |
x = 0.9 |
no value exists |
no value exists |
x = 0.2 |
f = 0.0872 y = 0.0872 |
f = 0.0872 y = 0.0872 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 4
Условие задачи:
Дано положительное число с. Для каждого значения x = 2, 3, 4, … ,7 найти такое наибольшее число k, при котором xk не превышает заданное с.
Исходные данные:
Заданные натуральные числа {2, 3, 4, 5, 6, 7}, обозначим x, тип int.
Положительное число, обозначим с, тип double.
Результирующие данные:
Наибольшее число k, при котором xk не превышает заданное с, обозначим k, тип int.
Дополнительные переменные:
Значение xk, обозначим num, тип double.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int x, k, i;
double c, num;
scanf_s("%lf", &c);
for (x = 2; x <= 7; x++)
{
num = x;
for (k = 0; num <= c; k++)
num *= x;
printf("maximum degree %d = %d\n", x, k);
}
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
c = 5 |
maximum degree 2 = 2 maximum degree 3 = 1 maximum degree 4 = 1 maximum degree 5 = 1 maximum degree 6 = 0 maximum degree 7 = 0 |
maximum degree 2 = 2 maximum degree 3 = 1 maximum degree 4 = 1 maximum degree 5 = 1 maximum degree 6 = 0 maximum degree 7 = 0 |
c = 50 |
maximum degree 2 = 5 maximum degree 3 = 3 maximum degree 4 = 2 maximum degree 5 = 2 maximum degree 6 = 2 maximum degree 7 = 2 |
maximum degree 2 = 5 maximum degree 3 = 3 maximum degree 4 = 2 maximum degree 5 = 2 maximum degree 6 = 2 maximum degree 7 = 2 |
c = 216 |
maximum degree 2 = 7 maximum degree 3 = 4 maximum degree 4 = 3 maximum degree 5 = 3 maximum degree 6 = 3 maximum degree 7 = 2 |
maximum degree 2 = 7 maximum degree 3 = 4 maximum degree 4 = 3 maximum degree 5 = 3 maximum degree 6 = 3 maximum degree 7 = 2 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.