
2 семестр ФИБС / Информатика / 2 практика / group_FIO_P2_2_2
.doc
МИНОБРНАУКИ РОССИИ
Санкт-Петербургский государственный
электротехнический университет
«ЛЭТИ» им. В.И. Ульянова (Ленина)
Кафедра ИИСТ
отчет
по практической работе №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++, а также освоены навыки работы с объектно-ориентированным программированием. Была сделана программа по общему и индивидуальному заданию.