Информатика. Часть 2

advertisement
Информатика. Часть 2
Занятие 2. Основы алгоритмизации
Необходимо ознакомиться с примерами выполнения заданий по алгоритмизации.
Затем решить свой вариант заданий, представленный ниже в п. 2. Задания для
выполнения. Решение записывается в Документ Гугл или в текстовый файл Word,
который должен быть потом загружен на Облако Гугл. Убедитесь, что к файлу открыт
совместный доступ с преподавателем (аккаунт преподавателя itcamptomsk@gmail.com).
Блок-схемы и диаграммы лучше создавать в документе Word, а затем загружать на
Облако.
Вариант заданий выбирается по номеру студента в списке группы.
Для дополнительных баллов студенту предлагается ответить на контрольные вопросы
в конце данного документа.
1. Пример решения задания для самостоятельного выполнения
Записать следующие алгоритмы:
 дана матрица A[n x m], найти максимальные элементы всех столбцов матрицы. Для записи
алгоритма использовать систему кодирования псевдокод;
 дана произвольная строка символов S. Найти количество слов строки. Словом считается
последовательность символов, ограниченная пробелами и не имеющая пробелов внутри себя. Для
записи алгоритма использовать блок-диаграмму;
 сформировать массив X из n элементов по следующему правилу — X[i+1]=X[i]+2; i
