МДК 01.02 «Прикладное программирование»




МДК 01.01 «Системное программирование»

Задание № 1

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

Инструкции по выполнению задания № 1:

  1. Внимательно прочитайте условие задачи и изучите представленные в условии спецификации.
  2. Разработайте алгоритм решения задачи.
  3. Разработайте код программного продукта в соответствие с алгоритмом и готовыми спецификациями.
  4. Наберите программный код в среде программирования Visual Studio C++ (консольное приложение).
  5. Произведите отладку программного продукта с использованием инструментальных отладочных средств.
  6. Протестируйте программный продукт.

 

Пример задания:

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

Формат входных данных: FName - имя файла (char[80]);

Формат выходных данных: размер файла или сообщение «File not found!».

Программа:

#include "stdafx.h"

#include <stdio.h>

#include <Windows.h>

#include "clocale"

#include <io.h>

 

int main()

{

setlocale(LC_ALL, "Russian");

HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE); //выходной поток

char filename[80]; // имя файла, который будем искать

errno_t er;

FILE *file;

struct _finddata_t ffblk; //структура для данных о найденном файле

printf("Введите путь и название файла\n");

gets_s(filename);

_findfirst(filename, &ffblk);

//поиск файла в заданном каталоге (или в текущем, если каталог не указан)

er = fopen_s(&file, filename, "r"); // открытие файла

if (file == NULL)//если указатель файла NULL, то файл не найден

{

printf("File not found!\n");

system("pause");

return EXIT_FAILURE;

}

else

{

SetConsoleTextAttribute(console, (WORD)2);

// установка цвета текста зелёный

SetConsoleCursorPosition(console, { 20, 13 });

//перенос курсора в центр экрана

printf("Размер файла:");

printf("%i байт\n", ffblk.size);//вывод размера файла

SetConsoleCursorPosition(console, { 40, 14 });

// перенос курсора в центр экрана

 

switch (ffblk.attrib) // проверка атрибутов файла

{

case 1: printf("\nАтрибут: Только чтение"); break;

case 2: printf("\nАтрибут: Скрытый"); break;

case 32: printf("\nАтрибут: Архивный"); break;

case 3: printf("\nАтрибут: Только чтение/Скрытый"); break;

case 33: printf("\nАтрибут: Только чтение/Архивный"); break;

case 34: printf("\nАтрибут: Скрытый/Архивный"); break;

default:

printf("Атрибут не получен!");

break;

}

}

_getch();

return 0;

}

 

Скриншот:


МДК 01.02 «Прикладное программирование»

Задание № 2. Выполнить практическое задание.

Виды заданий:

Разработка структуры данных и функциональных характеристик проекта (варианты 1-4). 3

Разработка спецификаций отдельных компонент программного обеспечения (варианты 5-8). 4

Разработка кода программного продукта с заданной функциональностью (варианты 13-16) 5

Разработка и подключение дополнительного класса – модуля программиста (варианты 17-20). 6

Составление тестовых данных на основе потока управления (варианты 21-24). 6

Составление тестовых данных на основе потока данных (варианты 25-28). 7

Составление протокола испытаний (варианты 29-31). 10

организация межмодульного взаимодействия (варианты 32-34). 12

 

Инструкции по выполнению задания № 2: см. ниже

 

Разработка структуры данных и функциональных характеристик проекта (варианты 1-4).

Пример задания:

Разработайте структуру входных и выходных данных, функциональные характеристики проекта для задачи вычисления площади и периметра треугольника а) по двум сторонам и углу между ними; б) по стороне и двум прилежащим к ней углам.

Инструкции по выполнению вариантов 1-4:

Разработка структуры данных и функциональных характеристик проекта

1. Для того чтобы разработать структуру входных данных, продумайте, какие входные данные необходимы для решения поставленной задачи? Сколько их? Какого типа? Откуда (из какого источника) могут быть получены?

2. Введите обозначения входных данных и опишите их смысл, типы, источники получения (с клавиатуры, из файла, с помощью переключателей на форме и др.).

3. Для того чтобы разработать структуру выходных данных, продумайте, что является результатом решения задачи? В какой форме должны быть получены результаты? Каковы типы результатов? Куда должен быть выведен ответ (на экран, в файл, на принтер)?

