Занятие №10 «Одномерные массивы»
Ключевые слова: массив, элемент массива, индекс массива, имя массива, описание массива;
Вопросы для повторения |
Что будет выведено на экран в результате работы фрагмента программы? s1:='н'; s2:='ка'; s3:='ба'; writeln(concat(s3,s1,s2)); |
Чему будет равно значение померенной с после исполнения фрагмента программы? s1:='барабан'; s2:= 'шайба' c:=pos('ба',s2); |
Составьте программу, которая проверяет, если ли в слове буква ‘г’. Если такая буква есть на экран вывести «Да» в противном случае «Нет». |
Давайте посмотрим на фрагмент программы с предыдущего урока, где мы прописываем предполагаемые ответы и вопросы.
s1:='Хорошо';
s2:='Программа';
s3:='Мои возможности ограничены';
s4:='До скорых встреч!';
p1:='дела';
p2:='Кто ты';
p3:='можешь';
p4:='До свидания';
if pos(p1,replika) <>0
then otwet:=s1
else if pos(p2,replika) <>0
then otwet:=s2
else if pos(p3,replika)<>0
then otwet:=s3
else if pos(p4,replika)<>0
then otwet:=s4
else random_otwet(otwet);
Мы рассмотрели всего 4 предполагаемых ответа и вопроса, но ведь мы хотим создать программу, которая ведет диалог человека с человеком, и поэтому 4-х фраз мало, нужно расширять набор фраз. Согласитесь, прописать 20,30,100 фраз получится трудно и очень неудобно. Как вы себе представляете 100 переменных в программе? И для каждой переменной нужно написать одно и тоже действие. Это очень неэффективно. Нужно как то сократить программу при этом расширить базу реплик и ответов. Как нам сделать так, чтобы переменные были вроде и разные, но при этом вроде и одинаковые.
Вопрос: Как сократить программу при этом расширив количество предполагаемых ответов и вопросов?
Цель:
· Сократить программу, а данные объединить в новую структуру данных;
Существует простое решение. Это использование такой структуры (типа) данных как массив. Массив представляет собой последовательность ячеек памяти, в которых хранятся однотипные данные. При этом существует всего одно имя переменной связанной с массивом, а обращение к конкретной ячейке происходит по ее индексу (номеру) в массиве.
Массив (array, от французского – сплошной) – упорядоченная группа фиксированного количества переменных одного типа, имеющая общее имя.
Массивы состоят из ограниченного числа компонент, причем все компоненты массива имеют один и тот же тип, называемый базовым. Массив может состоять из элементов типа integer, real или string, либо других однотипных элементов.
Другая особенность массива состоит в том, что к любой его компоненте можно обращаться произвольным образом. Что это значит? Программа может сразу получить нужный ей элемент по его порядковому номеру (индексу).
Индекс элемента массива – номер элемента в массиве.
Элемент массива – отдельная переменная, входящая в массив.
Каждый элемент такой совокупности обозначается именем массива с индексом (номером элемента в массиве).
Массиву присваивается имя, при помощи которого можно ссылаться на него как на единое целое, так и на любой из его элементов.
Таким образом, массив характеризуется:
· типом, то есть все элементы массива имеют один и тот же тип;
· именем, массив имеет имя – одно для всех элементов;
· размером, размер массива – это количество его элементов;
Как описать массив в программе?
Var <Имя_массива>: array [<нач_инд>..<кон_инд>] of <Тип данных>;
Пример
var mass: array [1..4] of integer;
В данном массиве будет 4 элемента, по-другому это называется размерность массива.
Требования к имени массива:
- не должен содержать символов русского алфавита;
- не должен начинаться с цифры;
- не должен содержать знак пробела;
Как заполнить массив?
Имя_массива[index]:= значение;
Пример.
mass[1]:=‘Привет’;
Первому элементу массива присвоена строка ‘Привет’
Как обратиться к элементу массива?
<имя массива> [<индекс>]
Пример.
mass[1], mass[5], mass[101]; mass[n];
Пример, создать массив строк и вывести на экран 5 элемент массива.
var phrase: array[1..6] of string;
begin
phrase[1]:='Прекрасная погода';
phrase[2]:='Замечательный день';
phrase[3]:='Я учусь в ЯГПУ';
phrase[4]:='Пойдем погуляем!';
phrase[5]:='Расскажи о себе';
phrase[6]:='Выглядишь прекрасно!';
writeln(phrase[5]);
end.
Создадим программу, используя новую структуру данных массив.
Давайте теперь попробуем создать массив и записать туда наши выражения. Пусть один массив будет с репликами (массив slova), второй массив с ответами (массив otw) на эти вопросы, и 3 массив, массив случайных фраз (fraza).
Заполним их следующим образом:
slova[1]:= 'тебя зовут?';
slova[2]:= 'дела?';
slova[3]:= 'умеешь';
slova[4]:= 'знаешь';
slova[5]:= 'можешь';
slova[6]:= 'любишь';
slova[7]:= 'понимаешь';
slova[8]:= 'Где ты учишься?';
slova[9]:= 'Привет';
slova[10]:= 'Здравствуй';
slova[11]:='Пока';
otw[1]:= 'Меня зовут Программа.';
otw[2]:= 'У меня все хорошо, а у Вас?';
otw[3]:= 'Мои возможности очень ограниченны.';
otw[4]:= 'К сожалению, я пока очень мало знаю...';
otw[5]:= 'Мои возможности очень ограниченны.';
otw[6]:= 'У меня нет ярко выраженных предпочтений.';
otw[7]:= 'Я пока понимаю далеко не все, потому что у меня маленькая база.';
otw[8]:= 'В ЯГПУ';
otw[9]:= 'Очень приятно Вас видеть.';
otw[10]:= 'Здравствуйте.';
otw[11]:='До свидания';
fraza[1]:= 'Я еще не очень разбираюсь в этом вопросе.';
fraza[2]:= 'Вы удивляете меня своей способностью мыслить.';
fraza[3]:= 'Можно поинтересоваться, откуда у Вас такие сведения?';
fraza[4]:= 'Мне кажется, Вы что-то от меня скрываете.';
fraza[5]:= 'Я думаю, многие разделяют эту точку зрения.';
fraza[6]:= 'Я не могу общаться с людьми, которые пытаются меня на чем-то подловить. ';
Создадим процедуру dialog без параметров. В которой будет ввод фразы, переменной otwet (отвечает за ответ, которая выдает программа) присвоим пустую строку. Введем переменную i, которая будет отвечать за переход к следующей фразе в массиве. Если программа не сможет найти нужный ответ, то необходимо вывести ответ из массива fraza.
Как будет работать программа, программа будет искать вхождение любой из фраз (slowa[i]) в реплику, введенную собеседником, и если она найдет такое вхождение, то выведет соответствующий ответ (otwet[i]). I – это параметр цикла, который необходимо менять в теле цикла, увеличивая на единицу.
Если ответа не нашлось, то генерируем случайное число k от 0 до 6(т.к. элементов в массиве fraza 6) и тогда ответу присваиваем элемент из массива fraza с номером k.
Необходимо еще ввести переменную n, которая отвечает за количество элементов в массиве slova, otwet и m – количество элементов в массиве fraza.
Количество элементов в массивах можете добавлять и убавлять на свое усмотрение.
Подсказка. while (i<n) and (otwet='') do
begin
<тело цикла>
end;
{основная программа}
begin
i:=0;
n:=11;
m:=6;
while otwet<>'До свидания' do
dialog;
end.
Ответы на вопросы |
Что будет выведено на экран в результате работы фрагмента программы? s1:='н'; s2:='ка'; s3:='ба'; writeln(concat(s3,s1,s2)); Ответ: банка |
Чему будет равно значение померенной с после исполнения фрагмента программы? s1:='барабан'; s2:= 'шайба' c:=pos('ба',s2); Ответ: с=3 |
Составьте программу, которая проверяет, если ли в слове буква ‘г’. Если такая буква есть на экран вывести «Да» в противном случае «Нет». var s:string; begin readln(s); if pos(‘г’, s) <>0 then writeln('Да') else writeln ('Нет'); end. |
Спасибо за внимание!