Для понимания общих основ программирования, а также в учебных целях очень часто используются различные элементы программирования в виде небольших программ или части программ, выполненных на условном языке программирования, или в виде блок-схемы. Для решения таких задач не обязательно владеть каким-либо языком программирования и писать на нём программы. Достаточно понимать суть (смысл) выполняемых действий, понимать логику последовательности выполнения действий, и понимать обозначения элементов такой программы.
Рассмотрим несколько примеров:
Пример 1.
Задан одномерный массив X1, X2,,XN. Что определяет фрагмент алгоритма?
Фрагмент алгоритма программы будет выполняться последовательно в следующем порядке:
1. R=1 – операция присваивания, заносит в переменную R число 1.
2. i=2 - операция присваивания, заносит в переменную i число 2.
3.
|
4. Следующим действием фрагмента алгоритма будет проверка значения элемента массива X2 на условие [<0]. Далее программа разветвляется на два различных варианта дальнейшей работы в зависимости от результата проверки этого условия. Если этот элемент будет меньше 0, т.е. отрицательным (условие верно), то в этом случае начнёт выполняться пункт 6, а если положительным (условие не верно), то будет выполняться пункт 7.
|
5. R =R* X2 - в этом действии исходное значение R=1 будет умножено на значение элемента X2 и записано в переменную R.
6. i=i+2 -следующим действием будет изменение индекса массива на [+2], т.е. i=4. После переходим (возвращаемся на пункт 3) на проверку условия проверки индекса массива на наличие такого номера элемента в массиве. Если такой номер элемента есть, программа будет выполняться по кругу (в цикле) пункты 4, 5, 6, 7, пока не закончатся чётные элементы массива. Как только чётные элементы массива закончатся работа программы прекратиться.
В результате работы этого фрагмента алгоритма получим произведение чётных элементов массива X(i)c отрицательными значениями
Пример 2.
Задан двумерный массив А
После выполнения фрагмента алгоритма переменная В примет значение?
В:=10
нц для I от 1 до 2
нц для J от 1 до 2
если А(I,J)<B
то В= А(I,J)
Всё
кц
кц
Обозначения:
· нц для I от 1 до 2 –это организация цикла (т.е. повторения части программы от слова нц (начало цикла) до слова кц - конец цикла) связанного с именно с этим началом цикла. Как правило, они выделяются по уровням отступа от левой границы абзаца, или же нужно просто искать по логике открытие и закрытие циклов; кц всегда закрывает ближайшее к нему нц, стоящее выше.
· переменная I и J – это переменные, управляющие циклом, в которые, в нашем случае, при первом выполнении цикла заносится значение 1 (I от 1 до 2), а при каждом новом проходе цикла значение переменной увеличивается на 1 (если не задано другое условие), и так до тех пор, пока значение переменной не примет конечное значение – в нашем случае – 2. Т.о. в данной записи цикл по переменной I выполнится 2 раза: при первом проходе I=1 и при втором I=2. После этого цикл закончиться, и программа будет выполняться дальше.
|
Если А(I,J)<B
то В= А(I,J)
Иначе
Всё
элемент программы – условие состоит из нескольких элементов:
̶ собственно условие если, в котором записывается логическое выражение, т.е. проверяется какое-либо равенство или неравенство.
̶ следующий элемент условия то – действие, которое будет выполнено, если записанное выше условие верно (выполняется)
̶ следующий элемент условия иначе – действие, которое будет выполнено, если условие ложно (не выполняется). В некоторых языках программирования вариантов иначе может быть несколько.
̶ элемент всё – завершение условия.
Теперь рассмотрим, как будет работать (выполняться) фрагмент приведённой выше программы:
1. нц для I от 1 до 2 – этой записью (строкой) организован цикл по переменной I, которая при первом проходе (выполнении) цикла принимает значение 1, цикл будет работать 2 раза, так как окончанием цикла является 2, или I=2
2. нц для J от 1 до 2 - этой записью организован ещё один, аналогичный предыдущему, цикл по переменной J, принимающей такие же значения (1 и 2). Циклы вложенные, это значит, что внутри первого цикла будет выполняться второй цикл. Аналогично, при первом проходе (выполнении) второго цикла J=1, а при втором J=2.
|
3. Третьей строкой фрагмента программы проверяется условие если А(I,J)<B, т.е. проверяется значение элемента массива АI,J, т.е. А1,1 (так как I=1 и J=1). Значение элемента массива А1,1=6, а В=10, т.е. условие будет истинным (т.е. выполняется, ведь 6<10).
4. Следующей строкой фрагмента программы выполняется действие то В= А(I,J) (или операция присваивания), но только в том случае, если условие, записанное в предыдущей строке, будет истинным, в противном случае эта строка выполняться не будет (игнорируется), а программа сразу переходит (перескакивает) на следующую строку. Так как в нашем случае условие выполняется, то и данная строка выполниться, т.е. в переменную В будет записано значение элемента массива А1,1 =6, таким образом В тоже будет равно 6 (В=6).
5. Следующей строкой программы записано окончание условия всё.
6. Следующей строкой программы записано окончание второго цикла по J - кц.
7. Следующей строкой программы записано окончание первого цикла по I - кц.
Теперь рассмотрим работу всего фрагмента программы полностью, и определим значения, которые примут переменные, описанные в этом фрагменте.
1. проход: АI,J, т.е. А1,1 =6; В = 6
2. проход: АI,J, т.е. А1,2 =8; В = 6
3. проход: АI,J, т.е. А2,1 =9; В = 6
4. проход: АI,J, т.е. А2,2 =7; В = 6
На этом работа программы будет закончена. Значение переменной В=6, т.е. будет найден самый маленький элемент массива.
Пример 3.
В результате выполнения фрагмента блок-схемы алгоритма значения переменных X и Y примут значения?
1. Первым действием фрагмента алгоритма будет операция присваивания Х=0, т.е. в переменную с именем Х будет записано значение 0.
2. Вторым действием фрагмента алгоритма будет также операция присваивания Y=0, т.е. в переменную с именем Y будет записано значение 0.
3. Третьим действием фрагмента алгоритма будет проверка условия X>=Y. Если условие будет выполнено, т.е. значение, записанное в переменной Х, будет больше или равно значению, записанному в переменной Y, то в этом случае произойдёт переход к следующему действию. Если условие не выполниться, то будут выведены значения, записанные в переменных X и Y, и работа программы будет завершена.
4. Четвёртым действием будет проверка ещё одного условия Х<=4. Если условие будет выполнено, т.е. значение, записанное в переменной Х, будет меньше или рано 4, то в этом случае произойдёт переход к следующему действию, если условие не выполниться, то будут выведены значения, записанные в переменных X и Y, и работа программы будет завершена.
5. Пятым действием будет выполнено сложение значения записанного в переменной Х и 1 и результат будет записан в переменную Х (Х=Х+1). Т.о. значение переменной Х будет увеличено на 1.
6. Шестым действием будет расчёт значения Y = X*X/2, т.е. в переменную Y будет записано значение Х, умноженное на это же значение и делёное на 2.
7. Последним действием будет переход (возврат) программы с новыми (рассчитанными в пунктах 5 и 6) значениями Х и Y к третьему действию (пункту) фрагмента алгоритма. Т.е. будет выполнен фрагмент алгоритма с пункта 3 повторно. И так будет происходить до тех пор, пока условия в пункте 3 и 4 будут выполняться (истинными). Как только условие в пункте 3 или 4 станет ложным, то будут выведены значения, записанные в переменных X и Y, и работа программы будет завершена.
Теперь, зная схему решения алгоритма, решим его с имеющимися у нас исходными значениями Х=0 и Y=0.
При первом проходе:
1. Х=0;
2. Y=0;
3. X>=Y или 0=0 → условие выполняется;
4. Х<=4 или 0<4 → условие выполняется;
5. Х=Х+1 или X=0+1=1, т.е. Х=1;
6. Y=X*X/2 или Y=1*1/2, т.е. У=0,5
7. Возврат к пункту 3
Второй проход:
3. X>=Y или 1>0,5 → условие выполняется;
4. Х<=4 или 1<4 → условие выполняется;
5. Х=Х+1 или X=1+1=2, т.е. Х=2;
6. Y=X*X/2 – Y=2*2/2, т.е. У=2
7. Возврат к пункту 3
Третий проход:
3. X>=Y или 2=2 → условие выполняется;
4. Х<=4 или 2<4 → условие выполняется;
5. Х=Х+1 или X=2+1=3, т.е. Х=3;
6. Y=X*X/2 или Y=3*3/2, т.е. У=4,5
7. Возврат к пункту 3
Четвёртый проход:
3. X>=Y или 3<4,5 → условие не выполняется;
4. Вывод значений Х=3 и Y=4,5 и завершение программы
Пример 4.
Если элементы массива D[1…5] равны соответственно 4,1,5,3,2, то значение выражения D[D[4]]-D[D[5]] равно:
1. В квадратных скобках записывается индекс (номер) элемента массива, под каждым номером элемента массива записываются различные значения. Таким образом, получаем:
D[1]=4
D[2]=1
D[3]=5
D[4]=3
D[5]=2
2. Подставим найденные значения D[4] и D[5] в формулу:
D[3]-D[2]
3. Теперь подставим в формулу D[3]-D[2] значения элементов массива 5-1=4
Примеры для повторения №5:
5.1. Укажите пропущенный фрагмент в алгоритме, определяющем количество чётных элементов в массиве А[1:N]. Операторы: DIV – деление нацело, MOD – остаток от деления.
S:=0; K:=0
нц для J от 1 до N
если __________
то S:=S+1
Всё
кц
1. A[J] MOD 2=K
2. A[J] DIV 2 = 0
3. A[J] MOD 2
4. A[K] MOD 2=0
Ответ:
5.2. Дан фрагмент алгоритма, в котором обрабатывается массив А:(2,12,0,-3,0). Укажите значение переменной Y после окончания работы фрагмента алгоритма.
целтаб А[1:5]
Y:=0
нцдля К от 1 до 5
если А[k] >=0
то Y=Y+1
Всё
кц
вывод Y
Укажите значение Y:
5.3. В результате выполнения фрагмента алгоритма значение переменной b будет равно?
b=
5.4. Дана блок-схема алгоритма
Определить результат выполнения алгоритма при определённых значениях исходных данных: A=7; B=8; C=9