4. Введите обозначения выходных данных и опишите их смысл, типы, форму выдачи, куда они выдаются.

5. Опишите по порядку функциональные характеристики проекта (что должна делать программа), начиная с получения входных данных (возможно несколько вариантов получения), затем опишите обработку входных данных (что вычисляется), выдачу результатов, дополнительные сервисные функции.

 

 

Разработка спецификаций отдельных компонент программного обеспечения (варианты 5-8).

Пример задания:

Разработайте спецификации для функции обработки одномерного массива.

Функция должна вычислять среднее арифметическое элементов, кратных k, одномерного целочисленного массива произвольной размерности. Учесть, что в массиве может не оказаться элементов кратных k (что будет передавать функция в этом случае?)

Инструкции по выполнению вариантов заданий 5-8:

Разработка спецификаций отдельных компонент программного обеспечения.

1. Для того чтобы разработать спецификации отдельных компонент программного обеспечения, продумайте, какие входные параметры необходимы для работы функции? Сколько их? Какого типа?

2. Введите обозначения входных параметров функции.

3. Продумайте, какой результат должна передавать функция? Какого типа? Укажите тип результата функции.

4. Опишите прототип (объявление) функции, её формальные параметры, результат. Выше дайте комментарий к объявлению функции: в первой строке укажите назначение функции (что она делает); во второй строке – её входные параметры, их смысл, обозначение, типы; в третьей строке – смысл и тип передаваемого результата. Если результатов несколько, то они должны передаваться через параметры функции (в языке C# по ссылке со словом ref или как выходные параметры со словом out).

Разработка алгоритмов отдельных функций (варианты 9-12)

Пример задания:

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

 


Инструкции по выполнению вариантов заданий 9-12:

Разработка алгоритмов отдельных функций.

1. Для того чтобы разработать алгоритм отдельной функции, продумайте входные параметры необходимы для её работы? Сколько их? Какого типа? Введите обозначения входных параметров.

2. Подумайте, какой результат должна передавать функция? Какого типа?

3. Опишите прототип (объявление) функции, её формальные параметры, тип результата.

4. Продумайте план решения и взаимосвязь формул и преобразований, необходимых для получения результата поставленной задачи.

5. Постройте алгоритм в графическом редакторе MS Visio в соответствие с требованиями ЕСПД.

Разработка кода программного продукта с заданной функциональностью (варианты 13-16)

Пример задания:

Разработайте код программы, вычисляющей площадь основания, площадь боковой поверхности и объём цилиндра по заданному радиусу основания и высоте, используя формулы:

Программа должна обеспечивать следующие функции:

1) Ввод исходных данных из текстового файла, формат файла: несколько строк, в каждой строке задаются измерения цилиндра через один пробел

2) Вычисление и вывод результатов на экран

3) Удобный пользовательский интерфейс

Инструкции по выполнению вариантов заданий 13-16:

Разработка кода программного продукта с заданной функциональностью.

1. Продумайте структуру проекта, сколько в нём модулей, из каких функций будет состоять каждый модуль.

2. Подумайте, какие исходные данные необходимы для решения задачи, сколько их, какого типа? Каким образом должны быть получены входные данные?

3. Продумайте интерфейс программы. Какие компоненты можно разместить на форме, чтобы обеспечить получение исходных данных, их обработку и вывод результатов?

4. Произведите конструирование и настройку интерфейса пользователя. Стремитесь получить удобный, функциональный и грамотно оформленный интерфейс.

5. Создайте методы обработки событий, в соответствие с требованиями функциональных характеристик проекта. Напишите программный код.

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

7. Протестируйте программу в соответствие с требованиями функциональных характеристик. Проверьте, все ли функции удалось реализовать?

Разработка и подключение дополнительного класса – модуля программиста (варианты 17-20).

Пример задания:

Разработайте класс, включающий 2 метода для работы со строкой: 1- для получения «перевёрнутой» строки, 2-для получения строки без повторений символов. Разработайте интерфейс и программный код для вызова и проверки работоспособности методов класса.

Инструкции по выполнению вариантов заданий 17-20:

Разработка и подключение дополнительного класса (модуля программиста).

