Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
шпоры госы.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
10.34 Mб
Скачать

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №1

по специальности 5B0704 - Вычислительная техника и программное обеспечение

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

#include<conio.h>

#include<stdio.h>

char text[]="In a year instead of the promised Morrowind the company Bethesda released Battlespiare, a primitive 3D-action based on Daggerfall engine.";

int i,kol=0;

int n=sizeof(text)/sizeof(char);

void main()

{

clrscr();

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

    {

     if (text[i] == ' ' || text[i] == ';' || text[i] == '.')

        {

         if (text[i-1] == ';' || text[i-1] == '.') {}

         else kol++;

        }

    }

printf("Kol = %d;",kol);

getch();

}

  1. Напишите программу реализации системной функции CreateConsoleScreenBuffer

#include <windows.h>

#include <stdio.h>

int main(void)

{

HANDLE hStdout, hNewScreenBuffer;

SMALL_RECT srctReadRect;

SMALL_RECT srctWriteRect;

CHAR_INFO chiBuffer[160]; // [2][80];

COORD coordBufSize;

COORD coordBufCoord;

BOOL fSuccess;

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

hNewScreenBuffer = CreateConsoleScreenBuffer(

GENERIC_READ | // read/write access

GENERIC_WRITE,

FILE_SHARE_READ |

FILE_SHARE_WRITE, // shared

NULL, // default security attributes

CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE

NULL); // reserved; must be NULL

if (hStdout == INVALID_HANDLE_VALUE ||

hNewScreenBuffer == INVALID_HANDLE_VALUE)

{ printf("CreateConsoleScreenBuffer failed - (%d)\n", GetLastError());

return 1; }

if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) )

{ printf("SetConsoleActiveScreenBuffer failed - (%d)\n", GetLastError());

return 1; }

srctReadRect.Top = 0; // top left: row 0, col 0

srctReadRect.Left = 0;

srctReadRect.Bottom = 1; // bot. right: row 1, col 79

srctReadRect.Right = 79;

coordBufSize.Y = 2;

coordBufSize.X = 80;

coordBufCoord.X = 0;

coordBufCoord.Y = 0;

fSuccess = ReadConsoleOutput(

if (! fSuccess)

{ printf("ReadConsoleOutput failed - (%d)\n", GetLastError());

return 1; }

srctWriteRect.Top = 10; // top lt: row 10, col 0

srctWriteRect.Left = 0;

srctWriteRect.Bottom = 11; // bot. rt: row 11, col 79

srctWriteRect.Right = 79;

fSuccess = WriteConsoleOutput(

hNewScreenBuffer, // screen buffer to write to

chiBuffer, // buffer to copy from

coordBufSize, // col-row size of chiBuffer

coordBufCoord, // top left src cell in chiBuffer

&srctWriteRect); // dest. screen buffer rectangle

if (! fSuccess)

{ printf("WriteConsoleOutput failed - (%d)\n", GetLastError());

return 1; }

Sleep(5000);

if (! SetConsoleActiveScreenBuffer(hStdout))

{ printf("SetConsoleActiveScreenBuffer failed - (%d)\n", GetLastError());

return 1; }

return 0;}

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

select LAST_NAME, JOB_ID, format(HIRE_DATE,"Medium Date") as `HIRE DATE` from EMPLOYEES where HIRE_DATE between CDate('20/02/1998') and CDate('01/05/1998') order by HIRE_DATE asc;

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

PRE

CLR

D

CLK

OUT

  1. Современное программирование – базовые понятия и инструменты.

Программи́рование — процесс создания компьютерных программ.В настоящее время существуют множество языков программирования: как достаточно универсальных, так и очень специфических. Многие программисты старались и стараются придумать свой язык обладающий теми или иными преимуществами. Можно лишь условно разделить языки по определенным критериям. Например, по типу решаемых задач (язык системного или прикладного назначения), по степени ориентации на решение узкого круга задач (проблемно-ориентированные или универсальные).Широкое распространение получили объектно-ориентированные языки программирования (ООП), на которых легче реализовать большие и сложные проекты. Их отличие от языков высокого уровня заключается в возможности отстранения от алгоритма выполнения программы. С помощью таких языков разработчик как бы оперирует виртуальными объектами.Программирование основывается на использовании языков программирования, на которых записывается программа. В настоящее время активно используются интегрированные среды разработки, включающие в свой состав также редактор для ввода и редактирования текстов программ, отладчики (т. н. дебаггеры) для поиска и устранения ошибок, трансляторы с различных языков программирования, компоновщики для сборки программы из нескольких модулей и другие служебные модули.Большая часть работы программистов связана с написанием исходного кода, тестированием и отладкой программ на одном из языков программирования. Исходные тексты и исполняемые файлы программ являются объектами авторского права и являются интеллектуальной собственностью их авторов и правообладателей.Различные языки программирования поддерживают различные стили программирования (парадигмы программирования). Отчасти искусство программирования состоит в том, чтобы выбрать язык программирования, наиболее полно подходящий для решения поставленной задачи. Разные языки требуют от программиста различного уровня внимания к деталям при реализации алгоритма, результатом чего часто бывает компромисс между простотой и производительностью (или междувременем программиста и временем пользователя).Единственный язык, напрямую выполняемый ЭВМ — это машинный язык (также называемый машинным кодом и языком машинных команд). Изначально все программы писались в машинном коде, но сейчас этого практически уже не делается. Вместо этого программисты пишут исходный код на том или ином языке программирования, затем, используя компилятор, транслируют его в один или несколько этапов в машинный код, готовый к исполнению на целевом процессоре, или в промежуточное представление, которое может быть исполнено специальным интерпретатором — виртуальной машиной. Но это справедливо только для языков высокого уровня. Если требуется полный низкоуровневый контроль над системой на уровне машинных команд и отдельных ячеек памяти, программы пишут на языке ассемблера, мнемонические инструкции которого преобразуются один к одному в соответствующие инструкции машинного языка целевого процессора ЭВМ (по этой причине трансляторы с языков ассемблера получаются алгоритмически простейшими трансляторами).В некоторых языках вместо машинного кода генерируется интерпретируемый двоичный код «виртуальной машины», также называемый байт-кодом (byte-code). Такой подход применяется в Forth, некоторых реализациях LispJavaPerlPython, языках для .NET Framework.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №2

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив В состоит из М элементов и отсортирован по убыванию. Разработать программу для слияния этих массивов в отсортированный по возрастанию массив С.

# include <stdio.h>

# include <stdlib.h>

const N=10,M=10;

  int a[N],b[M],c[N+M];

void main()

{

  randomize();

  a[0]=-20;

  b[0]= 20;

  for (int i=1;i<N;i++)

    a[i]=a[i-1]+random(10);

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

    b[i]=b[i-1]-random(10);

  int x=0,y=M-1;

  i=0;

  while (!c[N+M-1])

    {

      if (((a[x]>=b[y])|(x>N-1))&(y<=M-1))

        {

          c[i]=b[y];

          i++;

          y--;

        }

      else if (((a[x]<=b[y])|(y<0))&(x>=0))

        {

          c[i]=a[x];

          i++;

          x++;

        }

    }

}

  1. Напишите программу реализации системной функции CreateDirectory

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"

void main()

{ if (CreateDirectory("c:\\new",NULL))

cout << "директория изменена " << endl;

else

cout << " Ошибка в создание каталога " << endl;}

  1. Запросите фамилии, должности и оклады всех служащих, работающих в должности представителей продаж (sales representative) или биржевым маклером (stock clerk), оклады которых не равны $2,500, $3,500 или $7000.

select LAST_NAME,JOB_ID,SALARY from EMPLOYEES where (JOB_ID='SA_REP' or JOB_ID='ST_CLERK') and SALARY not in (2500,3500,7000);

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

    G

    A

    B

    OUT

  2. Экономические требования разработки ПО.

