12+  Свидетельство СМИ ЭЛ № ФС 77 - 70917
Лицензия на образовательную деятельность №0001058
Пользовательское соглашение     Контактная и правовая информация
 
Педагогическое сообщество
УРОК.РФУРОК
 
Материал опубликовал
Мажитова Миля Рашитовна20

Предмет / Класс / Автор УМК

Информатика. 10 класс, И.Г. Семакин

Тема урока

Комбинированный тип данных

Тип урока

Урок открытия новых знаний

Цель урока

Задачи урока

Изучить комбинированный тип данных языка программирования Pascal,  научить учащихся использованию данного структурного типа при решении задач.

Образовательные:

1) формирование умений и навыков записи комбинированного типа данных на языке программирования Pascal;

2) рассмотреть пример программирования комбинированного типа данных с помощью записи;

3) получить опыт программирования кс использованием комбинированного типа данных.

Развивающие:

1) развитие познавательного интереса, логического мышления и внимания учащихся;

2) развитие навыков индивидуальной практической деятельности и умения работать в команде;

3) развитие коммуникационной компетентности у учащихся.

Воспитательные:

1) повышение мотивации учащихся путем использования нестандартных задач;

 2) формирование творческого подхода к решению задач, четкости и организованности, умения оценивать свою деятельность и деятельность своих одноклассников.

Оборудование

Мультимедийный проектор, ПК учителя, ПК учащихся, учебники, тетради.

ХОД УРОКА

Этап

Деятельность учителя

Деятельность ученика

Примечание

Организационный момент.

 

Приветствие, проверка присутствующих.

Здравствуйте. Сегодня нам предстоит проделать большую работу, которая поможет Вам разобраться еще в одной из тем. Приступим.

Настраиваются на работу

 

Постановка цели и

задач урока. Мотивация (самоопределение) к учебной деятельности учащихся.

Мы с вами изучаем программирование уже на протяжении нескольких уроков Мы научились программировать, сегодня мы научимся использовать комбинированный тип данных.

Слушают учителя

 

Актуализация знаний

-Чем отличается строковый тип данных от символьного?

-Как описывается строковый тип?

-Как обратиться к конкретному символу строки?

-Назовите основные операции над строками?

Отвечают на вопросы

 

Первичное усвоение новых знаний.

Сегодня на уроке, мы рассмотрим понятие в программировании -комбинированный тип данных. Тема урока: «Комбинированный тип данных».

Комбинированный тип данных – это структурный тип, состоящий из фиксированного числа компонентов (полей) разных типов.

Тип поля: любой простой или структурированный тип (кроме файлового);

Идентификация поля записи – составное имя: <имя записи>.<имя поля>.

Комбинированный тип объявляется в программе в разделе типов:

Type <имя> = record

<имя поля 1>:<тип>;

<имя поля №>: <тип>

End.

Поля могут иметь любые типы, в том числе и комбинированный тип.

Записи в языке Pascal

Запись – это структурированный тип данных, состоящий из фиксированного числа компонентов одного или нескольких типов (полей). Величина комбинированного типа.

Базовый тип – это совокупность всех возможных элементов множества.

Всего в базовом множестве может быть не более 256 различных элементов. Значение переменных множественного типа может содержать любое количество различных элементов базового типа – от нуля элементов (пустое множество) до всех возможных значений базового типа.

Множества, используемые в программе, могут

быть описаны следующим образом:

Type

<имя типа> = record

<идентификатор поля>: <тип компонента>;

<идентификатор поля>: <тип компонента>;

End;

После этого в разделе переменных следует описание:

Var

<идентификатор переменной>: <имя типа>;

Пример:

Type

Uchenik = record

fam: string [15]; {поле для хранения фамилии ученика};

b1,b2,b3,b4,b5:2..5; {поле для хранения баллов по дисциплинам};

sb: real; {поле для хранения среднего балла}

End;

Var

klass: array [1..25] of uchenik;

Пояснения: переменная типа uchenik будет хранить структуру, содержащую информацию

об одном ученике. Чтобы хранить информацию обо всех 25 учениках класса, необходимо

ввести массив klass, представляющий массив записей.

Элементы записи идентифицируются составными именами следующей структуры:

<Имя переменной>.<Имя поля>

Доступ к полям записи можно осуществить 2-мя способами:

1) С указанием имени переменной и имени поля (составное имя). Составное имя можно использовать везде, где допустимо применение типа поля. Для присваивания полям значений

используется оператор присваивания.

