Download as pdf or txt
Download as pdf or txt
You are on page 1of 16

Министерство образования республики

Молдова
Технический университет Молдовы
Кафедра «Микроэлектроника и
биомедицинская инженерия»

Отчёт

Лабораторная работа № 1

Тема: Структура – механизм абстракции

выполнил студент гр. Анатий С.

проверил: Митителу В.

Кишинёв 2021
Содержание

Содержание ............................................................................................................ 2
Цель работы ..........................................................................................................................3
Задание.....................................................................................................................................3
Реализация...............................................................................................................................4
Вывод........................................................................................................................................5
.

Реализация

#include <bits/stdc++.h>

using namespace std;


class dog {
private:
string breed;
string nicknume;
int year;
public:
static void start(dog*& d, int& k) {
A:
cout << "Enter the number of dogs " << endl;
cin >> k;
d = new dog[k];
if (k <= 0)
{
cout << "Enter a number greater than zero " << endl;
goto A;
}
}

static void datain(dog* d, int k) {

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


{
cout << "Breed of dog" << i + 1 << endl;
cin >> d[i].breed;
cout << "The dog 's nickname" << i + 1 << endl;
cin >> d[i].nicknume;
cout << "Age of the dog" << i + 1 << endl;
cin >> d[i].year;
}
}
static void adddog(dog*& d, int k)
{
dog* d1 = new dog[k];
for (int i = 0; i < k; i++) {
d1[i].breed = d[i].breed;
d1[i].nicknume = d[i].nicknume;
d1[i].year = d[i].year;
}
d = new dog[k + 1];
int i = k;
cout << "Breed of a new dog" << endl;
cin >> d[i].breed;
cout << "The new dog 's nickname" << endl;
cin >> d[i].nicknume;
cout << "Age of the new dog" << endl;
cin >> d[i].year;
for (int i = 0; i < k; i++) {
d[i].breed = d1[i].breed;
d[i].nicknume = d1[i].nicknume;
d[i].year = d1[i].year;
}
delete[] d1;
}
static void changedog(dog* d, int k)
{
int i;
cout << "Select the dog number to change" << endl;
cin >> i;
i= i - 1;
cout << "Enter a new breed for the dog" << endl;
cin >> d[i].breed;
cout << "Enter a new nickname for the dog" << endl;
cin >> d[i].nicknume;
cout << "Enter a new age for the dog" << endl;
cin >> d[i].year;
}
static void deletedog(dog*& d, int k)
{
B:
int del;
int i;
cout << "The number of the dog you want to deleteЏ" << endl;
cin >> del;
if (del < 0 || del > k) {
cout << "There is no such dog" << endl;
goto B;
}
dog* d1 = new dog[k];
for (i = 0; i < k; i++) {
d1[i].breed = d[i].breed;
d1[i].nicknume = d[i].nicknume;
d1[i].year = d[i].year;
}
d = new dog[k - 1];
i = 0;
for (i; i < del - 1; i++) {
d[i].breed = d1[i].breed;
d[i].nicknume = d1[i].nicknume;
d[i].year = d1[i].year;
}
i = i + 1;
for (i; i < k; i++) {
d[i - 1].breed = d1[i].breed;
d[i - 1].nicknume = d1[i].nicknume;
d[i - 1].year = d1[i].year;
}
delete[] d1;
}

static void compare(dog* d, int k)


{
int i1, i2;
cout << "Enter the number of the dogs being compared" << endl;
cin >> i1 >> i2;
i1--;
i2--;
cout << "Breed: " << d[i1].breed << " / " << d[i2].breed << endl;
cout << "Nickname: " << d[i1].nicknume << " / " << d[i2].nicknume << endl;
cout << "Year : " << d[i1].year << " / " << d[i2].year << endl;

static void print(dog* d, int k)


{
cout << "---------------------------------------------------------------------------------------------------" << endl;
cout << "| # | Breed | Nickname | Year |" << endl;
cout << "---------------------------------------------------------------------------------------------------" << endl;
for (int i = 0; i < k; i++)
{
cout << "|" << setw(3) << i + 1 << setw(2);
cout << "|" << setw(20) << d[i].breed << setw(20);
cout << " | " << setw(20) << d[i].nicknume << setw(20);
cout << " | " << setw(6) << d[i].year << setw(7) << " |" << endl;
cout << "--------------------------------------------------------------------------------------------------- " << endl;
}
}
static void filein(dog*& d, int k)
{

ifstream fin;
fin.open("D:\LAB\POO\\dog.txt");
if (!fin.is_open())
{
cout << "Error" << endl;
}
else if (fin.is_open())
{
for (int i = 0; i < k; i++)
{
fin >> d[i].breed;
fin >> d[i].nicknume;
fin >> d[i].year;
}
}
fin.close();
}
static void fileout(dog*& d, int k)
{
ofstream fout;
fout.open("D:\LAB\POO\\dog.txt");
if (!fout.is_open())
{
cout << "Error" << endl;
}
else if (fout.is_open())
{
fout << "--------------------------------------------------------------------------------------------------------" << endl;
fout << "| # | Breed | Nickname | Year |" << endl;
fout << "--------------------------------------------------------------------------------------------------------" << endl;
for (int i = 0; i < k; i++)
{
fout << "|" << setw(3) << i + 1 << setw(2);
fout << "|" << setw(20) << d[i].breed << setw(20);
fout << " | " << setw(20) << d[i].nicknume << setw(20);
fout << " | " << setw(6) << d[i].year << setw(7) << " |" << endl;
fout << "--------------------------------------------------------------------------------------------------- " << endl;
}
}
}

static void search(dog* d, int k) {


string s;
int s1;
int c;
int f;
cout << "Select an option to search for" << endl;
do {
f = 0;
cout << "1.Breed" << endl;
cout << "2.Nickname" << endl;
cout << "3.Year" << endl;
cout << "0.Exiting the search" << endl;
cin >> c;
switch (c) {
case 1:
cout << "Enter the search object" << endl;
cin >> s;
for (int i = 0; i < k; i++) {
if (s.compare(d[i].breed) == 0) {
f = 1;
}
}
if (f == 0) {
cout << "Nothing found" << endl;
}
else {
cout << "---------------------------------------------------------------------------------------------------" << endl;
cout << "| в„– | Breed | Nickname | Year |" << endl;
cout << "---------------------------------------------------------------------------------------------------" << endl;

for (int i = 0; i < k; i++) {


if (s.compare(d[i].breed) == 0) {
cout << "|" << setw(3) << i + 1 << setw(2);
cout << "|" << setw(20) << d[i].breed << setw(20);
cout << " | " << setw(20) << d[i].nicknume << setw(20);
cout << " | " << setw(6) << d[i].year << setw(7) << " |" << endl;
cout << "--------------------------------------------------------------------------------------------------- " << endl;
}
}
}
break;
case 2:
cout << "Enter the search object" << endl;
cin >> s;
for (int i = 0; i < k; i++) {
if (s.compare(d[i].nicknume) == 0) {
f = 1;
}
}
if (f == 0) {
cout << "Nothing found" << endl;
}
else {
cout << "--------------------------------------------------------------------------------------------------- " << endl;
cout << "| # | Breed | Nickname | Year |" << endl;
cout << "--------------------------------------------------------------------------------------------------- " << endl;

for (int i = 0; i < k; i++) {


if (s.compare(d[i].nicknume) == 0) {
cout << "|" << setw(3) << i + 1 << setw(2);
cout << "|" << setw(20) << d[i].breed << setw(20);
cout << " | " << setw(20) << d[i].nicknume << setw(20);
cout << " | " << setw(6) << d[i].year << setw(7) << " |" << endl;
cout << "--------------------------------------------------------------------------------------------------- " << endl;
}
}
}
break;

case 3:
cout << "Enter the search object" << endl;
cin >> s1;
for (int i = 0; i < k; i++) {
if (s1 == d[i].year) {
f = 1;
}
}
if (f == 0) {
cout << "Nothing found" << endl;
}
else {
cout << "--------------------------------------------------------------------------------------------------- " << endl;
cout << "| # | Breed | Nickname | Year |" << endl;
cout << "--------------------------------------------------------------------------------------------------- " << endl;

for (int i = 0; i < k; i++) {


if (s1 == d[i].year) {
cout << "|" << setw(3) << i + 1 << setw(2);
cout << "|" << setw(20) << d[i].breed << setw(20);
cout << " | " << setw(20) << d[i].nicknume << setw(20);
cout << " | " << setw(6) << d[i].year << setw(7) << " |" << endl;
cout << "---------------------------------------------------------------------------------------------------" << endl;
}
}
}
break;
}
} while (c == 3 || c == 2 || c == 1);
}

static void sortdog(dog* d, int k) {

for (int j = 0; j < 10; j++) {


for (int i = 0; i < k - 1; i++) {
if (d[i].year > d[i + 1].year) {
swap(d[i].year, d[i + 1].year);
swap(d[i].nicknume, d[i + 1].nicknume);
swap(d[i].breed, d[i + 1].breed);
}
else if (d[i].year == d[i + 1].year) {
if (d[i].nicknume > d[i + 1].nicknume) {
swap(d[i].nicknume, d[i + 1].nicknume);
swap(d[i].year, d[i + 1].year);
swap(d[i].breed, d[i + 1].breed);
}

}
}

}
}

};
int main()
{
int s;
int k;
class dog* d = NULL;
dog::start(d, k);
do {
cout << endl << "Select an item from the menu" << endl;
cout << "1.Enter dog data" << endl;
cout << "2.Output the created string" << endl;
cout << "3.Take data from a file" << endl;
cout << "4.Write data to a file" << endl;
cout << "5.Compare structure elements" << endl;
cout << "6.Find a dog" << endl;
cout << "7.Change the data about the dog" << endl;
cout << "8.Sorting Dog Data" << endl;
cout << "9.Exiting and freeing memory" << endl;
cin >> s;
switch (s) {
case 1:
dog::datain(d, k);
break;

case 2:
dog::print(d, k);
break;

case 3:
dog::filein(d, k);
break;

case 4:
dog::fileout(d, k);
break;

case 9:
delete[] d;
exit(1488);
break;
case 5:
dog::compare(d, k);
break;
case 6:
dog::search(d, k);
break;

case 7:
int b;
do {
cout << "Select the type of changes to be made" << endl;
cout << "1.Adding a new dog" << endl;
cout << "2.Change the data about the dog" << endl;
cout << "3.Deleting Dog Data" << endl;
cout << "0.Finish the change" << endl;
cin >> b;
switch (b) {
case 1:
dog::adddog(d, k);
k = k + 1;
break;

case 2:
dog::changedog(d, k);
break;

case 3:
dog::deletedog(d, k);
k = k - 1;
break;
}

} while (b == 1 || b == 2 || b == 3);
break;

case 8:
dog::sortdog(d, k);
break;

default:
cout << "Error!";
break;

}
} while (s != 1488);
return 0;
}

Вывод на экран

Сортировка
Изменения

#include <iostream>

using namespace std;

struct Vec {
float* v = NULL;
int n = 0;
void init(float* v_, int n_) {
if (n > 0)
throw string("Can't init. Vector alredy exist");
else if (n_ < 0)
throw string("Can't init. Wrong quantity");
v = new float[n_];
for (int i = 0; i < n_; i++) {
v[i] = v_[i];
}
n = n_;
}
void clear() {
if (n == 0)
throw string("Can't clear vector. Vector don't exist");
n = 0;
delete v;
}
void setVec(float* v_, int n_) {
if (n == 0)
throw string("Can't clear vector. Vector don't exist");
else if (n_ < 0)
throw string("Can't init. Wrong quantity");
clear();
init(v_, n_);
}
float& operator[] (const int& index) {
if (index < 0 || index >= n)
throw string("Can't init. Wrong quantity");
return v[index];
}
float& getValue(int i) {
return v[i];
}
float getSum() {
float sum = 0;
for (int i = 0; i < n; i++) {
sum += v[i];
}
return sum;
}
};

int main()
{
const int N = 4;
Vec a, b;
float a_array[N] = { 1.5f, 2.0f, 2.99f, 100.6f };
float b_array[N] = { 10.5f, 14.8f, 9.99f, 108.2f };
a.init(a_array, N);
b.init(b_array, N);
cout << a.getSum() << ' ' << b.getSum() << endl;
float j = a.getValue(0);
a.getValue(0) = 1;
for (int i = 0; i < N; i++) {
cout << a[i] * b[i] << ' ';
}

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

You might also like