Конспект урока "Исполнитель Робот. Строки" 9 класс

1
Юдин Андрей Борисович
учитель информатики МКОУ Плесской СОШ
Приволжского р-на, Ивановской обл
Уроки информатики в 9 классе
«Исполнитель Робот. Строки»
Введение
Данная презентация является продолжением курса программирования на основе
системы исполнителей Полякова Константина Юрьевича «Исполнители 2.5» Первые пять
презентаций были опубликованы на «Учительском портале» это: Уроки информатики по
теме "Исполнитель Робот. Основные алгоритмические конструкции"
http://www.uchportal.ru/load/17-1-0-56893 , Уроки информатики в 7 классе «Исполнитель
Робот. Учим робота считать» http://www.uchportal.ru/load/17-1-0-57986 и Уроки
информатики в 7 классе «Исполнитель Робот. Графика Windows»
http://www.uchportal.ru/load/17-1-0-60836 . Уроки информатике в 9 классе «Исполнитель
Робот. Вычислительные алгоритмы»
http://www.uchportal.ru/informatika/ispolnitel_robot_vychislitelnye_algoritmy Уроки
информатики в 9 классе «Исполнитель Робот. Массивы» http://www.uchportal.ru/uroki-
informatiki-ispolnitel-robot-massivy .
Курс программирования будет не полным, если не поговорить об обработке
символьной информации. Тем более что символьную строку можно рассматривать как
массив символов.
В системе «Исполнители» есть функции обработки строк. Но я их как правило не
использую. (За исключением функции определяющей длину строки). Однако при желании
их можно ввести курс. Одним из существенных недостатков системы «Исполнители»
является, на мой взгляд, отсутствие функции преобразования типов. Нет возможности
преобразовать символ 3 в целое число 3 и на оборот . А это сужает круг решаемых задач.
Рассмотрим, что написано в справочной системе «Исполнителей»
{Далее по справочной системе}
Начиная с версии 2.0 в язык программирования добавлена поддержка символьных
строк. Символьная строка объявляется в виде символьного массива.
char s[100];
Признаком конца строки является символ с кодом 0. Оставшаяся часть строки
игнорируется при выполнении всех операций со строками. Например, для того, чтобы
принудительно обозначить конец строки, можно использовать оператор присваивания
s[20] = 0;
Если в строке нет символа с кодом 0, считается, что все ее символы - значащие, и длина
строки равна размеру массива. Следует помнить, что нумерация элементов строки, так же,
как и любого массива, начинается с нуля.
Ввод и вывод
Символьные строки можно вводить и выводить целиком (не посимвольно), указывая имя
строки без индекса в операторе ввода или вывода.
Пример
char s[100];
input s;
...
print "Результат ", s;
Операции со строками
2
Простейшей операцией со строками является объединение строк. Для этого можно
использовать просто знак сложения. При этом все операнды должны быть символами или
строками (символьными массивами). Если в результате присваивания получается строка,
длина которой превышает размер массива, выдается сообщение об ошибке.
Пример
char s[100];
print "Как тебя зовут?";
input s;
s := "Привет, " + s + "!";
println s;
Если в этой программе ввести имя "Вася", на экран будет выдано приветствие "Привет,
Вася!".
Для работы с символьными строками используются стандартные функции (приведены их
английские и русские названия):
length ( S )
длина ( S )
Вычисляет длину строки S
copy ( S, N, L )
фрагмент ( S, N, L )
Возвращает фрагмент строки S, который начинается с символа
номер N и имеет длину L
pos ( T, S )
позиция ( T, S )
Определяет позицию подстроки T внутри строки S. Если
подстрока не найдена, результат равен -1.
insert ( T, S, N )
вставить ( T, S, N )
Вставить фрагмент T в строку S, начиная с позиции N.
delete ( S, N, L )
удалить ( S, N, L )
Удалить из строки S фрагмент длиной L, который начинается с
позиции N.
Обратите внимание, что в отличие от языка Паскаль (где есть такие же функции),
параметры функций передаются по значению и не изменяются, поэтому надо
использовать результаты этих функций.
Пример
char s[100];
s = '0123456789';
println длина( s ); // 10
println фрагмент( s, 2, 4 ); // '2345'
println позиция( "45", s ); // 4
println позиция( "54", s ); // -1
println вставить( "AB", s, 2 ); // '01AB234556789'
println удалить( s, 2, 4 ); // '016789'
Строки в процедурах и функциях
Строки могут передаваться в процедуры и функции так же, как и массивы. Это значит, что
в объявлении функции после имени параметра надо указать пустые квадратные скобки. В
примере демонстрируется использование функции, печатающей символьную строку в
обратном порядке.
Пример
main
{
char s[100];
s = "qwertyuiop";
printrev(s);
}
printrev ( char str[] )
{
3
int i, l = length(str);
for (i=l-1; i>=0; i=i-1)
print str[i];
}
Символьная строка может быть возвращаемым значением функции. Для этого после
названия типа char надо указать пустые квадратные скобки. В примере показана функция,
возвращающая "перевернутую" строку:
Пример
main
{
char s[100];
s = "qwertyuiop";
println rev(s);
}
char[] rev ( char str[] )
{
char c;
int i, l = length(str);
for (i=0; i<l/2; i=i+1)
{
c = str[i];
str[i] = str[l-1-i];
str[l-1-i] = c;
}
return str;
}
Описание презентации
Данная презентация является модификацией презентации «Строки в языке
программирования Pascal» http://www.uchportal.ru/load/18-1-0-28452 Переделанная с
учетом личного опыта и другого языка программирования.
Занятие 1.
Слайд 1. На данном занятии дается понятие строки как массива символов. Я не
говорю учащимся, что признаком завершения строки в исполнителях является символ с
кодом 0. Его нет и на других слайдах, демонстрирующих заполненную строку. На слайде
приводится, как объявляется массив символов, и как он заполняется с клавиатуры.
Слайд 2. Показано, что нумерация символов в символьном массиве начинается с 0.
И показаны два цикла как перебирать символы в строковом массиве с первого до
последнего символа и наоборот с последнего до первого символа.
Слайд 3. Показано решение задачи: Сравнить длину двух строк введенных с
клавиатуры. При решении используется функция определения длинны строки.
Слайд 4. Показано решение задачи: Из слова ИНФОРМАТИКА вырезкой букв
получить слово ТОРТ.
Слайд 5. Даны задачи для самостоятельного решения:
1. Получите из слова "ИНТЕГРАЛ" слова "ГАНТЕЛИ", "РЕНТГЕН", "ТИГР",
"АГЕНТ".
2. Составить программу, которая запрашивает фамилию и имя человека и выводит их
в одну строку с приветствием.
3. Дана строка символов. Вывести на экран ее первый и последний символ.
4
4. С клавиатуры вводится слово, верно ли, что оно начинается и заканчивается на
одну и туже букву
Все задачи решаются без использования циклов. И из функций используется только
определение длины строки.
Занятие 2 Способы решения задач на строки
Собственно для начального изучения программирования, задачи на обработку
строк можно разделить на три группы:
1. Когда что то нужно подсчитать в строке,
2. Когда изменяется строка без изменения ее длины,
3. Когда происходит изменение строки и ее длины.
Слайд 6. Показано решение задачи: Дана строка символов. Определить сколько раз
в ней встречается буква а (строчная, английская). (Первый тип задач)
Слайд 7. Блок- схема к задаче из слайда 6.
Слайд 8. Показано решение задачи: Дана строка символов. Заменить в ней все
буквы А на букву О. (Второй тип задач)
Слайд 9. Блок- схема к задаче из слайда 8.
Слайд 10. Показано решение задачи: Удалить из строки введенной с клавиатуры
все буквы R (латинские, заглавные). (Третий тип задач)
Слайд 11. Блок- схема к задаче из слайда 10.
Слайд 12. Даны задачи для самостоятельного решения:
1. Дан текст. Определить каких букв М или Н в нем больше.
Решение:
Программа
{
char s[250];
cout <<"Введи строку "; cin >>s;
int k,k1,i;
for(i=0;i<length(s);i=i+1)
{
if (s[i]=='М') k=k+1;
if (s[i]=='Н') k1=k1+1;
}
if (k>k1) cout <<"Букв М больше";
if (k<k1) cout <<"Букв Н больше";
if (k==k1) cout <<"Одинаково";
}
2. Составить программу, исправляющую правописание «ЖИ» и «ШИ» в слове,
введенном с клавиатуры.
Решение:
Программа
{
char s[250];
cout <<"Введи строку "; cin >>s;
int i;
for(i=1;i<length(s);i=i+1)
{
if (s[i]=='Ы' | s[i-1]=='Ж') s[i]='И';
if (s[i]=='Ы' | s[i-1]=='Ш') s[i]='И';
}
5
cout << s;
}
3. Дана строка символов. После каждой буквы П вставить три знака восклицания
«!!!».
Решение:
Программа
{
char s[250],temp[250]="";
cout <<"Введи строку "; cin >>s;
int i;
for(i=0;i<length(s);i=i+1)
{
if (s[i]!='П') temp=temp+s[i];
else temp=temp+s[i]+"!!!"
}
s=temp;
cout <<"Новая строка = ";
cout <<s;
}
Занятие 3 Задачи с вложенным ветвлением и циклами
Слайд 13. Показано решение задачи: В заданном тексте везде букву "а" заменить на
букву "б", а букву "б" - на букву "а". При решении задачи используется вложение
ветвлений. Возможны и другие решения.
Слайд 14. Блок- схема к задаче из слайда 13.
Слайд 15. Показано решение задачи: Дана строка символов, содержащая знаки
препинания. Подсчитать какие и сколько знаков препинания содержит строка. При
решении используется вложение циклов.
Слайд 16. Блок- схема к задаче из слайда 15.
Слайд 17. Даны задачи для самостоятельного решения. На всякий случай приведу
свои решения их нет в презентации. (Возможны и другие варианты)
1. Дана строка, изображающая двоичную запись целого положительного числа.
Вывести строку изображающую десятичную запись того же числа.
Решение:
Программа
{
char s[250];
cout <<"Введи строку "; cin >>s;
int i,n=0;
int r=1;
for(i=length(s)-1;i>=0;i=i-1)
{
if (s[i]=='1')n=n+r;
r=r*2;
}
cout <<"Десятичная запись = ";
cout <<n;
}
2. Дана строка содержащая буквы и цифры, Определить чего в данной строке
больше, букв или цифр.
Решение:
6
Программа
{
char s[250];
cout <<"Введи строку "; cin >>s;
int k=0,k1=0,i,j;
char s1[10]="0123456789";
for(i=0;i<length(s1);i=i+1)
{
for(j=0;j<length(s);j=j+1) if (s[j]==s1[i]) k=k+1;
}
k1=length(s)-k;
if (k>k1) cout <<"Цифр больше";
if (k<k1) cout <<"Букв больше";
if (k==k1) cout <<"Одинаково";
}
3. Из заданного текста выбрать и вывести на экран те символы, которые
встречаются в нём ровно один раз.
Решение:
Программа
{
char s[250];
char s1[250];
cout <<"Введи строку "; cin >>s;
int i,j;
for(i=0;i<length(s);i=i+1)
{
int k=0;
for(j=0;j<length(s);j=j+1) if (s[j]==s[i]) k=k+1;
if (k==1) cout << s[i];
}
}
Слайды с 19 по 24 при прямом просмотре не отображаются на экране. Они
содержат решения заданий уроков 2 и 3. Для первого урока решения как правило не
вызывают затруднения, по этому их не привожу. Переход на скрытые слайды и
возвращение обратно осуществляется щелчком по кнопке.
Список литературы
1. Система «Исполнители 2.5» и методические рекомендации к ней. Автор: Поляков
К.Ю. http://kpolyakov.spb.ru/school/robots/methodic.htm
2. В.В. Подбельский, С.С.Фомин. Программирование на языке Си. М .: ФиС, 1999,
600 с.
3. Х.М.Дейтел., П.Дж.Дейтел. Как программировать на Си++. М .: ЗАО БИНОМ,
1999, 1000 с. (первые 600 страниц - изложение обычного Си, наиболее подходят
для начинающих).