Технологии программирования
Фрагмент обобщенного плана экзаменационной работы по информатике и ИКТ 2015 г. Проверяемые элементы содержания Уровень сложности Примерное время 24 Умение прочесть фрагмент программы на языке программирования и исправить допущенные ошибки П30 27 Умения создавать собственные программы (30–50 строк) для решения задач средней сложности В55
Задание 24 (C1) (повышенный уровень, время – 30 мин) Тема: Исправление ошибок в простой программе с условными операторами. Что нужно знать: команды ветвления a = b? нет да полная форма ветвления блок-1 блок-2 Рисунок 1 a = b? нет да неполная форма ветвления блок-1 Рисунок 2 if a = b then begin {блок-1 } and else begin {блок-2 } end; if a = b then begin { блок-1 } end;
a = b? нет да блок-10 блок-2 a = c? да блок-11 блок-12 нет Что нужно знать: вложенные команды ветвления
Демоверсия На обработку поступает положительное целое число, не превышающее Нужно написать программу, которая выводит на экран сумму цифр этого числа, меньших 7. Если в числе нет цифр, меньших 7, требуется на экран вывести 0. Программист написал программу неправильно. var N, digit, sum: longint; begin readln(N); sum := 0; while N > 0 do begin digit := N mod 10; if digit < 7 then sum := sum + 1; N := N div 10; end; writeln(digit) End.
Последовательно выполните следующее. 1. Напишите, что выведет эта программа при вводе числа Приведите пример такого трёхзначного числа, при вводе которого программа выдаёт верный ответ. 3. Найдите все ошибки в этой программе (их может быть одна или несколько).
Решение 1. При вводе числа 456 программа выведет 4 (первую цифру числа). 2. Программа выведет верное значение, если первая цифра числа равна сумме цифр, меньших 7, например, для числа 743 первая цифра (7) равна сумме цифр, меньших 7 (4 + 3). 3. В программе нужно исправить две ошибки a. Неверное изменение переменной sum: Было: sum:=sum+1; Исправление: sum:=sum+digit; b. Неверный вывод результата: Было: writeln(digit); Исправление: writeln(sum); Другие примеры
Задание 24 (C1) (повышенный уровень, время – 30 мин) Тема: Обработка данных, вводимых в виде символьных строк (написать программу средней сложности из строк) или последовательности чисел.
... Сортировка массива. Слияние двух упорядоченных массивов в один без использования сортировки. Обработка отдельных символов данной строки. Подсчет частоты появления символа в строке. Работа с подстроками данной строки с разбиением на слова по пробельным символам. Поиск подстроки внутри данной строки, замена найденной подстроки на другую строку. Кодификатор КИМ ЕГЭ 2016, возможные алгоритмические задачи
Сортировка массива program Sort_Puz;{метод пузырька} const N=20; var A:array[1..N] of integer; i,j,c: integer; begin for i:=1 to N do read(A[i]); for j:=1 to N-1 do for i:= 1 to N-j do begin if A[i]>A[i+1] then begin c:=a[i]; a[i]:=a[i+1]; a[i+1]:=c; and; end; for i:=1 to N do write(A[i]); End.
Сортировка массива program Sort_Andreeva; {«неэффективная реализация прямого выбора»} const N=20; var A:array[1..N] of integer; min,S,i,j,c: integer; begin for i:=1 to N do read(A[i]); for i:=1 to N-1 do for j:=i+1 to N do begin if A[i]>A[j] then begin c:=a[i]; a[i]:=a[j]; a[j]:=c;end; end; for i:=1 to N do write(A[i]); end.
Операции над строками Операции отношения: =,, =, <>. Сравнение строк производится слева направо до первого несовпадающего символа. Если длины строк разные, но в общей части символы совпадают, то считается, что больше более длинная строка. Операция сцепления (+) применяется для соединения нескольких строк в одну строку. Сцеплять можно как константы, так и переменные. Сцепление можно выполнять и с помощью функции Concat(S1, S2, …, S1). Функция Copy(S,M,N) выделяет из строки S подстроку длиной N символов, начиная с позиции M. Функция Length(S) определяет текущую длину строки S. Функция Pos(S1, S2) обнаруживает первое появление в строке S2 подстроки S1. Результат – номер позиции, с которой она начинается. Если подстрока не найдена, возвращается 0.
Процедура Delete(S,M,N ) – удаление N символов из строки S, начиная с символа с позиции M. Процедура Insert(S1, S2,N) – вставка строки S1 в строку S2, начиная с символа с позиции N. Процедура Str(i: integer; var s: string)- преобразует целое значение i к строковому представлению и записывает результат в s. Процедура Val(S,X,Code) – преобразует строку S во внутреннее представление целой или вещественной переменной Х, параметр Code получает значение 0, если преобразование прошло успешно, и тогда в Х помещается результат преобразования, в противном случае Code содержит номер позиции, где обнаружен ошибочный символ, и в этом случае Х не меняется. Например, в результате обращения Val( 123, k, c) k получит значение 123, а обращение Val( 123, k, c) ошибочно. Операции над строками
Функция UpCase(С) : Char преобразует строчную латинскую букву в заглавную. С – выражение типа CHAR, которое находится в пределах a-z, в противном случае функция не выполняет никаких действий. Функция Chr( X : Byte ): Char Возвращает символ с заданным порядковым номером X. Функция Ord( C : Char ): Byte Возвращает код символа С. Операции над строками
begin read(S); k:=0; L:= length(S); for i:=1 to L do if S[i]= then k:=k+1; write(кол-во слов:, k+1); end. Задача: Дана строка, заканчивающаяся точкой. Подсчитать, сколько в ней слов. Слова в тексте разделены одним пробелом.
Далее выполняется предыдущий алгоритм. Если слова в тексте разделены произвольным кол- вом пробелов, их сначала нужно удалить, оставив по 1 пробелу. Это можно сделать так: … n:= Pos(,S); whiele n<>0 do begin Delete(S,n,1); n:= Pos(,S); end; if S[1]= then Delete(S,1,1); L:= length(S); if S[L]= then Delete(S,L,1); …
Задача 27 (С4) На вход программы подается 366 строк, которые содержат информацию о среднесуточной температуре всех дней 2008 года. Формат каждой из строк следующий: сначала записана дата в виде dd.mm (на запись номера дня и номера месяца в числовом формате отводится строго два символа, день от месяца отделен точкой), затем через пробел записано значение температуры число со знаком плюс или минус, с точностью до 1 цифры после десятичной точки. Данная информация отсортирована по значению температуры, то есть хронологический порядок нарушен. Требуется написать программу на языке Паскаль или Бейсик, которая будет выводить на экран информацию о месяце (месяцах), среднемесячная температура у которого (которых) наименее отклоняется от среднегодовой. В первой строке вывести среднегодовую температуру. Найденные значения для каждого из месяцев следует выводить в отдельной строке в виде: номер месяца, значение среднемесячной температуры, отклонение от среднегодовой температуры.
Решение Const d:array [1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31); Var f:text; tm:array [1..12] of real; {Среднемесячная температура} data:string[5]; min,t,ty:real; i,j,k,m,code:integer; Begin assign (f,'METEO.DAT'); reset(f); for i:=1 to 12 do tm[i]:=0; ty:=0; for i:=1 to 365 do begin readln(f,data,t); val(data[4]+data[5],m,code); tm[m]:=tm[m]+t; ty:=ty+t; end;
for i:=1 to 12 do tm[i]:=tm[i]/d[i]; ty:=ty/365; min:=abs(tm[1]-ty); for i:=2 to 12 do if abs(tm[i]-ty)<min then begin min:=abs(tm[i]-ty); end; Writeln(ty); for i:=j+1 to 12 do if abs(abs(tm[i]-ty)-min)< then writeln(I,tm[i], abs(tm[i]-ty)); End.