лабы для 28 варианта / Лабораторная работа№7
.docxСанкт-Петербургский государственный университет телекоммуникаций им. проф. М.А. Бонч-Бруевича
ПРОГРАММИРОВАНИЕ
Отчёт по Лабораторной Работе №7
тема: ОБРАБОТКА ОДНОМЕРНЫХ МАССИВОВ
Санкт-Петербург 2020
А. Постановка задачи(28 ВАРИАНТ)
Требуется выполнить обработку одномерного массива. Все основные действия (ввод исходных массивов, формирование новых массивов, вывод массивов) следует выполнять с помощью функций.
Даны три числовые последовательности (a, b и c), состоящие из n элементов вещественного типа (n <= 20).
Сформировать две новые последовательности x и y в соответствии со следующим правилом
= ,
= ,
i = 1, 2, …, n
Лабораторная работа выполняется в виде проекта, состоящего из двух файлов: один содержит функции для работы с массивами, второй содержит функцию main(), в которой происходит обращение к функциям из первого файла.
Б. Разработка алгоритма
Как видно из условия, проект должен состоять из двух файлов.
В первом файле будет размещаться основная функция main(). Во втором вспомогательные функции (для работы с массивами):
Ввод исходных числовых последовательностей.
Формирование выходных числовых последовательностей.
Вывод результатов вычислений.
В программе используются массивы, применение которых оправдано, во-первых, тем, что количество входных данных относительно велико (достигает 20; использование переменных затрудняет удобочитаемость кода программы), во-вторых, упрощением вычислений. Оптимальное количество массивов для работы программы — 3, потому что, во-первых, количество входных последовательностей — 3, во-вторых, последовательность x зависит от последовательностей a и b, а y от b и c, а зависит от ( зависит от ), что означает, что можно использовать a и b в качестве x и y и не заводить дополнительные массивы.
Входные данные состоят из величины n (количества элементов во входных последовательностях) и числовых последовательностей. Значение n вводится в основной части программы.
В. Таблица идентификаторов
N |
Обозначение в задаче |
Идентификатор |
Назначение |
1 |
n |
n |
Входные данные |
2 |
c |
c |
Входные данные |
3 |
a |
a |
Входные и выходные данные |
4 |
b |
b |
|
5 |
с |
с |
Входные данные |
7 |
- |
VvodFunc |
Функция ввода массива |
8 |
- |
SecFunc |
Функция обработки массива |
9 |
- |
VivodFunc |
Функция вывода массива |
Д. Контрольный расчет
Назначение набора данных |
Набор данных |
Результаты вычислений |
||||||
n |
a |
b |
c |
Ручные |
Машинные |
|||
x |
y |
x |
y |
|||||
Контрольный набор |
3 |
5 |
7 |
2 |
6.325 5.916 1.414 |
7.483 6.325 1.732 |
6.325 5.916 1.414 |
7.483 6.325 1.732 |
8 |
5 |
1 |
||||||
7 |
8 |
3 |
Е. Программа на языке Си
#include <stdio.h>
#include "laba7.7.h"
int main()
{
int n;
double a[20], b[20], c[20];
printf("Input n: ");
scanf("%d", &n);
printf(" a, b and c \n");
VvodFunc(a, n);
VvodFunc(b, n);
VvodFunc(c, n);
SecFunc(a, b, n);
SecFunc(b, c, n);
printf("x: ");
VivodFunc(a, n);
printf("y: ");
VivodFunc(b, n);
return 0;
}
/* laba7_7.h */
#ifndef LABA7_7_H_INCLUDED
#define LABA7_7_H_INCLUDED
#include <stdio.h>
void VvodFunc (double *a, int n)
{
printf("Enter value(%d): ", n);
for (int i = 0; i < n; i++)
scanf("%lf", &a[i]);
}
void SecFunc (double *a, double *b, int n)
{
for (int i = 0; i < n; i++)
a[i] = sqrt(fabs(a[i] * b[i]));
}
void VivodFunc (double *a, int n)
{
for (int i = 0; i < n; i++)
printf("%.3lf, ", a[i]);
printf("\n");
}
#endif // LABA7_7_H_INCLUDED
Ж. Выводы
Тот факт, что результаты контрольных расчетов, выполненных вручную, достаточно совпадают с результатами контрольных расчетов, выполненных на ЭВМ, свидетельствуют о том, что программа составлена правильно.