отчет 1 семестр практика 3 11 вариант
.docxБалтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова
Кафедра И5 «Информационные системы и программная инженерия»
Практическая работа №3 по дисциплине «Информатика: Основы программирования» на тему «Циклы»
Вариант №11
Выполнил: Студент Ситева Софья Борисовна Группа О401Б Преподаватель: Лазарева Татьяна Ильинична
Санкт-Петербург 2020 г.
Задача 1
Условие задачи:
Даны натуральные числа a и b. Определить все числа, кратные a и b,
меньшие a*b (a и b должны быть больше 10). Написать программу с использованием цикла for.
Исходные данные:
Два натуральных числа, обозначим их a и b, тип int.
Результирующие данные:
Кратные числа меньшие, чем a*b, обозначим их i, тип int.
Дополнительные переменные:
Индикатор наличия кратных чисел, обозначим k, тип int
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int a, b, i, k;
scanf_s("%d %d", &a, &b);
k = 0;
if ((a > 10) && (b > 10))
for (i = 1; i < (a * b); i++)
{
if ((i % a == 0) && (i % b == 0))
{
printf("%d ", i);
k = 1;
}
}
else
printf("error");
if (k == 0)
printf("not exist");
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
a =11, b =11 |
11 22 33 44 55 66 77 88 99 110 |
11 22 33 44 55 66 77 88 99 110 |
a =13, b =16 |
not exist |
not exist |
a =6, b =13 |
error |
error |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 2
Условие задачи:
Факториал некоторого числа равен p. Найти это число. Написать программу с использованием цикла while.
Исходные данные:
Факториал некоторого числа, обозначим p, тип int.
Результирующие данные:
Искомое число, обозначим i, тип int.
Дополнительные переменные:
Факториал при значении счетчика, обозначим x, тип int.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
int main()
{
int p, x, i;
scanf_s("%d", &p);
x = 1;
i = 1;
while (p != x)
{
i += 1;
x *= i;
if (x > p)
{
printf("no values");
i = -1;
break;
}
}
if (i != -1)
printf("%d\n", i);
}
Таблица тестирования программы:
Входные данные |
Ожидаемый результат |
Результат программы |
p = 120 |
5 |
5 |
p = 2 |
2 |
2 |
p = 1 |
1 |
1 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 3
Условие задачи:
Вычислить значение суммы бесконечного ряда
с заданной точностью и значение функции (для проверки)
Исходные данные:
Заданная точность 10-4, обозначим eps, тип double.
Результирующие данные:
Значение функции s, обозначим s, тип double, с точностью .
Значение функции f, обозначим f, тип double, с точностью .
Дополнительные переменные:
Счетчик при вычислении функции s, обозначим i, тип int.
Значение , обозначим pi, тип double.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double eps, s, f, n, pi;
int i, j;
pi = 3.141592653589793238463 / 3; // (pi / 3)
f = sin(pi);
s = pi;
n = pi;
eps = 0.0001;
for (i = 3; fabs(n) >= eps; i+= 2)
{
n *= -pi * pi / (i - 1) / i;
s += n;
}
printf("f = %.4lf\ns = %.4lf\n", f, s);
}
Результат работы программы:
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.
Задача 4
Условие задачи:
Для заданных x=2, 3, 4 ,5, 6, 7, 8, 9, 10 вычислить значение по рекуррентному соотношению Ньютона: . Вычисления продолжать до тех пор, пока не выполнится условие . Подсчитать, сколько итераций надо выполнить для этого.
Исходные данные:
Заданные натуральные числа {2, 3, 4, 5, 6, 7, 8, 9, 10}, обозначим x, тип int.
Результирующие данные:
Значение , обозначим y, тип double.
Значение по соотношению Ньютона, обозначим s, тип double.
Счетчик количества интеграций, обозначим k, тип int.
Структурная схема программы:
Текст программы:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
int main()
{
double y, y_next, eps;
int num, x;
eps = 0.0001;
for (x = 2; x <= 10; x++)
{
y_next = x;
num = 0;
do {
y = y_next;
y_next = (1. / 3) * (2 * y + (x / pow(y, 2)));
num++;
} while (fabs(y_next - y) > eps);
y = cbrt(x);
printf("cubic root %d = %lf\nNewton ratio %d = %lf\niteration number %d\n", x, y, x, y_next, num);
}
return 0;
}
Таблица тестирования программы:
Ожидаемый результат |
Результат программы |
cubic root 2 = 1.259921 Newton ratio 2 = 1.259921 iteration number 5 cubic root 3 = 1.442250 Newton ratio 3 = 1.442250 iteration number 6 cubic root 4 = 1.587401 Newton ratio 4 = 1.587401 iteration number 6 cubic root 5 = 1.709976 Newton ratio 5 = 1.709976 iteration number 7 cubic root 6 = 1.817121 Newton ratio 6 = 1.817121 iteration number 7 cubic root 7 = 1.912931 Newton ratio 7 = 1.912931 iteration number 7 cubic root 8 = 2.000000 Newton ratio 8 = 2.000000 iteration number 7 cubic root 9 = 2.080084 Newton ratio 9 = 2.080084 iteration number 8 cubic root 10 = 2.154435 Newton ratio 10= 2.154435 iteration number 8 |
cubic root 2 = 1.259921 Newton ratio 2 = 1.259921 iteration number 5 cubic root 3 = 1.442250 Newton ratio 3 = 1.442250 iteration number 6 cubic root 4 = 1.587401 Newton ratio 4 = 1.587401 iteration number 6 cubic root 5 = 1.709976 Newton ratio 5 = 1.709976 iteration number 7 cubic root 6 = 1.817121 Newton ratio 6 = 1.817121 iteration number 7 cubic root 7 = 1.912931 Newton ratio 7 = 1.912931 iteration number 7 cubic root 8 = 2.000000 Newton ratio 8 = 2.000000 iteration number 7 cubic root 9 = 2.080084 Newton ratio 9 = 2.080084 iteration number 8 cubic root 10 = 2.154435 Newton ratio 10= 2.154435 iteration number 8 |
Вывод:
Ожидаемые результаты и результаты тестирования совпали. Поэтому можно сказать, что программа работает правильно.