Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Шереметев Информатика. Сборник домашних заданий 2009

.pdf
Скачиваний:
29
Добавлен:
16.08.2013
Размер:
944.56 Кб
Скачать

тельно). В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.17. Написать тестирующую main() и следующую функцию

int BitIntCnt(

 

 

 

long

arr[],

/* массив длинных целых - области подсчета */

int

len,

/* длина этого массива

*/

long

*ones,

/* количество 1-битов в массиве

*/

long

*zeros

/* количество 0-битов в массиве

*/

);

 

 

 

/* В массиве arr[], рассматриваемом как последовательность битов длиной 32*len, подсчитывает количество 0/1-битов, сообщая их в *zeros, *ones и возвращает 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.18. Написать тестирующую main() и следующую функцию

long BitFileCnt( char

*fn,

/* имя файла - области подсчета */

long

*ones,

/* число 1-битов в файле

*/

long

*zeros

/* число 0-битов в файле

*/

);

 

 

 

/* В файле fn, рассматриваемом как строка битов, подсчитывает количество 0/1-битов, сообщая их в *zeros, *ones и возвращает длину файла в байтах. При ошибке во входных параметрах возвращает -1, -2, ... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.19. Написать тестирующую main() и следующую функцию

int BitStrHist( char

*str,

/* текст строки - область подсчета */

int

hist[8]

/* счетчики 1-битов в каждом байте */

);

 

 

/* Подсчитывает количество единиц в каждом бите для всех байтов строки str, накапливая их в массиве hist[], где индексом массива служит номер бита в байте. Возвращает длину строки. В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.20. Написать тестирующую main() и следующую функцию

41

int BitChHist( char

arr[[],

/* массив байтов - область подсчета */

int

len,

/* длина массива байтов

*/

int

hist[8]

/* счетчики 1-битов в каждом байте

*/

);

 

 

 

/* Подсчитывает количество единиц в каждом бите для всех байтов массива arr[], накапливая их в массиве hist[], где индексом массива служит номер бита в байте. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно), иначе 0. В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.21. Написать тестирующую main() и следующую функцию

int BitIntHist( int

arr[],

/* массив целых - область подсчета */

int

len,

/* длина массива целых

*/

int

hist[16]

/* счетчики 1-битов в каждом слове */

);

 

 

 

/* Подсчитывает количество единиц в каждом бите для всех слов массива arr[], накапливая их в массиве hist[], где индексом массива служит номер бита в слове. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно), иначе 0. В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.22. Написать тестирующую main() и следующую функцию

int BitLongHist(

 

 

long

arr[],

/* массив длинных целых - область подсчета */

int

len,

/* длина этого массива

*/

long

hist[32]

/* счетчики 1-битов в каждом двойном слове */

 

);

 

 

/* Подсчитывает количество единиц в каждом бите для всех двойных слов массива arr[], накапливая их в массиве hist[], где индексом массива служит номер бита в двойном слове. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно), иначе 0. В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.23. Написать тестирующую main() и следующую функцию

long BitFileHist( char

*fn,

/* имя файла - области подсчета */

long

hist[8]

/* счетчики 1-битов в каждом байте */

);

 

 

 

 

42

/* Подсчитывает количество единиц в каждом бите для всех байтов файла fn, накапливая их в массиве hist[], где индексом массива служит номер бита в байте и возвращает длину файла в байтах. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.24. Написать тестирующую main() и следующую функцию

int ChStrHist( char

*str,

/* текст строки - области подсчета */

int

hist[256]

/* счетчики одинаковых байтов */

);

 

 

/* Подсчитывает количество байтов с одинаковым значением для всех байтов строки str, накапливая их в массиве hist[], где индексом массива служит значение байта. Возвращает длину строки. В

main() предусмотреть вывод времени исполнения функции в тиках.

*/

Задача 2.25. Написать тестирующую main() и следующую функцию

int ChArrHist( char

arr[],

/* массив байтов - области подсчета */

int

len,

/* длина массива байтов

*/

int

hist[256]

/* счетчики одинаковых байтов

*/

);

 

 

 

