Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет 1 семестр практика 3 11 вариант

.docx
Скачиваний:
9
Добавлен:
06.07.2021
Размер:
219.2 Кб
Скачать

Балтийский государственный технический университет «ВОЕНМЕХ» им. Д. Ф. Устинова

Кафедра И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

Вывод:

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