Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Пример решения задачи на множества




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

Текст программы:

program filolog;

Uses Crt;

var

gl,sog:integer;

a:char;

begin

ClrScr;

gl:=0;

sog:=0;

Writeln ('Вводите текст построчно.');

Writeln ('Ввод каждой строки заканчивайте нажатием клавиши Enter');

Writeln ('Для завершения ввода всего текста введите 0 и Enter');

Repeat

Repeat

Read (a);

If a in ['а','е','и','о','у','ы','э','ю','я', 'А','Е','И','О','У','Ы','Э','Ю','Я']

then gl:=gl+1;

If a in ['б'..'д','ж','з','й'..'н','п','р'..'т','ф'..'щ', 'Б'..'Д','Ж','З','Й'..'Н','П'..' Т','Ф'..'Щ']

then sog:=sog+1

until eoln;

until a='0';

Readln;

Writeln ('Число гласных букв в тексте равно ',gl);

Writeln ('Число coгласных букв в тексте равно ',sog);

Readln

end.

В программе текст вводится построчно. Считывается же текст оператором read посимвольно. Процесс считывания символов, содержащихся в строке, производится во внутреннем цикле repeat..until. Каждый считываемый символ проверяется условным оператором if на принадлежность к множеству гласных букв. Если вводимый символ принадлежит данному множеству, то значение переменной-счетчика gl увеличивается на единицу. (В начале программы переменной-счетчику было присвоено нулевое значение). Второй условный оператор аналогичным образом проверяет принадлежность символа к множеству согласных букв. Переменной-счетчиком здесь является sog. Условием окончания внутреннего цикла является обнаружение признака конца строки. Нахождение конца строки осуществляется с помощью соответствующей стандартной функции eoln. Эта функция по умолчанию имеет значение false, а при обнаружении ею двух управляющих символов возврата каретки CR и перевода строки LF получает значение true, что приводит к завершению работы внутреннего цикла.

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

Понятие массива

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

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

Примером простейшего одномерного массива является список учеников одного школьного класса или студентов одной группы. В этом случае элементами массива будут фамилии учеников или студентов, а индексами – номера учеников или студентов в списке.

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

В общем виде, описание массива, состоящего из элементов-переменных, выглядит следующим образом:

Var

< имя массива >: array [a..b] of < тип элементов >;

где var, array и of – служебные слова. Array означает массив, предлог of в данном случае – из, a и b – соответственно нижняя и верхняя границы диапазона массива.

Пример описания одномерного массива:

Var

a: array [1..20] of integer;

это – описание массива с именем a, который может содержать до 20 элементов, причем все эти элементы целого типа.

Var

st: array [1..10] of string [15];

а в данном случае описан массив с именем st из 10 строковых элементов, каждый из которых может содержать до 15 символов.

В программе можно работать не только со всем массивом целиком, но и с отдельными его элементами. Для того, чтобы обратиться в программе к какому-либо элементу массива, нужно указать имя массива и индекс содержащегося в нем элемента. Например, если Вы встретите в программе следующую запись: a [10 ], то она означает, что мы обращаемся к элементу массива a с порядковым номером 10.

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

Двумерный массив.

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

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

var

< имя массива >: array [a..b,c..d] of < тип элементов >;

где a и b – соответственно верхняя и нижняя граница диапазона значений для первого индекса; c и d - верхняя и нижняя граница диапазона значений для второго индекса.

Двумерный массив таким образом можно представить в виде таблицы, имеющей b-a+1 строк и c-d+1 столбцов.

Пример описания двумерного массива:

Var

tabl: array [1..9,1..9] of integer;

таким образом, описан целочисленный массив, содержащий 9 строк и 9 столбцов.

 

4.4. Пример решения задачи на приемы работы
с двумерными массивами

Задача: дан двумерный массив размерностью 4х5. Элементами данного массива являются вещественные числа. Требуется: заполнить массив произвольными числами, затем вывести содержимое массива на экран компьютера, подсчитать сумму элементов для каждого столбца, имеющегося в массиве, и сформировать из этих сумм одномерный массив.

Текст программы:

Program arrsum;

Uses Crt;

var

f:array [1..4,1..5] of real;

x:array [1..5] of real;

i,j:integer;

s:real;

begin

Clrscr;

For i:=1 to 4 do

For j:=1 to 5 do

begin

Writeln ('Введите ',j,' элемент ',i,' строки');

Readln (f [i,j])

end;

Writeln ('элементы двумерного массива');

For i:=1 to 4 do

begin

For j:=1 to 5 do write (f [i,j]:7:2,' ');

Writeln

end;

Writeln ('элементы одномерного массива');

For j:= 1 to 5 do

begin

s:=0;

For i:=1 to 4 do s:=s+f [i,j];

x [j]:=s;

write (x [j]:7:2,' ')

end;

Readln

end.

