Управление программой с помощью клавиатуры 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Управление программой с помощью клавиатуры



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

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

Клавиши, не имеющие графического изображения:

ß à PgUp PgDn Del End Home и т.п.

Каждая клавиша имеет расширенный код символа, занимающий 2 байта. Если в нем младший байт не равен 0, то в нем хранится ASCII -код символа, если он равен 0, то в старшем байте находится сканкод клавиши, характерный только для IBM PC. Все управляющие клавиши, кроме клавиш Esc, Tab, Enter имеют нулевой младший байт, поэтому приходится по-разному обрабатывать управляющие и обычные символы. Более того, для управления программой можно использовать сочетания клавиш типа: Shift + Tab, Alt + F1, Ctrl + F10 и т.п., которые имеют свои расширенные коды.

Байт 2 Байт 1

Расширенный код клавиатуры: Сканкод ASCII -код

Для чтения символов с клавиатуры без отображения на экран используются функции:

- getch (),

- int bioskey (in t cmd); à Прототип в файле bios.h.

Возможные значения параметра cmd ={0|1|2}. Если значение cmd равно 0, то функция возвращает расширенный код клавиатуры и удаляет его из буфера клавиатуры, если буфер пуст, то ожидает нажатие клавиши. Как работает функция bioskey с параметрами {1|2}, можно посмотрить в подсказке(help) среды Borland C++ 3.1.

Пример. Фрагмент реализации простейшего текстового редактора.

#include < bios.h >

#define LEFT 19200

#define RIGHT 19712

#define HOME 18176

#define END 20224

#define DEL 21248

#define ENTER 7181

...................

flin=1;

while (flin){

cod = bioskey (0);

switch (cod){

case ENTER: /* Конец ввода */

flin = 0; break;

case LEFT: /* Влево на 1 символ */

.......

break;

case RIGHT: /* Вправо на 1 символ */

.......

break;


case HOME: /* В начало строки */

.......

break;

case END: /* В конец строки */

.......

break;

case DEL: /* Удалить символ над курсором */

.......

break;

default: /* Ввод символа */

cod &= 0x00ff;

if (cod >= 040){ /* Нормальный символ */

.........

}

} /* End switch */

..........

} /* End while */

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

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

Пример.

cod1 = getch (); // Читаем младший байт

if (cod1 == 0){ // Читаем старший байт

cod2 = getch ();

}

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Каков состав расширенного кода клавиатуры?

2. Как выделить из прочитанного расширенного кода содержимое младшего байта(ASCII -символ)?

Контрольные вопросы

1. В чем отличие процесса чтения расширенного кода функциями bioskey и getch?

2. Какую инструкцию удобно использовать для управления программой с помощью клавиатуры?

 

ЗАДАЧИ

Элементарные конструкции

1. Какие нижеприведенных записей являются можно использовать в качестве имен:

X Begin a[3] 3D_Studuo Step1 sin(x) CTEK a15x Str.X a1 конец _XX x_x

2. Какие из записей ниже являются целыми литералами:

0 +006 -45 3..55 0712 &034 0xabc 0X12a5 &habc &H12A5

3. Какие из записей ниже можно считать литералами с плавающей точкой:

-123.4 34.05 75. -.05 0.0123 -34.593E-12 -2e5 1D15 d-23 1e1 -1e-1.2 0E-3

4. Записать на языках C и Basic следующие арифметические выражения:

a)

б)

в)

г)

 

д)

е)

5. Определить число сотен натурального числа.

6. Дано трехзначное натуральное число n. Записать его в обратном порядке, например, 456 ® 654.

7. Записать логическое выражение, принимающее значение true, если точка М (x,y) попадает в заштрихованную область:

a) y б) y

x -1 1 x

1 2

 

-1


в) y г) y

2 2

1 x

-2 1 2 x

-1 1

 

-2

8. Записать логическое выражение, принимающее значение true, если из отрезков с длинами x, y, z можно составить треугольник.

9. Начертить на плоскости XY области, в которой перечисленные ниже выражения принимают значения true (выражения записаны на языке C):

а) x2+y2<=1 || x>0

б) x>y == y>0

в) x+y<=1 || x>=0 &&!(y<0)

г) x2+y2<1 && y>=x ==y>.5

Простые циклы

1. Вычислить и напечатать таблицу функции:

2x3/(x2+1), если |x|<3

