Шереметев Информатика. Сборник домашних заданий 2009
.pdfтельно). В 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