изменяется от 1 до n – 1; X[1] = 15. Для записи алгоритма использовать диаграмму НассиШнайдермана.
Диаграммы Насси-Шнайдермана
Основные конструкции структурного программирования в диаграмме Насси-Шнайдермана
обозначаются следующим образом:
Следование —
Действие 1
Действие 2
Развилка —
Условие
Да
Нет
Действия
при
истинном
условии
Цикл —
Действия
при
ложном
условии
Условие выполнения цикла
Действия в цикле
Действия в цикле
Действия в цикле
Пример 6. Дано число натуральное число n <10. Вывести на экран грамматически верную
фразу (n лет — 1 год, 2 года, 10 лет и т.д.).
Задать n
n 1
Да
Вернуть
« n год»
Нет
n5
Да
Вернуть
« n года»
Нет
Вернуть
« n лет»
Решение.
Схема решения первой задачи будет следующей: зафиксируем номер столбца j=1, положим
за максимальный элемент A[1][j] — т.е. элемент, лежащий в первой строке столбца j. Далее
начнем просматривать элементы столбца j, начиная со второго элемента. Если в процессе поиска
найдено значение матрицы, превышающее значение максимума, то заменим текущий максимум на
найденное значение. После того, как весь столбец j будет просмотрен, вернем в качестве
результата найденное значение максимума. Таким образом, будет найден максимальный элемент в
столбце 1. Повторим описанный алгоритм для j:=2,3,…,m . Запишем решение на псевдокоде:
Задать n — количество строк, m — количество столбцов.
Задать элементы матрицы A[n  m]
ЦИКЛ ( j : 1; m )
max : A[1][ j] ;
ЦИКЛ( i : 2; n )
ЕСЛИ max  A[i][ j ] ТО max : A[i][ j ]
КОНЕЦ ЦИКЛА
Вернуть «В столбце» j «максимальное значение» max ;
КОНЕЦ ЦИКЛА
Для второй задачи можно предложить следующую схему решения: так как не оговорено, что
между словами строки ровно один пробел, то между словами может быть и группа пробелов. Для
подсчета слов используем переменную-счетчик k. Начнем просматривать строку с первого
символа, если первый символ не пробел, то в строке уже найдено первое слово, увеличим
значение переменной k на единицу. Далее циклически просматриваем строку и ищем сочетания: iтый символ равен пробелу, а i+1-ый символ не равен пробелу, фиксируем начало каждого слова
строки и увеличиваем в этом случае счетчик слов k на единицу. Просмотр заканчивается при
достижении переменной i значения n – 1, где n — длина строки. Блок-диаграмма описанного
алгоритма представлена на рисунке 1.
Задать S
n : длина строки
k : 0, i : 1
Да
Нет
S[i]  '
' и строка не пуста
k : 1, i : 2
Да
Нет
i  n 1
Да
Нет
S[i]  ’ ‘ И S[i  1]  ’ ‘
k : k  1
i : i  1
Вернуть k
Рисунок 1 – Блок-диаграмма
Решим третью задачу следующим образом: зададим первый элемент массива и переменную i
определим равной единице. Все следующие элементы массива будем определять по формуле,
данной в условии. Для этого организуем цикл, где переменную i будем изменять от 1 до n – 1, где
n — размерность массива. Шаг изменения переменной i равен единице. На рисунке ниже
представлена диаграмма Насси-Шнайдермана описанного алгоритма. Обратите внимание на то,
каким образом выполнен возврат полученного результата: на каждом шаге цикла возвращается
предыдущее значение элемента массива, а после выполнения цикла возвращается последнее
полученное значение.
Задать n
Задать i : 1
Задать X [i]: 15
i : 1; n  1
X [i  1]: X [i]  2
Вернуть X [i]
Вернуть X [i]
2. Задания на выполнение
Вариант 1
а) Записать на псевдокоде алгоритм: в квадратной матрице A[n  n] найти минимальный
элемент, заменить его значение на 100. Если минимальных элементов несколько, то выполнить
замену для всех найденных минимальных элементов.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: заполнить
массив X , состоящий из n элементов, по следующему правилу —
xi  xi 1  2  xi 2 , x0  1, x1  3 .
в) Записать блок-схему для решения следующей задачи: проверить, является ли заданная
строка S палиндромом. Палиндром — последовательность, читающаяся справа налево и слева
направо одинаково.
Вариант 2
а) Записать на псевдокоде алгоритм: заполнить квадратную матрицу A[n  n] по следующему
правилу:
1 2 3 4 ...
n
0 1 2 3 ... n  1
0 0 1 2 ... n  2
0 0 0 1 ... n  3
... ...
... 1
...
0 0 0 0 0
1
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: в массиве из n
элементов найти сумму элементов с нечетными индексами.
в) Записать блок-схему для решения следующей задачи: «перевернуть» заданную строку S, —
поменять 0-й символ с n  1 -м символом, 1-й с n — 2-м символом и т.д.
Вариант 3
а) Записать на псевдокоде алгоритм: в матрице A[n  n] найти сумму всех элементов,
лежащих выше главной диагонали.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: в массиве из n
элементов найти количество элементов с нечетными значениями.
в) Записать блок-схему для решения следующей задачи: в заданной строке S удвоить
(повторить) все гласные буквы. Например: «Москва» — «Мооскваа».
Вариант 4
а) Записать на псевдокоде алгоритм: заполнить квадратную матрицу A[n  n] по следующему
правилу:
ai , j  i  2  j .
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: в массиве из n
элементов найти произведение минимального и максимального элементов.
в) Записать блок-схему для решения следующей задачи: в заданной строке S удалить все
символы, не являющиеся буквами.
Вариант 5
а) Записать на псевдокоде алгоритм: в матрице A[n  m] найти минимальный элемент, лежащий
ниже главной диагонали.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: заполнить
массив X  n по следующему правилу — xi  2  i  i .
в) Записать блок-схему для решения следующей задачи: найти минимальный элемент из
четырех заданных x, y, z, t .
Вариант 6
а) Записать на псевдокоде алгоритм: заполнить
правилу:
0
1 2 3
1
2 3 ...
2
3 4 ...
3 ...
...
...
n 1 0 0 0
квадратную матрицу A[n  n] по следующему
...
n 1
n 1
0
...
0
...
0
0
...
0
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: в массиве из n
элементов найти сумму элементов с четными индексами.
в) Записать блок-схему для решения следующей задачи: даны 4 числа x, y, z, t . Если среди
этих чисел встречаются одинаковые, то переменной f присвоить значение 1, если нет, то 0.
Вариант 7
а) Записать на псевдокоде алгоритм: в квадратной матрице A[n  n] найти сумму элементов,
лежащих на главной и побочной диагоналях.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: просмотреть
массив X [n] и если пара элементов xi , xi 1 удовлетворяет условию xi  xi 1 , то поменять
элементы местами.
в) Записать блок-схему для решения следующей задачи: даны 4 целых числа x, y, z, t ,
значения которых лежат от 0 и до 1000. Если среди этих чисел есть полные квадраты (1, 4, 9, …),
то переменной f присвоить значение 1, если нет, то 0.
Вариант 8
а) Записать на псевдокоде алгоритм: в квадратной матрице A[n  n] поменять местами
элементы k -го столбца и l -той строки.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: просмотреть
массив X [n] и найти количество ненулевых элементов.
в) Записать блок-схему для решения следующей задачи: даны 4 целых числа x, y, z, t ,
проверить, есть ли среди них отрицательные числа, если есть, то в переменной k сохранить
количество этих чисел, если нет, то присвоить k значение 0.
Вариант 9
а) Записать на псевдокоде алгоритм: в квадратной матрице A[n  n] заменить элементы k -го
столбца на их абсолютные значения.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: просмотреть
массив X [n] и найти сумму отрицательных элементов.
в) Записать блок-схему для решения следующей задачи: даны 4 целых числа x, y, z, t , найти
минимальное и максимальное значение среди заданных.
Вариант 10
а) Записать на псевдокоде алгоритм: в квадратной матрице A[n  n] найти минимальный
элемент, лежащий на побочной диагонали.
б) Записать диаграмму Насси-Шнайдермана для решения следующей задачи: задать элементы
массива X [n] по следующему правилу: xi  i  3 .
в) Записать блок-схему для решения следующей задачи: в заданной строке S найти
количество символов, являющихся буквами.
3. Контрольные вопросы и упражнения
1. Дайте определение алгоритма.
2. Перечислите основные конструкции структурного программирования.
3. Приведите пример алгоритма, который использует конструкцию следования.
4. Приведите пример алгоритма, который использует конструкцию развилки.
5. Приведите пример алгоритма, в котором используется циклическая конструкция.
6. Для чего может быть использована флаговая переменная?
7. Запишите алгоритм поиска максимального элемента в заданном массиве. Используйте
любую систему кодирования.
8. Запишите алгоритм поиска индекса минимального значения в заданном массиве.
9. Запишите словесную постановку задачи, которая может быть решена следующим
алгоритмом:
Задать x, y, z ;
ЕСЛИ x  y  z
ТО Вернуть «Все числа одинаковы»
ИНАЧЕ ЕСЛИ x  y ТО max  x
ИНАЧЕ max  y
КОНЕЦ ЕСЛИ
ЕСЛИ max  z ТО max  z
КОНЕЦ ЕСЛИ
Вернуть max .
10. Какие значения примут переменные x,y,z после выполнения следующего алгоритма:
Задать x : 1, y : 7, z : 5 ;
ЕСЛИ x  0 И z  0
ТО x : x / 2, y : y / 2, z : z / 2
ИНАЧЕ x : 10  x, y : 10  y, z : 10  z
11. Перечислите системы кодирования алгоритмов.
12. Запишите алгоритм вычисления значений функции, заданной следующим образом:
 2
 x ,    x  5


f ( x)   x / 2,  5  x  0

 2
 x  1, 0  x  

13. Запишите алгоритм решения произвольного квадратного уравнения ax2  bx  c  0 . Какие
конструкции структурного программирования использовались в алгоритме?
14. Запишите алгоритм, подсчитывающий количество слов заданной строки, начинающихся с
заданного символа.
Download