Анатолій Бабін, вчитель-методист Жовтневського НВК Конотопського району Сумської області
Евристичні дослідження ІКС-файлів на уроках інформатики
УРОК 2
ТЕМА УРОКУ: Вказівки і функції опрацювання рядкових величин та їх опис мовою програмування Pascal.
МЕТА УРОКУ: Розглянути особливості рядкового типу даних, відповідні вказівки та функції на мові програмування Pascal.
ТИП УРОКУ: Урок вивчення нового матеріалу.
ТЕХНОЛОГІЯ: Метод евристичних досліджень і поетапне формування понять.
ЗАБЕЗПЕЧЕННЯ УРОКУ: Заздалегідь підготовлена на робочому столі папка UROK9-48 з текстовим файлом string.doc, у якому в стислій формі описаний теоретичний матеріал уроку і сформульовано завдання для самостійних досліджень та шістьма ІКС-ФАЙЛАМИ Flengtht.exe; Fpos.exe; Fconcat.exe; Fcopy.exe; Pdelete.exe; Pinsert.exe. Навчальні х-файли демонструють роботу функцій та процедур з рядковими величинами.
Вчитель: Чи доцільно було б у комп'ютерній обробці текстової інформації обмежитись символьними величинами? Давайте проаналізуємо дане питання.
Учні: Повна інформація міститься не в окремих літерах, а в тексті, який у свою чергу складається із речень, речення - із слів. Слова і навіть речення можуть у тексті повторюватись, тому доцільно було б використовувати окрім літерних величин більш укрупнені одиниці, які відповідали б за цілі слова і словосполучення, - тобто, певну послідовність символів.
Вчитель: В інформатиці такі величини, які відповідають послідовності будь-яких символів, називають рядковими величинами або просто рядком.
Продовжимо наші дослідження ІКС-ФАЙЛІВ у папці UROK9-48. Потрібну початкову інформацію можна одержати у текстовому файлі string.doc. Уважно знайомтесь із його змістом і потім продовжимо роботу.
Зміст файлу string.doc:
Рядковий тип величин (STRING).1) Рядок - це послідовність символів кодової таблиці. 2) Кожен рядок складається з певної кількості символів. Кількість символів - це і є довжина рядка (Length). Рядкові константи: 'Урок', 'урок', '?#?', '123', '2abc', 'computer', 'IBM','' Найдовший рядок має 255 символів, найкоротший - 0 (нульовий або пустий рядок) - ''. 3) Рядки можуть бути оголошені двома способами: a) Ім'я: string; {Оголошено рядок довжиною 255 символів} б) Ім'я: string[ДовжинаРядка]; {Рядок має вказану довжину} 4) Одержати доступ до якогось певного символа рядка можна, вка¬завши його номер у квадратних дужках після імені змінної (рядка). Наприклад, R='Місяць травень'. Тут R[1]='М'; R[3]='ц'; 5) Функції та процедури для роботи з рядковими величинами: Функції: Lengtht; Pos; Сoncat; Copy; Процедури: Delete; Insert. Для з'ясування дії цих функцій і процедур використаємо ІКС-ФАЙЛИ з відповідними іменами: Flengtht.exe; Fpos.exe; Fconcat.exe; Fcopy.exe; Pdelete.exe; Pinsert.exe. Як видно, імена файлів, які демонструють дію функцій, починаються з літери F, а файлів, які демонструють дію процедур - з літери P. Запускайте файли у вказаному порядку. Дослідіть призначення цих функцій для роботи з рядковими величинами за такою схемою: а) призначення (дія) функції або процедури; б) який синтаксис запису функції або процедури; в) яка величина є аргументом даної функції; г) які параметри використовують поряд з аргументом; д) що є результатом дії функції, до якого типу величин належить. Зробіть висновки. Успіхів у "розшифруванні" Х-ФАЙЛІВ! |
Зміст ІКС-ФАЙЛІВ:
(Після кожного лістингу наведено висновки, які потрібно зробити з їх дослідження)
1 Program Flenght; {Дія функції Length (довжина рядка)}
var R: string[80];
n: integer;
begin
writeln('Введіть довільний рядок R'); readln(R); n:=Length(R); writeln('Рядок складається з N=',n,' символів'); readln;
end.
|
Висновок: Функція Length(R) - визначає довжину рядка, який міститься у змінній R (кількість символів, включаючи проміжки) |
2 Program Fpos; {Дія функції Pos - номер позиції першого входження слова в рядку}
var R,word:string;
p: integer;
begin
writeln('Введіть довільний рядок R'); readln(R); writeln('Введіть довільний підрядок WORD даного рядка'); readln(word); p:=pos(word,R); writeln('В рядку R підрядок WORD починається ', 'з позиції Р =',p); readln;
end.
|
Висновок: Функція Pos(word,R) визначає номер позиції першого входження заданого підрядка WORD у рядку R. |
3 Program Fconcat; {Демонструє конкатенацію (склеювання) рядків}
var R: string[35];
R1: string[35]; R2: string[35]; R3: string[35];
begin
writeln('Введіть рядок R1 з пробілом в кінці , <Enter>'); readln(R1);
writeln('Введіть рядок R2 з пробілом в кінці , <Enter>'); readln(R2);
writeln('Введіть рядок R3 , <Enter>'); readln(R3);
R:=concat(R1,R2,R3);
writeln(('R=R1+R2+R3 = ',R);
end.
|
Висновок: Функція Сoncat(R1,R2,…,Rn) виконує об’єднання (конкатенацію або склеювання) рядків. |
Учитель: Розгляньте ще один приклад за наведеним лістингом і зробіть висновок. Перевірте роботу програми, запустивши файл Fconcat1.ехе, проаналізуйте результати її виконання та зробіть висновки.
4 Program Fconcat1; {Конкатенація (склеювання) рядків, які задані як рядкові константи}
Const R1=' Мова ';
R2='програмування '; R3='Turbo Pascal.';
var R: string[35];
begin
R:=R1+R2+R3; writeln(R);
end.
|
ЗАВДАННЯ 1. Що буде результатом виконання програми?
ЗАВДАННЯ 2. Порівняйте спосіб "склеювання" рядків у двох попередніх программах і сформулюйте висновки.
Висновки:
Замість функції concat, яка виконує конкатенацію (склеювання) рядків, можна в програмах на Pascal записувати суму рядків, використовуючи знак „+”, тобто, є два способи опису об’єднання дядків:
Синтаксис 1: concat(A,B,C,...,D)
Синтаксис 2: A+B+C+...+D
ЗАВДАННЯ 3. Дано два рядки: А='абра', D='кадабра'. Який буде результат дії функції concat(D,A)?
5 Program FCopy; {Дія функції Copy - копіювання фрагменту рядка}
var R, word: string[80];
poz,n: integer;
begin
writeln('Введіть довільний рядок R'); readln(R);
writeln('Введіть номер символа POS, ', 'з якого починати копіювати'); readln(poz); writeln('Скільки символів N, треба копіювати'); readln(n);
word:=copy(R,poz,n);
writeln(word);
readln;
end.
|
Висновок: функція copy(R,Poz,N) копіює (вирізає) частину (фрагмент) рядка R з позиції Poz N символів. |
ЗАВДАННЯ 4. Нехай рядок R='Севастополь'. Який результат буде після виконання функції copy(R,5,4)? copy(R,1,4)? copy(R,6,6)? copy(R,5,3)?
6 Program Pdelete; {Процедура Delete - вилучає слово довжиною N у рядку R з позиції Poz}
var R: string[80];
Poz,N: integer;
begin
writeln ('Введіть довільний рядок R'); readln(R); writeln('Введіть позицію Pos, з якої хочете ', ' вилучити якийсь підрядок слово)'); readln(poz);
writeln('Введіть довжину слова N для вилучення з рядка'); readln(n);
delete(R,Poz,n);
writeln(R);
readln;
end.
|
Висновок: Процедура Delete - вилучає слово довжиною N у рядку R з позиції Poz. |
ЗАВДАННЯ 5. Нехай рядок R='Календарний'. Який результат буде після виконання функції delete(R,3,5)? delete(R,1,5)? delete(R,3,10)?
7 Program Pinsert; {Процедура Insert - вставляє слово WORD у рядок R, починаючи з позиції POZ}
var R,word:string[80];
Poz: integer;
begin
writeln('Введіть довільний рядок R'); readln(R);
writeln('Введіть підрядок (слово) WORD',' для вставки у рядок'); readln(word);
writeln('Введіть позицію POZ, куди вставити слово'); readln(poz);
insert(word,R,Poz);
writeln(R);
readln;
end.
|
Висновок: Процедура Insert(word,R,Poz) вставляє слово WORD у рядок R з позиції Poz. |
ЗАВДАННЯ 6. Нехай рядок R='карати, милувати ', рядок word = ' не можна '. Який результат буде після виконання функції: insert(word,R,1); insert(word,R,7); insert(word,R,8); insert(word,R,17).
Відповідь: 1) ' не можна карати, милувати'; 2) 'карати не можна, милувати'; 3) 'карати, не можна милувати'. 4) 'карати, милувати не можна';
ОПОРНИЙ КОНСПЕКТ з теми "Опрацювання рядкових величин"
Рядковий тип величин (STRING). 1) Рядок - це послідовність символів кодової таблиці. 2) Кожен рядок складається з певної кількості символів. Довжина рядка (Length) - це кількість символів, з яких він складається. Рядкові константи: 'Урок', 'Turbo Pascal', '?#?', '123', '2abc', 'computer', 'IBM','' Найдовший рядок має 255 символів, найкоротший - 0 (нульовий або пустий рядок) - '' 3) Рядки можуть бути оголошені двома способами: a) Ім'я: string; {Оголошено рядок довжиною 255 символів} б) Ім'я: string[ДовжинаРядка]; {Рядок має вказану довжину} 4) Одержати доступ до якогось певного символа рядка можна, вказавши його номер у квадратних дужках після імені змінної (рядка). Наприклад, R='Місяць травень'. Тут R[1]='М'; R[3]='ц'; 5) Функції та процедури для роботи з рядковими величинами: - Функція Length(R) - визначає довжину рядка, який міститься у змінній R (кількість символів, включаючи проміжки). Формат: Length(R): integer; R: string. - Функція Pos визначає номер позиції першого входження заданого підрядка WORD у рядку R. Формат: Pos(R,word):byte; рядок R:string; підрядок word: string - Функція Сoncat виконує конкатенацію (склеювання) рядків у тому порядку, в якому вони записані. Інакше можна А+І+С+...+Z. Формат: Сoncat(A,B,..,Z): string; A,B,..,Z: string; - Функція Copy копіює (вирізає) частину (фрагмент) рядка R з позиції Poz N символів. Формат: copy(R,Poz,N):string; Poz: integer; N: integer. - Процедура Delete вилучає слово довжиною N у рядку R з позиції Poz. Формат: delete(R,Poz,N): string; Poz: integer; N: integer. - Процедура Insert - вставляє слово word у рядок R, починаючи з позиції Poz. Формат: insert(word,R,Poz): string; word: string; R: string; Poz:integer. |
ПРАКТИЧНЕ ЗАВДАННЯ 1
Дано рядкову константу R='Turbo Pascal'; Виконати вирізку з рядка R, щоб одержати рядок 'Pascal'.
Розв'язання
Позначимо фрагмент, який копіюється, іменем word. У даному рядку його позиція Poz=7; і він має довжину N=6. Складаємо програму:
1 Program PZ_1;
Const R='Turbo Pascal';
var word: string[6];
poz,n: integer;
begin
poz:=7; n:=6;
word:=copy(R,poz,n);
writeln(word);
readln;
end.
|
ПРАКТИЧНЕ ЗАВДАННЯ 2
Дано рядок R='Turbo Pascal'; одержати рядок 'Pascal', використовуючи функцію delete.
Розв'язання
У даному рядку треба вилучити слово Turbo його позиція Poz=1; і він має довжину N=6. Дія вилучення матиме вигляд delete(R,Poz,n);
Програма:
2
Program PZ_2;
var R: string[15];
Poz,N: integer;
begin
R:='Pascal'; Poz:=1; N:=6;
writeln(R); {Щоб було видно початковий рядок}
delete(R,Poz,n);
writeln(R); {Кінцевий рядок}
readln;
end.
|
ПРАКТИЧНЕ ЗАВДАННЯ 3
Дано рядок R='Мова програмування Pascal'; одержати рядок 'Мова програмування Turbo Pascal'; Розв'язання Слово Turbo потрібно вставити з 20-ї позиції. Отже, Poz=20;
Програма:
3
Program PZ_3;
var R,word:string[35];
Poz: integer;
begin
Poz:=20; R:='Мова програмування Pascal'; word:= 'Turbo ';
insert(word,R,Poz);
writeln(R);
readln;
end.
|
ПРАКТИЧНЕ ЗАВДАННЯ 4
Дано рядок R='Мова програмування Turbo Pascal'; визначити позицію підрядка 'Pascal' у даному рядку;
Розв'язання
4
Program PZ_4;
Const R='Мова програмування Turbo Pascal';
word='Pascal';
var p: integer;
begin
p:=pos(word,R); writeln('Позиція Р =',p);
readln;
end.
|
Вчитель: Розглянемо випадок опрацювання рядкових величин із записом у файл та зчитуванням з файлу. Спочатку програму зчитування готових файлів:
5 Program Fread1;{Зчитування даних з файла} type CHILDERN=string[15];
var class: file of CHILDERN;
Surname: CHILDERN;
begin
assign(class,'school.dat'); reset(class);
read(class,surname); write('Прізвище учня: '); writeln(surname);
close(class);
end.
|
Вчитель: проаналізуємо роботу другої програми, яка крім зчитування готових файлів сама може їх створювати.
6 Program Fwrite1;{Запис і зчитування даних з файла} type CHILDERN=string[15];
var class: file of CHILDERN;
Surname: CHILDERN;
begin
assign(class,'school.dat'); rewrite(class);
write('Введіть прізвище учня: '); readln(surname);
write(class,surname);
close(class);
end.
|
Підбиття підсумків уроку.
ДОМАШНЄ ЗАВДАННЯ
Обов’язкове. Опрацювати п.2.13 ("Інформатика". Верлань А.Ф.) cт.180-185, опорний конспект Повторити ст.175-189. Завдання 4-6 (cт. 185)
Додатково - завдання 10-18 із переліку завдань до заліку на вибір
ЗАВДАННЯ ДО ЗАЛІКУ (ІI частина - STRING)
(19-23 - обов'язкові. Вибрати довільне одне. Решта - додатково) Скласти програми, які виконували б такі завдання:
19) Перетворення символів рядка до верхнього регістру.
20) Вилучення початкових пробілів рядка.
21) Обчислює алгебраїчну суму одноцифрових чисел, введених з клавіатури у вигляді виразу.
22) Почергове вилучення з рядка літер справа наліво до утворення пустого рядка.
23) Почергове вилучення з рядка літер по одній справа і зліва до утворення пустого рядка.
24) Чи є введений з клавіатури рядок цілим числом.
25) Чи є введений з клавіатури рядок шістнадцятковим числом.
26) Чи є введений з клавіатури рядок шістнадцятковим числом.
27) Чи є введений рядок дробовим числом без знака.
28) Перетворює введене двійкове число в десяткове.
29) Перетворює введене дворозрядне шістнадцяткове число в десяткове.
30) Перетворює введене десяткове число у вказану кристувачем систему числення.
31) Почергове вилучення з рядка літер, які стрічаються найчастіше, до утворення пустого рядка.
32) Упорядкування списку за алфавітом.
Интернет реклама