Большинство моделей для определения стоимости ПО может быть сведено к функции пяти основных параметров: размера, процесса, персонала, среды и требуемого качества.1.Размер конечного продукта (для компонентов, написанных вручную), который обычно измеряется числом строк исходного кода или количеством функциональных точек, необходимых для реализации данной функциональности.2.Особенности процесса, используемого для получения конечного продукта, в частности его способность избегать непроизводительных видов деятельности (переделок, бюрократических проволочек, затрат на взаимодействие).3.Возможности персонала, участвующего в разработке ПО, в особенности его профессиональный опыт и знание предметной области проекта.4.Среда, которая состоит из инструментов и методов, используемых для эффективной разработки ПО и автоматизации процесса.Требуемое качество продукта, что включает в себя его функциональные возможности, производительность, надежность и адаптируемость.Соотношение между рассчитываемой стоимостью и этими параметрами может быть записано следующим образом:.Трудоемкость = (Персонал)(Среда)(Качество)(Размер).

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №3

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Даны два массива. Массив А состоит из N элементов и отсортирован по возрастанию. Массив В состоит из М элементов и отсортирован по убыванию. Разработать программу для слияния этих массивов в отсортированный по убыванию массив С, не содержащий одинаковых элементов.

# include <stdio.h>

# include <stdlib.h>

const N=10,M=10;

  int a[N],b[M],c[N+M];

void main()

{

  randomize();

  a[0]=-5;

  b[0]=-5;

  for (int i=1;i<N;i++)

    {

      a[i]=a[i-1]-random(3);

      b[i]=b[i-1]-random(3);

    }

 

  int x=0,y=0;

  i=0;

  while ((x<N)|(y<M))

    {

      if (((a[x]>=b[y])|(y>M-1))&(x<=N-1))

        {

          if (c[i-1]!=a[x]) { c[i]=a[x]; i++;}

          x++;

        }

      else if (((a[x]<=b[y])|(x>N-1))&(y<=M-1))

        {

          if (c[i-1]!=b[y]) { c[i]=b[y]; i++;}

          y++;

        }

    }

}

  1. Напишите программу реализации системной функции CreateFile

#include <windows.h>

#include <stdio.h>

HANDLE hFile;

hFile = CreateFile(TEXT("myfile.txt"), // открываемый файл формат тхт

GENERIC_READ, // открываем для чтения

FILE_SHARE_READ, // для совместного чтения

NULL, // защита по умолчанию

OPEN_EXISTING, // только существующий файл

FILE_ATTRIBUTE_NORMAL, // обычный файл

NULL); // атрибутов шаблона нет

if (hFile == INVALID_HANDLE_VALUE)

{ printf("Could not open file (error %d)\n", GetLastError());

return 0;}

  1. Выведите фамилии служащих (первая буква каждой фамилии должна быть заглавной, а остальные - строчными) и длину каждой фамилии для тех служащих, фамилия которых начинается с символа J, A или M. Присвойте соответствующие заголовки столбцам. Отсортируйте результаты по фамилии.

select LAST_NAME, Iif(LAST_NAME like '[JAM]*',len(LAST_NAME),'') from EMPLOYEES where strcomp(strconv(LAST_NAME,3),LAST_NAME,0)=0;

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

D

CLK

OUT

  1. История развития программного инструмента.

Только в начале XIX в. (1830) английский ученый, профессор математики Кэмбриджского университета Чарльз Бэббидж, анализи­руя результаты обработки переписи населения во Франции, теорети­чески исследовал процесс выполнения вычислений и обосновал ос­новы архитектуры вычислительной машины. Работая над проектом аналитической машины — «Машины для исчисления разностей», Ч. Бэббидж предсказал многие идеи и принципы организации и работы современных ЭВМ, в частности принцип программного управления и запоминаемой программы. Общая увлеченность наукой дала ученому и Аде Лавлейс (1815—1852) долгие годы плодотворного со­трудничества. В 1843 г. она перевела статью Менабреа по лекциям Ч. Бэббиджа, где в виде подробных комментариев (по объему они превосходили основной текст) сформулировала главные принципы программирования аналитической машины. Она разработала первую программу (1843) для машины Бэббиджа, убедила его в необходимо­сти использования в изобретении двоичной системы счисления вме­сто десятичной, разработала принципы программирования, предусматривающие повторение одной и той же последовательности команд при определенных условиях. Именно она предложила термины «рабочая ячейка» и «цикл». А. Лавлейс составила первые программы для решения системы двух уравнений и вычисления чисел Бернулли по довольно сложному алгоритму и предположила, что со временем аналитическая машина будет сочинять музыкальные произведения, рисовать картины и использоваться в практической и научной дея­тельности. Время подтвердило ее правоту и точность прогнозов. Своими работами А. Лавлейс заложила теоретические основы про­граммирования и по праву считается первым в мире программистом и основоположником научного программирования.В 1936 г. английский математик А. Тьюринг ввел понятие ма­шины Тьюринга, как формального уточнения интуитивного понятия алгоритма. Ученый показал, что любой алгоритм в некотором смысле может быть реализован на машине Тьюринга, а следователь­но, доказывал возможность построения универсальной ЭВМ. И та, и другая машины аналогично могут быть снабжены исходными данными решаемой задачи и программой ее решения. Машину Тьюринга можно считать как бы идеализированной моделью универ­сальной ЭВМ.В 40-х гг. XX в. механическая элементная база вычислительных машин стала заменяться электрическими и электронными устройствами. Первые электромеханические машины были созданы в Германии К. Цузе (Ц-3, 1941 г.) и в США под руководством профессора Гарвардского университета Г. Айкена (МАРК-1, 1944 г.). Первая электронная машина создана в США группой инженеров под руководством доктора Пенсильванского университета Дж. Мочли и аспиранта Дж. Экксрта (ЭНИАК — электронный числовой интегратор и калькулятор, 1946 г.). В 1949 г. в Англии была построена EDSAC — первая машина, обладающая автоматическим программным управ­лением, внутренним запоминающим устройством и другими необхо­димыми компонентами современных ЭВМ.Логические схемы вычислительных машин были разработаны в конце 1940-х гг. Дж. фон Нейманом, Г. Гольдстайном и А. В. Берксом. Особый вклад в эту работу внес американский математик Джон фон Нейман, принимавший участие в создании ЭНИАК. Он предложил идею хранения команд управления и данных в машин­ной памяти и сформулировал основные принципы построения современных ЭВМ. ЭВМ с хранимой программой оказались более быстродействующими и гибкими, чем ранее созданные.В 1951 г. в США было налажено первое серийное производство электронных машин УНИВАК (универсальная автоматическая вы­числительная машина). В это же время фирма IBM начала серий­ный выпуск машины IBM/701.В СССР первыми авторами ЭВМ, изобретенной в декабре 1948 г., являются И. С. Брук и Б. И. Рамеев. А первая советская ЭВМ с сохраняющейся программой создана в 1951 г. под руково­дством С. А Лебедева (МЭСМ — малая электронная счетная маши­на). В 1953 г. в Советском Союзе начался серийный выпуск машин, первыми их которых были БЭСМ-1, «Стрела».

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №4

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Даны два массива. Массив А состоит из N элементов , массив В состоит из М элементов. Оба массива отсортированы по убыванию. Разработать программу для слияния этих массивов в отсортированный по убыванию массив С, не содержащий одинаковых элементов.

import com.sun.org.apache.xpath.internal.SourceTree;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStreamReader;

import java.lang.reflect.Array;

import java.util.*;

import static java.util.Collections.*;

