Вопрос: Как сократить программу при этом расширив количество предполагаемых ответов и вопросов?

Занятие №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.

Спасибо за внимание!





Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: