Государственное бюджетное профессиональное




Государственное бюджетное профессиональное

Образовательное учреждение

«Нижегородский автомеханический техникум»

 

 

Специальность 09.02.03 Программирование в компьютерных системах

код и название специальности

 

 

ТЕХНИЧЕСКОЕ ЗАДАНИЕ

 

 

по МДК.03.01. Технология разработки программного обеспечения

 

Студент _______________/ Ю.С.Филиппова 23.09.2020

подпись И.О.Ф. дата

Руководитель _______________/ У.А.Никифорова 24.09.2020

подпись И.О.Ф. дата

 

Нижний Новгород

2020 г.


 


Содержание

 

Введение 2

1 Техническое задание 4

1.1 Основание для разработки 4

1.2 Назначение разработки 4

1.3 Требования к программе или программному изделию 4

1.3.1 Требования к фукциональным характеристикам 4

1.3.2 Требования к надежности 5

1.3.3 Требования к составу и параметрам технических средств 5

1.3.4 Требования к информационной и программной совместимости 5

1.4 Требования к программной документации 5

1.5 Этапы разработки 6

Список использованных источников 7

Приложение 1 8

 

 

 



Введение

 

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

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

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

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


 

Техническое задание

 

1.1 Основание для разработки

 

Основанием для разработки является задание преподавателя Никифоровой У.А. по МДК.03.01. Технология разработки программного обеспечения.

Наименование работы: Даны вещественные вектора A, B, C. В каждом из векторов все компоненты, следующие за первой по порядку компонентой с максимальным значением заменить на абсолютное значение минимальной компоненты.

 

1.2 Назначение разработки

 

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

 

1.3 Требования к программе или программному изделию

1.3.1 Требования к функциональным характеристикам

 

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

- ввод и вывод данных;

- обработка данных по условию задачи;

- возможность производить расчеты многкратно;

- диалог с пользователем.

1.3.2 Требования к надежности

 

Программный продукт должен соответствовать современному уровню требований к надежности программного обеспечения:

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

- обеспечивать корректное завершение вычислений с соответсвующей диагностикой при превышении имеющихся вычислительных ресурсов;

- обеспечивать целостночть вводимой информации.

 

1.3.3 Требования к составу и параметрам технических средств

 

Системные требования для работы программного продукта должны быть следующими: тактовая частота процессора – 1000 Гц; объем оперативной памяти 64 Мб; объемсвободного дискового пространства 20 Мб; разрешение монитора 1024 х 768; наличие устройства чтения компакт дисков; принтер.

 

1.3.4 Требования к информационной и программной совместимости

 

Программа должна работать в операционных системах Windows 2000/XP.

 

1.4 Требования к программной документации

 

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

 

1.5 Этапы разработки

 

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

Таблица 1 – этапы разработки

Номер этапа Название этапа Срок Отчетность
  Разработка ядра системы 21.09.2020-21.09.2020 Описание внутренних форматов. Реализация системы
  Разработка методов и алгоритмов ихреализации для задачи 22.09.2020-22.09.2020 Описание методов и алгоритмов. Програмные модули, реализующие методы
  Разработка методов и алгоритмов их реализации для задачи 23.09.2020-23.09.2020 Описание методов и алгоритмов. Программные модули, реализующие методы
  Тестирование программного продукта и составления программной документации 24.09.2020-24.09.2020 Тесты. Докусентация. Пронрамный продукт

 


 

Список использованных источников

 

1 ГОСТ 19.102-77 Стадии разработки

2 ГОСТ 19.103-77 Обозначения программ и программных документов

3 ГОСТ 19.104-78 Основные надписи

4 ГОСТ 19.105-78 Общие требования к программным документам

5 ГОСТ 19.106-78 Требования к программным документам, выполненным печатным способом

6 ГОСТ 19.201-78 Техническое задание. Требования к содержанию и оформлению

7 Стандарт предприятия, 2017.

8 Рудаков А.В. Технология разработки программных продуктов: учеб. пособие для студ. сред. проф. образования / А.В Рудаков. – 4-е изд., стер. – М.: Издательский центр «Академия», 2016. – 208 с.

9 Рудаков А.В. Технология разработки программных продуктов. Практикум: учеб. пособие для студ. сред. проф. образования / А.В Рудаков, Г.Н. Федорова. – 4-е изд., стер. – М.: Издательский центр «Академия», 2018. – 192 с.

10 Специальное программное обеспечение [https://www.ngpedia.ru/]


 

Приложение 1

Код программы

 

#include<stdio.h>

#include<math.h>

#include<stdbool.h>

#define R 100

 

int i;

 

//Функция для ввода размерности вектора

int razmer(char sim) {

int r;

do {

printf("\n\nВедите размерность вектора %c (1-100)=>", sim);

scanf_s("%d", &r);

if (((r > 0) && (r <= R)))

break;

system("cls");

printf("\tРазмерность вне диапозона");

continue;

} while (true);

return r;

}

 

//Функция для ввода элементов вектора

void vvod(int r, float x[R], char sim)

{

 

printf("\n\tВведите вектор \n");

for (i = 0; i < r; i++)

{

printf("%c[%d]=>", sim, i + 1);

scanf_s("%f", &x[i]);

}

}

 

//Функция для вывода элементов вектора

void vyvod(char stroka[R], char sim, int r, float x[R])

{

printf("\n\t%s вектор %c:\n", stroka, sim);

for (i = 0; i < r; i++)

printf("%.2f ", x[i]);

}

 

//Функция для обработки вектора в соответсвии с условиями задачи

void change(float x[R], int r)

{

int numb_max;

float max, min;

max = x[1];

numb_max = 1;

min = x[1];

for (i = 0; i < r; i++)

{

if (x[i] > max)

{

max = x[i];

numb_max = i;

}

if (x[i] < min) min = x[i];

}

for (i = numb_max + 1; i < r; i++)

x[i] = min;

}

 

void main()

{

system("chcp 1251>nul");

char answer;

do

{

float a[R], b[R], c[R];

 

system("cls");

printf("Даны вещественные вектора A, B, C. \nВ каждом из векторов все компоненты, следующие за первой по порядку компонентой \nс максимальным значением заменить на абсолютное значение минимальной компоненты.");

 

//Ввод размерности и элементов вектора A

int ra = razmer('A');

vvod(ra, a, 'A');

system("cls");

 

 

//Ввод размерности и элементов вектора B

int rb = razmer('B');

vvod(rb, b, 'B');

system("cls");

 

//Ввод размерности и элементов вектора C

int rc = razmer('C');

vvod(rc, c, 'C');

system("cls");

 

//Вывод исходных векторов A, B, C

vyvod("Исходный", 'A', ra, a);

vyvod("Исходный", 'B', rb, b);

vyvod("Исходный", 'C', rc, c);

printf("\n");

 

//Обработка векторов A, B, C в соответсвии с условиями задачи

change(a, ra);

change(b, rb);

change(c, rc);

 

//Вывод измененных векторов A, B, C

vyvod("Измененный", 'A', ra, a);

vyvod("Измененный", 'B', rb, b);

vyvod("Измененный", 'C', rc, c);

 

printf("\n\nХотите продолжить? y/n\n");

scanf_s(" %c", &answer);

}

while (answer == 'y');

system("pause>nul");

}

 


collect[i].data,

collect[i].obr,

collect[i].adr,

collect[i].prof);

}

printf("|---------------------------------------------------------------------------------------------------------------------------|\n");

 

printf("\nСлужащие с высшим образованием:\n");

for (int i = 0; i < k; i++)

{

if ((strcmp(collect[i].obr, "высшее")) == 0 || (strcmp(collect[i].obr, "Высшее")) == 0)

printf("%s %s\n", collect[i].fam, collect[i].name);

}

 

printf("\nСлужащие с профессией %s:\n", oprProf);

for (int i = 0; i < k; i++)

{

if ((strcmp(collect[i].prof, oprProf))==0)

printf("%s %s %s %s, %s, %s \n%s\n",

collect[i].fam,

collect[i].name,

collect[i].oth,

collect[i].data,

collect[i].obr,

collect[i].prof,

collect[i].adr);

}

 

printf("\nХотите продолжить (y/n)? ");

scanf_s(" %c", &answer);

getchar();

system("pause>nul");

system("cls");

} while (answer == 'y');

system("pause>nul");

}

Протокол работы:


 

Лабораторная работа №15

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

Постановка задачи:

Даны две вещественные матрицы A(M, N) и C (M, N). Сформировать новую матрицу D того же размера, каждый элемент которой равен минимальному из элементов массивов A и C с теми же индексами.

При вводе элементов исходных массивов организовать проверку на ввод символов, т.е. если при вводе элемента будет введен символ, то необходимо вывести соответствующее сообщение.

Формализация:

· Исходные данные:

ri-размерность матрицы по строкам

rj-размерность матрицы по столбцам

a(ri, rj) – исходная матрица A

c(ri, rj) – исходная матрица C

· Результаты:

d(ri, rj) – полученная матрица D

· Порядок расчета:

начало цикла по i

начало цикла по j

если (x[i][j] > y[i][j])

то z[i][j] = y[i][j];

иначе z[i][j] = x[i][j]

конец цикла по j

конец цикла по i

 

Код программы:

#include <stdio.h>

#define M 20

#define N 20

 

int i, j, res;

int razmer(char sim, char sim2);

int razmer2(char sim, char sim2);

void vvod(int ri, int rj, float x[M][N], char sim);

void vivod(int ri, int rj, float x[M][N], char sim, char stroka[M]);

void novaya(int ri, int rj, float x[M][N], float y[M][N], float z[M][N]);

int razmer(char sim, char sim2)

{

int ri;

printf("Введите размерность матриц %c и %c по строкам: ", sim, sim2);

while (1)

{

res = scanf_s("%d", &ri);

while (getchar()!= '\n');

if (res == 1) break;

printf("Вводить можно только числа. Повторите ввод.\n");

}

return(ri);

}

 

int razmer2(char sim, char sim2)

{

int rj;

printf("Введите размерность матриц %c и %c по столбцам: ", sim, sim2);

while (1)

{

res = scanf_s("%d", &rj);

while (getchar()!= '\n');

if (res == 1) break;

printf("Вводить можно только числа. Повторите ввод.\n");

}

return(rj);

}

 

void vvod(int ri, int rj, float x[M][N], char sim)

{

printf("\n\t Введите матрицу %c:\n", sim);

for (i = 0; i < ri; i++)

for (j = 0; j < rj; j++)

{

printf("%c[%d][%d]=", sim, i + 1, j + 1);

scanf_s("%f", &x[i][j]);

}

}

 

void vivod(int ri, int rj, float x[M][N], char sim, char stroka[M])

{

printf("\n\t %s матрица %c: \n", stroka, sim);

for (i = 0; i < ri; i++)

{

for (j = 0; j < rj; j++)

printf("%5.2f ", x[i][j]);

printf("\n");

}

}

 

void novaya(int ri, int rj, float x[M][N], float y[M][N], float z[M][N])

{

for (i = 0; i < ri; i++)

for (j = 0; j < rj; j++)

{

if (x[i][j] > y[i][j]) z[i][j] = y[i][j];

else z[i][j] = x[i][j];

}

}

 

void main()

{

system("cls");

system("chcp 1251 > nul");

char answer;

do {

int p, x;

float a[M][N], c[M][N], d[M][N];

system("cls");

p = razmer('A', 'C');

x = razmer2('A', 'C');

system("cls");

vvod(p, x, a, 'A');

system("cls");

vvod(p, x, c, 'C');

system("cls");

vivod(p, x, a, 'A', "Исходная");

vivod(p, x, c, 'C', "Исходная");

novaya(p, x, a, c, d);

vivod(p, x, d, 'D', "Полученная");

printf("\n\nХотите продолжить (y/n)? ");

scanf_s(" %c", &answer);

system("cls");

} while (answer == 'y');

system("pause>nul");

}


Лабораторная работа №1

«Язык С# как инструмент системного программирования. Работа с символьными строками.»

Цель: научиться работать с символьными строками.

 

Вариант №3

При помощи метода Split() разобрать исходную строку на слова в виде массива строк. Затем объединить в новые строки каждую пару четных и нечетных строк и сравнить их на наличие одинаковых элементов.

 

Код программы:

using System;

 

namespace ConsoleApp1

{

class Program

{

static void Main(string[] args)

{

string phrase = "Я про одно и то же два раза думать не умею!";

string[] words = phrase.Split(' ');

 

Console.WriteLine("Исходная строка: Я про одно и то же два раза думать не умею!");

Console.WriteLine("Измененная строка: ");

foreach (var word in words)

{

System.Console.WriteLine($"'{word}'");

}

 

}

}

}

 

Протокол работы:


 

Лабораторная работа №2

«Представление в памяти одномерных массивов»

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