/* Подсчитывает количество байтов с одинаковым значением для всех байтов массива arr[], накапливая их в массиве hist[], где индексом массива служит значение байта. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно), иначе 0. В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.26. Написать тестирующую main() и следующую функцию

int IntArrHist(

 

 

int

arr[],

/* массив слов - области подсчета

*/

int

len,

/* длина массива слов

*/

int

hist0[256], /* счетчики одинаковых младших байтов */

int

hist1[256]

/* счетчики одинаковых старших байтов

*/

 

);

 

 

/* Подсчитывает количество байтов с одинаковым значением для всех байтов массива arr[], накапливая их в массивах hist0[] и hist1[], где индексом массива служит значение байта. При ошибке

43

во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно), иначе 0. В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.27. Написать тестирующую main() и следующую функцию

long ChFileHist( char

*fn,

/* имя файла - области подсчета */

long

hist[256]

/* счетчики одинаковых байтов */

);

 

 

/* Подсчитывает количество байтов с одинаковым значением для всех байтов файла fn, накапливая их в массиве hist[], где индексом массива служит значение байта и возвращает длину файла. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). В main() предусмотреть вывод времени исполнения функции в тиках. */

Задача 2.28. Написать тестирующую main() и следующую функцию

int TPutBitLong( int

x, int

y, /* координаты вывода

*/

long

num,

/* число для вывода

*/

int

term,

/* код символа-разделителя тетрад */

int

na,

/* атрибут цифр

*/

int

ta

/* атрибут символа-разделителя

*/

);

/* В текстовом режиме выводит число num в 2-системе счисления группами по 4 цифры (тетрадами), отделяя их друг от друга символом term с указанными атрибутами na и ta и возвращая 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */

Задача 2.29. Написать тестирующую main() и следующую функцию

int TPutOctLong( int

x, int y,

long num,

int

term,

int

na,

int

ta

);

 

/* координаты вывода

*/

/* число для вывода

*/

/* код символа-разделителя триад */

/* атрибут цифр

*/

/* атрибут символа-разделителя

*/

/* В текстовом режиме выводит число num в 8-системе счисления группами по 3 цифры (триадами), отделяя их друг от друга символом term с указанными атрибутами na и ta и возвращая 0. Разбиение на триады производится справа налево. В неполной триаде

44

всегда выводятся левые нули. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятель-

но).*/

Задача 2.30. Написать тестирующую main() и следующую функцию

int TPutDecLong( int

x, int

y, /* координаты вывода

*/

long

num,

/* число для вывода

*/

int

term,

/* код символа-разделителя триад */

int

na,

/* атрибут цифр

*/

int

ta

/* атрибут символа-разделителя

*/

);

 

 

 

/* В текстовом режиме выводит число num в 10-системе счисления группами по 3 цифры (триадами), отделяя их друг от друга символом term с указанными атрибутами na и ta и возвращая 0. Разбиение на триады производится справа налево. Перед выводом цифр выводит знак числа: "+" или "-". При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно).*/

Задача 2.31. Написать тестирующую main() и следующую функцию

int TPutHexLong( int

x, int

y, /* координаты вывода

*/

long

num,

/* число для вывода

*/

int

term,

/* код символа-разделителя тетрад */

int

na,

/* атрибут цифр

*/

int

ta

/* атрибут символа-разделителя

*/

);

 

 

 

/* В текстовом режиме выводит число num в 16-системе счисления группами по 4 цифры (тетрадами), отделяя их друг от друга символом term с указанными атрибутами na и ta и возвращая 0. Разбиение на триады производится справа налево. В левой тетраде всегда выводятся левые нули. При ошибке во входных параметрах воз-

вращает -1, -2,... по типу ошибки (доопределить самостоятельно).

*/

Задача 2.32. Написать тестирующую main() и следующую функцию

int TPutHist8( int

y,

/* номер строки вывода на экране

*/

long

hist[8],

/* счетчики 8 каналов

*/

int

sym,

/* символ гистограммы

*/

int

ca,

/* атрибут имени канала

*/

int

ha,

/* атрибут гистограммы

*/

45

int

da,

/* атрибут значения счетчика

*/

int

pa

/* атрибут доли счетчика в процентах */

);

