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

ООП / 3 и 6 лабы / отчёт 3

.docx
Скачиваний:
23
Добавлен:
18.02.2017
Размер:
55.43 Кб
Скачать

Национальный исследовательский институт «МИЭТ»

Факультет МП и ТК. Кафедра ВТ

Курс: «Объектно-ориентированное программирование» для групп МП-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--;

}

Соседние файлы в папке 3 и 6 лабы