ООП / 3 и 6 лабы / отчёт 3
.docxНациональный исследовательский институт «МИЭТ»
Факультет МП и ТК. Кафедра ВТ
Курс: «Объектно-ориентированное программирование» для групп МП-21, 22 и 23
Семинар №1.
«Доступ к данным в памяти их обработка»
Выполнил: студент группы МП-21
Павлов Роман
Проверил: Тельминов О. А.
Москва, 2013
Вариант №3.
В3. «Записи». Разработайте программу, сохраняющую записи (порядковый номер ввода, число с плавающей точкой и строку длинной до 30 символов). Управление данными осуществляется с клавиатуры: ввод новой записи, удаление записи по данному номеру номеру/числу/строке, сортировка по номеру/ числу/ строкам.
Ход работы.
#include "stdafx.h"
#include <iostream>
#include <locale.h>
using namespace std;
void deletion(int);
struct spisok
{
int n; //номер
double f; //число
char s[31]; //строка
} list[25];
int cnt = 0; //номер последней заполненной ячейки
int _tmain(int argc, char* argv[])
{
setlocale(LC_ALL, "Russian");
for(;;)
{
cout << endl << "Введите команду:\n\tввод (1)\n\tудаление (2)\n\tсортировка (3)\n\tвывод на экран (4)\n\tвыход (5): ";
int a;
cin >> a;
switch(a)
{
case 1: //ввод
if(cnt == 25)
{
cout << "Нет пустых ячеек!" << endl;
break;
}
cout << "Введите число: ";
cin >> list[cnt].f;
cout << "Введите строку: ";
cin >> list[cnt].s;
list[cnt].n = ++cnt;
break;
case 2: //удаление
if(cnt == 0)
{
cout << "Все ячейки пусты";
break;
}
cout << "Удалить по: номеру (1), числу (2), строке (3): ";
int delnum;
cin >> delnum;
switch(delnum)
{
case 1:
cout << "Введите номер записи: ";
cin >> delnum;
if(delnum > cnt)
{
cout << "Эта ячейка пуста" << endl;
break;
}
deletion(delnum);
break;
case 2:
{cout << "Введите число: ";
double delvalue;
cin >> delvalue;
bool b = true;
for(int i = 0; i <= cnt; i++)
{
if(list[i].f == delvalue)
{
b = false;
deletion(i);
}
}
if(b)
cout << "Нет таких элементов" << endl;}
break;
case 3:
{cout << "Введите строку: ";
char chdel[31];
cin >> chdel;
bool b = true;
for(int i = 0; i <= cnt; i++)
{
if(!strcmp(chdel,list[i].s))
{
b = false;
deletion(i);
}
}
if(b)
cout << "Нет таких элементов" << endl;
break;}
}
break;
case 3:
if(cnt == 0)
{
cout << "Все ячейки пусты" << endl;
break;
}
if(cnt == 1)
{
cout << "Занята всего одна ячейка" << endl;
break;
}
cout << "Сортировать по: числу (1), строке (2): ";
int sortnum;
cin >> sortnum;
spisok temporary;
switch(sortnum)
{
case 1:
for(int i = 0; i < cnt; i++)
{
for(int j = cnt - 1; j > i; j-- )
{
if ( list[j - 1].f > list[j].f )
{
temporary = list[j - 1];
list[j - 1] = list[j];
list[j] = temporary;
}
}
} //фор
break;
case 2:
for(int i = 0; i <= cnt; i++)
{
for(int j = cnt - 1; j >= i; j-- )
{
if (!strcmp(list[j].s, list[j - 1].s))
{
temporary = list[j - 1];
list[j - 1] = list[j];
list[j] = temporary;
}
}
} //фор
break;
} //свич сортнам
break; // сортировка
case 4: //вывод на экран
if(cnt == 0)
{
cout << "Все ячейки пусты" << endl;
break;
}
cout << "Введите номер записи: ";
int visnum;
cin >> visnum;
if(visnum > cnt)
{
cout << "Эта ячейка пуста!" << endl;
break;
}
cout << list[cnt- 1].f << endl << list[cnt- 1].s << endl;
break;
case 5: //выход
return 0;
default: //не введено ничего
cout << "Введите корректное значение." << endl;
break;
} //switch
} //for
return 0;
} //_tmain
void deletion(int id) //удаление ячейки по заданному номеру
{
list[id].f = '\0';
*list[id].s = '\0';
for(int i = id; i < cnt; i++) //при удалении записи всё после неё смещается на 1 ячейку назад
{
list[i].f = list[i + 1].f;
strcpy(list[i].s, list[i + 1].s);
list[i].n--;
}
cnt--;
}