public class Arr {

public static List<Integer> sort(List<Integer> p_array, String p_sort_type) {

List<Integer> l_return = p_array;

if (p_sort_type.toUpperCase().equals("ASC")) {

Collections.sort(l_return);

} else if (p_sort_type.toUpperCase().equals("DESC")) {

Collections.sort(l_return, reverseOrder());

}

return l_return;

}

public static List<Integer> sort(List<Integer> p_array) {

return sort(p_array, "ASC");

}

public static List<Integer> merge(List<Integer> p_array, List<Integer> p_array_to_merge, String p_condition) {

List<Integer> l_return = p_array;

Integer l_array_element;

if (p_condition.toLowerCase().equals("without equals")) {

for (int i = 0; i < p_array_to_merge.size(); i++) {

l_array_element = p_array_to_merge.get(i);

while (!l_return.contains(l_array_element)) {

l_return.add(l_array_element);

}

}

}

return l_return;

}

public static List<Integer> merge(List<Integer> p_array, List<Integer> p_array_to_merge) {

List<Integer> l_return = p_array;

Integer l_array_element;

for (int i = 0; i < p_array_to_merge.size(); i++) {

l_array_element = p_array_to_merge.get(i);

l_return.add(l_array_element);

}

return l_return;

}

public static void main(String args[]) {

BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

Integer l_first_array_length = 0;

Integer l_first_array_rand_range = 0;

Integer l_second_array_length = 0;

Integer l_second_array_rand_range = 0;

try {

System.out.println("We will populate array with random numbers");

System.out.print("Enter first array size : ");

l_first_array_length = Integer.valueOf(reader.readLine());

System.out.print("Enter biggers number to fill first array: ");

l_first_array_rand_range = Integer.valueOf(reader.readLine());

System.out.print("Enter second array size : ");

l_second_array_length = Integer.valueOf(reader.readLine());

System.out.print("Enter biggers number to fill first array: ");

l_second_array_rand_range = Integer.valueOf(reader.readLine());

} catch (IOException e) {

e.printStackTrace();

}

System.out.println("Ok, got it.");

List<Integer> first = new ArrayList<Integer>();

List<Integer> second = new ArrayList<Integer>();

List<Integer> third = new ArrayList<Integer>();

Integer l_rand_number;

for (int i = 0; i < l_first_array_length; i++) {

first.add(new Random().nextInt(l_first_array_rand_range));

}

for (int i = 0; i < l_second_array_length; i++) {

second.add(new Random().nextInt(l_second_array_rand_range));

}

System.out.println("Sorting first array...");

first = sort(first, "DESC");

System.out.println("Sorting second array...");

second = sort(second, "DESC");

System.out.println("Merging arrays. Skipping equal numbers...");

third = merge(third, first, "without equals");

third = merge(third, second, "without equals");

third = sort(third, "DESC");

System.out.println("First array: " + Arrays.toString(first.toArray()));

System.out.println("Second array: " + Arrays.toString(second.toArray()));

System.out.println("Merged array: " + Arrays.toString(third.toArray()));

}

}

  1. Напишите программу реализации системной функции CreateFileMapping

hMap = CreateFileMapping(...);

if (hMap != NULL && GetLastError() == ERROR_ALREADY_EXISTS)

{ CloseHandle(hMap);

hMap = NULL; }

return hMap;

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

select LAST_NAME, DateDiff('m',HIRE_DATE,now()) as MONTH_WORKED from EMPLOYEES;

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

PRE

CLR

J

K

CLK

OUT

  1. Полнофункциональность и целостность ПО.

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

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

Целостность программной среды обеспечивается отсутствием на технических средствах пользователей программного обеспечения АРМ Финансового мониторинга средств разработки и отладки программ, интегрированных средств разработки баз данных - СУБД Access, PLSQL, Oracle и пр.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №5

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Даны два массива. Массив А состоит из N элементов , массив В состоит из М элементов. Оба массива отсортированы по убыванию. Разработать программу для слияния этих массивов в отсортированный по неубыванию массив С.

# include <stdio.h>

# include <stdlib.h>

  const N=10,M=10;

  int a[N],b[M],c[N+M];

void main()