y =

1.5|tg p/x|, если |x|>=3.

x изменяется от –6 до 6 с шагом Dx=1.

2. Вычислить и напечатать таблицу функции:

e-x sin 2x, если x<0.4

y =

ln x cos px, если x>=0.4.

x изменяется от –2 до 2 с шагом Dx=0.2.

3. Найти сумму ряда un=n/(n2+1), n=1...¥. Вычисления прекратить при достижения условия un < 10-5.

4. Найти сумму элементов последовательностей, заданных ниже. Вычисления прекратить при выполнении условия: |un|<10-5.

а) un=xn/(2n)!

б) un=x2nsin(xn)/n2.

5. Вычислить cos 15x по формуле:

cos nx = cos (n-1)x cos x – sin (n-1)x sin x,

где cos x = 0.15, sin x = Ö(1 – cos2x).

6. Дано целое M(M > 1). Найти наибольшее целое к, при котором 4k < M.

7. Дан массив: {xi}, i = 1...25. Переставить элементы массива в обратном порядке. Вспомогательный массив не использовать.

8. Дан массив: {xi}, i = 1...25. Найти максимальный по модулю элемент массива.

9. Дан массив: {xi}, i = 1...25. Сформировать массив {yi}, i = 1...25 по правилу:

{x25,..., x3, x1, x2, x4,..., x24}.

10. Дан массив: {xi}, i = 1...25, задающий рост студентов в группе. Определить, выстроены ли они по росту.

11. Дан массив: {xi}, i = 1...25. Определить число "соседств" 2-х положительных чисел.

12. Дан массив: {xi}, i = 1...25. Найти максимальный и минимальный элементы и поменять их местами.

 

13. Даны массивы: {xi}, i = 1...25, {yi}, i = 1...25. Преобразовать их элементы следующим образом: xi=max(xi,yi), yi= min(xi,yi).

14. Дан массив: {xi}, i = 1...25. Найти сумму элементов, меньших максимального.

15. Дан массив: {xi}, i = 1...25. Поменять местами наибольший из отрицательных и наименьший из положительных элементов.

16. Дан массив: {xi}, i = 1...25. Сформировать массив {yi}, i = 1...25 по правилу: расположить все неотрицательные элементы массива x в порядке их следования, затем все отрицательные.

17. Вычислить:

18. Дан целый массив: {xi}, i = 1...25. Выбросить из него все элементы, равные max xi.

19. Дан массив: {xi}, i = 1...25. Найти Sykzk, где yk – отрицательный элемент массива {xi} в порядке следования, zk – неотрицательный элемент того же массива в обратном порядке.

20. Создать целый массив {xi}, i = 1...n, состоящий из чисел Фибоначчи. Числа Фибоначчи вычисляются по формуле: a0=a1=1; an=an-1+an-2.

21. Заданы 20 материальных точек на плоскости. Каждая точка характеризуется массой m и 2 координатами: x и y. Найти центр "тяжести" этих точек. Расчетные формулы:

xц = Sxi mi / Sxi yц = Syi mi /yi, i = 1...20.

22. Дана матрица {aij}, i =1...10, j = 1...10. Поменять местами элементы строки k с элементами столбца m, сохраняя прежний порядок их следования.

23. Дан упорядоченный по возрастанию значений элементов массив: {xi}, i = 1...25 и дано произвольное значение b. Вставить это значение в массив так, чтобы не нарушилась упорядоченность.

24. Дан массив: {xi}, i = 1...25. Преобразовать массив {xi}, i = 1...24 исключением из него минимального элемента массива с сохранением порядка следования остальных элементов массива x.

25. Известны координаты на плоскости n вершин ломаной линии, заданные в порядке обхода. Определить ее длину.

26. Дан массив: {xi}, i = 1...25. Найти возрастающую подпоследовательность наибольшей длины.

27. Дано натуральное число. Выяснить, равен ли квадрат числа сумме его цифр

28. Дано натуральное число. Является ли оно палиндромом? Примеры палиндромов: 2222, 6116, 0440 и т.д.

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

Вложенные циклы

1. Даны координаты 25 точек на плоскости. Найти сумму всех попарных расстояний между точками.

2. Дана матрица {aij}, i =1...10, j = 1...10. Найти индексы максимального элемента. Если их несколько, взять первый из них.

