Опубликован: 02.02.2011 | Доступ: свободный | Студентов: 3339 / 951 | Оценка: 4.43 / 3.57 | Длительность: 33:06:00
Специальности: Программист
Лекция 47:

Решение задач на использование алгоритмов обработки данных

< Лекция 46 || Лекция 47: 1234 || Лекция 48 >

Лабораторная работа 46. Решение задач на использование алгоритмов обработки данных

Цель работы: изучить основные приемы разработки алгоритмов обработки данных, научиться применять их при решении задач и учитывать трудоемкость и эффективность используемых алгоритмов.

При выполнении лабораторной работы для каждого задания требуется написать программу на языке С++, которая используется для достижения основной цели работы – научиться применять изученные алгоритмы обработки данных при решении задач и проводить анализ алгоритмов в соответствии с их функцией трудоемкости. При выполнении работы возможно использование программных кодов к ранее оформленным лабораторным работам. Ввод данных осуществляется из файлов с учетом требований к входным данным, содержащихся в постановке каждой задачи. Ограничениями на входные данные является максимальный размер строковых данных и диапазоны числовых типов в языке С++.

Теоретические сведения.

Ознакомьтесь с материалом лекции 46.

Задания к лабораторной работе.

Выполните приведенные ниже задания.

  1. Реализуйте коды программ, приведенные в лекции 46. Откомпилируйте и протестируйте полученные коды.
  2. Латинским квадратом порядка n называют квадратную матрицу размером nxn, элементы которой принадлежат множеству M={1,2,...,n}, причем каждое число из M встречается ровно один раз в каждой строке и в каждом столбце. Напишите рекурсивную функцию, которая при заданном натуральном n методом перебора с возвратом подсчитывает количество латинских квадратов
  3. Имеется N кубиков разной массы, у которых грани раскрашены в разные цвета. Необходимо построить максимально высокую башню из таких кубиков, чтобы выполнялись требования:
    • нельзя класть тяжелый кубик на более легкий;
    • цвета соприкасающихся граней кубиков должны быть одного цвета.
    Входные данные: первая строка файла содержит число N (1<N<500). Следующие i строк содержат информацию о цветах граней каждого кубика в таком порядке: передняя, задняя, левая, правая, верхняя, нижняя (цвета описываются целыми числами от 1 до 100). Считается, что кубики вводятся в порядке увеличения масс.

    Выходные данные: высота башни, перечень куликов с их порядковым номерами из входных данных с указанием вида верхней грани в башне.

    Пример входного файла:

    10
    1 5 10 3 6 5 
    2 6 7 3 6 9 
    5 7 3 2 1 9
    1 3 3 5 8 10
    6 6 2 2 4 4 
    1 2 3 4 5 6
    10 9 8 7 6 5 
    6 1 2 3 4 7
    1 2 3 3 2 1
    3 2 1 1 2 3

    Пример выходного файла:

    8
    1 bottom
    2 back
    3 right
    4 left
    6 top
    8 front
    9 front
    10' top

Указания к выполнению работы.

Лабораторная работа носит одновременно практический и исследовательский характер, поэтому для ее выполнения сначала необходимо изучить материал "Алгоритмы обработки данных" , обратив внимание на приведенные примеры и их описание. Каждое задание необходимо решить в соответствии с изученными в предыдущих лабораторных работах алгоритмами обработки данных в языке С++. Программу для решения каждого задания необходимо разработать методом процедурной абстракции, используя функции. Этапы решения сопроводить комментариями в коде. В отчете следует отразить разработку и обоснование математической модели решения задачи. Результаты тестирования программ необходимо провести в соответствии приведенными примерами входных и выходных файлов к задачам (как дополнение допустимы и собственные примеры тестовых данных). В выводе к отчету необходимо сформулировать результаты проведения анализа трудоемкости алгоритмов, сделать выводы о принадлежности каждого алгоритма к определенному классу сложности с обоснованием результата.

Следует реализовать каждое задание в соответствии с приведенными этапами:

  • изучить словесную постановку задачи, выделив при этом все виды данных;
  • сформулировать математическую постановку задачи;
  • выбрать метод решения задачи, если это необходимо;
  • разработать графическую схему алгоритма;
  • записать разработанный алгоритм на языке С++;
  • разработать контрольный тест к программе;
  • отладить программу;
  • представить отчет по работе.

Требования к отчету.

Отчет по лабораторной работе должен соответствовать следующей структуре.

  • Титульный лист.
  • Словесная постановка задачи. В этом подразделе проводится полное описание задачи. Описывается суть задачи, анализ входящих в нее физических величин, область их допустимых значений, единицы их измерения, возможные ограничения, анализ условий при которых задача имеет решение (не имеет решения), анализ ожидаемых результатов.
  • Математическая модель. В этом подразделе вводятся математические описания физических величин и математическое описание их взаимодействий. Цель подраздела – представить решаемую задачу в математической формулировке.
  • Алгоритм решения задачи. В подразделе описывается разработка структуры алгоритма, обосновывается абстракция данных, задача разбивается на подзадачи. Схема алгоритма выполняется по ЕСПД (ГОСТ 19.003-80 и ГОСТ 19.002-80).
  • Листинг программы. Подраздел должен содержать текст программы на языке программирования С++, реализованный в среде MS Visual Studio 2010.
  • Контрольный тест. Подраздел содержит наборы исходных данных и полученные в ходе выполнения программы результаты.
  • Выводы по лабораторной работе.
  • Ответы на контрольные вопросы.

Контрольные вопросы

  1. На каком этапе общей схемы решения задач по программированию следует определиться с моделью представления данных?
  2. В чем заключается преимущества поразрядной сортировки по отношению к быстрым сортировкам?
  3. Приведите пример данных, при сортировке которых поразрядная сортировка трудоемка по времени. Ответ обоснуйте.
  4. Приведите другую модель представления данных в задаче о перекатывании тетраэдра.
  5. На чем основана однозначность представления данных при шифровании в энтропийном кодировании?
< Лекция 46 || Лекция 47: 1234 || Лекция 48 >
Денис Курбатов
Денис Курбатов
Владислав Нагорный
Владислав Нагорный

Подскажите, пожалуйста, планируете ли вы возобновление программ высшего образования? Если да, есть ли какие-то примерные сроки?

Спасибо!