Главная страница
Навигация по странице:

  • 2002. Тестовое задание. Удобно пользоваться map для хранения логинов-паролей и set для учета вошед- ших в сеть пользователей. 1795. Мужья в магазине.

  • Часть 2 (до 5 баллов) Используя обобщенные контейнеры и итераторы STL C++, решите следующие задания. Приветствуется создание собственных контейнеров на базе обобщенных. Варианты

  • Common Controls

  • (Properties)

  • Properties

  • Click

  • TextBox

  • Button

  • Convert

  • Double::Parse(String) . Подробнее о классе Convert

  • ToString() . Примечание

  • Задания для самостоятельной работы Часть 1. Работа с готовым проектом (вычисление формулы)

  • Часть 2. Самостоятельная разработка проекта Упражнение 1.

  • Методические рекомендации для студентов, изучающих программирование в С. Предназначено для студентов специальностей Прикладная математика и информатика


    Скачать 0.9 Mb.
    НазваниеМетодические рекомендации для студентов, изучающих программирование в С. Предназначено для студентов специальностей Прикладная математика и информатика
    АнкорOutput
    Дата11.04.2023
    Размер0.9 Mb.
    Формат файлаpdf
    Имя файлаoutput (2).pdf
    ТипМетодические рекомендации
    #1053385
    страница4 из 6
    1   2   3   4   5   6
    Часть 1.
    Задачи с acm.timus.ru (до 10 баллов)
    1563. Баяны (
    подсказка
    : удобно воспользоваться контейнером set)
    1496. Спамер (
    подсказка
    : контейнер map)
    1161. Stripies
    Два полосатика объединяются в одного с весом
    2√
    , если получившегося полосатика объединить с каким-то еще, то его вес будет
    2
    ∗ 2√
    и т.д. Чтобы получить минимальный результирующий вес полосатика, надо извлекать корень как можно большее количество раз, выбирая каждый раз двух самых тяжелых полосатиков.
    Но для чисел m
    1
    и m
    2
    число √
    является средним геометрическим, а его величина лежит в диапазо- не между m
    1
    и m
    2
    . Упорядочив полосатиков по весу и проводя слияние двух самых тяжелых, результирую- щий полосатик будет тяжелее, чем любой из оставшихся. А значит его можно поместить в конец списка и проводиие далее его объединение с самым тяжелым из оставшихся. Действия можно продолжать, пока не останется один полосатик.

    34
    Подсказка: задача легко решается с использованием multiset. Multiset хранит данные в отсор- тированном виде. При стандартном способе сортировки самые тяжелые полосатики оказываются в конце multiset'а, далее останется вспомнить про реверсный итератор, который можно установить на последний элемент в мультисете... Будьте осторожны с итераторами, особенно если надумаете удалять полосатиков из multiset!
    2002. Тестовое задание.
    Удобно пользоваться map для хранения логинов-паролей и set для учета вошед- ших в сеть пользователей.
    1795. Мужья в магазине.
    Здесь придется воспользоваться несколькими структурами данных. Например, подойдет map для хранения информации о товаре и его количестве, а мужей в магазине можно выстроить в очередь
    (или дек, или м.б. list... Только надо учесть, что в очереди надо хранить пару значений — наименование товара и количество, заказанное к покупке, т. е. будет queue
    >). Далее надо просто акку- ратно запрограммировать и протестировать написанное.
    Часть 2 (до 5 баллов)
    Используя обобщенные контейнеры и итераторы STL C++, решите следующие задания. Приветствуется создание собственных контейнеров на базе обобщенных.
    Варианты
    1.
    Подсчитайте в заданном файле text1.txt количество неповторяющихся слов и выведите их в файл text2.txt.
    2.
    Подсчитайте в заданном файле text1.txt все повторяющиеся слова и выведите их в файл text2.txt.
    3.
    Определите, какие буквы алфавита не встречаются ни разу в заданном текстовом файле text1.txt, и выведите их в файл text2.txt.
    4.
    В заданном текстовом файле text1.txt хранятся пары значений ФИО – номер телефона. При этом
    ФИО может повторяться несколько раз. Организуйте text2.txt в следующем виде: ФИО – список всех его телефонов. Отсортируйте по ФИО по возрастанию.
    5.
    Дан текстовый файл text1.txt. Требуется отсортировать все входящие в него слова по алфавиту и записать результат в файл text2.txt.
    6.
    Дан текстовый файл text1.txt. Исключите из него все дубликаты слов. Результат запишите в text2.txt.
    7.
    Дан текстовый файл text1.txt. Найдите самые часто повторяющиеся в нем слова и запишите их в файл text2.txt.
    8.
    Даны текстовые файлы text1.txt и text2.txt. Найдите все общие слова.
    9.
    Дан текстовый файл text1.txt. Требуется записать его содержимое в файл text2.txt в обратном по- рядке.
    10. В файле text1.txt имеется список процессов Windows с указанием количества памяти, которую они занимают. В файле text2.txt имеется список процессов, которые мы дополнительно запускаем, так- же с указанием количества занимаемой памяти. Запишите в файл text3.txt общий список процессов, отсортированный по количеству занимаемой памяти в порядке убывания.

    35 11. Имеется текстовый файл text1.txt со следующей структурой: в каждой строке находится запись ви- да: «фамилия студента» – «предмет». Названия предметов и фамилии могут повторяться. По за- данной фамилии выведите все изучаемые им предметы.
    12. Имеется текстовый файл text1.txt со следующей структурой: в каждой строке находится запись ви- да: «год» – «наименование статьи» – «вид публикации». Годы и виды публикации (тезисы, статья, монография…) могут повторяться в любом порядке. Отсортируйте информацию по принципу: са- мый ранний год, потом все монографии, затем статьи в реферируемых журналах, потом статьи и тезисы. Такую сортировку произведите для каждого года.
    13. Дан текстовый файл text1.txt со следующей структурой: в каждой строке файла находится запись вида: «фамилия» – «имя» – «отчество» – «год рождения». Запишите в файл text2.txt количество од- нофамильцев, в text3.txt – всех ровесников (год задается с клавиатуры).
    14. Дан файл text1.txt со следующей структурой: в каждой строке находится запись вида: «исполни- тель» – «композиция» – «альбом» – «год выхода записи». В файл text2.txt запишите все компози- ции одного исполнителя (можно задать с клавиатуры какого). В файл text3.txt записать все компо- зиции из одного альбома.
    15. В заданном текстовом файле text1.txt хранятся строки вида: имя потока – приоритет – время вы- полнения. Определить, в каком порядке завершатся потоки.
    16. Дан текстовый файл text1.txt со следующей структурой: в первой строке указано число n, меньшее числа строк в файле. В остальных строках записаны имена. Постройте программу-считалочку, ко- торая выбрасывает каждый раз по одному имени на позиции n, если доходит до конца списка, то продолжает счет с начала. В файл text2.txt записать последовательность «выброса» имен и остав- шегося игрока.
    17. Дан текстовый файл text1.txt со следующей структурой: в каждой строке находится запись вида:
    «масть карты» – «старшинство». Количество строк в файле не превосходит 8. Определите, сколько карт каждой масти на руках у игрока. Найдите количество карт одного достоинства для каждого вида старшинства карты. Результат запишите в файл text2.txt.
    18. Дан текстовый файл text1.txt со следующей структурой: в каждой строке находится запись вида:
    «масть карты» – «старшинство». В файле перечислена вся колода в произвольном порядке (52 кар- ты…). Требуется отсортировать колоду по принципу следования мастей: червы, трефы, бубны, пи- ки. Внутри каждой масти отсортировать карты по старшинству по возрастанию.
    19. В текстовом файле text1.txt хранится информация следующего вида: количество человек в очереди в кассу, количество касс, время обслуживания в каждой кассе. Определить, за какое время очередь будет обслужена.
    20. Имеется текстовый файл text1.txt со следующей структурой: в каждой строке файла записаны пары
    «слово» – «синоним». Заменить в заданном текстовом файле text2.txt все слова, встречающиеся в text1.txt, на синонимы.

    36
    Лабораторная работа № 11. Программирование визуального интерфейса в С++
    Примечение: При выполнении этой работы вам поможет книга «С/С++ и MS Visual C++ 2008 для на- чинающих» (Пахомов Б.И.) – там есть описание и примеры работы с элементами графического интерфейса.
    Также полезный ресурс https://msdn.microsoft.com/ru-ru/library/ms123401.aspx
    — библиотека MSDN (совет
    — если нужна подробная справка по некоторым классам или методам. Пространствам имен, наберите в по- исковике имя этого класса/метода/пространства имен и слово msdn — поисковик отпрвит вас на русскоя- зычную страницу библиотеки MSDN).
    Рассмотрим теперь, как можно создавать приложения с графическим интерфейсом пользователя. В Vis- ual C++ такие приложения можно создавать, если самостоятельно программировать win API, работать с библиотекой MFC, либо создавать приложения windows forms. Первый подход на практике довольно сло- жен, хотя и предполагает детальное понимание «внутренней кухни» программы. Библиотека MFC является мощным средством для разработки гибких приложений, обладающих большими возможностями. Однако самый простой способ ознакомиться с программированием графического интерфейса предоставляют win- dows application forms.
    Рассмотрим некоторые особенности программирования графического интерфейса на простом примере
    ( +
    )
    2−9,4
    (
    )
    : выполним расчет предложенной формулы в оконном приложении.
    Создадим новый проект в Visual C++: File -> New -> Project. В появившемся диалоговом окне следует выбрать тип проекта CLR, установленный шаблон Windows Forms Application, указать имя проекту (кото- рые, кстати, в VS называются решениями — solution) и назначить рабочую папку.
    Рис. 1. Диалоговое окно создания нового проекта MS VC++

    37
    После этого будет доступно окно редактора с заготовкой формы:
    Рис. 2. Внешний вид проекта в IDE MS VC++ в режиме дизайна
    Форма, собственно говоря,и будет содержать все необходимые элементы графического интерфейса — сюда можно помещать кнопки, текстовые поля, выпадающие списки, радиокнопки, флажки, метки, компо- ненты для графического содержимого... Изначально форма открыта в режиме дизайна, т.е. можно форми- ровать интерфейс и сразу же его просматривать.
    Панель инструментов слева (Toolbox) содержит компоненты, которые можно поместить на форму, и при помощи которых можно моделировать визуальный интерфейс программы любого устраивающего вас уровня сложности. На первых порах нам понадобятся компоненты со вкладки Common Controls (обычные элементы управления). Если панель инструментов не видна, ее можно открыть, выбрав пункт меню View
    Toolbox (или сочетание клавиш Ctrl+Alt+X).
    Панель Свойств и Событий справа Properties)'>(Properties) содержит перечень возможных настраиваемых атрибу- тов для каждого компонента (например, цвет и размеры формы, текст в заголовке формы и т.п.). Если на- жать на панели Properties на значок с молнией, то можно переключиться на панель событий, доступных для данного компонента. Под событием будем понимать действие, производимое пользователем (или сис- темой) над компонентом. Например, события — щелчок мыши по кнопке, выбор пункта в выпадающем списке, щелчок правой клавишей мыши и т.д. Если рядом с именем события в панели Properties дважды щелкнуть мышью (или позиционировать там курсор и нажать Enter), Visual C++ создаст обработчик собы- тия — метод, содержимое которого надо написать самостоятельно. Этот метод будет выполняться каждый раз, когда наступает событие, обработчик для которого мы только что создали. При этом вам будет досту- пен не только режим работы с дизайном формы, но и режим редактирования кода в h-файле. Отметим, что при создании приложения с графическим интерфейсом часть кода заполняется автоматически средой. Итак,

    38
    если создать обработчик события Click для формы, то в заголовочном файле формы атоматически появится заготовка вида
    private: System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) {
    }
    Form1_Click – название обработчика события, метод принимает два аргумента — указатель на источник события (в данном случае, им будет форма), и вспомогательные параметры события. В обработчике, на- пример, можно написать, чтобы по щелчку мыши в заголовок формы выводился некоторый текст:
    private: System::Void Form1_Click(System::Object^ sender, System::EventArgs^ e) {
    this -> Text = "Обработчик события";
    }
    Если теперь запустить сборку и выполнение решения (F5), то щелкая мышью по форме, можно убе- диться, что заголовок окна изменяет свое название.
    Вернемся к простому проекту вычисления значения по формуле. Параметры a и b должны откуда-то вводиться, результат надо куда-то выводить, считать результат надо «по команде» (т.е. в обработчике со- бытия), а еще неплохо было бы показать пользователю формулу, по которой идет расчет. Очевидно, что параметры a и b удобно будет задавать в текстовых полях (2 компонента TextBox), эти поля надо подписать
    (2 метки — Label), результат можно выводить либо в метку (Label, чем мы и воспользуемся), либо еще в одно подписанное текстовое поле. Вычисление должно производиться по щелчку по кнопке (Button), а картинка с формулой будет отображаться в соответствующей области PictureBox.
    Компоненты на форму устанавливаются очень просто — надо выбрать соответствующий компонент в палитре и «растянуть» его на форме (если надо установить пользовательский размер), либо просто щелк- нуть мышью по форме. Установим компоненты в форму. Получится что-то наподобие:
    Рис. 3. Внешний вид разрабатываемой формы
    Теперь поработаем над изменением некоторых свойств компонентов. Заголовок формы должен быть более информативным (например, расчет значения формулы), метки label1, label2, label3 должны содержать

    39
    текст «Параметр a», «Параметр b», «Результат». Кнопка должна называться «Вычислить», а в PictureBox надо отобразить картинку с формулой.
    Итак, устанавливаем значения свойств, как показано в таблице 1.
    Значения свойств компонентов
    Компонент
    Свойство
    Значение label1
    Text
    Параметр a label2
    Text
    Параметр b label3
    Text
    Результат button1
    Text
    Вычислить pictureBox1
    Image
    Выбираем файл с картинкой, например, formula_pict.jpg
    Form1
    Text
    Вычисление значения
    Теперь, если запустить проект, вам будет доступна форма, в которой уже можно вводить различные значения параметров, но вычисление пока еще не происходит.
    Рис. 4. Пример работы приложения с графическим интерфейсом
    Вернемся в режим дизайна формы и добавим кнопке обработчик события Click аналогично тому, как добавляли обработчик событию щелчок мышью по форме. В код добавится заготовка:
    private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
    }
    Заполним ее, как показано ниже. Нам понадобится две вещественные переменные (чтобы считать туда значения параметров a и b), возможно, также вспомогательные переменные для промежуточных расчетов.
    Еще один важный момент связан с тем, что на форме данные отображаются в текстовом виде, т.е. имеют тип, «понятный» операционной системе. Чтобы производить вычисления, понадобится преобразовать типы в стандартные типы С++, понятные компилятору.

    40
    private
    : System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { double a,b, res=0; a= System::Convert::ToDouble(textBox1->Text); b= System::Double::Parse(textBox2->Text); if
    (a+b>0)
    { res=sqrt(exp(a*a-9.4)/((a+b)*(a+b)*(a+b)))*sin(a+b*b*b)*sin(a+b*b*b); label3->Text =
    "Результат"
    + res.ToString();
    } else label3->Text=
    "Результат не определен"
    ;
    }
    Поясним некоторые фрагменты кода. В переменные a и b считываем значения текстовых полей, обра- щаясь к свойству Text соответствующего компонента textBox. А далее преобразование типов можно про- вести различным образом. Например, для параметра «a» можно воспользоваться методом ToDouble класса
    Convert из пространства имен System. При работе этого метода могут возникнуть исключительные ситуа- ции. Использование метода ToDouble(String) эквивалентно передаче value методу Double::Parse(String).
    Подробнее о классе Convert и структуре Double можно прочесть здесь: https://msdn.microsoft.com/ru-ru/library/system.convert(v=vs.110).aspx?cs-save-lang=1&cs-lang=cpp#code- snippet-1
    , https://msdn.microsoft.com/ru-ru/library/system.double(v=vs.110).aspx?cs-save-lang=1&cs- lang=cpp#code-snippet-1.
    Для вывода значения в метку значение надо преобразовать к строковому типу, для чего можно восполь- зоваться методом ToString().
    Примечание: не забудьте подключить заголовочный файл math.h для работы с арифметическими функциями!
    Теперь при запуске программы можно задавать значения параметров a и b и вычислять значение.
    Рис. 5. Пример работы приложения с графическим интерфейсом

    41
    Задания для самостоятельной работы
    Часть 1. Работа с готовым проектом (вычисление формулы)
    1. Попробуйте вводить в текстовые поля неверные значения (например, отделять дробную часть числа точкой, а не запятой, ввести русскоязычный текст, оставить поля пустыми и т.п.). Посмотрите, как
    «ведет» себя программа. Модифицируйте программу так, чтобы обработать различные исключи- тельные ситуации, связанные с неверным заданием значений параметров.
    2. Доработайте программу так, чтобы можно было задавать точность вычисления результата (напри- мер, 3 знака после запятой), и вывод значения сделайте с этой точностью.
    Часть 2. Самостоятельная разработка проекта
    Упражнение 1. Работа с простыми компонентами (задания разработаны Рогачевой Е.В.).
    1. В левом верхнем углу окна приложения расположена кнопка. При одинарном щелчке на кнопке ле- вой клавишей мыши она (кнопка) смещается на 10 пикселей вправо и 10 пикселей вниз.
    2. В окне приложения выводится надпись «Hello!». При одинарном щелчке левой кнопкой мыши на этой надписи осуществляется ее «перевод» на русский: «Привет!».
    3. В окне приложения расположены кнопка и метка. Метка имеет заголовок: «Это мой проект». Оди- нарный щелчок на кнопке левой клавишей мыши приводит к замене существующего заголовка формы заголовком метки.
    4. В окне приложения расположена метка. Одинарный щелчок левой клавишей мыши на метке приво- дит к смещению метки на 30 пикселей вниз, а щелчок на форме –смещает метку на 15 пикселей вверх и 5 пикселей вправо.
    5. В окне приложения расположены метка и кнопка. Одинарный щелчок на метке приводит к тому, что кнопка перемещается и закрывает собой метку. Щелчок на кнопке возвращает кнопку в исход- ное положение.
    6. В окне приложения расположены метка и кнопка. Метка имеет заголовок «Прыгай!», заголовок у кнопки отсутствует. Одинарный щелчок левой клавишей мыши на метке приводит к исчезновению заголовка метки и появлению этого заголовка у кнопки, щелчок на кнопке восстанавливает исход- ную ситуацию.
    7. В окне приложения расположены метка и кнопка. Одинарный щелчок левой клавишей мыши на метке приводит к смещению метки и кнопки на 20 пикселей вниз, а щелчок на кнопке – к смещению метки и кнопки на 20 пикселей влево.
    8. В окне приложения расположена кнопка. Одинарный щелчок левой клавишей мыши на кнопке при- водит к увеличению ее во всех направлениях (вверх, вниз, вправо и влево) на 10 пикселей.
    9. В окне приложения расположена кнопка. Одинарный щелчок левой клавишей мыши на кнопке при- водит к уменьшению высоты формы на 20 пикселей, а щелчок на форме – к увеличению высоты формы на 10 пикселей.
    10. В окне приложения расположены метка и кнопка. Щелчок на кнопке приводит к ее перемещению в правый нижний угол формы, а метки в левый верхний угол. Щелчок на форме меняет их местами.
    11. В окне приложения расположена метка. Щелчок по форме помещает метку точно по центру формы.

    42 12. В окне приложения расположены метка и кнопка. Щелчок по кнопке приводит к тому, что заголо- вок проекта становится заголовком метки, а заголовок метки становится заголовком кнопки.
    13. В окне приложения расположена кнопка. Щелчок по кнопке делает ее квадратной, щелчок по форме уменьшает длину и высоту кнопки в 1,5 раза.
    14. В окне приложения расположены кнопка и метка. Щелчок по кнопке перемещает метку в угол фор- мы (сначала левый верхний, потом правый верхний, правый нижний, левый нижний). Щелчок по метке перекрашивает кнопку в случайный цвет.
    15. В окне приложения расположены метка и кнопка. Щелчок по кнопке сворачивает кнопку, щелчок по метке разворачивает.
    1   2   3   4   5   6


    написать администратору сайта