Пример обращения к полям записи: klass [2].fam, klass [3].sb, klass [4].b4.

Ввод фамилий и оценок учащихся, то есть элементов массива klass, можно записать так:

For i:=1 to 25 do;

Begin

Readln ( klass[i].fam );

Readln (klass[i].b1);

Readln (klass[i].b2);

Readln (klass[i].b3);

Readln (klass[i].b4);

Readln (klass[i].b5);

End;

2) С использованием оператора присоединения.

Обращение к полям записи имеет несколько громоздкий вид.

Для решения этой задачи предназначен оператор withdo…, который имеет следующий формат:

with <переменная типа запись> do <оператор>;

Один раз указав переменную типа запись в операторе withdo…, можно работать внутри

Данного оператора с именами полей как с обычными переменными, т.е. без указания перед идентификатором поля имени переменной, определяющей запись.

For i:=1 to 25 do

With klass [i] do

Begin

Readln (fam);

Readln (b1,b2,b3,b4,b5);

End;

Слушают объяснения учителя и записывают в тетрадь тему урока. Ознакомляются с основными понятиями и записывают в тетрадь. Пишут краткий конспект.

 

5. Первичная проверка понимания. Включение в систему знаний и повторение /практическая работ

Учитель предлагает учащимся рассадиться за компьютеры и начать работу со средой программирования Pascal ABC. Учитель разбирает и объясняет примеры решения задач у доски. Предупреждает учащихся о том, что, если что-нибудь становится непонятным задавать вопросы в ходе разбора следующих задач:

Задача 1. (разобрать совместно).

На экзаменационном листе содержатся сведения о результатах экзаменов, сданных 30 учениками класса. Ввести эти данные в компьютер и получить список всех отличников. В программе используется описание комбинированного типа results. Исходные данные организуются в массив следующей структуры.

Var list: array [1..30] of results;

После ввода в этот массив исходных данных следует фрагмент программы:

For i:=1 To 30 Do

If ( list[i].rus =5) and ( list[i].alg =5)

and ( list[i].phiz =5)

Then Writeln ( list[i].family );

Программа отбирает записи, в которых все поля с оценками равны 5, и выводит соответствующие поля фамилий.

А теперь обсудим проблему: как наиболее удобным способом организовать ввод данных в этой программе? Вводить с клавиатуры неудобно из-за большего объема данных. При каждом повторном запуске программы нужно начинать ввод сначала. А при отладке это наверняка придется делать многократно. Гораздо удобнее подготовить файл с исходными данными с помощью текстового редактора. После этого без проблем можно повторять ввод многократно. Так и поступим. Подготовим текстовый файл следующего вида:

Таблица успеваемости 10 А класса

Фамилия

Русский язык

Алгебра

Физика

Антонов

4

5

5

Андреева

5

3

4

Боброва

5

5

5

     

Таблица содержит данные с фамилиями и оценками 30 учеников класса. Обратите внимание на то, что фамилии записываются в отдельных строках. Необходимость этого связана с реализацией алгоритма: при вводе символьной строки прочитываются полностью очередная строка текстового файла до признака EOLN. При этом фамилии должны содержать не более 15 символов, а первые оценки (по русскому языку) – располагаться не раньше 16-й позиции в своей строке.

Сохраним этот файл в корневом каталоге логического диска D под именем 10_а.txt. Составим программу с вводом таблицы успеваемости и выводом списка отличников. Фамилии отличников выведем на экран и сохраним в файле с именем Best.txt.

Решение.

Program Examen;

Type results = record

Fam: string [15];

Rus: 2..5;

Alg:2..5;

Phiz: 2..5

End;

Var list: array [1..30] of results; {Массив записей}

i: integer; F1, F2:text;

Begin

Assign (F1, ‘ D:\10_a.txt ’); {Связывание F1 c файлом 10_a.txt }

Assign (F2, ‘ D:\Best.txt ’); {Связывание F2 c файлом Best.txt }

Reset (F1); {Открытие файла F1 для чтения}

Rewrite (F2); {Открытие файла F2 для записи}

Readln (F1); Readln (F1); {Пропуск 2 строк в файле F1}, {Цикл ввода из файла F1}

For i:=1 To 30 Do

Readln (F1, list [i].Fam, list[i].Rus, list[i].Alg, list[i].Phiz);

{Цикл отбора отличников и вывода их фамилий}

For i:=1 To 30 Do

If ( list[i].rus =5) and ( list[i].alg =5)

and ( list[i].phiz =5)

