Число нулей в столбцах:
<d1> ... <dn>
Решением поставленной задачи на ЭВМ можно получить с помощью следующего алгоритма и программа на языке Бейсик. Обратите внимание в программе используются массивы переменной длины, которая определяется при вводе размеров матрицы А:
' подсчет нулевых столбцов ' алг «подсчет нулевых столбцов»
' в квадратной матрице Ann ' нач
read n' чтение(п)
dim A(n,n), D(n)' массивы А(1:п,1:п), D(1:n)
print «Матрица A»;n;n;«:»' вывод («Матрица А»;п;п;«:»)
for k = 1 to n'от k = 1 до п цикл
for 1 =1 to n' от l =1 до п цикл
read A(k,l)' чтение A(k,l)
print A(k,l)'вывод A(k,l)
next 1 ' кцикл
next k' кцикл
for k = 1 to n' om k= 1 до п цикл
D(k) = 0 'D(k) = 0
for 1 = 1 to n ' от l=1 до п цикл
if A(k,l) = 0 then' если A(k, l) = 0 то
D(k) = D(k) + 1 ' D(k) =D(k) + 1
end if' кесли
next 1' кцикл
print D(k); ' вывод D(k);
next k ' кцикл
end ' кон
Задача 2. Дана строка символов. Распечатать все слова нечетной длины, отличные от второго слова.
(В этой задаче «словом» называется группа символов, разделенная с одной или обеих сторон одним или несколькими пробелами и не содержащую внутри себя пробелов.)
Пример строки
Я волком бы выгрыз бюрократизм.
К мандатам почтения нет.
Результат обработки
бы
выгрыз
бюрократизм.
почтения
нет.
Для представления строк в программе на Бейсик можно воспользоваться операторами data:
data «Я волком бы выгрыз бюрократизм.»
data «К мандатам почтения нет.»
data «»
Здесь пустое слово «» означает конец исходного текста.
Для вывода исходных данных и результатов их обработки можно принять следующий сценарий:
исходный текст:
<строка1>
… …
<строкаn>
слова нечетной длины:
<слово1>
… …
<словоm>
Решение поставленной задачи на ЭВМ можно получить с помощью следующих алгоритма и программы на Бейсике, в которых в виде вспомогательного алгоритма и подпрограммы выделена обработка каждой отдельной строки текста:
' выделение слов нечетной длины 'алг «слова нечетной длины»
print «исходный текст:» 'вывод «исходный текст;»
n = 0: s2$ = «» ' n = 0: s2$ = «»
print «исходный текст:»' вывод «исходный текст:»
do 'цикл
read str$ 'чтение_строки
if str$ = «» then exit do 'при str$ = «» выход
print str$ 'вывод_строки
gosub stroka 'обработка_строки
loop ' кцикл
end 'кон
stroka: ' обработка строки 'алг «обработка строки»
dl = len(sfr$) ' dl = длuнa(str$)
print «слова нечетной длины:» 'вывод «слова нечетной длины:»
sl = 0' sl=0
for k=l to dl ' от k = 1 до dl цикл
if str$(k) 0 «» then 'если str$(k) ¹ «» то
sl = sl + 1 ' sl = sl + 1
elseif sl > 0 then 'инеc sl > 0 то
p = k - sl + 1 ' p = k - sl + 1
slv$ = mid$(str$,p,sl) ' slv$ = cpeдн.(str$,p,sl)
n = n + 1 ' n = n + 1
if n = 2 then 'если n = 2 то
sl2$ = slv$ ' sl2$ = slv$
elseif slv$ 0 sl2$ then 'инеc slv$ ^ sl2$ то
if (sl/2)*2= si then 'если (sl/2) *2 = sl то
print slv$ 'вывод slv$
end if 'кесли
end if ' кесли
sl = 0 ' sl = 0
end if ' кесли
next k ' кцикл
return ' кон
Экзаменационные задачи МЭСИ (Московский государственный
университет экономики, статистики и информатики)
1. Дана действительная квадратная матрица А порядка N, где N - заданное натуральное число, все элементы которой различны. Сколько элементов матрицы равны (МАХ + MIN)/2, где МАХ, MIN - соответственно, максимальное и минимальное значения среди элементов матрицы.
2. Дана целочисленная матрица А размера M´N, где М, N - заданные натуральные числа. Сформировать одномерный массив В, где B(i) равно сумме элементов, кратных пяти и расположенных в i строке матрицы i = 1,2, .... М.
3. Дана целочисленная матрица А размера MxN, где М, N - заданные натуральные числа. Найти количество столбцов матрицы, содержащих одни нулевые элементы
4. Дана квадратная целочисленная матрица А порядка N, где N - заданное натуральное число, все элементы которой различны. Поменять местами строку, в которой находится наименьший элемент матрицы, со строкой, где находится наибольший элемент матрицы.
5. Дана целочисленная матрица А размера М х N, где М, N - заданные натуральные числа, причем М > 5. Найти количество столбцов матрицы, в каждом из которых содержится не менее 5 нулевых столбцов.
6. Дана квадратная целочисленная матрица А порядка N, где N - заданное натуральное число. Является ли заданная матрица магическим квадратом, т. е. такой матрицей, в которой суммы элементов во всех строках и столбцах одинаковы
7. Дана действительная матрица А размера M´N, где М, N - заданные натуральные числа, все элементы которой различны. Сформировать одномерный целочисленный массив В, где B(j) равно среднему арифметическому значению индексов наибольшего и наименьшего элементов в j -омстолбце j =1,2, .... N.
8. Дана строка символов. Распечатать все слова с количеством символов больше 4 и меньше 10.
9. Дана строка символов. Распечатать самое длинное слово, начинающееся на букву «К».
10. Дана строка символов. Распечатать самое длинное слово, первые две буквы которого «КО».
11. Дана строка символов. Составить одномерный массив из слов, которые отличны от слова INFORMATION.
12. Дана строка символов. Распечатать самое длинное симметричное слово, первые две буквы которого «КО».
13. Дана строка символов. Выяснить, какое слово встречается раньше в строке с наименьшим или наибольшим количеством символов.
14. Дана строка символов. Определить среднее количество символов в словах четной длины.
15. Дана строка символов. Распечатать все слова нечетной длины, начинающиеся и оканчивающиеся на букву «Т».
В экзаменационных задачах и заданиях проверка правильности составленных программ проводится на ЭВМ путем их испытания на специально подбираемых тестах. Эта работа проводится преподавателями или экзаменаторами по завершении отладки программ на ЭВМ.
Напомним два основных определения, на которых базируется оценка правильности программ по результатам их тестирования:
1) программа объявляется содержащей ошибки, если можно указать тесты, при которых выполнение программы на ЭВМ приводит к отказу, сбою или получению неправильных результатов;
2) программа является правильной, если при любых допустимых исходных данных она дает правильные результаты.
Напомним два дополнительных, но весьма существенных определения допустимости исходных данных:
1) исходные данные считаются допустимыми, если для этих данных существует решение поставленных задач;
2) исходные данные недопустимы, если для этих данных поставленная задача не имеет решений.
Наконец правильность результатов решения регламентируется следующими двумя определениями:
1) результаты решения правильные, если они соответствуют требованиям поставленной задачи;
2) результаты решения неправильные, если они противоречат требованиям поставленной задачи.
Подбор тестов для проверки программ опирается на некоторые общие принципы, среди которых можно выделить следующие:
1) проверка частных случаев задачи;
2) проверка основных случаев задачи;
3) проверка граничных случаев.
Частные случаи - те, которые допускают простейшие способы решения и проверки правильности результатов. Граничными случаями объявляются данные, которые лежат на границе между допустимыми и недопустимыми данными.
Разбор этих понятий проведем на примере типичной экзаменационной задачи по информатике.
Задача. «Средняя зарплата».
Среди N сотрудников отдела выделить тех, кто получает зарплату выше средней по данным из следующей таблицы:
Иванов | начальник | 2500 |
Петров | сотрудник | 1800 |
Сидоров | секретарь | 900 |
Типичность этой задачи заключается в том, что она является одной из задач обработкиданных, представленных в нашем случае таблицей. Частным случаем в этой задаче является таблица, состоящая из одной строки (случай N = 1). Граничным случаем - ситуация, когда все сотрудники получают одинаковую зарплату и никто из них не получает зарплату выше средней.
Типичными ошибками в программах решения этой задачи может быть отсутствие обработки частного случая, когда N = 1, либо отсутствие ответа на граничную ситуацию, когда все получают одинаковую зарплату.
Приведем примеры тестов, применявшихся при проверке на ЭВМ правильности программ решения этой задачи:
1) тест1(проверка основного случая):
Иванов | начальник | 2500 |
Сидоров | секретарь | 900 |
2) тест2 (проверка частного случая):