Тема №2 «Решение практических задач методом ООП».




Кафедра заочного обучения

Домашнее задание

«ОБЪЕКТНО-ОРИЕНТИРОВАННОЕ ПРОГРАММИРОВАНИЕ»»

Вариант № 1

 

Выполнил:

Студент группы ИСТЗС-13

Голубев И.А.

 

Проверил:

Преподаватель доцент каф. ИТУС Исаева Г.Н.

 

Королев

Введение.

Целью выполнения домашних заданий (лабораторных работ) являются:

· расширение и углубление теоретических знаний по изучаемой дисциплине;

· получение дополнительных практических навыков по тематике домашних заданий (лабораторных работ);

· развитие творческих способностей и самостоятельности в ходе проведения исследований.

 

Тема №1 «Исследование информации различной структуры и обработка её средствами среды программирования Visual Studio с использованием ЯП С/С++»

Задача 1.

Размерности массивов следует задать именованными константами. Все необходимые данные должны передаваться подпрограммам в качестве параметров; все величины, используемые только внутри подпрограмм, должны быть описаны как локальные. Использование глобальных переменных в подпрограммах не допускается. Вывод результатов работы подпрограмм должен выполняться в главной программе

Дана целочисленная прямоугольная матрица. Определить:

1. Количество строк, не содержащих ни одного нулевого элемента (оформить в виде функции).

2. Максимальное из чисел, встречающихся в заданной матрице более одного раза (оформить в виде процедуры).

 

Анализ задачи 1.

Входные параметры и переменные:

1. константы n и m, которые задают размер массива;

2. переменная a[m][n], которая задает массив;

 

Вспомогательные параметры и переменные:

1. переменные i и j для индексов элементов.

2. str0 - переменная для получения результата выполнения функции определяющей количество строк, не содержащих ни одного нулевого элемента;

Функции и процедуры

1. функция вывод массива на экран монитора;

2. функции определяющей количество строк, не содержащих ни одного нулевого элемента;

3. процедура определяющая максимальное из чисел, встречающихся в заданной матрице более одного раза и выводящая это число на экран монитора;

Результаты вычисления:

Алгоритм решения задачи в программных кодах С/С++:

Листинг программы для задачи 1.

//

// ИСТЗС-13

// 04.10.2016 Titulov вариант 1

// Дана целочисленная прямоугольная матрица. Определить:

// 1. Количество строк, не содержащих ни одного нулевого элемента(оформить в виде функции).

// 2. Максимальное из чисел, встречающихся в заданной матрице более одного раза(оформить в

// виде процедуры).

 

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

#include <conio.h>

#include <math.h>

 

using namespace std;

int printA(int m, int n, int a[5][5]);

int str_not_0(int m, int n, int a[5][5]);

void max2(int m, int n, int a[5][5]);

 

int main()

{

const int n = 5;

const int m = 5;

int i, j, a[m][n], str0;

str0 = 0;

 

setlocale(LC_ALL, "RUS");

 

// printf(" Введи элементы матрицы: \n");

// for (i = 0; i <= m - 1; i++)

// for (j = 0; j <= n - 1; j++)

// {

// printf("a(%d, %d) = ", i, j);

// scanf("%d", &a[i][j]);

// }

// заполнение матрицы для тестирования

a[0][0] = 0; a[0][1] = 3; a[0][2] = 1; a[0][3] = 1; a[0][4] = 1;

a[1][0] = 2; a[1][1] = 6; a[1][2] = 2; a[1][3] = 2; a[1][4] = 2;

a[2][0] = 1; a[2][1] = 5; a[2][2] = 3; a[2][3] = 3; a[2][4] = 3;

a[3][0] = 1; a[3][1] = 0; a[3][2] = 0; a[3][3] = 4; a[3][4] = 4;

a[4][0] = 2; a[4][1] = 3; a[4][2] = 4; a[4][3] = 4; a[4][4] = 5;

 

//// заполнение матрицы для тестирования

//a[0][0] = 0; a[0][1] = 6; a[0][2] = 11; a[0][3] = 16; a[0][4] = 31;

//a[1][0] = 2; a[1][1] = 7; a[1][2] = 12; a[1][3] = 17; a[1][4] = 32;

//a[2][0] = 3; a[2][1] = 8; a[2][2] = 13; a[2][3] = 18; a[2][4] = 33;

//a[3][0] = 4; a[3][1] = 9; a[3][2] = 14; a[3][3] = 19; a[3][4] = 34;

//a[4][0] = 5; a[4][1] = 10; a[4][2] = 15; a[4][3] = 44; a[4][4] = 35;

 

cout << "Введена матрица: \n";

printA(m, n, a);

 

str0 = str_not_0(m, n, a);

cout << "строк, не содержащих ни одного нулевого элемента: " << str0 << "\n";

 

max2(m, n, a);

 

system("pause");

return 0;

}

 

