Автор вопроса: DaaGER | Web-сайт:smartic.ru | ICQ: 329195567
Вот несколько заданий, которые я не понял как делать. Желательно, чтобы к ответам лежали пояснения!
Пусть знающие люди помогут:
==================
Определите, что делает следующая программа. Опишите в бланке ответа, что служит входными данными для программы. Что выводит программа в зависимости от входных данных?
Программа на языке Бейсик
DIM K,n,i,b,L,R, a(1000) AS INTEGER
INPUT K
INPUT n
FOR i = 1 TO n
INPUT a(i)
NEXT i
b = 1
FOR i = 2 TO n
IF a(i – 1) >= a(i) THEN b = 0
NEXT i
IF b = 0 THEN
PRINT "данные некорректны"
GOTO 10
END IF
L = 1: R = n
b = 0
WHILE (L <= R) AND (b = 0)
m = (L + R) \ 2
IF a(m) = K THEN b = 1 ELSE b = 0
IF a(m) < K THEN
L = m + 1
ELSE R = m – 1
END IF
WEND
IF b = 1 THEN PRINT m ELSE PRINT 0
10 END
C3
Опишите алгоритм поиска трех последовательных элементов, сумма которых максимальна, в числовом массиве из 30 элементов. Решение запишите в словесной форме или на алгоритмических языках Бейсик или Паскаль.
C4
Два игрока играют в следующую игру. Перед ними лежат три кучки камней, в первой из которых 2, во второй – 3, в третьей – 4 камня. У каждого игрока неограниченно много камней. Игроки ходят по очереди. Ход состоит в том, что игрок или удваивает число камней в какой-то куче или добавляет по два камня в каждую из куч. Выигрывает игрок, после хода которого либо в одной из куч становится не менее 15 камней, либо общее число камней во всех трех кучах становится не менее 25. Кто выигрывает при безошибочной игре обоих игроков – игрок, делающий первый ход или игрок, делающий второй ход? Каким должен быть первый ход выигрывающего игрока? Ответ обоснуйте.
C5
Во входном файле text.dat содержится текст на английском языке, заканчивающийся точкой (другие символы “.” в этом файле отсутствуют). Требуется написать программу на языке Паскаль или Бейсик, которая будет определять и выводить на экран английскую букву, встречающуюся в этом тексте чаще всего, и количество там таких букв. Строчные и прописные буквы при этом считаются не различимыми. Если искомых букв несколько, то программа должна выводить на экран первую из них по алфавиту. Например, пусть файл содержит следующую запись: It is not a simple task. Yes! Чаще всего здесь встречаются буквы I, S и T (слово Yes в подсчете не учитывается, так как расположено после точки). Следовательно, в данном случае программа должна вывести два символа, разделенных пробелом: I 3
Randomize
Dim a(1 To 30) As Long
Dim Max As Long
Dim MaxI As Long
Dim b As Long
Dim i As Long
For i = 1 To 30
a(i) = Round(Rnd * 100) ' fill the array
Next i
Max = 0
MaxI = 0
For i = 1 To 28 ' first pack: 1,2 and 3; last pack: 28,29 and 30
b = a(i) + a(i + 1) + a(i + 2)
If b > Max Then
Max = b
MaxI = i
End If
Next i
MsgBox "Max Sum:=" & Max & " at i=" & MaxI & ", " & MaxI + 1 & " and " & MaxI + 2
-объявляем переменные
DIM K,n,i,b,L,R, a(1000) AS INTEGER
-читаем размер массва Н и переменную
КINPUT K
INPUT n
-читаем Н значений массива
FOR i = 1 TO n
INPUT a(i)
NEXT i
-проверяем, отсортирован ли массив по возростанию. если нет, то выход из проги
b = 1
FOR i = 2 TO n
IF a(i – 1) >= a(i) THEN b = 0
NEXT i
IF b = 0 THEN
PRINT "данные некорректны"
GOTO 10
END IF
-устанавливаем верхнюю и нижнюю границу чего-то
L = 1: R = n
-зануляем какой то флаг Б
b = 0
-пока границы нормальные и флаг занулён....
WHILE (L <= R) AND (b = 0)
-ищем центр (хм.. зачем?)
m = (L + R) \ 2
-если центральный элемент = К, то вроже всё
IF a(m) = K THEN b = 1 ELSE b = 0
-если типа центральный элемент меньше К то двигаем левую границу за него
IF a(m) < K THEN
L = m + 1
-а если больше, то правую перед ним
ELSE R = m – 1
END IF
WEND
ну и вывод только если мы нашли элемент равный К
IF b = 1 THEN PRINT m ELSE PRINT 0
10 END
Короче если я прально понял, то мы находим какой по счёту элемет = К
Ну и ******* код! почему бы просто не сделать перебор всех элементов чтобы узнать это??? хотя может просто так быстрее кто знает
Немножечко не так:
Если K равен любому элементу массива,прога выдаёт 0
В противном случае выводит номер ближайшего к нему элемента из a()
Цикл поиска элемента основан на том, что массив заранее отсортирован .
Нехороший код какой-то ... Запутанный. Можно было гораздо проще написать
===========
Задание 3:=
===========
Dim Arr(1 to 30)
Dim Max& 'максимальная сумма
Dim LastMax& 'Первый элемент в группе из 3х
LastMax=1
Max=0
For x=1 to 30 -2
temp=Arr(x) + Arr(x+1) + Arr(x+2)
if temp > max then max = temp : LastMax = x
next x
'выйти,если ничё не нашлось
if max=0 then GoTo 101
'Не указано,чё требуется от программера: найти эту сумму или найти
' порядковый номер элемента,первого среди трёх,поэтому
' напечатаю и то ,и другое
'Max=максимальная сумма
'LastMax=первый элемент данной суммы
Для начала создадим массив для хранения кол-ва
встреченых букв
Symbols(1 to 128)
Например,если символ Ascii какой-то буквы =12
то к 12му элементу прибавится 1
Дальше пошёл код:
Dim Source$
Dim Symbols(1 to 128) as byte
Dim Temp& 'временная переменная для хранения ascii- кода символа
source$= "It's a very simple task. What do you think about?"
For x=1 to len(source$)
if mid(source,x,1)="." then exit for ' Если точка,перейти к этапу подсчёта кол-ва
Temp&= asc(Ucase(mid(source,x,1)))
if temp >128 then goto NextFor ' игнорировать неверный символ
'увеличиваем значение элемента в массиве
symbols(temp) = symbols(temp) +1
NextFor:
next x
'''''''''''
'Найдём,каких же букв больше
dim max& 'как и в прошлом примере,тот же смысл переменных
Dim LastMax&
'Чтобы найти первую по алфавиту из наиболее
'часто встречающихся
', зададим цикл в обратном порядке
max=0
lastmax=0
For x=128 to 1 step (-1)
if symbols(x) >= max then max = symbols(x) : lastmax = x
next x
print Chr(x) + " " + max
END
Вроде так. Если чё не так,пиши
Задание №4 не стал смотреть
Немножечко не так:
Если K равен любому элементу массива,прога выдаёт 0
В противном случае выводит номер ближайшего к нему элемента из a()
Цикл поиска элемента основан на том, что массив заранее отсортирован .
Нехороший код какой-то ... Запутанный. Можно было гораздо проще написать
===========
Задание 3:=
===========
Dim Arr(1 to 30)
Dim Max& 'максимальная сумма
Dim LastMax& 'Первый элемент в группе из 3х
LastMax=1
Max=0
For x=1 to 30 -2
temp=Arr(x) + Arr(x+1) + Arr(x+2)
if temp > max then max = temp : LastMax = x
next x
'выйти,если ничё не нашлось
if max=0 then GoTo 101
'Не указано,чё требуется от программера: найти эту сумму или найти
' порядковый номер элемента,первого среди трёх,поэтому
' напечатаю и то ,и другое
'Max=максимальная сумма
'LastMax=первый элемент данной суммы
Для начала создадим массив для хранения кол-ва
встреченых букв
Symbols(1 to 128)
Например,если символ Ascii какой-то буквы =12
то к 12му элементу прибавится 1
Дальше пошёл код:
Dim Source$
Dim Symbols(1 to 128) as byte
Dim Temp& 'временная переменная для хранения ascii- кода символа
source$= "It's a very simple task. What do you think about?"
For x=1 to len(source$)
if mid(source,x,1)="." then exit for ' Если точка,перейти к этапу подсчёта кол-ва
Temp&= asc(Ucase(mid(source,x,1)))
if temp >128 then goto NextFor ' игнорировать неверный символ
'увеличиваем значение элемента в массиве
symbols(temp) = symbols(temp) +1
NextFor:
next x
'''''''''''
'Найдём,каких же букв больше
dim max& 'как и в прошлом примере,тот же смысл переменных
Dim LastMax&
'Чтобы найти первую по алфавиту из наиболее
'часто встречающихся
', зададим цикл в обратном порядке
max=0
lastmax=0
For x=128 to 1 step (-1)
if symbols(x) >= max then max = symbols(x) : lastmax = x
next x
print Chr(x) + " " + max
END
Вроде так. Если чё не так,пиши
Задание №4 не стал смотреть
да, кстати, этот код чё ИЗ ЕГЭ ВЗЯТ? вчитайся внимательно! это тоже самое что дать текст со словом на букву Х на экзамене по русскому! (я имел ввиду и просто так нецензурное слово GoTo)
Короче если я прально понял, то мы находим какой по счёту элемет = К
Ну и ******* код! почему бы просто не сделать перебор всех элементов чтобы узнать это??? хотя может просто так быстрее кто знает
Ага, этот алгоритм называется бинарным поиском. Работает на порядки быстрее перебора, но только с отсортированными данными.
ну ну... а не N^2 ли переборов ли надо сделать шоб отсортировать этот массиф? Даже если не пузырьком, всё равно будет долго
Зависит от задачи - в данном случае данные изначально отсортированы.
Многие алгоритмы сортировки работают в стреднем за O(n*log n) операций. Поиск перебором O(n) операций, а бинпоиск O(log n).