1. Для того чтобы создать дополнительный класс, откройте проект и выберите пункт меню Проект -> Добавить класс. Введите название класса, например MyClass.cs. Будет создан шаблон класса.

2. Опишите поля класса (если это требуется). Опишите методы класса. Статические методы должны быть помечены словом static. Их можно будет вызывать без создания экземпляра класса.

3. Чтобы проверить работу модуля программиста, разработайте проект, включающий форму, с вызовом методов класса. Статические методы вызываются через имя класса, динамические применяются к экземплярам класса (объектам). Для подключения модуля необходимо добавить этот модуль к проекту (если он не был добавлен сразу).

 

Составление тестовых данных на основе потока управления (варианты 21-24).

Пример задания:

Составить алгоритм и подготовить тестовые данные для проверки работоспособности программы, вычисляющей площадь треугольника по трём сторонам. Учесть, что треугольник с заданными сторонами можно построить только при условии, что сумма двух любых его сторон больше третьей стороны.

Инструкции по выполнению заданий 21-24:

Составление тестовых данных на основе потока управления.

1. Для того чтобы составить тестовый набор на основе потока управления, необходимо рассмотреть все возможные пути выполнения программы при различных условиях. При этом подготавливаются такие наборы входных данных, которые позволят проверить каждый вариант развития событий.

2. Внимательно изучите условие задачи. Разработайте алгоритм решения задачи и пронумеруйте ветви алгоритма, подлежащие проверке.

3. Составьте список различных путей выполнения программы.

4. Занесите список путей выполнения программы в графу «Тестовый сценарий» таблицы, пронумеруйте по порядку.

5. В графу «Тестовый набор» таблицы внесите наборы входных данных (условий), позволяющих проверить каждый путь выполнения программы, а в графу «Ожидаемые результаты» – пояснения, что ожидается при запуске программы с таким набором входных условий.

 

Пример оформления таблицы тестовых данных на основе потока управления:

Тестовый сценарий Тестовый набор Ожидаемые результаты
  Проверить способность программы обеспечить ввод исходных данных и их контроль Входные данные: 6 3 8 (допустимые) Входные данные: 6 -3 0 (недопустимые)   Допустимы вещественные или целые значения без знака, большие нуля, при недопустимых данных выдаётся сообщение об ошибке и предоставляется повтор ввода.
  Проверить способность программы вычислять площадь треугольника по трём сторонам, если такой треугольник можно построить Входные данные: 6 3 7     Входные данные: 3,2 6 4,8   Результат: площадь треугольника: 8,94   Результат: площадь треугольника: 8,47
  Проверить способность программы определять, когда треугольник нельзя построить Входные данные: 12 3 4   Входные данные: 3 12 4   Входные данные: 3 4 12   Результат: сообщение об ошибке «Треугольник нельзя построить!»  

 

Составление тестовых данных на основе потока данных (варианты 25-28).

Инструкции по выполнению вариантов заданий 25-28:

Составление тестовых данных на основе потока данных.

1. Для того чтобы составить тестовый набор на основе потока данных, необходимо разбить входной поток данных на классы эквивалентности. Каждому классу присваивается номер. Затем подготавливаются такие наборы входных данных, которые позволяют проверить выполнение программы по каждому классу эквивалентности хотя бы один раз.

2. Внимательно изучите условие задачи. Составьте структуру входных и выходных данных (введите обозначения, укажите типы данных). Подумайте, какие ограничения накладываются на входные данные.

3. Разбейте входной поток данных на классы эквивалентности. Присвойте каждому классу эквивалентности свой номер.

4. Занесите описание каждого класса в таблицу, в графу «Классы эквивалентности».

5. Занесите в таблицу наборы входных данных, соответствующих каждому классу эквивалентности, в графу «Тестовый набор».

6. В графу «Ожидаемые результаты» внесите результаты, рассчитанные вручную, для сравнения с теми результатами, которые будет выдавать программа.

Условие ввода может задавать:

1) Определенное значение

2) Диапазон значений

3) Множество конкретных величин

4) Булево условие

Правило формирования основных классов эквивалентности:

1) Если условие ввода задает диапазон значений [ a; b ], то формируются один допустимый и два недопустимых класса эквивалентности (справа и слева от интервала)

