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

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

.docx
Скачиваний:
7
Добавлен:
08.07.2021
Размер:
620.81 Кб
Скачать

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

Кафедра И5 «Информационные системы и программная инженерия»

Практическая работа №2 по дисциплине «Программирование на ЯВУ» на тему «Функции»

Вариант №11

Выполнил: Студент Ситева Софья Борисовна Группа О401Б Преподаватель: Ракова Ирина Константиновна

Санкт-Петербург 2021 г.

Задача 1

Условие задачи:

Отсортировать строки заданной матрицы А (NхМ) в порядке убывания.

Исходные данные:

Матрица A, обозначим A, тип int.

Количество строк n, тип int.

Количество столбцов m, тип int.

Результирующие данные:

Измененная матрица A.

Структурная схема программы:

Текст программы:

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

void input(int* a, int n, int m)

{

int i, j;

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

scanf_s("%d", a + i * m + j);

}

void output(int* a, int n, int m)

{

int i, j;

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

printf("%4d", *(a + i * m + j));

printf("\n");

}

}

void swap(int* a, int i, int m, int j)

{

*(a + i * m + j - 1) += *(a + i * m + j);

*(a + i * m + j) = *(a + i * m + j - 1) - *(a + i * m + j);

*(a + i * m + j - 1) -= *(a + i * m + j);

}

void sort(int* a, int n, int m)

{

int i, j, end, begin;

for (i = 0; i < n; i++)

{

begin = 1;

end = m - 1;

while (begin <= end)

{

for (int j = end; j > begin - 1; j--)

if (*(a + i * m + j - 1) < *(a + i * m + j))

swap(a, i, m, j);

begin++;

for (int j = begin; j < end; j++)

if (*(a + i * m + j - 1) < *(a + i * m + j))

swap(a, i, m, j);

end--;

}

}

}

int main()

{

int* a;

int n, m;

printf("Enter the matrix size\n");

scanf_s("%d %d", &n, &m);

a = (int*)malloc(n * m * sizeof(int));

printf("Enter the matrix\n");

input(a, n, m);

printf("\nInitial\n");

output(a, n, m);

sort(a, n, m);

printf("\nResult\n");

output(a, n, m);

free(a);

}

Результат тестирования программы:

Вывод:

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

Задача 2

Условие задачи:

Даны два массива А(N), В(LxМ) и число z. В каждом массиве вычислить среднее арифметическое элементов меньших z и определить сколько таких элементов в массиве и матрице.

Исходные данные:

Массив A, обозначим A, тип double.

Размер массива А, обозначим n, тип int.

Матрица В, обозначим В, тип double.

Количество строк матрицы В, обозначим l, тип int.

Количество столбцов матрицы В, обозначим m, тип int.

Число z, обозначим z, тип double.

Результирующие данные:

Среднее арифметическое элементов меньших z, обозначим average, тип double.

Количество элементов меньших z, обозначим kolvo, тип int.

Структурная схема программы:

Текст программы:

#include <stdio.h>

#include <malloc.h>

#include <stdlib.h>

void input(double* a, int n, int m)

{

int i, j;

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

scanf_s("%lf", a + i * m + j);

}

void output(double* a, int n, int m)

{

int i, j;

for (i = 0; i < n; i++)

{

for (j = 0; j < m; j++)

printf("%4.2lf\t", *(a + i * m + j));

printf("\n");

}

}

void f_average(double* a, int n, int m, double z, int* kolvo, double* average)

{

int i, j;

*average = 0;

*kolvo = 0;

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

if (*(a + i * m + j) < z)

{

*average += *(a + i * m + j);

(*kolvo)++;

}

*average /= *kolvo;

}

int main()

{

int n, m, l, kolvo;

double *a, *b, z, average;

printf("Enter the array size\n");

scanf_s("%d", &n);

a = (double*)malloc(n * sizeof(double));

printf("Enter the array\n");

input(a, 1, n);

printf("Enter the matrix size\n");

scanf_s("%d %d", &l, &m);

b = (double*)malloc(l * m * sizeof(double));

printf("Enter the matrix\n");

input(b, l, m);

printf("Enter Z\n");

scanf_s("%lf", &z);

printf("\nInitial\n");

output(a, 1, n);

printf("\n");

output(b, l, m);

printf("\nResult\n");

f_average(a, n, 1, z, &kolvo, &average);

printf("Arithmetic average for array %lf and number %d\n", average, kolvo);

f_average(b, l, m, z, &kolvo, &average);

printf("Arithmetic average for matrix %lf and number %d", average, kolvo);

free(a);

free(b);

}

Результат тестирования программы:

Вывод:

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

Задача 3

Условие задачи:

метод трапеций

Исходные данные:

Количество интервалов, обозначим n, тип int.

Нижний и верхний предел первого интеграла соответственно обозначим a1 и b1, тип double.

Нижний и верхний предел второго интеграла соответственно обозначим a2 и b2, тип double.

Результирующие данные:

Значения интегралов, результаты функции integral, тип double.

Дополнительные переменные:

Шаг, обозначим h, тип double.

Структурная схема программы:

Текст программы:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

double integral(double a, double b, int n, double (*func)())

{

double result, h;

int i;

result = ((*func)(a) + (*func)(b)) / 2;

h = (b - a) / n;

for (i = 1; i < n; i++)

result += (*func)(a + h * i);

result *= h;

return result;

}

double fsqrt(double x)

{

double y;

y = sqrt(1 + x + x * x);

return y;

}

double xsin(double x)

{

double y;

y = x * sin(x);

return y;

}

int main()

{

int n, * ukfsqrt, * ukxsin;

double a1, b1, a2, b2;

printf("Enter N\n");

scanf_s("%d", &n);

printf("\nEnter a b for first integral\n");

scanf_s("%lf %lf", &a1, &b1);

printf("\nEnter a b for second integral\n");

scanf_s("%lf %lf", &a2, &b2);

ukfsqrt = &fsqrt;

ukxsin = &xsin;

printf("\nResult\nFirst integral %lf\n", integral(a1, b1, n, ukfsqrt));

printf("Second integral %lf", integral(a2, b2, n, ukxsin));

}

Результат тестирования программы:

Вывод:

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