Then

Begin

Writeln ( list[i].fam ); {Вывод фамилии на экран}

Writeln (F2, list [ i].fam ); {Запись фамилии в файл F2}

End;

Close (F1); Close (F2); {Закрытие файлов}

End.

Задача 2.

Решая рассмотренную задачу с оценками, можно обойтись без массива записей. Кроме того, можно не ставить ограничения на число учеников в классе. Их число выяснится в процессе чтения файла с таблицей успеваемости. Составим программу, которая кроме вывода списка фамилий отличников подсчитывает их количество и процент отличников по отношению к полному составу класса.

Решение.

Program Examen 2:

Type results = record

Fam: string [15];

Rus: 2..5;

Alg: 2..5;

Phiz: 2..5;

End;

Var list: results; {Одна переменная комбинированного типа}

I, K: imteger;

F1,F2: text;

Begin

Assign (F1, ‘ D:\10_a.txt ’);

Assign (F2, ‘ D:\Best.txt ’);

Reset(F1); Rewrite (F2);

Readln (F1); Readln (F1);

I:=0; K:=0; {Инициализация счетчиков}, {Цикл до конца чтения файла}

While not EOF (F1) Do

Begin

Readln (F1, list.fam , list.Rus, list.Alg, list.Phiz);

I:=I+1; {Подсчет числа учеников}

If ( list.rus =5) and ( list.alg =5) and ( list.phiz =5)

Then

Begin

Writeln ( list.fam );

Writeln (F2, list.fam );

K:=K+1; {Подсчет числа отличников};

End

End;

Writeln (‘Из ‘, I, ‘учеников в классе’, K, ‘отличников, что составляет’, K/I*100:4:1, ‘%’);

Close (F1);

Close (F2); {Закрытие файлов}

End.

Пояснение:

В этой программе переменная I используется как счетчик числа учеников, а переменная K- как счетчик числа отличников.

Стандартная логическая функция EOF (end of file) примет значение True, когда процесс чтения из файла дойдет до его конца.

В результате выполнения программы кроме списка отличников на экран выведется строка:

Из 30 учеников в классе 10 отличников, что составляет 33,3%.

Ученики рассаживаются за компьютеры и начинают работать со средой программирования Pascal ABC. Слушают объяснения учителя и переписывают с доски программу в Pascal ABC.

 

Первичное закрепление

Давайте проверим, что у вас получилось.

На каком этапе написания программы мы остановились? Почему? Вижу, что уже все справились. Подходит индивидуально к каждому учащемуся и проверяет корректность работы программы.

Молодцы, все верно. Сохраните программный проект в локальной папке – Cеть\\Teacher29\setka2\Почта и возвращаемся за парты, проверяем, что у нас получилось.

Проверяют свои работы.

Высказываются.

 

Самостоятельная работа

Давайте, ребята проверим, как Вы усвоили тему. Я предлагаю Вам решить самостоятельно задачи.

Задача № 1.

Известны данные об учениках класса: фамилия, имя, отчество, адрес и домашний телефон (если есть). Вывести на экран строки с фамилиями, именами и адресами тех учеников, у которых нет домашнего телефона.

Задача 2:

Известны данные об учениках класса: фамилия, имя, отчество, адрес и домашний телефон (если есть). Вывести на экран строки с фамилиями, именами и адресами тех учеников, у которых фамилия начинается с буквы N (то есть с буквы, которая вводится с клавиатуры отдельно).

Задача 3:

Имеется массив данных о работающих в фирме: фамилия и инициалы, адрес и дата поступления на работу (месяц, год). Во второй массив записать данные только о тех из них, кто на сегодняшний день проработал уже не менее 5 лет.

Ребята решают задачи в тетрадях.

Решение.

Program_Zadanie_1;

Const n=25; {количество учеников в классе}

Type

Uchenik = record

fam: string[15];{поле для хранения фамилии ученика}

name: string[15]; {поле для хранения имени ученика}

otch: string[15]; {поле для хранения отчества ученика}

adres: string[25]; {поле для хранения адреса ученика}

telefon: string[10]; {поле для хранения номера телефона ученика}

End;

Var

Klass: array[1..n ] of uchenik;

i: integer;

Begin

{Заполнение данных}

For i := 1 to n do

With klass[i] do

Begin

writeln (‘Введите фамилию, имя и отчество ученика ’, i);

Readln (fam, name, otch);

writeln (‘Введите адрес ученика ’, i);

Readln (adres);