int printA(int m, int n, int a[5][5])

{

int i, j;

 

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

{

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

printf("%d ", a[i][j]);

printf("\n");

}

return 0;

}

 

int str_not_0(int m, int n, int a[5][5])

{

int i, j, x, y;

y = 0;

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

{

x = 0;

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

if (a[i][j] == 0) x++;

if (x == 0) y++;

}

return y;

}

 

void max2(int m, int n, int a[5][5])

{

int i,j,f,k,t, t1 = 0, r = 0, t2;

double kof;

 

for (int i = 0; i < m; i++)

{

for (int j = 0; j < n; j++)

{

t2 = a[i][j];

a[i][j] = 0;

for (int k = 0; k < m; k++)

{

for (int f = 0; f < n; f++)

{

if (t2 == a[k][f])

{

t = a[k][f];

}

else

r++;

}

if (t1 > t) t = t1;

}

t1 = t;

a[i][j] = t2;

}

}

 

kof = pow((double)m, 4);

 

if (r == kof-1)

cout << "Однинаковых элементов нет!\n";

else

cout << "Максимальное из встречающихся более 1 раза: " << t << "\n";

return;

}

 

 

 

Тема №2 «Решение практических задач методом ООП».

Задача 2.Поиск в массиве структур

В текстовом файле хранится база отдела кадров предприятия. На предприятии 100 сотрудников. Каждая строка файла содержит запись об одном сотруднике. Формат записи: фамилия и инициалы (30 позиций, фамилия должна начинаться с первой позиции), год рождения (5 позиций), оклад (10 позиций). Написать программу, которая по заданной фамилии выводит на экран сведения о сотруднике, подсчитывая средний оклад всех запрошенных сотрудников.

Входные параметры и переменные:

1. filename файл – d котором хранится база отдела кадров предприятия;

 

Вспомогательные параметры и переменные:

1. maxn_record – максимальное количество записей в файле;

2. man – класс содержащий переменные:

· pName - фамилия и инициалы;

· birth_year - год рождения;

· pay – оклад;

3. Man массив записей класса man размером maxn_record;

4. Name – переменная для ввода фамилии, используется при поиске;

Результаты вычисления:

Алгоритм решения задачи в программных кодах С/С++:

Листинг программы для задачи 2.

 

//////////////////////////////////////////////////////////////

// Проект Taskl_l

//////////////////////////////////////////////////////////////

//Man.h

 

//#include "CyrlOS.h" // for Visual C++ 6.0

 

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

#include <conio.h>

 

using namespace std;

 

const int l_name = 30;

const int l_year = 5;

const int l_pay = 10;

const int l_buf = l_name + l_year + l_pay;

 

class Man

{

public:

Man(int IName = 30);

~Man();

bool CompareName(const char*) const;

int GetBlrthYear() const { return birth_year; }

float GetPay() const { return pay; }

char* GetName() const { return pName; }

void Print() const;

void SetBirthYear(const char*);

void SetName(const char*);

void SetPay(const char*);

private:

char* pName;

int birth_year;

float pay;

};

 

//////////////////////////////////////////////////////////////

// man.cpp:

//

 

#include "stdafx.h"

#include <iostream>

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <string.h>

#include "Man.h"

 

using namespace std;

 

Man::Man(int lName) {

cout << "Constructor is working" << "\n";

pName = new char[lName + 1];

}

Man::~Man() {

cout << "Destructor is working" << "\n";

delete[] pName;

}

void Man::SetName(const char* fromBuf)