3. Дана матрица {aij}, i =1...10, j = 1...10. Определить, является ли она симметричной, т.е. каждый ее элемент aij при i ¹ j должен быть равен элементу aji.

4. Дано натуральное число n. Вычислить:

1*2+2*3*4+… +n*(n+1)*…2n.

5. Дана матрица {aij}, i =1...10, j = 1...10. Разделить ее элементы на максимальный по модулю элемент.

6. Дана матрица {aij}, i =1...10, j = 1...10. Найти сумму элементов, лежащих на главной диагонали и на двух смежных симметрично расположенных линиях.

7. Дана матрица {aij}, i =1...10, j = 1...10. Найти сумму элементов строк матрицы с отрицательным элементом на побочной диагонали.

8. Дана матрица {aij}, i =1...10, j = 1...10. Сформировать массив {bi}, i = 1...10 по правилу:

1, если число положительных элементов I -й строки не меньше числа отрица-

bi = тельных,

0, в противном случае.

9. Дана матрица {aij}, i =1...10, j = 1...10. Сформировать 2 массива, компоненты которых вычисляются по формулам: xi=max aji, yi=min aji.

10. Дана матрица {aij}, i =1...10, j = 1...10. Определить среднее арифметическое каждого столбца.

11. Дана матрица {aij}, i =1...10, j = 1...10. Сформировать матрицу {bkm}, k =1...9, m = 1...9 вычеркиванием строки с номером L и столбца с номером N.

12. Дан массив: {xi}, i = 1...25. Отсортировать его по убыванию значений элементов следующим образом:

- найти максимальный элемент и поменять его с первым;

- повторять предыдущий пункт, начиная со второго элемента, третьего и т.д.

13. Дана матрица {aij}, i =1...10, j = 1...10. Найти максимальный среди элементов, лежащих ниже главной диагонали.

14. Дана матрица {aij}, i =1...10, j = 1...10. Найти произведение элементов, лежащих одновременно выше главной и побочной диагонали.

15. Дана матрица {aij}, i =1...10, j = 1...10. Сформировать массив {bi}, i = 1...10 по правилу:

1, если ai1>=ai2>=...ai10

bi =

0, в противном случае.

16. Дана матрица {aij}, i =1...10, j = 1...10. Найти y = Sxi x11-i, i = 1...10, где xi максимальный элемент i- й строки.

17. Дана матрица {aij}, i =1...10, j = 1...10. Сформировать массив {bi}, i = 1...9 по правилу: bi = количеству отрицательных элементов в i -й линии, параллельной побочной диагонали, проходящей выше нее.

18. Дана матрица {aij}, i =1...10, j = 1...10. Найти второй по величине элемент каждой строки.

19. Дана матрица {aij}, i =1...10, j = 1...10. Поменять местами элементы, симметричные относительно:

- главной диагонали;

- вертикальной оси симметрии;

- побочной диагонали.

20. Дана матрица {aij}, i =1...10, j = 1...10. Поменять местами столбцы, содержащие минимальный и максимальный элементы матрицы.

21. Дана целая матрица {aij}, i =1...10, j = 1...10. Определить количество максимальных по модулю компонент.

22. Дана целая матрица {aij}, i =1...10, j = 1...10. Найти индексы всех максимальных элементов.

23. Дана матрица {aij}, i =1...10, j = 1...10. Вычислить норму матрицы:

а)

б)

24. Решить уравнение x3-3x2-5x+1=0 методом деления интервала пополам. Интервал изоляции корня [-1; 1.8]. Точность вычисления e = 10-5.

25. Решить уравнение x+ln(x+0.5)-0.5=0 методом деления интервала пополам. Интервал изоляции корня [0; 2]. Точность вычисления e = 10-5.

26. Дана матрица {aij}, i =1...10, j = 1...10. Найти максимальный среди элементов строк, упорядоченных по убыванию. Если строка не упорядочена, то ее элементы не рассматриваются.

27. Дана матрица {aij}, i =1...10, j = 1...10. Упорядочить элементы каждой строки по убыванию, а сами строки расположить по возрастанию суммы элементов строк.

28. Дан целый массив {xi}, i = 1...25. Получить в порядке возрастания все различные числа в нем.

29. Даны 25 интервалов на числовой оси, которые, возможно, пересекаются. Преобразовать массив в совокупность непересекающихся интервалов. Найти их количество.

30. Дано натуральное число n. Найти все "тройки" пифагоровых чисел (a2+b2=c2), для которых выполняется условие: a<=b<=c<=n.

31. Даны n точек на плоскости. Выбрать 2 из них такие, что количества точек, лежащих по разные стороны от прямой, проходящей через эти 2 точки, различались наименьшим образом.

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

1 1

1 2 1

1 3 3 1

1 4 6 4 1

………….

33. Дана матрица {aij}, i =1...10, j = 1...10. Начиная с центра, обойти по спирали по часовой стрелке все ее элементы, включая их в порядке обхода в массив {xi}, i = 1...100.

34. Дан массив {aik}, I = 1…25, k = 1…3; где (ai,1, ai,2) – координаты центра I -й окружности, ai,3 – ее радиус. Найти число окружностей, пересекающихся с любой из остальных.

35. Даны целые массивы: {xi}, i = 1...25, {yi}, i = 1...25. Построить:

- пересечение этих множеств;

- объединение их.

Повторяющиеся числа массивов должны быть входить в результат только 1 раз.

Процедуры

Все решения в зависимости от условия задачи оформить в виде функции или подпрограммы.

1. Даны 2 натуральных числа n и m(m<=n). Определить сумму m последних цифр числа n.

2. Известны данные о среднесуточной температуре за каждый день месяца. Определить:

- количество дней, когда температура была ниже 00C;

- среднюю температуру месяца.

3. Даны 4 числа, большие 0. Выяснить, можно ли построить четырехугольник с такими длинами сторон.

4. Определить, является ли заданное натуральное число степенью двойки.

5. Дана матрица {aij}, i =1...10, j = 1...10. Сформировать массив {bi}, i = 1...10, где bi равно числу перемен знака в i -й строке.

6. Найти коэффициенты частного: c0+c1x+...+cn-1xn-1 = (a0+a1x+...anxn)/(b0+b1x).

7. Дана матрица {aij}, i =1...10, j = 1...10. Найти максимальное расстояние между строками матрицы. Расстояние Rmn определяется по формуле: |k – l|, где k - № столбца, где расположен максимальный элемент m -й строки, l - № столбца, где расположен максимальный элемент n -й строки. Если таких элементов в строке несколько, то взять первый из них.

8. Дана целая матрица {aij}, i =1...10, j = 1...10. Найти № строки, для которой максимальное число подряд стоящих равных элементов максимально. Если таких строк несколько, то взять последнюю из них.

9. По заданному натуральному числу n определить, является ли число "счастливым". "Счастливым" называют число, состоящее из 2m цифр, у которого сумма первых m цифр равна сумме последних m цифр. Пример. 256193.

10. Дана матрица {aij}, i =1...10, j = 1...10 и целые значения k и l. Преобразовать матрицу так, чтобы строка с номером l непосредственно располагалась за строкой с номером k с сохранением порядка следования остальных строк.

11. Дан массив: {xi}, i = 1...25. Переменной L присвоить значение 1, если отрицательные и неотрицательные элементы массива в порядке их следования образуют неубывающую последовательность, 0, если хотя бы одна из этих последовательностей – неубывающая, -1 – в оставшемся случае.

12. Дан массив: {xi}, i = 1...n. Отсортировать его элементы по возрастанию значений методом простых вставок /9, с.105 /.

13. Дана матрица {aij}, i =1...2n, j = 1...2n. О на разбита на 4 неперекрывающихся блока размером n*n. Перестроить матрицу, переставляя блоки по часовой стрелке с сохранением порядка следования элементов. Вспомогательный массив не использовать.

14. Дан массив: {xi}, i = 1...n, целое значение k и произвольное значение R. Элементы массива удовлетворяют условию: xi<=xi+1, i = 1...n-1. Исключить из него элемент с №, равным k, и вставить в него значение R так, чтобы не нарушить условие.

15. Дана матрица {aij}, i =1...n, j = 1...n. Найти S = min(max aij) – max(min aij).

i j j i

Вспомогательный массив не использовать.

16. Дан массив: {xi}, i = 1...n. Найти номера начального и конечного элементов последней подпоследовательности положительных элементов.

17. Дано целое значение M. Определить, делиться ли M нацело на 9. Сумма цифр M должна делиться нацело на 9.

18. В соревновании выступление спортсмена оценивают n(n>2) судей. Лучшая и худшая оценки отбрасываются. Среднее арифметическое остальныx и составляет оценку спортсмена. Определить ее.

19. Даны 2 массива: {xi}, i = 1...n и {yi}, i = 1...m, упорядоченных по неубыванию. Составить из них массив: {ck}, k = 1...m+n, также упорядоченный по неубыванию.

20. Даны упорядоченный по неубыванию массив: {xi}, i = 1...n и произвольный массив: {yi}, i = 1...m. Слить их в одну упорядоченную по неубыванию последовательность значений: {ck}, k = 1...m+n, скопировав в нее сначала массив x и перенося затем по очереди на нужное место элементы массива y.

21. Дан массив: {xi}, i = 1...n. Перестроить его по правилу: расположить сначала все неотрицательные элементы, затем все отрицательные в порядке их следования в исходном массиве. Вспомогательный массив не использовать.

22. Даны 2 матрицы: {aij}, i =1...m, j = 1...n и {bij}, i =1...n, j = 1...p. Сформировать матрицу по формуле:

cij = max(min(aik, bkj)), i = 1...m, j = 1...p.

k=1...n

Вспомогательный массив не использовать.

23. Даны 3 массива: {xi}, I=1…l; {yj}, j=1…m; {zk}, k=1…n. Процедура должна вернуть значение true (1), если отрицательный элемент в массиве z встретится не позднее, чем в массивах x и y, и значение false (0) – в противном случае.

24. Расстояние между двумя множествами точек – это расстояние между двумя наиболее близко расположенными точками этих множеств. Найти расстояние между двумя заданными множествами точек на плоскости.

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

26. Дано время в виде (h, m), где h – число часов, m – число минут. Определить наименьшее число полных минут, через которое часовая и минутная стрелки совпадут.

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

28. Дан целый массив: {xi}, i = 1...30. Определить, является ли эта последовательность чисел периодической, т.е. может ли она быть получено повторением некоторой своей начальной части. Из всех возможных периодов указать наименьший.

29. Найти все простые несократимые дроби, т.е лежащие в диапазоне (0,1), знаменатель которых не превышает 7. Использовать процедуру нахождения наибольшего общего делителя(НОД).

30. Дана целая матрица {aij}, i =1...10, j = 1...10., состоящая из нулей и единиц. Элемент матрицы равен 1, если на клеточном поле того же размера клетка принадлежит нарисованному на поле прямоугольнику, и равен 0, если нет. Прямоугольники не пересекаются и не касаются друг друга. Найти их количество.

31. Построить матрицу {aij}, i =1...n, j = 1...n, содержащую все простые числа в порядке возрастания.

32. Дано натуральное число n. Определить, имеются ли среди чисел n+1, n+2, …, 2n "близнецы", т.е. простые числа, разница между которыми равна 2.

Работа со строками

1. В последовательности символов заменить каждое вхождение слова "рот" на слово "нос".

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

3. Дана строка символов. Подсчитать количество входящих в нее символов: ",", ";", ":", пробел, а также количество оставшихся символов.

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

5. Дана строка знаков и 2 произвольных символа. Произвести замену каждого вхождения первого символа на второй.

6. Дана строка знаков. Определить число различных символов в ней.

7. Дана строка знаков. Определить, можно ли из входящих в нее символов (без повторений!) составить слово "Привет".

8. Даны 2 строки символов, причем длина первой из них больше длины второй. Определить, содержится ли вторая строка внутри первой как неразрывное целое.

9. Выполнить выравнивание строки, т.е. 1-й символ должен быть прижат к левому краю экрана, последний – к правому, пробелы между словами добавляются равномерно. Полагаем, что длина строки не больше ширины экрана. 8. Дана строка символов, представляющая собой арифметическое выражение. Определить правильность (число закрывающих должно быть равно числу открывающих) расстановки круглых скобок.

10. Определить количество символов в самой длинной последовательности идущих подряд одинаковых символов заданной строки знаков.

11. Имеется последовательность символов. Группы символов, разделенных пробелом(ами), будем считать словами. Выполнить следующие действия:

- подсчитать количество слов;

- подсчитать количество букв "а" в последнем слове;

- количество слов, начинающихся с буквы "б";

- найти количество слов, у которых первый и последний символы совпадают;

- заменить каждое вхождение слова "это" на слово "то";

- найти длину самого короткого слова.

12. Дано натуральное число n(n<1000). Сформировать строку символов, содержащую его значение на русском языке. Например, для n=769 будет "семьсот шестьдесят девять".

Разное

1. Дан массив: {xi}, i = 1...25, состоящий из натуральных чисел. Преобразовать массив так, чтобы у каждого исходного числа поменялись местами первая и последняя цифры.

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

3. Дан массив: {xi}, i = 1...25. Найти максимальную длину "пилообразной (зубьями вверх)" подпоследовательности идущих подряд чисел, т.е. ее элементы должны удовлетворять условию:

xk<xk+1>xk+2<xk+3>…

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

5. Результаты футбольного чемпионата задана в виде целой матрицы размером NxN, диагональные элементы которой равны 0, остальные равны: 3 – победа, 1 – ничья, 0 – поражение. Определить победителя. В случае равенства очков преимущество получает команда, имеющая большее число побед. Если и по этому показателю не выявлен победитель, выдать сообщение о переигровке.

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

7. Дана дата в виде: № дня в месяце, № месяца, год. Проверить ее корректность.

8. Дан порядковый № дня в году и значение года. Определить дату в виде: № дня в месяце, № месяца, год.

9. Дана дата в виде, описанном в предыдущей задаче. Найти порядковый № дня в году.

10. Определить, какой день недели будет 1 сентября текущего года.

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

12. Найти разницу в днях между 2 заданными датами.

13. Даны координаты 50 точек на плоскости. Определить № той из них, для которой круг радиуса R содержит максимальное количество точек множества.

14. Даны результаты n(n>4) бегунов на 100м, измеренные в сотых долях секунды. Отобрать 4-х лучших для участия в эстафете 4х100м.

15. На плоскости координатами своих вершин задан выпуклый n -угольник. Вершины упорядочены в порядке обхода по часовой стрелке. Найти площадь n -угольника. Площадь треугольника равна Ö p(p-a)(p-b)(p-c); p = (a+b+c)/2, где a, b, c – стороны треугольника.

16. Дана матрица {aij}, i =1...n, j = 1...n. Сформировать матрицу {bij}, i = 1...n, j = 1...n, где bij есть минимальный элемент в треугольнике, образованном главной диагональю, строкой и столбцом, содержащими элемент aij.

17. Дан массив: {xi}, i = 1...n. Определить количество "внутренних" точек массива. Элемент массива называют "внутренней" точкой, если соседние элементы имеют совпадающие с ним знаки.

18. Определить сумму всех чисел Фибоначчи, не превышающих 1000. Числа Фибоначчи определяются по формуле: a0 = a1 = 1; an = an-1 + an-2. Вспомогательный массив не использовать.

19. Дана матрица {aij}, i =1...n, j = 1...n. Каждую строку матрицы циклически сдвинуть вправо на число позиций, равное № строки.

ПРИЛОЖЕНИЯ

Приложение 1. Среда разработки Borland C++ 3.1

 
 

Основное окно интерфейса с пользователем имеет вид:

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

П1.1. Меню File (Файл)

Тексты программных (исходных) модулей сохраняются в файлах с расширением .c (язык C) или .cpp (язык C++).

New (Создать) – создает пустой файл с именем Noname.c (cpp) и открывает его в окне редактирования. Задать осмысленное имя исходному модулю можно при его сохранении. Расширение по умолчанию задается в пункте OptionsàEnvironmentàEditoràDefault Extension.

Open (Открыть) – открывает ранее созданный файл в окне редактирования. Имеется "горячая" клавиша F3. При выполнении открывается окно " Open a File ".

В поле Name (Имя) указывается полный путь к открываемому файлу. Текст " *.c " означает: показывать в окне все файлы с расширением .c, расположенные в папке, путь к которой был установлен в одном из предыдущих сеансов работы с помощью команды Change dir (Сменить директорию (папку)). Символ ¯ подсказывает, что при нажатии соответствующей клавиши будет открыто окно, содержащее пути к файлам, использовавшиеся при предыдущих запусках. Выбор пути выполняется клавишами ¯ и ­. Подстановка в поле выполняется клавишей Enter, отказ – клавишей Esc.