writeln (‘Введите номер телефона ученика ’, i);

Readln (telefon);

End; {нахождение учеников, у которых нет домашнего телефона}

For i := 1 to n do

With klass[i] do

if length(telefon)=0 then Writeln (fam, ‘ ‘, name, ‘ ‘, otch, ‘ ‘, adres)

readln;

End.

Решение:

Program u16_18_4; (смотри файл u16_18_4.pas )

Const n=25; {количество учеников в классе}

Type

Uchenik = record

fam: string[15]; {поле для хранения фамилии ученика}

name: string[15]; {поле для хранения имени ученика}

otch: string[15]; {поле для хранения отчества ученика}

adres: string[25]; {поле для хранения адреса ученика}

telefon: string[10]; {поле для хранения номера телефона ученика}

End;

Var

Klass: array[1..n ] of uchenik;

i: integer;

b: string[1];

Begin

{Заполнение данных}

For i := 1 to n do

With klass[i] do

Begin

writeln (‘Введите фамилию, имя и отчество ученика ’, i);

Readln (fam, name, otch);

writeln (‘Введите адрес ученика ’, i);

Readln (adres);

writeln (‘Введите номер телефона ученика ’, i);

Readln (telefon);

End;

Writeln (‘Введите букву’);

Readln(b);

{нахождение учеников, у которых фамилия начинается с буквы N}

For i := 1 to n do

With klass[i] do

if fam[1]=b then Writeln (fam, ‘ ‘, name, ‘ ‘, otch, ‘ ‘, adres, ‘ ’, telefon)

readln;

End.

Решение:

Program u16_18_5; (смотри файл u16_18_5.pas )

Const n = 10; {количество элементов в массиве = количество работников на предприятии}

Type

DateOfBirth = record

Month: string [10];

Year: integer;

End;

Worker = record

Name: string [20];

adres: string [25];

Date: DateOfBirth;

End;

Var x, y: array[1..n ] of worker;

W: worker;

i, g: integer;

Begin

{формирование массива записей}

for i := 1 to n do

with x[i] do

begin

writeln('сведения о ', i ,'работнике ');

writeln('Введите фамилию и инициалы');

readln (name);

writeln('Введите адрес');

readln (adres);

writeln('Введите месяц (текстом) и год поступления на работу (числом)');

readln ( date.month , date.year);

end;

{список работников, проработавших больше 5 лет}

Writeln ('список работников, проработавших больше 5 лет');

write('введите текущий год в виде 4-х значного числа');

readln(g);

for i := 1 to n do

with x[i] do

if g - date.year >5 then

begin

writeln (j, '.', name);

end;

readln;

end.

 

Информация о домашнем задании, инструктаж по его выполнению

Домашнее задание:

Параграф 29, стр. 190-194, конспект,

Вопросы и задания, стр. 195

Записывают д/з в дневник

 

Рефлексия (подведение итогов занятия)

Вернемся за парты. С каждым из вас мы просмотрели программу, которую вы написали, отметили и исправили допущенные ошибки. В основном все справили и меня это радует. Предлагаю вернуться к началу урока к его цели и задачам. Продолжите, пожалуйста, предложения:

-Сегодня на уроке я узнал(а)…

-Мне понравилось, как работал (кто?)

-А еще я хочу сказать…

Подведем итоги урока:

Максимальное количество баллов за урок – 5 баллов

Критерии оценивания:

Отметка «5» - 4-5 балла

«4» - 3-4 балла

«3» - 2-3 балла.

Учитель выставляет отметки за урок в СГО «Сетевой город. Образование».

- Спасибо, Вам за урок!

Продолжают предложения:

Сегодня на уроке я узнал(а)…

Мне понравилось, как работал (кто?)

А еще я хочу сказать…

Выставляют отметки в тетрадь, либо в дневник.

 
Опубликовано в группе «УРОК.РФ: группа для участников конкурсов»


Комментарии (3)

Осипова Светлана Гурьевна, 31.07.17 в 21:45 2Ответить Пожаловаться
Заявлено как "Урок открытия новых знаний" и представлена технологическая карта урока. Данная работа должна участвовать не в данном конкурсе
Аксенова Виктория Александровна, 02.08.17 в 15:53 0Ответить Пожаловаться
Для технологических карт есть другой конкурс.
Авхадеева Раиса Ивановна, 03.08.17 в 06:17 0Ответить Пожаловаться
Эта работа не соответствует конкурсному заданию.
Чтобы написать комментарий необходимо авторизоваться.