Академический Документы
Профессиональный Документы
Культура Документы
К У Р С О В А Я Р А Б О Т А
по дисциплине «Практикум на ЭВМ»
вариант № 45
Выполнил
студент гр. (Антропов М.И.)
3430302/90002
<подпись> <фамилия и.о.>
Преподаватель
( Капралов В.Г.)
доц. к. ф.-м. н.
<должность, уч. степ.> <подпись> <фамилия и.о.>
Санкт-Петербург
2020
Содержание:
1. Задание M5023 (Создание, сохранение и использование функции и
подфункции, ввод/вывод).............................................................................................2
1.1. Постановка задачи..............................................................................................2
1.2. Пояснения к решению........................................................................................2
1.3. Листинг исходного кода программы................................................................3
1.4. Список файлов....................................................................................................3
2. Задание F1104 (Оператор IF)....................................................................................4
2.1. Постановка задачи..............................................................................................4
2.2. Пояснения к решению........................................................................................4
2.3. Листинг исходного кода программы................................................................4
2.4. Список файлов....................................................................................................5
3. Задание F1303 (Длинная арифметика)....................................................................4
3.1. Постановка задачи..............................................................................................4
3.2. Пояснения к решению........................................................................................4
3.3. Листинг исходного кода программы................................................................5
3.4. Список файлов....................................................................................................7
4. Задание F1401 (Вставка элемента в массив)...........................................................4
3.1. Постановка задачи..............................................................................................4
3.2. Пояснения к решению........................................................................................4
3.3. Листинг исходного кода программы................................................................5
3.4. Список файлов....................................................................................................7
1
1. Задание M5023 (Создание, сохранение и использование функции и
подфункции, ввод/вывод)
1.1. Постановка задачи
1) Создать вектор-столбец С из 10 элементов. Вектор заполнить
последовательными значениями от 1 до 10 с шагом 1. Используя вектор С,
создать квадратную матрицу Т, которую заполнить построчно значениями
от 1 до 100 с шагом 1.
2) Определить подфункцию, которая принимает два аргумента и возвращает
два значения. Первое значение - сумма аргументов, а второе - разность
аргументов.
3) Определить функцию, которая применяет подфункцию к матрице Т и
сформировать матрицу U, в нечетных строках которой расположена
разность элементов матрицы Т из одноименной и следующей строки,
U(k, m) = T(k,m) - T(k+1,m), k=2n+1, n=0…4
а в четных строках - расположена сумма элементов матрицы Т из
одноименной и предыдущей строки.
U(k, m) = T(k,m) + T(k-1,m) , k=2n, n=1…5
4) С помощью функции save записать в текстовый файл значения матриц T, U
и последние значения двух векторов, возвращаемых подфункцией из п.2.
Разделитель - пробел.
5) С помощью функции dlmread прочитать все содержимое текстового файла
в матрицу V.
6) Сформировать из матрицы V матрицы T1, U1 и вектора R1 и R2
совпадающие по структуре и значениям с данными, сохраненными ранее в
файл в п.4.
7) Cохранить сценарий в файл *.m.
1 newmatr.m:
2 function[U]=newmatr(T)
3 global k;
4 for i=1:1:5
5 k=2*i-1;
6 [U(k, :),U(k+1,:)] = subfunc(T(k,:),T(k+1,:));
7 end
8 end
1 subfunc.m:
2 function [y1,y2] = subfunc(x1,x2)
3 y1 = x1-x2;
4 y2 = x1+x2;
5 end
2.2.Пояснения к решению
(1-4) Заголовок
(9) Объявляем переменные
(11-15) Печать заголовка
(17) Открываем файл input1104.txt
(18) Считываем координаты первого X1, Y1 и второго X2, Y2 полей
(19-20) Вычисляем разницу X3 и Y3 между соответствующими
координатами (конь ходит так, что номер столбца меняется 2 и при этом
номер строки – на 1, или так, что номер столбца – на 1, а номер строки –
на 2, поэтому необходимое условие возможности хода коня – это
изменение координат именно таким образом)
(22-25) Проверяем может ли совершить шахматный конь ход,
соответствующий считанным координатам, если может, то печатаем
сообщение YES, если нет - NO
1 !F1104
2 !Antropov M.I.
3 !3430302/90002
4 !25.05.20
5
6 PROGRAM F1104
7 IMPLICIT NONE
8
9 INTEGER X1,Y1,X2,Y2,X3,Y3
10
11 PRINT *, 'F1104'
12 PRINT *, 'Antropov M.I.'
13 PRINT *, '3430302/90002'
4
14 PRINT *, '25.05.20'
15 PRINT *
16
17 OPEN (1, file = 'input1104.txt')
18 READ (1, *) X1,Y1,X2,Y2
19 X3 = abs(X1-X2);
20 Y3 = abs(Y1-Y2);
21
22 IF (X3 == 2 .AND. Y3 == 1 .OR. X3 == 1 .AND. Y3 == 2) THEN
23 PRINT *, 'YES'
24 ELSE
25 PRINT *, 'NO'
26 END IF
27 STOP
28 END
2.4.Список файлов
F1104.for
input1104.txt
3.2.Пояснения к решению
(1-4) Заголовок
(9-11) Объявляем переменные
(13-17) Печать заголовка
(19) Открываем файл input1303.txt
(21-24) С помощью цикла определяем длину K первого числа
(26-31) Считываем первое число A1
5
(37-40) С помощью цикла определяем длину M второго числа
(42-47) Считываем второе число A2
(49) Открываем цикл почленного сложения двух чисел A1 и A2
(50-58) Определяем значение текущего элемента сложения как сумму
соответствующих элементов слагаемых A1 и A2 и переменной FLAG,
значение которой 1, если при прошлом выполнении цикла значение
элемента было больше 9 (при этом оно уменьшается на 10), или 0, если
меньше 9
(59-62) Считаем длину L числа S, равного сумме чисел A1 и A2, и
проверяем чтобы складывались только значащие разряды
(65-69) Определяем наибольшую из длин K и M
(71-73) Проверяем правильно ли была посчитана длина L
(75-80) Печатаем числа A1, A2, а также результат их суммирования S
1 !F1303
2 !Antropov M. I.
3 !3430302/90002
4 !25.05.20
5
6 PROGRAM F1303
7 IMPLICIT NONE
8
9 INTEGER A1(1000), A2(1000), S(1001), BIG, FLAG
10 INTEGER i, ios, K, M, L, w
11 DATA L, FLAG, K, M, A1, A2, S /3005*0/
12
13 PRINT *, 'F1303'
14 PRINT *, 'Antropov M.I.'
15 PRINT *, '3430302/90002'
16 PRINT *, '25.05.20'
17 PRINT *
18
19 OPEN (1,file='input1303.txt',iostat=ios)
20
21 DO WHILE (ios==0)
22 K=K+1
23 READ (1,'(i1,1x)',advance='no',iostat=ios)w
24 ENDDO
25
26 IF(K>1000)THEN
27 GOTO 1
6
28 ELSE
29 REWIND (1)
30 READ (1,*),(A1(i),i=(1000-K+1),1000)
31 ENDIF
32
33 REWIND (1)
34 READ(1,*)
35 ios=0
36
37 DO WHILE (ios==0)
38 M=M+1
39 READ (1,'(i1,1x)',advance='no',iostat=ios)w
40 ENDDO
41
42 IF(M>1000)THEN
43 GOTO 1
44 ELSE
45 BACKSPACE(1)
46 READ (1,*),(A2(i),i=(1000-M+1),1000)
47 ENDIF
48
49 DO i=1001,1,-1
50 S(i)=A1(i-1)+A2(i-1)+S(i)
51 IF(S(i)>9)THEN
52 FLAG=1
53 S(i)=S(i)-10
54 ENDIF
55 IF(FLAG==1)THEN
56 S(i-1)=1
57 FLAG=0
58 ENDIF
59 L=L+1
60 IF((L>=K).AND.(L>=M))THEN
61 EXIT
62 ENDIF
63 ENDDO
64
65 IF(K>M)THEN
66 BIG=K
67 ELSE
68 BIG=M
69 ENDIF
70
71 IF(S(1001-BIG)/=0)THEN
7
72 L=L+1
73 ENDIF
74
75 PRINT *, 'FIRST NUMBER: '
76 PRINT'(1000(i1))',(A1(i), i=(1000-K+1),1000)
77 PRINT *, 'SECOND NUMBER: '
78 PRINT'(1000(i1))',(A2(i), i=(1000-M+1),1000)
79 PRINT *, 'SUMM: '
80 PRINT'(1000(i1))',(S(i), i=(1001-L+1),1001)
81
82 1 STOP
83 END
3.4.Список файлов
input1304new.txt
main.95
8
4. Задание M5023 (Создание, сохранение и использование функции и
подфункции, ввод/вывод)
4.1.Формулировка задачи
8) Создать вектор-столбец С из 10 элементов. Вектор заполнить
последовательными значениями от 1 до 10 с шагом 1. Используя вектор С,
создать квадратную матрицу Т, которую заполнить построчно значениями
от 1 до 100 с шагом 1.
9) Определить подфункцию, которая принимает два аргумента и возвращает
два значения. Первое значение - сумма аргументов, а второе - разность
аргументов.
10) Определить функцию, которая применяет подфункцию к матрице Т и
сформировать матрицу U, в нечетных строках которой расположена
разность элементов матрицы Т из одноименной и следующей строки, U(k,
m) = T(k,m) - T(k+1,m), k=2n+1, n=0…4 а в четных строках - расположена
сумма элементов матрицы Т из одноименной и предыдущей строки. U(k,
m) = T(k,m) + T(k-1,m) , k=2n, n=1…5
11) С помощью функции save записать в текстовый файл значения
матриц T, U и последние значения двух векторов, возвращаемых
подфункцией из п.2. Разделитель - пробел.
12) С помощью функции dlmread прочитать все содержимое текстового
файла в матрицу V.
13) Сформировать из матрицы V матрицы T1, U1 и вектора R1 и R2
совпадающие по структуре и значениям с данными, сохраненными ранее в
файл в п.4.
14) Cохранить сценарий в файл *.m.
9
V. Выделяем из матрицы V матрицы T1, U1 равные T, U соответственно;
вектора R1, R2 равные x, y соответственно.
9 newmatr.m:
10 function[U]=newmatr(T)
11 %Функция, которая применяет подфункцию subfunc к аргументу и
выводит значение после преобразования
12 global k;
13 for i=1:1:5
14 k=2*i-1;
15 [U(k, :),U(k+1,:)] = subfunc(T(k,:),T(k+1,:));
16 End
1. subfunc.m:
2. function [y1,y2] = subfunc(x1,x2)
3. %Подфункция из п.2 цикла 1 из задания
4. y1 = x1-x2;
5. y2 = x1+x2;
10
6. End
11