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

Минобрнауки РФ

Санкт-Петербургский государственный электротехнический университет

им. В.И. Ульянова (Ленина) «ЛЭТИ»

(СПбГЭТУ)

Факультет компьютерных технологий и информатики

Кафедра САПР

ОТЧЁТ

По лабораторной работе №4

«Одномерные массивы»

Преподаватель: ______________________ Калмычков В. А.

Студент гр. 8309: ______________________ Янтиков Д. А.

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

2018

Оглавление

Формулировка задания 3

Цель работы 3

Анализ задания и контрольный пример 3

Математическая постановка задачи 3

Блок – схема 5

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

Примеры работы программы 10

Вывод 12

Формулировка задания

Для последовательности из n вещественных значений ai вычислить сумму по формуле:

Программу представить в двух версиях.

Цель работы

Работа с массивами. Изучение одномерных массивов, операций над ними, а также указателей на языке C++.

Анализ задания и контрольный пример

  • Max = 5

  • A[1] = 1

  • A[2] = 9

  • A[3] = 0

  • A[4] = 8

  • A[5] = 8

  • S = 1.29402

Математическая постановка задачи

Дано: Файл ввода in.txt, содержащий элементы массива A и значение количества используемых чисел типа int. Исходная формула для вычислений.

Найти: Сумму по формуле из условия, для последовательности значений исходного массива.

Способ решения: Вычислять поочередно дроби, увеличивая знаменатель на значение следующего элемента, и записывать их в переменную суммы.

Организация диалога с пользователем: После запуска программа выводит приветствие и условие задания. Затем выводит значение переменной Max (для второй версии программы значение Max задается пользователем с клавиатуры) и элементы исходного массива, максимальное количество которых равняется переменной Max. После выполнения операций вычисления, выводится значение итогового количества используемых элементов, равное значению в переменной Max, либо L, в случае если Max > L. Затем пользователь предлагается пройти в файл вывода out.txt, который содержит информацию о количестве используемых переменных и итоговое значение вычисленной суммы.

Определение внутреннего формата представления данных:

  • Для первой версии программы: Summ, drob, znam, ch – переменные типа float. Переменная proverka – типа bool. Статический массив A[L], где L – переменная формата const unsigned. Max, count, size, size_2 – пееменные типа int.

  • Для второй версии программы: Summ, drob, znam, ch – переменные типа float. Переменная proverka – типа bool. *A – указатель на динамический массив типа int.

Описание алгоритма:

  • Для первой версии программы: Вывод приветствия и условия задачи. Обработка входящего файла in.txt, содержащего массив. Вывод значения количества элементов из документа в консоль и файл out.txt. Вывод считанного массива. Выполнение необходимых действий над массивом. Вывод итогового результата в файл. Завершение работы программы.

  • Для второй версии программы: Вывод приветствия и условия задачи. Обработка входящего файла in.txt, содержащего массив. Ввод пользователем количества необходимых для использования элементов массива. Вывод считанного массива. Выполнение необходимых действий над массивом. Вывод итогового результата в файл. Завершение работы программы.

Блок – схема

  • 1 Версия программы:

  • 2 Версия программы:

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

  • 1 Версия:

#include "pch.h"

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

setlocale(LC_ALL, "Russian");

cout << "Iantikov Daniil, 8309." << endl << "Version 4.2.1 " << endl << "(11.10.2018 - 18.10.2018)" << endl << endl;

cout << "Для последовательности из n вещественных значений ai вычислить:" << endl;

cout << " 1 1 1 " << endl;

cout << "S = --- + ----- + *** + ------------" << endl;

cout << " a1 a1+a2 a1+a2+***+an" << endl << endl;

ifstream in("in.txt");

float Summ = 0, drob, znam = 0, ch = 1;

bool proverka = true;

int size = 0, size_2 = 0;

const unsigned L = 205;

int A[L];

int Max = 0;

int count = 0;

if (in.is_open())

{

while (!in.eof() && ((size - 1) != Max))

{

if (proverka == true)

{

in >> Max;

proverka = false;

cout << "Количество элементов массива из документа = " << Max << endl << endl;

size++;

}

else

{

if (size > L)

break;

in >> A[size];

cout << A[size] << endl;

count++;

size++;

}

}

cout << endl;

cout << "Количество использованных элементов = "<<count << endl;

in.close();

fstream out("out.txt");

drob = 0;

for (int i = 1; i < size; i++)

{

znam = A[i] + znam;

drob = ch / znam;

Summ = drob + Summ;

if (znam == 0)

{

cout << "Делить на ноль нельзя" << endl;

out << "Делить на ноль нельзя" << endl;

return 0;

}

}

size_2 = size - 1;

out << "Сумма уравнения =" << Summ << endl;

out << "Количество используемых элементов массива =" << size_2 << endl;

cout << "Сумма уравнения =" << Summ << endl;

return 0;

}

}

  • 2 Версия:

#include "pch.h"

#include <iostream>

#include <fstream>

using namespace std;

int main()

{

setlocale(LC_ALL, "Russian");

cout << "Iantikov Daniil, 8309." << endl << "Version 4.2.1 " << endl << "(11.10.2018 - 22.10.2018)" << endl << endl;

cout << "Для последовательности из n вещественных значений ai вычислить:" << endl;

cout << " 1 1 1 " << endl;

cout << "S = --- + ----- + *** + ------------" << endl;

cout << " a1 a1+a2 a1+a2+***+an" << endl << endl;

ifstream in("in.txt");

float Summ = 0, drob, znam = 0, ch = 1;

bool proverka = true;

int size = 0, size_2 = 0;

int *A = new int[size];

if (in.is_open())

{

while (!in.eof() && ((size - 1) != *A))

{

if (proverka == true)

{

cout << "Введите количество используемых элементов массива: ";

cin >> *(&A[0] + size);

proverka = false;

cout << "Количество массива = " << *(&A[0] + size) << endl;

size++;

}

else

{

if (size - 1 < *(&A[0]))

{

in >> *(&A[0] + size);

cout << *(&A[0] + size) << endl;

size++;

}

}

}

in.close();

fstream out("out.txt");

drob = 0;

for (int i = 1; i < size; i++)

{

znam = *(&A[0] + i) + znam;

drob = ch / znam;

Summ = drob + Summ;

if (znam == 0)

{

cout << "Делить на ноль нельзя" << endl;

out << "Делить на ноль нельзя" << endl;

return 0;

}

}

size_2 = size - 1;

out << "Сумма уравнения =" << Summ << endl;

out << "Количество используемых чисел массива =" << size_2 << endl;

cout << "Сумма уравнения =" << Summ << endl;

return 0;

}

}

  • Файл in.txt(входной):

  • Файл out.txt(выходной):

Примеры работы программы

  • Успешное выполнение программы и нахождение результата (1 версия):

  • Успешное выполнение программы и нахождение результата (2 версия):

  • Ошибка, при Znam = 0:

Вывод

В ходе выполнения задания была освоена работа с одномерными массивами, и улучшен навык работы с файлами, для применения их в программах.

Соседние файлы в папке 1 семестр Калмычков