2) Если условие ввода задает конкретное значение a, то определяется один допустимый (при x=a) и два недопустимых класса эквивалентности (при x<a и при x>a)

3) Если условие ввода задает множество значений x Î{ a, b, c }, то определяется один допустимый и один недопустимый класс эквивалентности (при и и )

4) Если условие ввода задает булево значение, то определяется один допустимый { true } и один недопустимый { false } класс эквивалентности

 

Пример задания:

Составить тестовые данные для проверки работоспособности программы, вычисляющей значение функции F(x) от одной переменной по формулам:

Подготовим тестовый сценарий и тестовый набор на основе потока данных. Известно, что допустимые значения входных данных лежат в интервале от -10 до 10. Тогда недопустимые данные будут справа и слева от этого интервала. Имеем 2 класса недопустимых значений. Так как в допустимом диапазоне расчет производится по разным формулам, разобьем класс допустимых значений на 3 отдельных класса. Добавим ещё 2 дополнительных класса для проверки граничных условий (на границах допустимого интервала и вблизи границ).

 


Пример оформления таблицы тестовых данных на основе потока данных:

Классы эквивалентности Тестовый набор Ожидаемые результаты
  Класс допустимых значений , x>0 X=5   F(x) = 24 При положительных значениях X в допустимом диапазоне должно вычисляться значение функции F(x) по формуле x2 -1
  Класс допустимых значений , x<0 X=-1,5   F(x) = -0,832 При отрицательных значениях X в допустимом диапазоне должно вычисляться значение функции F(x) по формуле
  Класс допустимых значений , x=0 X=0   F(x) = 1 При X=0 по условию значение функции F(x)=1
  Класс допустимых значений , граничные условия X= -10 X=10 1) F(x) = -0,995 При X=-10 должно вычисляться значение функции F(x) по формуле   2) F(x) = 99 При X=10 должно вычисляться значение функции F(x) по формуле x2 -1
  Класс недопустимых значений , граничные условия X= -10.001 X=10.001   При недопустимых значениях Х должен быть выдан ответ «Функция не определена»
  Класс недопустимых значений , X=-25   При недопустимых значениях Х должен быть выдан ответ «Функция не определена»
  Класс недопустимых значений X=124   При недопустимых значениях Х должен быть выдан ответ «Функция не определена»

 


Составление протокола испытаний (варианты 29-32).

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

 

Инструкции по выполнению вариантов заданий 29-32:

Составление протокола испытаний.

1. Для того чтобы составить протокол испытаний, разработайте структуру входных и выходных данных, укажите, из каких источников будут получены входные данные, в какой форме и куда будут выводиться результаты.

2. Подробно распишите функциональные характеристики проекта.

3. Все функциональные характеристики необходимо проверить в ходе испытаний и внести в протокол. Сначала обычно проверяется способность программы обеспечить ввод исходных данных. Если возможны несколько вариантов ввода (например, в разной форме, из разных источников), то проверяется каждый способ ввода.

4. Затем обычно проверяется способность программы осуществлять контроль вводимых данных, а также описывается поведение программы в случае, если данные не получены (не введены).

5. Далее в протокол испытаний вносятся все варианты выполнения расчётов и обработки данных. Здесь необходимо проверить работоспособность программы при вводе допустимых и не допустимых входных данных.

6. В последнюю очередь проверяется способность программы осуществлять вывод результатов. Если возможны несколько вариантов вывода (например, в разной форме, на разные носители), то проверяется каждый способ вывода.

Пример оформления протокола испытаний:

