Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Osnovy_algoritmov_i_programmirovania_Voprosy_k....docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
347.87 Кб
Скачать

Вопрос 19, но с определением плюс или минус.

  1. Типовой приём алгоритмизации: в ычисление факториала натурального числа

Вычисление факториала натурального числа. Факториал числа N (N!) равен произведению натуральных чисел от единицы до N, то есть 1-2-3-...-N или (N-1)! • N. Следовательно, при вычислении факториала необходимо организовать цикл с заданным числом повторений и в цикле по рекуррентной формуле осуществить перемножение всех натуральных чисел начиная с 1.

Пример 1.12. Составить алгоритм вычисления факториала натурального числаN, если известно, что при N = 0 N! = 1 и при N>0 N!=l*2*3*...*N.

Из пояснений к задаче следует, что в алгоритме необходима проверка условия N = 0. В случае выполнения данного условия результирующая переменная Р должна получить значение 1, в противном случае следует организовать цикл для перемножения элементов натурального ряда чисел от 1 до N. Полученное произведение будет искомым значением результирующей переменной Р. Схема алгоритма приведена на рис. 1.16.

  1. Типовой приём алгоритмизации: нахождение наибольшего значения элементов одномерного массива

Нахождение наибольшего (наименьшего) значения в последовательности чисел. Приведенные ранее подходы к нахождению наибольшего значения нескольких неравных между собой переменных рациональны при небольшом количестве последних (рис. 1.6 и 1.7). Увеличение числа исходных переменных до пяти и более приводит к все большему усложнению алгоритма и затруднению понимания логики работы сложных разветвляющихся структур, что противоречит одному из основных правил программирования - не делать сложным то, что можно сделать просто.

Как видим, некоторое упрощение уже достигнуто при переходе от алгоритма с анализом всевозможных сравнений (рис. 1.6) к алгоритму с введением дополнительной переменной max (рис. 1.7). Введение промежуточной переменной max позволило организовать повторение по своей сути одинаковых блоков проверки условия (блоки 4,6 и 8) и присваивания (блоки 5,7 и 9), причем число

этих повторений возрастает с увеличением числа исходных переменных. В повторяющихся блоках проверки условия и присваивания меняются по очереди только переменные Ь, с,....

Использование массивов позволяет осуществить дальнейшее упрощение алгоритма поиска наибольшего (наименьшего) значения в последовательности чисел, избавляясь от сложной разветвляющейся структуры и переходя к алгоритмам более простой циклической структуры. Для этого исходные простые переменные а, Ь, с, ... представим в виде элементов одномерного массива, например X, то есть: Х,=а, Х2=6, Х3=с, ... После такой замены, используя простейший детерминированный цикл с переменной цикла, отслеживающей изменение индексов массива X, получаем сравнительно простой алгоритм поиска наибольшего значения в последовательности чисел (рис. 1.17). Отметим, что в подобном алгоритме количество блоков остается без изменений при любом увеличении количества исходных переменных а, Ь,с,..., изменяется только размер массива X, то есть количество его элементов X,, Х2, Х3,...

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

  1. Типовой приём алгоритмизации: определение кратности чисел

О пределение кратности чисел. Для определения кратности чисел какому-то заданному числу N используют проверку на равенство результатов, полученных при делении проверяемого числа на заданное число М (при N=2 в схеме обозначенное как 1/2) и при целочисленном делении этих чисел (нахождении целой части числа, получаемого от деления двух целых операндов, в схеме обозначенное как [1/2]). Если полученные результаты совпадают, то проверяемое число кратно числу N, в противном случае - нет.

 

Пример 1.14. Дан натуральный ряд чисел от 1 до N. Вычислить сумму четных и произведение нечетных чисел этого ряда. Схема алгоритма представлена на рис. 1.19.

  1. Типовой приём алгоритмизации: поиск и удаление числа в заданной последовательности

Удаление и вставка членов последовательности.

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

Пример 1.15. Дана последовательность натуральных чисел X 1 X2 , ..., XN и натуральное число А. Найти и удалить из последовательности элементы, рапные А.