{

// strncpy(pName,fromBuf,l_name);

strncpy_s(pName,l_name, fromBuf, _TRUNCATE);

pName[l_name] = 0;

}

void Man::SetBirthYear(const char* fromBuf) {

birth_year = atoi(fromBuf + l_name);

}

void Man::SetPay(const char* fromBuf) {

pay = atof(fromBuf + l_name + l_year);

}

bool Man::CompareName(const char* name) const

{

// cout << ">" << pName << "<>" << name << "<\n";

if ((strstr(pName,name)) && (pName[strlen(name)] == ' '))

return true;

else

return false;

}

void Man::Print() const {

cout << pName << birth_year << ' ' << pay << "\n";

// cout <<">"<< pName <<"<"<< birth_year << ' ' << pay << "\n";

}

 

//////////////////////////////////

// main.cpp

 

#include "stdafx.h"

#include <iostream>

#include <fstream>

#include <stdio.h>

#include <conio.h>

#include "Man.h"

 

using namespace std;

const char filename[] = "E:\\web_c\\man\\Debug\\dbase.txt";

 

int main()

{

const int maxn_record = 10;

Man man[maxn_record];

char buf[l_buf + 1];

char name[l_name + 1];

 

setlocale(LC_ALL, "RUS");

 

ifstream fin(filename);

if(!fin)

{

cout << "\nОшибка открытия файла " << filename << "\n";

system("pause");

return 1;

}

int i = 0;

while (fin.getline(buf,l_buf))

{

if(i >= maxn_record)

{

cout << "\nСлишком длинный файл";

system("pause");

return 1;

}

man[i].SetName(buf);

man[i].SetBirthYear(buf);

man[i].SetPay(buf);

i++;

}

 

int n_record = i, n_man = 0;

float mean_pay = 0;

while (true)

{

cout << "Введите фамилию или слово end или all: ";

cin >> name;

// cout << "\n name: "<< name << "\n";

 

if (0 == strcmp(name, "end")) break;

if (0 == strcmp(name, "all"))

{

cout << "\n";

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

man[i].Print();

//break;

}

else

{

bool not_found = true;

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

{

if (man[i].CompareName(name))

{

man[i].Print();

n_man++; mean_pay += man[i].GetPay();

not_found = false;

break;

}

}

 

if (not_found) cout << "\nНет сотрудника: " << name << "\n";

}

}

if (n_man) cout << "\nСредний оклад просмотренных: " << mean_pay / n_man << "\n";

 

 

system("pause");

return 0;

 

}

 

 

 

 

Заключение.

В ходе выполнения домашних заданий (лабораторных работ) я

· расширил и углубил теоретические знаний по ООП;

· получил дополнительные практические навыки по интегрируемой средой Microsoft VisualStudio2015;

· развил творческие способности и самостоятельность в ходе проведения исследований.

 

Литература.

1. Павловская Т.А. C/C++. Программирование на языке высокого уровня. — CПб.: Питер, 2001-2010. — 461 с.

2. Павловская Т.А., Щупак Ю.А. С/С++. Структурное программирование: Практикум. — СПб: ПИТЕР, 2002-2007. — 239 с.

3. Павловская Т.А., Щупак Ю.А. С++. Объектно-ориентированное программирование: Практикум. — СПб: ПИТЕР, 2004-2007. — 265 с.

4. Павловская Т.А., Щупак Ю.А. С/С++. Структурное и объектно-ориентированное программирование: Практикум. — СПб: ПИТЕР, 2010. — 352 с.

5. Учебник: Столяр С.Е., Владыкин А.А. Информатика. Представление данных и алгоритмы. — СПб.: Бином, Невский диалект, 2007. — 382 с.

6. Голицына О.Л., Попов И. И. Программирование на языках высокого уровня: учебное пособие. – М: ФОРУМ, 2011.-496 с.: ил.

 

 

СОДЕРЖАНИЕ

Введение. 2

Тема №1 «Исследование информации различной структуры и обработка её средствами среды программирования Visual Studio с использованием ЯП С/С++». 2

Тема №2 «Решение практических задач методом ООП». 6

Заключение. 11

Литература. 12

 

 



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2017-06-11 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: