- •«Информатика»
- •Содержание
- •1. Константы
- •2. Типы констант
- •3. Переменные
- •4. Типы переменных
- •5. Операторы описания
- •6. Арифметические операции Операции по приоритету:
- •7. Расположение текста программы на экране дисплея
- •Правила набора текста программ:
- •Правило:
- •4 Write(6,*)’ Введите значения сторон треугольника a,b,c’
- •8. Технология прохождения фортран – программ на эвм
- •Технология прохождения фортран – программ на эвм
- •9. Арифметический оператор if
- •If(арифметическое выражение) m1, m2, m3
- •Примечание:
- •Правило:
- •If арифметический не может быть последним оператором в цикле do.
- •4 Write(6,*)’ Введите значения сторон треугольника a,b,c’
- •8 Write(6,*)’ Площадь треугольника равна нулю’
- •9 Write(6,*)’ Такой треугольник не существует’
- •10. If логический
- •If(логическое выражение) выполняемый оператор
- •70% Ошибок у программистов возникает из-за несоответствия типов переменных!.
- •Условные обозначения логических операторов на блок-схемах
- •If арифметический if логический
- •11. Табулирование функции
- •12. Оператор цикла do
- •Внимание:
- •Примечание:
- •3 Write(6,*)’Введите переменные a,b,c’
- •13. Массивы
- •Примечание:
- •Вычисление определенного интеграла
- •1 Write(6,*)’Введите значения a,b,dx’
- •14.Работа содномерными массивами Ввод массивов
- •Первый способ ввода массивов:
- •Второй способ ввода массивов:
- •Третий способ ввода массивов:
- •15. Вывод массивов Первый способ вывода массива
- •Второй способ вывода массива:
- •Третий способ вывода массива:
- •Четвёртый способ вывода массива:
- •Способ вывода массива в два столбца:
- •Фрагменты задач с одномерными массивами
- •If(b.Eq.K) write(6,*)’ Число m является чётным’
- •Сортировка массива
- •Второй способ сортировки массива:
- •16. Конструкция if then–else if then–else – end if
- •If (логическое выражение 1) then
- •Правила:
- •Примечания:
- •17. Оператор data
- •Правило:
- •Правило:
- •18.Работа с двухмерными массивами
- •19. Ввод двухмерного массива
- •Второй способ ввода массивов:
- •Третий способ ввода массивов:
- •Четвертый способ ввода массивов:
- •Фрагменты задач с двухмерными массивами
- •20. Вывод двухмерного массива
Третий способ вывода массива:
WRITE(6,*) (‘A(’,I,’)=’,A(I),I=1,N)
Здесь используется неявный цикл типа DO, по которому происходит вывод имени массива с помощью текстовой константы, а за ним в скобках указывается номер выведенного элемента и через знак ‘=’ само численное значение элемента массива:
А(…1)=число А(…2)=число и т.д.
Недостаток:
весь массив будет разбросан по экрану дисплея.
Достоинство:
имеется возможность каких либо пояснений.
Четвёртый способ вывода массива:
В этом способе используется внешний цикл DO.
DO 18 I=1,N
18 WRITE(6,*) ’A(‘,I,’)=’,A(I)
текстовая константа№ цикла текстовая константазначение элемента массива
Этот способ отличается от предыдущих трёх способов тем, что вместо неявного используется внешний цикл DO. В этом цикле операторWRITEсрабатываетN-ное количество раз и соответственно печатаетN-ное количество строк. В каждой строке печатается текстовая константа с именем массива и символом ”(”, номер цикла, затем печатается текстовая константа “)=” и потом числовое значение элемента массива.
Способ вывода массива в два столбца:
DO 28 I=1,N,2
28 WRITE(6,*) ’A(‘,I,’)=’,A(I),’ A(‘,I+1,’)=’,A(I+1)
Примечание:еслиNнечетное количество элементов массива, то последнее выведенное число не будет относиться к массиву А и может оказаться совершенно случайным числом, извлеченным из памяти ЭВМ.
Фрагменты задач с одномерными массивами
Мини задача:
Найти сумму элементов одномерного массива.
S=0.
DO 30 I=1,N
30 S=S+A(I)
Вначале обнуляется ячейка Sпамяти ЭВМ, в которой будет содержаться значение суммы. Затем по циклу суммируется первое значениеS(это 0) с первым элементом массива А и записывается в ячейкуS. На втором цикле к ячейкеS, в которой содержится 0+А(1) добавляется А(2) и записывается вS, и так доN-ного элемента массива.
Задача:
Определить значения μ при α=tн÷tkс шагомdt.
REAL MU(1000)
Т.к. массив называется MU (из-за буквы М ЭВМ воспримет его как целого типа), то необходимо описать его с помощью оператора REAL, при этом использовать DIMENSION не надо.
WRITE(6,*)’Введите значения TN,TK,DT’
READ(5,*) TN,TK,DT
N=(TK-TN)/DT+1
DT=(TK-TN)/(N-1)
A=TN
DO 3 I=1,N
I MU(I)=ATAN(ABS(ALOG(A)/EXP(2.*A))**(1./3.))
WRITE(6,*)’При A=’,A,’ значение MU=’,MU(I)
3 A=A+DT
Блок I можно заменить блоком II
I=1
DO 3 A=TN,TK,DT
II MU(I)= ATAN(ABS(ALOG(A)/EXP(2.*A))**(1./3.))
WRITE(6,*)’При A=’,A,’ значение MU=’,MU(I)
3 I=I+1
PAUSE
STOP
END
Нахождение чётного числаM:
B=M/2.
K=M/2.
If(b.Eq.K) write(6,*)’ Число m является чётным’
Вводятся две переменные разных типов: В – вещественного типа и К – целого типа.
Затем число Mдважды делится на вещественную двойку (2.). Переменная В получится чётной только тогда, когдаM– целое число, иначе В будет иметь дробное значение. Затем сравниваются переменные В и К. Если они равны, то это значит, что числоM– чётное.
Мини задача:
В массиве А(200) найти произведение элементов, стоящих на нечётных местах.
DIMENSION A(200)
READ(5,*) A
P=1.
DO 2 I=1,200,2
P=P*A(I)
Программа будет по циклу брать только нечётные элементы (1,3,5…) и перемножать их друг с другом. Вычисление произведётся до 199 элемента и остановится, т.к. 199 – последний нечётный элемент этого массива. При I=199 завершится последний цикл. Но затем к переменнойIбудет добавлена величина шага, равная 2 и новое значениеI=201 будет сравниваться с конечным значением 200. ПосколькуIбудет больше конечного значения, то осуществляется выход из цикла и управление будет передано оператору, следующему после последнего в области цикла. Т.е. оператору, следующему после метки 2. Следует обратить внимание, чтопосле окончания цикла переменная цикла имеет значение, большее, чем конечное значение в операторе цикла DO.
Мини задача:
Найти максимальное значение элемента массива А.
DIMENSION A(200)
READ(5,*)A
B=A(1)
DO 3 I=2,200
IF(A(I).GT.B) B=A(I) или можно B=AMAX1(B,A(I))
3 CONTINUE
WRITE(6,*)’Максимальное значение массива А=’,B
Здесь организуется цикл, в котором значение второго элемента массива А сравнивается со значением первого элемента (который записан в переменной В) и, если A(I) больше, чем В, то переменной В присваивается значениеA(I). При повторении цикла в переменную В будет записываться только то число изA(I), которое по значению будет больше В. По окончании цикла переменная В будет содержать максимальное значение из массива А. Аналогично операторуIFработает и строка с использованием функцииAMAX1. ФункцияAMAX1 выбирает наибольшее значение из двух или более аргументов и присваивает его переменной В, затем цикл повторяется.
В конце выводится максимальное значение массива А – число В.
Мини задача:
Найти минимальное значение массива А и порядковый номер этого элемента.
DIMENSION A(200)
READ(5,*)A
NC=1 До начала цикла в переменную, которая будет запоминать номер цикла с минимальным значением, заносим единицу.
C=A(1)
DO 4 I=2,200
IF (A(I).GE.C) GO TO 4
Здесь применяется элемент обратной логики: в зону после оператора IF можно попасть только тогда, когда А(I)<C (что и нужно по заданию).
С Запоминание минимального элемента
C=A(I)
С Запоминание номер элемента массива, в ячейке которого находится
С минимальное число
NC=I
4 CONTINUE
WRITE(6,*)’ Минимальное значение имеет элемент под номером ',NC
WRITE(6,*)’Это значение равно ’,C
Если в массиве содержатся несколько элементов, равных по величине минимальному, то запомнится номер только первого элемента. Если использовать оператор
IF (A(I).GT.C) GO TO 4
то запомнится номер последнего минимального элемента.
Для того, чтобы напечатать номера всех элементов массива, равных минимальному, необходимо найти минимальное значение. Затем повторить цикл, в котором сравнивать это минимальное значение с каждым элементом массива. И если они равны, то напечатать номер цикла:
DO 5 I=1,200
5 IF(A(I).EQ.C) WRITE(6,*)’Номер минимального элемента =’,I
Ещё один пример нахождения номера минимального элемета массива:
L=1
DO 5 I=2,200
IF(A(I).LT.A(L)) L=I
WRITE(*,*)'Минимальный элемент массива А=', A(L)
Задача:
В одномерном массиве А(200) поменять местами максимальное и минимальное значения.
Решение:
Необходимо найти минимальный элемент массива и его номер, затем найти максимальный элемент массива и его номер и поменять эти значения местами.
REAL A(200)
WRITE(6,*)’Введите количество элементов массива А и их
*значения’
READ(5,*) N,(A(I),I=1,N)
AMI=A(1) Задаем начальные значения для нахождения максимума и минимума
AMA=A(1)
NMI=1 Задаем начальные значения для определения номеров циклов, когда находится максимум и минимум.
NMA=1
DO 8 I=2,N
C Блок нахождения максимального элемента и его номера методом
С обратной логики
IF(A(I).LE.AMA) GO TO 3
В эту зону после оператора IF, где происходит запоминание величины и номера максимального элемента, можно попасть только тогда, когда текущий элемент массива больше предыдущего значения АМА. Иначе управление передаётся на метку 3.
AMA=A(I)
NMA=I
C Блок нахождения минимального элемента и его номера методом
С прямой логики
3 IF(A(I).LT.AMI) AMI=A(I)
Переменной AMI присваивается текущий элемент массива только тогда, если он меньше предыдущего значения переменной AMI.
IF(A(I).EQ.AMI) NMI=I
Здесь запоминается номер минимального элемента только тогда, когда А(I)=AMI
CONTINUE
С Найдено:
WRITE(6,*)’Максимальный элемент: А(‘,NMA,’) =’,AMA
WRITE(6,*)’Минимальный элемент: А(‘,NMI,’) =’,AMI
С Меняем местами:
A(NMI)=AMA
Значение максимума АМА записываем в элемент массива с номером NMI, где до этого находился минимальный элемент.
A(NMA)=AMI
Аналогично значение минимума АМI записываем в элемент массива с номером NMA, где до этого находился максимальный элемент.
Таким образом, максимальный и минимальный элементы поменяются местами.
PAUSE
STOP
END
Мини задача:
Поменять максимальное и минимальное значения элементов массива местами, не используя значения AMI,AMA(т.е. значения максимума и минимума) – на основе предыдущей задачи.
Используем дополнительно переменную С для временного хранения числа при перестановке значений.
. . . . . . . . . . . .
С=A(NMI)
A(NMI)=A(NMA)
A(NMA)=C