1 семестр Калмычков / Отчёт Л4
.docxМинобрнауки РФ
Санкт-Петербургский государственный электротехнический университет
им. В.И. Ульянова (Ленина) «ЛЭТИ»
(СПбГЭТУ)
Факультет компьютерных технологий и информатики
Кафедра САПР
ОТЧЁТ
По лабораторной работе №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:
Вывод
В ходе выполнения задания была освоена работа с одномерными массивами, и улучшен навык работы с файлами, для применения их в программах.