Алгоритмы и программы Методические указания для подготовительных курсов Ростов-на-Дону
Вид материала | Методические указания |
СодержаниеОтвет: ничего, программа зациклится, т.к. условие продолжения цикла всегда истинно.Пример П8 Ответ: A(1,5) = 2 и A(4,5) = 64Пример П9( |
- Методические указания для подготовительных курсов Ростов-на-Дону, 445.48kb.
- Методические указания для студентов заочной формы обучения Финансового факультета Ростов-на-Дону, 342.26kb.
- Методические указания для студентов заочной формы обучения Финансового факультета Ростов-на-Дону, 168.33kb.
- Методические указания для студентов заочной формы обучения Финансового факультета Ростов-на-Дону, 205.36kb.
- Методические указания курса «культурология» Для студентов биологического факультета, 331.04kb.
- Бюджетное планирование и прогнозирование методические указания для студентов заочной, 174.2kb.
- Методические указания к изучению курса «История зарубежной литературы 19 века» для, 569.78kb.
- Методические указания по выполнению курсовых работ и подготовки к экзамену для студентов, 320.85kb.
- Методические указания по выполнению курсовых работ и подготовки к экзамену для студентов, 359.09kb.
- Методические указания по организации и проведению учебной практики студентов Ростов-на-Дону, 102.61kb.
Ответ: первая строка: For j=2 To 5, вторая строка: A(5,j)=1 And A(5,j)=A(j,5).
Комментарий решения
При выполнении таких задач необходимо по программе восстановить алгоритм, попытавшись вначале осознать возможные пути решения. Поскольку вторая траектория прямолинейна и пересекает первую (диагональную) под прямым углом, следовательно, ее элементы расположены симметрично относительно этой диагонали, например: А(1,2) и А(2,1); А(1,3) и А(3,1); А(1,4),А(2,3) и А(3,2),А(4,1) и т.д. Один из алгоритмов решения может состоять в том, чтобы проанализировать поочередно такие цепочки элементов на наличие у них значения, равного 1 (т.к. траектория «закрашена» цифрой 1). Более оптимальные алгоритмы могут проверять не всю цепочку целиком, а лишь два или даже один ее элемент, т.к. из условия следует, что первая и вторая траектории есть на карте и никаких других траекторий нет. Поэтому достаточно проверить «на единицу» только элементы первой строки и последнего столбца (или последней строки), чтобы определить один из концов искомой траектории, второй конец будет иметь симметричные координаты i,j. Чтобы уточнить, какой именно из этих алгоритмов реализован, обратимся к программе.
Очевидно, программа должна начинаться с определения исходных данных, здесь – нужно считать карту с листа Excel. Операторы первого (вложенного) цикла выполняют это. Скобки Next:Next указывают, что к моменту пропуска этот цикл полностью закрыт, карта считана. Дальнейший просмотр программы обнаруживает наличие операторов Exit For и закрывающей цикл For скобки Next, хотя такой цикл в имеющихся строках не открывался. Значит, первая пропущенная строка открывает цикл For. Внутри этого цикла фигурирует счетчик j в перечислении элементов карты A(i,j), счетчик же i отсутствует, значит открывался простой цикл (без вложенных): For j=. Последующие за первым пропуском операторы If и печати MsgBox свидетельствуют, что проверяются на значение 1 элементы первой строки и симметричные элементы 1-го столбца: A(1,j) и A(j,1). Значит, выбран алгоритм определения траектории по двум ее точкам. Так как анализируются элементы карты 55 и пятый элемент этой строки также может быть концом траектории, последнее значение счетчика j будет 5, т. е. пропущенный заголовок цикла имеет вид: For j= To 5. Осталось определить начальное значение счетчика. Так как элемент А(1,2) уже может принадлежать траектории, то претенденты на это значение – числа 1 или 2. Если подставить в условие If значение j=1, получим: условие истинно и будут напечатаны координаты диагонального элемента А(1,1) – вторая траектория выродилась в точку, что противоречит условию задачи. Значит, начало отсчета j есть 2, т.е. первая пропущенная строка: For j=2 To 5. Шаг Step можно не указывать, т.к. перебираются первые элементы каждого столбца.
При дальнейшем анализе обратим внимание на то, что если элемент траектории в первой строке обнаружен, то программа выходит на оператор End Sub, поскольку, если условие в If истинно, то сработает последующий за печатью результата оператор Exit For принудительного выхода из цикла. Этого достаточно, если один из концов траектории находится в первой строке или первом столбце. Если же это не так (например, концевой элемент А(2,5) или А(5,2), то требуются дальнейшие проверки – анализ на наличие единицы в 5-м столбце или 5-й строке. Последующий за вторым пропуском оператор печати подсказывает, что так и есть – анализируются А(j,5) или А(5,j) для всякого значения счетчика j. Значит, претендентами на начало второй пропущенной строки могут быть строки: A(5,j)=1 или A(j,5)=1. Любая из них дает правильный ответ. Но, если следовать логике предложенного решения задачи (анализ по двум точкам), то к полученной строке нужно «прицепить» еще одну проверку симметричной точки, получим строку: A(5,j)=1 And A(5,j)=A(j,5) или эквивалентную A(j,5)=1 And A(j,5)=A(5,j). Если придерживаться порядка, указанного в операторе печати MsgBox и «стиля» первого оператора If A(1,j)= … , то вторая пропущенная строка – это: A(5,j)=1 And A(5,j)=A(j,5).
2.2. Тестовые задачи с ответом
Пример П6 (задача на алгоритмизацию). Какую из задач решает данный алгоритм.
Варианты ответа:
1) нахождение номера первого максимального элемента одномерного массива размерности 15;
2) нахождение номера первого минимального элемента одномерного массива размерности 15;
3) нахождение номера последнего максимального элемента одномерного массива размерности 15;
4) нахождение номера последнего минимального элемента одномерного массива размерности 15.
Ответ: 3.
Пример П7. Что напечатает эта программа?
Sub MyProcOtvet()
Dim x As Integer, k As Integer
k = 2: x = k-3
If x > k Then
x = x–5
Else
x = x+5
End If
While x>0
x = k*2 + x2
Wend
MsgBox x
End Sub
Ответ: ничего, программа зациклится, т.к. условие продолжения цикла всегда истинно.
Пример П8 (вложенные циклы и двумерные массивы). Какое значение будет иметь элемент A(1,5) и A(4,5) в результате выполнения следующей программы:
Public Sub matrixOtvet()
Dim A(5, 5) As Integer, x As Integer
x = 3
For j=1 To 5
A(1,j) = 2
Next
For i=2 To 5
For j=1 To 5
A(i, j) = A(i-1,j)*2 - x*A(1,j)+ i*j
Next
Next
End Sub
Ответ: A(1,5) = 2 и A(4,5) = 64
Пример П9( восстановление постановки задачи по заданной программе) . Какую задачу решает следующая программа:
Public Sub WhatIsItOtvet()
Dim A(5, 5) As Integer, m As Integer, B As Integer
For i=1 To 5
For j=1 To 5
A(i,j) = InputBox("Введите элемент массива ")
Next: Next
m = A(1,1)
For i=1 To 5
For j=1 To 5
If m
Next: Next
For i=1 To 5
If A(i,i)
B = A(i,i): Exit For
End If
Next
For i=1 To 5
A(i,3) = B: A(4,i) = B
Next
For i=1 To 5
For j=1 To 5
Cells(i,j) = A(i,j)
Next: Next
End Sub
Ответ: вводит двумерный массив размера 55 и заменяет значения элементов третьего столбца и четвертой строки на значение первого из элементов главной диагонали, меньшего максимального элемента всего массива. Результат выводит на лист Excel.
Пример П10. Определить ошибки или пропущенные строки в заданной программе.
Задана программа с пропущенными строками, решающая следующую задачу:
Дана квадратная сетка размером 88. Заполнить ее единицами, расположив их в шахматном порядке: первая клетка пуста, вторая равна 1, третья пуста и т.д. Результат вывести на лист Excel.
Требуется заполнить пропущенные строки.
Public Sub tema10Otvet()
Dim A(8,8) As Integer
For i=1 To 8
A(i,j) = 1
Cells(i,j) = A(i,j)
Next
End Sub
Ответ: первая строка: For j=i Mod 2 +1 To 8 Step 2, вторая строка: Next.
2.3. Упражнения по теме для самостоятельного решения
1. Составить блок-схему алгоритма для решения следующий задачи: дан одномерный массив размерности 20, найти сумму элементов массива до первого нуля.
2. Что напечатает эта программа?
Sub MyProcSamost()
Dim x As Single, y As Single, A As Integer, C As Integer
x = 9: A =6: C = А/2
y = (Sqr(x) + 2*A*x-3)/(x-C)2
For i= 1 To y
x = x+1
Next
MsgBox x
End Sub
3. Какое значение будет иметь элемент A(3,5) и A(5,2) в результате выполнения следующей программы:
Public Sub matrixSamost()
Dim A(6,6) As Integer, x As Integer
x = 5
For i=1 To 6
A(i,1) = 3
Next
For i=1 To 6
For j=2 To 6
A(i,j) = A(i,j-1)*2 + x
x = x-1
Next
Next
For i=1 To 6
A(i,7-i) = 77
Next
End Sub
4. Задана программа с пропущенными строками, решающая следующую задачу:
На листе Excel задана квадратная сетка размером nn (одна клетка соответствует одной ячейке листа, отсчет с начала листа). Сетка разделена диагоналями на четыре части, верхняя четверть заполнена единицами. Скопировать значения этой четверти на нижнюю, зеркально отображая строки (например, первую на последнюю, вторую на предпоследнюю и т.п.) и не копируя элементы оставшихся частей сетки. Решить для n=6.
Требуется заполнить пропущенные строки.
Public Sub tema10Samost()
Dim n As Integer, k As Integer
n = 6: k = 1
For i=4 To n
Cells(i,j) = Cells(i-k,j)
Next
Next
End Sub
2.4. Образцы тестов по программированию
Dim r As Integer, t As Long r = 4000: t = 35000 If Not (t = r) Then Do r = r + 100 t = t - 100 Loop While r < 5000 End If r = t * 2 MsgBox r | ||||||||
1) 10000 | 2) 5000 | 3) ошибка переполнения памяти | 4) синтакси-ческая ошибка в блоке If... | 5) 68000 | 6) 20000 | 7) нет правиль-ного варианта ответа | 8) 35000 | 9) 4000 |
Dim p As Integer, s As Single Dim pr As Integer, porog As Integer p = CInt(110 Mod 50): porog = 79: s = 0 If p < (porog Mod 70) Then pr = 5: s = p + p * pr / 100 ElseIf p >= (porog Mod 6) + 9 And s > 0 Then pr = 4: s = p + p * pr / 100 - 1 Else pr = 10: s = 2 * p + p * pr / 100 End If MsgBox s | ||||||||
1) 9.4 | 2) 10.5 | 3) 3 | 4) 21 | 5) 10 | 6) 9 | 7) нет правиль-ного варианта ответа | 8) 85 | 9) 11 |
b = 2 a = b: c = 1 For i = 1 To 5 Step 2 a = a + b b = b - c c = a + c Next MsgBox (a + b + c + i) | ||||||||
1) 15 | 2) 0 | 3) 5 | 4) 3 | 5) нет правиль-ного варианта ответа | 6) 2 | 7) 10 | 8) 1 | 9) -3 |
Dim A() As Integer, n As Integer, m As Integer, s As Integer n = 4: m = 5 ReDim A(n, m): s = 0 For i = 4 To 1 Step -1 For j = 1 To 5 A(i, j) = i 2 + j 2: Cells(i, j) = A(i, j) If i = j Or Not (i 2 < i * j) Then s = s + A(i, j) End If Next Next MsgBox s | ||||||||
1) 60 | 2) 150 | 3) сообщение об ошибке описания | 4) зациклится | 5) сообщение об ошибке выхода за пределы массива | 6) нет правиль-ного варианта ответа | 7) 25 | 8) 100 | 9) 200 |
Dim A(7, 7) As Integer, F As Integer F = 1 For i = 1 To 7 For j = 1 To 7 A(i, j) = (i - j) 2 If i = j Or j = 7 - i + 1 Then F = F + A(i, j) - j End If Next F = F + i Next MsgBox F | ||||||||
1) 82 | 2) 40 | 3) 89 | 4) 48 | 5) нет правиль-ного варианта ответа | 6) 20 | 7) 55 | 8) 100 | 9) 300 |
Dim s As String s = "мир, труд, май!" n = Len(s): k = 0 For i = 1 To n - 3 If Mid(s, i, 1) = "р" Or Mid(s, i, 2) = "уд" Then k = k + InStr(1, s, "а") - 2 Else k = k + 10 End If Next MsgBox k | ||||||||
1) 83 | 2) 72 | 3) 123 | 4) 120 | 5) 211 | 6) 56 | 7) 121 | 8) 111 | 9) нет правиль-ного варианта ответа |
Dim a(10) As Integer, s As Integer For i = 1 To 10 a(i) = Cells(i, 1): Next For i = 1 To 10 s = 0 For j = 1 To 10 If i <> j And a(j) < a(i) Then s = s + a(j): End If Next Cells(i, 2) = s Next | ||||||||
1) для каждого элемента массива а находит сумму элементов этого массива, меньших данного и стоящих левее него | 2) для каждого элемента массива а находит сумму элементов этого массива, меньших данного элемента | 3) для каждого элемента массива а находит сумму элементов этого массива, меньших данного и стоящих правее него | 4) находит сумму элементов массива, являющихся локальными максимумами | 5) нет правильного варианта ответа | 6) для каждого элемента массива а находит произве-дение элементов этого массива, меньших данного и стоящих левее него | 7) для каждого элемента массива а находит сумму элементов этого массива, больших данного элемента | 8) находит сумму элементов массива, не являющихся локальными максимумами | 9) находит сумму элементов массива, являющихся локальными минимумами |
alf = "ABCDEFGHI" s = InputBox("Vvedi stroku"): n = Len(s) If n > 9 Then: MsgBox "Error": Exit Sub snew = Space(n) For i = 1 To Len(s) If Asc(Mid(s, i, 1)) > 57 Or _ Asc(Mid(s, i, 1)) < 49 Then MsgBox "Error input": Exit Sub End If: Next For i = 1 To n Mid(s, i, 1) = Mid(alf, CInt(Mid(s, i, 1)), 1) Next MsgBox s | ||||||||
1) кодирует заданную строку, не состоящую из цифр, буквами алфавита "ABCDEFGHI", стоящих на тех же позициях | 2) кодирует заданную строку, состоящую из букв, буквами алфавита "ABCDEFGHI", стоящих на тех же позициях | 3) нет правильного варианта ответа | 4) кодирует заданную строку, состоящую из букв, цифрами, соответствующими кодировке букв алфавита "ABCDEFGHI" в Windows | 5) кодирует заданную строку, состоящую из цифр, буквами алфавита "ABCDEFGHI", позиции которых соответствуют цифрам строки | 6) кодирует заданную строку, состоящую из цифр, буквами алфавита "ABCDEFGHI", стоящих на тех же позициях | 7) кодирует заданную строку, состоящую из цифр, буквами алфавита "ABCDEFGHI", позиции которых соответствуют цифрам строки в обратном порядке | 8) кодирует заданную строку, состоящую из букв, буквами алфавита "ABCDEFGHI", стоящих на тех же позициях, но в обратном порядке | 9) кодирует заданную строку, не состоящую из цифр, буквами алфавита "АБВГДЕЁЖЗ", стоящих на тех же позициях |
Список использованной и рекомендуемой литературы
- Абрамян М.Э. Практикум по программированию на языке Паскаль.–
Ростов-н/Д, 2004.
- Гарнаев А.Ю. Самоучитель VBA. – СПб.: BHV-Петербург, Санкт-Петербург, 2006.
- Гейн А.Г., Сенокосов А.И. Информатика: Учебник для 8-9 кл. –– М.: Просвещение, 1995.
- Гейн А.Г.и др. Информатика. 10-11 кл. – М.: Просвещение, 2002.
- Информатика: Задачник-практикум в 2т. / Под ред. И.Г. Семыкина, Е.К. Хеннера. – М., 2001.
- Ровицкая Л.Н., Семенов В.Н. Задачи и упражнения по программированию.– Ростов-н/Д, 1996.
- Угринович Н.Д. Информатика и информационные технологии. 10-11 кл. – М.: Бином, 2003.