{

  randomize();

  a[0]=-5;

  b[0]=-5;

  for (int i=1;i<N;i++)

    {

      a[i]=a[i-1]-random(3);

      b[i]=b[i-1]-random(3);

    }

  int x=M-1,y=N-1;

  i=0;

  while ((x>=0)|(y>=0))

    {

      if (((a[x]<=b[y])|(y<0))&(x>=0))

        {

          c[i]=a[x];

          i++;

          x--;

        }

      else if (((a[x]>=b[y])|(x<0))&(y>=0))

        {

          c[i]=b[y];

          i++;

          y--;

        }

    }

  1. Напишите программу реализации системной функции CreateIoCompletionPort

#include <windows.h>

#include <stdio.h>

#include <stdlib.h>

#include <ctype.h>

#include <conio.h>

#define MAX_THREADS 32

#define BUFFER_SIZE (64*1024)

hIOCompletionPort = CreateIoCompletionPort(hSourceFile,

dwNumProcessors);

if (hIOCompletionPort == NULL)

{ fprintf(stderr,

"%s: error(ошибка %d)\n",

argv[0],

dwExitStatus = GetLastError());

goto EXIT;

  1. Получите по каждому служащему отчет в следующем виде: <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;

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

PRE

CLR

D

CLK

OUT

  1. Инструментальные средства разработки программного обеспечения (ПО).

Инструмента́льное програ́ммное обеспе́чение — программное обеспечение, предназначенное для использования в ходе проектированияразработки и сопровождения программ, в отличие от прикладного и системного программного обеспечения.

К этой категории относятся программы, предназначенные для разработки программного обеспечения:

  • ассемблеры — компьютерные программы, осуществляющие преобразование программы в форме исходного текста на языке ассемблера в машинные команды в виде объектного кода.

  • трансляторы — программы или технические средства, выполняющие трансляцию программы.

    • компиляторы — Программы, переводящие текст программы на языке высокого уровня, в эквивалентную программу на машинном языке.

    • интерпретаторы — Программы (иногда аппаратные средства), анализирующие команды или операторы программы и тут же выполняющие их

  • компоновщики (редакторы связей) — программы, которые производят компоновку — принимают на вход один или несколько объектных модулей и собирают по ним исполнимый модуль.

  • препроцессоры исходных текстов — это компьютерные программы, принимающие данные на входе и выдающие данные, предназначенные для входа другой программы, например, такой, как компилятор

  • отла́дчик (debugger) является модулем среды разработки или отдельным приложением, предназначенным для поиска ошибок в программе.

  • текстовые редакторы — компьютерные программы, предназначенные для создания и изменения текстовых файлов, а также их просмотра на экране, вывода на печать, поиска фрагментов текста и т. п.

    • специализированные редакторы исходных текстов — текстовые редакторы для создания и редактирования исходного кода программ. Специализированный редактор исходных текстов может быть отдельным приложением, или быть встроен в интегрированную среду разработки (IDE).

  • библиотеки подпрограмм — сборники подпрограмм или объектов, используемых для разработки программного обеспечения.

  • редакторы графического интерфейса.

Перечисленные инструменты могут входить в состав интегрированных сред разработки

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №6

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Напишите функцию поиска количества максимальных элементов в массиве

# include <stdio.h>

# include <stdlib.h>

const n=10;

int mas[n];

int max,kol;

int poisk(int a[])

{ int k=1;

max=a[0];

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

if (a[i]>max) { max=a[i]; k=1;}

else if (a[i]==max) k++;

return k;

}

void main()

{

randomize();

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

mas[i]=5+random(10);

kol=poisk(mas);

}

  1. Напишите программу реализации системной функции CreateMailslot

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"

void main()

{ HANDLE hsl=NULL;

hsl= CreateMailslot("\\\\.\\mailslot\\hello",0,MAILSLOT_WAIT_FOREVER,NULL);

if (hsl!=INVALID_HANDLE_VALUE)

{ cout << "изменение успешно внесены" << endl;

  1. Напишите запрос для вывода фамилий и окладов всех служащих. Назовите выходной столбец SALARY. Длина столбца SALARY – 15 символов с заполнением символов $ слева.

select LAST_NAME, String(15-Len(CStr(SALARY)),'$')+CStr(SALARY) from EMPLOYEES;

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

PRE

CLR

J

K

CLK’

OUT

  1. Тестирование и отладка ПО.

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

  1. Синтаксическая ошибка Неправильное употребление синтаксических конструкций, например употребление оператора цикла For без то или Next.

  2. Семантическая ошибка Нарушение семантики той или иной конструкции, например передача функции параметров, не соответствующих ее аргументам.

  3. Логическая ошибка . Нарушение логики программы, приводящее к неверному результату. Это наиболее трудный для "отлова" тип ошибки, ибо подобного рода ошибки, как правило, кроются в алгоритмах и требуют тщательного анализа и всестороннего тестирования.

Процесс отладки включает:

 действия, направленные на выявление ошибок (тестирование);

 диагностику и локализацию ошибок (определение характера ошибок и их местонахождение);

 внесение исправлений в программу с целью устранения ошибок.

Тестирование программного средства (ПС) - это процесс выполнения программ на некотором наборе данных, для которого заранее известен результат применения или известны правила поведения этих программ. Указанный набор данных называется тестовым или просто тестом. Тестирование программ является одной из составных частей более общего понятия - «отладка программ». Под отладкой по­нимается процесс, позволяющий получить программу, функциони­рующую с требующимися характеристиками в заданной области изменения входных данных.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №7

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Напишите функцию удаления из строки n-символов, начиная с q-го.

#include<conio.h>

#include<stdio.h>

#include<string.h>

char*s="You are fucker!!!";

int n = 5,q = 2;

void main()

{

 clrscr();

 int i;

 int ls=strlen(s);

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

  printf("delete %d symbols from %d position\n",n,q);

 if (ls-q+1<n)

     n=ls-q+1;

 if (n<=ls)

    {

     i=q;

     for (;i<ls-n+1;i++,q++)

          s[q]=s[q+n];

    };

s[q-1]='\0';

printf("The result: %s",s);

getch();

}

  1. Напишите программу реализации системной функции CreateNamedPipe

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"

void main()

{ HANDLE hp;

hp=CreateNamedPipe("\\\\.\\pipe\\ipctest",PIPE_ACCESS_OUTBOUND,

PIPE_TYPE_BYTE | PIPE_NOWAIT,1,0,0,NMPWAIT_USE_DEFAULT_WAIT,NULL);

if (hp!=INVALID_HANDLE_VALUE)

{ int i;

cin >> i; }

else cout << "ошибка в изменение название pipe " << endl;

  1. Выведите фамилию каждого сотрудника, дату найма и день пересмотра зарплаты, который приходится на первый понедельник после шести месяцев службы. Назовите колонку REVIEW. Даты должны форматироваться таким образом, чтобы их вывод был аналогичен следующему: “Monday, the Thirty-First of July, 2000”

select LAST_NAME, HIRE_DATE, StrConv(WeekDayName(WeekDay(

DateAdd('d',9-WeekDay(DateAdd('m',6,HIRE_DATE)),DateAdd('m',6,HIRE_DATE))

),false,1),3)+', '+CStr(Day(

DateAdd('d',9-WeekDay(DateAdd('m',6,HIRE_DATE)),DateAdd('m',6,HIRE_DATE))

))+' '+MonthName(Month(

DateAdd('d',9-WeekDay(DateAdd('m',6,HIRE_DATE)),DateAdd('m',6,HIRE_DATE))

),true)+', '+ CStr(Year(

DateAdd('d',9-WeekDay(DateAdd('m',6,HIRE_DATE)),DateAdd('m',6,HIRE_DATE))

)) as REVIEW from EMPLOYEES;

  1. Нарисовать форму выходного сигнала (OUT) устройства по представленным входным сигналам и объяснить ее.

D

CLK

OUT

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

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

Файловый менеджер (англ. file manager) - компьютерная программа, предоставляющая интерфейс пользователя для работы с файловой системой и файлами. Файловый менеджер позволяет выполнять наиболее частые операции над файлами - создание, открытие/проигрывание/просмотр, редактирование, перемещение, переименование, копирование, удаление, изменение атрибутов и свойств, поиск файлов и назначение прав. Помимо основных функций, многие файловые менеджеры включают ряд дополнительных возможностей, например, таких как работа с сетью (через FTP, NFS и т. п.), резервное копирование, управление принтерами и пр.

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

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

Наиболее известные ортодоксальные файловые менеджеры: Norton Commander, Dos Navigator, Volkov Commander, PIE Commander, FAR Manager, Total Commander, POSIX (Linux, BSD и т. д.), Midnight Commander, Krusader, GNOME Commander.

Навигационные файловые менеджеры: проводник Windows (англ. Windows Explorer) -- встроен в Windows, Mac OS X, Finder, Path Finder, POSIX (Linux, BSD и т.д.), Konqueror -- поставляется с KDE, Nautilus (файловый менеджер) -- поставляется с GNOME

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

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

1. Просмотр и редактирование текстовых файлов, подцветка синтаксиса, поддержка разных кодировок (включая Unicode)

2. Поиск и замена по множеству файлов, множественное переименование файлов, просмотр картинок, работа с архивами.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №8

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Напишите функцию поиска самой длинной цепочки из подряд идущих одинаковых элементов в массиве.

# include <stdio.h>

# include <stdlib.h>

  const n=10;

  int s[n];

  int x[n],maxk=1,j;

void poisk(int a[])

{

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

    {

      int k=1;

      if (a[i]==a[i+1])

        { j=i;

          while (a[j]==a[j+1]) { j++; k++;}

        }

      if (k>maxk)

        { maxk=k;

          for (k=0;i<=j;i++,k++)

             x[k]=a[i];

        }

     }

}

  1. Напишите программу реализации системной функции CreatePipe

#include <windows.h>

#include <stdio.h>

#define BUFSIZE 4096

int main(void)

{ CHAR chBuf[BUFSIZE];

DWORD dwRead, dwWritten;

HANDLE hStdin, hStdout;

BOOL bSuccess;

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

hStdin = GetStdHandle(STD_INPUT_HANDLE);

if ( (hStdout == INVALID_HANDLE_VALUE) ||

(hStdin == INVALID_HANDLE_VALUE) )

ExitProcess(1);

printf("\n ** сообщение для выявление процесса ** \n");

for (;;)

{ bSuccess = ReadFile(hStdin, chBuf, BUFSIZE, &dwRead, NULL);

if (! bSuccess || dwRead == 0)

break;

bSuccess = WriteFile(hStdout, chBuf, dwRead, &dwWritten, NULL);

if (! bSuccess)

break; }

return 0;}

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

select LAST_NAME, HIRE_DATE, StrConv(WeekDayName(WeekDay(HIRE_DATE),false,1),3) as DAY from EMPLOYEES;

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

  1. Технико-экономическое обоснование ПО.

Технико-экономическое обоснование (ТЭО) — документ, в котором представлена информация, из которой выводится целесообразность (или нецелесообразность) создания продукта или услуги. ТЭО содержит анализ затрат и результатов какого-либо проекта. ТЭО позволяет инвесторам определить, стоит ли вкладывать деньги в предлагаемый проект.

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

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

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №9

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Многочлен P (x) задан массивом своих коэффициентов A[n+1]. Найти массив коэффициентов производной этого многочлена.

#include<stdio.h>

int A[]={3,4,5,1,6,3};

 

const n=sizeof(A)/sizeof(int);

 

int X[n-1];

 

unsigned long rez = 0;

 

int i,j=0,x=2;

 

void main()

 

{

 

clrscr();

 

for (i=0,j=n-1;i<n-1;i++,j--)

 

X[i] = A[i]*j;

 

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

 

printf(" %d ",X[i]);

 

 

}

  1. Напишите программу реализации системной функции CreateProcess

#include "stdafx.h"

#include "windows.h"

#include "iostream.h"

void main()

{ STARTUPINFO cif;

ZeroMemory(&cif,sizeof(STARTUPINFO));

PROCESS_INFORMATION pi;

if (CreateProcess("c:\\windows\\notepad.exe",NULL,

NULL,NULL,FALSE,NULL,NULL,NULL,&cif,&pi)==TRUE)

{ cout << "process" << endl;

cout << "handle " << pi.hProcess << endl;

Sleep(1000);

TerminateProcess(pi.hProcess,NO_ERROR);

  1. Напишите запрос для вывода фамилии и суммы комиссионных каждого служащего. Если служащий не зарабатывает комиссионных, укажите в столбце “No Commission”. Назовите столбец COMM.

select LAST_NAME, SALARY, COMMISSION_PCT from EMPLOYEES where COMMISSION_PCT is not null order by SALARY desc, COMMISSION_PCT desc;

  1. Объяснить принцип работы приведенного устройства.

  1. Классификация направлений программирования и их особенностей.

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

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

Декларативные языки программирования - это языки объявлений и построения структур. К ним относятся функциональные и логические языки программирования. В этих языках не производится алгоритмических действий явно, то есть алгоритм не задается прграммистом, а строится самой программой. В декларативных языках задается, производится построение какой-либо структуры или системы, то есть декларируются (объявляются) какие-то свойства создаваемого объекта. Эти языки получили широкое применение в системах автоматизированного проектирования (САПР), в так называемых CAD-пакетах, в моделировнии, системах исккусственного интеллекта.

Объектно-ориентированное программирование - в этих языках переменные и функции группируются в так называемые классы (шаблоны). Благодаря этому достигается более высокий уровень структуризации программы. Объекты, порождённые от классов вызывают методы (функции или процедуры) друг друга и меняют таким образом состояние свойств (переменных). С формально-математической стороны объектно ориентированный способ написания программ базируется на процедурной модели программирования, но с содержательной стороны ООП базируется не на функции, а на объекте, как целостной системе, имеющей стандартный автоматический межобъектный интерфейс.

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

Машинно - ориентированные языки

Машинно - ориентированные языки - это языки, наборы операторов и изобразительные средства которых существенно зависят от особенностей ЭВМ (внутреннего языка, структуры памяти и т.д.). Машинно -ориентированные языки позволяют использовать все возможности и особенности Машинно - зависимых языков:

  • высокое качество создаваемых программ (компактность и скорость выполнения);

  • возможность использования конкретных аппаратных ресурсов;

  • предсказуемость объектного кода и заказов памяти;

  • для составления эффективных программ необходимо знать систему команд и особенности функционирования данной ЭВМ;

  • трудоемкость процесса составления программ ( особенно на машинных языках и ЯСК), плохо защищенного от появления ошибок;

  • низкая скорость программирования;

  • невозможность непосредственного использования программ, составленных на этих языках, на ЭВМ других типов.

Машинно-ориентированные языки по степени автоматического программирования подразделяются на классы.

Машинный язык

Как уже упоминалось в введении, отдельный компьютер имеет свой определенный Машинный язык (далее МЯ), ему предписывают выполнение указываемых операций над определяемыми ими операндами, поэтому МЯ является командным. Однако, некоторые семейства ЭВМ (например, ЕС ЭВМ, IBM-370 и др.) имеют единый МЯ для ЭВМ разной мощности. В команде любого из них сообщается информация о местонахождении операндов и типе выполняемой операции.

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

Языки Символического Кодирования

Продолжим рассказ о командных языках, Языки Символического Кодирования (далее ЯСК), так же, как и МЯ, являются командными. Однако коды операций и адреса в машинных командах, представляющие собой последовательность двоичных (во внутреннем коде) или восьмеричных (часто используемых при написании программ) цифр, в ЯСК заменены на символы (идентификаторы), форма написания которых помогает программисту легче запоминать смысловое содержание операции. Это обеспечивает существенное уменьшение числа ошибок при составлении программ.

Использование символических адресов - первый шаг к созданию ЯСК. Команды ЭВМ вместо истинных (физических) адресов содержат символические адреса. По результатам составленной программы определяется требуемое количество ячеек для хранения исходных промежуточных и результирующих значений. Назначение адресов, выполняемое отдельно от составления программы в символических адресах, может проводиться менее квалифицированным программистом или специальной программой, что в значительной степени облегчает труд программиста.

Автокоды

Есть также языки, включающие в себя все возможности ЯСК, посредством расширенного введения макрокоманд - они называются Автокоды.

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

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

Обе указанных системы используют трансляторы с ЯСК и набор макрокоманд, которые также являются операторами автокода.

Развитые автокоды получили название Ассемблеры. Сервисные программы и пр., как правило, составлены на языках типа Ассемблер. Более полная информация об языке Ассемблера см. ниже.

Макрос

Язык, являющийся средством для замены последовательности символов описывающих выполнение требуемых действий ЭВМ на более сжатую форму - называетсяМакрос (средство замены).

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

Макрос одинаково может работать, как с программами, так и с данными.

Машинно - независимые языки

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

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

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

Проблемно - ориентированные языки

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

Проблемных языков очень много, например:

Фортран, Алгол - языки, созданные для решения математических задач;

Simula, Слэнг - для моделирования;

Лисп, Снобол - для работы со списочными структурами.

Об этих языках рассказано дальше.

Универсальные языки

Универсальные языки были созданы для широкого круга задач: коммерческих, научных, моделирования и т.д. Первый универсальный язык был разработан фирмой IBM, ставший в последовательности языков Пл/1. Второй по мощности универсальный язык называется Алгол-68. Он позволяет работать с символами, разрядами, числами с фиксированной и плавающей запятой. Пл/1 имеет развитую систему операторов для управления форматами, для работы с полями переменной длины, с данными организованными в сложные структуры, и для эффективного использования каналов связи. Язык учитывает включенные во многие машины возможности прерывания и имеет соответствующие операторы. Предусмотрена возможность параллельного выполнение участков программ.

Программы в Пл/1 компилируются с помощью автоматических процедур. Язык использует многие свойства Фортрана, Алгола, Кобола. Однако он допускает не только динамическое, но и управляемое и статистическое распределения памяти.

Диалоговые языки

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

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

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

Одним из примеров диалоговых языков является Бэйсик.

Бэйсик использует обозначения подобные обычным математическим выражениям. Многие операторы являются упрощенными вариантами операторов языка Фортран. Поэтому этот язык позволяет решать достаточно широкий круг задач.

Непроцедурные языки

Непроцедурные языки составляют группу языков, описывающих организацию данных, обрабатываемых по фиксированным алгоритмам (табличные языки и генераторы отчетов), и языков связи с операционными системами.

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

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

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

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №10

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Найти два самых маленьких элемента в массиве. Указать их значения и индексы.

# include <stdio.h>

# include <stdlib.h>

  int mas[10];

  int min1,min2,ind1,ind2;

void main()

{ randomize();

  for (int i=0;i<10;mas[i]=1+random(30),i++);

  min1=(mas[0]<mas[1])?mas[0]:mas[1];

  min2=(mas[0]>mas[1])?mas[0]:mas[1];

  ind1=(mas[0]<mas[1])?0:1;

  ind2=(mas[0]>mas[1])?0:1;

  for (i=2;i<10;i++)

    if (min1>=mas[i])

      { min2=min1;

        ind2=ind1;

        min1=mas[i];

        ind1=i;

      }

    else if (min2>=mas[i])

      { min2=mas[i];

        ind2=i;

      }

}

  1. Напишите программу реализации системной функции CreateRestricteToken

#include <windows.h>

#include <stdio.h>

#include <lm.h>

int main()

{ HANDLE hProcess; // дескриптор процесса

HANDLE hToken; // дескриптор маркера доступа

HANDLE hRestrict; // дескриптор ограничивающего маркера доступа

char chUserName[UNLEN]; // имя пользователя

DWORD dwLengthOfUserName = UNLEN; // длина имени учетной записи

DWORD dwLengthOfSID = 0; // длина SID

DWORD dwLengthOfDomainName = 0; // длина имени домена

SID *lpSid = NULL; // указатель на SID

LPTSTR lpDomainName = NULL; // указатель на имя домена

SID_NAME_USE type_of_SID; // тип учетной записи

SID_AND_ATTRIBUTES RestrictingSid; // ограничивающий SID

DWORD dwRetCode; // код возврата

// получаем дескриптор процесса

hProcess = GetCurrentProcess();

// получаем маркер доступа процесса

if (!OpenProcessToken(

hProcess, // дескриптор процесса

TOKEN_ALL_ACCESS, // полный доступ к маркеру доступа

&hToken)) // дескриптор маркера

{ dwRetCode = GetLastError();

printf( "Open process token failed: %u\n", dwRetCode);

return dwRetCode;}

printf("Input a user name: ");

gets(chUserName); // вводим имя пользователя

// определяем длину SID пользователя

if (!LookupAccountName(

NULL, // ищем имя на локальном компьютере

chUserName, // имя пользователя

NULL, // определяем длину SID

&dwLengthOfSID, // длина SID

NULL, // определяем имя домена

&dwLengthOfDomainName, // длина имени домена

&type_of_SID)) // тип учетной записи

{ dwRetCode = GetLastError();

if (dwRetCode == ERROR_INSUFFICIENT_BUFFER)

{ // распределяем память для SID и имени домена

lpSid = (SID*) new char[dwLengthOfSID];

lpDomainName = (LPTSTR) new wchar_t[dwLengthOfDomainName];

} else

{ // выходим из программы

printf("Lookup account name failed.\n");

printf("Error code: %d\n", dwRetCode);

return dwRetCode;

} }

// определяем SID и имя домена пользователя

if(!LookupAccountName(

NULL, // ищем имя на локальном компьютере

chUserName, // имя пользователя

lpSid, // указатель на SID

&dwLengthOfSID, // длина SID

lpDomainName, // указатель на имя домена

&dwLengthOfDomainName, // длина имени домена

&type_of_SID)) // тип учетной записи

{ dwRetCode = GetLastError();

printf("Lookup account name failed.\n");

printf("Error code: %d\n", dwRetCode);

return dwRetCode; }

// инициализируем ограничивающий SID

RestrictingSid.Sid = lpSid;

RestrictingSid.Attributes = 0;

// создаем ограничивающий маркер доступа

if (!CreateRestrictedToken(

hToken, // дескриптор исходного маркера доступа

0, // привилегии не изменяем

0, NULL, // флаг SE_GROUP_USE_FOR_DENY_ONLY не устанавливаем

0, NULL, // привилегии не удаляем

1, // один ограничивающий SID

&RestrictingSid, // адрес ограничивающего SID

&hRestrict)) // адрес ограничивающего маркера доступа

{ dwRetCode = GetLastError();

printf("Create restricted token failed.\n");

printf("Error code: %d\n", dwRetCode);

return dwRetCode; }

// проверяем замещение маркера доступа

if (IsTokenRestricted(hRestrict))

printf("The restricted token is created.\n");

else {

dwRetCode = GetLastError();

printf("Is Token Restricted failed.\n");

printf("Error code: %d\n", dwRetCode);

return dwRetCode; } // замещаем контекст безопасности потока

if (!ImpersonateLoggedOnUser(hRestrict))

{ dwRetCode = GetLastError();

printf("Impersonate logged on user failed.\n");

printf("Error code: %d\n", dwRetCode);

return dwRetCode; }

// здесь делаем какую-то работу

printf("Some work is done.\n"); // возвращаем исходный контекст

if (!RevertToSelf())

{ dwRetCode = GetLastError();

printf("Revert to self failed.\n");

printf("Error code: %d\n", dwRetCode);

return dwRetCode; }

CloseHandle(hToken);

return 0;} }

  1. Создайте запрос для вывода фамилий служащих и их окладов, обозначенных звездочками. Каждая звездочка означает 1000 долларов. Отсортируйте выходные данные в порядке убывания окладов. Назовите столбец EMPLOYEE_AND_THEIR_SALARIES («Служащие и их оклады»).

select LAST_NAME, rpad('*',trim((salary/1000)),'*') as EMPLOYEE_AND_THEIR_SALARIES from employees

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

  1. Виды инструментальных средств.

Инструмента́льное програ́ммное обеспе́чение — программное обеспечение, предназначенное для использования в ходе проектированияразработки и сопровождения программ, в отличие от прикладного и системного программного обеспечения.

Виды инструментального ПО

  • Текстовые редакторы

  • Интегрированные среды разработки

  • SDK

  • Компиляторы

  • Интерпретаторы

  • Линковщики

  • Парсеры и генераторы парсеров (см. Javacc)

  • Ассемблеры

  • Отладчики

  • Профилировщики

  • Генераторы документации

  • Средства анализа покрытия кода

  • Средства непрерывной интеграции

  • Средства автоматизированного тестирования

  • Системы управления версиями

  • и др.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №11

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Дан массив А[n]. Каждый его элемент, кроме первого, заменить суммой всех предыдущих элементов (т.н. нарастающий итог).

#include<conio.h>

#include<stdio.h>

int a[]={1,6,43,2,5,7,34,2};

int n=sizeof(a)/sizeof(int);

int i,j,k=n-1;

void main()

{

clrscr();

for(i=n;i>0;i--,k--)

    for (j=0;j<i-1;j++)

        a[k]+=a[j];

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

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

getch();

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

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

         a[k]+=a[j];

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

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

getch();

}

  1. Напишите программу реализации системной функции CreateService

#include <windows.h>

#include <iostream.h>

int main()

{ SC_HANDLE hServiceControlManager, hService; // связываемся с менеджером сервисов

hServiceControlManager = OpenSCManager(

NULL, // локальная машина

NULL, // активная база данных сервисов

SC_MANAGER_CREATE_SERVICE // возможно создание сервиса

);

if (hServiceControlManager == NULL)

{ cout << "Open service control manager failed." << endl

<< "The last error code: " << GetLastError() << endl

<< "Press any key to exit." << endl;

cin.get();

return 0; }

cout << "Service control manager is opened." << endl

<< "Press any key to continue." << endl;

cin.get();

// устанавливаем новый сервис

hService = CreateService(

hServiceControlManager, // дескриптор менеджера сервисов

"DemoService", // внутреннее имя сервиса, используемое SCM

"Demo_Service", // внешнее имя сервиса в панели управления

SERVICE_ALL_ACCESS, // полный контроль над сервисом

SERVICE_WIN32_OWN_PROCESS, // сервис является процессом

SERVICE_DEMAND_START, // запускается сервис по требованию

SERVICE_ERROR_NORMAL, // обработка ошибок нормальная

"C:\\DemoService.exe", // путь к сервису

NULL, // сервис не принадлежит к группе

NULL, // тэг группы не изменяется

NULL, // сервис не зависит от других сервисов

NULL, // имя совпадает с текущим именем учетной записи

NULL // пароля нет );

if (hService == NULL)

{ cout << "Create service failed." << endl

<< "The last error code: " << GetLastError() << endl

<< "Press any key to exit." << endl;

cin.get();

// закрываем дескриптор менеджера сервисов

CloseServiceHandle(hServiceControlManager);

return 0; }

cout << "Service is installed." << endl

<< "Press any key to exit." << endl;

cin.get();

// закрываем дескрипторы

CloseServiceHandle(hService);

CloseServiceHandle(hServiceControlManager);

return 0;}

  1. Используя функцию 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;

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

  1. Последовательность действий при разработке программ.

Шаг 1.Создание нового программного модуля. Для создания нового файла соответствующей кнопкой открывается окно текстового редактора, и пользователь имеет возможность набрать текст управляющей программы. Программа на ассемблере пишется колонками: первая колонка – метка (после неё ставится двоеточие), вторая – мнемоническое обозначение команды, третья – операнды через запятую, четвертая – комментарий, перед которым ставится точка с запятой Шаг 2.Компиляция – процесс контроля синтаксических ошибок в исходном тексте программы и создания файла программного кода. Если при компиляции обнаружены ошибки, выводится сообщение с числом ошибок, затем листинг, где помечены строки с ошибками. В этом случае необходимо открыть на редактирование исходный файл(Шаг 3), исправить в нём неверные команды и заново откомпилировать.Шаг 3. Редактирование программного модуля. Для внесения изменений в существующий модуль необходимо либо дважды щелкнуть левой клавишей мыши по иконке соответствующего файла, либо выбрав файл щелкнуть левой клавишей мыши по кнопке меню «Открытие программного модуля». При открытии файла исходный текст программы загружается в текстовый редактор и пользователь имеет возможность внесения изменений в программу.Шаг 4.Запуск отладчика программного кода. Если исходный текст откомпилирован без ошибок и создан файл программного кода, то для его отладки необходимо дважды щелкнуть левой клавишей мыши по иконке, либо выбрав отлаживаемый файл по иконке меню «Запуск отладчика программного кода».

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №12

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Ввести произвольный текст. Найти среднюю длину слов в нем.

#include<stdio.h>

#include<conio.h>

char text[]="Neverwinter Nights is the real RPG, that is built with D&D principes...";

float i,i_temp=0,kol=0,len_real;

int n=sizeof(text)/sizeof(char);

float result;

void main()

{

clrscr();

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

    {

     if (text[i] == ' ' || text[i] == ':' || text[i] == ';' || text[i] == ',' || text[i] == '.' || text[i] == '!' || text[i] == '?')

        {

         if (text[i] == ' ')

            {

             kol++;

             len_real += i-i_temp;

             i_temp=i+1;

            }

         else

             len_real -= 1;

        }

    }

i_temp++;

kol++;

len_real += i-i_temp;

result=len_real/kol;

printf("%f",result);

getch();

}

  1. Напишите программу реализации системной функции CreateThread

#include <windows.h>

#include <stdio.h>

DWORD WINAPI MyThread( LPVOID lpParam )

{ printf("Parameter = %d\n", *(DWORD*)lpParam);

return 0; }

VOID main( VOID )

{ DWORD ThreadId, ThreadParameter = 10;

HANDLE hThread;

hThread = CreateThread(

NULL, // атрибуты безопасности по умолчанию

0, // размер стека по умолчанию

MyThread , // указатель на процедуру создаваемого потока

&ThreadParameter, // аргумент, передаваемый функции потока

0, // флаги создания по умолчанию

&ThreadId); // возвращаемый идентификатор потока

if (hThread == NULL) printf("CreateThread failed." );

getchar();

CloseHandle( hThread ); }

  1. Создайте запрос для вывода номера отдела, фамилии служащего и фамилий всех служащих, работающих в одном отделе с данным служащим. Дайте столбцам соответствующие имена.

select e1.department_id as DEPARTMENT ,e1.last_name as EMPLOYEE,e2.last_name as COLLEAGUE from employees as e1 left join employees as e2 on e1.department_id=e2.department_id and e1.employee_id<>e2.employee_id;

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

  1. UML – средства описания проекта на логической стадии разработки.

Язык UML(Унифицированный язык моделирования) предлагает набор инструментальных средств, позволяющих проводить всесторонний анализ сложных проектов как с технической точки зрения, так и с точки зрения потребностей бизнеса. Данный язык упрощает процесс проектирования, снижает его стоимость и повышает эффективность. Концепция UML позволяет разработчикам определять методы технически сложных приложений, которые будут выполняться в многоуровневой распределенной среде.Достоинства: стандартная методология; интуитивно понятные обозначения, мощные описательные средства языка; автоматическая генерация кодаНедостатки: потребность в обучении; необходимость одновременного перехода на данную технологию всех участников проекта.Технология UML, одобренная консорциумом Object Management Group, является мощным средством описания бизнес-процессов и представления их в той форме, которая устраивает как разработчиков, так и пользователей. В данном обзоре мы постараемся показать, каким образом с помощью технологии UML можно ускорить цикл разработки и повысить надежность приложений.От данных к объектамБлок-схемы являют собой чудо простоты. Принятые графические обозначения полностью описывают шаги, необходимые для завершения того или иного действия. Процессы складываются в ясные логические последовательности, которые делают блок-схемы прекрасным средством представления деловых задач и упрощают кодирование приложений.Язык UML — это не просто совокупность альтернативных решений. Его концепция принципиально отличается от «старомодных» технологий (в частности, от блок-схем и электронных таблиц). Вместо того чтобы иллюстрировать изолированные части процесса, UML отдает предпочтение диаграммам верхнего уровня, позволяющим разработчикам скрывать детали и концентрировать внимание на функциональных особенностях, а не на последовательности действий. Данный подход позволяет начать с формирования общего взгляда на приложение, детали же раскрываются позже.Каждая из диаграмм, использованных в UML, позволяет рассматривать бизнес-процессы под различным углом. К примеру, деловые пользователи при помощи данных диаграмм могут оценить основные положения бизнес-сценария и разобраться в том, кто за что отвечает. Разработчики же применяют диаграммы классов и объектов для получения точного представления о том, как встраивать данные компоненты в свой код.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №13

по специальности 5B0704 - Вычислительная техника и программное обеспечение

  1. Имеется целочисленный массив из n элементов. Написать программу для ’сжатия’ этого массива путем выбрасывания из него одинаковых элементов.

#include<stdio.h>

#include<conio.h>

int arr[]={8,1,2,3,1,1,3,6,3,7,8};

int i,j,k,j_temp;

int n=sizeof(arr)/sizeof(int);

void main()

{

clrscr();

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

    {

     j=i+1;

 /*    if (j == i)

         j+=1;

  */   if (j >= n)

         j=0;

     for (; j < n; j++)

         {

          if (arr[i] == arr[j])

             {

              for (k=j; k < n; k++)

                   arr[k]=arr[k+1];

              n--;

              arr[n]=0;

              j--;

             }

         }

    }

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

printf("%d",arr[i]);

getch();

}

  1. Напишите программу реализации системной функции CreateWaitableTimer

#include <windows.h>

#include <stdio.h>

int main()

{ HANDLE hTimer = NULL;

LARGE_INTEGER liDueTime;

hTimer = CreateWaitableTimer(NULL, TRUE, "WaitableTimer");

/* задать срабатывание через 5 секунд */

liDueTime.QuadPart=-50000000;

SetWaitableTimer( hTimer, &liDueTime, 0, NULL, NULL, 0 );

WaitForSingleObject( hTimer, INFINITE );

return 0;}

  1. Создайте запрос для вывода фамилии и даты найма каждого служащего, работающего в одном отделе с 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';

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

  1. Классификация стандартов программирования.

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

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

Типы данных[править | править вики-текст]

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

Особая система, по которой данные организуются в программе, — это система типов языка программирования; разработка и изучение систем типов известна под названием теория типов. Языки можно поделить на имеющие статическую типизацию и динамическую типизацию, а также бестиповые языки (например, Forth).

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

Структуры данных[править | править вики-текст]

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

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

Семантика языков программирования[править | править вики-текст]

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

Наиболее широко распространены разновидности следующих трёх: операционного, деривационного (аксиоматического) и денотационного (математического).

  • При описании семантики в рамках операционного подхода обычно исполнение конструкций языка программирования интерпретируется с помощью некоторой воображаемой (абстрактной) ЭВМ.

  • Аксиоматическая (Деривационная) семантика описывает последствия выполнения конструкций языка с помощью языка логики и задания пред- и постусловий.

  • Денотационная семантика оперирует понятиями, типичными для математики — множества, соответствия, а также суждения, утверждения и др.

Парадигма программирования[править | править вики-текст]

Язык программирования строится в соответствии с той или иной базовой моделью вычислений и парадигмой программирования.

Несмотря на то, что большинство языков ориентировано на императивную модель вычислений, задаваемую фон-неймановской архитектурой ЭВМ, существуют и другие подходы. Можно упомянуть языки со стековой вычислительной моделью (ФортFactorPostScript и др.), а также функциональное (ЛиспHaskellMLF#РЕФАЛ, основанный на модели вычислений, введённой советским математиком А. А. Марковым-младшим и др.) и логическое программирование (Пролог).

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

Способы реализации языков[править | править вики-текст]

Языки программирования могут быть реализованы как компилируемые и интерпретируемые.

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

Если программа написана на интерпретируемом языке, то интерпретатор непосредственно выполняет (интерпретирует) исходный текст без предварительного перевода. При этом программа остаётся на исходном языке и не может быть запущена без интерпретатора. Процессор компьютера, в этой связи, можно назвать интерпретатором для машинного кода.

Разделение на компилируемые и интерпретируемые языки является условным. Так, для любого традиционно компилируемого языка, как, например, Паскаль, можно написать интерпретатор. Кроме того, большинство современных «чистых» интерпретаторов не исполняют конструкции языка непосредственно, а компилируют их в некоторое высокоуровневое промежуточное представление (например, с разыменованием переменных и раскрытием макросов).

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

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

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

Однако интерпретируемые программы выполняются заметно медленнее, чем компилируемые, кроме того, они не могут выполняться без программы-интерпретатора.

Некоторые языки, например, Java и C#, находятся между компилируемыми и интерпретируемыми. А именно, программа компилируется не в машинный язык, а в машинно-независимый код низкого уровня, байт-код. Далее байт-код выполняется виртуальной машиной. Для выполнения байт-кода обычно используется интерпретация, хотя отдельные его части для ускорения работы программы могут быть транслированы в машинный код непосредственно во время выполнения программы по технологии компиляции «на лету» (Just-in-time compilation, JIT). Для Java байт-код исполняется виртуальной машиной Java (Java Virtual Machine, JVM), для C# — Common Language Runtime.

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

Языки программирования низкого уровня[править | править вики-текст]

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

Трансляторы делятся на:

компиляторы — превращают текст программы в машинный код, который можно сохранить и после этого использовать уже без компилятора (примером является исполняемые файлы с расширением *.exe) .

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

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

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

Ассемблер — язык низкого уровня, широко применяется до сих пор.

Языки программирования высокого уровня[править | править вики-текст]

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

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

  • Адресный язык программирования

  • Фортран

  • Кобол

  • Алгол

  • Pascal

  • Pascal ABC

  • Java

  • C

  • Basic

  • C++

  • Objective-C

  • Smalltalk

  • C#

  • Delphi

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

Используемые символы[править | править вики-текст]

Современные языки программирования рассчитаны на использование ASCII, то есть доступность всех графических символов ASCII является необходимым и достаточным условием для записи любых конструкций языка. Управляющие символы ASCII используются ограниченно: допускаются только возврат каретки CR, перевод строки LF и горизонтальная табуляция HT (иногда также вертикальная табуляция VT и переход к следующей странице FF).

Подробнее по этой теме см.: Переносимый набор символов.

Ранние языки, возникшие в эпоху 6-битных символов, использовали более ограниченный набор. Например, алфавит Фортрана включает 49 символов (включая пробел): A B C D E F G H I J K L M N O P Q R S T U V W X Y Z 0 1 2 3 4 5 6 7 8 9 = + - * / () . , $ ' :

Заметным исключением является язык APL, в котором используется очень много специальных символов.

Использование символов за пределами ASCII (например, символов KOI8-R или символов Юникода) зависит от реализации: иногда они разрешаются только в комментариях и символьных/строковых константах, а иногда и в идентификаторах. В СССР существовали языки, где все ключевые слова писались русскими буквами, но большу́ю популярность подобные языки не завоевали (исключение составляет Встроенный язык программирования 1С:Предприятие).

Подробнее по этой теме см.: Языки программирования с ключевыми словами не на английском.

Расширение набора используемых символов сдерживается тем, что многие проекты по разработке программного обеспечения являются международными. Очень сложно было бы работать с кодом, где имена одних переменных записаны русскими буквами, других — арабскими, а третьих — китайскими иероглифами. Вместе с тем, для работы с текстовыми данными языки программирования нового поколения (Delphi 2006C#Java) поддерживают Unicode.

АЛМАТИНСКИЙ УНИВЕРСИТЕТ ЭНЕРГЕТИКИ И СВЯЗИ

ФАКУЛЬТЕТ ИНФОРМАЦИОННЫХ ТЕХНОЛОГИЙ

КАФЕДРА КОМПЬЮТЕРНЫХ ТЕХНОЛОГИЙ

АТТЕСТАЦИОННЫЙ ЭКЗАМЕНАЦИОННЫЙ БИЛЕТ №14

по специальности 5B0704 - Вычислительная техника и программное обеспечение

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

#include<stdio.h>

#include<conio.h>

 

int day1=18,mon1=2,year1=1977;

int day2=19,mon2=3,year2=1977;

int d_rez,m_rez,y_rez,more,i;

 

 

void main()

{

 clrscr();

 y_rez = year2 - year1;

 if (y_rez == 0)

     m_rez = mon2 - mon1;

 else

     m_rez = 12 - mon1 + mon2;

 if (m_rez == 0)

     d_rez = day1 + day2 - 1;

 else

    {

     if (mon1 == 1 || mon1 == 3 || mon1 == 5 ||mon1 == 7 || mon1 == 8 || mon1 == 10 || mon1 == 12)

             d_rez = 31 - day1 + day2;

     else

             d_rez = 30 - day1 + day2;

    }

 if (d_rez >= 30)

    {

     if (mon1 == 1 || mon1 == 3 || mon1 == 5 ||mon1 == 7 || mon1 == 8 || mon1 == 10 || mon1 == 12)

            {

             d_rez -= 31;

             more = d_rez/m_rez;

            }

     else

            {

             d_rez -= 30;

             more = d_rez%m_rez;  //HERE

            }

     if (more == 0)

             more = 1;

     m_rez += more;

    }

 while (m_rez >= 12)

       {

            m_rez -= 12;

            y_rez += 1;

       }

 m_rez -= 1;

 if (y_rez > 0)

     y_rez -= 1;

 for (i=year1;i<year2;i++)

 if((i%4 == 0) && (i%100 != 0))

     d_rez++;

 if((mon1<=2)&(mon2>=2))

    d_rez -= 2*y_rez;

 

 if (d_rez < 0)

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

            {

             d_rez += 30;

             y_rez++;

            }

 

 printf("%d days, %d month(es) and %d year(s) latter...",d_rez,m_rez,y_rez);

 getch();

}

}

  1. Напишите программу реализации системной функции CreateConsoleScreenBuffer

#include <windows.h>

#include <stdio.h>

int main(void)

{ HANDLE hStdout, hNewScreenBuffer;

SMALL_RECT srctReadRect;

SMALL_RECT srctWriteRect;

CHAR_INFO chiBuffer[160]; // [2][80];

COORD coordBufSize;

COORD coordBufCoord;

BOOL fSuccess;

hStdout = GetStdHandle(STD_OUTPUT_HANDLE);

hNewScreenBuffer = CreateConsoleScreenBuffer(

GENERIC_READ | // read/write access

GENERIC_WRITE,

FILE_SHARE_READ |

FILE_SHARE_WRITE, // shared

NULL, // default security attributes

CONSOLE_TEXTMODE_BUFFER, // must be TEXTMODE

NULL); // reserved; must be NULL

if (hStdout == INVALID_HANDLE_VALUE ||

hNewScreenBuffer == INVALID_HANDLE_VALUE)

{ printf("CreateConsoleScreenBuffer failed - (%d)\n", GetLastError());

return 1; }

if (! SetConsoleActiveScreenBuffer(hNewScreenBuffer) )

{ printf("SetConsoleActiveScreenBuffer failed - (%d)\n", GetLastError());

return 1; }

srctReadRect.Top = 0; // top left: row 0, col 0

srctReadRect.Left = 0;

srctReadRect.Bottom = 1; // bot. right: row 1, col 79

srctReadRect.Right = 79;

coordBufSize.Y = 2;

coordBufSize.X = 80;

coordBufCoord.X = 0;

coordBufCoord.Y = 0;

fSuccess = ReadConsoleOutput(

if (! fSuccess)

{ printf("ReadConsoleOutput failed - (%d)\n", GetLastError());

return 1; }

srctWriteRect.Top = 10; // top lt: row 10, col 0

srctWriteRect.Left = 0;

srctWriteRect.Bottom = 11; // bot. rt: row 11, col 79

srctWriteRect.Right = 79;

fSuccess = WriteConsoleOutput(

hNewScreenBuffer, // screen buffer to write to

chiBuffer, // buffer to copy from

coordBufSize, // col-row size of chiBuffer

coordBufCoord, // top left src cell in chiBuffer

&srctWriteRect); // dest. screen buffer rectangle

if (! fSuccess)

{ printf("WriteConsoleOutput failed - (%d)\n", GetLastError());

return 1; }

Sleep(5000);

if (! SetConsoleActiveScreenBuffer(hStdout))

{ printf("SetConsoleActiveScreenBuffer failed - (%d)\n", GetLastError());

return 1; }

return 0;}

  1. Создайте запрос для вывода фамилии, номера отдела и должности каждого служащего, отдел которого находится в 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;

  1. Реализовать представленную в таблице функцию (Y) с помощью логических элементов ИЛИ-НЕ.

    X2

    X1

    X0

    Y

    X2

    X1

    X0

    Y

    0

    0

    0

    1

    1

    0

    0

    0

    0

    0

    1

    1

    1

    0

    1

    1

    0

    1

    0

    1

    1

    1

    0

    0

    0

    1

    1

    0

    1

    1

    1

    0

  2. Модель: определение, классификация, пример.

Модель данных — это некоторая абстракция, которая, будучи приложима к кон­кретным данным, позволяет пользователям и разработчикам трактовать их уже как информацию, то есть сведения, содержащие не только данные, но и взаимо­связь между ними.