СДЕЛАЙТЕ СВОИ УРОКИ ЕЩЁ ЭФФЕКТИВНЕЕ, А ЖИЗНЬ СВОБОДНЕЕ

Благодаря готовым учебным материалам для работы в классе и дистанционно

Скидки до 50 % на комплекты
только до

Готовые ключевые этапы урока всегда будут у вас под рукой

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

Проверка знаний

Объяснение материала

Закрепление изученного

Итоги урока

Практическое занятие №21 (1И)

Категория: Информатика

Нажмите, чтобы узнать подробности

Просмотр содержимого документа
«Практическое занятие №21 (1И)»

Практическое занятие №21 (1И)

Тема: Анализ типовых алгоритмов обработки чисел, числовых последовательностей и массивов

Цель работы: овладеть основными приемами работы с одномерными и двумерными массивами, уметь различать в двумерном массиве обработку строк и столбцов, а также отличать нахождение первых и последних элементов последовательности, обладающих некоторым свойством

 Оборудование: персональный компьютер, подключение к интернету.

Теоретические сведения

Общие сведения

Скалярный тип – простой тип данных. Скалярное данное неделимо. Массив – это структурированный тип данных. Массив состоит из нескольких элементов. Ко всему массиву можно обращаться по его имени. Можно обращаться к его элементу, но для этого надо задать индекс (индексы). Массивы бывают одномерные и многомерные. Для объявления массива необходимо задать типы его индексов и компонент: 

ARRAY [Тип индексов] OF ;

Тип компонент массива – это просто тип данных, ассоциированный с каждой компонентой массива. Тип компонент может быть любым REAL, INTEGER, CHAR, BOOLEAN, перечислимым, интервальным. В качестве компоненты массива может быть взят и тип массив.

Тип индекса должен быть одним из упорядоченных типов, т.е. любым скалярным типом, кроме REAL: INTEGER, CHAR, интервальный, перечислимый. Тип индекса определяет границы изменения индекса. Если сделана попытка использовать несуществующую компоненту, то возникает ошибка (ошибка неверного индекса).

Одномерные массивы

Одномерный массив можно задать (объявить) двумя способами:

1.       C помощью служебного слова TYPE описывается тип массива, а затем с помощью VAR вводится переменная этого типа.

 Общая форма записи

TYPE = ARRAY [тип индекса] OF ;

VAR : ; 

2.       С помощью слова VAR сразу описывается  переменная типа массив.

Общая форма записи

 VAR : ARRAY [тип индекса] OF ;

Например, объявление массива из 100 элементов типа REAL можно осуществить двумя способами:

1.       type R100 = array [1..100] of real;

var A: R100;

2.       var A: array [1..100] of real.

Здесь задан массив с именем А, и его элементы имеют имена: А[1],…,A[100]. Чаще всего для типа индекса используют интервальный тип на основе типов INTEGER и CHAR. Однако можно в качестве индексов брать перечислимый тип.

П р и м е р  1.  Подсчет числа вхождений букв в текст определенной длины.

program COUNTER;

var COUNT: array ['a'..'z'] of integer;

CH: char; N: integer;

begin

for CH := 'a' to 'z' do

COUNT [CH] := 0; N := 0;

repeat

read (CH); N := N + 1;