Проверяемые требования Сообщения программы и вводимые значения Ожидаемые результаты Фактические результаты
Способность программы обеспечить ввод исходных данных. Ввести в поля ввода точность вычислений и аргумент функции (в каждое поле вещественное число без знака с разделителем запятая) В поле ввода можно ввести целое или вещественное число без знака, можно стирать символы в поле ввода, используя клавишу BackSpace. Вводимые данные отображаются в полях ввода.
Способность программы обеспечить контроль вводимых данных. В поле ввода попробовать вводить буквы, специальные знаки, запятую, точку, несколько запятых, знак минус. Допустимыми являются только цифры, точка и запятая. Недопустимые символы должны игнорироваться. Точка должна автоматически заменяться запятой, запятая в числе должна ставиться только один раз. Недопустимые символы игнорируются при вводе во всех текстовых полях.
Способность программы обеспечить контроль пустых полей ввода. Оставить одно или несколько полей ввода пустыми и нажать на кнопку «Вычислить». Кнопка «Вычислить» должна быть заблокирована, если одно или оба поля ввода пусты. Пользователь может продолжить работу. Кнопка «Вычислить» заблокирована. Приложение не закрывается, пользователь имеет возможность продолжить работу. См. Рис.1
Проверить способность программы вычислять сумму ряда и выводить результат на экран при допустимых входных данных. Ввести значение точности и аргумент функции и нажать на кнопку «Вычислить». Контрольный пример 1: E = 0,001 X = 1,7 Контрольный пример 2: E = 0,000001 X = 1,7   Ожидается вывод значения суммы ряда, значения логарифма (левой части выражения) и количества просуммированных членов ряда. Сумма ряда и левая часть выражения должны быть приблизительно равны. При увеличении точности количество просуммированных членов ряда будет больше. Контрольный пример 1: См. Рис.2   Контрольный пример 2: См. Рис.3
Проверить способность программы проверять диапазон входных данных. Ввести значение точности и аргумент функции и нажать на кнопку «Вычислить». Контрольный пример 1: E = 1,5 X = 1,7 Контрольный пример 2: E = 0,000001 X = -0,45   При недопустимых значениях точности или аргумента должно быть выведено сообщение об ошибке, предыдущие результаты должны очищаться. Пользователь может продолжить работу. Выводится сообщение об ошибке, предыдущие результаты очищаются. Приложение не закрывается, пользователь имеет возможность продолжить работу. См. Рис 4-5

 

организация межмодульного взаимодействия (варианты 33-34).

В результате разбиения системы на множество совместно работающих классов появляется необходимость поддерживать согласованное состояние взаимосвязанных объектов. При этом желательно избегать жесткой связанности классов. Для обеспечения гибкой, динамической связи между классами применяется стратегия «источник-наблюдатель». Объект, называемый источником, при изменении своего состояния, которое может представлять интерес для других объектов, посылает им уведомления. Получив уведомление, наблюдатель опрашивает источник, чтобы синхронизировать свое с ним состояние. Оповещение наблюдателей происходит с помощью делегата.

namespace Example_Delegate

{

public delegate void Del (object A);

 

 

public partial class Form1: Form

{

Del D;

public Form1()

{

InitializeComponent();

Form2 form2 = new Form2();

Form3 form3 = new Form3();

D += new Del(form2.See); // регистрация делегатов

D += new Del(form3.Do);

form2.Show();

form3.Show();

}

 

private void button1_Click(object sender, EventArgs e)

{

label1.Text += "Oops!!!\n";

if (D!= null) D(this); // оповещение наблюдателей

}

}

}

 

 

public partial class Form2: Form

{

public Form2()

{

InitializeComponent();

}

 

public void See(object A)

// метод реакции на событие источника

{

label1.Text += "Вижу, что Oops!\n";

}

}

 

public partial class Form3: Form

{

public Form3()

{

InitializeComponent();

}

 

public void Do(object A)

// метод реакции на событие источника

{

label1.Text += "Я тоже вижу, что Oops!\n";

}

}

 

Рисунок 1. Реакция наблюдателей

 

Инструкции по выполнению заданий 33-34:

Организация межмодульного взаимодействия.

1. Создайте проект, содержащий форму Form1.

2. Добавьте в проект вторую форму Form2.

3. В пространстве имен первой формы объявите делегат, укажите спецификацию методов, которые можно добавлять в делегат.

4. В источнике (модуле первой формы) объявляется экземпляр делегата, в этот экземпляр заносятся методы тех объектов, которые желают получать уведомление об изменении состояния источника. Этот процесс называется «регистрацией делегатов». При регистрации имя метода добавляется к списку.

5. При наступлении нужного события зарегистрированные методы поочередно вызываются через делегат.

6. Для обеспечения обратной связи между наблюдателем и источником делегат объявлен с параметром object, через который передается ссылка на вызывающий объект. Следовательно, в вызываемом методе можно получать информацию о состоянии вызывающего объекта и запускать его методы.



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-03-31 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: