- •Оглавление
- •2.6. Модульное программирование
- •2.8. Численные методы анализа
- •2.1. Элементы языка
- •Мантисса e порядок
- •2.2. Операторы языка
- •Input [приглашение ;/,] список_вводимых_переменных
- •Операторы управления
- •If логическое_условие then оператор
- •If логическое_условие goto метка_оператора
- •If логическое_условие then оператор else оператор
- •I f логическое_условие then
- •2.3. Организация ветвлений
- •Input “Укажите х”, X
- •15 ? “Неверно”
- •2.4. Организация циклов
- •Программа к задаче 9
- •Input "Введите числа X и y", X, y
- •2.5. Работа с массивами
- •Input "Введите число вкладчиков и процент ",n,p
- •2.6. Модульное программирование
- •2.7. ОбРаботка Символьных данных
- •Пример. ?instr(”Саша”,”а”),instr(3,”Саша”,”а”) Результат: 2,4
- •2.8. Численные методы анализа
- •Input “Введите левую и правую границы a и в ”, a, b,
- •Input “Введите допустимую погрешность e ”, e
- •2.9. Выявление нажатия клавиш
- •2.10. Работа с графикой
- •2.11. Работа с дисковыми файлами
- •Тесты по курсу
- •Литература
Input "Введите число вкладчиков и процент ",n,p
DIM x(n,5)
FOR i=1 TO n
FOR j=1 TO 4
PRINT"Введите остаток по вкладу номер" i "за" j "квартал ";
INPUT x(i,j)
NEXT j,i
s=0
PRINT" Счет Остатки по кварталам ВСЕГО"
PRINT" I II III IV"
FOR i=1 TO n
x(i,5)=х(i,4)+(р/100)*(х(i,1)+х(i,2)+х(i,3)+х(i,4))/4
PRINT USING "########"; i,x(i,1),x(i,2),x(i,3),x(i,4),x(i,5)
s=s+x(i,5)
NEXT
PRINT "Сумма всех вкладов =" s;
PRINT "Средняя величина вклада =" s/n
Задача 12. Сортировка чисел в массиве. Пусть имеется вектор чисел Х длиной N. Напечатать массив в порядке убывания значений его элементов.
Алгоритм реализуется при помощи двух вложенных циклов (рис. 2.5.1). В наружном цикле последовательно перебираются числа X(i) в массиве и во вложенном цикле сравниваются со всеми оставшимися числами справа от данного X(j). Если выясняется, что какое-то из Х(i) меньше сравниваемого, они меняются местами – большее число становится на место меньшего. В программе для упрощения в качестве элементов массива взяты их номера i. Если вектор имеет длину четыре (Х(4)), то будет выполнена следующая последовательность перестановок чисел массива: 1,2,3,4; 2,1,3,4; 3,1,2,4; 4,1,2,3; 4,3,2,1.
Программа к
задаче 12 INPUT
n
DIM x(n)
'формирование
исходного вектора
FOR i = 1 TO n: x(i) = i:
NEXT
FOR i = 1 TO n - 1
FOR j = i + 1 TO n
'если
x(i)<x(j), числа меняются местами
IF
x(i)<x(j) THEN SWAP x(j), x(i) NEXT
j
NEXT i
'вывод
результатов
FOR i = 1 TO n: PRINT
x(i): NEXT
Задача 13. Транспонирование матрицы. Операция транспонирования широко используется в линейной алгебре и заключается в перевороте элементов квадратной матрицы относительно главной диагонали (диагонали идущей сверху-вниз, слева-направо ).
Н а рис. 2.5.2 приведены исходная и транспонированная матрица А размерности 6 на 6. Если внимательно приглядеться, можно заметить, что элементы массива с индексами I и J поменялись местами элементами с индексами J и I, т.е. A(I,J) A(J,I).
Программа транспонирования изображена ниже. В качестве наполнения исходной матрицы используются ее индексы.
Программа к задаче 13 и 14
n=6: DIM a(n, n)
'ввод данных
FOR i=1 TO n: FOR j=1 TO n: a(i, j)=10*i+j: NEXT j: NEXT i
FOR i = 1 TO n 'прямое транспонирования
FOR j = 1 TO i: SWAP a(i, j), a(j, i): NEXT
NEXT
'вывод матрицы
FOR i=1 TO n: FOR j=1 TO n: PRINT a(i, j); :NEXT:PRINT: NEXT
FOR i=1 TO n 'обратное транспонирование
FOR j=1 TO n-i: SWAP a(i, j),a(n+1-j, n+1-i): NEXT
NEXT
F OR i=1 TO n: FOR j=1 TO n: PRINT a(i, j); :NEXT:PRINT: NEXT 'вывод
I\J |
1 |
2 |
3 |
4 |
5 |
|
1 |
2 |
3 |
4 |
5 |
|
1 |
2 |
3 |
4 |
5 |
1 |
11 |
12 |
13 |
14 |
15 |
|
11 |
21 |
31 |
41 |
51 |
|
55 |
45 |
35 |
25 |
15 |
2 |
21 |
22 |
23 |
24 |
25 |
|
12 |
22 |
32 |
42 |
52 |
|
54 |
44 |
34 |
24 |
14 |
3 |
31 |
32 |
33 |
34 |
35 |
|
13 |
23 |
33 |
43 |
53 |
|
53 |
43 |
33 |
23 |
13 |
4 |
41 |
42 |
43 |
44 |
45 |
|
14 |
24 |
34 |
44 |
54 |
|
52 |
42 |
32 |
22 |
12 |
5 |
51 |
52 |
53 |
54 |
55 |
|
15 |
25 |
35 |
45 |
55 |
|
51 |
41 |
31 |
21 |
11 |
|
Исходная матриц |
|
Транспонирование относительно главной диагонали |
|
Транспонирование относительно неглавной диагонали |
Рис. 2.5.2
З адача 14. Транспонирование матрицы относительно неглавной диагонали ( ). Здесь зависимость между индексами не столь прозрачна. Для того, что бы найти ее, следует начертить новый вид (рис.2.5.2 справа) матрицы, а также, возможно, таблицы исходных (Iи,Jи) и новых (Iн,Jн) индексов (рис. 2.5.3). Если выписать исходные и новые индексы (рис. 2.5.4), можно обратить внимание, что сумма Jи и Iн постоянна и равна N+1. Аналогично Iи+Jн=N+1. Отсюда можно выписать необходимые зависимости исходных и новых индексов A(I,J) A(N+1–J,N+1–I).
IиJи |
IнJн |
|
IиJи |
IнJн |
|
IиJи |
IнJн |
|
IиJи |
IнJн |
|
Jи |
Iн |
|
Iи |
Jн |
11 |
55 |
|
12 |
45 |
|
13 |
35 |
|
14 |
25 |
|
1 |
5 |
|
1 |
5 |
21 |
54 |
|
22 |
44 |
|
23 |
34 |
|
|
|
|
2 |
4 |
|
2 |
4 |
31 |
53 |
|
32 |
43 |
|
|
|
|
|
|
|
3 |
3 |
|
3 |
3 |
41 |
52 |
|
|
|
|
|
|
|
|
|
|
4 |
2 |
|
4 |
2 |
Рис. 2.5.3 Рис. 2.5.4
В программу, изображенную выше, включен фрагмент, относящийся к обратному транспонированию. Как видим, программирование обработки массивов может быть достаточно сложным, требующем вспомогательных выкладок и сообразительности. В любом случае сначала следует отобразить наполнение матрицы до и после преобразований и только затем искать функции, связывающие индексы их элементов.
Задачи для самостоятельного решения.
1. Переместить элементы массива Х в массив Y таким образом, чтобы в нем сначала оказалась первая половина исходного массива X, а затем вторая половина.
1 |
2 |
3 |
4 |
5 |
6 |
X |
|
|
|
|
|
|
|
4 |
5 |
6 |
1 |
2 |
3 |
Y |
2. Переписать все элементы массива Х для 3<X(i)<10 в начало массива Y, подсчитать их количество и среднее арифметическое. В примере количество чисел, удовлетворяющих условию – 3. Среднее арифметическое – 18/3=6
1 |
4 |
2 |
8 |
6 |
0 |
Х |
|
|
|
|
|
|
|
4 |
8 |
6 |
|
|
|
Y |
3. Найти в массиве Х все стоящие смежно элементы с одинаковыми значениями и напечатать их номера. В примере номера равных смежных элементов: 2,3 и 5,6
2 |
5 |
5 |
8 |
4 |
4 |
4. В квадратной матрице Х(N,N) реальной размерности N найти максимальный элемент. Вывести его значение и индексы (X(Imax,Jmax) и Imax, Jmax). Поменять местами элементы строки Imax и столбца Jmax, на пересечении которых он находится.
Вариант 4 Вариант 5 Вариант 6
5. В матрице Х(N,M) вычислить число положительных элементов в каждой строке и занести их в вектор A(N) и сумму отрицательных элементов в каждом столбце и занести их в вектор B(M). Результаты вывести следующим образом. Справа рядом с исходной матрицей выдать вектор А. Под матрицей вывести вектор В.
6. Поменять местами любые два столбца матрицы Х с номерами К и L.
7. Имеется двухмерный массив А длиной N строк (A(N,2)), в котором содержится информация о товаре в магазине. В каждой строке два элемента. Первый является ценой товара, второй – числом единиц этого товара. Составить программу вычисления стоимости всего товара S в магазине и средней цены единицы товара SR. Сделать проверочные выкладки для N=3. В качестве цены товара (в тыс. рублей) следует последовательно использовать цифры натурального ряда. Число единиц каждого товара взять произвольным.