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

МИНОБРНАУКИ РОССИИ

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

электротехнический университет

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

Кафедра ИИСТ

отчет

по практической работе №2

по дисциплине «Информатика»

Тема: Классы в С++

Студент гр. номер

ФИО

Преподаватель

Куракина Н.И

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

20__

Цель работы.

Познакомиться с классами в языке программирования С++, узнать что такое конструктор и деструктор, научиться работать с классами и выполнить соответствующие задание по данной теме.

Основные теоретические положения.

В языке программирования C++ классы состоят из свойств и методов. Свойства — это любые данные, которыми можно характеризовать объект класса. К примеру у объекта класса машины будут свойства: номер, максимальная скорость и название запчастей. Методы — это функции, которые могут выполнять какие-либо действия над данными (свойствами) класса. Все свойства и методы классов имеют права доступа. По умолчанию, все содержимое класса является доступным для чтения и записи только для него самого. Для того, чтобы разрешить доступ к данным класса извне, используют модификатор доступа public. Все функции и переменные, которые находятся после модификатора public, становятся доступными из всех частей программы. Закрытые данные класса размещаются после модификатора доступа private. Если отсутствует модификатор public, то все функции и переменные, по умолчанию являются закрытыми

Конструктор (от слова construct — создавать) – это специальный метод класса, который предназначен для инициализации элементов класса некоторыми начальными значениями. Объекты класса создаются и инициализируются специальными функциями, называемыми конструкторами. Деструктор (от слова destruct — разрушать) — специальный метод класса, который служит для уничтожения элементов класса. Динамически созданные объекты удаляются при применении к указателю на объект оператора delete. Чаще всего его используют тогда, когда в конструкторе, при создании объекта класса, динамически был выделен участок памяти и необходимо эту память очистить, если эти значения уже не нужны для дальнейшей работы программы. Конструктор и деструктор, мы всегда объявляем в разделе public и при объявлении конструктора, тип данных возвращаемого значения не указывается. Имя класса и конструктора должно быть идентично, а имя деструктора идентично имени конструктора, но с приставкой ~. Деструктор срабатывает в тот момент, когда завершается работа программы и уничтожаются все данные.

Задание.

Общее задание: написать программу, определяющую максимальное, минимальное, среднее арифметическое и среднее геометрическое значение в одномерном массиве целого типа. Используя понятие класса, создать новый тип данных <<вектор>>. Предусмотреть:

1. динамическое выделение памяти под вектор в конструкторе.

2. заполнение элементов массива оформить в виде функции-члена.

3.определение максимального, минимального и средних значений оформить в виде отдельных функций-членов.

Код общего задания:

#include <cstdio>

#include <cmath> // содержит математические функции

#include <locale.h>

class vector // класс под названием vector

{

int *mas;// переменная которая без public по умолчанию закрытые(спец. приват)

int N; // переменная которая без public по умолчанию закрытые(спец. приват)

public: // cпецификатор доступа публичный

vector (int n); // Конструктор

void input(); // функция с названием input, которая ничего не принимает и поэтому уберу в скобках void

int Bignum(); //функция

int Litnum(); //функция

float MidlAnum();//функция

float MidlGnum();//функция

~vector(); // диструктор

}; // конец объявление класса

// Два двоеточия называются оператором расширения видимости

vector::vector (int n) // конструктор в котором создаются объекты

{

N=n;

mas= new int[n]; //оператор new выделяет динамически память массиву int[n]

}

vector::~vector() // деструктор (название такое же как и у класса)

{

delete(mas); //удаляются динамически созданные объекты

}

void vector::input() // функция в которой двоеточиями показываем, что в классе вектор описываем фунцию input

{

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

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

scanf("%d", &mas[i]);

}

int vector::Bignum() //функция поиска наибольшего значени массива

{

int max=0;

max=mas[0];

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

{

if (mas[i]>max)

{

max=mas[i];

}

}

return max;

}

int vector::Litnum() //функция поиска минимального значени массива

{

int minimal=0;

minimal=mas[0];

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

{

if(mas[i]<minimal)

{

minimal=mas[i];

}

}

return minimal;

}

float vector::MidlAnum() //функция среднего арифмитического

{

float def=0, midAr;

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

{

def=def+mas[i];

}

midAr=def/N;

return midAr;

}

float vector::MidlGnum() //функция среднего геометрического