if (CH = 'a') and (CH

COUNT [CH] := COUNT [CH] + 1;

until CH = '.';

for CH := 'a' to 'z' do

writeln (CH, COUNT [CH]:5);

end.

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

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

П р и м е р 2.  Присваивание переменной с именем месяца числа дней этого месяца.

program NUMBRDAY;

type MONAT = (JAN, FEB, MAR, APR, MAY, JUN, JUL, AUG,

SEP, OKT, NOV, DEC);

var DAY : array [MONAT] of 28..31; T : MONAT;

begin

for T := JAN to DEC do

case T of

JAN, MAR, MAY, JUL, AUG, OKT, DEC: DAY [T] := 31;

APR, JUN, SEP, NOV: DAY [T] := 30;

FEB : DAY [T] := 28;

end;

end.

Многомерные массивы

Для определения позиции элемента в двумерном массиве необходимы два индекса. Любой двумерный массив есть матрица, а матрица есть таблица. Поэтому удобно описывать двумерные массивы путем указания границ изменения индексов (номеров) строк и столбцов.

Например, таблица символов M × N,  где M  – число строк и N – число столбцов, может быть описана:

var TAB : array [1..M, 1..N] of char;

Общая форма записи

VAR : ARRAY [тип индекса строки, тип индекса столбца]

OF ;

 Однако двумерный массив можно интерпретировать как вектор-столбец, каждый элемент которого, в свою очередь, является одномерным массивом (вектор-строка). Этот подход к определению двумерного массива влечет его описание с помощью двух строк, где первая содержит описание строки, а вторая – описание столбца:

type LINE  = array [1..N] of char;

STOLB = array [1..M] of LINE;

var TAB : STOLB.

Здесь TAB [I] – переменная типа LINE, а TAB [I][J] – переменная типа CHAR.

Общая форма записи

 TYPE = ARRAY [тип индекса] OF ;

= ARRAY [тип индекса] OF ;

VAR : ;

 

 Эти два вида определения массивов задают и два способа обращения к элементам массива: TAB [I, J] – в первом случае и TAB [I][J] – во втором. Вполне очевидно, что сказанное выше для двумерного массива распространяется и на массивы большей размерности. Например, описание VAR CUBE : ARRAY [1..M, 1..N, 1..K] OF INTEGER определяет задание трехмерного массива целых чисел.

Примеры работы с массивами

Обработка массивов включает в себя, как правило, следующие компоненты: ввод массива (с клавиатуры или с  помощью датчика случайных чисел), вывод полученного массива на экран и собственно его обработка. Все эти компоненты рекомендуется оформлять в виде отдельных процедур. При этом надо учитывать следующий фактор: если процедуре (или функции) будет передаваться массив, то надо объявить в ней этот массив как параметр с атрибутом VAR даже в том случае, если значение массива внутри процедуры не изменяется. Это нужно для того, чтобы не тратить времени и памяти на размещение внутри процедуры копии массива. Заметим, что параметр обязательно должен относиться к типу, имеющему имя.

П р и м е р.  Сумма элементов таблицы над верхней диагональю.

program SUMMA;

const M = 10; {число строк таблицы}

N = 10; {число столбцов таблицы}

type LINE = array [1..n] of integer;

TAB = array [1..m] of LINE;

var s, i, j:integer; MAS: TAB;

procedure VVODMASSIV (var MAS: TAB);

begin

 for i := 1 to M do

   for j := 1 to N do

     readln (MAS [i][j]);

end;

procedure VIVODMASSIV (var MAS:TAB);

begin

 for i := 1 to M do

  begin

 for j := 1 to N do

write (MAS [i][j]:4,' '); writeln;

  end;

end;

                    procedure OBRABOTKA (MAS: TAB; var SUM: integer);

begin

 SUM := 0;

 for i := 1 to M do

   for j := 1 to N do

     if j i then SUM := SUM + MAS [i][j];

end;

begin

  VVODMASSIV (MAS);

  writeln ('исходный массив'); VIVODMASSIV (MAS);

  OBRABOTKA (MAS, s); writeln;

  writeln ('сумма элементов = ',s);

end.

Табличное представление информации одно из самых распространенных, поэтому массивы широко применяются в прикладных программах.

Порядок выполнения работы

Задание 1. Составить программу, позволяющую в одномерном массиве, состоящем из N вещественных элементов, вычислить сумму положительных элементов.

Задание 2. В двумерном массиве, состоящем из целочисленных элементов, в каждом столбце поменять местами наибольший по модулю и последний не принадлежащий интервалу (a, b) элементы массива.

Контрольные вопросы

 1. Как описываются в языке Паскаль одномерный и двумерные массивы?

2.       Может ли массив содержать разнотипные данные?

3.       В каком порядке указываются индексы при обращении к элементам двумерного массива?