Наиболее просто эта задача решается с введением дополнительного индекса К, определяющего новое место элементов последовательности после удаления требуемых (рис. 1.20).

 

Пример 1.16. Дана упорядоченная по возрас­танию последовательность попарно различных нату­ральных чисел Х1,X 2,..., X N и число А. Вставить в эту последовательность число А, не изменяя ее упорядо­ченности.

Для решения задачи требуется организовать два цикла: один для определения места, куда необходимо вставить число А, а второй -для перестановки элементов с этого места и до конца

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

Схема алгоритма без использования специальных способов сокращения числа сравнений (например, деления отрезка поиска пополам), приведена на рис. 1.21.

  1. Общая классификация типов данных

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

v  Базовые (скалярные):

Ø  Порядковые

§  Целые

§  Символьные

§  Логические

Ø  Вещественные

Ø  указатели

v  конструируемые

Ø  структурированные

§  массивы

§  множества

§  записи

§  файлы

Ø  указатели

Ø  строки

Ø  процедурные

Ø  объекты

Ø  перечисляемые

Базовые типы данных – типы, определяемые в языке программирования

Конструируемы типы данных – типы данных, которые создаются программистом

  1. Скалярные и структурированные типы данных

Все типы данных можно разделить на две группы: скалярные и структурированные (составные). Скалярные типы, в свою очередь, делятся на стандартные и пользовательские.

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

  1. Целые числа, логические типы данных (размер выделяемой для них памяти и способ представления)

К скалярным (scalar - простые) типам данных относят типы данных таких величин, значения которых не содержат составных частей.

Все простые данные имеют два характерных свойства: неделимость и упорядоченность их значений.

Целочисленные типы данных

Тип

Диапазон

Требуемая память (байт)

byte

0..255

1

shortint

-128..127

1

integr

-32768..32767

2

word

0..65535

2

longint

-2147483648..2147483647

4

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

  1. Символьный тип. Строковый тип

К скалярным (scalar - простые) типам данных относят типы данных таких величин, значения которых не содержат составных частей.

Все простые данные имеют два характерных свойства: неделимость и упорядоченность их значений.

Литерный (символьный) тип char определяется множеством значений кодовой таблицы ПЭВМ.

Каждому символу приписывается целое число в диапазоне от 0 до 255. Для размещения в памяти переменной литерного типа требуется один байт.

  1. Логический тип

К скалярным (scalar - простые) типам данных относят типы данных таких величин, значения которых не содержат составных частей.

Все простые данные имеют два характерных свойства: неделимость и упорядоченность их значений.

Булевским типом называют тип данных, представляемый двумя значениями true (истина) и false (ложь). Он широко применяется в логических выражениях и выражениях отношения. Для размещения в памяти переменной булевского типа требуется 1 байт.

  1. Перечисляемый тип. Интервальный тип

К скалярным (scalar - простые) типам данных относят типы данных таких величин, значения которых не содержат составных частей.

Все простые данные имеют два характерных свойства: неделимость и упорядоченность их значений.

Интервальный тип (диапазон)

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

Обе константы должны принадлежать одному из стандартных типов (тип real недопустим). Значение первой константы должно быть значительно меньше значения второй.

Например: 1..12 (номер месяца может принимать значения от 1 до 12) или ‘а’..’я’ (буквы русского алфавита – от а до я)

Перечисляемый тип

Перечисляемый тип (enumerated type) – тип данных, заданных списком принадлежащих ему значений.

Объявление перечисляемого типа описывает множество идентификаторов, которые являются возможными значениями перечисляемого типа. Идентификаторы в описании типа представляют собой константы. Отдельные значения указываются через запятую, а весь список заключается в круглые скобки.

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

Например, в виде строковых констант: color=(red, blue, green, black). В приведенном примере создается новый (нестандартный) тип данных color. Переменные этого типа могут принимать всего 4 значения: red, blue, green, black. Такая возможность создания новых пользовательских типов данных имеется в языке Turbo Pascal.

  1. Вещественные типы. Форма записи вещественных констант

К скалярным (scalar - простые) типам данных относят типы данных таких величин, значения которых не содержат составных частей.

Все простые данные имеют два характерных свойства: неделимость и упорядоченность их значений.

Вещественные типы данных

Тип

Диапазон

Мантисса

Требуемая память (байт)

real

2.9*10E – 39..1.7*10E38

11-12

6

single

1.5*10E – 45..3.4*10E38

7-8

4

double

5.0*10E – 324..1.7*10E308

15-16

8

extended

1.9*10E – 4951..1.1*10E4932

19-20

10

comp

-2E+63+1..2E+63-1

10-20

8

Вещественные типы данных представляют собой вещественные значения, которые могут использоваться в арифметических выражениях и занимать в памяти от 4 до 6 байт. Паскаль допускает представление вещественных значений и с плавающей запятой, и с фиксированной точкой.

Вещественные значения могут изображаться в форме с фиксированной точкой, например 7.32, 456.721 или 0.015, а также в форме с плавающей точкой, т.е. парой чисел вида <мантисса>Е<порядок> (7.32Е+00, 4.56721Е+02, 1.5Е-02).

  1. Типы данных, определяемые пользователями

Пользовательские типы

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

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

Интервальный тип (диапазон)

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

Обе константы должны принадлежать одному из стандартных типов (тип real недопустим). Значение первой константы должно быть значительно меньше значения второй.

Например: 1..12 (номер месяца может принимать значения от 1 до 12) или ‘а’..’я’ (буквы русского алфавита – от а до я)

Перечисляемый тип

Перечисляемый тип (enumerated type) – тип данных, заданных списком принадлежащих ему значений.

Объявление перечисляемого типа описывает множество идентификаторов, которые являются возможными значениями перечисляемого типа. Идентификаторы в описании типа представляют собой константы. Отдельные значения указываются через запятую, а весь список заключается в круглые скобки.

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

Например, в виде строковых констант: color=(red, blue, green, black). В приведенном примере создается новый (нестандартный) тип данных color. Переменные этого типа могут принимать всего 4 значения: red, blue, green, black. Такая возможность создания новых пользовательских типов данных имеется в языке Turbo Pascal.

  1. Константы и переменные

Рассмотри задачи на объявление переменных и констант скалярного типа.

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

  • каждая переменная программы должна быть объявлена;

  • объявление переменных помещают в раздел, который начинается словом var; константы помещают в раздел, который начинается словом const; переменные пользовательских типов (перечисляемые и интервальные) объявляют по особой схеме;

В имени переменной можно использовать буквы латинского алфавита и цифры (первым символом должна быть буква);

  • после инструкции объявления данных рекомендуется указывать назначение переменной или константы;

  • инструкция объявления констант выглядит так: ИмяКонстанты = значение константы;

Пример:

const

min=1; {минимальное значение}

max=54; {максимальное значение}

  • инструкция объявления переменных выглядит так: имя ИмяПеременной: тип;

var

k1: integer; {количество тетрадей}

k2: byte; {количество карандашей}

c1: real; {цена одной тетради}

  • инструкция объявления переменных интервального типа помещается в двух разделах type, var и выглядит так:

type

<имя типа>=(<константа1> ..<константа2>);

var

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

Пример:

type

days=1..31 ; {дни месяца}

var

rabotday: days; {рабочие дни}

vihodday: days; {выходные дни}

  • инструкция объявления переменных перечисляемого типа помещается в двух разделах type, var и выглядит так:

type

<имя типа>=(<значении 1, значение 2, значение n>);

var

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

Пример:

type

days=(monday, muesday, wednesday, thursday, friday, saturday, sunday) ; {дни }

var

day: days; {дни недели}

season: (may, april, juin ); {дни отпуска}

  1. Типы данных и константы. Форма записи констант различных типов данных

Все типы данных можно разделить на две группы: скалярные и структурированные (составные). Скалярные типы, в свою очередь, делятся на стандартные и пользовательские.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]