- •Напишите программу реализации системной функции CreateConsoleScreenBuffer
- •Классификация:
- •Система контекстной помощи
- •По модели данных[править | править вики-текст]
- •По степени распределённости[править | править вики-текст]
- •Основные сведения[править | править вики-текст]
- •Ассоциации[править | править вики-текст]
- •Агрегация[править | править вики-текст]
- •Композиция[править | править вики-текст]
- •Обобщение (наследование)[править | править вики-текст]
- •Реализация[править | править вики-текст]
- •Зависимость[править | править вики-текст]
- •Уточнения отношений[править | править вики-текст]
- •Уровни схемы базы данных[править | править вики-текст]
- •Иды требований по характеру[править | править вики-текст]
- •Источники требований[править | править вики-текст]
- •Вид и состав требований тз[править | править вики-текст]
- •Напишите программу реализации системной функции CreateConsoleScreenBuffer
- •9. Экономическая часть проекта
- •9.1. Технико-экономический анализ и оценка показателей экономической эффективности проекта.
- •9.2. Расчёт себестоимости электроэнергии
- •Развитие языков программирования и средств разработки
- •Напишите программу реализации системной функции CreateConsoleScreenBuffer
- •Анализ требований к проекту
- •Проектирование
- •Реализация
- •Тестирование продукта
- •Внедрение и поддержка
- •По целям исследований
- •По особенностям представления
- •Свойства парадигм программирования
- •Инициализация объектов данных[править | править вики-текст]
- •Программирование арифметических операций[править | править вики-текст]
- •Циклы[править | править вики-текст]
- •Инвариантные фрагменты кода[править | править вики-текст]
По модели данных[править | править вики-текст]
Примеры:
Иерархические
Сетевые
Реляционные
Объектно-ориентированные
Объектно-реляционные
По степени распределённости[править | править вики-текст]
Локальные СУБД (все части локальной СУБД размещаются на одном компьютере)
Распределённые СУБД (части СУБД могут размещаться на двух и более компьютерах).
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №34
по специальности 5B0704 - Вычислительная техника и программное обеспечение
В одномерном массиве, вводимом с клавиатуры и состоящем из 10 вещественных элементов, вычислить: количество отрицательных элементов массива; сумму модулей элементов массива, расположенных после минимального по модулю элемента.
const int N=10; int i,k=0,s=0,j,x; float massiv[N]; //Описание массива cout<<"Введите 10 целых чисел\n"; for(i=0;i<N;i++) cin>>massiv[i]; //Ввод массива for(i=0;i<N;i++) //Вывод массива cout<<"\n massiv["<<i<<"] = "<<massiv[i]; //Вывод массива for(i=0; i<N; i++) { if(massiv[i]<0) k++; } cout<<"\n Kol-vo otriz="<<k<<'\n'; j=fabs(massiv[0]); for(i=0; i<N; i++) { if(fabs(massiv[i])<j){ j=massiv[i]; x=i+1;} } for(i=x; i<N; i++) s+=massiv[i]; cout<<"\n Summa="<<s;
Напишите программу реализации системной функции GetTrusteeName
Для получения из структуры trustee имени или идентификатора учетной записи используется функция GetTrusteeName.
Функция GetTrusteeName имеет следующий прототип!
LPSTR GetTrusteeName(
PTRUSTEE pTrustee // указатель на структуру TRUSTEE );
Единственным параметром этой функции является указатель на структуру типа trustee, из которой функция вернет указатель на имя учетной записи. Это имя может быть как символьной строкой, так и идентификатором безопасности в зависимости от формы структуры trustee.
Для каждого служащего выведите фамилию и вычислите количество месяцев со дня найма до настоящего времени, округленное до ближайшего целого. Назовите столбец MONTHS_WORKED. Результаты отсортируйте по количеству отработанных месяцев. Округлите количество месяцев до целого числа.
SELECT last_name, ROUND(MONTHS_BETWEEN (SYSDATE, hire_date)) month_worked
FROM employees
ORDER BY month_worked;
Построить схему двоичного счетчика с модулем счета 10010 на основе микросхем счетчика (7493) и привести соответствующие пояснения к выполненным соединениям в схеме.
|
Диаграмма взаимодействия ПО, как способ выражение сценария ПО.
Диаграмма взаимодействия ПО, как способ выражение сценария ПО
Диаграмма
взаимодействия -
это диаграмма, на которой представлено
взаимодействие, состоящее из множества
объектов и отношений между ними, включая
и сообщения, которыми они обмениваются.
Этот термин применяется к видам диаграмм
с акцентом на взаимодействии объектов
(диаграммах кооперации, последовательности
и деятельности).
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №35
по специальности 5B0704 - Вычислительная техника и программное обеспечение
С одномерным массивом, состоящим из n вещественных элементов, выполнить следующее: Заменить все отрицательные элементы массива их модулями и изменить порядок следования элементов в массиве на обратный.
int n, i, j=0;
cout<<"Vvedite kolichestvo elementov\n";
cin>>n;
float *massiv=new float [n];
if(!massiv)
{
cout<<"Nedostatochno pamyati\n";
cout<<"Najmite klavishu dlya zaversheniya programmi\n";
getch();
return 0;
}
cout<<"Vvedite massiv iz"<<' '<<n<<' '<<"elemetov\n";
for(i=0; i<n; i++)
cin>>*(massiv+i);
for(int i=0; i<n; i++)
cout<<*(massiv+i)<<' ';
float *massiv2=new float [n];
if(!massiv2)
{
cout<<"Nedostatochno pamyati\n";
cout<<"Najmite klavishu dlya zaversheniya programmi\n";
getch();
return 0;
}
j=n-1;
for(i=0; i<n; i++)
{
massiv2[j]=fabs(massiv[i]);
j--;
}
for(int j=0; j<n; j++)
cout<<'\n'<<massiv2[j]<<' ';
delete [] massiv;
delete [] massiv2;
Напишите программу реализации системной функции GetTrusteeType
Для получения формы используются функции GetTrusteeForm. Прототипы этих функций описаны ниже
Функция GetTrusteeForm имеет следующий прототип!
TRUSTEE_FORM GetTrusteeForm (
PTRUSTEE pTrustee // указатель на структуру TRUSTEE );
Единственным параметром этой функции является указатель на структуру типа trustee, форму которой вернет функция. Функция возвращает одно из значений перечисления типа trustee_form.
ФуНКЦИЯ GetTrusteeType Имеет следующий ПроТОТИП!
TRUSTEE_TYPE Ge tTrus teeType(
PTRUSTEE pTrustee // указатель на структуру TRUSTEE );
Получите по каждому служащему отчет в следующем виде: <employee last name> earns <salary> monthly but wants <3 times salary> (<фамилия> зарабатывает <оклад> в месяц, но желает <утроенный оклад>). Назовите столбец Dream Salaries.
select LAST_NAME+' зарабатывает $'+CStr(SALARY)+' в месяц, но желает $'+CStr(SALARY*3) as `Dream Salaries` from EMPLOYEES;
Построить схему дешифратора на восемь выходов на основе микросхемы сдвоенных дешифраторов на четыре выхода (74139) и привести соответствующие пояснения к выполненным соединениям в схеме.
|
Базы знаний.
База знаний (БЗ; англ. knowledge base, KB) в информатике и исследованиях искусственного интеллекта — это особого рода база данных, разработанная для оперирования знаниями (метаданными). База знаний содержит структурированную информацию, покрывающую некоторую область знаний, для использованиякибернетическим устройством (или человеком) с конкретной целью. Современные базы знаний работают совместно с системами поиска информации, имеютклассификационную структуру и формат представления знаний.
Полноценные базы знаний содержат в себе не только фактическую информацию, но и правила вывода, допускающие автоматические умозаключения о вновь вводимых фактах и, как следствие, осмысленную обработку информации. Область наук об искусственном интеллекте, изучающая базы знаний и методы работы со знаниями, называется инженерией знаний.
Иерархический способ представления в базе знаний набора понятий и их отношений называется онтологией. Онтологию некоторой области знаний вместе со сведениями о свойствах конкретных объектов также можно назвать базой знаний.
База знаний — важный компонент интеллектуальной системы. Наиболее известный класс таких программ — это экспертные системы. Они предназначены для поиска способов решения проблем из некоторой предметной области, основываясь на записях БЗ и на пользовательском описании ситуации.
Простые базы знаний могут использоваться для создания экспертных систем хранения данных в организации: документации, руководств, статей технического обеспечения. Главная цель создания таких баз — помочь менее опытным людям найти уже существующее описание способа решения какой-либо проблемы.
Двумя наиболее важными требованиями к информации, хранящейся в базе знаний интеллектуальной системы, являются:
Достоверность конкретных и обобщённых сведений, имеющихся в базе данных;
Релевантность информации, получаемой с помощью правил вывода базы знаний.
Ниже перечислены некоторые из особенностей, которые могут (но не обязаны) быть у системы, оперирующей базами знаний.
Автоматическое доказательство (вывод). Способность системы выводить новые знания из старых, находить закономерности в БЗ. Часто принимается, что база знаний отличается от базы данных именно наличием механизма вывода.
Доказательство заключения. Способность системы после выдачи ответа «объяснить» ход её рассуждений, причем «по первому требованию».
Интроспекция. Нахождение противоречий, нестыковок в БЗ, контроль правильной организации БЗ.
Машинное обучение. Превращение БЗ в гибкую систему, адаптация к проблемной области. Аналогична человеческой способности «набирать опыт».
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №36
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию moon(), которая вычисляет силу тяжести на Луне. Сила тяжести на Луне составляет приблизительно 17% от земной. Напишите программу, которая выведет на экран таблицу перевода земных фунтов в их лунные эквиваленты. Вычислите 10 значений таблицы от 1 до 10 фунтов. После каждых 5 фунтов выведите пустую строку. Продемонстрируйте использование этой функции в программе.
import java.util.ArrayList;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double[] earch = new double[11];
double[] moon = new double[11];
for (int i = 0; i < earch.length; i++) {
earch[i] = i + 1;
moon[i] = moon(earch[i]);
System.out.println(earch[i]*9.8+ "=>" + moon[i]);
if (earch[i] % 5 == 0 && i != 0) {
System.out.println(" ");
}
}
//System.out.println("Earch weight + ");
}
public static double moon(double p_val) {
double l_return = 0;
l_return = (double)p_val*9.8*0.17;
return l_return;
}
}
Напишите программу реализации системной функции MoveFile
Теперь разберем функцию MoveFile, которая служит для перемещения
файлов. Перемещение файла отличается от копирования файла только тем, что
старый файл после его перемещения удаляется.
Функция MoveFile имеет следующий прототип:
BOOL MoveFile(
LPCTSTR IpExistingFiieName, // имя существующего файла
LPCTSTR lpNewFileName // имя нового файла );
В случае успешного завершения функция возвращает ненулевое значение, а в случае неудачи — значение false. Отметим, что функция MoveFile сохраняет все атрибуты перемещаемого файла. Параметры этой функции имеют следующее назначение.
Параметр IpExistingFiieName должен указывать на строку, содержащую имя перемещаемого файла.
Напишите запрос для вывода фамилий и окладов всех служащих. Назовите выходной столбец SALARY. Длина столбца SALARY – 15 символов с заполнением символов $ слева.
select LAST_NAME, String(15-Len(CStr(SALARY)),'$')+CStr(SALARY) from EMPLOYEES;
Построить схему мультиплексора на восемь входов на основе микросхемы сдвоенных мультиплексоров на четыре входа (74153) и привести соответствующие пояснения к выполненным соединениям в схеме.
|
Диаграмма классов: структура, состав, связи.
Диаграмма классов (англ. Static Structure diagram) — диаграмма, демонстрирующая классы системы, их атрибуты, методы и взаимосвязи между ними. Входит в UML.
Существует два вида:
Статический вид диаграммы рассматривает логические взаимосвязи классов между собой;
Аналитический вид диаграммы рассматривает общий вид и взаимосвязи классов входящих в систему.
Существуют разные точки зрения на построение диаграмм классов в зависимости от целей их применения:
Концептуальная точка зрения — диаграмма классов описывает модель предметной области, в ней присутствуют только классы прикладных объектов;
Точка зрения спецификации — диаграмма классов применяется при проектировании информационных систем;
Точка зрения реализации — диаграмма классов содержит классы, используемые непосредственно в программном коде (при использовании объектно-ориентированных языков программирования).
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №37
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию upeeter(), которая вычисляет год на Юпитере. Год на Юпитере (т. е. время, требуемое Юпитеру для полного оборота вокруг Солнца) составляет около 12 земных лет. Напишите программу, которая преобразует юпитерианские годы в земные. Предоставьте возможность пользователю вводить с клавиатуры число юпитерианских лет. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
Integer earch_years = 0;
try {
earch_years = Integer.valueOf(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
Integer upeeter_years = upeeter(earch_years);
System.out.println("Earth years : " + earch_years + "=> Upeeter years : " + upeeter_years);
//System.out.println("Earch weight + ");
}
public static Integer upeeter(Integer p_val) {
return p_val * 12;
}
}
Напишите программу реализации системной функции MoveMemory
Для копирования перекрывающихся блоков памяти используется функция MoveMemory, которая имеет следующий прототип:
VOID MoveMemory (
PVOID Destination, // адрес области назначения
CONST VOID *Source, // адрес исходной области
SIZE_T Length // длина блока памяти );
Параметры этой функции полностью совпадают с параметрами функции CopyMemory.
Для копирования блока виртуальной памяти используется функция соруMemory, которая имеет следующий прототип:
VOID CopyMemory (
PVOID Destination, // адрес области назначения
CONST VOID *Source, // адрес исходной области
SIZE_T Length // длина блока памяти
Эта функция копирует блок памяти, длина в байтах и базовый адрес которого задаются соответственно параметрами Length и source в область памяти по адресу Destination. Отметим, что результат выполнения функции соруметогу непредсказуем, если исходный и результирующий блоки памяти перекрываются.
Листинг. Инициализаций и копирование блоков виртуальной памяти
#include <windows.h>
#include <iostream.h>
int mainO
{BYTE *a, *b; // указатели на блоки памяти
const int size = 1000; // размерность массива // распределяем виртуальную память
а = (BYTE*)VirtualAlloc (NULL, size, MEM_COMMIT, PAGE_READWRITE) ;
if(!a)
{cout « "Virtual allocation failed." << endl;
return GetLastError(); }
b= (BYTE*)VirtualAlloc(NULL, size, MEM_COMMIT, PAGE_READWRITE);
if(!b)
{ cout « "Virtual allocation failed." « endl;
return GetLastError(); } // инициализируем символом X
FillMemory(a, size, 'X'); // копируем блок А в блок В
CopyMemory(b, a, size); // распечатываем результат
cout « **b[10] = " « b[10] « endl;
// освобождаем виртуальную память
if (!VirtualFree(a, 0, MEM_RELEASE))
{ cout « "Memory release failed." « endl;
return GetLastError(); }
return 0; }
Выведите фамилию каждого сотрудника, дату найма и день пересмотра зарплаты, который приходится на первый понедельник после шести месяцев службы. Назовите колонку REVIEW. Даты должны форматироваться таким образом, чтобы их вывод был аналогичен следующему: “Monday, the Thirty-First of July, 2000”
SELECT last_name,
TO_CHAR (hire_date, 'DD-MON-YY', 'NLS_DATE_LANGUAGE=american') hire_date,
TO_CHAR (NEXT_DAY (ADD_MONTHS (hire_date, 6), 'Понедельник'), 'fmDay, "the" Ddspth "of" Month, YYYY', 'NLS_DATE_LANGUAGE=american') review
FROM employees;
Описать режимы работы представленной микросхемы, назначение и характер ее входных и выходных сигналов.
. Дешифраторы.
Дешифратор - логическая комбинационная схема, которая имеет n информационных входов и 2n выходов. Каждой комбинации логических уровней на входах будет соответствовать активный уровень на одном из 2п выходов. Обычно n равно 2,3 или 4. На рис. 13.1 изображен дешифратор1 с n = 3, активным уровнем является уровень логического нуля. На входы С, В, А можно подать следующие комбинации логических уровней: 000,
001, 010...111, всего 8 комбинаций. Схема имеет 8 выходов, на одном из которых формируется низкий потенциал, на остальных - высокий. Номер этого единственного выхода, на котором формируется активный (нулевой) уровень, соответствует числу N, определяемому состоянием входов С, В, А следующим образом: N = С-22 + В-21 + А-2°. Например, если на входы подана комбинация логических уровней 011, то из восьми выходов микросхемы (Y0, Y1...Y7) на выходе с номером N=3 установится нулевой уровень сигнала (Y3=0), a все остальные выходы будут иметь уровень логической единицы.
Разработка технического задания.
Разработка технического задания (ТЗ) является важным предварительным этапом проекта, который выполняется или самим Заказчиком, или подрядной организацией.
Техническое задание описывает требования к объекту работ, устанавливает его назначение, технические параметры, состав необходимой проектной документации, а также определяет порядок и сроки выполнения работ по данному объекту. Перед тем как приступить к разработке ТЗ, специалисты осуществляют предварительные расчеты и исследования и сбор исходных данных.
Техническое задание имеет юридический статус - как правило, оно является необходимым приложением к договору. Все изменения и дополнения к техническому заданию согласуются между участниками проекта и документально оформляются.
Техническое задание должно учитывать все возможные точки разногласий участников проекта и исключать неточное или недостаточно подробное изложение требований, поскольку впоследствии плохо составленное техническое задание может привести к проектным ошибкам. С другой стороны, излишне подробное задание зачастую препятствует рассмотрению в целом привлекательных вариантов, но не отвечающих частным формальным требованиям.
Для распределения ответственности за ошибки стороны ссылаются на техническое задание. Грамотно разработанное ТЗ станет инструментом в руках Заказчика, на основании которого он сможет требовать от подрядчика соответствия выполненных работ всем условиям, оговорённым в ТЗ.
Государственными стандартами техническому заданию определено четкое место в структуре проектирования. Разработка технического задания предшествует всем последующим этапам реализации объекта (от предпроектных проработок до ввода объекта в эксплуатацию и его сервисного сопровождения - в случае контракта жизненного цикла).
Несмотря на свою важность, содержание технического задания мало регламентировано нормативными документами (как правило, кратко изложено содержание ТЗ для отдельных видов работ). В связи с этим, обычно содержание технического задания устанавливается внутренними документами предприятия либо соглашением между Заказчиком и исполнителем проектных работ.
Группа AF окажет поддержку Заказчику при разработке ТЗ, учитывая цели и ресурсные ограничения Заказчика. В результате Заказчик получит следующие преимущества:
Корректное оформление технических требований
Полная и максимально правильная постановка задач проекта
Обоснование необходимости решения задачи
Уточнение исходных данных
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №38
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию Average(), которая усредняет абсолютные значения пяти произвольных чисел, вводимых пользователем. Выведите на экран результат. Продемонстрируйте использование этой функции в программе.
Напишите программу реализации системной функции ReadConsole
using System;
using System.Threading;
ppublic static class RandomProvider { private static int seed = Environment.TickCount;
private static ThreadLocal<Random> randomWrapper = new ThreadLocal<Random>(() => new Random(Interlocked.Increment(ref seed)) );
public static Random GetThreadRandom() { return randomWrapper.Value; } }
По каждому служащему выведите фамилию, дату найма и день недели, когда он был нанят на работу. Назовите последний столбец DAY. Отсортируйте результаты по дням недели, начиная с понедельника.
select LAST_NAME, HIRE_DATE, StrConv(WeekDayName(WeekDay(HIRE_DATE),false,1),3) as DAY from EMPLOYEES;
Описать состав и режимы работы представленной микросхемы, назначение и характер ее входных и выходных сигналов.
Диаграмма компонентов для объектно-ориентированной системы и web-системы.
Объектно-ориентированный анализ и проектирование (ООАП, Object-Oriented Analysis/Design) - технология разработки программных систем, в основу которых положена объектно-ориентированная методология представления предметной области в виде объектов, являющихся экземплярами соответствующих классов .
Методология ООАП тесно связана с концепцией автоматизированной разработки программного обеспечения (Computer Aided Software Engineering, CASE). К первым CASE-средствам отнеслись с определенной настороженностью. Со временем появились как восторженные отзывы об их применении, так и критические оценки их возможностей. Причин для столь противоречивых мнений было несколько. Первая из них заключается в том, что ранние CASE-средства были простой надстройкой над системой управления базами данных (СУБД). Визуализация процесса разработки концептуальной схемы БД имеет немаловажное значение, тем не менее, она не решает проблем создания приложений других типов. Вторая причина связана с графической нотацией, реализованной в CASE-средстве. Если языки программирования имеют строгий синтаксис, то попытки предложить подходящий синтаксис для визуального представления концептуальных схем БД, были восприняты далеко не однозначно. На этом фоне разработка и стандартизация унифицированного языка моделирования UML вызвала воодушевление у всего сообщества корпоративных программистов.
В рамках ООАП исторически рассматривались три графических нотации:
диаграммы "сущность-связь" (Entity-Relationship Diagrams, ERD),
диаграммы функционального моделирования (Structured Analysis and Design Technique, SADT),
диаграммы потоков данных (Data Flow Diagrams, DFD).
Диаграммы "сущность-связь" (ERD) предназначены для графического представления моделей данных разрабатываемой программной системы и предлагают набор стандартных обозначений для определения данных и отношений между ними. С помощью этого вида диаграмм можно описать отдельные компоненты концептуальной модели данных и совокупность взаимосвязей между ними.
Основными понятиями данной нотации являются понятия сущности и связи. При этом под сущностью (entity) понимается произвольное множество реальных или абстрактных объектов, каждый из которых обладает одинаковыми свойствами и характеристиками. В этом случае любой рассматриваемый объект может быть экземпляром одной и только одной сущности, должен иметь уникальное имя или идентификатор, а также отличаться от других экземпляров данной сущности.
Связь (relationship) определяется как отношение или ассоциация между отдельными сущностями. Примерами связей могут являться родственные отношения, в частности "отец-сын" или производственные - "начальник-подчиненный". Другой тип связей задается отношениями "иметь в собственности" или "обладать свойством". Различные типы связей графически изображаются в форме ромба с соответствующим именем данной связи.
Графическая
модель
данных строится таким образом, чтобы
связи между отдельными сущностями
отражали не только семантический
характер соответствующего отношения,
но и дополнительные аспекты обязательности
связей, а также кратность
участвующих в данных отношениях
экземпляров
сущностей.
Нотация
диаграмм (ERD)
реализована в различных программных
средствах. Пример диаграммы ERD,
разработанной с помощью средства
моделирования бизнес-процессов ARIS
изображен
на рис.1.2.
Ограниченность диаграмм ERD проявляется при конкретизации концептуальной модели в более детальное представление моделируемой программной системы, которое кроме статических связей должно содержать информацию о поведении или функционировании отдельных ее компонентов.
Рис. 1.2. Диаграмма "сущность-связь" для примера сотрудников компании, работающих над различными проектами
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №39
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию, которая находит все простые числа в диапазоне от 1 до 100. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
int curNumm,divs;
for (curNumm=1;curNumm<101;curNumm++){
divs=0;
for (int i=1;i<=curNumm;i++){
if (curNumm%i==0){
divs++;
}
}
if (divs<=2){
System.out.println(curNumm);
}
}
}
}
Напишите программу реализации системной функции ReadConsoleInput
Функции ввода низкого уровня работают непосредственно с записями входного буфера консоли. к ним относятся функции ReadConsolelnput. Для чтения записей из входного буфера используется функция ReadConsolelnput, которая имеет следующий прототип:
BOOL ReadConsolelnput(
HANDLE hConsolelnput, // дескриптор входного буфера консоли
PINPUT_RECORD lpBuffer, // буфер данных
DWORD nLength, // количество читаемых записей
LPDWORD lpNumberOfEventsRead // количество прочитанных записей );
В случае успешного завершения эта функция возвращает ненулевое значение, а в случае неудачи — значение false. Отметим, что после чтения записи из входного буфера консоли функция Readconsoieinput удаляет ее оттуда. Теперь перейдем к описанию параметров этой функции.
Параметр hconsoieinput должен содержать дескриптор входного буфера консоли.
Параметр IpBuffer должен указывать на область памяти, в которую будут читаться записи из входного буфера консоли.
Параметр nLength должен содержать количество записей, которые пользователь хочет прочитать из входного буфера консоли. А по адресу, заданному параметром lpNumberOfEventsRead, функция запишет количество прочитанных записей из буфера консоли.
Для чтения записей из входного буфера консоли, не удаляя их оттуда, используется функция Peekconsoieinput. Параметры этой функции полностью совпадают С параметрами функции Readconsoieinput.
В листинге 13.3 приведен текст программы, которая читает по одной записи из входного буфера и просто распечатывает их содержимое на экран.
Листинг 13.3, Чтение записей входного буфера консоли
# include <windows. h>
#include <iostream.h>
HANDLE hStdln, hStdOut; // для дескрипторов стандартного ввода и вывода
BOOL bRead = TRUE; // для цикла обработки событий
// функция обработки сообщений от клавиатуры
VOID KeyEventProc(KEY_EVENT_RECORD kir)
{ cout « "\tKey event record:" « endl;
// просто выводим на консоль содержимое записи
cout « "bKeyDown = " « hex « kir.bKeyDown « endl;
cout « "wRepeatCount = " « dec « kir.wRepeatCount << endl;
cout « "wVirtualKeyCode = " « hex « kir.wVirtualKeyCode « endl;
cout « "wVirtualScanCode = " « kir.wVirtualScanCode « endl;
cout « "uChar.AsciiChar = " « kir.uChar.AsciiChar « endl;
cout « "dwControlKeyState = " « kir.dwControlKeyState « endl;
// если ввели букву 'q', то выходим из цикла обработки событий
if (kir.uChar.AsciiChar == 'q')
bRead = FALSE; } // функция обработки сообщений от мыши
VOID MouseEventProc(MOUSE_EVENT_RECORD mer)
{ cout « "\tMouse event record:" « endl « dec;
// просто выводим на консоль содержимое записи
cout « "dwMousePosition.X = " « mer.dwMousePosition.X « endl;
cout « "dwMousePosition.Y = " « mer.dwMousePosition.Y « endl;
cout « "dwButtonState = " « hex « mer.dwButtonState « endl;
cout « "dwControlKeyState = " « mer.dwControlKeyState « endl;
cout « "dwEventFlags = " « mer.dwEventFlags « endl; }
// функция обработки сообщения об изменении размеров окна
VOID ResizeEventProc(WINDOW_BUFFER_SIZE_RECORD wbsr)
{ // изменяем размеры буфера вывода
SetConsoleScreenBufferSize(hStdOut, wbsr.dwSize); }
int main()
{ INPUT_RECORD ir; // входная запись
DWORD cNumRead; // для количества прочитанных записей
// получить дескрипторы стандартного ввода и вывода
hStdln = GetStdHandle(STD_INPUT_HANDLE);
if (hStdln == INVALID_HANDLE_VALUE)
{ cout « "Get standard input handle failed." « endl;
return GetLastErrorO;
hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hStdOut == INVALID_HANDLE_VALUE)
{ cout « "Get standard output handle failed." « endl;
return GetLastError(); }
// начинаем обработку событий ввода
cout « "Begin input event queue processing." « endl;
cout « "Input 'q1 to quit."« endl « endl;
// цикл обработки событий ввода
while (bRead)
{ // ждем событие ввода
WaitForSingleObject(hStdIn/ INFINITE);
// читаем запись ввода
if (IReadConsolelnput(
hStdln, // дескриптор ввода
&ir, // буфер для записи
1, // читаем одну запись
ScNumRead)) // количество прочитанных записей
{ cout « "Read console input failed." « endl;
break; // вызываем соответствующий обработчик
swi tch(ir.EventType)
{ case KEY_EVENT: // событие ввода с клавиатуры
KeyEventProc(ir.Event.KeyEvent);
break;
case MOUSE_EVENT: // событие ввода с мыши
MouseEventProc(ir.Event.MouseEvent);
break;
case WINDOW_BUFFER_SIZE_EVENT: // изменения размеров окна
ResizeEventProc(
ir.Event.WindowBufferSizeEvent);
break;
case FOCUS_EVENT: // события фокуса ввода игнорируем
break;
case MENU_EVENT: // события меню игнорируем
break;
default: // неизвестное событие
cout « "Unknown event type.";
break; } }
return 0; }
Напишите запрос для вывода фамилии и суммы комиссионных каждого служащего. Если служащий не зарабатывает комиссионных, укажите в столбце “No Commission”. Назовите столбец COMM.
select LAST_NAME, SALARY, COMMISSION_PCT from EMPLOYEES where COMMISSION_PCT is not null order by SALARY desc, COMMISSION_PCT desc;
Описать состав и режимы работы представленной микросхемы, назначение и характер ее входных и выходных сигналов.
Идеологический смысл технического задания.
Техническое задание — исходный документ на проектирование технического объекта (изделия). ТЗ устанавливает основное назначение разрабатываемого объекта, его технические характеристики, показатели качества и технико-экономические требования, предписание по выполнению необходимых стадий создания документации (конструкторской, технологической, программной и т. д.) и её состав, а также специальные требования.
Техническое задание также используется при создании творческого объекта (видеоролик, статья, графическое изображение, сайт).
Техническое задание является юридическим документом — как приложение включается в договор между заказчиком и исполнителем на проведение проектных работ и является его основой: определяет порядок и условия работ, в том числе цель, задачи, принципы, ожидаемые результаты и сроки выполнения. То есть должны быть объективные критерии, по которым можно определить, сделан ли тот или иной пункт работ или нет.
Все изменения, дополнения и уточнения формулировок ТЗ обязательно согласуются с заказчиком и им утверждаются. Это необходимо и потому, что в случае обнаружения в процессе решения проектной задачи неточностей или ошибочности исходных данных возникает необходимость определения степени вины каждой из сторон-участниц разработки, распределения понесенных в связи с этим убытков.
Стадии проектирования регламентированы стандартами.[2][3] Это следующая последовательность:
Техническое задание (по ГОСТ 2.103-68 к стадиям разработки не относится),
Техническое предложение,
Эскизный проект,
Технический проект,
Стадии рабочего проекта.
Решение любой задачи начинается с её осмысления и уточнения исходных данных. Те (технические) требования, которые выдаются заказчиком, формулируются на языке потребителя-неспециалиста и не всегда бывают технически четкими и исчерпывающими. Перевести требования на язык предметной области, сформулировать задачу максимально полно и грамотно, обосновать необходимость её решения, это и есть главная цель ТЗ, обязательный этап работы. Исполнитель выполняет его в тесном контакте с заказчиком. Фактически это означает, что работа исполнителя над проектом уже началась.
Как правило, ТЗ составляют на основе анализа результатов предварительных исследований, расчётов и моделирования.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №40
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию, которая с помощью цикла for вычисляет и выводит на экран геометрическую прогрессию 1, 2, 4, 8, 16, 32 и т. д. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
Integer l_start=1;
System.out.print(l_start+" ");
for (int i=1;i<=10;i++){
l_start=l_start*2;
System.out.print(l_start+" ");
}
}
}
Напишите программу реализации системной функции ReadConsoleOutput
BOOL ReadConsoleOutput(
HANDLE hConsoleOutput, // дескриптор буфера экрана
PCHAR_INFO lpBuffer, // указатель на буфер с данными
COORD dwBufferSize, // размер буфера с данными
COORD dwBufferCoord, // координаты для первого элемента в буфере
PSMALL_RECT lpReadRegion // область ввода в буфере экрана );
В случае успешного завершения функция возвращает ненулевое значение, а в случае неудачи — значение false. Кратко опишем назначение параметров этой функции.
Параметр hConsoleOutput этой функции должен содержать дескриптор буфера экрана.
Параметр lpBuffer должен указывать на область памяти, в которую будет читаться содержимое буфера экрана. Причем эта область памяти рассматривается функцией ReadconsoieOutput как двумерный массив, элементами которого являются струкутры типа char_info. Размерность этого массива задается параметром dwBuffersize. При этом поля х и y структуры coord задают соответственно количество столбцов и строк этого массива.
Параметр lpReadRegion является указателем на структуру типа small_rect, которая содержит координаты левого верхнего и правого нижнего углов прямоугольника в буфере экрана, содержимое которого будет прочитано в область памяти, заданную параметром lpBuffer.
В листинге 13.9 приведена программа, которая демонстрирует использование функции ReadconsoieOutput для чтения содержимого прямоугольной области буфера экрана.
#include <windows.h>
#include <iostream.h>
int main()
{ HANDLE hConsoleOutput; // для дескриптора буфера экрана
CHAR_INFO lpBuffer[4]; // буфер для ввода
COORD dwBufferSize = {2, 2}; // размеры буфера
COORD dwBufferCoord = {0, 0}; // координаты первого элемента в буфере
SMALL_RECT ReadRegion = {0, 0, 1, 1}; // прямоугольник, который читаем
// выводим символы, которые будем читать
cout « 'а' « 'Ъ' « endl « 'с' « 'd' « endl;
// получаем дескриптор ввода
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsoleOutput == INVALID_HANDLE_VALUE)
{ cout « "Get standard handle failed." « endl;
return GetLastError(); } // читаем символы
if (!ReadConsоleOutput(hConsoleOutput, lpBuffer, dwBufferSize,
dwBufferCoord, &ReadRegion))
{ cout « "Read console input failed." « endl;
return GetLastError(); } // распечатываем прочитанные символы
cout « "Read cells." « hex « endl;
for (int i = 0; i < 4; ++i)
cout « lpBuffer[i] .Attributes « ' ' « lpBuffer[i] .Char.AsciiChar
« endl; return 0;
Создайте запрос для вывода фамилий служащих и их окладов, обозначенных звездочками. Каждая звездочка означает 1000 долларов. Отсортируйте выходные данные в порядке убывания окладов. Назовите столбец EMPLOYEE_AND_THEIR_SALARIES («Служащие и их оклады»).
select LAST_NAME, rpad('*',trim((salary/1000)),'*') as EMPLOYEE_AND_THEIR_SALARIES from employees
Описать режимы работы представленной микросхемы, назначение и характер ее входных и выходных сигналов.
Диаграмма последовательностей: определение, структура, состав, пример.
Диаграмма последовательности (англ. sequence diagram) — диаграмма, на которой показано взаимодействие объектов (обмен между ними сигналами и сообщениями), упорядоченное по времени, с отражением продолжительности обработки и последовательности их проявления. Используется в языке UML.
Основными элементами диаграммы последовательности являются обозначения объектов(прямоугольники с названиями объектов), вертикальные "линии жизни"(англ. lifeline), отображающие течение времени, прямоугольники, отражающие деятельность объекта или исполнение им определенной функции (прямоугольники на пунктирной "линии жизни"), и стрелки, показывающие обмен сигналами или сообщениями между объектами.
На данной диаграмме объекты располагаются слева направо.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №41
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию, которая подсчитывает число прописных букв в строке. Продемонстрируйте использование этой функции в программе.
#include <iostream>
using namespace std;
int countLetters(char *str){
int st = 0, pr = 0;
for(int i = 0; str[i]; i++){
if(str[i] >= 'A' && str[i] <= 'Z')
st++;
else if(str[i] >= 'a' && str[i] <= 'z')
pr++;
}
cout<<"Stro4nie "<<st<<endl<<"Propisnie "<<pr;
return 0;
}
int main(){
char str[] = "fhh DF Hbdb dTbdgBTTT";
countLetters(str);
return 0;
}
Напишите программу реализации системной функции ReadConsoleOutputAttribute
#include <windows.h>
#include <iostream.h>
int main()
{
HANDLE hStdOut; // дескриптор буфера экрана
WORD lpAttribute[4]; // массив клеток с атрибутами
DWORD nLength = 4; // количество клеток
COORD dwCoord = {8, 0}; // координата первой клетки
DWORD NumberOfAttrs; // количество обработанных клеток
// читаем стандартный дескриптор вывода
hStdOut=GetStdHandle(STD_OUTPUT_HANDLE);
// выводим демо-текст
cout << "Console text attributes." << endl;
// ждем команды на изменение атрибутов слова "текст"
cout << "Press any key to change attributes.";
cin.get();
// устанавливаем новые атрибуты
lpAttribute[0] = BACKGROUND_BLUE | BACKGROUND_INTENSITY |
FOREGROUND_GREEN | FOREGROUND_INTENSITY;
lpAttribute[1] = BACKGROUND_GREEN | BACKGROUND_INTENSITY |
FOREGROUND_BLUE | FOREGROUND_INTENSITY;
lpAttribute[2] = BACKGROUND_RED | BACKGROUND_INTENSITY |
FOREGROUND_GREEN | FOREGROUND_INTENSITY;
lpAttribute[3] = BACKGROUND_GREEN | BACKGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_INTENSITY;
// записываем новые атрибуты в буфер экрана
if (!WriteConsoleOutputAttribute(hStdOut, lpAttribute,
nLength, dwCoord, &NumberOfAttrs))
{
cout << "Read console output attribute failed." << endl;
return GetLastError();
}
// читаем атрибуты слова "текст"
if (!ReadConsoleOutputAttribute(hStdOut, lpAttribute,
nLength, dwCoord, &NumberOfAttrs))
{
cout << "Read console output attribute failed." << endl;
return GetLastError();
}
// распечатываем атрибуты слова "текст"
cout << hex;
cout << "Attribute[0] = " << lpAttribute[0] << endl;
cout << "Attribute[1] = " << lpAttribute[1] << endl;
cout << "Attribute[2] = " << lpAttribute[2] << endl;
cout << "Attribute[3] = " << lpAttribute[3] << endl;
// ждем команду на завершение программы
cout << "Press any key to exit.";
cin.get();
return 0;
Используя функцию DECODE, напишите запрос, который выводит категорию всех сотрудников на основе значения столбца JOB_ID, согласно следующим данным:
JOB _ GRADE
AD_PRES A
ST_MAN B
IT_PROG C
SA_REP D
ST_CLERK E
None of the above 0
SELECT job_id,
DECODE (job_id, 'AD_PRES', 'A',
'ST_MAN', 'B',
'IT_PROG', 'C',
'SA_REP', 'D',
'ST_CLERK', 'E',
0)G
FROM employees;
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
PRE CLR D CLK OUT |
|
|
Требования, предъявляемые к разработке ПО.
Общие требования, предъявляемые к ТС ПО
Требования, предъявляемые к ТС ПО
ТС ПО в общем случае можно описать следующей системой понятий:
Технология создания ПО - упорядоченная совокупность взаимосвязанных технологических процессов в рамках ЖЦ ПО.
Технологический процесс - совокупность взаимосвязанных технологических операций.
Технологическая операция - основная единица работы, выполняемая определенной ролью, которая:
• подразумевает четко определенную ответственность роли;
• дает четко определенный результат (набор рабочих продуктов), базирующийся на определенных исходных данных (другом наборе рабочих продуктов);
• представляет собой единицу работы с жестко определенными границами, которые устанавливаются при планировании проекта.
Рабочий продукт - информационная или материальная сущность, которая создается, модифицируется или используется в некоторой технологической операции (модель, документ, код, тест и т.п.). Рабочий продукт определяет область ответственности роли и является объектом управления конфигурацией.
Роль - определение поведения и обязанностей отдельного лица или группы лиц в среде организации-разработчика ПО, осуществляющих деятельность в рамках некоторого технологического процесса и ответственных за определенные рабочие продукты.
Руководство - практическое руководство по выполнению одной или совокупности технологических операций. Руководства включают методические материалы, инструкции, нормативы, стандарты и критерии оценки качества рабочих продуктов.
Инструментальное средство (CASE-средство) - программное средство, обеспечивающее автоматизированную поддержку деятельности, выполняемой в рамках технологических операций.
Основным требованием, предъявляемым к современным ТС ПО, является их соответствие стандартам и нормативным документам, связанным с процессами ЖЦ ПО и оценкой технологической зрелости организаций-разработчиков (ISO 12207, ISO 9000, CMM и др.). Согласно этим нормативам, ТС ПО должна поддерживать следующие процессы:
• управление требованиями;
• анализ и проектирование ПО;
• разработка ПО;
• эксплуатация;
• сопровождение;
• документирование;
• управление конфигурацией и изменениями;
• тестирование;
• управление проектом.
Полнота поддержки процессов ЖЦ ПО должна поддерживаться комплексом инструментальных средств (CASE-средств).
Соответствие стандартам означает также, в частности, использование общепринятых, стандартных нотаций и соглашений. Для того чтобы проект мог выполняться разными коллективами разработчиков, необходимо использование стандартных методов моделирования и стандартных нотаций, которые должны быть оформлены в виде нормативов до начала процесса проектирования. Несоблюдение проектных стандартов ставит разработчиков в зависимость от фирмы-производителя данного средства, делает затруднительным формальный контроль корректности проектных решений и снижает возможности привлечения дополнительных коллективов разработчиков, смены исполнителей и отчуждения проекта, поскольку число специалистов, знакомых с данным методом (нотацией), может быть ограниченным.
Другим важным требованием является адаптируемость к условиям применения, которая достигается за счет поставки технологии в электронном виде вместе с CASE-средствами и библиотеками процессов, шаблонов, методов, моделей и других компонентов, предназначенных для построения ПО того класса систем, на который ориентирована технология. Электронные технологии должны включать средства, обеспечивающие их адаптацию и развитие по результатам выполнения конкретных проектов. Процесс адаптации заключается в удалении ненужных процессов и действий ЖЦ ПО, в изменении неподходящих или в добавлении собственных процессов и действий, а также методик, стандартов и руководств.
4.2.1 Методы разработки ПО
Разработчик должен использовать для всех работ по созданию ПО систематизированные, зарегистрированные методы. План разработки ПО должен содержать описание этих методов или включать в себя ссылки на источники, в которых они описаны.
4.2.2 Стандарты ПО
Разработчик должен разработать и использовать стандарты для представления требований, проекта, кода, тестовых вариантов, тестовых процедур и результатов тестирования. План разработки ПО должен содержать описание этой информации или ссылки на источники, в которых они описаны.
4.2.3 Программные средства многократного использования
Разработчик должен рассмотреть и оценить возможность применения ранее разработанных программных средств многократного использования для выполнения требований контракта. Область исследования и критерии, используемые для оценки, должны быть описаны в Плане разработки ПО. Выбранные для применения программные средства должны отвечать требованиям контракта по правам собственности.
Разработчик должен рассмотреть возможность многократного использования программных средств, разработанных по контракту, оценить и идентифицировать для заказчика выгоды и издержки такого использования в случае его совместимости с задачами проекта.
Примечание - В контракт может быть включено требование на разработку программных средств, пригодных для многократного использования.
4.2.4 Отработка критических требований
Разработчик должен идентифицировать ЭКПО или части их, критические с точки зрения безопасности, сбой в которых может привести к отказной ситуации для системы (см. 5.2).
Разработчик должен идентифицировать ЭКПО или их части, критические с точки зрения защиты, сбой в которых может привести к нарушению защиты системы. Если имеется такое ПО, разработчик должен предусмотреть стратегию обеспечения защиты. Эта стратегия должна гарантировать, что требования, проект, реализация и эксплуатационные процедуры для идентифицированного ПО минимизируют или устраняют потенциальные нарушения защиты системы. Разработчик должен описать стратегию в Плане разработки ПО, реализовать стратегию и провести доказательство как в части требуемых программных средств, так и в части выполнения стратегии обеспечения защиты.
Разработчик должен идентифицировать ЭКПО или части их, критические с точки зрения секретности, сбой в которых может привести к нарушению секретности системы. Если имеется такое ПО, то разработчик должен представить стратегию обеспечения секретности. Стратегия должна гарантировать, что требования, проект, реализация и эксплуатационные процедуры для идентифицированного ПО минимизируют или устраняют потенциальные нарушения секретности системы. Разработчик должен описать стратегию в Плане разработки ПО, реализовать стратегию и провести доказательство как в части требуемых программных средств, так и в части выполнения стратегии обеспечения секретности.
В случаях, когда система возлагает на ПО реализацию каких-либо требований, которые в соответствии с контрактом или спецификациями системы считаются критическими, разработчик должен идентифицировать те ЭКПО или их части, сбой в которых может привести к нарушению этих критических требований; разработать стратегию для гарантирования того, что требования, проект, реализация и эксплуатационные процедуры для идентифицированного ПО минимизируют или устраняют потенциал для таких нарушений; описать стратегию в Плане разработки ПО; выполнить стратегию и провести доказательство как в части требуемых программных средств, так и в части выполнения стратегии.
4.2.5 Использование ресурсов аппаратных средств компьютера
Разработчик должен проанализировать требования контракта, относящиеся к использованию ресурсов аппаратных средств компьютера (например, максимально возможная производительность процессора, объем памяти, пропускная способность устройств ввода/вывода). Разработчик должен распределить аппаратные ресурсы компьютера между ЭКПО, контролировать использование этих ресурсов при выполнении контракта и перераспределить их или идентифицировать потребность в дополнительных ресурсах по мере необходимости, чтобы удовлетворить требования контракта.
4.2.6 Доступ для проверки заказчиком
Разработчик должен обеспечить заказчику или его полномочному представителю доступ к средствам разработчика и субподрядчика, включая среды разработки и верификации ПО, для проверки программных средств и работ, требуемых в соответствии с контрактом.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №42
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию hypot(), которая вычисляет гипотенузу прямоугольного треугольника по двум его катетам. Продемонстрируйте использование этой функции в программе. Вам понадобится библиотечная функция sqrt(), которая возвращает квадратный корень из его аргумента. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double l_katet_1 = 0;
double l_katet_2 = 0;
double l_hypot = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter first side : ");
l_katet_1 = Double.parseDouble(reader.readLine());
System.out.println("Enter second side : ");
l_katet_2=Double.parseDouble(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
l_hypot = hypot(l_katet_1, l_katet_2);
System.out.println("Hypot : "+l_hypot);
}
public static double hypot(double p_katet1, double p_katet2) {
return Math.sqrt(Math.pow(p_katet1, 2) + Math.pow(p_katet2, 2));
}
}
Напишите программу реализации системной функции ReadConsoleOutputCharacter
#include <windows.h>
#include <iostream.h>
int main()
{
HANDLE hConsoleOutput; // для дескриптора буфера экрана
CHAR lpBuffer[80]; // буфер для ввода
COORD dwReadCoord = {0, 0}; // координаты первого элемента в буфере
DWORD nNumberOfCharsRead; // количество прочитанных символов
// получаем дескриптор буфера экрана
hConsoleOutput = GetStdHandle(STD_OUTPUT_HANDLE);
if (hConsoleOutput == INVALID_HANDLE_VALUE)
{
cout << "Get standard handle failed." << endl;
return GetLastError();
}
// выводим те символы, которые будем читать
cout << 'a' << 'b' << endl;
// читаем эти символы в буфер
if (!ReadConsoleOutputCharacter(
hConsoleOutput, // дескриптор буфера экрана
lpBuffer, // буфер для ввода символов
2, // количество читаемых символов
dwReadCoord, // координата первого символа
&nNumberOfCharsRead)) // количество прочитанных символов
{
cout << "Read consoleoutput character failed." << endl;
return GetLastError();
}
// выводим количество прочитанных символов и сами символы
cout << "Number of chars read: " << nNumberOfCharsRead << endl;
cout << "Read chars: " << lpBuffer[0] << lpBuffer[1] << endl;
return 0;
}
Создайте запрос для вывода номера отдела, фамилии служащего и фамилий всех служащих, работающих в одном отделе с данным служащим. Дайте столбцам соответствующие имена.
select e.department_id as "Department", e.last_name as "Employee", f.last_name as "collegue"
from EMPLOYEES e join employees f
on (e.department_id=f.department_id)
where e.employee_id<>f.employee_id
order by e.department_id, e.last_name,f.last_name;
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
1G’ A B OUT |
|
|
|
|
|
Логическая форма графического описания взаимодействия активных объектов системы.
Для представления объектной модели часто используются графические языки спецификации объектов (например, язык UML). На таких языках классы и объекты задаются прямоугольниками, которых указывается специфицирующая их информация. Для задания отношений между двумя классами соответствующие им прямоугольники связываются линией, снабженной различными графическими значками и некоторыми надписями. Графические значки специфицируют характер (вид) отношения между этими классами, а надписи обеспечивают полную идентификацию этого отношения (делают его конкретным).
Для описания декомпозиции объектов используется отношение вида агрегирования. Например, отношение "программа состоит из одного или нескольких модулей" представлено на рис. 1. 2. |
|
Рис. 1. 2. Пример отношения агрегирования между классами объектов. |
Следует заметить, что объектная модель полностью включает описание внешней информационной среды при реляционном подходе. |
В случае использования активных объектов основным широким классом архитектур при объектном подходе является коллектив параллельно действующих программ, причем здесь роль программ выполняют как раз эти активные объекты. Типичной архитектурой такого класса является архитектура "клиент - сервер". В такой системе один из активных объектов, называемый сервером, выполняет определенные программные услуги по запросам других активных объектов, называемых клиентами. Такой запрос передается серверу с помощью сообщения от клиента, результат выполнения сервером запроса передаются соответствующему клиенту с помощью другого сообщения. |
Дальнейшая разработка структуры программных подсистем и их кодирование на языках программирования может осуществляться уже в рамках реляционного подхода на ориентированных на него языках программирования - пользователь внутреннюю организацию этих подсистем уже "не видит". Однако, во многих случаях существуют сильные аргументы за то, чтобы продолжить объектную декомпозицию этих подсистем. Объектная структура этих подсистем может быть существенно более понятной разработчику, чем их структура при реляционном подходе. Кроме того, продолжение объектной декомпозиции и использование основных понятий и методов объектного подхода при дальнейшей разработке ПС представляется "естественным", так как весь процесс разработки становится единообразным (концептуально целостным). |
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №43
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию rectangle (), которая вычисляет площадь четырехугольника по его ширине и высоте. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double l_side1 = 0;
double l_side2 = 0;
double l_square = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter first side : ");
l_side1 = Double.parseDouble(reader.readLine());
System.out.println("Enter second side : ");
l_side2=Double.parseDouble(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
l_square = rectangle(l_side1, l_side2);
System.out.println("Square : "+l_square);
}
public static double rectangle(double p_side1, double p_side2) {
return p_side1*p_side2;
}
}
Напишите программу реализации системной функции ReadFile
#include <windows.h>
#include <iostream.h>
int main()
{
HANDLE hFile; // дескриптор файла
HANDLE hEndRead; // дескриптор события
OVERLAPPED ovl; // структура управления асинхронным доступом к файлу
// создаем события с автоматическим сбросом
hEndRead = CreateEvent(NULL, FALSE, FALSE, NULL);
if (hEndRead == NULL)
return GetLastError();
// инициализируем структуру OVERLAPPED
ovl.Offset = 0; // младшая часть смещения равна 0
ovl.OffsetHigh = 0; // старшая часть смещения равна 0
ovl.hEvent = hEndRead; // событие для оповещения завершения чтения
// открываем файл для чтения
hFile = CreateFile(
"C:\\demo_file.dat", // имя файла
GENERIC_READ, // чтение из файла
FILE_SHARE_READ, // совместный доступ к файлу
NULL, // защиты нет
OPEN_EXISTING, // открываем существующий файл
FILE_FLAG_OVERLAPPED, // асинхронный ввод
NULL // шаблона нет
);
// проверяем на успешное открытие
if (hFile == INVALID_HANDLE_VALUE)
{
cerr << "Create file failed." << endl
<< "The last error code: " << GetLastError() << endl;
CloseHandle(hEndRead);
cout << "Press any key to finish.";
cin.get();
return 0;
}
// читаем данные из файла
for (;;)
{
DWORD dwBytesRead;
DWORD dwRet;
int n;
// читаем одну запись
if (!ReadFile(
hFile, // дескриптор файла
&n, // адрес буфера, куда читаем данные
sizeof(n), // количество читаемых байтов
&dwBytesRead, // количество прочитанных байтов
&ovl // чтение асинхронное
))
{
switch(dwRet = GetLastError())
{
case ERROR_IO_PENDING:
cout << "Read file pending." << endl;
break;
case ERROR_HANDLE_EOF:
cout << endl << "End of the file." << endl;
cout << "The file is read." << endl;
// закрываем дескрипторы
CloseHandle(hFile);
CloseHandle(hEndRead);
return 1;
default:
cout << "Read file failed." << endl
<< "The last error code: " << dwRet << endl;
// закрываем дескрипторы
CloseHandle(hFile);
CloseHandle(hEndRead);
return 0;
}
}
// ждем, пока завершится асинхронная операция чтения
WaitForSingleObject(hEndRead, INFINITE);
// печатаем число
cout << n << ' ';
// увеличивает смещение в файле
ovl.Offset += sizeof(n);
}
}
Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с Zlotkey. Исключите Zlotkey из выходных данных.
SELECT last_name, hire_date
FROM employees
WHERE department_id=(SELECT department_id
FROM employees
WHERE last_name='Zlotkey') AND last_name != 'Zlotkey';
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
D CLK OUT |
|
|
Общие требования технического задания на разработку ПО.
введение;
основания для разработки;
назначение разработки;
требования к программе или программному изделию;
требования к программной документации;
технико-экономические показатели;
стадии и этапы разработки;
порядок контроля и приемки;
в техническое задание допускается включать приложения.
В зависимости от особенностей программы или программного изделия допускается уточнять содержание разделов, вводить новые разделы или объединять отдельные из них.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №44
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию triangle (), которая вычисляет площадь треугольника по трем его сторона. Вам понадобится библиотечная функция sqrt(), которая возвращает квадратный корень из его аргумента. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double l_side1 = 0;
double l_side2 = 0;
double l_side3 = 0;
double l_square = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter first side : ");
l_side1 = Double.parseDouble(reader.readLine());
System.out.println("Enter second side : ");
l_side2 = Double.parseDouble(reader.readLine());
System.out.println("Enter third side : ");
l_side3 = Double.parseDouble(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
l_square = rectangle(l_side1, l_side2, l_side3);
System.out.println("Square : " + l_square);
}
public static double rectangle(double p_side1, double p_side2, double p_side3) {
double l_p = (p_side1 + p_side2 + p_side3) / 2;
return Math.sqrt(l_p * (l_p - p_side1) * (l_p - p_side2) * (l_p - p_side3));
}
}
Напишите программу реализации системной функции ReadProcessMemory
#include <windows.h>
#include <iostream.h>
int main()
{
char c; // служебный символ
char lpszCommandLine[80]; // командная строка
char send[] = "This is a message."; // строка для пересылки
char buffer[80]; // буфер для ответа
LPVOID v = (LPVOID)0x00880000; // указатель на область памяти
HANDLE hWrite, hRead; // события для синхронизации
// записи-чтения в виртуальную память
char WriteEvent[] = "WriteEvent";
char ReadEvent[] = "ReadEvent";
// создаем события
hWrite = CreateEvent(NULL, FALSE, FALSE, WriteEvent);
hRead = CreateEvent(NULL, FALSE, FALSE, ReadEvent);
STARTUPINFO si;
PROCESS_INFORMATION pi;
ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
// формируем командную строку
wsprintf(lpszCommandLine, "C:\\ConsoleProcess.exe %d", (int)v);
// создаем новый консольный процесс
if (!CreateProcess(NULL, lpszCommandLine, NULL, NULL, FALSE,
CREATE_NEW_CONSOLE, NULL, NULL, &si, &pi))
{
cout << "Create process failed." << endl;
return GetLastError();
}
// распределяем виртуальную память в этом процессе
v = VirtualAllocEx(
pi.hProcess,
v,
sizeof(send),
MEM_RESERVE | MEM_COMMIT,
PAGE_READWRITE);
if(!v)
{
cout << "Virtual allocation failed." << endl;
return GetLastError();
}
// записываем в виртуальную память сообщение
WriteProcessMemory(pi.hProcess, v, (void*)send, sizeof(send), NULL);
// оповещаем о записи
SetEvent(hWrite);
// ждем сигнала на чтение
WaitForSingleObject(hRead, INFINITE);
// читаем ответ
ReadProcessMemory(pi.hProcess, v, (void*)buffer, sizeof(buffer), NULL);
// выводим ответ
cout << buffer << endl;
// освобождаем виртуальную память
if (!VirtualFreeEx(pi.hProcess, v, 0, MEM_RELEASE))
{
cout << "Memory release failed." << endl;
return GetLastError();
}
cout << "Input any char to exit: ";
cin >> c;
return 0;
}
Создайте запрос для вывода фамилии, номера отдела и должности каждого служащего, отдел которого находится в location_ID = 1700.
select e.last_name,e.department_id,e.job_id,d.location_id
from employees e,departments d where e.department_id=d.department_id and d.location_id=1700;
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
-
PRE
CLR
J
K
CLK OUT
Диаграмма состояний: определение, назначение, структура, пример.
Диаграммы состояний используются для описания поведения, реализуемого в рамках варианта использования, или поведения экземпляров класса (объектов), компонента, узла или системы в целом [23–26]. Поведение моделируется через автомат (англ. state machine), описывающий возможные последовательности состояний экземпляра сущности и переходы между ними на протяжении его жизненного цикла, начиная от создания и заканчивая уничтожением.
Диаграмма состояний (автомат) представляет собой связный ориентированный граф, вершинами которого являются состояния, а дуги служат для обозначения переходов из состояния в состояние. Под состоянием (англ. state) понимается ситуация в ходе жизни экземпляра сущности, когда эта ситуация удовлетворяет некоторому условию, экземпляр выполняет некоторые операции или ждет наступления некоторого события. Например, для объекта его состояние может быть задано в виде набора конкретных значений атрибутов, при этом изменение этих значений будет отражать изменение состояния моделируемого объекта.
В UML различают два вида операций: действие и деятельность. Действие (англ. action) – это атомарная операция, выполнение которой не может быть прервано, приводящая к смене состояния или возвращающая значение. Примерами действий служат операции создания или уничтожения объекта, расчет факториала и т. д. Деятельность (англ. activity) – это составная (неатомарная) операция, реализуемая экземпляром в конкретном состоянии, выполнение которой может быть прервано. В частности, под деятельностью можно понимать процедуры расчета допускаемых скоростей или шифрования данных.
Событие (англ. event) – это спецификация существенного факта, который занимает некоторое положение во времени и в пространстве. В контексте диаграмм состояний событие – это спецификация факта, который может привести к смене состояния. События могут быть внутренними или внешними. Внешние события передаются между системой и актерами (например, нажатие кнопки или посылка сигнала от датчика передвижений). Внутренние события передаются между объектами внутри системы. В UML можно моделировать четыре вида событий:
· сигналы;
· вызовы;
· истечение промежутка времени;
· изменение состояния.
Сигнал (англ. signal) – спецификация факта посылки асинхронного сообщения между объектами. Исключения, которые поддерживаются в большинстве современных языков программирования, являются наиболее распространенным видом внутренних сигналов.
Вызов (англ. call) – спецификация факта посылки синхронного сообщения между объектами, предписывающего выполнение операции (действия или деятельности) объектом, которому посылается сообщение. Синхронность означает, что после посылки вызова объект-отправитель передает управление объекту-получателю и после выполнения последним операции получает управление обратно. Например, закрасить фигуру красным фоном fill(red) или рассчитать допускаемые скорости calculateVdop().
Событие времени – спецификация факта, обозначающего истечение промежутка времени с момента входа в текущее состояние. В UML данный факт специфицируется с помощью ключевого слова «after» (англ. – после). Например, after(2 seconds).
Событие изменения состояния – спецификация логического (булевского) условия. В контексте диаграмм состояний данное событие приводит к изменению состояния экземпляра сущности. В UML оно специфицируется с помощью ключевого слова «when» (англ. – когда) или сторожевого условия. Например, when(A < B) или [A < B].
Переход (англ. transition) – отношение между двумя состояниями, показывающее возможный путь изменения состояния экземпляра сущности.
Состояние отображается в виде прямоугольника со скругленными углами, внутри которого записывается имя (рис. 13.1). Рекомендуется в качестве имени использовать глаголы в настоящем времени (звенит, печатает, ожидает) или причастия (занято, передано, получено).
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №45
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию circle (), которая вычисляет длину и площадь круга по его радиусу. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double l_radius = 0;
double l_square=0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter circle radius : ");
l_radius = Double.parseDouble(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
l_square = circle(l_radius);
System.out.println("Square : " + l_square);
}
public static double circle(double p_radius) {
return Math.pow(p_radius,2)*3.14;
}
}
Напишите программу реализации системной функции RegGetKeySecurity
#include <windows.h>
#include <stdio.h>
int main()
{
HKEY hKey; // ключ реестра
DWORD dwLengthOfSd = 0; // длина SD
SECURITY_DESCRIPTOR *lpSd = NULL; // SD ключа реестра
PSID lpOwner; // указатель на SID владельца
BOOL bOwnerDefaulted = FALSE; // признак владельца по умолчанию
DWORD dwLengthOfUserName = 0; // длина имени учетной записи
DWORD dwLengthOfDomainName = 0; // длина имени домена
LPTSTR lpUserName = NULL; // указатель на имя домена
LPTSTR lpDomainName = NULL; // указатель на имя домена
SID_NAME_USE type_of_SID; // тип учетной записи
DWORD dwRetCode; // код возврата
// открываем ключ каталога
dwRetCode = RegOpenKeyEx(
HKEY_LOCAL_MACHINE, // локальная машина
NULL, // открыть ключ локальной машины
0, // зарезервировано
KEY_QUERY_VALUE, // получаем данные из ключа
&hKey); // адрес дескриптора ключа
if (dwRetCode != ERROR_SUCCESS)
{
dwRetCode = GetLastError();
printf("RegOpenKeyEx failed.\n");
printf("The last error code: %u\n", dwRetCode);
return dwRetCode;
}
// определяем длину идентификатор безопасности сервиса
dwRetCode = RegGetKeySecurity(
hKey, // дескриптор сервиса
OWNER_SECURITY_INFORMATION, // получаем владельца ключа реестра
lpSd, // адрес SD
&dwLengthOfSd); // требуемая длина буфера
if (dwRetCode == ERROR_INSUFFICIENT_BUFFER)
// захватываем память под дескриптор безопасности
lpSd = (SECURITY_DESCRIPTOR*)new char[dwLengthOfSd];
else
{
printf("RegGetKeySecurity failed.\n");
printf("The last error code: %u\n", dwRetCode);
return dwRetCode;
}
// читаем идентификатор безопасности ключа реестра
dwRetCode = RegGetKeySecurity(
hKey, // дескриптор сервиса
OWNER_SECURITY_INFORMATION, // получаем владельца ключа реестра
lpSd, // адрес SD
&dwLengthOfSd); // требуемая длина буфера
if (dwRetCode != ERROR_SUCCESS)
{
printf("RegGetKeySecurity failed.\n");
printf("The last error code: %u\n", dwRetCode);
return dwRetCode;
}
// получаем SID владельца мьютекса
if (!GetSecurityDescriptorOwner(
lpSd, // адрес дескриптора безопасности
&lpOwner, // адрес указателя на SID владельца
&bOwnerDefaulted)) // признак владельца по умолчанию
{
dwRetCode = GetLastError();
printf("Get security descriptor owner failed.\n");
printf("Error code: %d\n", dwRetCode);
return dwRetCode;
}
// проверяем, есть ли владелец
if (lpOwner == NULL)
{
printf("The owner is not present.\n");
return 0;
}
if (bOwnerDefaulted)
printf("The owner is defaulted.\n");
// определяем длину имени домена
if(!LookupAccountSid(
NULL, // ищем на локальном компьютере
lpOwner, // указатель на SID
lpUserName, // имя пользователя
&dwLengthOfUserName, // длина имени пользователя
lpDomainName, // определяем имя домена
&dwLengthOfDomainName, // длина имени домена
&type_of_SID)) // тип учетной записи
{
dwRetCode = GetLastError();
if (dwRetCode == ERROR_INSUFFICIENT_BUFFER)
{
// распределяем память под имя пользователя и имя домена
lpUserName = (LPTSTR) new char[dwLengthOfUserName];
lpDomainName = (LPTSTR) new char[dwLengthOfDomainName];
}
else
{
printf("Lookup account SID for length failed.\n");
printf("Error code: %d\n", dwRetCode);
return dwRetCode;
}
}
// определяем имя учетной записи по SID
if(!LookupAccountSid(
NULL, // ищем на локальном компьютере
lpOwner, // указатель на SID пользователя
lpUserName, // имя пользователя
&dwLengthOfUserName, // длина имени пользователя
lpDomainName, // определяем имя домена
&dwLengthOfDomainName, // длина имени домена
&type_of_SID)) // тип учетной записи
{
dwRetCode = GetLastError();
printf("Lookup account SID failed.\n");
printf("Error code: %d\n", dwRetCode);
return dwRetCode;
}
printf("Key owner name: %s\n", lpUserName);
printf("Key owner domain name: %s\n", lpDomainName);
// освобождаем память
delete[] lpUserName;
delete[] lpDomainName;
delete[] lpSd;
RegCloseKey(hKey);
return 0;
}
Получите номер отдела, фамилию и должность для каждого служащего, работающего в административном департаменте (Executive).
select department_id, last_name, job_id
from employees
where department_id in (SELECT department_id
FROM departments where department_name='Executive')
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
PRE CLR D CLK OUT |
|
|
|
|
|
Методы разработки программы.
В качестве модульной структуры программы принято использовать древовидную структуру, включая деревья со сросшимися ветвями. В узлах такого дерева размещаются программные модули, а направленные дуги (стрелки) показывают статическую подчиненность модулей, т.е. каждая дуга показывает, что в тексте модуля, из которого она исходит, имеется ссылка на модуль, в который она входит. Другими словами, каждый модуль может обращаться к подчиненным ему модулям, т.е. выражается через эти модули. При этом модульная структура программы, в конечном счете, должна включать и совокупность спецификаций модулей, образующих эту программу. Спецификация программного модуля содержит:
• синтаксическую спецификацию его входов, позволяющую построить на используемом языке программирования синтаксически правильное обращение к нему (к любому его входу),
• функциональную спецификацию модуля (описание семантики функций, выполняемых этим модулем по каждому из его входов).
Функциональная спецификация модуля строится так же, как и функциональная спецификация ПС.
В процессе разработки программы ее модульная структура может по-разному формироваться и использоваться для определения порядка программирования и отладки модулей, указанных в этой структуре.
Поэтому можно говорить о разных методах разработки структуры программы. Обычно в литературе обсуждаются два метода: метод восходящей разработки и метод нисходящей разработки.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №46
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию byThrees(), которая возвращает последовательность чисел, каждое из которых на 3 больше предыдущего. Начните последовательность с 0. Тогда первые пять чисел, возвращенных функцией byThrees( ), будут 0, 3, 6, 9 и 12. Продемонстрируйте использование этой функции в программе.
Напишите программу реализации системной функции RegisterServiceCtrlHandler
#include <windows.h>
#include <fstream.h>
char service_name[] = "DemoService"; // имя сервиса
SERVICE_STATUS service_status;
SERVICE_STATUS_HANDLE hServiceStatus;
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
VOID WINAPI ServiceCtrlHandler(DWORD dwControl);
ofstream out; // выходной файл для протокола работы сервиса
int nCount; // счетчик
// главная функция приложения
int main()
{
// инициализируем структуру сервисов
SERVICE_TABLE_ENTRY service_table[] =
{
{service_name, ServiceMain}, // имя сервиса и функция сервиса
{ NULL, NULL } // больше сервисов нет
};
// запускаем диспетчер сервиса
if (!StartServiceCtrlDispatcher(service_table))
{
out.open("C:\\ServiceFile.log");
out << "Start service control dispatcher failed.";
out.close();
return 0;
}
return 0;
}
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
// регистрируем обработчик управляющих команд для сервиса
hServiceStatus = RegisterServiceCtrlHandler(
service_name, // имя сервиса
ServiceCtrlHandler // обработчик управляющих команд
);
if (!hServiceStatus)
{
out.open("C:\\ServiceFile.log");
out << "Register service control handler failed.";
out.close();
return;
}
// инициализируем структуру состояния сервиса
service_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
service_status.dwCurrentState = SERVICE_START_PENDING;
service_status.dwControlsAccepted = SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
service_status.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
service_status.dwServiceSpecificExitCode = 0;
service_status.dwCheckPoint = 0;
service_status.dwWaitHint = 5000;
// устанавливаем состояние сервиса
if (!SetServiceStatus(hServiceStatus, &service_status))
{
out.open("C:\\ServiceFile.log");
out << "Set service status 'SERVICE_START_PENDING' failed.";
out.close();
return;
}
// определяем сервис как работающий
service_status.dwCurrentState = SERVICE_RUNNING;
// нет ошибок
service_status.dwWin32ExitCode = NO_ERROR;
// устанавливаем новое состояние сервиса
if (!SetServiceStatus(hServiceStatus, &service_status))
{
out.open("C:\\ServiceFile.log");
out << "Set service status 'START_PENDING' failed.";
out.close();
return;
}
// открываем файл протокола работы сервиса
out.open("C:\\ServiceFile.log");
out << "The service is started." << endl << flush;
out << "My name is: " << lpszArgv[0] << endl << flush;
for (int i = 1; i < (int)dwArgc; ++i)
out << "My " << i << " parameter = " << lpszArgv[i] << endl << flush;
// рабочий цикл сервиса
while (service_status.dwCurrentState == SERVICE_RUNNING)
{
++nCount;
Sleep(3000);
}
}
Создайте функцию byThrees(), которая возвращает последовательность чисел, каждое из которых на 3 больше предыдущего. Начните последовательность с 0. Тогда первые пять чисел, возвращенных функцией byThrees( ), будут 0, 3, 6, 9 и 12. Продемонстрируйте использование этой функции в программе.
Напишите программу реализации системной функции RegisterServiceCtrlHandler
#include <windows.h>
#include <fstream.h>
char service_name[] = "DemoService"; // имя сервиса
SERVICE_STATUS service_status;
SERVICE_STATUS_HANDLE hServiceStatus;
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv);
VOID WINAPI ServiceCtrlHandler(DWORD dwControl);
ofstream out; // выходной файл для протокола работы сервиса
int nCount; // счетчик
// главная функция приложения
int main()
{
// инициализируем структуру сервисов
SERVICE_TABLE_ENTRY service_table[] =
{
{service_name, ServiceMain}, // имя сервиса и функция сервиса
{ NULL, NULL } // больше сервисов нет
};
// запускаем диспетчер сервиса
if (!StartServiceCtrlDispatcher(service_table))
{
out.open("C:\\ServiceFile.log");
out << "Start service control dispatcher failed.";
out.close();
return 0;
}
return 0;
}
VOID WINAPI ServiceMain(DWORD dwArgc, LPTSTR *lpszArgv)
{
// регистрируем обработчик управляющих команд для сервиса
hServiceStatus = RegisterServiceCtrlHandler(
service_name, // имя сервиса
ServiceCtrlHandler // обработчик управляющих команд
);
if (!hServiceStatus)
{
out.open("C:\\ServiceFile.log");
out << "Register service control handler failed.";
out.close();
return;
}
// инициализируем структуру состояния сервиса
service_status.dwServiceType = SERVICE_WIN32_OWN_PROCESS;
service_status.dwCurrentState = SERVICE_START_PENDING;
service_status.dwControlsAccepted = SERVICE_ACCEPT_STOP |
SERVICE_ACCEPT_SHUTDOWN;
service_status.dwWin32ExitCode = ERROR_SERVICE_SPECIFIC_ERROR;
service_status.dwServiceSpecificExitCode = 0;
service_status.dwCheckPoint = 0;
service_status.dwWaitHint = 5000;
// устанавливаем состояние сервиса
if (!SetServiceStatus(hServiceStatus, &service_status))
{
out.open("C:\\ServiceFile.log");
out << "Set service status 'SERVICE_START_PENDING' failed.";
out.close();
return;
}
// определяем сервис как работающий
service_status.dwCurrentState = SERVICE_RUNNING;
// нет ошибок
service_status.dwWin32ExitCode = NO_ERROR;
// устанавливаем новое состояние сервиса
if (!SetServiceStatus(hServiceStatus, &service_status))
{
out.open("C:\\ServiceFile.log");
out << "Set service status 'START_PENDING' failed.";
out.close();
return;
}
// открываем файл протокола работы сервиса
out.open("C:\\ServiceFile.log");
out << "The service is started." << endl << flush;
out << "My name is: " << lpszArgv[0] << endl << flush;
for (int i = 1; i < (int)dwArgc; ++i)
out << "My " << i << " parameter = " << lpszArgv[i] << endl << flush;
// рабочий цикл сервиса
while (service_status.dwCurrentState == SERVICE_RUNNING)
{
++nCount;
Sleep(3000);
}
}
Создайте запрос для вывода фамилии, номера отдела и оклада всех служащих, чей номер отдела и оклад совпадают с номером отдела и окладом любого служащего, зарабатывающего комиссионные.
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
PRE CLR J K CLK’ OUT |
|
|
Диаграмма коопераций: определение, идеология, структура, пример.
Кооперация (collaboration) — спецификация множества объектов отдельных классов, совместно взаимодействующих с целью реализации отдельных вариантов использования в общем контексте моделируемой системы.
Понятие кооперации – одно из фундаментальных в языке UML. Цель самой кооперации состоит в том, чтобы специфицировать особенности реализации отдельных вариантов использования или наиболее значимых операций в системе. Кооперация определяет структуру поведения системы в терминах взаимодействия участников этой кооперации.
На диаграмме кооперации размещаются объекты, представляющие собой экземпляры классов, связи между ними, которые в своюочередь являются экземплярами ассоциаций и сообщения. Связи дополняются стрелками сообщений, при этом показываются только те объекты, которые участвуют в реализации моделируемой кооперации. Далее, как и на диаграмме классов, показываются структурные отношения между объектами в виде различных соединительных линий. Связи могут дополняться именами ролей, которые играют объекты в данной взаимосвязи. И, наконец, изображаются динамические взаимосвязи — потоки сообщений в форме стрелок с указанием направления рядом с соединительными линиями между объектами, при этом задаются имена сообщений и их порядковые номера в общей последовательности сообщений.
Одна и та же совокупность объектов может участвовать в реализации различных коопераций. В зависимости от рассматриваемойкооперации, могут изменяться как связи между отдельными объектами, так и поток сообщений между ними. Именно это отличает диаграмму кооперации от диаграммы классов, на которой должны быть указаны все без исключения классы, их атрибуты иоперации, а также все ассоциации и другие структурные отношения между элементами модели.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №47
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию Factor() для вычисления факториала числа 10 методом итераций (цикл) и методом рекурсии. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
Integer l_number = 0;
Integer l_fact = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter number : ");
l_number = Integer.parseInt(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
l_fact = fact(l_number, "recursiei");
System.out.println("Recursiei: " + l_fact);
l_fact = fact(l_number, "iteraciei");
System.out.println("Iteraciei" + l_fact);
}
public static Integer fact(Integer p_number, String p_type) {
Integer l_result = 0;
if (p_type.equals("recursiei : ")) {
l_result = recursive_fact(p_number);
} else if (p_type.equals("iteraciei : ")) {
l_result = iterative_fact(p_number);
}
return l_result;
}
public static Integer iterative_fact(Integer p_number) {
Integer l_result=1;
if (p_number == 1 || p_number == 0) {
return 1;
}
while (p_number > 1) {
l_result *= p_number;
p_number--;
}
return l_result;
}
public static Integer recursive_fact(Integer p_number) {
Integer l_result;
if (p_number == 1 || p_number == 0) {
return 1;
}
l_result = recursive_fact(p_number - 1) * p_number;
return l_result;
}
}
Напишите программу реализации системной функции RegSetKeySecurity
#include <windows.h>
#include <stdio.h>
int main()
{
HKEY hKey; // ключ реестра
DWORD dwLengthOfSd = 0; // длина SD
SECURITY_DESCRIPTOR *lpSd = NULL; // SD ключа реестра
PSID lpOwner; // указатель на SID владельца
BOOL bOwnerDefaulted = FALSE; // признак владельца по умолчанию
DWORD dwLengthOfUserName = 0; // длина имени учетной записи
DWORD dwLengthOfDomainName = 0; // длина имени домена
LPTSTR lpUserName = NULL; // указатель на имя домена
LPTSTR lpDomainName = NULL; // указатель на имя домена
SID_NAME_USE type_of_SID; // тип учетной записи
DWORD dwRetCode; // код возврата
// открываем ключ каталога
dwRetCode = RegOpenKeyEx(
HKEY_LOCAL_MACHINE, // локальная машина
NULL, // открыть ключ локальной машины
0, // зарезервировано
KEY_QUERY_VALUE, // получаем данные из ключа
&hKey); // адрес дескриптора ключа
if (dwRetCode != ERROR_SUCCESS)
{
dwRetCode = GetLastError();
printf("RegOpenKeyEx failed.\n");
printf("The last error code: %u\n", dwRetCode);
return dwRetCode;
}
// определяем длину идентификатор безопасности сервиса
dwRetCode = RegSetKeySecurity(
hKey, // дескриптор сервиса
OWNER_SECURITY_INFORMATION, // получаем владельца ключа реестра
lpSd, // адрес SD
&dwLengthOfSd); // требуемая длина буфера
if (dwRetCode == ERROR_INSUFFICIENT_BUFFER)
// захватываем память под дескриптор безопасности
lpSd = (SECURITY_DESCRIPTOR*)new char[dwLengthOfSd];
else
{
printf("RegSetKeySecurity failed.\n");
printf("The last error code: %u\n", dwRetCode);
return dwRetCode;
}
// читаем идентификатор безопасности ключа реестра
dwRetCode = RegSetKeySecurity(
hKey, // дескриптор сервиса
OWNER_SECURITY_INFORMATION, // получаем владельца ключа реестра
lpSd, // адрес SD
&dwLengthOfSd); // требуемая длина буфера
if (dwRetCode != ERROR_SUCCESS)
{
printf("RegSetKeySecurity failed.\n");
printf("The last error code: %u\n", dwRetCode);
return dwRetCode;
}
// получаем SID владельца мьютекса
if (!GetSecurityDescriptorOwner(
lpSd, // адрес дескриптора безопасности
&lpOwner, // адрес указателя на SID владельца
&bOwnerDefaulted)) // признак владельца по умолчанию
{
dwRetCode = GetLastError();
printf("Get security descriptor owner failed.\n");
printf("Error code: %d\n", dwRetCode);
return dwRetCode;
}
// проверяем, есть ли владелец
if (lpOwner == NULL)
{
printf("The owner is not present.\n");
return 0;
}
if (bOwnerDefaulted)
printf("The owner is defaulted.\n");
// определяем длину имени домена
if(!LookupAccountSid(
NULL, // ищем на локальном компьютере
lpOwner, // указатель на SID
lpUserName, // имя пользователя
&dwLengthOfUserName, // длина имени пользователя
lpDomainName, // определяем имя домена
&dwLengthOfDomainName, // длина имени домена
&type_of_SID)) // тип учетной записи
{
dwRetCode = GetLastError();
if (dwRetCode == ERROR_INSUFFICIENT_BUFFER)
{
// распределяем память под имя пользователя и имя домена
lpUserName = (LPTSTR) new char[dwLengthOfUserName];
lpDomainName = (LPTSTR) new char[dwLengthOfDomainName];
}
else
{
printf("Lookup account SID for length failed.\n");
printf("Error code: %d\n", dwRetCode);
return dwRetCode;
}
}
// определяем имя учетной записи по SID
if(!LookupAccountSid(
NULL, // ищем на локальном компьютере
lpOwner, // указатель на SID пользователя
lpUserName, // имя пользователя
&dwLengthOfUserName, // длина имени пользователя
lpDomainName, // определяем имя домена
&dwLengthOfDomainName, // длина имени домена
&type_of_SID)) // тип учетной записи
{
dwRetCode = GetLastError();
printf("Lookup account SID failed.\n");
printf("Error code: %d\n", dwRetCode);
return dwRetCode;
}
printf("Key owner name: %s\n", lpUserName);
printf("Key owner domain name: %s\n", lpDomainName);
// освобождаем память
delete[] lpUserName;
delete[] lpDomainName;
delete[] lpSd;
RegCloseKey(hKey);
return 0;
}
Выведите фамилию, номер отдела и оклад всех служащих, чей оклад и комиссионные совпадают с окладом и комиссионными любого служащего, работающего в LOCATION_ID = 1700.
select e.last_name,e.department_id,e.job_id,d.location_id
from employees e,departments d where e.department_id=d.department_id and d.location_id=1700;
Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.
D CLK OUT |
|
|
Отличие идеологии разработки от цели разработки ПО.
Разработкой требований можно заниматься только тогда, когда исполнитель примет решение, что проект ему интересен, а заказчик будет готов доверить исполнителю реализацию заказываемой системы. Исходная информация бывает весьма скудной. Чаще всего, это просто некоторая идея, которая пришла в голову заказчику, вашему руководителю или кому-то из членов вашей команды (может быть, даже вам). Превратится ли эта идея в реальный продукт, решается во многом именно на подготовительном этапе. Диаграмма деятельности на подготовительном этапе разработки ПО представлена на рисунке 1. Выглядит несколько жутковато, особенно в контексте того, что финансирование этого этапа далеко не всегда идёт за счёт заказчика. Но иногда почти все эти задачи решаются одним опытным взглядом системного архитектора, и через час-полтора он уже готов дать свои обоснованные оценки. А иногда подготовительный этап может растянуться на несколько недель, особенно, когда заказчик никак не может чётко сформулировать свою идею, а отказаться от проекта сложно по политическим причинам. Формулирование цели и задач проекта является одной из важнейших стадий проекта разработки программного обеспечения. Важность её заключается в том, что на этой стадии заказчик программного продукта знакомит исполнителя со своим замыслом, задаёт направление для развития будущего проекта и определяет предельно допустимые рамки, за которые проект не должен выйти. Если заказчик не расскажет исполнителю о своей идее в доступной для исполнителя форме, то исполнитель не сможет выполнить работу. Если заказчик неверно или неточно определит цель будущего проекта, то исполнитель не будет иметь ориентира для своей деятельности и вряд ли сможет осуществить замысел заказчика. Даже если ошибка будет обнаружена на более поздних стадиях, изменение направления развития проекта будет сопряжено со значительными затратами. Наконец, предельные ограничения проекта дают возможность заказчику и исполнителю не допустить неприемлемых потерь в случае, если проект не будет реализован.
Цель проекта задаёт направление развития проекта. Она должна коротко и ясно указать эффект, который окажет создаваемая или модернизируемая система на бизнес-процессы заказчика. Если цель будет указана неточно, проект станет развиваться в неправильном направлении. Развернуть проект в другом направлении очень сложно, и чем больше будет сделано работ в рамках проекта, тем сложнее будет корректировать направление его развития. Очень скоро проект достигает состояния, когда ошибку в постановке цели исправить будет невозможно, и тогда придётся всё начинать заново, либо совсем отказываться от проекта.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №48
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию Root() для вычисления действительных корней квадратного уравнения вида:
.
Продемонстрируйте использование этой
функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double a = 0;
double b = 0;
double c = 0;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter a : ");
a = Integer.parseInt(reader.readLine());
System.out.println("Enter b : ");
b = Integer.parseInt(reader.readLine());
System.out.println("Enter c : ");
c = Integer.parseInt(reader.readLine());
String roots = equation_solve(a,b,c);
System.out.println(roots);
} catch (IOException e) {
e.printStackTrace();
}
}
public static String equation_solve(double a, double b, double c) {
double descr;
double x1;
double x2;
descr = Math.pow(b, 2) - 4 * a * c;
if (descr < 0) {
return "No such roots";
} else {
x1 = ((-1)*b + Math.sqrt(descr)) / 2 * a;
x2 = ((-1)*b - Math.sqrt(descr)) / 2 * a;
}
return "x1: " + x1 + "; x2: " + x2;
}
}
Напишите программу реализации системной функции RemoveDirectory
#include <windows.h>
#include <iostream.h>
#include <stdio.h>
int main()
{
HANDLE hFindFile;
WIN32_FIND_DATA fd;
char szFullFileName[MAX_PATH];
// находим первый файл
hFindFile = FindFirstFile("C:\\demo_dir\\*", &fd);
if (hFindFile == INVALID_HANDLE_VALUE)
{
cerr << "Find first file failed." << endl
<< "The last error code: " << GetLastError() << endl;
cout << "Press any key to finish.";
cin.get();
return 0;
}
// выводим на консоль имя первого файла
cout << "The first file name: " << fd.cFileName << endl;
// удаляем из каталога файлы
while (FindNextFile(hFindFile, &fd))
{
// если это не подкаталог, то удаляем его
if (!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
{
// формируем имя файла
sprintf(szFullFileName, "C:\\demo_dir\\%s", fd.cFileName);
// удаляем файл
if (!DeleteFile(szFullFileName))
{
cerr << "Delete file failed." << endl
<< "The last error code: " << GetLastError() << endl;
cout << "Press any key to finish.";
cin.get();
return 0;
}
else
cout << "The next file: " << fd.cFileName << " is deleted." << endl;
}
else
cout << "The next directory: " << fd.cFileName << " is not deleted." << endl;
}
// закрываем дескриптор поиска
if (!FindClose(hFindFile))
{
cout << "Find close failed." << endl;
return 0;
}
// удалаем каталог
if (!RemoveDirectory("C:\\demo_dir"))
{
cerr << "Remove directory failed." << endl
<< "The last error code: " << GetLastError() << endl;
cout << "Press any key to finish.";
cin.get();
return 0;
}
cout << "The directory is removed." << endl;
// закрываем дескриптор поиска
FindClose(hFindFile);
return 0;
}
Создайте запрос для вывода фамилии, даты найма и оклада всех служащих, которые получают такой же оклад и такие же комиссионные, как Kochhar.
SELECT last_name, hire_date, salary
FROM employees
WHERE (salary, NVL(commission_pct,0)) IN
(SELECT salary, NVL(commission_pct,0)
FROM employees
WHERE last_name=’Kochhar’)
AND last_name!= ’Kochhar’
Описать порядок работы представленной микросхемы, назначение и характер ее входных и выходных сигналов.
Диаграмма развертывания: назначение, структура, пример.
Диагра́мма развёртывания, Deployment diagram в UML моделирует физическое развертывание артефактов наузлах.[1] Например, чтобы описать веб-сайт диаграмма развертывания должна показывать, какие аппаратные компоненты («узлы») существуют (например, веб-сервер, сервер базы данных, сервер приложения), какие программные компоненты («артефакты») работают на каждом узле (например, веб-приложение, база данных), и как различные части этого комплекса соединяются друг с другом (например, JDBC, REST, RMI).
Узлы представляются как прямоугольные параллелепипеды с артефактами, расположенными в них, изображенными в виде прямоугольников. Узлы могут иметь подузлы, которые представляются как вложенные прямоугольные параллелепипеды. Один узел диаграммы развертывания может концептуально представлять множество физических узлов, таких как кластер серверов баз данных.
Существует два типа узлов:
Узел устройства
Узел среды выполнения
Узлы устройств — это физические вычислительные ресурсы со своей памятью и сервисами для выполнения программного обеспечения, такие как обычные ПК, мобильные телефоны. Узел среды выполнения — это программный вычислительный ресурс, который работает внутри внешнего узла и который предоставляет собой сервис, выполняющий другие исполняемые программные элементы.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №49
по специальности 5B0704 - Вычислительная техника и программное обеспечение
Создайте функцию ModVector() для вычисления модуля вектора в трехмерном декартовом пространстве. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
double x1 = 0;
double y1 = 0;
double x2 = 0;
double y2 = 0;
double x3 = 0;
double y3 = 0;
double l_length;
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("Enter x1 : ");
x1 = Integer.parseInt(reader.readLine());
System.out.println("Enter y1 : ");
y1 = Integer.parseInt(reader.readLine());
System.out.println("Enter x2 : ");
x2 = Integer.parseInt(reader.readLine());
System.out.println("Enter y2 : ");
y2 = Integer.parseInt(reader.readLine());
System.out.println("Enter x3 : ");
x3 = Integer.parseInt(reader.readLine());
System.out.println("Enter y3 : ");
y3 = Integer.parseInt(reader.readLine());
l_length = Mod_vector(x1, y1, x2, y2, x3, y3);
System.out.println(l_length);
} catch (IOException e) {
e.printStackTrace();
}
}
public static double Mod_vector(double x1, double y1,
double x2, double y2,
double x3, double y3) {
return Math.sqrt(Math.pow(y1 - x1, 2) +
Math.pow(y2 - x2, 2) +
Math.pow(y3 - x3, 2));
}
}
Напишите программу реализации системной функции ReplaceFile
#define _WIN32_WINNT 0x0500
#include <windows.h>
#include <iostream>
using namespace std;
int main()
{
// перемещаем файл
if(!ReplaceFile(
"C:\\demo_file.dat", // имя замесщаемого файла
"C:\\new_file.dat", // имя файла заместителя
"C:\\back_file.dat", // имя резервного файла
REPLACEFILE_WRITE_THROUGH, // освободить буферы
NULL, NULL // не используются
))
{
cerr << "Replace file failed." << endl
<< "The last error code: " << GetLastError() << endl;
cout << "Press any key to finish.";
cin.get();
return 0;
}
cout << "The file is replaced." << endl;
return 0;
}
Ставить студентам оценки за различные виды работ(практика, контрольная, семестровая, курсовой проект, экзамен) по различным предметам и найти неуспевающих студентов.
вписывается ID_rab
Select stud_fam, subj_name, ocenka
From ocenka
Join students
On stud_id=stud_id
Join subjects
On subj_id=subj_id
Where ocenka <4
Объяснить принцип работы приведенного устройства.
Современные технологии разработки ПО.
В настоящее время структурное программирование – это целая дисциплина, объединяющая несколько взаимосвязанных способов создания ясных, легких для понимания программ. Эффективность применения современных универсальных языков программирования во многом определяется удобством написания с их помощью структурных программ.
Другое направление совершенствования процесса разработки прикладных программ – развитие программно-инструментальных средств программирования экономических задач. Основу таких средств программирования составляют системы автоматизации программирования, или системы программирования, которые обеспечивают возможность решения широкого круга задач непосредственно в среде операционной системы ЭВМ.
Вместе с тем следует учитывать специфику задач экономического управления:
• доминирование задач с относительно несложными вычислительными алгоритмами и потребностью формирования различного рода накопительных итогов, т.е. задач "прямого счета";
• работу с большими массивами (обычно упорядоченной определенным образом) исходной информации;
• требование предоставления большинства результатной информации в виде документов табличной формы.
Решение указанных задач может быть осуществлено с использованием программно-инструментальных средств СУБД и электронных таблиц.
Основное достоинство этих инструментальных средств заключается в том, что они предъявляют меньшие требования к их пользователям в области программирования как науки, обеспечивая в то же время достаточно быстрое и эффективное решение большинства задач экономического управления. В связи с этим они пользуются большой популярностью среди непрофессиональных программистов. К наиболее развитым программно-инструментальным средствам относятся системы автоматизации проектирования (САПР) ПО, создание которых было начато в конце 70-х годов.
Однако подобные разработки слабо учитывали требования системного подхода, так как ограничивались автоматизацией лишь части этапов разработки ПО, причем, как правило, узкого класса задач. Появление и быстрое распространение ПК открыли новые перспективы в деле автоматизации разработки ПО. Так, за последнее десятилетие в области средств автоматизации программирования сформировалось новое направление под общим названием кейс-технология (Computer Aided Software Engineering-CASE).
Базируясь на классических методах разработки ПО, CASE-технология представляет собой совокупность средств системного анализа, проектирования, разработки и сопровождения сложных программных систем, поддерживаемых комплексом взаимоувязанных инструментальных средств автоматизации всех этапов разработки программ. Благодаря структурным методам на стадиях анализа и проектирования CASE-технология обеспечивает разработчиков широкими возможностями для различного рода моделирования, а централизованное хранение всей необходимой для проектирования информации и контроль за целостностью данных гарантируют согласованность взаимодействия всех специалистов, занятых в разработке ПО.
Высокая "тяжесть" последствий ошибок при разработке ПО, присущих этапу составления спецификаций для автоматизации информационной системы объекта, вызвала поиск путей сокращения их числа на этом этапе до минимума. Естественным решением проблемы была разработка формализованного аппарата для описания и последующего анализа информационной модели системы. Впервые такой подход с системных позиций был реализован сотрудниками Мичиганского университета под руководством проф. Д. Тайкроу в рамках проекта ISDOS (Information System Design and Optimization System – проектирование и оптимизация информационных систем).
В основу реализации проекта ISDOS был положен специально разработанный язык PSL (Problem Statment Language – язык постановки задач), который обеспечивал описание целей, функций и задач систем организационно-экономического управления, и программный анализатор описаний PSA (Problem Statment Analizator – анализатор постановок задач), выполненных средствами PSL.
На языке PSL пользователь специфицирует параметры, определяющие входы и выходы информационной системы и их временные характеристики.
Проект ISDOS был первой западной системой автоматизированного формализованного анализа требований к программному обеспечению. Он состоял из взаимосвязанных модулей, которые обеспечивали:
• ввод, контроль и кодирование спецификаций проектируемой системы;
• анализ правильности постановки задач и их согласованности;
• выявление ошибок и выдачу сообщений пользователям, а также устранение дублирования в исходной информации;
• преобразование постановок задач после проверки и корректировки исходных данных в машинные программы в соответствии с заданными требованиями к системе;
• выделение основных элементов информационной системы.
Язык PSL также позволяет системному аналитику описать в формализованном виде требуемые результаты решения задач, необходимые входные данные, взаимосвязи между отдельными процедурами и данными, предоставить информацию о характеристиках отдельных модулей, процедур и данных и т.д.
Подсистема PSA анализирует поставленную и описанную с помощью PSL проблему и генерирует полезные для разработчика интегральные характеристики, такие, как формальные постановки задач, иерархические структуры данных, рекомендации по выбору ключевых слов, обобщенные блок-схемы алгоритмов обработки данных при решении задач и ряд других характеристик.
Поиск методов совершенствования процессов разработки прикладных программных средств обусловил появление методологии, по которой разработка программы начиналась не после завершения процесса выработки окончательных требований к ней, а как только устанавливались требования на первый, “стартовый” (пилотный) вариант прикладной программы, позволяющий начать содержательную работу по ее реализации на компьютере. Это дало пользователю возможность, получая уже с первых шагов конкретное представление о характере реализации задачи, уточнять ее постановку. Тем самым облегчался процесс экспериментального поиска нужного решения автоматизации задачи.
Благодаря тесному взаимодействию разработчика с заказчиком (пользователем) на самом ответственном этапе создания прикладных программ между ними достигалось быстрое взаимопонимание цели поставленной задачи и возможности ее автоматизации в конкретных условиях. Это повышало скорость разработки программ и послужило основанием для названия такой технологии – RAD(Rapid Application Development), которая получила широкое распространение.
RAD-технология ознаменовала появление принципиально нового, отличного от традиционного, последовательного метода разработки программных средств (при котором очередной этап процесса создания ПС начинается только после завершения предыдущего этапа и не допускает какого-либо возврата к предшествующим этапам). Это дало повод назвать такую итерационную методологию “спиральной” в отличие от последовательной, называемой также “каскадной” или “водопадной”.
По сути, спиральный метод представлял собой дополнение каскадного элементами итеративности (обычно до трех раз) и вместе с ним реализовывал варианты структурного (или алгоритмического) подхода к разработке ПС.
RAD-технология позволила в какой-то степени сместить центр тяжести разработки ПС на начальные этапы жизненного цикла (ЖЦ), а кроме того, несмотря на наличие повторений, дала возможность в целом сократить время и затраты на разработку программных приложений.
Однако при всех достоинствах RAD-технологии, поддерживающей традиционные методы разработки программных средств, сфера ее эффективного применения ограничена, так как она не может обеспечить создание сложных программных продуктов, а ориентирована на разработку несложного заказного программного обеспечения. Когда в центре внимания разработчиков программного обеспечения оказались сложные информационные системы, не поддающиеся программированию “в лоб”, традиционные методы, олицетворяющие структурный принцип разработки систем, оказались малоэффективными.
Стремление избавиться от недостатков структурного подхода привело к развитию новых идей, основанных на объектной декомпозиции систем. Такой подход к разработке программных средств получил название объектно-ориентированного (ООП).
В основе этого подхода лежат понятия объект, класс, инкапсуляция, наследование и полиморфизм.
Каждый объект является представителем некоторого класса однотипных объектов. Класс определяет общие свойства для всех его объектов. К таким свойствам относятся:
• состав и структура данных, описывающих атрибуты класса и соответствующих объектов;
• совокупность методов – процедур, определяющих взаимодействие объектов этого класса с внешней средой и другими объектами.
Объекты и классы обладают характерными свойствами, которые активно используются при объектно-ориентированном подходе и во многом определяют его преимущества:
• инкапсуляция – способность изменять реализацию любого класса объектов без опасения, что это вызовет нежелательные побочные последствия в программной среде;
• наследование – возможность выделить свойства, методы и события одного объекта и приписать их другому объекту, иногда с их модификацией;
• полиморфизм – способность объектов выбирать метод обработки на основе типов данных, принимаемых в сообщении.
Объектно-ориентированная декомпозиция заключается в представлении системы в виде совокупности классов и объектов предметной области. При этом иерархический характер сложной системы отражается в виде иерархии классов, а ее функционирование рассматривается как взаимодействие объектов.
Объектно-ориентированный подход к программированию отличает сочетание четырех важных аспектов:
• модульность, позволяющую локализовать область действия процедур по отношению к внутренним переменным, что обеспечивает возможность изменения локальных процедур и внутренних структур без необходимости изменения других программных модулей;
• абстракция данных, при которой тип данных определяется на основе некоторого внутреннего представления и множества процедур для доступа и обработки данных абстрактного типа;
• динамическая связка программ, позволяющая отказаться от перекомпиллирования всей программы при внесении изменений некоторых типов в отдельные модули;
• использование механизма “наследования”, который позволяет создавать классы объектов и выделять в них подклассы объектов, обладающих теми или иными конкретными свойствами.
АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ
ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ
КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ
АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №50
по специальности 5B0704 - Вычислительная техника и программное обеспечение
В одномерном массиве, состоящем из n целых элементов, упорядочить элементы массива по убыванию. Выполнить задание, оформив его в виде функции. Все необходимые данные для функции должны передаваться им в качестве параметров. Продемонстрируйте использование этой функции в программе.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.lang.management.BufferPoolMXBean;
import java.util.*;
/**
* Created by Asem on 13.05.2015.
*/
public class Gos_ekz {
public static void main(String[] args) {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
List list = new ArrayList();
Integer l_elements_num = 0;
try {
l_elements_num = Integer.valueOf(reader.readLine());
} catch (IOException e) {
e.printStackTrace();
}
for (int i = 1; i <= l_elements_num; i++) {
list.add(new Random().nextInt(100));
}
System.out.println("Initial array : ");
System.out.println(Arrays.toString(list.toArray()));
sort(list);
Collections.sort(list, Collections.reverseOrder());
System.out.println("Final array : ");
System.out.println(Arrays.toString(list.toArray()));
}
public static void sort(List p_array) {
Collections.sort(p_array, Collections.reverseOrder());
}
}
Напишите программу реализации системной функции ResumeThread
#include <windows.h>
#include <iostream.h>
volatile UINT nCount;
volatile DWORD dwCount;
void thread()
{
for (;;)
{
nCount++;
// приостанавливаем поток на 100 миллисекунд
Sleep(100);
}
}
int main()
{
HANDLE hThread;
DWORD IDThread;
char c;
hThread = CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)thread, NULL,
0, &IDThread);
if (hThread == NULL)
return GetLastError();
for (;;)
{
cout << "Input :" << endl;
cout << "\t'n' to exit" << endl;
cout << "\t'y' to display the count" << endl;
cout << "\t's' to suspend thread" << endl;
cout << "\t'r' to resume thread" << endl;
cin >> c;
if (c == 'n')
break;
switch (c)
{
case 'y':
cout << "count = " << nCount << endl;
break;
case 's':
// приостанавливаем поток thread
dwCount = SuspendThread(hThread);
cout << "Thread suspend count = " << dwCount << endl;
break;
case 'r':
// возобновляем поток thread
dwCount = ResumeThread(hThread);
cout << "Thread suspend count = " << dwCount << endl;
break;
}
}
// прерываем выполнение потока thread
TerminateThread(hThread, 0);
// закрываем дескриптор потока thread
CloseHandle(hThread);
return 0;
}
Выведите сведения о тех сотрудниках (номер сотрудника, фамилию и номер отдела), кто проживает в городах, начинающихся на T.
select employee_id, last_name, department_id
FROM employees
WHERE department_id IN (SELECT department_id
FROM departments
WHERE location_id IN
(SELECT location_id
FROM locations
WHERE city LIKE 'T%'));
Охарактеризовать составные элементы приведенного устройства и схему их включения. Объяснить работу устройства с помощью временных диаграмм прохождения входных импульсов.
Сравнение диаграммы объектов и диаграммы компонент.
Диаграмма объектов (object diagram) UML – это снимок объектов системы в какойто момент времени. Поскольку она показывает экземпляры, а не классы, то диаграмму объектов часто азывают диаграммой экземпляров. Диаграмму объектов можно использовать для отображения одного из вариантов конфигурации объектов. (На рис. 6.1 показано множество классов, а на рис. 6.2 представлено множество связанных объектов.)
Последний вариант очень полезен, когда допустимые связи между объектами могут быть сложными. Можно определить, что элементы, показанные на рис. 6.2, являются экземплярами, поскольку их имена подчеркнуты. Каждое имя представляется в виде: имя экземпляра : имя класса. Обе части имени не являются обязательными, поэтому имена John, :Person и aPerson являются допустимыми. Если указано только имя класса, то необходимо поставить двоеточие. Можно также задать значения и атрибуты, как показано на рис. 6.2.
Строго говоря, элементы диаграммы объектов – это спецификации экземпляров, а не сами экземпляры. Причина в том, что разрешается оставлять обязательные атрибуты пустыми или показывать спецификации экземпляров абстрактных классов. Можно рассматривать спецификации экземпляров (instance specifications) как частично определенные экземпляры.
иагра́мма компоне́нтов, Component diagram — статическая структурная диаграмма, показывает разбиение программной системы на структурные компоненты и связи (зависимости) между компонентами. В качестве физических компонентов могут выступать файлы, библиотеки, модули, исполняемые файлы, пакеты и т. п.