Следующее поле Files содержит список всех папок и файлов с заданным расширением, расположенных в папке по заданному пути. Для выбора используются те же клавиши. Клавиша Enter вызывает загрузку выбранного файла в окно редактирования или "проваливание" внутрь выбранной папки. Если объектов в поле много могут появиться аналоги полос прокрутки, которые управляются клавишами – "стрелками". Пункт "..\" позволяет подняться на 1 уровень вверх.

В правой части окна расположены аналоги кнопок, которые "нажимаются" клавишей Enter.

Open – загружает выбранный файл в окно редактирования.

Replace (Заменить) – заменяет текущий файл окна редактирования на выбранный.

Cancel (Отказаться) – закрывает окно без выбора файла.

Help (Помощь) – вызывает контекстную подсказку.

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

Переход между полями и кнопками выполняется: вперед – клавиша Tab, назад – клавиши Shift+Tab.

Все действия в окне можно также выполнять с помощью мыши.

Save (Сохранить) – сохраняет текст исходного файла активного окна редактирования без выхода из оболочки в той папке, откуда он был загружен. Имеется "горячая" клавиша F2.

Замечание. Оболочка Borland C++ 3.1 позволяет открывать произвольное число окон редактирования, в каждое из которых загружается текст .c (.cpp) или .h файла. Одно из окон является активным.

Save as (Сохранить как) – сохраняет текст исходного файла в выбранной папке с возможным изменением имени и расширения. При выборе этого пункта открывается окно, похожее на окно открытия файла. Работа в окне управляется теми же клавишами (см.выше).

Save all (Сохранить все) – команда работает аналогично команде Save, однако сохраняет изменения в текстах всех файлов в окнах редактирования, в которые были внесены изменения.

Change dir (Сменить директорию (папку)) – команда позволяет изменить текущую директорию (папку). Текущей называют папку, в которой оболочка сохраняет файлы из окон редактирования и с которой начинает просмотр файлов при открытии. Окно команды приведено рядом.

В поле Directory Name показывается полный путь к текущей директории.

Пример.

D:\KAG\LEARNING\BORLAN~2

Этот путь может быть набран на клавиатуре вручную или выбирается из поля Directory Tree. Выбор в этом поле осуществляется указанием нужной папки, нажатием кнопки Chdir (клавиша Enter) или щелчком по ней и затем нажатием кнопки OK.

Кнопка Revert отменяет последний выбор.

Quit (Выход) – закрывает окна среды пользователя и, возможно, в зависимости от настройки, сохраняет сделанные изменения. "Горячие" клавиши – Alt+X.

Пункты Print и DOS shell не рассматриваем.

П1.2. Меню Options (Установки среды)

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

Меню Compiler (Транслятор) – устанавливает опции транслятора.

Code generation (Генерация кода):

- Model (Модель памяти)à Large (Большая);

- Options à Treat enums as ints (Трактовать тип enum как целые);

à Unsigned characters (Тип char без знака);

- Assume SS equals DS à Default of memory model (В соответствии с моделью памяти).

Advanced code generation (Расширенная генерация кода):

- Floating point (Операции с плавающей точкой)à Emulation (Эмуляция);

- Instruction set (Система команд)à8088/8086;

- Options à Generate underbars (Генерировать подчеркивания);

à Debug info in OBJs (Включать отладочную информацию в объ-

ектный код);

à Fast floating point (Оптимизация операций с плавающей точкой);

à Automatic far data (Для данных класса automatic использовать

far указатели).

Entry/exit code (Код входа-выхода):

- Prolog/epilog code generation (Генерация кода пролога/эпилога)à DOS

Standard;

- Calling convention (Соглашения по вызову процедур)à C;

- Stack options (Режим обработки стека)à Standard stack frame (Стандарт-

ный) и Test stack overflow (Контроль переполнения стека).

C++ options:

- Use C++ compiler (Использование С++ компилятора)à CPP extension (Для

файлов с расширением .cpp);

- остальные не трогать.

Optimizations (Оптимизация кода):

- Optimizations à Standard stack frame; остальные "флажки" сбросить;

- Register variables (Регистровые переменные)à Automatic;

- Common subexpressions (Общие подвыражения)à No optimization;

- Optimize for (Оптимизация по)à Size (по размеру кода).

Source (Исходный код):

- Keywords (Ключевые слова)à Borland C++;

- Source options à Nested comments (Вложенные комментарии);



Поделиться:


Последнее изменение этой страницы: 2017-02-08; просмотров: 485; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.145.191.22 (0.237 с.)