/* В текстовом режиме начиная со строки y выводит 8 строк гистограммы по следующему шаблону (sym = '*', i - номер канала с 0):

hist[i]!*************

13

35.6 %.

имя

гистограмма

значение счетчика

канала

канала

 

доля счетчика

При необходимости проводит масштабирование и в этом случае выводит дополнительную 9-ю строку по следующему шаблону:

Каждый символ "*" = 3 (коэффициент масштаба)

При нормальном входе возвращает 0, при ошибке во входных параметрах сразу возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */

Задача 2.33. Написать тестирующую main() и следующую функцию

int TPutHist( int

hist[],

/* счетчики каналов

*/

int

hmax,

/* количество каналов

*/

int

lines,

/* количество строк показа

*/

int

sym,

/* символ гистограммы

*/

int

ca,

/* атрибут имени канала

*/

int

ha,

/* атрибут гистограммы

*/

int

da,

/* атрибут значения счетчика

*/

int

pa

/* атрибут доли счетчика в процентах */

);

 

 

 

/* В текстовом режиме начиная со строки 0 экрана выводит lines строк гистограммы по следующему шаблону (sym = '*', i - номер канала с 0):

hist[i]!************

12

17.1 %.

имя

гистограмма

значение счетчика

канала

канала

 

доля счетчика

Реакция на управляющие клавиши:

kbESC

- выход из функции;

kbPGUP

- на (lines-1) строк вверх по массиву hist[];

 

46

kbPGDN

- на (lines-1)

строк вниз по массиву hist[];

kbHOME

- показ

первых

lines строк;

kbEND

- показ

последних lines строк;

При нормальном входе возвращает 0, при ошибке во входных параметрах сразу возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */

Задача 2.34. Написать тестирующую main() и следующую функцию

int TFrameDraw(

 

 

 

 

int

x,

int

y,

/* координаты рамки

*/

int

xend, int

yend,

 

 

int

fsym,

 

 

/* начальный символ рамки

*/

int

tsym,

 

 

/* символ-заполнитель ее внутренности */

int

sa,

 

 

/* атрибут "чистого" экрана

*/

int

fa,

 

 

/* атрибут символа рамки

*/

int

ta

 

 

/* атрибут символа-заполнителя

*/

 

);

 

 

 

 

/* В текстовом режиме очищает экран и рисует прямоугольную рамку символом fsym с заполнением ее внутренности символом tsym с указанными атрибутами. После этого ожидает нажатия любой клавиши: при нажатии kbESC очищает весь экран и выходит, при любой другой - код этой клавиши становится символом fsym и рисуется новая рамка. При нормальном входе возвращает 0, при ошибке во входных параметрах сразу возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */

Задача 2.35. Написать тестирующую main() и следующую функцию

int TFrameSize(

 

 

int

x, int y,

/* координаты рамки

*/

int

xend, int

yend,

 

int

fsym,

/* начальный символ рамки

*/

int

tsym,

/* символ-заполнитель ее внутренности */

int

fa,

/* атрибут символа рамки

*/

int

ta

/* атрибут символа-заполнителя

*/

 

);

 

 

/* В текстовом режиме рисует прямоугольную рамку символом fsym с заполнением ее внутренности символом tsym с указанными атрибутами. После этого ожидает нажатия любой клавиши и выполняет:

kbESC

- выходит из функции;

 

47

kbF1...kbF10 - установить step = 1...10;

kbUP

- увеличить на

step высоту рамки;

kbDN

- уменьшить на

step высоту рамки;

kbRT

- увеличить на

step ширину рамки;

kbLT

-

уменьшить на

step ширину рамки;

kbHOME

-

восстановить

исходные размеры рамки.

При нормальном входе возвращает 0, при ошибке во входных параметрах сразу возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */

Задача 2.36. Написать тестирующую main() и следующую функцию