В программе arrsum в разделе описания переменных описываются два массива. Первый из них – это двумерный массив f, который в дальнейшем будет заполнен числами вещественного типа. В данном массиве, как видно из описания, имеется 4 строки и 5 столбцов. Второй описанный в разделе массив x является одномерным и в дальнейшем будет заполнен элементами, каждый из которых представляет собой сумму элементов, содержащихся в одном из столбцов двумерного массива. Всего в одномерном массиве x должно быть 5 элементов – по количеству столбцов в двумерном массиве f.

В начале программы производится заполнение массива f произвольными вещественными числами, вводимыми с клавиатуры компьютера. Этот процесс осуществляется с помощью двух вложенных циклов. Во внутреннем цикле производится поэлементное заполнение одной из строк массива числами. Этот цикл повторяется 5 раз в соответствии с количеством элементов в каждой строке (количество элементов двумерного массива, содержащихся в одной строке равно количеству столбцов, имеющихся в данном массиве). Соответственно и счетчик данного цикла – переменная j изменяет свое значение от 1 до 5. Перед непосредственным вводом очередного элемента, производимым оператором readln, оператор writeln выводит приглашение на ввод данного элемента, указывающее номер текущей строки и порядковый номер элемента в строке. Внешний цикл с переменной i обеспечивает повторение всех действий внутреннего цикла 4 раза (по количеству строк, имеющихся в массиве).

Далее для того, чтобы наглядно убедиться в том, что двумерный массив f целиком заполнен данными, производим построчный вывод содержимого массива на экран компьютера. Эта операция, как и предыдущая, производится с помощью двух циклов, один из которых вложен в другой. Внутренний цикл с переменной j обеспечивает вывод элементов одной строки. При этом для того, чтобы значения элементов массива представлялись на экране в удобном для восприятия человеком виде, (а не в нормализованном) элементы выводятся в отформатированном виде: под каждый элемент отводится по 7 позиций, в том числе 4 под целую часть, 1 – под точку и 2 – под дробную часть. Внешний цикл с переменной i, как и в предыдущем случае обеспечивает четырехкратное повторение действий внутреннего цикла.

Третья группа из двух вложенных циклов используется для подсчета сумм элементов нового одномерного массива и его формирования. Внешний цикл в данном случае повторяет всю совокупность действий, производимых во внутреннем цикле, 5 раз – по числу элементов формируемого цикла (и, соответственно столбцов двумерного массива). Внутренний же цикл с переменной i подсчитывает сумму элементов, содержащихся в одном из столбцов. Эта сумма подсчитывается с помощью вспомогательной переменной s. Перед началом работы внутреннего цикла эта переменная обнуляется с помощью оператора присваивания – первого оператора внешнего цикла, а затем во внутреннем цикле к ее текущему значению каждый раз прибавляется значение очередного элемента из обрабатываемого столбца. В итоге работы внутреннего цикла в переменной s мы и получаем искомую сумму. Далее, следующий оператор внешнего цикла присваивает получившееся значение соответствующему элементу одномерного массива. Наконец, последний из операторов внешнего цикла выводит значение этого элемента одномерного массива на экран. Таким образом, после завершения работы данного внешнего цикла массив будет заполнен данными и поставленная задача будет решена.


V. Литература

1. Ахо А. Теория синтаксического анализа, перевода и компиляции /А.Ахо, Д. Ульман. – М.: Мир, 1978.

2. Буч Г. Объектно-ориентированное проектирование с примерами применения / Г Буч. – М., 1993.

3. Вирт Н. Алгоритмы+ структуры данных = программы / Н. Вирт.– М.: Мир, 1985.

4. Васюкова Н.Д. Практикум по основам программирования. Язык Паскаль / Н.Д. Васюкова, В.В. Тюляева. – М.: Высш. шк., 1991.

5. Гольденберг В.А. Введение в программирование / В.А. Гольденберг. – Минск: ООО Харвест, 1997.

6. Замулин А. В. Системы программирования баз данных и знаний /
А. В. Замулин. – Н.: Наука, 1990.

7. Емелина Е.И. Основы программирования на языке Паскаль /
Е.И. Емелина. – М.: Финансы и статистика, 1997.

8. Кауфман В.Ш. Языки программирования. Конценции и принципы /В.Ш. Кауфман. – М.: Радио и связь, 1993.

9. Калинин А. Г. Универсальные языки программирования / А.Г. Калинин, И. В. Мацкевич. – М.: Радио и связь, 1991.

10. Лавров С. Программирование. Математические основы, средства, теории / С. Лавров. – СПб.: БХВ-Петербург, 2001.

11. Пестриков В.М. Программирование в системе Турбо Паскаль 7.0: учеб. пособие / В.М. Пестриков, А.Н. Маслобоев, О.К. Федоров. – СПб.: СПбГТУРП, 2002.

12. Пестриков В.М., Маслобоев А.Н.. Turbo Pascal 7.0: Изучаем на примерах. 2-е изд., перераб. и доп. СПб. Наука и техника. 2004.

 

 


 

Пестриков ВикторМихайлович

Князькова Ольга Викторовна

Козлова ЕкатеринаВалентиновна

 

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...