{

float proi=1,SredGm;

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

{

proi=proi*mas[i];

}

SredGm=pow((proi),(1.0/N));

return SredGm;

}

int main(int argc, char** argv)

{

setlocale(LC_ALL, "rus");

int n; // Переменная кол-ва

printf("Введите количество чисел: \n");

scanf("%d", &n);

vector ob(n); // конструктор (создание объекта ob)

ob.input(); //с ob (объектом) выполняет фуункцию

printf("Максимум %d\nМинимум %d\nСреднее арифметическое %0.2f\nСреднее геометрическое %0.2f\n", ob.Bignum(),ob.Litnum(),ob.MidlAnum(),ob.MidlGnum());

ob.~vector(); //дисктруктор ,который чистит

}

Индивидуальное задание: Используя понятие класса, создать новый тип данных VECTOR (одномерный массив). Массивы создаются в динамической области памяти с использованием операций NEW и DELETE. Исходными данными являются: реальный размер массивов и их значения.

Предусмотреть:

1. динамическое выделение памяти под вектор в конструкторе.

2. заполнение элементов массива оформить в виде функции-члена.

3. определить функции-члены, решающие следующую задачю: Заданы два массива А(5) и В(5). Подсчитать в них количество элементов, кратных трем и первым на печать вывести массив, имеющий наибольшее их количество.

Код индивидуального задания:

#include <cstdio>

#include <cmath>

#include <locale.h>

class vector

{

int *mas;

int N;

public:

vector (int n);

void input();

void give(int b);

int Bignum();

int Litnum();

float MidlAnum();

float MidlGnum();

int Poisk_krat();

~vector();

};

vector::vector (int n)

{

N=n;

mas= new int[n];

}

vector::~vector()

{

delete(mas);

}

void vector::input()

{

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

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

scanf("%d", &mas[i]);

}

void vector::give(int b)

{

if((b)==(1))

{

printf("Массив A: ");

}

else

{

printf("Массив B: ");

}

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

{

printf("%d\t", mas[i]);

}

}

int vector::Bignum()

{

int max=0;

max=mas[0];

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

{

if (mas[i]>max)

{

max=mas[i];

}

}

return max;

}

int vector::Poisk_krat()

{

int t=0;

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

{

if (((mas[i])%3)==(0))

{

t=t+1;

}

}

return t;

}

int vector::Litnum()

{

int minimal=0;

minimal=mas[0];

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

{

if(mas[i]<minimal)

{

minimal=mas[i];

}

}

return minimal;

}

float vector::MidlAnum()

{

float def=0, midAr;

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

{

def=def+mas[i];

}

midAr=def/N;

return midAr;

}

float vector::MidlGnum()

{

float proi=1,SredGm;

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

{

proi=proi*mas[i];

}

SredGm=pow((proi),(1.0/N));

return SredGm;

}

int main(int argc, char** argv)

{

setlocale(LC_ALL, "rus");

int n;

printf("Введите количество чисел: \n");

scanf("%d", &n);

vector ob(n);

ob.input();

printf("Максимум %d\nМинимум %d\nСреднее арифметическое %0.2f\nСреднее геометрическое %0.2f\n", ob.Bignum(),ob.Litnum(),ob.MidlAnum(),ob.MidlGnum());

ob.~vector();

vector A(5);

vector B(5);

A.input();

B.input();

int b=0;

if ((A.Poisk_krat())==(B.Poisk_krat())){

printf("Количество кратных чисел трем равно или их нет\n");

A.~vector();

B.~vector();

}

else{

if ((A.Poisk_krat())>(B.Poisk_krat())){

b=1;

A.give(b);

b=0;

B.give(b);

A.~vector();

B.~vector();

}

else{

B.give(b);

b=1;

A.give(b);

B.~vector();

A.~vector();

}

}

}

Результаты работы

1.Общее задание. Вводимые данные: количество чисел 7(25,4,6,48,12,10,120).

Рисунок 1. Результат работы общего заадания .

2. Индивидуальное задание. Вводимые данные: A-20;18;3;9;19.B-3;29;33;99;6.

Рисунок 2. Результат работы индивидуального задания.

Вывод

В данной лабораторной работе были изучены классы в программной среде Dev C++, а также освоены навыки работы с объектно-ориентированным программированием. Была сделана программа по общему и индивидуальному заданию.

13

Соседние файлы в папке 2 практика