- •Лабораторный практикум основы программирования
- •Содержание
- •Предисловие
- •Лабораторная работа №1. Интегрированная среда разработки Microsoft Visual Studio. Программирование алгоритмов линейной структуры
- •1. Формулировка индивидуального задания:
- •2. Листинг программы:
- •3. Результаты работы программы:
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •3.4. Результаты работы программы:
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •4.4. Результаты работы программы:
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •2.4. Результаты работы программы:
- •2. Индивидуальное задание №2:
- •2.1. Постановка задачи:
- •2.3. Листинг программы:
- •2.4. Результаты работы программы:
- •1. Присваивание указателю адреса существующего объекта:
- •2. Присваивание указателю адреса области памяти в явном виде:
- •3.Присваивание пустого значения:
- •4. Выделение участка динамической памяти и присваивание ее адреса указателю:
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •1.4. Результаты работы программы:
- •2. Индивидуальное задание №2:
- •2.1. Постановка задачи:
- •2.3. Листинг программы:
- •2.4. Результаты работы программы:
- •I. Исходные данные, результаты и промежуточные величины.
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •2.4. Результаты работы программы:
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •4. Индивидуальное задание №4:
- •4.1. Постановка задачи:
- •4.4. Листинг программы:
- •4.5. Результаты работы программы:
- •I. Исходные данные и результаты
- •II. Алгоритм решения задачи
- •III. Программа и тестовые примеры
- •I. Исходные данные и результаты
- •II. Алгоритм решения задачи
- •III. Программа и тестовые примеры
- •I. Исходные данные и результаты
- •III. Программа и тестовые примеры
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •1.4. Результаты работы программы:
- •I. Исходные данные, результаты и промежуточные величины
- •Программа и тестовые примеры
- •1. Индивидуальное задание №1:
- •1.1. Постановка задачи:
- •1.3. Листинг программы:
- •2.4. Результаты работы программы:
- •Список рекомендуемой литературы
1. Индивидуальное задание №1:
1.1. Постановка задачи:
Выполнить задание, оформив каждый пункт в виде функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
Задача: построить результат сглаживания заданной вещественной матрицы размером 10 на 10. В сглаженной матрице найти сумму модулей элементов, расположенных выше главной диагонали. Ввод и вовод данных в программе осуществить с помощью файла.
Примечание. Операция сглаживания матрицы дает новую матрицу того же размера, каждый элемент которой получается как среднее арифметическое имеющихся соседей соответствующего элемента исходной матрицы.
1.2. UML-диаграмма:
1.3. Листинг программы:
// Лабораторная работа №7
// Индивидуальное задание №1
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
int sort_array(int ncol, int nrow);
int sort_array(int ncol, int nrow)
{
ifstream fin("input.txt",ios::in);
if (!fin)
{
cout << "Can't find input.txt" << endl;
return 1;
}
ofstream fout("output.txt");
if (!fout)
{
cout << "Write falure: check permission" <<endl;
return 1;
}
int k, l, k1, l1, counter, i, j;
double sum,sumdiag = 0;
double a[nrow][ncol];
cout << "Чтение данных из файла..." << endl;
for(i = 0; i < nrow; i++)
for(j = 0; j < ncol; j++)
fin >> a[i][j];
cout << "Обработка данных..." << endl;
counter = 0;sum = 0; l = 0; l1 = 0;
double m[nrow][ncol];
//calculate neighbour' sum & sum diagonalies
for(i = 0; i < nrow; i++)
for(j = 0; j < ncol; j++)
{
k = i -1;
k1 = i + 1;
if (k<0) k++;
if (k1 > nco l- 1) k1--;
if ((j <= ncol - 1)&&(j >= ncol - i)) sumdiag = sumdiag+a[i][j];
for(k; k <= k1; k++)
{
l = j - 1;
l1 = j + 1;
if (l < 0) l++;
if (l1 > ncol - 1) l1--;
for(l; l <= l1; l++)
if ((k == i) && (l == j)) continue;
else
{
sum = sum + a[k][l];
counter++;
}
}
m[i][j] = (float) sum/counter;
sum = 0;
counter = 0;
}
for(i = 0; i < nrow; i++)
{
for(j = 0; j < ncol; j++)
fout << setw(5) << left << setprecision(3) << m[i][j] <<" " << endl;
}
fout << endl;
fout << "Сумма эл-ов ниже главной диагонали: " << setw(5) << setprecision(9) << sumdiag << endl;
return 0;
}
int main()
{
const int nrow = 10;
const int ncol = 10;
if (!sort_array(ncol,nrow))
{
cout<<"Запись результатов обработки в файл..."<<endl;
cout<<"Обработка успешно закончена!"<<endl;
return 0;
}
else
{
cout<<"Ошибка обработки данных!"<<endl;
return 1;
}
}
1.4. Результаты работы программы:
Рисунок 7.1 – Файл для входных данных
Рисунок 7.2 – Файл для выходных данных
Рисунок 7.3 – Вывод программы на экран
2. Индивидуальное задание №2:
2.1. Постановка задачи:
Выполнить задания согласно варианта индивидуального задания №1 лабораторной работы №7, оформив в виде функций законченные последовательности действий. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
2.2. UML-диаграмма:
2.3. Листинг программы:
// Лабораторная работа №7
// Индивидуальное задание №2
#include <iostream.h>
#include <fstream>
#include <string.h>
using namespace std;
int readfile(string fileName)
{
ifstream fin(fileName.c_str(),ios::in);
if (!fin)
{
cout << "Ошибка открытия файла" << endl;
return 1;
}
int nword;
cout << "Введите искомое число слов в предложении: ";
cin >> nword;
fin.seekg(0,ios::end);
int len = fin.tellg();
char *buf = new char [len + 1];
fin.seekg(0,ios::beg);
fin.read(buf,len);
buf[len] = '\0';
int l_beg = 0, i = 0, n = 0, j = 0;
bool exist;
exist = false;
while (buf[i])
{
if (buf[i] == ' ') n++;
if (buf[i] == '.')
{
n++;
if (n == nword)
{
for(j = l_beg; j <= i; j++)
cout << buf[j];
exist = true;
cout << endl;
}
l_beg = i + 2;
i = i + 2;
n = 0;
}
i++;
}
if (!exist)
cout << "Таких предложений не найдено" << endl;
fin.close();
return 0;
}
int main()
{
setlocale( LC_ALL, "Russian" );
cout <<"\n"
<<"\tЛабораторная работа № 7\n"
<<"\n"
<<"------------------------------------------\n"
<<"Задание: Считать текст из файла. Вывести на экран только предложения, \n"
<<"\tсостоящие из заданного количества слов\n"
<<"-----------------------------------------\n";
string str;
cout << "Какой файл открыть? ";
cin >> str;
readfile(str);
return 0;
}
2.4. Результаты работы программы:
Рисунок 7.4 – Файл для входных данных
Рисунок 7.5 – Вывод программы на экран
3. Индивидуальное задание №3:
3.1. Постановка задачи:
Выполнить задания согласно варианта индивидуального задания №1 лабораторной работы №6, оформив каждый пункт задания в виде шаблона функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
3.2. Листинг программы:
// Лабораторная работа №7
// Индивидуальное задание №3
#include <iostream>
#include <fstream>
#include <iomanip>
using namespace std;
template <class T> T sort_array(T ncol, T nrow)
{
ifstream fin("input.txt",ios::in);
if (!fin)
{
cout << "Can't find input.txt" << endl;
return 1;
}
ofstream fout("output.txt");
if (!fout)
{
cout << "Write falure: check permission" <<endl;
return 1;
}
int k, l, k1, l1, counter, i, j;
double sum, sumdiag = 0;
double a[nrow][ncol];
cout << "Чтение данных из файла..." << endl;
for(i = 0; i < nrow; i++)
for(j = 0; j < ncol; j++) fin >> a[i][j];
cout << "Обработка данных..." << endl;
counter = 0; sum = 0; l = 0; l1 = 0;
double m[nrow][ncol];
//calculate neighbour' sum & sum diagonalies
for(i = 0; i < nrow; i++)
for(j = 0; j < ncol; j++)
{
k = i - 1;
k1 = i + 1;
if (k<0) k++;
if (k1 > ncol - 1) k1--;
if ((j <= ncol - 1)&&(j >= ncol - i))
sumdiag = sumdiag + a[i][j];
for(k; k <= k1; k++)
{
l = j - 1;
l1 = j + 1;
if (l < 0) l++;
if (l1 > ncol - 1) l1--;
for(l; l <= l1; l++)
if ((k == i)&&(l == j)) continue;
else
{
sum = sum + a[k][l];
counter++;
}
}
m[i][j] = (float) sum/counter;
sum = 0;
counter = 0;
}
for(i = 0; i < nrow; i++)
{
for(j = 0; j < ncol; j++)
fout << setw(5) << left << setprecision(3)
<< m[i][j] << " ";
fout << endl;
}
fout << endl;
fout << "Сумма эл-ов ниже главной диагонали: "
<< setw(5) << setprecision(9) << sumdiag <<endl;
return 0;
}
int main()
{
const int nrow = 10;
const int ncol = 10;
sort_array(ncol,nrow);
cout << "Запись результатов обработки в файл..."
<< endl;
cout << "Обработка успешно закончена!" << endl;
cout << "Ошибка обработки данных!" << endl;
return 0;
}