Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Жизненный цикл ПО. Стадии и этапы↑ Стр 1 из 7Следующая ⇒ Содержание книги Похожие статьи вашей тематики
Поиск на нашем сайте
Жизненный цикл ПО. Стадии и этапы Жизненный цикл ИС - ряд событий, происходящих с системой в процессе ее создания и использования.
Стадия — часть процесса создания ПО, ограниченная определенными временными рамками и заканчивающаяся выпуском конкретного продукта (моделей, программных компонентов, документации), определяемого заданными для данной стадии требованиями. Жизненный цикл традиционно моделируется в виде некоторого числа последовательных этапов (или стадий, фаз). В настоящее время не выработано общепринятого разбиения жизненного цикла программной системы на этапы. Иногда этап выделяется как отдельный пункт, иногда - входит в качестве составной части в более крупный этап. Могут варьироваться действия, производимые на том или ином этапе. Нет единообразия и в названиях этих этапов. Традиционно выделяются следующие основные этапы ЖЦ ПО: - анализ требований, - проектирование, - кодирование (программирование), - тестирование и отладка, - эксплуатация и сопровождение.
Жизненный цикл ПО. Каскадная модель каскадная модель (70-80г.г.) ≈ предполагает переход на следующий этап после полного окончания работ по предыдущему этапу,
Основным достижением каскадной модели является завершенность стадий. Это дает возможность планирования затрат и сроков. Кроме того, формируется проектная документация, обладающая полнотой и согласованностью. Каскадная модель применима к небольшим программным проектам, с четко поставленными и не изменяемыми требованиями. Реальный процесс может выявить неудачи на любой стадии, что приводит к откату на одну из предыдущих стадий. Модель такого производства ПО – каскадно-возвратная Жизненный цикл ПО. Поэтапная модель с промежуточным контролем поэтапная модель с промежуточным контролем (80-85г.г.) ≈ итерационная модель разработки ПО с циклами обратной связи между этапами. Преимущество такой модели заключается в том, что межэтапные корректировки обеспечивают меньшую трудоемкость по сравнению с каскадной моделью; однако, время жизни каждого из этапов растягивается на весь период разработки,
Основные этапы решения задач Целью программирования является описание процессов обработки данных (в дальнейшем - просто процессов). Данные (data) - это представление фактов и идей в формализованном виде, пригодном для передачи и переработке в некоем процессе, а информация (information) - это смысл, который придается данным при их представлении. Обработка данных (data processing) - это выполнение систематической последовательности действий с данными. Данные представляются и хранятся на носителях данных. Совокупность носителей данных, используемых при какой-либо обработке данных называется информационной средой (data medium). Набор данных, содержащихся в какой-либо момент в информационной среде - состояние информационной среды. Процесс можно определить как последовательность сменяющих друг друга состояний некоторой информационной среды. Описать процесс - значит определить последовательность состояний информационной среды. Чтобы по заданному описанию требуемый процесс порождался автоматически на каком-либо компьютере, необходимо, чтобы это описание было формализованным. Критерии качества ПО Коммерческое изделие (продукт, услуга) должны удовлетворять требованиям потребителя. Качество – объективная характеристика товара (продукции, услуги), показывающая степень удовлетворенности потребителя Характеристики качества: Работоспособность – система работает и реализует требуемые функции. Надежность – система работает без отказов и сбоев. Восстанавливаемость. Эффективность – система реализует свои функции наилучшим образом. Экономическая эффективность – минимальная стоимость конечного продукта при максимальной прибыли. Характеристики качества: Учет человеческого фактора - удобство эксплуатации, быстрота обучения работе с ПП, удобство сопровождения, внесения изменений. Переносимость (мобильность) – переносимость кода на другую платформу или систему. Функциональная полнота – возможно наиболее полная реализация внешних функций. Точность вычисления
Свойства алгоритма. Результативность означает возможность получения результата после выполнения конечного количества операций. Определенность состоит в совпадении получаемых результатов независимо от пользователя и применяемых технических средств. Массовость заключается в возможности применения алгоритма к целому классу однотипных задач, различающихся конкретными значениями исходных данных. Дискретность — возможность расчленения процесса вычислений, предписанных алгоритмом, на отдельные этапы, возможность выделения участков программы с определенной структурой.
Способы описания алгоритмов Существуют следующие способы описания (представления) алгоритмов: 1. словесное описание; 2. описание алгоритма с помощью математических формул; 3. графическое описание алгоритма в виде блок-схемы; 4. описание алгоритма с помощью псевдокода; 5. комбинированный способ изображения алгоритма с использованием словесного, графического и др. способов. 6. с помощью сетей Петри. Словесное описание алгоритма представляет собой описание структуры алгоритма на естественном языке. Например, к приборам бытовой техники, как правило, прилагается инструкция по эксплуатации, т.е. словесное описание алгоритма, в соответствии с которым данный прибор должен использоваться. Графическое описание алгоритма в виде блок-схемы – это описание структуры алгоритма с помощью геометрических фигур с линиями связи. Блок схема алгоритма – это графическое представление метода решения задачи, в котором используются специальные символы для отображения операций. Символы, из которых состоит блок-схема алгоритма, определяет ГОСТ 19.701-90. Этот ГОСТ соответствует международному стандарту оформления алгоритмов, поэтому блок-схемы алгоритмов, оформленные согласно ГОСТ 19.701-90, в разных странах понимаются однозначно. Псевдокод – описание структуры алгоритма на естественном, но частично формализованном языке. В псевдокоде используются некоторые формальные конструкции и общепринятая математическая символика. Строгих синтаксических правил для записи псевдокода не предусмотрено. Рассмотрим простейший пример. Пусть необходимо описать алгоритм вывода на экран монитора наибольшего значения из двух чисел. Описание этого же алгоритма на псевдокоде: 1. Начало 2. Ввод чисел: Z, X 3. Если Z > X то Вывод Z 4. Иначе вывод Х 5. Конец Каждый из перечисленных способов изображения алгоритмов имеет и достоинства и недостатки. Например, словесный способ отличается многословностью и отсутствием наглядности, но дает возможность лучше описать отдельные операции. Графический способ более наглядный, но часто возникает необходимость описать некоторые операции в словесной форме. Поэтому при разработке сложных алгоритмов лучше использовать комбинированный способ.
Виды алгоритмов линейные; ветвящиеся; циклические. · Линейный алгоритм — набор команд (указаний), выполняемых последовательно друг за другом. · Разветвляющийся алгоритм — алгоритм, содержащий хотя бы одно условие, в результате проверки которого ЭВМ обеспечивает переход на один из двух возможных шагов. · Циклический алгоритм — алгоритм, предусматривающий многократное повторение одного и того же действия (одних и тех же операций) Над новыми исходными данными. К циклическим алгоритмам сводится большинство методов вычислений, перебора вариантов. Цикл программы — последовательность команд (серия, тело цикла), которая может выполняться многократно (для новых исходных данных) до удовлетворения некоторому условию.
Си.Типы данных. Тип данных – это описание диапазона значений, которые может принимать переменная, указанного типа. Каждый тип данных характеризуется: Все типы данных можно разделить на следующие виды: Структура программы на Си. 1. Операторы языка C++ Операторы управляют процессом выполнения программы. Набор операторов языка С++ содержит все управляющие конструкции структурного программирования. try { <операторы> } Условный оператор if (<выражение>) <оператор 1> [else <оператор 2>] Оператор-переключатель switch (<выражение>) while (<выражение>) <оператор> Оператор цикла с постусловием do <оператор> while <выражение>; for ([<начальное выражение>]; break; continue; return [<выражение>]; If (логическое выражение) оператор;
If (логическое выражение) оператор_1; Else оператор_2;
<логическое выражение>? <выражение_1>: <выражение_2>; Если значение логического выражения истинно, то вычисляется выражение_1, в противном случае вычисляется выражение_2.
switch (выражение целого типа) { case значение_1: последовательность_операторов_1; break; case значение_2: последовательность_операторов_2; break; ... case значение_n: последовательность_операторов_n; break; default: последовательность_операторов_n+1; } Ветку default можно не описывать. Она выполняется, если ни одно из вышестоящих выражений не удовлетворено.
Оператор цикла. В Турбо Си имеются следующие конструкции, позволяющие программировать циклы: while, do while и for. Их структуру можно описать следующим образом: Цикл с проверкой условия наверху: Оператор выбора Если действия, которые необходимо выполнить в программе, зависят от значения некоторой переменной, можно использовать оператор выбора. При этом в C++ в качестве переменных в операторе выбора можно использовать только численные. В общем виде запись оператора выбора выглядит так: switch(переменная) case значение2: default: Ключевое слово break необходимо добавлять в конец каждой ветви. Оно останавливает выполнение операции выбора. Если его не написать, после выполнения действий из одной ветви выбора продолжится выполнение действий из следующих ветвей. Однако иногда такое свойство выбора бывает полезным, например если необходимо выполнить одни и теже действия для различных значений переменной. switch(переменная) case значение3: Пример использования выбора: int n, x; case 1: case 4: default: Си.Цикл: цикл с параметром Общая форма записи for (инициализация параметра; проверка условия окончания; коррекция параметра) { блок операций; } for — параметрический цикл (цикл с фиксированным числом повторений). Для организации такого цикла необходимо осуществить три операции: § инициализация параметра - присваивание параметру цикла начального значения; § проверка условия окончания - сравнение величины параметра с некоторым граничным значением; § коррекция параметра - изменение значения параметра при каждом прохождении тела цикла. Эти три операции записываются в скобках и разделяются точкой с запятой (;). Как правило, параметром цикла является целочисленная переменная. Пример #include <stdio.h> int num; for(num = 1; num < 5; num++) printf("num = %d\n",num); getchar(); return 0;
Си. Цикл с предусловием Общая форма записи while(выражение) { блок операций; Если выражение истинно (не равно нулю), то выполняется блок операций, заключенный в фигурные скобки, затем выражение проверяется снова. Последовательность действий, состоящая из проверки и выполнения блока операций, повторяется до тех пор, пока выражение не станет ложным (равным нулю). При этом происходит выход из цикла, и производится выполнение операции, стоящей после оператора цикла. Пример int k=5; sum = sum + i; i++;
При построении цикла while, в него необходимо включить конструкции, изменяющие величину проверяемого выражения так, чтобы в конце концов оно стало ложным (равным нулю). Иначе выполнение цикла будет осуществляться бесконечно (бесконечный цикл), например
while(1) { блок операций;
while — цикл с предусловием, поэтому вполне возможно, что тело цикла не будет выполнено ни разу если в момент первой проверки проверяемое условие окажется ложным. Си. Цикл с постусловием Цикл с постусловием do...while Общая форма записи do { блок операций; } while(выражение); Цикл с постусловием Цикл do...while — это цикл с постусловием, где истинность выражения проверяется после выполнения всех операций, включенных в блок, ограниченный фигурными скобками.Тело цикла выполняется до тех пор, пока выражение не станет ложным, то есть тело цикла с постусловием выполнится хотя бы один раз. Использовать цикл do...while лучше использовать в тех случаях, когда должна быть выполнена хотя бы одна итерация, либо когда инициализация объектов, участвующих в проверке условия, происходит внутри тела цикла. Пример. Ввести число от 0 до 10 #include <stdio.h> int num; system("chcp 1251"); system("cls"); do { printf("Введите число от 0 до 10: "); scanf("%d", &num); } while((num < 0) || (num > 10)); printf("Вы ввели число %d", num); getchar(); getchar(); return 0; Определение функций
Рассмотрим определение функции на примере функции sum.
В языках C и C++, функции не должны быть определены до момента их использования, но они должны быть ранее объявлены. Но даже после всего этого, в конце концов, эта функция должна быть определена. После этого прототип функции и ее определение связываются, и эта функция может быть использована. Если функция ранее была объявлена, она должна быть определена с тем же возвращаемым значением и типами данных, в противном случае, будет создана новая, перегруженная функция. Заметьте, что имена параметров функции не должны быть одинаковыми. |
// объявление функции суммирования
int sum(int, int);
// определение функции суммирования
int sum(int num1, int num2)
{
return (num1 + num2);
}
Инициализация массивов
Как и простые переменные, массивы могут быть инициализированы при объявлении. Инициализатор для объектов составных типов (каким является массив) состоит из списка инициализаторов, разделенных запятыми и заключенных в фигурные скобки. Каждый инициализатор в списке представляет собой либо константу соответствующего типа, либо, в свою очередь, список инициализаторов. Эта конструкция используется для инициализации многомерных массивов.
Наличие списка инициализаторов в объявлении массива позволяет не указывать число элементов по его первой размерности. В этом случае количество элементов в списке инициализаторов и определяет число элементов по первой размерности массива. Тем самым определяется размер памяти, необходимой для хранения массива. Число элементов по остальным размерностям массива, кроме первой, указывать обязательно.
Если в списке инициализаторов меньше элементов, чем в массиве, то оставшиеся элементы неявно инициализируются нулевыми значениями. Если же число инициализаторов больше, чем требуется, то выдается сообщение об ошибке.
Примеры инициализации массивов:
nt a[3] = {0, 1, 2}; | // Число инициализаторов равно числу элементов |
double b[5] = {0.1, 0.2, 0.3}; | // Число инициализаторов меньше числа элементов |
int c[ ] = {1, 2, 4, 8, 16}; | // Число элементов массива определяется по числу инициализаторов |
int d[2][3] = {{0, 1, 2}, {3, 4, 5}}; | // Инициализация двумерного массива. Массив состоит из двух строк, // в каждой из которых по 3 элемента. Элементы первой строки // получают значения 0, 1 и 2, а второй – значения 3, 4 и 5. |
int e[3] = {0, 1, 2, 3}; | // Ошибка – число инициализаторов больше числа элементов |
Обратите внимание, что не существует присваивания массиву, соответствующего описанному выше способу инициализации.
int a[3] = {0, 1, 2}; | // Объявление и инициализация |
a = {0, 1, 2}; | // Ошибка |
Си. Примеры работы с одномерными массивами: ввод/вывод
В языке C нет возможности вводить и выводить весь массив одним оператором ввода/вывода. Можно вводить и выводить только один элемент массива. Следовательно, для того чтобы ввести весь массив, надо использовать цикл.
int a[10], n; printf("Введите количество элементов массива (от 0 до 9): "); | // Объявляем массив и переменную для количества элементов массива |
scanf("%d", &n); | // Ввод количества элементов массива |
if (n < 0 || n > 9) { printf("Количество элементов массива должно быть от 0 до 9!\n"); return; } | // Если входные данные// то печатаем соответствующее сообщение и выходим из программы |
for (i = 0; i < n; i++) | // Ввод массива по одному элементу |
scanf("%d", &a[i]); | // Можно использовать scanf("%d", a + i) |
Вывод также осуществляется в цикле.
for (i = 0; i < n; i++) printf("a[%d] = %3d\n", i + 1, a[i]); |
В результате на экране мы увидим примерно следующий текст:
a[1] = 4
a[2] = 15
a[3] = -2
...
Си. Примеры работы с одномерными массивами: суммирование значений
Даны три массива разной размерности. Определить в каком массиве больше сумма элементов.
#include <cstdio> #include <locale.h> const int nmax = 100; | |
int ArrayInput(int *n, double x[], char *fname); | // Функция ввода массива из файла |
double Sum(double x[], int n); void main(int argc, char *argv[]) { double a[nmax], b[nmax], c[nmax]; double sa, sb, sc, max; int na, nb, nc; setlocale(LC_ALL, "rus"); | // Функция поиска суммы элементов массива // Меняем кодировку для консольного приложения |
if (argc < 4) { printf("Недостаточно параметров!\n"); return; } if (!ArrayInput(&na, a, argv[1])) return; if (!ArrayInput(&nb, b, argv[2])) return; if (!ArrayInput(&nc, c, argv[3])) return; sa = Sum(a, na); sb = Sum(b, nb); sc = Sum(c, nc); max = sa; if (sb > max) max = sb; if (sc > max) max = sc; if (sa == max) printf("Массив А имеет максимальную сумму элементов: %9.3lf\n", max); if (sb == max) printf("Массив B имеет максимальную сумму элементов: %9.3lf\n", max); if (sc == max) printf("Массив C имеет максимальную сумму элементов: %9.3lf\n", max); } double Sum(double x[], int n) { double s = 0; for (int i = 0; i < n; i++) s += x[i]; return s; } int ArrayInput(int *n, double x[], char *fname) { FILE *file; if ((file = fopen(fname, "r")) == NULL) { printf("Невозможно открыть файл '%s'\n", fname); return 0; } if (fscanf(file, "%d", n) < 1) { printf ("Ошибка чтения из файла '%s'\n", fname); fclose(file); return 0; } if (*n < 0 || *n > nmax) { printf("Кол-во эл-тов массива должно быть от 1 до %d! (файл '%s')\n", nmax, fname); return 0; } for (int i = 0; i < *n; i++) if (fscanf(file, "%lf", &x[i]) < 1) { printf ("Ошибка чтения из файла '%s'\n", fname); fclose(file); return 0; } fclose(file); return 1; } |
Си. Примеры работы с одномерными массивами: нахождение максимального элемента
#include <iostream>
using namespace std;
int main()
{
int m[10],I, min,max;
for(i=0;i<10;i++){
cin>>m[i];
}
max=m[0];
for(i=1;i<10;i++){
if(max<m[i])max=m[i];
}
min=m[0];
for(i=1;i<10;i++){
if(min>m[i]) min = m[i];
}
cout<<"min = "<<min<<endl;
cout<<"max = "<<max;
system("PAUSE");
return 0;
}
Си. Примеры работы с одномерными массивами: циклический сдвиг
//Cдвигает элементы массива на 1 влево
#include <iostream>
#include <iterator>
#include <algorithm>
int main() {
std::size_t const arraySize = 10;
int array[arraySize] = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
std::rotate(array, array + 1, array + arraySize);
std::copy(array, array + arraySize, std::ostream_iterator<int>(std::cout, " "));
std::cout << std::endl;
}
Си. Примеры работы с одномерными массивами: поиск элемента
/* Бинарный поиск */
#include
main()
{
int k[100],v,i,j,m;
for (i=0;i<100;i++)
scanf("%d",&k[i]);
scanf("%d",&v);
i=0; j=100; m=50;
while (k[m]!=v)
{
if (k[m] < v) i+=m;
else j=m-i;
m=(i+j)/2;
}
printf("%d %d",v,m);
}
Си. Примеры работы с одномерными массивами: алгоритмы сортировки массивов
Сортировка выбором
Идея метода состоит в том, чтобы создавать отсортированную последовательность путем присоединения к ней одного элемента за другим в правильном порядке. Если входная последовательность почти упорядочена, то сравнений будет столько же, значит алгоритм ведет себя неестественно.
template< class T >
void selectSort(T* arr, int size)
{
T tmp;
for(int i = 0; i < size; ++i) // i - номер текущего шага
{
int pos = i;
tmp = arr[i];
for(int j = i + 1; j < size; ++j) // цикл выбора наименьшегоэлемента
{
if (arr[j] < tmp)
{
pos = j;
tmp = arr[j];
}
}
arr[pos] = arr[i];
arr[i] = tmp; // меняем местами наименьший с a[i]
}
}
Пирамидальная сортировка
Пирамидальная сортировка является первым из рассматриваемых методов, быстродействие которых оценивается как O(n log n)
template< class T >
void downHeap(T a[], long k, long n) { // процедура просеивания следующего элемента // До процедуры: a[k+1]...a[n] - пирамида // После: a[k]...a[n] - пирамида T new_elem; long child; new_elem = a[k]; while(k <= n/2) // пока у a[k] есть дети { child = 2*k; if(child < n && a[child] < a[child+1]) // выбираем большего сына child++; if(new_elem >= a[child]) break; // иначе a[k] = a[child]; // переносим сына наверх k = child; } a[k] = new_elem;} template< class T >void heapSort(T a[], long size) { long i; T temp; // строим пирамиду for(i = size / 2 - 1; i >= 0; --i) downHeap(a, i, size-1); // теперь a[0]...a[size-1] пирамида for(i=size-1; i > 0; --i) { // меняем первый с последним temp = a[i]; a[i] = a[0]; a[0] = temp; // восстанавливаем пирамидальность a[0]...a[i-1] downHeap(a, 0, i-1); }}Жизненный цикл ПО. Стадии и этапы
Жизненный цикл ИС - ряд событий, происходящих с системой в процессе ее создания и использования.
Стадия — часть процесса создания ПО, ограниченная определенными временными рамками и заканчивающаяся выпуском конкретного продукта (моделей, программных компонентов, документации), определяемого заданными для данной стадии требованиями.
Жизненный цикл традиционно моделируется в виде некоторого числа последовательных этапов (или стадий, фаз). В настоящее время не выработано общепринятого разбиения жизненного цикла программной системы на этапы. Иногда этап выделяется как отдельный пункт, иногда - входит в качестве составной части в более крупный этап. Могут варьироваться действия, производимые на том или ином этапе. Нет единообразия и в названиях этих этапов.
Традиционно выделяются следующие основные этапы ЖЦ ПО:
- анализ требований,
- проектирование,
- кодирование (программирование),
- тестирование и отладка,
- эксплуатация и сопровождение.
| Поделиться: |
Познавательные статьи:
Последнее изменение этой страницы: 2017-01-25; просмотров: 4498; Нарушение авторского права страницы; Мы поможем в написании вашей работы!
infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.143.239.63 (0.012 с.)