Содержание
ВНИМАНИЕ | Для заказа программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Работа со списком
Краткая постановка задания
Необходимо написать модуль, содержащий решения $16$ задач для работы со списком, и программу, демонстрирующую работу этого модуля. Программа должна быть выполнена либо в качестве консольного приложения (тогда обязателен командно-текстовый интерфейс), либо иметь графический интерфейс пользователя.
При необходимости следует использовать вспомогательные функции. В разработанном модуле не должны применяться интерфейсные функции (исключение возможно только для функций ввода элементов и вывода списка).
Комментарий для студентов от разработчика программы
Я (Александр Георгиевич) полностью разработал решение данной задачи для всех студентов, изучающих данную тему. Программа реализована в среде MS Visual Studio на языке программирования C++ (консольный проект).
➡ За $1\ 300$ рублей могу перевести данную программу с консольного варианта на визуальный формат(формы с различными визуальными элементами управления).
В коде я учел все пожелания и требования к данной задаче, выдвигаемые составителями. Соблюдены названия переменных, порядок выполнения операторов и пр.нюансы.
➡ Хочется отметить лишь одну весомую неточность, допущенную составителем: в пункте $№17$ требуется отсортировать линейный список устойчивым алгоритмом сортировки, и предлагается воспользоваться сортировкой выбором.
Дело в том, что данная сортировка является как раз-таки неустойчивой! Поэтому я выбрал для сортировки списка оптимальную сортировку пузырьком (сортировку обменом), которая является устойчивой.
Напомню, что под устойчивой сортировкой понимают такую сортировку, которая не меняет взаимного расположения элементов с одинаковыми ключами.
В итоге получилась программа, состоящая из $500+$ строк кода. Для студенческой лабораторной работы данный объем является немалым.
➡ Программа снабжена колоссальным количеством подсказок, различных информативных сообщений, помогающих пользователю ориентироваться в ходе выполнения программы.
Необходимые программные функции для кодирования
Ниже представлен список необходимых функций, требующихся для успешного решения поставленной задачи.
Самое важное — помнить о том, что функция должна строго решать какую-то конкретную одну задачу.
№ | Название функции | Назначение функции |
1 | int Menu(void) | Главное меню программы. |
2 | int InputIntValue(void) | Ввод значения информационного поля элемента вводом с клавиатуры. |
3 | list* CreateElement(int pinf) | Создание нового элемента с заданным значением информационного поля. |
4 | void AddElementBeginList(list** pfirst, const int pinf) | Добавление элемента в начало линейного списка. |
5 | void AddElementEndList(list** pfirst, const int pinf) | Добавление элемента в конец линейного списка. |
6 | void AddElementBeforeTarget(list* pfirst, const int pinf, const int pnumber) | Добавление элемента перед заданным по номеру элементом списка. |
7 | void AddElementAfterTarget(list* pfirst, const int pinf, const int pnumber) | Добавление элемента после заданного по номеру элемента списка. |
8 | void DeleteElementBeginList(list** pfirst) | Удаление элемента из начала односвязного списка. |
9 | void DeleteElementEndList(list* pfirst) | Удаление элемента из конца односвязного списка. |
10 | void DeleteTargetElementByNumber(list* pfirst, const int pnumber) | Удаление заданного по номеру элемента списка. |
11 | void ClearList(list** pfirst) | Удаление всех элементов списка (очистка списка). |
12 | void PrintList(const list* pfirst) | Вывод элементов линейного списка на экран пользователя. |
13 | list* GetElement(list* pfirst, const int pnumber) | Получение заданного по номеру элемента списка для анализа. |
14 | int GetCountElementsList(const list* pfirst) | Получение количества элементов односвязного списка. |
15 | bool IsExistElement(list* pfirst, const int pinf) | Поиск образца (заданного элемента) по значению в списке. |
16 | list* CopyList(list* pfirst) | Формирование полной/глубокой копии линейного списка. |
17 | void SplitList(list* pfirst) | Расщепление линейного списка на $2$ подсписка по критерию четность/нечетность значений элементов. |
18 | void BubbleSortList(list* pfirst) | Сортировка списка методом пузырька (обменом). |
19 | int main(void) | Главная функция всей программы (точка входа). |
Итого получилось $19$ функций. Каждая из этих функций выполняет строго одно действие и это важнейший момент правильного программирования.
Реализация задачи на языке С++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 | #include <iostream> // для ввода, вывода (cin, cout) #include <iomanip> // для форматированного вывода (setw) #include <Windows.h> using namespace std; // быстрое обращение к функция из стандартного пространства имен //-------------------------------------------------------------------------- // структура "Элемент списка" //-------------------------------------------------------------------------- struct list { int inf; // информационное поле элемента list* next; // ссылочное поле на следующий элемент списка }; //-------------------------------------------------------------------------- // главное меню программы //-------------------------------------------------------------------------- int Menu(void) { int select; do { cout << "1 - ДОБАВЛЕНИЕ ЭЛЕМЕНТА В НАЧАЛО СПИСКА" << endl; cout << "2 - ДОБАВЛЕНИЕ ЭЛЕМЕНТА В КОНЕЦ СПИСКА" << endl; cout << "3 - ДОБАВЛЕНИЕ ЭЛЕМЕНТА ПЕРЕД ЗАДАННЫМ ЭЛЕМЕНТОМ" << endl; cout << "4 - ДОБАВЛЕНИЕ ЭЛЕМЕНТА ПОСЛЕ ЗАДАННОГО ЭЛЕМЕНТА" << endl; cout << "5 - УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ НАЧАЛА СПИСКА" << endl; cout << "6 - УДАЛЕНИЕ ЭЛЕМЕНТА ИЗ КОНЦА СПИСКА" << endl; cout << "7 - УДАЛЕНИЕ ЗАДАННОГО ЭЛЕМЕНТА (ПО НОМЕРУ)" << endl; cout << "8 - УДАЛЕНИЕ ВСЕГО СПИСКА" << endl; cout << "9 - ВЫВОД ЭЛЕМЕНТОВ СПИСКА НА ЭКРАН" << endl; cout << "10 - ПОДСЧЕТ КОЛИЧЕСТВА ЭЛЕМЕНТОВ СПИСКА" << endl; cout << "11 - ПОЛУЧЕНИЕ ЗАДАННОГО УЗЛА СПИСКА ДЛЯ АНАЛИЗА" << endl; cout << "12 - ПОИСК ОБРАЗЦА" << endl; cout << "13 - СОЗДАНИЕ КОПИИ СПИСКА" << endl; cout << "14 - РАЗДЕЛЕНИЕ СПИСКА НА ДВА ПОДСПИСКА (ЧЕТ/НЕЧЕТ)" << endl; cout << "15 - СОРТИРОВКА СПИСКА МЕТОДОМ ОБМЕНА (ПУЗЫРЬКОВАЯ)" << endl; cout << "16 - ВЫХОД" << endl; cout << "Выбор: "; cin >> select; } while((select < 1) || (select > 16)); return select; } //-------------------------------------------------------------------------- // ввод значения информационного поля элемента вводом с клавиатуры //-------------------------------------------------------------------------- int InputIntValue(void) { int value; cout << endl << "Введите значение элемента (целое число): "; cin >> value; return value; } //-------------------------------------------------------------------------- // создание элемента с заданным значением //-------------------------------------------------------------------------- list* CreateElement(int pinf) { list* add = new list; add->inf = pinf; add->next = NULL; return add; } //-------------------------------------------------------------------------- // добавление элемента в начало списка //-------------------------------------------------------------------------- void AddElementBeginList(list** pfirst, const int pinf) { list* add = CreateElement(pinf); add->next = *pfirst; *pfirst = add; } //-------------------------------------------------------------------------- // добавление элемента в конец списка //-------------------------------------------------------------------------- void AddElementEndList(list** pfirst, const int pinf) { list* add = CreateElement(pinf); if(*pfirst == NULL) *pfirst = add; else { list* p = *pfirst; while(p->next != NULL) p = p->next; p->next = add; } } //-------------------------------------------------------------------------- // добавление элемента перед заданным элементом //-------------------------------------------------------------------------- void AddElementBeforeTarget(list* pfirst, const int pinf, const int pnumber) { list* p = pfirst; for(int i = 1; i < (pnumber - 1); i++) p = p->next; list* add = CreateElement(pinf); add->next = p->next; p->next = add; } //-------------------------------------------------------------------------- // добавление элемента после заданного элемента //-------------------------------------------------------------------------- void AddElementAfterTarget(list* pfirst, const int pinf, const int pnumber) { list* p = pfirst; for(int i = 1; i < pnumber; i++) p = p->next; list* add = CreateElement(pinf); add->next = p->next; p->next = add; } //-------------------------------------------------------------------------- // удаление элемента из начала списка //-------------------------------------------------------------------------- void DeleteElementBeginList(list** pfirst) { list* p = *pfirst; *pfirst = p->next; delete p; p = NULL; } //-------------------------------------------------------------------------- // удаление элемента из конца списка //-------------------------------------------------------------------------- void DeleteElementEndList(list* pfirst) { list* p = pfirst; while(p->next->next != NULL) p = p->next; delete p->next; p->next = NULL; } //-------------------------------------------------------------------------- // удаление заданного элемента по номеру //-------------------------------------------------------------------------- void DeleteTargerElementByNumber(list* pfirst, const int pnumber) { list* p = pfirst; for(int i = 1; i < (pnumber - 1); i++) p = p->next; list* del = p->next; p->next = del->next; delete del; del = NULL; } //-------------------------------------------------------------------------- // удаление всего списка //-------------------------------------------------------------------------- void ClearList(list** pfirst) { list* p = *pfirst; while(*pfirst != NULL) { *pfirst = p->next; delete p; p = *pfirst; } *pfirst = NULL; } //-------------------------------------------------------------------------- // вывод элементов списка на экран //-------------------------------------------------------------------------- void PrintList(const list* pfirst) { cout << endl << "Элементы списка имеют вид: "; while(pfirst) { cout << setw(8) << pfirst->inf; pfirst = pfirst->next; } } //-------------------------------------------------------------------------- // получение заданного узла списка для анализа //-------------------------------------------------------------------------- list* GetElement(list* pfirst, const int pnumber) { list* p = pfirst; for(int i = 1; i < pnumber; i++) p = p->next; return p; } //-------------------------------------------------------------------------- // подсчет количества элементов списка //-------------------------------------------------------------------------- int GetCountElementsList(const list* pfirst) { int count = 0; while(pfirst) { count++; pfirst = pfirst->next; } return count; } //-------------------------------------------------------------------------- // поиск образца (по значению) //-------------------------------------------------------------------------- bool IsExistElement(list* pfirst, const int pinf) { list*p = pfirst; while(p != NULL) { if(p->inf == pinf) return true; p = p->next; } return false; } //-------------------------------------------------------------------------- // получение копии списка //-------------------------------------------------------------------------- list* CopyList(list* pfirst) { list* newlist = NULL; while(pfirst != NULL) { AddElementEndList(&newlist, pfirst->inf); pfirst = pfirst->next; } return newlist; } //-------------------------------------------------------------------------- // разделение списка на 2 подсписка по четности/нечетности //-------------------------------------------------------------------------- void SplitList(list* pfirst) { list* chet = NULL; list* nechet = NULL; while(pfirst != NULL) { if(pfirst->inf % 2 == 0) AddElementEndList(&chet, pfirst->inf); else AddElementEndList(&nechet, pfirst->inf); pfirst = pfirst->next; } cout << endl << "Список расщеплен на два подсписка по критерию четности/нечетности" << endl; PrintList(chet); PrintList(nechet); ClearList(&chet); ClearList(&nechet); cout << endl << "Память из-под полученных временных подсписков успешно удалена."; } //-------------------------------------------------------------------------- // сортировка списка по возрастанию ключей (методом обмена) //-------------------------------------------------------------------------- void BubbleSortList(list* pfirst) { list* p = pfirst; while(pfirst->next != NULL) { list* sort = p; bool isSort = true; while(sort->next != NULL) { if(sort->inf > sort->next->inf) { int swap = sort->inf; sort->inf = sort->next->inf; sort->next->inf = swap; isSort = false; // сортировка еще не закончена } sort = sort->next; } if(isSort == true) // элементы УЖЕ упорядочены, поэтому дальше сортировать смысла нет break; pfirst = pfirst->next; } } //-------------------------------------------------------------------------- // главная функция программы (точка входа) //-------------------------------------------------------------------------- int main(void) { // настройка заголовка окна консоли static const TCHAR* myTitle = TEXT("Практика на ЭВМ. Структуры данных и алгоритмы. Линейные списки"); SetConsoleTitle(myTitle); // настройка руссификации диалогов setlocale(LC_ALL, "rus"); list* first = NULL; // указатель на начало списка (на 1-ый элемент списка) int select; // хранит номер операции выбранной пользователем из главного меню do { select = Menu(); // вызываем главное меню программы // анализируем выбор пользователя и вызываем ту обработку, которая его интересует switch (select) { case 1: // добавление элемента в начало списка { AddElementBeginList(&first, InputIntValue()); cout << "Элемент успешно добавлен в начало списка."; break; } case 2: // добавление элемента в конец списка { AddElementEndList(&first, InputIntValue()); cout << "Элемент успешно добавлен в конец списка."; break; } case 3: // добавление элемента перед заданным элементов { int count = GetCountElementsList(first); if(count == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Вставка перед заданным элементом невозможна."; else { PrintList(first); int number; cout << endl << "Введите номер элемента, перед которым требуется вставить новый элемент (нумерация с 1): "; cin >> number; if((number < 1) || (number > count)) cout << "Элемента с введенным номером не существует! Вставка невозможна."; else { if(number == 1) // равносильно вставке в начало списка AddElementBeginList(&first, InputIntValue()); else AddElementBeforeTarget(first, InputIntValue(), number); cout << "Элемент успешно добавлен перед заданным элементом."; } } break; } case 4: // добавление элемента после заданного элемента { int count = GetCountElementsList(first); if(count == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Вставка после заданного элемента невозможна."; else { PrintList(first); int number; cout << endl << "Введите номер элемента, после которого требуется вставить новый элемент (нумерация с 1): "; cin >> number; if((number < 1) || (number > count)) cout << "Элемента с введенным номером не существует! Вставка невозможна."; else { if(number == count) // равносильно вставке в конец списка AddElementEndList(&first, InputIntValue()); else AddElementAfterTarget(first, InputIntValue(), number); cout << "Элемент успешно добавлен после заданного элемента."; } } break; } case 5: // удаление элемента из начала списка { if(GetCountElementsList(first) == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Удаление элемента из начала списка невозможно."; else { PrintList(first); DeleteElementBeginList(&first); PrintList(first); cout << endl << "Элемент успешно удален из начала списка."; } break; } case 6: // удаление элемента из конца списка { int count = GetCountElementsList(first); if(count == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Удаление элемента из конца списка невозможно."; else { PrintList(first); if(count == 1) // удаляется единственный элемент DeleteElementBeginList(&first); else DeleteElementEndList(first); PrintList(first); cout << endl << "Элемент успешно удален из конца списка."; } break; } case 7: // удаление заданного элемента (по номеру) { int count = GetCountElementsList(first); if(count == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Удаление заданного элемента невозможно."; else { PrintList(first); int number; cout << endl << "Введите номер элемента, который требуется удалить (нумерация с 1): "; cin >> number; if((number < 1) || (number > count)) cout << "Элемента с введенным номером не существует! Удаление невозможно."; else { if(number == 1) // равносильно удалению из начала списка DeleteElementBeginList(&first); else if(number == count) // равносильно удалению из конца списка DeleteElementEndList(first); else DeleteTargerElementByNumber(first, number); // удаляется срединный элемент PrintList(first); cout << endl << "Заданный элемент успешно удален из списка."; } } break; } case 8: // удаление всего списка { ClearList(&first); cout << endl << "Список успешно очищен от элементов (список стал пустым)."; break; } case 9: // вывод на экран элементов списка { if(GetCountElementsList(first) == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Печать невозможна."; else PrintList(first); break; } case 10: // подсчет кол-ва элементов в списке { cout << endl << "На данный момент в списке находится элементов: " << GetCountElementsList(first) << " шт."; break; } case 11: // получение заданного узла списка { int count = GetCountElementsList(first); if(count == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Получение заданного элемента для анализа невозможно."; else { PrintList(first); int number; cout << endl << "Введите номер элемента, к которому требуется получить доступ (нумерация с 1): "; cin >> number; if((number < 1) || (number > count)) cout << "Элемента с введенным номером не существует! Доступ получить невозможно."; else { list* p = GetElement(first, number); cout << endl << "Значение заданного элемента: " << p->inf << endl; cout << "Значение следующего элемента: "; if(p->next == NULL) cout << "NULL" << endl; else cout << p->next->inf << endl; cout << "Адрес заданного элемента: " << hex << p << endl; cout << endl << "Анализ успешно завершен."; } } break; } case 12: // поиск образца { if(GetCountElementsList(first) == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Поиск образца невозможен."; else { PrintList(first); int inf; cout << endl << "Введите значение элемента для поиска: "; cin >> inf; if(IsExistElement(first, inf) == true) cout << "Элемент с заданным ключом присутствует в списке."; else cout << "Элемент с заданным ключом отсутствует в списке."; } break; } case 13: // получение копии списка { if(GetCountElementsList(first) == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Получение копии списка невозможно."; else { list* newlist = CopyList(first); cout << endl << "Копия списка успешно проведена!"; PrintList(newlist); ClearList(&newlist); cout << endl << "Элементы копии списка удалены из памяти."; } break; } case 14: // разделение списка по критерию четности/нечетности ключей { if(GetCountElementsList(first) == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Расщепление списка на 2 подсписка невозможно."; else { PrintList(first); SplitList(first); } break; } case 15: // сортировка списка методом обмена { if(GetCountElementsList(first) == 0) cout << endl << "В списке нет ни одного элемента (список пуст)! Сортировка списка невозможна."; else { PrintList(first); BubbleSortList(first); cout << endl << "Сортировка списка по возрастанию ключей методом оптимальной сортировки обменом произведена успешно!" << endl; PrintList(first); } break; } } if(select != 16) { fflush(stdin); cout << endl << "Для продолжения работы программы нажмите ENTER..."; cin.get(); } } while(select != 16); // незабываем удалить память из-под списка при закрытии программы ClearList(&first); return 0; // завершение работы программы и передача управления в ОС } //-------------------------------------------------------------------------- |
Результаты работы программы
№ | Смысл операции и результат | |
1 | Попытка поиска элемента (на данный момент список пуст). | |
2 | Добавление элемента со значением $15$ в начало списка. | |
3 | Добавление элемента со значением $17$ в конец списка. | |
4 | Добавим элементы со значеним $5$, $120$ в начало списка, а затем $13$, $-6$, $23$ в конец списка и распечатаем элементы списка на экран. | |
5 | Удалим элемент, стоящий на $3$-й позиции (нумерация элементов с $1$). | |
6 | Попробуем удалить элемент, задав некорректный номер элемента. | |
7 | Удалим последний элемент списка. | |
8 | Удалим первый элемент списка. | |
9 | Добавим элемент перед заданным по номеру элементом. | |
10 | Распечатаем элементы списка на экран. | |
11 | Расщепим данный список на $2$ подсписка. | |
12 | Попробуем найти элемент в списке со значением $13$. | |
13 | Добавим элемент после заданного элемента по номеру. | |
14 | Попробуем найти элемент по его номеру для проведения анализа. | |
15 | Получим копию данного списка. | |
16 | Запросим количество элементов списка. | |
17 | Отсортируем список пузырьковой сортировкой по возрастанию ключей элементов списка. | |
18 | Удалим все элементы из списка. | |
19 | Попробуем распечатать пустой список на экран. |
➡ Стоимость заказа решения данной задачи в визуальном формате (с формами и визуальными элементами управления) составляет $1\ 500$ рублей.
Индивидуальные задания
Постановка задания
Задание для всех вариантов звучит так (или, возможно, немного изменено, т к могут быть разные издания учебного пособия).
Для всех вариантов необходимо написать программу для решения задачи. Для хранения данных применять линейный список; для хранения даты и времени использовать тип данных time_t; исходные данные брать из текстового файла с именем «test.txt». Файл сдается вместе с работой и должен содержать не менее $10$ записей.
В начале работы программы данные загружаются в список, а пользователю предлагается меню в случае командно-текстового интерфейса или же графический интерфейс.
Обязательно должно быть реализовано выполнение следующих функций:
- добавления элемента в конец, начало, середину (до и после введенного номера);
- удаления элемента из начала, середины, конца;
- печати содержимого списка;
- задания конкретного варианта (поиск и сортировка по заданным полям).
Для решения задач обязательно использовать функции. Все необходимые данные для функций должны передаваться им в качестве параметров. Использование глобальных переменных в функциях не допускается.
Варианты заданий
№ вар. | Формулировка |
1. | Счет в банке представляет собой структуру с полями: номер счета, код счета, фамилия владельца, сумма на счете, дата открытия счета, годовой процент начисления. Реализовать поиск и сортировку по номеру счета, дате его открытия и фамилии владельца. |
2. | Запись о товаре на складе представляет собой структуру с полями: номер склада, код товара, наименование товара, дата поступления на склад, срок хранения в днях, количество единиц товара, цена за единицу товара. Поиск и сортировка — по номеру склада, наименованию товара. Вывести список просроченных товаров (поиск всех товаров, у которых на текущую дату истек срок хранения). |
3. | Запись о преподаваемой дисциплине представляется структурой: код дисциплины в учебном плане, наименование дисциплины, фамилия преподавателя, код группы, количество студентов в группе, количество часов лекций, количество часов практических занятий, вид итогового контроля (зачет или экзамен), дата начала занятий. Поиск и сортирвока — по фамилии преподавателя, количеству часов, дате начала занятий. |
4. | Информационная запись о книге, выданной на руки абоненту, представляет собой структуру следующего вида: номер читательского билета, фамилия абонента, дата выдачи, количество дней, автор, название, год издания, цена. Поиск и сортировка — по номеру читательского билета, автору книги. Вывести список все просроченных книг (поиск всех книг, которые на текущую дату должны быть сданы). |
5. | Информационная запись о файле содержит следующие поля: каталог, имя файла, расширение, дата и время создания, атрибуты «только для чтения», «скрытый», «системный», количество выделенных секторов (размер секотора принять равным $512$ байтам). Поиск и сортировка — по каталогу, дате создания файла. Выяснить, поместится ли файл на носитель с некоторым количеством секторов. |
6. | Разовый платеж за телефонный разговор является структурой с полями: фамилия плательщика, номер телефона, дата разговора, тариф за минуту разговора, время начала разговора, время окончания разговора. Поиск и сортировка — по фамилии плательщика, дате разговора. Найти все разговоры со временем разговора больше заданного. |
7. | Модель компьютера характеризуются кодом и маркой компьютера, типом процессора (может содержать цифры и буквы), частотой работы процессора, объемом оперативной памяти, объемом жесткого диска, датой выпуска на рынок, стоимостью компьютера в рублях и количеством экзмепляров, имеющихся в наличии. Поиск и сортировка — по типу процессора, объему ОЗУ, дате выпуска компьютера на рынок. |
8. | Список абонентов сети кабельного телевидения состоит из элементов следующей структуры: фамилия, район, адрес, телефон, номер договора, дата заключения договора, оплата установки, дата последнего платежа. Поиск и сортировка — по району, номеру договора, дате последнего платежа. |
9. | Сотрудник представлен структурой Person с полями: табельный номер, номер отдела, фамилия, оклад, дата поступления на работу, процент надбавки, процент налоговых сборов, количество отработанных дней в месяце, количество рабочих дней в месяце, начислено, удержано. Поиск и сортировка — по номеру отдела, дате поступления на работу, фамилии. |
10. | Запись о багаже пассажира авиарейса содержит следующие поля: номер рейса, дата и время вылета, пункт назначения, фамилия пассажира, количество мест багажа, суммарный вес багажа. Поиск и сортировка — по дате вылета, пункту назначения. Найти всех пассажиров, у которых масса багажа выше максимально допустимой. |
11. | Учетная запись посещения спорткомплекса имеет структуру: фамилия клиента, код и вид спортивного занятия, фамилия тренера, дата и время начала тренировки, количество минут, тариф. Поиск и сортировка — по фамилии клиента, дате начала и количеству минут тренировки (больше или меньше введенного). |
12. | Одна запись о медикаменте содержит следующие поля: номер аптеки, название лекарства, количество упаковок, имеющиеся в наличии в данной аптеке, стоимость одной упаковки, дата поступления в аптеку, срок хранения (в днях). Поиск и сортировка — по номеру аптеки, наименованию препарата, дате поступления. |
13. | Одна запись журнала учета содержит поля: код игрушки, название игрушки, тип игрушки, возрастные ограничения (например, от 6 лет), цена за единицу, количество в наличии, дата поступления в магазин, поставщик. Поиск и сортировка — по дате поступления, поставщику, возрастным ограничениям. |
14. | Один элемент (автомобиль) представляет собой структуру с полями: фамилия владельца, марка автомобиля, требуемая марка бензина, мощность двигателя, объем бака, остаток бензина, объем масла, дата техосмотра. Дана фиксированная цена литра бензина и заливки масла. Поиск и сортировка — по марке автомобиля, мощности двигателя, дате техосмотра. |
15. | Запись в журнале зимней экзаменационной сессии представляет собой структуру с полями: курс, код группы, фамилия студента, дата поступления, номер зачетной книжки, дисциплина, оценка за экзамен по дисциплине. Поиск и сортировка — по номеру курса, номеру зачетной книжки, дате поступления. |
16. | Структура одной записи оплаты за коммунальные услуги содержит поля: номер дома, номер квартиры, фамилия владельца, вид платежа (квартплата, газ, вода, электричество), дата платежа, сумма платежа, процент пени, на сколько дней просрочен платеж. Поиск и сортировка — по номеру дома, виду платежа, дате платежа. |
17. | Одна запись счета за ремонтные работы содержит поля: название фирмы, вид работ, единица измерения, стоимость единицы выполненных работ, дата исполнения, количество выполненных работ. Поиск и сортировка — по названию фирмы, виду работ, дате исполнения. |
18. | Одна учетная запись журнала стоянки автомобилей имеет структуру: номер автомобиля, фамилия владельца, дата и время начала, дата и время окончания, тариф за час. Поиск и сортировка — по номеру автомобиля, дате начала стоянки, фамилии владельца. |
19. | Структура записи о сельскохозяйственном продукте содержит поля: наименование района (где выращивают), наименование продукта, площадь (га), урожайность (кг/га), цена за $1$ кг, потери при транспортировке (%), стоимость продукта, предполагаемая дата сбора. Поиск и сортировка — по наименованию района, урожайности, предполагаемой дате сбора. |
20. | В туристической фирме учетная запись о проданном туре содержит следующие поля: наименование тура, фамилия клиента, цена одного дня (в рублях), дата заезда, количество дней, стоимость проезда, курс валюты, количество валюты, стоимость проезда. Поиск и сортировка — по наименованию тура, стоимости проезда, дате заезда. |
21. | Сотовый телефон характеризуется названием производителя, номером модели (может содержать цифры и буквы), временем работы аккумулятора, наличием и максимальной емкостью карты памяти, датой выпуска на рынок, стоимостью в рублях и количеством экземпляров, имеющихся в наличии. Поиск и сортировка — по номеру модели, объему памяти на карте, дате выпуска на рынок. |
22. | Одна запись о предемете мебели содержит следующие поля: артикул (может содержать цифры и буквы), наименование, цвет, стоимость, дата изготовления, количество имеющихся в наличии экземпляров. Поиск и сортировка — по артикулу, количеству экземпляров, дате изготовления. |
Лабораторная работа $№1$ предполагает написание программы на языке C++. При заказе работы своего варианта вы получите качественно написанную и хорошо прокомментированную программу.
➡ Дополнительно заказав алгоритм решения вашей задачи (мы крайне рекомендуем это сделать), получите аккуратно оформленный отчет-алгоритм, поясняющий все тонкости решения поставленной задачи.
Стоимость заказа работы
➡ Стоимость программы (командно-текстовый интерфейс) из любого варианта составляет $900$ рублей.
➡ Стоимость программы (визуальный интерфейс) из любого варианта составляет $1\ 500$ рублей.
➡ Стоимость детального алгоритма из любого варианта составляет $1\ 000$ рублей (заказывается опционально на ваше усмотрение, чтобы детально разобраться с решением лабораторной работы, например, не прибегая к консультации репетитора).
Также дополнительно вы можете заказать у нас:
- Построение аккуратной ГОСТовой блок-схемы. Ориентировочная стоимость $1\ 000$ рублей.
- Отчет о проделанной работе (иногда в вузах есть требование — предоставить отчет к лабораторной работе). Ориентировочная стоимость $500$ рублей.
Для оформления заказа пишите на почту: proglabs@mail.ru.
Время нашего ответа обычно составляет не более $10$ минут.
ВНИМАНИЕ | Для заказа программы своего варианта пишите на наш электронный адрес proglabs@mail.ru |
Добавить комментарий