1. Дан массив размера N и целые числа K и L (1 < K <= L <= N). Найти среднее арифметическое всех элементов массива, кроме элементов с номерами от K до L включительно.

2. s=0;

ch=0;

Цикл от 1 до k-1

s = s + a[i];

ch++;

конец цикла

цикл от l+1 до n

s = s + a[i];

ch++;

конец цикла

sr=s/ch;

3. Блок-схема:

4. Код программы:

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <conio.h>

#define R 100

void main()

{

system("chcp 1251>nul");

char answer = 'y';

do {

float a[R], s = 0, sr;

int i, n, k, l, ch=0;

printf("\nДан массив размера N и целые числа K и L (1 < K <= L <= N). Найти среднее арифметическое всех элементов массива, кроме элементов с номерами от K до L включительно.");

printf("\nВведите размерность вектора (от 1 до 100): ");

scanf_s("%d", &n);

if ((n <= 0) || (n > R)) { system("cls"); printf("Вводить можно толь-ко целое число от 1 до 100"); continue; };

printf("\nВведите два числа от 1 до %d по возрастанию:", n);

scanf_s("%d\n%d", &k, &l);

if ((k <= 1) || (l > n) || (k > l)) { system("cls"); printf("Числа введены вне диапазона или не по возрастанию"); continue; };

printf("Введите вектор:\n");

for (i = 1; i <= n; i++)

{

printf("a[%d]=>", i);

scanf_s("%f", &a[i]);

}

 

for (i = 1; i <= k - 1; i++)

{

s = s + a[i];

ch++;

}

for (i = l + 1; i <= n; i++)

{

s = s + a[i];

ch++;

}

sr = s / ch;

 

system("cls");

printf("Дан массив размера N и целые числа K и L (1 < K <= L <= N). Найти среднее арифметическое всех элементов массива, кроме элементов с номерами от K до L включительно.");

printf("\n\nИсходный вектор: ");

for (i = 1; i <= n; i++)

printf("%.2f ", a[i]);

printf("\n\nВведенные числа = %d и %d", k, l);

printf("\nСр.арифметическое всех эл-ов массива, кроме эл-ов с номерами от K до L включительно = %.2f", sr);

printf("\n\nХотите продолжить? y/n");

scanf_s(" %c", &answer);

system("cls");

} while (answer == 'y');

system("pause>nul");

}

5. Протокол работы:

Лабораторная работа №3

«Представление в памяти одномерных массивов»

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

1. Дана матрица размера M*N. Найти количество ее столбцов, элементы которых упорядочены по убыванию.

 

2. Порядок расчета:

Нц по j

n = 0;

нц по i

если (a[i][j] > a[i - 1][j]) то n++

кц по i

если (n==ri) то k++

кц по j

 

3. Код программы:

#include <stdio.h>

#include <math.h>

#define R 100

void main()

{

int ri, rj, i, j, k=0, n;

float a[R][R], b[R];

system("chcp 1251>0");

while (1)

{

system("cls");

while (1)

{

printf("Введите размерность матрицы по строкам (от 1 до 100): ");

scanf_s("%d", &ri);

if ((ri > 0) && (ri <= R)) break;

printf("Размерность матрицы находится вне диапазона,повторите ввод\n");

}

while (1)

{

printf("Введите размерность матрицы по столбцам (от 1 до 100): ");

scanf_s("%d", &rj);

if ((rj > 0) && (rj <= R)) break;

printf("Размерность матрицы находится вне диапазона,повторите ввод\n");

}

printf("\n\tВведите матрицу\n");

for (i = 1; i < ri + 1; i++)

for (j = 1; j < rj + 1; j++)

{

printf("a[%d][%d] => ", i, j);

scanf_s("%f", &a[i][j]);

}

 

system("cls");

printf("\n\tИсходная матрица:\n");

for (i = 1; i < ri + 1; i++)

{

for (j = 1; j < rj + 1; j++)

printf(" %7.2f", a[i][j]);

printf("\n");

}

 

for (j = 1; j < rj + 1; j++)

{

n = 0;

for (i = 1; i < ri + 1; i++)

if (a[i][j] > a[i - 1][j]) n++;

if (n==ri) k++;

}

 

printf("\nКоличество столбцов: %d \n",k);

 

printf("\nХотите продолжить? y/n");

if (getch()!= 'y') break;

system("cls");

}

"pause > nul";

}

 

4. Протокол работы:

 



Поделиться:




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

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


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