int TFrameMove(

 

 

int

x, int y,

/* координаты рамки

*/

int

xend, int

yend,

 

int

fsym,

/* начальный символ рамки

*/

int

tsym,

/* символ-заполнитель ее внутренности */

int

fa,

/* атрибут символа рамки

*/

int

ta

/* атрибут символа-заполнителя

*/

 

);

 

 

/* В текстовом режиме рисует прямоугольную рамку символом fsym с заполнением ее внутренности символом tsym с указанными атрибутами. После этого ожидает нажатия любой клавиши и выполняет:

kbESC

- выходит из функции;

kb0...kb9

- установить step = 1...10;

kbUP

- сдвинуть рамку на step позиций вверх;

kbDN

- сдвинуть рамку на step позиций вниз;

kbRT

- сдвинуть рамку на step позиций вправо;

kbLT

- сдвинуть рамку на step позиций влево;

kbHOME

- восстановить исходное положение рамки.

При ошибке во входных параметрах сразу возвращает -1,-2,... по типу ошибки (доопределить самостоятельно), иначе 0. */

Задача 2.37. Написать тестирующую main() и следующую функцию

int far GStrRunXR(

 

 

int

left, int top,

/* координаты рамки со строкой

*/

int

right, int bottom,

/* показа на экране

*/

char far *text,

/* текст строки сообщения

*/

48

int

fcolor,

/* цвет рамки,

*/

int

tcolor,

/* цвет текста,

*/

int

bcolor

/* цвет фона, все на время функции */

 

);

 

 

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

но). */

Задача 2.38. Написать тестирующую main() и следующую функцию

int far GStrRunXL(

 

 

int

left, int top,

/* координаты рамки со строкой

*/

int

right, int bottom,

/* показа на экране

*/

char far *text,

/* текст строки сообщения

*/

int

fcolor,

/* цвет рамки,

*/

int

tcolor,

/* цвет текста,

*/

int

bcolor

/* цвет фона, все на время функции */

 

);

 

 

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

но). */

Задача 2.39. Написать тестирующую main() и следующую функцию

int far GStrRunYD(

 

 

int

left, int top,

/* координаты рамки со строкой

*/

int

right, int bottom,

/* показа на экране

*/

char far *text,

/* текст строки сообщения

*/

int

fcolor,

/* цвет рамки,

*/

int

tcolor,

/* цвет текста,

*/

int

bcolor

/* цвет фона, все на время функции */

 

);

 

 

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

но). */

49

Задача 2.40.

Написать тестирующую main() и следующую

функцию

 

 

 

 

int far GStrRunYU(

 

 

 

int

left, int top,

/* координаты рамки со строкой

*/

int

right, int

bottom,

/* показа на экране

*/

char far *text,

/* текст строки сообщения

*/

int

fcolor,

 

/* цвет рамки,

*/

int

tcolor,

 

/* цвет текста,

*/

int

bcolor

 

/* цвет фона, все на время функции */

 

);

 

 

 

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

вращает -1, -2,... по типу ошибки (доопределить самостоятельно).

*/

Задача 2.41. Написать тестирующую main() и следующую функцию

int far GPutBitLong( int

x, int y,

/* координаты вывода

*/

long num,

/* число для вывода

*/

int

term,

/* символ-разделитель тетрад */

int

dcolor,

/* цвет цифр

*/

int

tcolor

/* цвет символа-разделителя

*/

);

 

 

 

/* В графическом режиме выводит число num в 2-системе счисления группами по 4 цифры (тетрадами), отделяя их друг от друга символом term с указанными цветами и возвращая 0. При ошибке во входных параметрах возвращает -1, -2,... по типу ошибки (доопределить самостоятельно). */

Задача 2.42. Написать тестирующую main() и следующую функцию

int far GPutOctLong( int

x, int y,

/* координаты вывода

*/

long

num,

/* число для вывода

*/

int

term,

/* символ-разделитель триад */

int

dcolor,

/* цвет цифр

*/

int

tcolor

/* цвет символа-разделителя */

);

 

 

 

/* В графическом режиме выводит число num в 8-системе счисления группами по 3 цифры (триадами), отделяя их друг от друга символом term с указанными цветами и возвращая 0. Разбиение на триады производится справа налево. В неполной триаде всегда

50