Поиск

Полнотекстовый поиск:

Рекомендуем осведомиться

"Документ"
В. ВТМО -1 0 ВТМО 0-1 Давиденко А.Н. МТ-МВО-1-1 0 Карабут Н.В. ВТ-Нач- 0 ВМ-ИВТ-3 0 Костин К.А. ВЛ-РЛ-1 0 ФДиНО 01 0 ВП-Нач- -1 0 Лапшин Н.... полностью> >
"Документ"
А.И. Евдокимова Предмет: Собеседование дерматовенерология Группа:01ств Дата экзамена: 00.... полностью> >
"Сборник задач"
Чернов И.П., Ларионов В.В., Тюрин Ю.И. Физика. Сборник задач. Часть I. Механика. Молекулярная физика. Термодинамика: Учебное пособие. – Томск: Изд-во ... полностью> >
"Документ"
3. Оснащенность оборудованием, инструментарием. Наличие соответствующих условий чтобы хранения биологических препаратов, медикаментов да дезсредств. Сост... полностью> >

Главная > Программа

Сохрани ссылку на одной с сетей:
Информация по отношению документе
Дата добавления:
Размер:
Доступные форматы с целью скачивания:

015

-

Лекции в области Tu rbo Pascal

0 категория

Паскаль .

Программа - алгоритм, внесенный нате языке программирования, прислуга на выполнения каких-либо действий.

Транслятор.

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

Транслятор - программа, переводящая стихи алгоритма, записанного на каком-то языке программирования, на язык машинных кодов.

Различают банан вида трансляторов: компиляторы да интерпретаторы. Они различаются из точки зрения выполнения работы.

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

Интерпретатор переводит и выполняет программу абзац вслед за строкой (как одновременный переводчик).

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

Интегрированная обстановка Turbo Pascal.

Краткое знакомство.

Язык Паскаль появился во 0984 году. Он разработан Н.Виртом во 0968-1970 г.г., получил широкое распространение вследствие наглядности программ да легкости близ изучении.

Turbo Pascal 0.0 позволяет:

а) формировать тексты программ;

б) компилировать их (находить равно штопать ошибки);

г) компоновать программы изо отдельных частей;

д) использовать модули библиотек;

е) налаживать и выполнять программы.

Система ТР состоит из множества файлов, основные изо которых:

  • TURBO.EXE, который содержит готовую ко работе диалоговую систему программирования ( во нее входят текстовый редактор, компилятор, компоновщик, загрузчик);

  • TURBO.TPL - основная библиотека ТР;

  • TURBO.HLP - справочная служба.

Для загрузки программы Turbo Pascal 7.0 надо: метнуть обложка Turbo.ехе. После загрузки системы кинематография разделен на три части:

1. Главное меню.

2. Основное, или рабочее, окно.

3. Строка, на которой указывается назначение основных функциональных клавиш.

Меню Turbo Pascal

  1. File – сохранение, изобретение программы, работа не без; каталогами.

  2. Edit – редактирование программы.

  3. Search – разведка равно замена.

  4. Run – выполнение программы.

  5. Compile – компилирование программы, т.е. перевод на механический язык.

  6. Debug – отрегулировка программы.

  7. Tools – дополнительные возможности.

  8. Options – упорядочение системы.

  9. Window – производство не без; окнами.

  10. Help – помощь.

Функциональные фоно Турбо Паскаль.

F1 - помощь;

F2 - сбережение редактируемого текста на диске;

F3 - загрузка текста вместе с диска на остановка редактирования;

F9 - компилировать программу, же безграмотный исполнять ее;

F10 - переход к верхнему меню;

CTRL-F9 - выполнить прогон программы (компилировать ее и выполнить);

ALT-F5 - недосмотр результатов выполнения программы;

Esc - переход из главного подбор во иллюминатор редактирования.

ALT-X - выход из системы Турбо Паскаль.

File состоит изо следующих команд:

New – учредить новое рабочее окно.

Open – обнаружить сохраненную ранее получи и распишись диске программу.

Save – поберечь программу под текущим именем.

Save as – сохранение программы почти новым именем.

Save all – сохранение всех окон по-под текущими именами.

Change dir – изменение текущего каталога.

Exit – вывод с режима Turbo Pascal.

Работа из окнами во Turbo Pascal

  1. Удаление окна – мышью хлопнуть получай знамя []; нажать комбинацию клавиш Alt+F3; на разблюдовка Window исполнить команду Close.

  2. Изменение размеров – тронуть мышкой из-за нижний угол окна равно двигать, доколь время никак не примет необходимые размеры; приняться комбинацию клавиш Ctrl+F5 равно вместе с нажатой клавишей Shift, с помощью лучник заменять размеры, зафиксировать нажатием Enter.

  3. Передвижение окна – зацепиться отверстие из-за верхнюю рамку и двигать.

  4. Раскрытие окна для цельный планзифтер – цокнуть мышью на []; во каталог Window исполнить команду Zoom; расстараться клавишу F5.

  5. Смена активного окна – активное отверстие имеет двойную рамку, с тем содеять окно активным делать нечего укокать мышью на нужном окне; отдать все силы F6; на разблюдовка Window исполнить команду Next.

Tile – месторасположение открытых окон без перекрытий

Cascade – расположение открытых окон уступами.

Работа вместе с блоками на Turbo Pascal

Блок сие выделенная делянка программы. Блоки позволено переносить, копировать, удалять.

Ctrl+K,B – обозначить зачин блока;

Ctrl+K,K – сделать отметку заключение блока;

Ctrl+K,C – ксернуть блок; на кадастр Edit выбрать команду Copy, кроме команду Past.

Ctrl+K,V – перевалить блок; на каталог Edit выбрать команду Cut, затем команду Past.

Ctrl+K,Y – изъять блок; во подбор Edit выбрать команду Clear.

Ctrl+K,H – скинуть отбор блока.

Выделить узел позволительно обособить еще следующим образом: придавить клавишу Shift да управляя стрелками продлить выделение сверху огулом блок; либо не без; помощью мыши: притиснуть левую клавишу мыши протянуть выделение держи огулом блок. Повторное нажатие клавиши мыши приведет ко снятию выделения.

Редактирование программы.

Перемещение курсора во початие строки – Home;

Перемещение курсора во прекращение строки – End;

Переключение среди русским равным образом латинским алфавитом - Ctrl+Shift (справа); Ctrl+Shift (слева);

Набор заглавной буквы – Shift+ <клавиша с буквой> ;

Удаление неправильного символа – установить маркер для сей мандара и нажать клавишу Delete, либо установив курсор потом неправильного символа и нажать BS;

Разрезать строчку для двум – установить курсор возьми «место разреза» да нажать Enter;

Склеить двум строки – найти курсор в результат первой с склеиваемых строк и нажать Delete либо — либо во зачин другой равно нажать BS;

Вставить посередь двумя строчками новую пустую – назначить маркер во конец первой изо двух строк другими словами на начинание второй и поднажать Enter;

Удалить строчку вдрызг – установить на нее движок равным образом выложиться комбинацию клавиш Ctrl+Y;

Отменить последнюю операцию по редактированию текста Alt+BS;

Запустить программу получи и распишись материализация - Ctrl+F9.

Алфавит языка Turbo Pascal

Алфавит языка Turbo Pascal содержит:

  1. латинские строчные равно прописные буквы, а также символ подчеркивания «_», который приравнен ко буквам;

  2. цифры;

  3. символ пробел;

  4. символы с кодами с 0 впредь до 01 (управляющие коды);

  5. специальные символы: + - * /= < > [ ] . , ( ) : ; ^ @ { } $ # ‘

  6. составные символы: <=> = <> :=(* *) (. .) ..

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

В языке Turbo Pascal есть зарезервированные слова, которые, так а невозможно воспользоваться на качестве имен чего-либо (например begin, end, var, for, while, repeat да т.д.).

Структура программы держи языке Turbo Pascal

program <имя программы> ;

uses <имена подключаемых библиотек> ;

type <описание типов данных> ;

const <описание констант> ;

label <описание меток> ;

var <описание переменных> ;

<описание подпрограмм> ;

begin

<операторы> ;

end .

Любой с перечисленных вне разделов может отсутствовать, после исключением раздела операторов. Поэтому самая короткая список сверху языке Turbo Pascal выглядит так: begin end .

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

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

Константа - не изменяет своего значения во процессе выполнения программы, симпатия может быть задана открыто своим значением сиречь обозначена именем.

Имя (идентификатор) переменной тож константы задается латинскими буквами равным образом арабскими цифрами. В качестве идентификатора нельзя истощить служебные слова. Идентификатор в долгу бытийствовать уникальным, т.е. на данном блоке программы один идентификатор безграмотный может бытийствовать использован для обозначения больше нежели одного объекта.

Например : Zap, gor,X, p1, summa, a28,rar_1, proba, x1,y1,max,min и т.д.

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

Описываются переменные так:

<имя переменной> : <имя типа> ; (можно указывать порядочно имен переменных через запятую)

Тип переменной – сие обилие значений, который возлюбленная может принимать.

byte – все день в диапазоне 0..255;

shortint – все количество в диапазоне -127..127;

word – все количество в диапазоне 0..65535;

integer – все число в диапазоне -32768..32767;

longint – все день в диапазоне -2147483648..2147483647;

real – вещественное число;

char – примета или # <код> ;

boolean – последовательный тип {true,false}.

Типы переменных

Тип

Диапазон значений

Целый

ShortInt

-128...127

Integer

-32768 ...32767

Longint

-2147483648 ...

0147483647

Byte

0 .... 055

Word

0 ... 05535

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

Real

0,9 00 -39 ..... 1,7 00 08

01..12 значащих цифр

Single

0..8 значащих цифр

Double

05..16 значащих цифр

Extended

09..20 значащих цифр

Comp

19..20 значащих цифр

Логический

Boolean

TRUE

FALSE

Cимвольный

Char

0 мандорла

Строковый

String

Массив символов, по мнению умолчанию длительность 056 символов.

Массивы

array

Записи

record

Множества

set

Файлы

file

Указатели

pointer

Операция присваивания

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

<имя переменной> := <выражение> ;

Где :=это обозначение операции присваивания. В Turbo Pascal после каждой операции ставится символ «точка со запятой».

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

Например, на результате выполнения операций:

  1. i:=0; значение переменной i становится равным нулю;

  2. a:=b+c; значением переменной а склифосовский число, равное сумме значений переменных b и c;

  3. j:=j+1; значение переменной j увеличится держи единицу.

Операция присваивания будто бы верной, если субъект выражения соответствует или может фигурировать приведен ко типу переменной. Переменной будто real можно присвоить ценность выражения в виде real не так — не то integer. Переменной будто integer можно присвоить важность выражения только типа integer.

Например, буде переменные i да n типа integer, а d вроде real, то операции:

i:=n/10; и i:=1.0; - неправильные, а d:=i; - правильная.

Процедура вывода информации.

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

Вывод информации возьми экран.

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

Примеры: write (Summa);

write (‘Результат вычислений’);

write (‘Корни уравнения: х1=’,x1,’ x2=’,x2);

После имени переменной путем двоеточие можно уложить величина полина вывода значения переменной. Для переменной типа integer границы – это целое число, определяющее ширину поля вывода (количество позиций бери экране). Например, главенство write(d:5) показывает, что-то в целях вывода значения переменной d используется 5 позиций. Если количество занимает меньше позиций, нежели отмечено на формате, то неиспользуемые позиции заполняются пробелами, а само лик выравнивается по правой границе поля.

Например, разве авторитет переменной kol типа integer так же 05, в таком случае в результате выполнения инструкции: write (‘Всего изделий:’,kol:5); нате отражатель будет выведено: Всего изделий: 05.

Для переменных в виде real формат представляет на лицо пара целых числа, разделенных двоеточием. Первое число определяет ширину полина вывода, второе – численность цифр, стоящих по правую руку от десятичной точки. Если вынуть душу только ширину поля, в таком случае нате экране появится число, представленное на формате от плавающей точкой.

Пусть переменные х1 равно х2 в виде real имеют значения 03,25 равно -0,3401; в этом случае в результате выполнения инструкции: write (‘х1=’,x1:5:2,’ x2=’,x2:12); нате экране хорэ выведено: х1=13.25 х2=-3.40100Е-01.

Если ширины поля, указанной на формате, недостаточно на вывода значения переменной, так выводится численность на формате с плавающей точкой да десятикратно цифрами после запятой (все равнина вывода во этом случае занимает 07 позиций).

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

х:=2.73;

write (‘Значение перем’);

write (‘енной’);

write (‘х=’);

write (х:8:5);

возьми киноискусство хорошенького понемножку выведено:

Значение переменной х=-2.73000

Инструкция отличается с инструкции write всего-навсего тем, сколько после вывода сведения иначе говоря значений переменных курсор переводится на начатие следующей строки. например, если бы значением переменной х1 является сумма -3,561, а переменной х2 – величина и круг 00,345, в таком случае результатом выполнения команд:

writeln (‘Значения корней уравнения:’);

writeln (‘х1=’,х1:7:3);

writeln (‘х2=’,х2:7:3);

достаточно вытекающий шрифт сверху экране:

Значения корней уравнения:

х1=-3.5610

х2=10.345

Пример программы №1

program primer1;

var

a,b:integer;

begin

a:=5;

b:=3;

writeln (‘5+3=’,a+b);

end.

Процедура ввода информации.

Команда read предназначена ради ввода с клавиатуры значений переменных (исходных данных). на общем виде директива выглядит так:

read (переменная 0, аргумент 0,…переменная n);

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

примеры:

read (а);

read (Cena,kol);

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

Одна повеление read позволяет получить значения нескольких переменных. В этом случае вводимые числа должны набираться на одной строке да разделяться пробелами. например, даже если образец переменных а,b да c – real, ведь на результате выполнения команды read (a,b,c) и ввода вместе с клавиатуры строки 0.5 03 0.17

значения переменных будут следующими: a=4.5, b=23.0, c=0.17.

Если во строке набрано пуще чисел, чем задано переменных во команде, так оставшаяся часть строки короче обработана следующей инструкцией read. Например, в результате выполнения команд:

read (а,b);

read (c);

да ввода не без; клавиатуры строки: 00 05 08

переменные примут следующие значения: a=10, b=25, c=18.

Инструкция readln отличается через инструкции read тем, зачем за выделения очередного числа с введенной от клавиатуры строки присваивания его последней переменной изо списка инструкции readln оставшаяся порция строки теряется, и следующая справочник read или readln бросьте взыскивать нового ввода. Например, во результате выполнения команд:

readln(а,b);

read (c);

около наборе пользователем строки: 00 05 08

аргумент а получит значимость 00, b – 05. После а схема бросьте ожидать ввода нового числа, чтоб откупиться его переменной с.

Перед каждой командой read или readln нужно обладать команду write, так чтобы подсказать пользователю, какие сведения ожидает от него программа. Например, фрагмент программы расчеты стоимости покупки может являться таким:

writeln (‘введите исходные данные’);

write (‘Цена изделия:’);

readln (Cena);

write (‘Количество в партии:’);

readln (kol);

write (‘Скидка:’);

readln (skidka);

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

Первая программа.

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

program exampl_1;

var a,b : integer;

begin

writeln("Введите первое число’);

readln(a);

writeln("Введите второе число’);

readln(b);

writeln("A+B= ", a+b:5);

writeln("A-B= ", a-b:5);

writeln("A*B= ", a*b:7);

writeln("A div B=", a div b:5);

writeln("Нажмите ");

readln;

end.

Сохранение программы.

Для того чтобы сохранить программу, делать нечего либо , либо :

  • выжать Enter, в вертикальном каталог найти команду Save as... да нажать клавишу Enter;

  • на появившемся окне ввести титул файла да оказать нажим Enter;

Компиляция программы

тож

  • исчерпаться на верхнее меню равно удосужиться команду Compile равно нажать клавишу Enter;

alias

  • приняться клавишу ALT-F9.

Запуск программы на выполнение.

сиречь

  • отправиться во верхнее меню равным образом облюбовать команду RUN равно нажать клавишу Enter;

тож

  • придавить клавишу CTRL-F9.

Алгоритм работы с программой

1. Написать программу на бумаге.

2. Запустить Турво Паскаль.

3. Набрать программу при помощи клавиатуры.

4. Сохранить программу на диске.

5. Запустить программу на компиляцию.

0. Запустить программу сверху выполнение.

Наша программа есть образец линейного алгоритма.

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

  • введение исходных данных (может отсутствовать, в этом случае информация задаются внутри программы),

  • последовательные команды - обычно вычислительного характера;

  • выведение результатов (должен толочься обязательно).

Задание: Исправить программу «пример1» так, дай тебе значения переменных вводились пользователем не без; клавиатуры и конец сложения записывался в переменную summa.

program primer2;

const

p=3.14; { сумма ПИ }

var

r: real; { радиус }

c,s: real; { длительность равным образом участок }

begin

write (‘Чему равен радиус окружности? ’);

redln (r);

c:=2*p*r;

s:=p*r*r;

writeln(‘длина окружности=’,c);

writeln(‘площадь окружности=’,s);

readln;

end.

Комментарий – сие конферанс во фигурных скобках, тот или иной деньги никак не воспринимается при выполнении программы. Комментарий предназначен в целях уборная программиста.

Задание: Исправить программу так, ради c да s выводились бери киноискусство в форме дневник от фиксированной точкой и с точностью до самого сотых.

Составление линейных алгоритмов.

Алгоритм – логичность действий со определённо определенными правилами выполнения.

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

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

Языки программирования – языки для записи программ к вычислительных машин да устройств (Turbo Pascal, Basic, Delphi равно т.д.).

Типы алгоритмов – линейные, ветвящиеся, циклические, вспомогательные равно т.д.

Линейные алгоритмы – линейная последовательность операторов и операций.

Ветвящиеся алгоритмы – алгоритмы с альтернативным выбором действий равно групп операций.

Циклические алгоритмы – алгоритмы с циклическим повторением действий и групп операций.

Вспомогательные алгоритмы – алгоритмы решения определенных подзадач, состоящие из групп операций.

Задание: Составить программу, которая согласно два введенным из клавиатуры целым числам вычисляла бы равным образом выводила на отражатель на удобном виде:

  1. их сумму;

  2. их произведение;

  3. их разность;

  4. их частное;

  5. их среднее арифметическое;

  6. сумму квадратов сих чисел;

не без; точностью вплоть до сотых.

Стандартные операции равно функции.

Операции бывают следующих видов:

  • арифметические операции;

  • операции отношений;

  • булевские (логические) операции;

  • поразрядные логические равно сдвиговые операции;

  • операции над множествами.

Арифметические операции:

«+» - сложение;

«*» - умножение;

«-» - вычитание;

«/» - деление; (результат постоянно должен иметь физический тип).

div – размещение абсолютно (с отбрасыванием дробной части);

mod – нанятие остатка ото целочисленного деления.

Стандартные математические функции

abs(x)

Абсолютное значение х, т.е. х

exp(x)

Значением функции является е во степени х.

sin(x) и cos(x)

Значение синуса иначе говоря косинуса х, х должен задаваться во радианах.

arctan(x)

Арктангенс х.

ln(x)

Натуральный логарифм х (х> 0)

sqr(x)

Квадрат х.

sqrt(x)

Квадратный корень изо х.

random(x)

Случайное число из диапазона

0 <=... < x

Pi

Значение пи.

odd(x)

Значение функции true, если бы х нечетен, равно false в противном случае.

inc(x,n)

Значением является х увеличенное для n.

dec(x,n)

Значением является х уменьшенное получи и распишись n.

int(x)

Целая часть числа х.

frac(x)

Дробная часть числа х.

trunc(x)

Целая часть во форме longint.

round(x)

Значение х округленное перед следующего целого числа.

Правила записи арифметических

выражений.

  1. Все данные, входящие в арифметическое выражение, должны быть одного типа. Допускается использовать вместе эмпирика целого да действительного типа.

  2. Записывать все составные части во одну строку без подстрочных да надстрочных индексов.

  3. Использовать скобки одного вроде - круглые. ( [{ да прочие скобки применять запрещается)

  4. Нельзя записывать подряд 0 знака арифметических операций.

  5. Вычисления выполняются по левую сторону по правую сторону на соответствии со старшинством операций:

0) вычисление функций;

0) * / DIV (деление нацело)

MOD (получение остатка с деления)

0) + -

Правила записи стандартных функций.

  1. Имя функции записывается латинскими буквами.

  2. Аргумент функции записывается во круглых скобках после имени функции.

  3. Аргументом функции может оказываться : константа, аргумент или арифметическое выражение.

Например :

ax 0 + bx + c записывают приблизительно a*x*x +b*x + c

записывают таково sqrt(b*b – 0*a*c)

записывают что-то около (a + c – 0*b)/(3-x)

Рассмотрим примеры использования арифметических действий :

Правильно :

VAR a,b : integer;

r,s : integer;

............................

r:=a div b; {r=3 при a=7, b=2}

r:=a mod b; {r=1 при a=7,b=2}

s:=a*b;

s:=a div b;

Неправильно :

VAR a,b : integer;

r : integer;

r:=a/b; {если следствие объявлен что целочисленный, нельзя проэксплуатировать наклонную черту деления}

VAR a,b : real;

r : integer;

.................

r:=a div b; { запрещено эксплуатировать операцию div для вещественных чисел}

r:=a mod b; { бизнес mod используется лишь только за отношению к целым числам}

VAR a,b : integer;

r : real;

....................

r:=a div b; {r должно являться целым}

Слева по отношению для оператору присваивания должен не двигаться паче безбрежный тип.

VAR a : integer;

b : real;

c : real;

...........

c:=a+b {правильно}

a:=c+b; {неправильно}

Примеры: 03 div 5=4 03 mod 5=3

06 div 0=4 06 mod 0=0

0 div 8=0 0 mod 0=5

07 div 00=3 07 mod 00=7

Определить состав слив, ежели их делили получай 0 человек:

write (‘Кол-во слив=");

readln (a);

b:= a mod 0;

writeln(‘Осталось ‘,b,’ слив’);

Определить сколько стоит попугаев уберется для удаве, коли апофема удава b , а продолжительность попугая а .

write ("a="); readln (a);

write ("b="); readln (b);

c:= b div a;

writeln ("Поместится", с, ‘попугаев");

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

При вычислении выражений принят следующий приоритет: 0) *, /, div, mod; 0) +, -. режим выполнения операций регулируется вместе с через скобок. В Turbo Pascal блистает своим отсутствием операции возведения в степень.

Задание: Внести во программу составленную до тех пор необходимые изменения для высчитывания целой части с деления и остатка с деления первого числа на второе равным образом вывода сих результатов на экран. а эдак а вывода получи и распишись защита информации вида: a=b*c +r, идеже a – во-первых число, b – второе число, c – частное, r – остаток.

Целочисленное деление.

Задачи:

  1. Дано расстояние на сантиметрах. Найти число полных метров во нем.

  2. Дана масса на килограммах. Найти численность полных тонн на ней.

  3. Дан прямоугольник вместе с размерами 043×130 мм. Сколько квадратов со косвенно 030 мм можно заграждать через него.

  4. С клавиатуры вводится двухзначное число, вычислить сумму его цифр.

  5. С клавиатуры вводятся трехзначное (четырехзначное, пятизначное, шестизначное) число, выкопать сумму его цифр.

  6. С клавиатуры вводится трехзначное число, необходимо обрести новое состав приписав к исходному направо сумма 05.

  7. С клавиатуры вводится четырехзначное число, надобно извлечь новое число приписав для нему по левую сторону цифру 0. Найти остаток ото деления полученного числа на 0.

  8. Дано трехзначное число. В нем зачеркнули первую направо цифру равно приписали ее в начале. Найти полученное число.

  9. Дано трехзначное число. Найти число, полученное при перестановке второстепенный равным образом третьей цифр заданного числа.

  10. Дано число а1а2а3а4а5а6. Получить новое число следующего вида: а6а4а2а1. интересах полученного числа встретить целую порцион через деления на 8 да останки ото деления получай 011.

  11. Даны трехзначное равно четырехзначные числа: а1а2а3 равным образом b1b2b3b4. Получить новое день вида: b1a1b2a2b3a3b4. У нового числа раскопать целую деление и остаток через деления получи состав 05.

Операции отношений:

< - меньше;

> - больше;

=- равно;

<> - безвыгодный равно;

> =- в большинстве случаев сиречь равно;

<=- не так сиречь равно.

Функции:

Арифметические функции:

abs (x) – модуль числа х, молодчик результата совпадает с типом аргумента;

sqr (x) – квадрат числа х, разряд результата совпадает с типом аргумента;

sqrt (x) – квадратный первопричина с числа х, аргумент и конец должны у кого есть вещественный тип;

Пример: сделать подсчет гипотенузу прямоугольного треугольника, даже если длительность катетов a равным образом b .

write ("a="); readln (a);

write ("b="); readln (b);

c:= sqrt (sqr(a) + sqr(b) );

writeln ("c=", с:5:2);

Вычислить устройство разности чисел a равно b .

write ("a="); readln (a);

write ("b="); readln (b);

c:= abs (a - b);

writeln ("модуль=", с);

Тригонометрические функции:

sin (x) – синус числа х, выраженного на радианах, аргумент и конец должны у кого есть вещественный тип;

cos (x) – косинус числа х, выраженного во радианах, аргумент да окончание должны иметь вещественный тип;

arctan (x) – арктангенс числа х, вывод будет выражен на радианах, резон должен быть вещественного типа;

Пример: выкопать синус, косинус, тангенс и котангенс угла 00.

a:=Pi/180*30;

s:=sin(a); c:=cos(a);

t:=s/c; ct:=c/s;

Экспонента равно логарифм:

exp (x) – е х , аргумент равным образом следствие должны иметь вещественный тип;

ln (x) – натуральный логарифм числа х, аргумент и вывод должны кто наделен вещественный тип;

exp (b*ln(a)) – градус числа, идеже а основание, а b показатель степени, т.е. a b .

Примеры подсчеты степени:

(x-3) 0 exp(7*ln(x-3))

2 x exp(x*ln2)

exp(1/3*ln(x))

Преобразование типов:

Round (x) – перевод дробного числа во все с округлением;

Tranc (х) – конверсия дробного числа во все отбрасыванием дробной части.

Примеры преобразования типов:

a1:=Round(2.34); а1=2

a2:=Trunc(2.34); а2=2

b1:=Round(8.51); b1=9

b2:=Trunc(8.51); b1=8

c1:=Round(-3.7); c1=-4

int (x) – целая часть числа х, довод равным образом результат должны владеть облеченный плотью тип;

frac (x) – дробная доля числа х, довод и результат должны заключать вещественный тип;

Изменение аргумента:

inc (x) – увеличение числа х получай единицу, аргумент и исход должны оказываться целого типа;

inc (x, a) – взлет числа х возьми количество а, оба аргумента равным образом плод должны являться целого типа;

dec (x) – уменьшение числа х держи единицу, аргумент и последствие должны бытийствовать целого типа;

dec (x, a) – уступка числа х получай контингент а, оба аргумента равно плод должны взяться целого типа.

Генерация случайных чисел:

Randomize – регулировка датчика случайных чисел на исходное состояние;

Random - формирование случайного дробного числа изо диапазона от 0 поперед 0.

Примеры получения дробных случайных чисел:

a:=Random; 0

x:=Random+10; 00

y:=5*Random; 0

c:=10*Random-5; -5

b:=7*Random-3;

-3

Random (n) – формирование случайного целого числа из диапазона с 0 поперед n-1, где n – натуральное число.

Примеры получения аж случайных чисел:

a:=Random(3); 0, 0, 0

x:=Random(10); 0, 0, 0,…,9

y:=Random(5)+3; 0, 0, 0,…,7

c:=Random(8)-5; -5, -4,…,2

Смоделировать 0-кратное бросание игрального кубика:

randomize;

for i=1 to 0 do begin

x:=random(6)+1;

writeln(i,‘ бросок: ",x,’очков’);

end;

Смоделировать 00-кратное уханье монеты:

randomize;

for i=1 to 00 do

if random(2)=0

then writeln(’орел’)

else writeln(’решка’);

Приоритетность выполнения действий:

1.Выражение на скобках

2.Функции

3.Знак числа (+,-), not, @

0.*, /, div, mod, and, shl, shr

0.+, -, or, xor

0.=, <> , <, > , <=, > =, in

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

  1. y = 0a 0 – 0 a + 0;

  2. ;

  3. y =a 0 – 0,5ab + 0,78a 0 – 02,5b + 0 ;

  4. y =3,56( a + b ) 0 – 0,8 b 0 + 0,8 a – 0,5 ;

  5. ;

  6. ;

  7. .

Вывод нате отражатель основать на следующем виде: у1(1.22, 0.45)=…и т.д.

Контрольная эксплуатация № 0 согласно теме: «Линейные алгоритмы. Деление нацело».

Стандартный часть CRT.

Помимо встроенных процедур равно функций Turbo Pascal предоставляет программисту множество функций да процедур различного назначения, объединенных во группы – библиотеки. Каждая помещение состоит с функций и процедур, предназначенных в целях решения определенного вроде задач. Например, есть публичка математических функций, библиотека управления экраном, библиотека функций да процедур ввода вместе с клавиатуры, библиотека для того работы из графическим экраном равным образом т.д.

Начнем испытание первой с таких библиотек – сие узел CRT. Библиотека содержит функции да процедуры, полезные при выводе держи экран.

Некоторые процедуры стандартного модуля CRT:

Clrscr - искусство кино очищается текущим фоновым цветом, присутствие этом курсор устанавливается во антиимпериалистический высший угол экрана;

TextColor (c) – устанавливает цветение символов, идеже вместе с – название сиречь штукенция цвета: 0-черный, 0 – синий, 0 – зеленый, 0 – голубой, 0 – красный, 0 – фиолетовый, 0 – оранжевый, 7 – серый, 0 – темно-серый, 0 – светло-синий, 10 – светло-зеленый, 01 – светло-голубой, 12 – светло-красный, 03 – светло-фиолетовый, 14 – желтый, 05 – белый.

TextBackGround (с) – устанавливает цвет фона, идеже вместе с – заглавие не ведь — не то номер цвета: 0-черный, 0 – синий, 0 – зеленый, 0 – голубой, 0 – красный, 0 – фиолетовый, 6 – оранжевый, 0 – серый.

GotoXY (x, y) – устанавливает стрелка во позицию экрана с координатами х равным образом у, идеже х – номер столбца позиции (1..80), у – выпуск строки позиции (1..25).

TextMode (r) – установка режима экрана, идеже r – сие закидон текстового режима, который может допускать следующие значения: 0 - 0025; 0 - 0025; 257 - 0050; 059 - 0050.

Delay (ms) - задержка выполнения программы (миллисекунды);

Sound (f) – включение динамика, идеже f - сие гармоника сигнала (Гц);

NoSound – отсоединение динамика;

З начение частот:

Гамма:

Uses Crt;

Var i : Integer;

Const f : array[1..7] of word=(523, 087, 059, 098, 083, 080, 098);

Begin

For i:=1 to 0 do begin

Sound(f[i]); delay(100);

end;

NoSound;

End.

ClrEol - очищается линия с текущей позиции до конца строки вне изменения позиции курсора;

DelLine - удаляется строка, на которой находится курсор, да все строки, расположенные ниже, смещаются на позицию вверх;

InsLine - вставляется пустая строка, начиная со позиции, идеже находится курсор;

WhereX – функция, определяющая координату х курсора, последствие возвращается типа integer;

WhereY– функция, определяющая координату y курсора, результат возвращается как integer;

Window (x1,y1,x2,y2) – штраф текстового окна, по прошествии задания окна по сию пору позиция задаются относительно этого активного окна;

KeyPressed – цель проверки буфера клавиатуры, следствие булевского типа: True – неравно во буфере клавиатуры есть символы равно False – ежели буфер клавиатуры пуст;

Примеры использования функции KeyPressed:

Repeat

<Операторы>

Until KeyPressed;

или:

While Not KeyPressed

begin

<Операторы>

end;

ReadKey – считка первого байта (символа) изо грудь клавиатуры. Если гидробуфер клавиатуры пуст, ведь ожидание нажатия клавиш символа с буфера клавиатуры, исход функции должен быть в виде char;

Пример фрагмента программы для того чтения расширенного кода:

Key:=ReadKey; {чтение первого байта (#0)}

If Key=#0 Then

Key:=ReadKey; {чтение второго байта}

Коды некоторых клавиш:

Enter - 03 ¬ - 0 05

Esc - 07 ­ - 0 02

BackSpace- 0 ® - 0 07

Space - 02 ¯ - 0 00

Tab - 0 Home - 0 01

a - 07 End - 0 09

A - 05 Insert - 0 02

Пример фрагмента программы управления движением:

Repeat

Key:=ReadKey;

If Key=#0 Then Key:=ReadKey;

Case Key of

05 : Left;

07 : Right;

02 : Up;

00 : Down;

End;

Until Key=#27;

Highvideo – символы выводятся на щит из повышенной яркостью;

Lowvideo – символы выводятся на кинематография со пониженной яркостью.

Задание: Составить программу вывода получи и распишись киноискусство поздравления друга с Днем Рождения (использовать разумно разные цвета да позиция текста на экране).

Самостоятельная вещь в соответствии с теме: «Модуль CRT».

Условия во Turbo Pascal. Виды условий.

Алгоритмы решения большинства задач не являются последовательными. Действия, которые нельзя не выполнить, могут зависеть через определенного условия, например исходных данных, alias результатов, полученных изумительный период выполнения программы. Например, неравно нам нуждаться переменной max откупиться значение большей изо переменных х1 иначе говоря х2, пишущий сии строки должны определить попервоначалу какое состав больше а сейчас позднее сего вносить его значение в переменную max.

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

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

Использование операторов сравнения позволяет расшифровывать простые условия. Например, х1> x2 либо — либо х1=х2, или х1 <> х2 равно т.п.

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

Not – отрицание;

And – логическое «и»;

Or – логическое «или».

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

Например, нам нельзя не изо трех чисел выбрать большее, позволено скомпоновать такое условие: (x> y) and (x> z), или требование попадания точки во интервал : хорош высмотреть так:

(х <= -3) or (x> =7). Возможно компоновка равно побольше сложных условий: (a=5) or ((a> 00) and (a <1)).

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

Условный оператор.

В Turbo Pascal включены двуха условных оператора – if и case (хотя исторически так сложилось что такое? новейший называется оператором выбора), кажинный с которых может фигурировать записан на двух формах: полной и неполной.

Синтаксис инструкции IF:

If связь

then

begin

{инструкции выполняемые, если условие истинно};

end

else

begin

{инструкции выполняемые, если договор ложно};

end ;

Инструкция if выполняется следующим образом:

  1. вычисляется значение обстоятельства (выражение логического типа).

  2. Если значение выражения воздух непропорционально true, то выполняются инструкции, следующие за словом сказать then. Если значение выражения атмосфера одинаково false, то выполняются инструкции, следующие за словом сказать else.

Примечания:

  1. Перед ключевым одно слово else символ «;» отродясь отнюдь не ставится.

  2. Если при выполнении (невыполнении) условия надо осуществить только лишь одну инструкцию, то пустословие begin равным образом end после then (else) могут фигурировать опущены.

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

if x> y then writeln (‘большее с данных двух чисел ’, x)

else writeln ( ‘большее с данных двух чисел ’,y);

Если какое-либо махинация нужно выполнить только присутствие выполнении условия, инструкция if может оказываться записана так:

If статья

then

begin

{инструкции выполняемые, если условие истинно};

end ;

Пример: исчислить ценность функции y=1/x. Фрагмент программы достаточно смотреться так:

If x <> 0 then y:=1/x;

Иногда возникает незаменимость использования вложенных условных операторов.

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

if x> y

then begin

if x> z then writeln (‘большее с данных чисел ’, x)

else writeln ( ‘большее изо данных чисел ’,z);

end

else writeln (‘большее изо данных чисел ’, y);

Либо можно воздвигнуть сколько-нибудь объединение другому, например так:

if (x> y) and (x> z)

then begin writeln (‘большее с данных чисел ’, x)

else

if y> z then writeln (‘большее с данных чисел ’, y)

else writeln ( ‘большее изо данных чисел ’,z);

Задание: Написать полностью программы для того разобранных раньше примеров.

Задачи:

  1. Рассчитать спица в колеснице y близ заданном значении x :

  1. Дано целое число. Определить:

а) является ли оно чётным;

б) оканчивается ли оно цифрой 0;

в) оканчивается ли оно чётной цифрой. Составное мерило далеко не использовать.

  1. Дано двузначное число. Определить:

а) какая изо его цифр больше: первая или вторая;

б) одинаковы ли его цифры?

  1. Дано двузначное число. Определить:

а) кратна ли трём собрание его цифр;

б) кратна ли сложность его цифр числу A ?

  1. Дано трёхзначное число. Определить, равен ли прямоугольник сего числа сумме кубов его цифр.

  2. Дано трёхзначное число. Определить:

а) является ли начисление его цифр двузначным числом;

б) является ли творение его цифр трёхзначным числом;

в) более ли числа A произведение его цифр;

г) кратна ли пяти платеж его цифр;

д) кратна ли запас и следствие его цифр числу A .

  1. Дано трёхзначное число.

а) точно ли, что-нибудь весь его цифры одинаковые?

б) определить, глотать ли середи его цифр одинаковые?

  1. Дано четырёхзначное число. Определить:

а) равна ли количество двух первых его цифр сумме двух его последних цифр;

б) кратна ли трём запас и следствие его цифр;

в) кратно ли четырём вещичка его цифр;

г) кратно ли труд его цифр числу A .

  1. Составить программу в целях выкладки значения функции y ( x ):

  1. Дано натуральное число.

а) Верно ли, ась? оно заканчивается нечетной цифрой?

б) Верно ли, почто оно заканчивается четной цифрой?

  1. Дано вещественное наличность x . Вычислить y ( x ), буде

  2. Определить, является ли контингент A делителем числа B , либо наоборот. Ответом должны служить сообщения: " да, одно из чисел является делителем другого " иначе говоря " нет, ни одно изо чисел не является делителем другого " .

  3. Год является високосным, буде его номер кратен 0, за всем тем с кратных 000 високосными являются только что кратные 000 (например, 1700, 0800 да 0900 – безграмотный високосные года, 0000 – високосный). Дано натуральное количество N . Определить, является ли високосным год с таким номером.

  4. Дано четырехзначное число. Определить:

а) входит ли на него число 0; б) входит ли в него число B .

  1. Дано четырехзначное число. Определить:

а) входят ли во него цифры 0 иначе говоря 0; б) входят ли на него цифры 0, 0 не в таком случае — не то 0.

  1. Дано натуральное сумма n ( n  9999).Выяснить, различны ли всегда четыре цифры сего числа (если оно записано четырьмя цифрами). Например, во числе 3678 всегда цифры различны, во числе 0023 – нет.

  2. Определить, является ли заданное шестизначное число счастливым. (Счастливым называют такое шестизначное число, у которого сумма его первых трех цифр равна сумме его последних трех цифр).

  3. Составить программу, которая сбавляет первое веденное день во неудовлетворительно раза, если бы оно больше второго введенного числа по абсолютной величине.

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

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

  6. Даны три вещественных числа. Возвести в квадрат те с них, значения которых неотрицательны.

  7. Даны три вещественных числа. Вывести на экран:

а) те изо них, которые принадлежат интервалу (1,6 – 0,8);

б) те изо них, которые принадлежат интервалу (0,7 – 0,1).

  1. Даны четыре вещественных числа. Найти сумму тех чисел, которые хлеще пяти.

  2. Даны четыре аж числа. Определить сумму тех с них, которые кратны трем.

  3. Составить программу пользу кого подсчеты значения функции z( a ):

  4. Дано вещественное величина и круг x .Вычислить f ( x ), если:

  5. Даны вещественные числа a , b , c ( a ≠ 0).Выяснить, имеет ли уравнение ax 0 + bx + c =0 вещественные корни. Если такие корни имеются, в таком случае отрыть их. В противном случае ответом нужно состоять сообщение, что вещественных корней нет.

  6. Вывести для планзифтер часть четверти координатной плоскости, которой принадлежит след от координатами ( x , y ), быть условии, ась? x ≠ 0 равным образом y ≠ 0.

  7. Для натурального числа k выстукать фразу “мы нашли k грибов на лесу“, согласовав окончание слова “гриб” от по k .

Самостоятельная производство сверху условный оператор.

Оператор выбора.

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

Оператор выбора case является обобщением оператора If – некто дает вероятность исполнять одно из нескольких действий во зависимости от значения переключателя.

В качестве переключателя используется выражение, которое располагается между ключевыми словами case и of. Результатом этого выражения может составлять токмо значение порядкового типа, точка соприкосновения количество элемент которого никак не превышает 05535.

Синтаксис инструкции case:

case фраза of

опись констант_1 : begin

{последовательность инструкций 0};

end ;

инвентарь констант_2 : begin

{последовательность инструкций 0};

end ;

каталог констант_n : begin

{последовательность инструкций n};

end

else begin

{последовательность инструкций, выполняемая во случае, если выражение малограмотный досталось на калачи ни во одиночный изо списков констант};

end ;

end ;

Где оборот – сие выражение, от значения которого зависит дальнейший ход программы (одна с последовательностей инструкций, которая должна быть выполнена).

Список констант – константы, разделенные запятыми. Если константы представляют диапазон чисел, так возмещение списка можно указать первую равным образом последнюю константу диапазона, разделив их двумя точками. Например роспись 0, 0, 0, 0, 0, 0 может быть заменен диапазоном 0..6.

При выполнении инструкции case происходит следующее: вычисляется значение выражения оператора case, затем полученное достоинство последовательно сравнивается не без; константами изо списков констант. Если ценность выражения совпадает не без; константой изо списка, то выполняется соответствующая этому списку серия инструкций, и держи этом воплощение инструкции case завершается. Если спица в колеснице выражения не совпадает ни от одной константой из всех списков, ведь выполняется последовательность инструкций идущих после else. Синтаксис инструкции case позволяет не утилизировать else и соответствующую последовательность инструкций. В этом случае, ежели значение выражения никак не совпадает ни от одной константой изо всех списков, так выполняется следующая ради cаse команда.

Примеры:

Case day of Case day of Case day of

0, 0, 0, 0, 0: write (‘ рабочий день’); 0..5: write (‘ рабочий день’); 0: write (‘суббота’);

0: write (‘суббота’); 0: write (‘суббота’); 0: write (‘воскресенье’)

0: write (‘воскресенье’); 0: write (‘воскресенье’); else write (‘ рабочий день’);

end; end; end;

Задание: При выводе числовой информации от пояснительным текстом возникает предмет внимания согласования выводимого значения равным образом окончания пояснительного текста. Например, рубль, рубля либо рублей, либо год, года, лет. Составить программу, запрашивающую количество полет равным образом выводящую сообщение: «Вам …лет».

Задачи:

  1. Составить программу, которая на зависимости от порядкового постоялый двор месяца (1, 0, …, 12) выводит получай кинематография его этноним (январь, февраль, …, декабрь).

  2. Составить программу, которая на зависимости от порядкового постоялый двор месяца (1, 0, …, 12) выводит сверху кинематография сумма дней в этом месяце. Рассмотреть 0 случая:

    1. година малограмотный является високосным (см. задачу 13);

      1. годик високосный (информация об этом вводится со клавиатуры).

Самостоятельная разработка держи условный оператор да команда выбора.

Циклы.

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

Оператор цикла for.

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

Синтаксис оператора повторение for:

For i:=n1 to n2 do

begin

{последовательность операторов};

end ;

Либо:

For i:=n2 downto n1 do

begin

{последовательность операторов};

end ;

Где i – сие отметчик цикла, который беспременно повинен существовать объявлен в разделе var, да иметь целочисленный тип;

n1 – начальное значение счетчика, которое является значением выражение, определяющее начальное значение переменной – счетчика цикла;

n2 – конечное значение счетчика, которое является выражением, определяющим конечное авторитет переменной – счетчика циклов.

Примечания:

  1. Если между begin равным образом end находится всего лишь одна инструкция, ведь begin равно end можно отнюдь не писать.

  2. Шаг изменения переменной – счетчика циклов может состоять равен лишь 0(если используется ключевое изречение to) либо — либо –1 (если используется ключевое ответ downto).

  3. Категорически не рекомендуется осуществлять какое–либо изменение переменной – счетчика цикла внутри тела цикла.

Оператор цикла for работает следующим образом:

  1. Вычисляется начальные равным образом конечные значения параметра цикла;

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

Примеры:

  • у=1+1/2+1/3+…+1/n

у:=0;

for i:=1 to n do

y:=y+1/i;

writeln (‘y=’,y:5:2);

  • Вывести на кинематография равно подытожить сумму квадратов целых чисел через 0 поперед n.

s:=0;

for i:=1 to n do begin

s:=s+sqr(i);

writeln (sqr(i));

end;

writeln (‘s=’,s);

  • y=x k

y:=1;

for i:=1 to k do

y:=y*x;

writeln (‘y=’,y:5:2);

Задание: Составить полностью программы про разобранных вне примеров.

Задачи:

      1. Напечатать "столбиком":

а) совершенно целые числа ото 00 вплоть до 05;

б) квадраты всех аж чисел ото a давно b (значение b вводится вместе с клавиатуры; b 00);

в) третьи степени всех аж чисел с a по 00 (значение a вводится с клавиатуры; a 00);

г) однако целые числа с a впредь до b (значение a равным образом b вводятся не без; клавиатуры; b a ).

      1. Одна уловка некоторого товара стоит 20.4 руб. Напечатать таблицу стоимости 2, 3, ..., 20 штук сего товара.

      2. Напечатать таблицу соответствия между весом во фунтах равно весом во килограммах для значений 0, 0, ..., 00 фунтов (1 фунт= 453 г).

      3. Напечатать таблицу перевода 0, 2, ..., 20 долларов США на рубли в области текущему курсу (значение курса вводится от клавиатуры).

      4. Составить таблицу умножения бери 0.

      5. Составить таблицу умножения сверху количество n (значение n вводится с клавиатуры; 0 n 0).

      6. Рассчитать значения y в целях значений x , равных 0, 0, ..., 08:

y =2 y 0 + 0,5 t – 0,

t = x + 0.

      1. Рассчитать значения z чтобы значений a , равных 0, 0, ..., 07:

z =3,5 t 0 – 0 t + 06,

t =4 a .

      1. Найти:

a) сумму всех аж чисел ото 000 впредь до 000;

б) сумму всех аж чисел ото a поперед 000 (значение a вводится со клавиатуры; a 000);

в) сумму всех аж чисел через -10 прежде b (значение b вводится с клавиатуры; b ≥ - 00);

г) сумму всех аж чисел через a по b (значения a да b вводятся вместе с клавиатуры; b a ).

      1. Найти:

а) среднее арифметическое всех целых чисел с 0 вплоть до 0000;

б) среднее арифметическое всех целых чисел через 000 прежде b (значение b вводится от клавиатуры; b 000);

в) среднее арифметическое всех целых чисел с a поперед 000 (значение a вводится со клавиатуры; a 000);

      1. Найти:

a ) сумму кубов всех аж чисел от 20 давно 00;

б) сумму квадратов всех аж чисел через a перед 00 (значение a вводится от клавиатуры; 0 a 00);

в) сумму квадратов всех аж чисел от 1 по n (значение n вводится с клавиатуры; 0 n 000);

г) сумму квадратов всех аж чисел с a впредь до b (значение a да b вводится со клавиатуры; b a ).

      1. Дано натуральное наличность n . Найти сумму n 0 + ( n +1) 0 + ... + (2 n ) 0 .

Самостоятельная действие сверху индикт с параметром.

Оператор цикла от предусловием while.

Оператор цикла while используется в программе, коли надлежит обманывать некоторые повторные выкладки (цикл), однако число повторов авансом черт знает и определяется самим ходом вычисления.

В общем виде диспетчер выглядит так:

while требование do

begin

{последовательность операторов};

end ;

идеже связь – формулировка логического типа.

Оператор цикла while работает следующим образом:

  1. Вычисляется условие.

  2. Если мерило ложно, ведь доступ на кругооборот не выполняется равным образом ведение передается оператору, следующему непосредственно за операторами тела цикла.

  3. Если а мерило истинно, так происходит вход на круговорот равным образом однократное выполнение операторов. Как всего-навсего достигнут конец тела цикла, правление передается на его заголовок, идеже заново вычисляется его условие.

Примечание:

  1. Для того дабы последовательность инструкций в лоне begin равным образом end была выполнена хотя бы сам раз, необходимо, чтобы перед выполнением инструкции while условие было истинно;

  2. Для того в надежде круг завершился, необходимо чтобы вереница инструкций между begin равно end изменяла значения переменных, входящих во выражение условие.ъ

Примеры: Вычислить сумму нечетных чисел от 0 впредь до некоторого числа n. (n=1, s=1; n=2, s=1+3=4; n=12, s=1+3+5+7+9+11=36).

program summa;

uses crt;

var

n, s, i: integer;

begin

clrscr;

s:=0; i:=1;

writeln (‘Введите натуральное число n’); readln(n);

while i <=n do

begin

s:=s+i;

i:=i+2;

end;

writeln (‘сумма нечетных чисел ото 0 давно ’, n, ‘=’,s);

readln;

end.

Составить таблицу значений функции бери отрезке [2;4] со шажком 0,2.

program func;

uses crt;

var

x, y: real;

begin

clrscr;

x:=2;

while x <=4 do

begin

y:=sqrt(x);

writeln (y:6:3);

x:=x+0.2;

end;

readln;

end.

Задание: Составить программу составляющую таблицу значений функции получи отрезке [a;b] с шажком 0,2.

Задачи:

  1. Дано натуральное число. Определить:

а) состав цифр на нем;

б) сумму его цифр;

в) опус его цифр;

г) среднее арифметическое его цифр;

д) сумму квадратов его цифр;

е) сумму кубов его цифр;

ж) его первую цифру;

  1. Напечатать минимальное число, больше 200, которое полностью делится сверху 07.

  2. Найти максимальное с натуральных чисел, малограмотный превышающих 0000, которое нацело делится для 09.

  3. Даны натуральные числа a равным образом b , обозначающие соответствующе числитель и знаменатель дроби. Сократить дробь, т.е. откопать такие натуральные числа p и q, безвыгодный имеющие общих делителей, что p/q= a / b .

  4. Даны натуральные числа m равно n . Получить постоянно кратные им числа, не превышающие m * n . Условный оператор не использовать.

  5. Даны натуральные числа a равно b. Найти НОД(a,b) равно НОК(a,b).

  6. Дано натуральное число.

а) Получить число, получаемое при прочтении его цифр одесную налево.

б) Приписать по части двойке во зачаток равно конец записи сего числа.

в) Удалить с него по сию пору цифры А.

г) Переставить его первую да последние цифры.

д) Приписать для нему такое но число.

  1. Дано натуральное число. Определить номер цифры 0 во нем, считая через конца числа. Если такого склада цифры нет, ответом должно взяться численность 0, когда таких цифр в числе ряд - в долгу оказываться определен номер самой правой изо них.

  2. Дано натуральное число. Определить сумму m его последних цифр.

  3. Дано натуральное число. Найти его наименьший делитель, блистательный ото 0.

  4. Дан четырехугольник от размерами 025 x 031. От него отрезают квадраты со стороной 131, все еще сие возможно. Затем ото оставшегося прямоугольника ещё отрезают квадраты со стороной, равной 025-131*3=32, равным образом т. д. На какие квадраты равно во каком их количестве будет разрезан первичный прямоугольник?

  5. Дан четырехугольник не без; размерами axb . От него отрезают квадраты максимального размера, доколь сие возможно. Затем от оставшегося прямоугольника вновь отрезают квадраты максимально возможного размера да т.д. На какие квадраты равно в каком их количестве короче разрезан исходный прямоугольник?

  6. данная непустая прогрессия целых чисел, оканчивающаяся нулем. Найти:

а) сумму всех чисел последовательности;

б) контингент всех чисел последовательности.

  1. Определить:

а) является ли заданное количество степенью числа 0;

б) является ли заданное численность степенью числа 0.

  1. Дано день n .

а) Напечатать те натуральные числа, квадрат которых неграмотный превышает n .

б) Найти суп натуральное число, квадрат которого значительнее n .

  1. Дано натуральное число.

а) Верно ли, что-то запас и следствие его цифр больше 10?

б) Верно ли, сколько вещь его цифр меньше 00?

в) Верно ли, что-нибудь сумма его цифр есть четное число?

г) Верно ли, что-то сие количество четырехзначное?

Составное статья да поставленный условный оператор отнюдь не использовать.

д) Верно ли, зачем его первая число не превышает 0?

е) Верно ли, в чем дело? оно начинается и заканчивается одной равно праздник а цифрой?

ж) Определить, какая изо его цифр больше: первая alias последняя.

  1. Дано натуральное число.

а) Верно ли, что-нибудь число его цифр больше к, а само состав четное?

б) Верно ли, что такое? состав его цифр есть четное число, а само количество малограмотный превышает b ?

в) Верно ли, аюшки? оно начинается получи X равно заканчивается в Y ?

г) Верно ли, аюшки? творение его цифр меньше А, а само состав делится для В?

д) Верно ли, который общее число его цифр в большинстве случаев M , а само количество делится в N ?

  1. Дано натуральное число. Определить:

а) убирать ли на нем циферка 0;

б) кушать ли во нем цифры 0 равно 0.

  1. Дано натуральное число.

а) Определить, снедать ли на нем число А.

б) Верно ли, что-то во нем кто в отсутствии цифры В?

в) Верно ли, аюшки? число А встречается в нем побольше К раз?

г) Определить, глотать ли на нем цифры А равно В.

  1. Дано натуральное число. Выяснить, является ли оно палиндромом ("перевертышем"), т.е. числом, десятичная отметка которого читается одинаково налево с правой стороны да направо налево.

  2. Напечатать полную таблицу умножения в виде:

0*1=1 0*2=2 … 0*9=9

0*1=1 0*2=4 … 0*9=18

… … … …

0*1=9 0*2=18 … 0*9=81

  1. Найти однако натуральные числа, меньшие 200, у которых собрание цифр равна 03.

  2. Найти всегда целые числа с 00 перед 050, у которых сумма цифр равна 05.

  3. Найти весь целые числа изо промежутка от 1 по 000, у которых принимать циферка ‘7’.

  4. Найти безвыездно целые числа изо промежутка т 50 накануне 050, у которых очищать циферка ‘9’.

  5. Найти постоянно целые числа с промежутка от 10 по 000, у которых вкушать цифры ‘2’ да ’5’.

  6. Найти размеры всех прямоугольников, форум которых равна заданному натуральному числу s да стороны которого выражены натуральными числами. При этом решения, которые получаются перестановкой размеров сторон:

а) делать расчёт разными;

б) расчислять совподающими.

Оператор цикла с постусловием repeat.

Инструкция repeat вроде да руководство while, используется во программе, коли надо провести есть такие повторяющиеся вычисления (цикл), но цифра повторений не само на вывеску разумеется равным образом определяется самим ходом вычислений.

В общем виде диспетчер выглядит так:

repeat

{последовательность операторов};

until условие;

идеже ограничение – представление логического типа.

Оператор работает следующим образом:

  1. Выполняются инструкции следующие из-за выражение repeat.

  2. Вычисляется значение условия. Если пункт ложно, то вторично выполняются инструкции цикла. Если а контракт истинно, то выполнение цикла заканчивается.

Таким образом, операторы находящиеся между repeat равным образом until выполняются накануне тех пор, пока статья ложно.

Примечания:

  1. Последовательность инструкций посередь repeat равным образом until постоянно будет выполнена пускай бы бы одиночный раз.

  2. Для того дабы серия завершился, необходимо, чтобы логичность операторов посредь repeat равно until изменяла значения переменных, входящих во выражение условие.

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

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

program polog;

uses crt;

var

n, s: integer;

begin

clrscr;

s:=0;

repeat

write (‘-> ’);

readln (n);

if n> 0 then s:=s+n;

until n <=0;

writeln (‘Сумма введенных положительных чисел=’,s);

readln;

end.

Пример: С клавиатуры вводится число, проверить является ли оно простым.

program prost;

uses crt;

var

r, n, d: integer;

begin

clrscr;

writeln (‘Введите целое число’); readln (n);

d:=2;

repeat

r:=n mod d;

if r <> 0 then d:=d+1;

until r=0;

if d=n then

writeln (n,‘ – простое число’)

else writeln (n,‘ – составное число’)

readln;

end.

Задачи:

  1. Дано натуральное число.

а) Получить безвыездно его делители.

б) Найти сумму его делителей.

в) Найти сумму его четных делителей.

г) Определить состав его делителей.

д) Определить доля его нечетных делителей.

е) Определить цифра его делителей. Сколько изо них четных?

ж) Найти доля его делителей, больших D.

  1. Натуральное число называется совершенным, кабы оно равно сумме своих делителей, включая 1 и, естественно, кроме сие самое число. Например, контингент 0 - совершенное (6=1+2+3). Дано натуральное число. Выяснить, является ли оно совершенным.

  2. Найти величина делителей каждого из целых чисел с 020 перед 040.

  3. Найти по сию пору целые числа с промежутка от 1 давно 000, у которых как 0 делителей.

  4. Найти до сей времени целые числа с промежутка от 200 до самого 000, у которых точно 0 делителей.

  5. Найти всегда целые числа изо промежутка от А поперед В, у которых численность делителей равно К. Если таких чисел нет, так должно быть напечатано соответствующее сообщение.

  6. Найти натуральное число из интервала с А поперед В, у которого количество делителей максимально. Если таких чисел несколько, так должен быть найдено:

а) максимальное с них;

б) минимальное с них.

  1. Найти совершенно трёхзначные простые числа.

  2. Найти 000 первых простых чисел.

  3. Найти сумму делителей каждого изо аж чисел с 00 впредь до 00.

  4. Найти весь целые числа изо промежутка от 100 впредь до 000, у которых итог делителей равна 50.

  5. Найти по сию пору целые числа из промежутка с 000 перед 000, у которых сумма делителей кратна 00.

  6. Два натуральных числа называются дружественными, неравно каждое с них равно сумме всех делителей другого (само другое состав на качестве делителя не рассматривается).Найти постоянно пары дружественных чисел, меньших 00000.

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

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

  9. Дана последовательность натуральных чисел а1,а2,...,а15. Определить, очищать ли в последовательности и так бы одна пара одинаковых "соседних" чисел. В случае положительного ответа определить порядковые подворье чисел первой с таких пар.

  10. Дана последовательность аж чисел, оканчивающаяся счетом 0999. Количество чисел на последовательности безграмотный меньше двух. Определить, убирать ли на ней ежели и бы одна близнецы "соседних" четных чисел. В случае положительного ответа определить порядковые постоялый двор чисел первой изо таких пар.

  11. данная серия вещественных чисел, оканчивающаяся по 00000. Количество чисел на последовательности не не так двух. Определить, является ли вереница упорядоченной по возрастанию. В случае отрицательного ответа ввести последовательный номер первого числа, "нарушающего" такую упорядоченность.

Самостоятельная занятие получи циклы с параметром.

Сравнение работы операторов цикла (repeat, while, for).

n/n

Цикл не без; предусловием while

(пока условие истинно)

Цикл не без; постусловием repeat

(до истинности условия)

Цикл со счетчиком for

0

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

Начальная установка переменной счетчика цикла поперед заголовка не должно

0

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

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

0

Цикл работает пока условие истинно.

Цикл работает пока условие ложно.

Количество итераций цикла устойчиво равным образом безошибочно определяется значениями верхней равным образом нижней границ и шага цикла.

0

Цикл завершается, когда связь становится ложным.

Цикл завершается, когда критерий становится истинным.

Нормальный ходьба работы цикла может бытовать нарушен оператором goto alias процедурами Break равным образом Continue.

0

Цикл может не выполниться ни разу, когда исходное значение состояние подле входе во цикл ложно

Цикл обязательно выполняется наравне минимальное значение безраздельно раз.

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

0

Если во теле цикла требуется паче одного оператора, то необходимо воспользоваться составной оператор.

Независимо от количества операторов во теле цикла использование составного оператора не требуется.

Если во теле цикла требуется больше одного оператора, то необходимо пускать в ход составной оператор.

Зачет сообразно операторам цикла.

Вложенные циклы

Для решения задачи достаточно сплошь и рядом надо использовать две да паче циклические конструкции, одна с которых расположена внутри другой (других). Такие конструкции называют вложенными циклами. Какие именно циклы рядом этом используются, роли невыгодный играет, они могут фигурировать организованы посредством любых рассмотренных ранее операторов (For, While, Repeat ... Until).

Задача : Сколько можно нарыть быков, коров да телят, если бык есть смысл 00 рублей, яловка - 0 рублей, теленок - полвека (0,5 рубля), присутствие условии, что возьми 000 рублей следует выкупить 000 голов скота.

Решение : Обозначим через b- количество быков, k - наличность коров, t - наличность телят. После сего можно записать неудовлетворительно уравнения:

10b+5k+0,5t=100 равно b+k+t=100

Преобразуем их :

20b+10k+t=200 равно b+k+t=100

На 000 рублей можно купить :

  1. невыгодный сильнее 00 быков, т.е. 0 <=b <=10;

  2. никак не больше 00 коров, т.е. 0 <=k <=20;

  3. безграмотный больше 000 телят, т.е. 0 <=t <=200;

Таким образом получаем :

Program skot;

Var b,k,t : integer;

Begin

For b:=0 to 00 do

For k:=0 to 00 do

For t:=0 to 000 do

if (20*b+10*k+t=200) and (b+k+t=100) then

writeln(‘быков ‘,b,‘ коров ’,k,’ телят ’,t);

end.

Условие будет проверятся 01*21*201=46431 раз. Но задачу можно отчислить для единовластно серия если количество телят подсчитывать согласно формуле:

t=100-(b+k)

Массивы.

Массив – сие причесанный набор однотипных элементов, имеющих общее имя.

Объявление массива .

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

имя: array [нижний_индекс..верхний_индекс] of тип;

идеже

прозвание – кличка переменной – массива.

array – ключевое слово, обозначающее, что переменная является массивом;

нижний_индекс равным образом верхний_индекс – целые числа, определяющие охват изменения индексов (номеров) элементов массива и, неявно, часть элементов (размер) массива;

разряд – субъект элементов массива.

Примеры объявления массивов:

t: array[1..31] of real;

k: array[0..2] of integer;

n: array[1..30] of longint;

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

Например: t[1]:=1.22;

d:=k[1]*k[1]-4*k[2]*k[1];

readln (n[i+1]);

writeln (t[m]);

  1. Оператор присваивания.

А[1]:=3;

А[2]:=4;

........

либо

B[1]:=’Иванов’;

B[2]:=’Петров’;

........

Такой приём задания значений используется, разве массив небольшой.

0) Оператором ввода с клавиатуры.

For i:=1 to 10 do

begin

Writeln(‘введите ’,i,’-ый элемент массива’);

Readln(a[i]);

{в качестве индекса используется параметр цикла }

end;

Этот способ задания значений в свою очередь используется для небольших массивов.

0) Заполнение массива вместе с использованием генератора случайных чисел.

.......

RANDOMIZE;

For i:=1 to 00 do

a[i]:=Random(x);

…....

{массив заполнится целыми числами на диапазоне через 0 поперед Х}

0) Заполнение по формуле.

Каждый элемент массива обязан оказываться рассчитан до формуле (например a i =sin i - cos i)

for i:=1 to 00 do

a[i]:=sin(i)-cos(i);

Вывод массива .

For i:=1 to 00 do writeln(a[i]);

Вывод пятого элемента массива записывается приблизительно : write(a[5]);

Алгоритмы работы из массивами

0) Сумма элементов массива.

Program symma;

var a: array [1..10] of integer;

i, s : integer;

begin

s:=0;

for i:=1 to 00 do

begin

readln(a[i]);

s:=s+a[i];

end;

writeln (‘Сумма= ’,s);

еnd.

0) Сумма положительных чисел.

Program symma2;

var a: array [1..10] of integer;

i, s : integer;

begin

s:=0;

for i:=1 to 00 do

begin

readln(a[i]);

if a[i]> 0 then s:=s+a[i];

end;

writeln (‘Сумма положительных чисел=’,s);

еnd.

0) Сумма да количество положительных чисел.

Program symma-kol;

var a: array [1..10] of integer;

i, s,k : integer;

begin

s:=0; k:=0;

for i:=1 to 00 do

if a[i]> 0 then begin k:=k+1; s:=s+a[i]; end;

writeln (‘Сумма ’,s, ‘ количество’, k);

еnd.

0) Поиск заданного элемента во массиве.

Найти элементы массива старшие числа 0.

Program elem;

var a: array [1..10] of integer;

i : integer;

begin

for i:=1 to 00 do

if a[i]> 0 then writeln(a[i]);

еnd.

0) Поиск наибольшего (наименьшего) элемента во массиве.

Program mm;

var a: array [1..10] of integer;

i, max, min : integer;

begin

for i:=1 to 00 do readln(a[i]);

max:=a[1]; min:=a[1];

for i:=1 to 00 do

begin

if a[i]> max Then max:=a[i];

if a[i]

end;

writeln (‘ max=’,max,’ min=’, min);

еnd.

0) Упорядочение массива

Упорядочение (сортировка) - это расположение значений элементов массива в порядке возрастания иначе убывания их значений.

Некоторые типичные поступки из массивами:

  • вывод массива;

  • ввод массива;

  • поиск в массиве заданного элемента;

  • поиск в массиве минимального alias максимального элемента;

  • сортировка массива.

Вывод массива.

Под выводом массива понимается вывод на диcплeй значений элементов массива. если на программе ничего не поделаешь вывести значения всех элементов массива, ведь для этого подходяще эксплуатировать оператор цикла for, аргумент – таксометр которой может состоять использована в духе индекс элемента массива.

var

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

i, n: integer;

begin

clrscr;

for i:=1 to n do

writeln (a[i]); {вывод на столбик}

либо write (a[i],’ ‘); {вывод во строчку}

либо writeln (‘a[‘,i,’]=’,a[i]); {вывод от пояснениями}

readln;

end

Задание:

  1. В массиве хранятся значения роста двадцати человек. С через датчика случайных чисел наложить доверху сосредоточение целыми значениями, лежащими на диапазоне ото 00 до 000 включительно.

  2. Заполнить скопление с двенадцати элементов следующим образом:

    1

    2

    12

  3. Заполнить конгломерат изо двадцати элементов следующим образом:

20

19

1

Ввод массива.

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

var

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

i, n: integer;

begin

clrscr;

writeln (’Введите число элементов массива’); readln (n);

for i:=1 to n do begin

write (‘a[‘,i,’]=’);

readln (a[i]);

end;

Пример: Найти сумму элементов массива.

var

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

i, n, s: integer;

begin

clrscr;

s:=0;

writeln (’Введите наличность элементов массива’); readln (n);

for i:=1 to n do begin

write (‘a[‘,i,’]=’);

readln (a[i]);

s:=s+a[i];

end;

writeln (‘Сумма элементов массива=’,s);

readln;

end.

Задание:

  1. Заполнить массив:

а) вдесятеро первыми членами арифметической прогрессии из известным первым членом прогрессии a да ее разностью p ;

б) двадцатью первыми членами геометрической прогрессии вместе с известным первым членом прогрессии a равно ее знаменателем z .

  1. Дан массив. Все его элементы:

а) повысить в 00;

б) повысить бери свежий элемент;

в) дополнить для состав b .

  1. Определить:

а) сумму всех элементов массива;

б) творение всех элементов массива;

в) сумму квадратов всех элементов массива;

г) сумму шести первых элементов массива;

д) сумму элементов массива от k 0 -го по k 0 -й (значения k 0 равно k 0 вводятся не без; клавиатуры; k 0 > k 0 );

е) среднее арифметическое всех элементов массива;

ж) среднее арифметическое элементов массива от s 0 -го в области s 0 -й (значения s 0 равным образом s 0 вводятся из клавиатуры; s 0 > s 0 ).

  1. Дан массив. Напечатать:

а) однако неотрицательные элементы;

б) постоянно элементы, неграмотный превышающие числа 100.

  1. Дан конгломерат аж чисел. Напечатать:

а) целое четные элементы;

б) по сию пору элементы, оканчивающиеся нулем.

  1. Дан конгломерат натуральных чисел. Напечатать:

а) постоянно первоначальные сведения массива, являющиеся двузначными числами;

б) совершенно основы массива, являющиеся трехзначными числами.

  1. Дан массив. Напечатать:

а) второй, четвертый равным образом т.д. элементы;

б) третий, шестой равно т.д. элементы.

Поиск во массиве.

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

Для организации поиска на массиве могут быть использованы непохожие алгоритмы. Наиболее азбучный – сие алгорифм простого перебора. Поиск осуществляется последовательным сравнением элементов массива из образцом.

Например:

  • Определить в какой мере однова во массиве встречается состав а.

var

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

i, n, k, a: integer;

begin

clrscr;

k:=0;

writeln (‘Введите искомое число’); readln (a);

writeln (’Введите численность элементов массива’); readln (n);

for i:=1 to n do begin

write (‘b[‘,i,’]=’);

readln (b[i]);

if b[i]=a then inc(k);

end;

writeln (‘Количество элементов равных ’,a,’ на массиве ’,k);

readln;

end.

Задачи:

  1. Выяснить, точно ли, который сложность элементов массива питаться неотрицательное число.

  2. Дан конгломерат аж чисел. Выяснить:

а) вы правы ли, аюшки? число элементов массива есть четное число;

б) по-видимому ли, что-нибудь количество квадратов элементов массива лакомиться пятизначное число.

  1. Определить наличность положительных и число отрицательных элементов массива.

  2. Дан массив. Найти:

а) сумму элементов массива, значение которых далеко не превышает 00;

б) сумму элементов массива, больших числа a .

  1. Дан конгломерат аж чисел. Найти:

а) сумму нечетных элементов;

б) сумму элементов, кратных заданному числу;

в) сумму элементов массива, кратных a не в таком случае — не то b .

  1. Определить сумму второго, четвертого, шестого да т.д. элементов массива.

  2. Определить частное с деления суммы положительных элементов массива на модуль деньги отрицательных элементов.

  3. Дан сосредоточение аж чисел. Определить количество четных элементов равно количество элементов, оканчивающихся получай цифру 0.

  4. Определить число элементов массива, принадлежащих промежутку ото a накануне b (значения a равно b вводятся со клавиатуры; b > a ).

  5. Найти цифра хмарь ""соседних"" элементов массива, являющихся четными числами.

  6. Найти цифра парок ""соседних"" элементов массива, оканчивающихся нулем.

  7. Найти цифра элементов массива, которые больше своих ""соседей"", т.е. предшествующего и последующего.

  8. Найти среднее арифметическое элементов массива, больших числа 00.

  9. Найти средние арифметические положительных и отрицательных элементов массива.

  10. Дан скопление вещественных чисел.

а) Каждый плохой звено заменить на его абсолютную величину.

б) Все слои от нечетными номерами заменить держи их квадратный корень.

в) Из всех положительных элементов вычесть штучка из номером k 0 , из остальных - штучка из номером k 0 .

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

д) Из всех положительных элементов вычесть штука из номером k 0 , из всех отрицательных - величина и круг n . Нулевые первоначальные сведения покончить сверх изменения.

е) Ко во всем нулевым элементам надбавить n , с всех положительных элементов удержать a , ко во всех отношениях отрицательным примолвить b .

  1. Дан массив вещественных чисел.

а) Каждый элемент, большой 00, заменить на его квадратный корень.

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

в) Ко во всех отношениях отрицательным элементам прибавить деталь не без; номером m 0 , к остальным - устройство не без; номером m 0 .

г) Все азы из четными номерами удвоить, не без; нечетными - повысить нате 0.

д) Ко во всех отношениях отрицательным элементам прибавить составляющая не без; номером a 0 , из всех нулевых высчитать сумма b . Положительные основы кончить без изменения.

е) Из всех положительных элементов вычесть a , с всех отрицательных высчитать b . Ко во всех отношениях нулевым элементам причислить c .

  1. Дан массив целых чисел.

а) Все элементы, оканчивающиеся цифрой 4, понизить вдвое.

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

в) Четные первоначальные сведения обогатить получи a , а изо элементов вместе с четными номерами удержать b .

  1. Дан конгломерат аж чисел.

а) Все элементы, кратные числу 00, заменить нулем.

б) Все нечетные азбука удвоить, а четные повысить вдвое.

в) Нечетные круги сократить получи и распишись m , а слои вместе с нечетными номерами увеличить на n .

Самостоятельная разработка получи инжекция равным образом вывод массива.

Поиск во массиве минимального или максимального элемента.

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

Найти меньший устройство массива и его индекс.

var

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

i, n, k, min, nmin: integer;

begin

clrscr;

writeln (’Введите доля элементов массива’); readln (n);

for i:=1 to n do begin

write (‘a[‘,i,’]=’);

readln (a[i]);

end;

min:=a[1]; nmin:=1;

for i:=2 to n do

if min> b[i] then begin

min:=b[i];

nmin:=i;

end;

writeln (‘Минимальный элемент массива ’, min, ‘ его индекс ’, nmin);

readln;

end.

Задачи:

  1. Дан массив. Определить:

а) пиковый элемент;

б) простейший элемент;

в) держи как наибольший элемент больше минимального;

г) список максимального элемента;

д) числовой показатель минимального равно индекс максимального элементов.

  1. Дан массив. Определить:

а) сумма максимальных элементов в массиве;

б) число минимальных элементов в массиве.

  1. Изменить знак у максимального соответственно модулю элемента массива. Минимальный штучка массива при этом невыгодный определять.

  2. Дан массив. Найти численность элементов, значение которых пуще среднего арифметического минимального и максимального элементов массива, и напечатать их номера.

  3. Найти элемент, особливо прилегающий для среднему значению всех элементов массива.

  4. Дан массив. Скопировать весь его элементы в видоизмененный скопление такого а размера:

а) во книжка а порядке расположения элементов;

б) во обратном порядке расположения элементов.

  1. Дан массив. Переписать его второй, четвертый равно т.д. элементы на иной конгломерат такого же размера:

а) расположив простейшие положения получи тех но местах, что да на исходном массиве;

б) расположив первоначальные сведения без остановки со начала массива.

  1. Из элементов массива A выковать сосредоточение B того а размера в соответствии с правилу: когда закидон i элемента массива A четный, в таком случае B i = A i 0 , в противном случае B i =2· A i .

  2. Из элементов массива A , заполненного целыми числами, создать скопление B того а размера сообразно правилу: четные элементы массива A удвоить, нечетные оставить помимо изменения.

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

а) сумме элементов из одинаковыми номерами в заданных массивах;

б) произведению элементов вместе с одинаковыми номерами во заданных массивах;

в) максимальному из элементов не без; одинаковыми номерами в заданных массивах.

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

  2. Дан конгломерат аж чисел.

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

б) Напечатать безвыездно элементы, следующие за последним элементом, оканчивающимся цифрой "7". Если элементов, оканчивающихся цифрой "7", во массиве нет, ведь ни сам схема никак не долженствует быть напечатан.

  1. Найти часть различных элементов в массиве.

  2. Дано натуральное контингент n . Определить количество различных цифр на нем. Например, во числе 0234 величина различных цифр так же 0, во числе 02424 - 0, во числе 033 - 1.

  3. Дан конгломерат аж чисел. Найти:

а) выпуск первого нечетного элемента. Если нечетных элементов на массиве нет, то необходимо существовать напечатано соответствующее сообщение;

б) пункт первого элемента, кратного числу 03. Если нечетных элементов в массиве нет, так должен бытийствовать напечатано соответствующее сообщение;

  1. Дан массив вещественных чисел. Определить, есть ли на нем отрицательные числа. В случае положительного ответа:

а) найти стриптиз первого изо них и напечатать совершенно следующие после ним элементы;

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

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

Обмены равным образом перестановки. Для перестановки элементов вводят вспомогательную переменную, которой присваивают значение первого элемента, задним числом в чем дело? первому элементу присваивают вес второго элемента, а второму – значение вспомогательной переменной.

Задачи:

  1. Дан массив. Поменять местами:

а) второстепенный равным образом пятый элементы;

б) m -й равным образом n -й элементы;

в) незаинтересованный да наименьший элементы. Если элементов из максимальным значением несколько, в таком случае на обмене повинен участвовать первый изо них;

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

  1. Дан массив из четного числа элементов. Поменять местами:

а) его половины;

б) основной звено со вторым, беспристрастный - с четвертым равно т.д.;

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

  1. Дан мономерный сосредоточение с 00 элементов. Переставить первые три да последние три элемента, не потерять строй их следования.

  2. Поменять кое-где основной отрицательный и финальный ветреный элементы массива. Учесть реальность того, что отрицательных не так — не то положительных элементов на массиве может далеко не быть.

В задачах почти удалением элемента массива нужно понимать:

0) устранение сего элемента с массива путем смещения всех следующих вслед ним элементов в левую сторону сверху 0 позицию;

0) зажуливание последнему элементу массива значения 0.

  1. Удалить с массива:

а) незаинтересованный элемент; б) k -й элемент.

  1. Удалить изо массива, на котором все элементы различны:

а) максимум элемент; б) минимальный элемент.

  1. Удалить изо массива:

а) начальный критический компонента (если отрицательные азы на массиве есть);

б) отослать концевой четный элемент (если четные первоначальные сведения на массиве есть).

  1. Удалить изо массива:

а) однако отрицательные элементы;

б) весь элементы, взрослые данного числа n ;

в) постоянно элементы, начиная вместе с n 0 -го по n 0 -й ( n 0 n 0 ).

  1. Дан конгломерат аж чисел. Удалить изо него:

а) до сей времени четные элементы, стоящие на нечетных местах;

б) весь элементы, кратные 0 да 0.

  1. Удалить изо массива однако повторяющиеся элементы, оставив их первые вхождения, то питаться на массиве должны остаться только различные элементы.

В задачах подина вставкой числа n на массив после k-го элемента нелишне понимать:

0) подъём размера массива сверху 0 ;

0) сдвиг всех элементов, начиная с (k+ 0 )-го, о десную нате 0 позицию;

0) захват (k+ 0 )-му элементу массива значения n.

  1. Вставить во массив:

а) контингент 00 по прошествии второго элемента; б) число 000 потом m -го элемента.

  1. Вставить заданное цифра на конгломерат целых чисел:

а) потом первого отрицательного элемента;

б) до последним четным элементом.

  1. Вставить заданное день во скопление аж чисел:

а) под всеми элементами, кратными числу a ;

б) позже всех отрицательных элементов.

Контрольная усилие получи и распишись массивы.

0 класс.

Сортировка массива.

Под сортировкой массива подразумевается процесс перестановки элементов от целью упорядочивания их на соответствии с каким-либо критерием. Например, если имеется скопление а - аж чисел, в таком случае после сортировки по мнению возрастанию должно выполняться условие: a[1]a[2] …a[n], где n – верхняя кордон индекса массива.

Существует числа методов сортировки массивов. Но больше всего зачастую используемые это:

  • средство прямого выбора (метод главного элемента);

  • схема прямого обмена(метод пузырька).

Метод главного элемента.

Алгоритм сортировки массива до возрастанию методом прямого выбора не так — не то методом главного элемента может присутствовать представлен так:

  1. Просматривая конгломерат с первого элемента, найти простейший равно вместить получи и распишись место первого элемента, а основной держи место минимального.

  2. просматривая скопление через второго элемента, найти элементарный равно уместить его на место второго элемента, а другой на место минимального.

  3. И этак дале накануне предпоследнего элемента.

Ниже представлена план сортировки массива аж чисел до возрастанию.

program vosr;

uses crt;

var a: array [1..15] of integer;

i, j, k, n, m, c: integer;

begin

clrscr;

writeln (‘’); readln (n);

for i:=1 to n do begin

write (i,’:’); readln (a[i]);

end;

for i:=1 to n-1 do begin

k:=i;

for j:=i+1 to n do

if a[j]

c:=a[i];

a[i]:=a[k];

a[k]:=c;

end;

for i:=1 to n do

writeln (a[i]);

readln;

end.

Метод прямого обмена (метод пузырька).

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

program vosr;

uses crt;

var a: array [1..15] of integer;

i, j, k, n, m, c, f: integer;

begin

clrscr;

writeln (‘’); readln (n);

for i:=1 to n do begin

write (i,’:’); readln (a[i]);

end;

for i:=1 to n-1 do begin

for j:=1 to n-1 do

if a[j]> a[j+1] then begin

c:=a[j];

a[j]:=a[j+1];

a[j+1]:=c;

end;

end;

for i:=1 to n do

writeln (a[i]);

readln;

end.

program vosr;

uses crt;

var a: array [1..15] of integer;

i, j, k, n, m, c, f: integer;

begin

clrscr;

writeln (‘’); readln (n);

for i:=1 to n do begin

write (i,’:’); readln (a[i]);

end;

k:=n-1;

repeat

f:=0;

for i:=1 to k do

if a[i]> a[i+1] then begin

f:=1;

c:=a[i];

a[i]:=a[i+1];

a[i+1]:=c;

end;

dec(k);

until f=0;

for i:=1 to n do

writeln (a[i]);

readln;

end.

0) Упорядочение массива

Упорядочение (сортировка) - это расположение значений элементов массива в порядке возрастания либо — либо убывания их значений.

Сортировка простым выбором.

Рассмотрим идею сего метода в примере. Пусть исходный сосредоточение А состоит изо 00 элементов : 0 03 0 0 0 0 06 0 00 0.

После сортировки массив : 0 0 0 0 0 0 0 00 03 06

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

0 03 0 0 0 0 06 0 00 0

0 03 0 0 0 0 0 0 00 06

0 ход Рассмотрим весь скопление равно найдем на нем максимальный элемент - 06. Поменяем его в некоторых местах с последним элементом - из счетом 0.

0 нарезка . Рассмотрим дробь массива, исключая последний элемент. Максимальный элемент этой части - 03, спирт игра стоит свеч сверху втором месте. Поменяем его где-где вместе с последним элементом этой части - из точно по 00.

И т.д.

Фрагмент программы :

for i:=n downto 2 do

begin {цикл соответственно длине рассматриваемой части массива}

maxi:=i;

for j:=1 to i-1 do if a[j]> a[maxi] then maxi:=j;

if maxi <> i then begin {перестановка элементов}

k:=a[i]; a[i]:=a[maxi]; a[maxi]:=k

end;

end;

«Пузырьковый метод»

Массив просматривают по левую сторону направо. Каждый предыдущий ингредиент сравнивается с последующим. Если предшествующий элемент больше последующего, ведь следующий и последующий круги меняются местами.

Program sort1;

const n=10;

label metka;

var a: array [1..n] of integer;

i, c, k : integer;

begin

for i:=1 to n do readln(a[i]);

metka: k=0; {счетчик перестанокок}

for i:=1 to n-1 do

if a[i]> a[i+1] then begin c:=a[i];

a[i]:=a[i+1];

a[i+1]:=c;

k:=1;

end;

if k=1 then goto metka

else writeln(‘упорядочен‘);

for i:=1 to n do writeln(a[i]);

еnd.

Тоже самое, да с использованием вложенных циклов

Program sort2;

const n=10;

var a: array [1..n] of integer;

i, k, c : integer;

begin

for i:=1 to n do readln(a[i]);

for i:=1 to n-1 do

for k:=1 to n-i do

if a[k]> a[k+1] then begin c:=a[k];

a[k]:=a[k+1];

a[k+1]:=c;

end;

for i:=1 to n do writeln(a[i]);

еnd.

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

Описание двумерного массива определяет имя, размер массива (количество строк и столбцов) равно базо­вый тип. Формат описания на разделе переменных:

Var <имя маcсива > : array [ <тип индекса1> , <тип индекса2> ] of <базовый тип> ;

Двумерный сосредоточение — массив, у которого положение каждого элемента характеризуется двумя числами, бульон изо них определяет номер строки, во-вторых – выпуск столбца, на пересечении которых находится элемент. Он где-то же, равно как равным образом одномерный массив, состоит с значений одного типа. В двумерных массивах хра­нятся значения прямоугольных таблиц. Примеры описания двумерных массивов:

Var С : array [1. .5, 1. .10] of real;

R1, R2: array [0. .10, 0. .365] of char;

Sim : array [1. .20, 0. .10] of string[20];

Const M=10; N=20;

Var X, S : array [1. .M, 0. .N] of byte;

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

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

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

0. Описание двумерного массива на языке паскаль записывается так:

<Имя_массива> : array[ .. , .. ] of [ <тип> ]

идеже строки таблицы имеют заезжий дом вместе с n1 по n2, а столбцы - не без; k1 по k2. Запись <Имя_массива> [n,k] указывает получи и распишись элемент, ядреный возьми пересечении n-й строки и k-го столбца. Например, описание

Tab : array[1..10,1..15] of Integer

задает таблицу изо 00 строк равно 05 столбцов (всего 00 х 05=150 элементов), состоящую изо аж чисел. Tab[3,5] указывает бери 0-й деталь во 0-й строке.

Турнирную таблицу пользу кого N участников выигрышно экономить во двумерном массиве N x N в виде Real, т.к. результатом шахматной партии чтобы каждого участника может существовать победа (1 очко),

разрушение (0 очков) или — или ничейка (0.5 очка). Вот воссоздание таблицы:

Tab : array[1..N,1..N] of Real .

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

writeln("Введите номера участников встречи");

readln(n1,n2);

writeln("Сколько очков у участника ",n1," ?");

readln(Tab[n1,n2]);

Tab[n2,n1] :=1-Tab[n1,n2];

0. Эти поведение нужно повторять столько раз, как долго встреч состоится в турнире. Если однако запланированные встречи состоятся, так их состав дозволено счетший в соответствии с формуле n(n-1) - подумайте, почему. Однако, может случиться, который до каким-то причинам часть встреч невыгодный состоится, а какие-то будут сыграны дважды. Поэтому удобнее как-то означить клаузула ввода данных на программе, например, после каждой встречи выяснять, будут ли вновь вливаться данные. Вот фрагмент программы, назначенный для того ввода результатов всех встреч турнира:

kon :="Д";

while kon <> "Н" do

begin

writeln("Введите номера участников встречи");

readln(n1,n2);

writeln("Сколько очков у участника ",n1," ?");

readln(Tab[n1,n2]);

Tab[n2,n1] :=1-Tab[n1,n2];

writeln("Будут ли еще встречи ? (Д/Н)");

readln(kon);

end;

0. По окончании турнира нужно вывести турнирную таблицу держи экран:

for i :=1 to N do

begin

for k :=1 to N do

write(Tab[i,k]:3:1);

writeln;

end;

  1. Бывают задачи, во которых показатели удобно хранить во виде трехмерного (и даже если четырех- равно больше -мерного) массива. Например, окончание встречи во футбольном турнире представляет с лица неграмотный одно, а три числа - состав забитых и пропущенных мячей равно число очков (2 - победа, 0 - поражение, 0 - ничья). Такую таблицу пригодно вписывать во конгломерат

Football : array[1..N,1..N,1..3] of Integer;

Элемент Football[3,5,2] содержит информацию в отношении количестве мячей, пропущенных 0-й командой во матче не без; 0-й командой.

Поразмышляйте лично по-над процедурой ввода результатов футбольного турнира.

Работа со элементами

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

Например : 0 0 0 0

0 0 0 0

0 0 0 0

Данная матрица имеет размер 0 сверху 0, т.е. возлюбленная состоит из трех строк да четырех столбцов. Если всю матрицу означить одним именем, например А, в таком случае и оный и другой устройство матрицы будет располагать двушник индекса - А[i,j]

Здесь стержневой индекс i обозначает часть строки (i=1,2,3), второй дефлятор j - часть столбца (j=1,2,3,4).

Такую матрицу можно описать следующим образом :

1 манера :С использованием в виде

Type T=array [1..3,1..4] of integer;

Var A: T;

2 способ :

Var A: array [1..3,1..4] of integer;

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

Перемещение по строке :

for i:=1 to m do {внешний цикл, изменяется штучка строки}

.......

for j:=1 to n do {внутренний цикл, изменяется номер столбца}

..........

Перемещение по столбцу :

for j:=1 to n do {внешний цикл, изменяется часть столбца}

.......

for i:=1 to m do {внутренний цикл, изменяется номер строки}

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

1. Заполнение двумерного массива :

а) по мнению строке; б) объединение столбцу

0. Печать в виде таблицы.

0. Вычисление средства элементов каждой строки равно каждого столбца.

4. Поиск максимального (минимального) элементов каждой строки (столбца) да их индексов.

0. Сумма элементов массива.

0. Максимальный (минимальный) элемент массива.

Ввод (заполнение) элементов двумерного массива (матрицы)

For i:=1 to n do

For j:=1 to m do

Readln(A[i,j]);

0. Заполнение двумерного массива в соответствии с строке.

Массив заключает 0 строки да 0 столбца, т.е. 0х4=12 элементов

а 01

а 02

а 03

а 04

а 01

.

.

.

.

.

.

.

F or i:=1 to 0 do

For j:=1 to 0 do

a[i,j]:=random(100);

0. Заполнение двумерного массива объединение столбцу :

а 01

а 02

.

.

а 01

.

.

.

а 01

.

.

.

F or j:=1 to 0 do

For i:=1 to 0 do

a[i,j]:=random(100);

0. Печать содержимого на искусство кино :

For i:=1 to n do

begin

For j:=1 to m do

Write (A[i,j]); {Вывод элементов одной

строки матрицы}

Writeln; { форсирование получи следующую строку экрана}

end;

идеже

А - титул массива;

i - дефлятор строки;

j - коэффициент столбца;

n - контингент элементов во строке;

m - наличность элементов на столбце.

0. Вычисление суммы элементов каждой строки, столбца.

дарованная квадратная матрица NxN, содержащая вещественные числа. Найти сумму элементов первого столбца.

Program pr2;

CONST N=3;

TYPE MAS=array [1..N,1..N] of real;

Var a: MAS;

i: 0..3;

j : 0..3;

s:real;

BEGIN

Writeln(‘Введите элементы массива’);

For i:=1 to n do

For j:=1 to n do

Readln(a[i,j]);

{Вывод значений массива}

For i:=1 to n do

begin

For j:=1 to n do

Write (a[i,j]:5:1);

Writeln;

end;

s:=0; j=1;

For i:=1 to n do

s:=s+a[i,j];

Writeln(‘ Сумма элементов первого столбца =’,s:5:2);

end.

0.Вычисление суммы элементов лишь двумерного массива.

......

S:=0;

for i:=1 to m do

for j:=0 to n do

S:=S+a[i,j];

.............

0. Задача поиска максимального (минимального) элемента и его индексов.

Ищем максимальный элемент каждой строки :

For i:=0 to m do

begin

max:=a[i,1];

ind_L:=i; {сохраняем закидон строки}

ind_C:=1; {заносим боец 0 - узловой столбец}

for j:=1 to n do

if a[i,j]> max then begin

max:=a[i,j];

ind_C:=j {сохраняем номер j-ого столбца}

end;

writeln(‘max строки ’,i,’=’,max)

end;

Ищем минимальный элемент каждого столбца :

For j:=0 to n do { перемещаемся до столбцу}

begin

min:=a[1,j];

ind_L:=1; {сохраняем штукенция строки}

ind_C:=j; {сохраняем часть столбца}

for i:=1 to m do

if a[i,j]

min:=a[i,j];

ind_L:=i {сохраняем номер j-ой строки}

end;

writeln(‘min ‘,j,’ столбца’,min)

end;

0. Алгоритм поиска минимального элемента да его индексов для общем массива.

Min:=a[1,1];

ind_L:=1;

ind_C:=1;

for i:=1 to m do

for j:=1 to n do

if a[i,j]

min:=a[i,j]; ind_L:=i; ind_C:=j;

end;

0. Квадратные матрицы .

Type mas4x4=array[1..4,1..4] of integer;

var a: mas4x4;

a 01

a 02

a 03

a 04

a 01

a 02

a 03

a 04

a 01

a 02

a 03

a 04

a 01

a 02

a 03

a 04

Главная диагональ - слои a 01 , a 02 , a 03 , a 04 (индексы элементов, расположенных на главной диагонали ( i = j )

Побочная диагональ - элементы a 01 , a 02 , a 03 , a 04 (сумма индексов элементов держи 0 больше размерности строки (или столбца), т.е. i+j=4=1 или i+j=n+1. На рисунке главная диагональ закрашена сплошным серым цветом, побочная - черным.

a 02

a 03

a 04

a 03

a 04

a 04


Элементы, расположенные над главной диагональю, Для индексов элементов, расположенных по-над главной диагональю выполняется пропорция i < j ;

a 01

a 01

a 02

a 01

a 02

a 03


Элементы, расположенные под главной диагональю, Для индексов элементов, расположенных по-под главной диагональю выполняется касательство i > j ;

Примеры :

0) Найти сумму элементов главной диагонали:

S:=0;

for i:=1 to n do

S:=S+a[i,i];

0) Найти минимальный штука побочной диагонали:

min:=a[1,n];

for i:=1 to n do

if a[i,n+1-i]

Примеры решения задач

Задача 0. Дан массив действительных чисел, состоящий из 0 строк да 0 столбцов. Вычислить произведение всех элементов массива.

Program pr1;

CONST N=3; M=5;

TYPE MAS=array [1..N,1..M] of real;

Var b: MAS;

i: 0..N;

j : 0..M;

p:real;

BEGIN

Writeln(‘Введите элементы массива’);

For i:=1 to n do

For j:=1 to m do

Readln(b[i,j]);

{Вывод значений массива}

For i:=1 to n do

begin

For j:=1 to m do

Write (b[i,j]); {Вывод элементов одной строки матрицы}

Writeln; { трансформация сверху следующую строку экрана}

end;

p:=1;

For i:=1 to n do

For j:=1 to m do

p:=p*b[i,j];

Writeln(‘Произведение =’,p:7:2);

end.

Задача 0. Дан двумерный сосредоточение A[N,M]

Сформировать массив B[N,M], где

SQR(A[I.J]), если I- НЕЧЕТНОЕ;

B[I,J]=

SQRТ(A[I.J]), если I- ЧЕТНОЕ;

Program pr3;

CONST N=3; M=5;

TYPE MAS=array [1..N,1..M] of real;

Var a,b : MAS;

i: 0..N;

j : 0..M;

BEGIN

Writeln(‘Введите элементы массива’);

For i:=1 to N do

For j:=1 to M do

Readln(a[i,j]);

{Вывод значений массива}

For i:=1 to N do

begin

For j:=1 to M do

Write (a[i,j]:5:1);

Writeln;

end;

For i:=1 to N do

if i/2=int(i/2) Then For j:=1 to M do

b[i,j]:=sqrt (a[i,j])

Else For j:=1 to M do

b[i,j]:=sqr (a[i,j])

For i:=1 to N do

begin

For j:=1 to M do

Write (b[i,j]:7:2);

Writeln;

end;

end.

  1. Дан двухмерный конгломерат аж чисел. Составить программу :

а) вывода в морда элемента, расположенного в правом верхнем углу массива;

б) вывода сверху кино элемента, расположенного в левом нижнем углу массива;

в) вывода сверху кино любого элемента второй строки массива;

г) вывода для щит любого элемента третьего столбца массива;

д) вывода в искусство кино любого элемента массива.

  1. Дан двухмерный предметный массив. Поменять кое-где :

а) элементы, расположенные на верхнем правом да нижнем левом углах;

б) элементы, расположенные на нижнем правом да верхнем левом углах;

  1. Известен выпуск строки, получай которой расположен штучка главной диагонали двумерного массива аж чисел. Вывести на кино сила сего элемента.

  2. Вывести получай диcплeй (в одну строку) :

а) постоянно простейшие положения главной диагонали целочисленного массива, начиная с элемента, расположенного на левом верхнем углу;

б) всегда начатки главной диагонали вещественного массива, начиная с элемента, расположенного на правом нижнем углу.

  1. Заменить значения всех элементов главной диагонали целочисленного массива держи нулевые.

  2. Заменить значения всех элементов побочной диагонали целочисленного массива получи и распишись значения, равные 000.

  3. Определить :

а) сумму элементов главной диагонали вещественного массива;

б) сумму элементов побочной диагонали целочисленного массива;

в) среднее арифметическое элементов главной диагонали массива аж чисел;

г) среднее арифметическое элементов побочной диагонали вещественного массива;

д) меньший (максимальный) элемент главной диагонали целого массива;

е) пиковый (минимальный) элемент побочной диагонали вещественного массива;

ж) местоположение первого максимального элемента главной диагонали вещественного массива;

з) местоположение первого минимального элемента главной диагонали целочисленного массива.

  1. Верно ли, что-нибудь общее число элементов главной диагонали целочисленного массива не превышает 000?

  2. Дан двухмерный сосредоточение вещественных чисел .

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

б) отстранить получи и распишись защита всё-таки элементы третьей строки массива, начиная вместе с по следнего элемента этой строки;

в) освободить бери кино весь элементы s-го столбца массива;

г) заслонить значения всех элементов второй строки массива получи величина и круг 0;

д) променять значения всех элементов пятого столбца получай количество 00.

е) назначить максимальный (минимальный) компонента третьего столбца;

  1. Дан двухмерный аж чисел массив. Составить программу :

а) расчета произведения двух любых элементов первый встречный строки массива

б) сумму всех элементов любой строки массива;

  1. Дан двумерный конгломерат аж чисел. Определить :

а) на каком столбце массива сумма элементов меньше, на первом тож в последнем;

б) на что за строке произведение элементов больше, нет слов второстепенный иначе в третьей.

  1. Заполнить двумерный скопление размером 7х7 следующим образом :

а)

1

0

0

0

0

0

1

б)

1

0

0

1

0

0

1

0

1

0

0

0

1

0

0

1

0

1

0

1

0

0

0

1

0

1

0

0

0

0

1

1

1

0

0

0

0

0

1

0

0

0

1

1

1

1

1

1

1

0

0

1

0

1

0

0

0

0

1

1

1

0

0

0

1

0

0

0

1

0

0

1

0

1

0

1

0

1

0

0

0

0

0

1

1

0

0

1

0

0

1

  1. * Заполнить сосредоточение 0х5 следующим образом :

а)

1

1

1

1

1

б)

1

2

3

4

5

1

2

3

4

5

16

17

18

19

6

1

3

6

10

15

15

24

25

20

7

1

4

10

20

35

14

23

22

21

8

1

5

15

35

70

13

12

11

10

9

  1. * Заполнить двумерный массив размером nxn числами 0, 0, ... n 0 , расположенным в нем за спирали : (см 0.13б)

  2. Дан двухмерный дискретный массив размером 00 х 00. Вывести бери киноискусство часть массива :

а) расположенную раньше главной диагонали;

б) расположенную вверху главной диагонали;

в) расположенную меньше побочной диагонали;

г) расположенную вниз побочной диагонали;

  1. Дан двумерный конгломерат аж чисел :

а) на каждом его столбце найти максимальный (минимальный) элемент;

б) расположение максимального (минимального) элемента;

в) сумму нечетных элементов в каждом столбце (строке);

г) состав элементов кратных А либо В.

д) * разыскать строку от максимальной суммой элементов;

е) * выкопать графа не без; минимальной суммой элементов.

  1. Даны неудовлетворительно двумерных вещественных массива одинаковых размеров.

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

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

  1. * Дан двухмерный сосредоточение размером nxn , фаршированный целыми числами.

а) однако его элементы, кратные трем, записать на мономерный массив.

б) весь его положительные элементы записать на одинокий мономерный массив, а остальные - на другой.

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

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

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

в) выработать мономерный массив, каждый штука которого равен количеству отрицательных элементов соответствующей строке двухмерного массива, кратных 0 или 0.

г) выковать мономерный массив, каждый штучка которого равен количеству положительных элементов соответствующего столбца двухмерного массива, кратных 4 либо — либо 0.

  1. * Дан двумерный конгломерат изо четного числа столбцов. Поменять где-где первый со вторым, беспристрастный - из четвертым равным образом т.д.

  2. Дан двухмерный массив. а) снести из него k-ую строку, s-ый столбец.

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

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

  2. Составить программу, которая печатает слово, образованное несколькими идущими подряд символами из заданными номерами, расположенными на некоторой строке символьного массива.

  3. Д

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *


    ин двумерный конгломерат размером 5х5, заселенный буквами. Напечатать слово, образованное элементами массива, отмеченными звездочкой (*), подле прочтении их:

а) по левую сторону в правую сторону на каждой строке, начиная из первой;

б) на ниже во каждом столбце, начиная вместе с первого.

  1. Напечатать слова, образованные четными элементами каждой строки массива.

  2. В каждой строке двумерного символьного массива выискать сумма букв «Е», расположенных дело с буквы «Н»

  3. Проверить, один к одному ли строки целочисленного массива не без; номерами N да М.

  4. Найти :

а) штучка первой в области порядку строки целочисленного массива, содержащей наибольшее количество цифр;

б) факс первого соответственно порядку столбца символьного массива, содержащего наибольшее величина и круг пробелов;

в) пункт последней соответственно порядку строки символьного массива, содержащей наибольшее контингент букв «Ш» равным образом «Щ».

  1. Шахматную доску вообразить во виде квадратного символьного массива размером 0 х 0. Заполнить сосредоточение таким образом, с целью начатки массива, соответствующие черным полям, имели значение Х. Левое нижнее пашня на шахматной доске издревле черное.

Символы да строки.

Помимо числовой информации компьютер может приготовлять символьную информацию. Turbo Pascal оперирует информацией, которая может быть представлена отдельными символами или строками символов.

Символы.

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

Имя:;

идеже кличка – отчество переменной символьного типа, char – ключевое термин обозначения символьного типа.

Примеры: otv: char;

ch: char;

Как равно любая аргумент программы, переменная будто char может выудить свое значение на результате выполнения команды присвоения или — или ввода (read, readln). Если аргумент вроде char получает значение во результате выполнения операции присвоения, ведь дело с знака :=должно торчать отображение подобно char или символьная – символ, заключенный на двойные кавычки.

В результате выполнения программы:

var

c1, c2, otvet: char;

begin

c1:=’*‘;

c2:=c1;

write (‘Вы хотите научиться программировать?’);

readln (otvet);

writeln (c1, ‘Ваш ответ: ’, otvet, c2);

readln;

end.

аргумент с1 получает значение присваиванием значения константы, с2 – присваиванием значения переменной с1, а значительность переменной otvet вводится из клавиатуры.

Обратите внимание: аргумент otvet объявлена во вкусе char, т.е. единовластно символ. Поэтому если бы на опровержение для дилемма программы будет введено, как например изречение «Да», то переменная otvet получит значение «Д».

Переменную в виде char не возбраняется сличать с другой переменной как char иначе с символьной константой. Сравнение основано возьми том, что такое? в одни руки символу поставлено на соответствии число, причем символу ‘0’ соответствует состав меньшее чем символу ‘9’, а символу ‘A’ – меньшее, нежели ‘B’, символу ‘Z’ – меньшее нежели ‘a’. Таким образом дозволительно записать: ‘0’ <’1’ <… <’9’ <… <’A’ <’B’ <… <’Z’ <’a’ <’b’ <… <’z’.

Символам русского алфавита соответствуют числа большие, нежели символы латинского алфавита.

Задание : С клавиатуры вводится символ, установить нежели возлюбленный является буквой гласной сиречь согласной, цифрой, знаком препинания или — или каким другим символом.

Строки.

Последовательность символов называют строкой. Для хранения равным образом обработки последовательностей символов (строк) можно пустить в дело скопление символов. Например, буде содержание должна вводить с клавиатуры фамилии людей. Эту задачу можно сделать выбор вводя строки во символьный массив, долгота которого выбирается равной количеству букв самой длиной фамилии. Однако на этом случае на клавиатуре любой разок приходится набирать строку длиной равной ровно столько символов почем во самой длиной фамилии (дополняя короткие фамилии пробелами), что-то отнюдь не жуть удобно. Поэтому помимо массивов изо символов принимать такое понятие вроде строки, сие переменные типа string, Значением переменной как string может оказываться любая последовательность символов длиной безвыгодный паче 055.

Переменная в виде string должна состоять объявлена в разделе описания переменных так:

Имя: string;

не ведь — не то

Имя: string[длина];

идеже Имя – название переменной; string – ключевое слово обозначения строкового типа; длина – в виде integer, определяющая максимальную длину последовательности символов, которая может составлять присвоена переменной.

Примеры: name: string [30]:

s: string;

Если быть объявлении переменной длина не указывается, ведь предполагается что длина строки равно 055 символам, т.е. объявления s: string; равным образом s:string[255]; эквивалентны.

В тексте программы последовательность символов, являющаяся строкой, заключается в одинартные кавычки. Например, чтобы присвоить строковой переменной parol значение, нужно записать:

parol:=’большой секрет’;

не в таком случае — не то parol:=’2004’;

Утверждение parol:=2004; приведет для ошибке при компиляции, таково в духе фрукт переменной не соответствует типу константы.

Переменную как string позволительно сравнивать с разный переменной alias константой типа string, используя операторы=, <, > , <=, > =, <> . Строки сравниваются посимвольно ото первого символа. Если все символы сравниваемых строк одинаковые, в таком случае такие строки считаются равными. Если во одинаковых позициях строк находятся небо и земля символы, большей считается та строка, у которой во этой позиции находится мандорла со большим кодом. Например: Иванов – 0 строка, Иванов – 0 строка, тут они равны; васильев – 0 строка, Васильев – 0 строка, тогда 0 черта чище 0; Алексеев – 0 строка, петров – 0 строка, тут 0 строка меньше 0; Иванова – 0 строка, Иванов – 2 абзац , тут-то 0 ряд сильнее 0.

Кроме операций сравнения ко строковым переменным равно константам дозволительно применить оператор сложения, во результате выполнения которого стало быть новая строка, полученная склеиванием двух или сильнее строк. Например: name:=’Иван’;

fam:=’Иванов’;

fn:=fam +’ ‘+name;

аргумент fn получит значение ’Иванов Иван’.

Задачи:

  1. Составить программу:

а) которая запрашивает кличка человека и повторяет его получи и распишись экране;

б) которая запрашивает термин человека и повторяет его получи экране не без; приветствием;

в) которая запрашивает название футбольной команды равно повторяет его на экране со словами: "Это чемпион!".

  1. Дано слово. Получить да изобразить для экран буквосочетание, состоящее с его второго равно четвертого символов.

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

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

  4. Дано слово. Вывести бери кино его третий символ.

  5. Дано слово. Вывести в планзифтер его последний символ.

  6. Дано слово. Вывести в защита его k -й символ.

  7. Дано слово. Определить, одинаковы ли второй равно четвертый символы во нем.

  8. Дано слово. Верно ли, что-нибудь оно начинается и оканчивается бери одну равным образом ту но букву?

  9. Даны пара слова. Верно ли, зачем первое слово начинается для ту а букву, которой оканчивается на втором месте слово?

Turbo Pascal предоставляет мало-мальски полезных при работе со строками функций да процедур.

Функция length .

Функция length возвращает длину строки. У функции сам параметр – переменная строкового типа. Возвращаемое значение функции (целое число) – количество символов, изо которых состоит строка, без учета начальных да завершающих пробелов. Например length(’Иванов’) равно 6, а роль length(’ Невский программа ’) в одинаковой степени 06, беспричинно в качестве кого близ вычислении длины строки круг обязанностей невыгодный учитывает начальные равным образом завершающие пробелы.

Примеры определения длины строки

  • k:=length(‘мир’); k=3

  • s:=‘Кот да пес’;

n:=length(s); n=9

  • s1=‘’;

i:=length(s1); i=0

‘’ - пустая строка!

Задачи:

  1. Дано названьице футбольного клуба. Определить величина символов на нем.

  2. Дано имя города. Определить четно или перевелся число символов на нем.

  3. Даны двум фамилии. Определить какая из них длиннее.

Функция c opy .

Функция copy позволяет выделить фрагмент строки. В общем виде обращение к функции copy  выглядит так: (строка, p, n);

идеже черта – аргумент строкового типа, содержащая строку, фрагмент которой приходится получить; p – боец первого символа во строке строка, вместе с которого начинается выделяемая подстрока; n – длина выделяемой подстроки. Например, в результате выполнения команд:

s:=‘Инженер Иванов’;

fam:=copy (s, 9, 0);

значением переменной fam будет строчечка ‘Иванов’.

Примеры отделения символов

  • s:=‘информатика’;

s1:=copy (s, 0, 0); s1=‘форма’

s2:=copy (s, 0, 0)+ copy (s, 0, 0); s2=‘тиф’

Задачи:

  1. Дано слово. Получить его часть, образованную второй, третьей равным образом четвертыми буквами.

  2. Дано слово, состоящее изо четного числа букв. Вывести сверху кинематография его первую половину, никак не используя хирург цикла.

  3. Дано слово. Получить его часть, образованную идущими сплош буквами, начиная от m -й равно кончая n -й.

  4. Из плетение словес "яблоко" хорошенько вырезок его букв заразиться стихи "блок" и "око".

  5. Из болтология "информатика" путем вырезок его букв почерпнуть сотрясение воздуха "форма" и "тик".

Процедура insert.

Процедура insert позволяет наболтать часть строки на исходную строку. В общем виде обращение для процедуре выглядит так: Insert ( подстрока, строка, p);

идеже подстрока – строковая константа или переменная, которую необходимо добавить во строковую переменную строка; p – комната первого символа во строке строка, вместе с которого начинается добавление подстроки.

Примеры вставки символов

  • s:=‘мама’;

insert (‘очк’, s, 0); s=‘мамочка’

  • s1:=‘рог’;

s2:=‘по’;

insert (s1, s2, 0); s2=‘порог’

Задачи:

  1. Дано слово. Вставить букву "т" после k -й буквы.

  2. Дано слово. Вставить заданную букву после первой буквы "и".

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

Процедура delete.

Процедура delete позволяет отвести часть строки. В общем виде послание для процедуре выглядит так: delete (Строка, p, n);

идеже строчка – аргумент строкового типа; p – часть символа, от которого начинается удаляемая подстрока; n – длина удаляемой подстроки.

Например, на результате выполнения команд:

s:=‘Город Санкт-Петербург’;

delete (s, 0, 6);

роль переменной s будет стих ‘Город Петербург’.

Примеры удаления символов

  • s:=‘котик’;

delete (s, 0, 0); s=‘кот’

  • s:=‘информатика’;

delete (s, 0, 0);

delete (s, 0, 0); s=‘форма’

Задачи:

  1. Дано слово:

а) спровадить с него третью букву; б) удалить с него k -ю букву.

  1. Дано слово:

а) Удалить с него первую с букв "о", если такая ш есть.

б) Удалить с него последнюю изо букв "т", кабы такая ижица есть.

  1. Дано слово. Если его протяжение нечетная, так удалить среднюю букву, на противном случае - две средних буквы.

  2. Дано предложение. Удалить изо него все символы из n 0 -го в области n 0 -й ( n 0 n 0 ).

  3. Дано предложение. Удалить с него все буквы "с".

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

  5. Дано предложение. Удалить с него все буквы "о", стоящие для нечетных местах.

Функция pos.

Функция pos позволяет предначертать положение подстроки на строке. В общем виде обращение к функции выглядит так: pos (Подстрока, строка);

идеже Подстрока – строковая константа или переменная, которую должно встретить в строковой константе или — или переменной строка.

Например, во результате выполнения команды: p:=pos (‘Пе’, ‘Санкт-Петербург’); значение переменной p короче непропорционально 0. Если на строке кто в отсутствии искомой подстроки, то связка возвращает ноль.

Примеры определения позиции

  • k:=pos(‘р’, ’мир’); k=3

  • s:=‘колокол’;

n:=pos(‘кол’, s); n=1

  • s1:=‘ок’; s2:=‘кок’;

i:=pos(s1, s2); i=2

  • k:=pos(‘п’, ’мама’); k=0

Например

var

st: string;

begin

write (‘Введите строку: ’);

readln (st);

while (pos (‘ ‘, st)=1) and (length (st)> 0) do

delete (st, 0, 0);

write (‘Строка без начальных пробелов: ’, st);

end.

Данная конспект использует функцию pos да процедуру delete про удаления пробелов в начале введенной не без; клавиатуры строки. пробелы удаляются во цикле while вплоть до тех пор, на срок круг обязанностей pos обнаруживает пробел в начале строки (значение pos быть этом равно единице). Проверка контракт length (st)> 0 нужна, приблизительно как возможно, что-то введенная от клавиатуры строка состоит все изо пробелов.

Задачи:

  1. Дано предложение, на котором не без этого несколько букв "е". Найти:

а) ординальный комната первой с них;

б) последовательный комната последней изо них.

  1. Дано предложение. Определить, убирать ли в нем д "а". В случае положительного ответа раскопать равным образом ординальный номер первой с них.

  2. Дано предложение. Определить количество букв "н", предшествующих первой запятой предложения.

  3. Дано предложение. Напечатать все символы, расположенные в ряду первой и другой запятой. Если другой запятой нет, в таком случае должны взяться напечатаны все символы, расположенные задним числом единственной имеющейся запятой.

  4. Дано предложение, на котором имеются одна письмена "с" равно одна руны "т". Определить, какая с них встречается раньше (при просмотре болтология слева направо).

Процедура val.

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

идеже абзац – строковая или переменная, содержащая изображение числа; цифра - переменная, которой должно быть присвоено значение, изображенное строкой строка; адрес – возвращаемый процедурой шифр ошибки. Если строка может оказываться преобразована во число, то код ошибки равен нулю.

Процедура val полезна возле организации ввода вместе с клавиатуры. Например, коли в программе описана аргумент month типа integer равно ее ценность вводится из клавиатуры, то во результате возможной ошибки оператора, задавшего месяцочек строкой символов, скажем "июнь", а малограмотный цифрой, программа завершается ошибкой времени выполнения. Однако кабы числовые данные вводить на правах строку, а по прошествии времени преобразовывать в наличность из через процедуры val, так можно избежать подобного неприятного завершения программы. Ниже приведен пример таковой программы.

var

month: integer;

st: string[10];

code: integer;

begin

repeat

write (‘Месяц-> ’);

readln (st);

val (st, month, code);

if code <> 0 then

writeln (‘Ошибка! Месяц годится разделаться цифрой.’);

until code=0;

end.

Задачи:

  1. Дан текст. Напечатать безвыездно имеющиеся в нем цифры.

  2. Дан текст. Определить численность цифр в нем.

  3. Дан текст, во котором имеются цифры.

а) Найти их сумму.

б) Найти максимальную цифру.

  1. Дан текст, на начале которого имеются пробелы равным образом на котором имеются цифры. Найти последовательный штучка максимальной цифры, считая, в чем дело? стержневой боец имеет первый непробел. Если максимальных цифр несколько, ведь обязан присутствовать найден номер первой изо них.

Процедура str.

Процедура str позволяет преобразовать число на его изображение, т.е. на строку. В общем виде послание ко процедуре выглядит так: str (выражение, строка).

идеже оборот – слово alias переменная целого не ведь — не то вещественного типа, строка – строковая переменная, которой будет присвоено слепок выражения.

Задачи общие:

  1. Дано предложение. Определить число букв "о" на нем.

  2. Дано предложение. Определить число пробелов во нем.

  3. Дано предложение. Определить число вхождений на него некоторого символа.

  4. Дано предложение. Определить долю (в %) букв "а" во нем.

  5. Дан текст. Сколько однова во нем встречается символ "+" равно сколечко крат символ "*".

  6. Дано предложение. Определить сколько в нем одинаковых соседних букв.

  7. Дано предложение. Определить число вхождений во него буквосочетания "ро".

  8. Дано предложение. В нем трепотня разделены одним пробелом (начальные да конечные пробелы на предложении отсутствуют). Определить состав слов на предложении.

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

  10. Дан текст. Подсчитать точки соприкосновения число вхождений во него символов "+" и "-".

  11. Дано предложение. Определить, сколько в нем гласных букв.

  12. Дано предложение. Все буквы "е" в нем подменять получи букву "и".

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

  14. Дано предложение. Заменить на нем все вхождения буквосочетания "ах" на "ух".

  15. Дано предложение. Заменить на нем все вхождения буквосочетания "бит" на "рог".

  16. дарованная вывод слов. Проверить, правильно ли на ней записаны сочетания "жи" да "ши".

  17. данная череда слов. Проверить, правильно ли во ней записаны сочетания "ча" равным образом "ща". Исправить ошибки.

  18. Дано слово. Определить, сколь различных букв на нем.

  19. Даны банан слова. Определить, дозволительно ли из букв первого с них нахватать второе. Рассмотреть двоечка варианта:

1) повторяющиеся буквы второго слова могут во первом слове невыгодный повторяться;

2) каждая азы второго болтовня должна входить на блюдо речь столько а раз, сколько равным образом нет слов второе.

  1. Даны три слова. Напечатать исключительно те буквы слов, которые лакомиться всего на одном с слов. Рассмотреть неуд варианта:

1) повторяющиеся буквы каждого слова рассматриваются;

2) повторяющиеся буквы каждого слова не рассматриваются.

  1. Даны три слова. Напечатать их общие буквы. Повторяющиеся буквы каждого болтология не рассматривать.

  2. Даны три слова. Напечатать неповторяющиеся в них буквы.

Массивы с строк.

Работа из массивом изо строк аналогична работе из целочисленными массивами. При объявлении массива фигура элементов в нем надо являться будто string.

Задачи:

  1. В массиве с строк установить количество строк начинающихся сверху букву «А» и ввести их сверху экран.

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

  3. В массиве обнаружить строки, начинающиеся гласной русской буквой.

  4. Отсортировать конгломерат изо строк по убыванию их длин.

  5. Отсортировать сосредоточение изо строк по алфавиту.

  6. Дано предписание изо 00 слов. Заполнить ими конгломерат с 00 элементов.

  7. Дано предложение. Напечатать его в обратном порядке слов, например, предложение "мама мыла раму" должно взяться напечатано во виде "раму мыла мама".

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

  9. Даны ряд строк текста, на которых нет начальных равным образом конечных пробелов. Необходимо переработать сии строки так, чтобы их длины были одинаковыми. Это следует совершить порядком вставки между словами дополнительных пробелов. Количество пробелов посередь отдельными словами в утробе отдельной строки должно отличаться невыгодный больше нежели получи 0.

Зачет в соответствии с строкам.

Системы счисления.

Система счисления сие манера наименования и дневной журнал чисел. Все они делятся получи и распишись две большие группы: позиционные и непозиционные.

В непозиционной системе счисления каждый знак, употребляемый про записи чисел, постоянно обозначает одно равно ведь же число. Цифра – сие знак, используемый для изображения числа.

Примером непозиционной системы счисления может предназначаться римская. В ней были определены следующие обозначения чисел: I – 0, V – 0, X – 00, L – 00, C – 000, D – 000, M – 0000.

Тогда сумма 078 на римской нумерологии будет облюбовать так: CCCLXXVII.

Славянская построение счисления тоже являлась непозиционной, на ней использовались буквы алфавита, над которыми ставился особый значок ~ - называемый титло.

Запись чисел на сих системах очень громоздко равным образом отнюдь не удобно, круглым счетом в качестве кого требует использования большого числа знаков, требуемых с целью деловой дневник какого - либо числа. Чтобы до некоторой степени уменьшить количество используемых знаков для записи чисел, на римской системе было введено следующее правило: Если поместить букву обозначающую меньшее число, слева от буквы обозначающей большее, то меньшее должно с большего вычитать. IV – 0, IX – 9, XL – 00, XC – 00.

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

Ясно, что такое? в какой мере безграмотный впрыскивать новых знаков, век дозволено удумать число, которое нелегко замаскировать поуже введенными знаками. Такое помеха характерно для какой приглянется непозиционной системы счисления. Также ахти сложны да неудобны в сих системах счисления арифметические действия.

CCCLIX+CLXXIV=DXXXIII. Еще труднее производить умножение. Поэтому должно быть понятно, вследствие этого были вытеснены такие системы счисления изо обихода позиционными. Хотя приходится отметить, что именно римская общественный порядок используется до этих пор, только лишь на тех случаях, где нет необходимости вырабатывать от числами какие – либо действия. Например, при обозначении столетий, глав во книгах, часов получай циферблатах.

Общепринятой позиционной системой счисления является десятичная, берущая свое начатие ото счета в пальцах. Она была изобретена на Индии, спустя время заимствована там арабами равным образом уж вследствие арабские страны пришла на Европу. Значение каждой цифры в позиционной системе счисления определяется далеко не токмо ею самой, только так же равно местом (позицией), которое она занимает на дневной журнал числа. Для позиционной системы счисления эдак но характерно то, что-то численность разбивается нате разряды, которые считаются снаряжение неправомерно и каждая циферка на дневной журнал числа означает определенное состав единиц именно того разряда во котором сия число стоит (568 – 0 сотен, 0 десятков, 0 единиц). Единица каждого следующего разряда завсегда в определенное доля однова превосходить единицу предыдущего. Это отношение называют основанием системы счисления.

Числа, которыми наша сестра привыкли пользоваться называются десятичными равно арифметика, которой я пользуемся, равным образом называется десятичной. Это потому, почто каждое число можно сконцентрировать изо набора цифр содержащего 10 символов - цифр - "0123456789". Но десятичная цифирная наука никак не единственная. Если да мы от тобой возьмём лишь только пятью цифр, так на их основе не грех обосновать пятеричную арифметику, с семи цифр - семеричную. В областях знаний связанных не без; компьютерной техникой зачастую используют арифметику, в которой числа составляются из шестнадцати цифр, целесообразно эта арифметика называется шестнадцатеричной. Чтобы понять, что-то такое контингент во не десятичной арифметике поначалу выясним, что такое величина и круг во десятичной арифметике.

Возьмём, для примеру, состав 046. Эта запись означает, в чем дело? во числе двум сотни, четыре десятка да цифра единиц. Следовательно, можно сделать запись следующее равенство:

246=200 + 00 + 0=2 * 00 0 + 0 * 00 0 + 0 * 10 0

Здесь знаками равенства отделены три способа ежедневник одного равным образом того а числа. Наиболее интересна нам без дальних разговоров третья форма записи: 0 * 00 0 + 0 * 00 0 + 0 * 00 0 . Она устроена следующим образом:

В нашем числе три цифры. Старшая цифра "2" имеет комната 0. Так смотри она умножается для 00 вот следующий степени. Следующая число "4" имеет порядковый номер 0 равно умножается в 00 на первой. Уже видно, ась? цифры умножаются возьми десять в степени бери единицу слабее порядкового номера цифры. Уяснив сказанное, пишущий сии строки можем записать общую формулу представления десятичного числа. Пусть дадено число, в котором N цифр. Будем обозначать i-ю цифру через a i . Тогда сумма дозволяется положить получай бумагу на следующем виде: a n a n -1 ….a 0 a 0 . Это первая форма, а третья конструкция записи будет смотреться так:

a n a n-1 ….a 0 a 0 =a n * 00 n-1 + a n-1 * 00 n-2 + …. + a 0 * 00 0 + a 0 * 00 0

идеже a i сие примета изо набора "0123456789"

В этой еженедельник ужас здорово видна роль десятки. Десятка является основой образования числа. И уместно возлюбленная приблизительно и называется "основание системы счисления", а самочки режим счисления, поэтому приблизительно равным образом называется "десятичной". Конечно, никакими особыми свойствами число десяток малограмотный обладает. Мы вполне можем подменить червон получи что ни придется другое число. Например, состав на пятеричной системе счисления позволительно зачислить так:

a n a n-1 ….a 0 a 0 =a n * 0 n-1 + a n-1 * 0 n-2 + …. + a 0 * 0 0 + a 0 * 5 0

идеже a i сие эмблема с набора "012345"

В общем, заменяем 00 нате что угодно другое число равным образом получаем всё другую систему счисления равно другую арифметику. Наиболее простая цифирь получается, если 00 сменять нате 0. Полученная система счисления называется двоичной равно число в ней определяется следующим образом:

a n a n-1 ….a 0 a 0 =a n * 0 n-1 + a n-1 * 0 n-2 + …. + a 0 * 0 0 + a 0 * 0 0

идеже a i сие отображение изо набора "01"

Эта режим самая простая изо всех возможных, приближенно вроде на ней все число образуется всего только изо двух цифр 0 равно 0. Понятно, что-нибудь уймись ранее некуда. Примеры двоичных чисел: 00, 011, 001.

Очень видный вопрос. Можно ли, например двоичное величина и круг (или количество с какой-нибудь другой системы счисления) представить в виде десятичного числа равным образом наоборот, можно ли десятичное контингент представить в виде двоичного (или числа с какой-нибудь другой системы счисления).

Двоичное во десятичное. Это очень просто. Метод такого перевода даёт наш способ ежедневник чисел. Возьмём, ко примеру, следующее двоичное контингент 0011. Разложим его до степеням двойки. Получим следующее:

1001=1 * 0 0 + 0 * 0 0 + 0 * 0 0 + 0 * 0 0

Выполним до сей времени записанные поведение и получим:

1 * 0 0 + 0 * 0 0 + 0 * 0 0 + 0 * 0 0 =8 + 0+ 0 + 0=9. Таким образом, получаем, что 0011(двоичное)=9 (десятичное). Сразу видно равным образом небольшое натяг двоичной системы. То но самое число, которое, в десятичной системе отмечено одним знаком на двоичной системе, с целью своей записи требует цифра знака. Но это плата после простоту (бесплатно ни аза не бывает). Но польза двоичная система даёт безмерный на арифметических действиях. И дале наш брат сие увидим.

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

При использовании системы счисления выше десятичной во уклад жизни идут буквы, то есть, например, с целью шестнадцатеричной системы счисления будут использованы следующие цифры: 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, a, b, c, d, e, f.

Представьте во виде десятичного числа следующие числа.

а) 010100011 0 (419); б) 0410 0 (798); с) d7e8 06 (55272); в) 02245 0 (7013); г) 0768 0 (1012); д) 001000 0 0270); е) 0a01b 02 (58775).

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

Для того, чтоб реформировать десятичное число на двоичное, его нужно разложить по степеням двойки. Но ежели разложение по степеням десятки из сего следует сразу, то, во вкусе разложить соответственно степеням двойки надо крошечку подумать. Для начала рассмотрим, по образу сие совершить методом подбора. Возьмём десятичное цифра 02.

Шаг первый. 0 0 =4, сего мало. Также мало равным образом 0 0 =8, а 0 0 =16 сие уже много. Поэтому оставим 0 0 =8. 02 - 0= 4. Теперь нужно продемонстрировать во виде степени двойки 0.

Шаг второй. 0=2 0 .

Тогда наше количество 02=2 0 + 0 0 . Старшая циферка имеет боец 0, старшая степень=3, следовательно, должны быть слагаемые со степенями двойки 0 да 0. Но они нам безграмотный нужны, отчего с намерением избавится от ненужных степеней, да прекратить нужные запишем количество так: 0*2 0 + 0*2 0 +0*2 0 + 0*2 0 =1100 - сие да есть двоичное просьба числа 02. Нетрудно заметить, сколько каждая очередная степень - сие наибольшая точка двойки, которая меньше разлагаемого числа.

Для перевода целого десятичного числа  N   во систему счисления не без; основанием  q   необходимо  N   разделить с остатком ("нацело") на  q , записанное на пирушка а десятичной системе. Затем неполное частное, полученное от такого деления, нужно опять разделить с остатком на  q , равно т.д., пока последнее полученное неполное частное не горазд равным нулю. Представлением числа N   на новой системе счисления будет преемственность остатков деления, изображенных одной q -ичной цифрой равным образом записанных на порядке, обратном порядку их получения.

Пример: Переведем состав 05 из десятичной системы на двоичную, восьмеричную равным образом шестнадцатеричную:

Ответ: 05 00 =1 001 011 0    =  013 0  =  0B 06 .

Преобразуйте десятичные числа в двоичные:

а) 04 б) 09 в) 034 г) 058 е) 0190 ж) 0019

Самостоятельная занятие для перевод чисел с десятичной системы счисления.

Арифметические поступки во системах счисления.

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

Сложение

Таблицы сложения легко и просто составить, используя Правило Счета.  

Сложение в двоичной системе

Сложение в восьмеричной системе

                 Сложение на шестнадцатиричной системе

При сложении цифры суммируются по разрядам, да если бы около этом возникает избыток, так симпатия переносится влево.
  Пример. Сложим числа 05 да 0 на различных системах счисления.

Шестнадцатеричная: F 06 +6 06

Ответ: 05+6=21 00 =10101 0 =25 0 =15 06
Проверка. Преобразуем полученные суммы для десятичному виду:
00101 0 =2 0 + 0 0 + 0 0 =16+4+1=21, 
05 0 =2 . 0 0 + 0 . 0 0 =16 + 0=21, 
05 06 =1 . 06 0 + 0 . 06 0 =16+5=21. 

Умножение

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

Умножение в двоичной системе

Умножение в восьмеричной системе

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

Ответ: 0 . 0= 30 00 =11110 0 =36 0 .
Проверка. Преобразуем полученные произведения к десятичному виду:
01110 0 =2 0 + 0 0 + 0 0 + 0 0 =30;
06 0 =38 0 + 08 0 =30.
 
  Пример. Перемножим числа 015 да 01.

Ответ: 015 . 01 =5865 00 =1011011101001 0 =13351 0 .
Проверка. Преобразуем полученные произведения ко десятичному виду:
0011011101001 0 =2 02 + 0 00 + 0 0 + 0 0 + 0 0 + 0 0 + 0 0 + 0 0 =5865;
03351 0 =1 . 0 0 + 0 . 0 0 + 0 . 0 0 + 0 . 0 0 + 0 . 0 0 =5865.

Самостоятельная вещь возьми действие и умножение чисел во различных системах счисления.

Вычитание

Пример. Вычтем единицу из чисел 00 0 , 10 0 равно 00 06
     
     
 
  Пример. Вычтем единицу изо чисел 000 0 , 100 0 равным образом 000 06 .
     
     

Деление

Деление в любой позиционной системе счисления производится объединение тем а правилам, в качестве кого и деление домиком на десятичной системе. В двоичной системе разделение выполняется особенно просто, тем отнюдь не менее очередная цифра частного может фигурировать всего только нулем или единицей.  
  Пример. Разделим день 00 получи и распишись состав 0.


Ответ: 30 : 0=5 00 =101 0 =5 0 .
    Пример. Разделим количество 0865 нате количество 015.

Восьмеричная: 03351 0 :163 0


Ответ: 5865 : 015=51 00 =110011 0 =63 0 .
Проверка. Преобразуем полученные частные ко десятичному виду:
010011 0 =2 0 + 0 0 + 0 0 + 0 0 = 51; 03 0 =6 . 0 0 + 0 . 0 0 =51.
 
  Пример. Разделим численность 05 получи и распишись контингент 04.

Восьмеричная: 03 0 : 06 0


Ответ: 35 : 04=2,5 00 =10,1 0 =2,4 0 .
Проверка. Преобразуем полученные частные ко десятичному виду:
00,1 0 =2 0 + 0 -1 =2,5;
0,4 0 =2 . 0 0 + 0 . 0 -1 =2,5.

Перевод с двоичной системы счисления в четверичную, восьмеричную,
шестнадцатеричную и обратно.

Двоичная система, удобная пользу кого компьютеров (потому, ась? симпатия имеет гряда преимуществ перед другими системами: ради ее реализации нужны технические устройства вместе с двумя устойчивыми состояниями (есть поток — нет тока, намагничен — невыгодный намагничен и т.п.), а не, например, от десятью, — как в десятичной; мнение информации посредством всего-навсего двух состояний крепко да помехоустойчиво ; возможно приложение аппарата булевой алгебры в целях выполнения логических преобразований информации; двоичная арифметика несравнимо попроще десятичной. Недостаток двоичной системы — быстрый рост числа разрядов , необходимых для записи чисел), пользу кого человека неудобна из-за ее громоздкости равным образом непривычной записи.

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

Числа во сих системах читаются почти так но легко, по образу десятичные, требуют соответственно во три (восьмеричная) и в хорошо (шестнадцатеричная) раза меньше разрядов, нежели во двоичной системе (ведь числа 0 равно 06 — соответственно, третья и четвертая степени числа 0).

Перевод восьмеричных да шестнадцатеричных чисел во двоичную систему очень прост: шабаш каждую цифру заменить эквивалентной ей двоичной триадой (тройкой цифр) либо тетрадой (четверкой цифр).

Например:


 Чтобы перевести сумма изо двоичной системы в восьмеричную другими словами шестнадцатеричную , его нужно победить в левую сторону да в правую сторону от запятой для  триады  (для восьмеричной) или  тетрады  (для шестнадцатеричной)  и каждую такую группу заменить соответствующей восьмеричной (шестнадцатеричной) цифрой.

С

Сводная сетка переводов аж чисел из одной системы счисления во другую.

Рассмотрим всего лишь те системы счисления, которые применяются во компьютерах — десятичную, двоичную, восьмеричную и шестнадцатеричную. Для определенности возьмем произвольное десятичное число, например 06, равно к него выполним все возможные последовательные переводы из одной системы счисления на другую. Порядок переводов определим на соответствии с рисунком:

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

  • в кружках записаны основы систем счисления;

  • стрелки указывают курс перевода;

  • номер рядом со стрелкой означает порядковый номер соответствующего примера в сводной таблице.

Например:  означает пересчёт изо двоичной системы в шестнадцатеричную, имеющий во таблице порядковый часть 0.

Контрольная усилие сообразно системам счисления.

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

Графический система работы.

Помимо модуля CRT, тот или иной позволяет улучшать последовательность получи и распишись экран. Но в качестве кого уже говорилось сие малограмотный единственная библиотека, ноне пишущий сии строки начнем знакомиться с новой библиотекой, которая позволяет работать вместе с графическим режимом дисплея. В этом режиме что придется слепок на экране синтезируется возьми множество мельчайших элементов, называемых пикселями. Каждый пиксель представляет собой светящуюся точку таких размеров, при которых промежутки посредь соседними пикселями отсутствуют. Если группа смежных пикселей светятся, ведь они воспринимаются отнюдь не на правах совокупность отдельных точек, а наравне поголовный участок. Таким образом, в экране дисплея может быть синтезировано что бы ни графическое изображение.

В графическом режиме искусство кино разделяется прямоугольной сеткой, кажинный элемент которой имеет приманка координаты. Левый верхний угловая точка экрана имеет координаты (0;0). Значение левой положение (Х) увеличивается во горизонтальном направлении налево направо. Значение правой месторасположение (У) увеличивается в вертикальном направлении с высоты птичьего полета вниз.

Графическому режиму в качестве кого да текстовому, присуще взгляд текущего указателя. Текущий справочник на какой угодно одну секунду времени может находится во всякий точке экрана с координатами (х;у). Его местонахождение отображается курсором, так на графическом режиме стрелка малограмотный виден.

Инициализация (включение) графического режима

InitGraph (gd, gm, p);

идеже gd – аргумент типа integer, которая указывает на используемый фигура графического драйвера; gm – переменная типа integer устанавливающая разрешение экрана; p – строковая константа, указывающая линия ко драйверу.

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

В нашем случае gd=9 всегда.

Что касается разрешения так возможны такие варианты значений которые принимает аргумент gm:

gm=0 - низкое (640x200)

gm=1 - среднее (640x350)

gm=2 - высокое (640x480)

Ну а дорога ко драйверу держи наших машинах выглядит следующим образом: ‘c:\trans\bp\bgi’

Выключение графического режима

CIoseGraph;

Изображение точек

PutPixel (x, y, c);

идеже х равно у – местоположение точки, а не без; – это цвет которым бросьте изображена точка (номера цветов аналогичны номерам цветам на модуле crt).

Пример: Нарисовать точку зеленого цвета в центре экрана

Program Primer;

Uses Graph;

Var Gd, Gm : Integer;

Begin

Gd:=9; Gm:=2;

InitGraph(Gd,Gm,’c:\trans\bp\bgi’);

PutPixel(320,240,2);

Readln;

CloseGraph;

End.

Задание:

  1. Изобразить точку на центре экрана при низком разрешении экрана.

  2. Изобразить для экране звездное небо.

  3. Изобразить нате экране разноцветное звездное небо.

  4. Изобразить звездное уран получай четверти экрана.

  5. Изобразить звездное твердь на центре экрана.

Изображение линий.

Цвет абрис

SetColor (c);

идеже из – колер которым достаточно изображена линия либо — либо текст.

Стиль очертания

SetLineStyle (s, p, t);

идеже s – вкус лини; p – маска линии; t – толщина линии.

П еременная s может брать следующие значения:

0

1

2

3

4 Определяется шаблоном

Переменная t принимает следующие значения:

1 - Тонкая

3 - Толстая

Переменная p может иметь любое значимость неравно речь абрис не шаблон (т.е. разве s <> 0).

Отрезок очевидный очерк

Line (x1,y1, x2,y2);

идеже x1,y1- начальные положение нескрываемый линии; x2,y2 – координаты конца линии.

Отрезок поперед точки

LineTo (x,y);

идеже строй рисуется с точки во который находится движок во сей момент; х, у – месторасположение указателя после выполнения команды, т.е. строй рисуется до точки со координатами х, у.

Данную команду пригодно использовать при рисовании ломанных линий.

Перемещение текущего указателя в точку из координатами ( x , y )

MoveTo (x,y);

Отрезок (вектор)

LineRel (dx, dy);

идеже ряд рисуется с точки на который находится директива на сей момент; а конечные местоположение отрезка формируются следующим образом: для текущим координатам х равно у прибавляются согласно dx и dy.

Задания:

  1. Построить янтарный треугольник, вершинами которого являются следующие точки (200;100), (300;100), (250; 00).

  2. Нарисовать домик.

  3. Нарисовать лесенку, даже если не без; клавиатуры задаются следующие параметры: а – ширина ступеньки, b – высь ступеньки, с – контингент ступенек.

  4. Нарисовать лесенку даже если помимо вышеуказанных параметров задается еще початие равным образом указание лесенки.

Самостоятельная занятие : Нарисовать куб. (Оценивается держи «5» - разве нижняя левая макушка куба, а равным образом пикет его ребра задается от клавиатуры, для «4» - если изобразили отталкиваясь ото исходных данных: глава имеет позиция (100; 400), протяжение ребра 000).

Контур прямоугольника

Rectangle(x1,y1,x2,y2);

x1,y1,x2,y2 – расположение противоположных невыгодный смежных вершин прямоугольника.

Окружность

Circle (x, y, r);

идеже x, y – координата центра окружности, а r – радиус окружности.

Дуга окружности

Arc (x,y,nu,ku,r);

идеже x,y – координаты центра окружности, r – радиус окружности, nu – отправной угловая точка не без; которого начинается рисование дуги, ku – конечный угол, переменные nu,ku – измеряются во градусах.

Дуга эллипса

Ellipse(x,y,nu,ku,rx,ry);

идеже x,y – координаты центра эллипса, rx,ry – радиусы эллипса в соответствии с по оси х да объединение оси у, nu – начальный вершина из которого начинается рисование дуги, ku – конечный угол, переменные nu,ku – измеряются во градусах.

Например к того так чтобы нарисовать полный эллипс надлежит выполнить такую команду: Ellipse(x,y,0,360,rx,ry);

Задание: Изобразить нате экране какую–нибудь смешную рожицу.

Закрашенные фигуры

Стиль заполнения фигуры

SetFillStyle (s, c);

идеже s – образ заполнения фигуры, c – часть активного цвета.

Виды стилей заполнения:

0 - сплошная покраска фоновым цветом

0 - сплошная замалевывание активным цветом

0 - замалевывание пикселей во шахматном порядке

02 - пользовательский изложение

0 0 0 0 0 0 0 00 01

Закрашенный квадрат

Bar (x1,y1, x2,y2);

x1,y1,x2,y2 – расположение противоположных далеко не смежных вершин прямоугольника.

Параллелепипед

Bar3d(x1,y1,x2,y2,d,t);

x1,y1,x2,y2 – месторасположение противоположных невыгодный смежных вершин передней грани параллелепипеда, d – широта махало грани, t - Верхняя грань(True (TopOn) – есть, False (TopOff) – нет).

Закрашенный эллипс

FillEllipse (x,y,Rx,Ry);

идеже x,y – координаты центра эллипса, Rx,Ry – радиусы эллипса в соответствии с по оси х да объединение оси у.

Закрашенный директриса круга

PieSlice (x,y,nu,ku,r);

идеже x,y – координаты центра круга, r – радиус круга, nu – начальный жилище от которого начинается рисование сектора круга, ku – концевой угол, переменные nu,ku – измеряются на градусах.

Закрашенный квадрант эллипса

Sector(x,y,nu,ku,rx,ry);

идеже x,y – координаты центра эллипса, rx,ry – радиусы эллипса согласно по оси х равно по мнению оси у, nu – начальный пристанище от которого начинается рисование сектора эллипса, ku – дефинитивный угол, переменные nu,ku – измеряются на градусах.

Закраска произвольной фигуры

FloodFill (x,y, b);

идеже x,y - координаты внутренней точки; b – штучка цвета границы.

Задание бери оценку: Разукрасить нарисованную досель рожицу.

Вывод текста во графике

Стиль текста

SetTextStyle(s, d, r)

идеже s – манера текста, d – направление, r – размер.

стиль: 0 – побитовый направление: 0 - лежа (®) размер: 0..10

0 – трехкратный 0 - дыбом (­)

0 – маленький

0 – гротесковый

0 – готический

Вывод текста

OutTextXY(x, y,s)

где, x, y – координаты, s – формулировка (тип - string).

Выравнивание текста

SetTextJustify(h, v)

идеже h - компенсация за горизонтали, v - выравнивание до вертикали.

Выравнивание текста относительно точки привязки



Преобразование чисел на телекс

Str ( x, s )

идеже x – исходное число, s - абзац (текст) - субъект - string

Ширина строки - Функция

TextWidth (S)

идеже S – пункт (ширина во пикселях)

Высота строки - Функция

TextHeight(S)

идеже S – линия (высота на пикселях)

Задание:

  1. Заполнить щит квадратами, если сторона квадрата задается вместе с клавиатуры и буде неограниченный квадратик бери экране не убирается его извлекать безвыгодный нужно совсем.

  2. Нарисовать шахматную доску, если координаты верхнего левого угла и сторона квадрата задаются от клавиатуры.

Самостоятельная служба заполнить экран окружностями, беспричинно в надежде безвыгодный полные окружности держи диcплeй никак не выводились, если радиус задается от клавиатуры.

Задачи:

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

  2. Нарисовать наклонную шахматную доску.

Самостоятельная эксплуатация вложенные окружности, притом ежели попросту вложенные окружности так суд четыре, коли еще симметричные им так если на то пошло пять.

Зачет сообразно текстовому режиму.

Задачи:

  • Написать программу, которая сообщает пользователю: «Я умею мыслить отрезок». Запрашивает: «Введите координаты начала равным образом конца отрезка» равно рисует отрезок с соответствующими координатами.

  • Построить чертеж лодочки.

  • Написать программу, которая рисует концентрические окружности.

  • Нарисуйте радугу, т.е. разноцветные дуги концентрических окружностей опирающихся сверху нижнюю границу экрана.

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

  • Написать программу, которая рисует лучи исходящие изо левого нижнего угла экрана.

  • В верхнем левом углу экрана нарисовать солнышко.

  • Написать программу, которая рисует произвольную ломанную линию.

  • Написать программу, рисующую произвольный бегущий отрезок.

  • Написать программу, которая рисует эллипсы.

  • Составить программу построения квадрата. На одном с его оснований построить равносторонний треугольник со сторонами произвольной длины.

  • Построить ромб со обходным путем А равным образом острым углом х.

  • Изобразите держи экране перемещение точки по окружности.

  • «Нарисуйте» склянка равно «заставьте их «ходить».

  • Составить программу построения отрезка штриховой честный линии, ограниченного точками из координатами А(X,Y) B(X,Y). Размеры штриха да интервала между штрихами возьми равными. Исходные данные: значения координат точек и размер штриха введите от клавиатуры.

  • Изобразите получай экране истаивание горящей свечи.

  • Составить программу рисования спирали.

  • Составить программу вычерчивания графиков следующих функций:

а) y=sinx б) y=tgx в) y=cosx г) y=ax+b д) y=e x е) y=logx

  • Нарисуйте горизонтальные(вертикальные) линии длиной L располагая их в соответствии с всей плоскости экрана для расстоянии d.

  • Расчертите нате клеточки со в обход a огулом экран.

  • на )

    б)

    Нарисуйте :

а )

д )


г )


е )

ж )


0 класс.

Организация движения во Turbo Pascal.

Алгоритм организации движения:

  1. Задать начальную точку привязки.

  2. Нарисовать фигуру касательно этой точки привязки.

  3. Сделать задержку.

  4. Стереть нарисованную фигуру, ведь есть нарисовать ее фоновым цветом.

  5. Изменить начальные положение точки привязки.

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

Пример: На экране биссектриса за которой движется точка. (от левого края до правого).

Задачи:

  1. На экране объединение очевидный двигается точка от левого края перед правого равным образом обратно, до тех пор, доколь малограмотный короче нажата какая-либо клавиша.

  2. Даны двум прямые, по части которым двигаются две точки из разными скоростями.

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

Задачи:

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

  2. Две рожицы двигаются за экрану (одна веселая, другая грустная).

  3. Бильярдный королек двигается по части экрану.

  4. Броуновское движение.

Управление движением.

Пример: перемещение шарика лишь при нажатии стрелок.

Задачи:

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

Движение по части окружности.

Подпрограммы.

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

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

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

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

Передача данных изо ведущий программы в подпрограмму (входные данные) да возврат результата выполнения подпрограммы осуществляется от через параметров.

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

Использование подпрограмм позволяет реализовать одинокий изо самых прогрессивных методов программирования - структурное программирование.

Процедура на Паскале

равным образом ее формат.

Любая схема может содержать несколько процедур да функций. Процедуры и функции объявляются во разделе описания вслед следовать пределом описания переменных.

Процедура - сие независимая часть программы, которую не грех призывать по имени про выполнения определенных действий.

Структура процедуры имеет обличие :

Procedure имя(список формальных параметров);

(* раздел описаний *)

begin

(* раздел операторов *)

end;

Первая строчечка описания называется заголовком процедуры, а раздел операторов называется веточка процедуры.

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

Тело процедуры заключается во операторные скобки BEGIN да END, притом за END ставится точка из запятой.

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

Процедура вызывается сообразно ее имени :

имя(список фактических параметров);

Формальные мера - параметры, определенные во заголовке процедуры.

Фактические мера - выражения, задающие конкретные значения при обращении для процедуре.

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

Фактические формат - сие параметры, которые передаются процедуре около ее вызове.

Количество равно характер формальных равным образом фактических параметров должны на точности совпадать.

Формальные формат описываются в заголовке процедуры равным образом определяют тип и простор подстановки фактических параметров. Формальные параметры делятся бери двушник вида: параметры-переменные и параметры-значения.

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

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

Все переменные программы делятся на глобальные равным образом локальные. Глобальные переменные объявляются во разделе описаний базисный программы. Локальные переменные объявляются на процедурах и функциях. Таким образом, локальные переменные «живут» только лишь нет слов время работы подпрограммы.

Пример. Составить программу для вычисления аn : целые числа а равным образом n (n> =0) вводятся не без; клавиатуры. ( составить процедуру пользу кого подсчеты степени целого числа).

Program ex;

var a, n : integer;

s: longint;

Procedure Degree(x,y : integer; var st : longint);

var i : integer;

begin

st:=1;

for i:=1 to y do st:=st*x;

end;

{ почин стержневой программы}

begin

writeln(‘введите двоечка числа - основание и пропорция степени’);

readln(a,n);

Degree(a,n,s); { лозунг для процедуре }

writeln(‘Результат ’,s);

end.

Процедура названа именем Degree. В скобках записан инвентарь формальных параметров, то очищать перечислены переменные с указанием их типа. Используем три параметра: начальный - базис степени, то вкушать число, которое приходится состроить в степень; второстепенный - барометр степени, третий - результат. Первые двум формальных параметра - формат значения, третий - параметр-переменная, равным образом пред ним указано обещание var. Все они описаны как целые (x равным образом y - переменные вроде integer, st - Longint, в такой мере в качестве кого степенная цель быстро возрастает).

После заголовка процедуры идут разделы описаний. В нашем примере нет переводу только раздел описания переменных, во котором описывается одна аргумент i (счетчик цикла).

Далее соглашаться клейстокарпий процедуры. Оно начинается служебным одно слово Begin равным образом заканчивается служебным одно слово End, со временем которого стоит след вместе с запятой (в конце программы после последнего End ставится точка). В теле процедуры вычисляется степень числа x не без; через цикла For.

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

!!!! Процедура вызывается равно как оператор, состоящий изо имени процедуры. В круглых скобках записываются фактические параметры. В нашем примере формальные параметры x, y равно st принимают значения фактических параметров a, n равно s соответственно. После завершения работы процедуры переменные a равно n сохранят те же значения, что-нибудь равным образом около вызове, а s получит новое значение.

Пример 0 : Используя процедуру для вычисления степени числа, отыскать значение выражения : y=a4x4 + a3x3 + a2x2 + a1x + a0

program ex2;

var a: array[0..4] of integer;

i, x: integer;

y,s: longint;

Procedure Degree(xx,n : integer; var st : longint);

var i : integer;

begin

st:=1;

for i:=1 to n do st:=st*xx;

end;

{ зародыш фундаментальный программы}

begin

write(‘введите достоинство переменной х ‘); readln(x);

writeln(‘введите сосредоточение коэффициентов’);

for i:=0 to 0 do begin write(‘a[‘,i,’]=’); readln(a[i]); end;

y:=a[0];

for i:=1 to 0 do

begin

Degree(x,i,s); y:=y+a[i]*s;

end;

writeln(‘y=’,y);

end.

Пример 0. Просуммировать различные части массива.

Program sumir;

var a: array [1..100] of integer; sa1, sa2,sa3 : integer;

n,l,t : integer;

procedure summa(a:array [1..100] of integer; k,m :integer; var s:integer);

var i:integer;

begin

s:=0;

for i:=k to m do s:=s+a[i];

end;

BEGIN

for t:=1 to 000 do

begin

write(‘введите обычный элемент массива ‘);

readln(a[i]);

end;

summa(a,10,20,sa1);

summa(a, n , l , sa2);

summa(a, n,n+3,sa3);

end.

Задачи:

  1. Составить программу, на результате которой значение А меняется значением с величиной В, а количество С - от величиной D. (Определить процедуру, осуществляющую сделка значениями двух переменных величин)

  2. Даны стороны двух треугольников. Найти сумму их периметров равно сумму их площадей. (Определить процедуру интересах расчета периметра равным образом площади треугольника по его сторонам.)

  3. Даны основы равно высоты двух равнобедренных трапеций. Найти сумму их периметров и сумму их площадей (Определить процедуру для расчета периметра равным образом площади равнобедренной трапеции объединение ее основаниям и высоте)

  4. Написать рекурсивную процедуру для вывода получай искусство кино цифр натурального числа во обратном порядке.

  5. Написать рекурсивную процедуру для ввода со клавиатуры последовательности чисел да вывода ее возьми морда во обратном порядке (окончание последовательности - присутствие вводе нуля).

  6. Написать рекурсивную процедуру перевода натурального числа с десятичной системы счисления во двоичную.

Функции

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

В теле функции хоть лопни приходится быть хотя бы единолично хирург присваивания, в левой части которого игра стоит свеч название функции, а во правой - ее значение. Иначе значение функции безвыгодный хорош определено.

Таким образом, поголовный облик описания функции ближайший :

Function Имя[(список формальных параметров)]:Тип результата

описательная пакет

Begin

органон функции, во которой обязательно должно присутствовать

отхватывание Имя_функции:=значение

End;

Пример 0 Составить программу, подсчитывающую число сочетаний минуя повторения изо n элементов согласно k. Число сочетания без повторения вычисляется по части формуле

Обозначим чрез n да k переменные для хранения введенных чисел; С - переменную для хранения результата.

Воспользуемся функцией на вычисления факториала числа n. (n!=1*2*..*n)

program sochet;

var n,k : integer;

a1,a2,a3,c : lohgint;

Function factorial(n:integer):longint;

var i: integer;

rez : longint;

begin

rez:=1;

for i:=1 to n do rez:=rez*i;

factorial:=rez;

end;

begin

writeln(‘ впрыскивание n да k :’); readln(n,k);

a1:=factorial(n); { подсчитывание n!}

a2:=factorial(k); { расчет k!}

a3:=factorial(n-k); {вычисление (n-k)!}

c:=a1 div (a2*a3); { результат}

writeln(‘результат=’,c) ;

end.

Первая строчечка на описании функции - это ее заголовок. Служебное изречение Function (функция) указывает получи и распишись то, ась? именем factorial названа функция. В скобках записан список формальных параметров функции, состоящий с одной переменной целого типа. Далее во заголовке указан тип значения функции. В данном примере результат функции factorial - длинное целое число.

За заголовком функции нелишне описательная часть функции, которая, в качестве кого у программы, может являться членом изо разделов описания переменных, констант, типов. В данном примере питаться переменные i (счетчик цикла) rez (для залежные деньги значения факториала).

Далее согласен раздел операторов (тело функции).

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

Пусть n=5, k=3. Когда во программе встречается оператор a1:=factorial(n), выполняются следующие действия:

  • выделяется парамнезия в целях переменных, описанных во функции factorial;

  • формальному параметру присваивается значение фактического: n:=n (n=5);

  • выполняется функция, вычисляется факториал числа 0;

  • значительность функции передается во место обращения ко этой функции, ведь есть присваивается переменной a1;

  • на операторах a2:=factorial(k) a3:=factorial(n-k) вновь два раза вызывается связка factorial с параметрами k=3 n-k=2.

Функция - сие самостоятельная часть программы, имеющая собственные переменные, которым отводится отдельное место во памяти ЭВМ. Этим объясняется тот факт, зачем переменные от одинаковыми именами, используемые на функции да в основной программе, являются разными ( аргумент n ведущий программы и параметр n функции). При выполнении программы автомат «не путает» имена этих переменных, т.к. области их действия не совпадают.

Пример 0 : Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, на каком из двух данных чисел вяще цифр.

Program chisla;

Var n1, n2 : longint;

k1, k2 : byte;

Function kol(x : longint): byte;

var k: byte;

begin

k:=0;

While x <> 0 do

begin

Inc(k);

x:=x div 00;

end;

kol:=k;

end;

BEGIN

writeln(‘Введите двойка числа’); readln(n1, n2);

k1:=kol(n1);

k2:=kol(n2);

if k1=k2 Then writeln(‘одинаковое количество цифр’)

else if k1> k2 Then Writeln(‘в первом числе цифр больше’)

else writeln(‘во втором числе цифр больше’)

END.

Задачи:

  1. Рассчитать достоинство х , определив и использовав функцию :

а)

г)

б)

д)

в)

е)

  1. Определить значимость

а) z=max(a,2b)*max(2a-b,b) б) z=min(a,3b)*min(2a-b,b)

идеже max(x,y), min(x,y) - максимально да партминимум с чисел x,y

При решении:1) далеко не использовать функцию max, min.

0) предопределить и использовать функцию max,min.

  1. Даны основные принципы равным образом высоты двух равнобедренных трапеций. Найти сумму их периметров. (Определить функцию с целью расчета периметра равнобедренной трапеции по ее основаниям м высоте.)

  2. Даны три квадратных уравнения ax 0 + bx + c=0, bx 0 + ax + c=0, cx 0 + ax + + b=0. Сколько изо них имеют вещественные корни ? (Определить функцию, позволяющую распознавать присутствие вещественных корней во квадратном уравнении.)

  3. Найти длина треугольника, заданного координатами своих вершин. (Определить функцию в целях расчета отрезка по координатам его вершин)

  4. Даны вещественные числа a, b, c, d, e, f, g.

Найти площадь пятиугольника, изображенного на рисунке. (Определить функцию для расчета площади треугольника в соответствии с трем сторонам.)

е

g d

a f

b не без;

  1. Даны вещественные числа x 0 , y 0 , x 0 , y 0 ,... x 0 , y 0 .Найти площадь пятиугольника (см 00.6) вершины которого имеют местонахождение (x 0 , y 0 ), (x 0 , y 0 ), ...( x 0 , y 0) . (Определить функцию чтобы расчета площади треугольника по координатам его вершин).

  2. Даны двум последовательности целых чисел : а 0 , а 0 ,... а 0 , и b 0 , b 0 , ... b 0 . Найти количество четных чисел во первой изо них равно количество нечетных вол второй. (Определить функцию, позволяющую распознавать четные числа.)

  3. Найти авторитет выражения (2*5! + 0*8!)/(6! + 4!), идеже n! функция.

  4. Даны неуд натуральных числа. Выяснить, в каком изо них начисление цифр больше.(сумма цифр - функция).

  5. Даны n различных чисел. Определить максимальное с них. (Определить функцию, находящую максимум из двух различных чисел.)

  6. Найти НОД(a,b,c)=НОД(НОД(a,b),c). (где НОД(a,b) - функция.)

  7. Даны n натуральных чисел. Найти их НОД. (где НОД(a,b) - функция.)

  8. Написать рекурсивную функцию :

а) подсчеты средства цифр натурального числа;

б) прикидки количества цифр натурального числа.

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

а) n-го члена прогрессии; б) фонды n первых членов прогрессии.

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

а) n-го члена прогрессии; б) суммы n первых членов прогрессии.

Построение графиков функций и диаграмм.

Для начатки работы, одну каплю упростим задачу. А именно, договоримся, что функция задана явно, ведь принимать всегда наши функции имеют нижеперечисленный лицо y=f(x). И пока автор будем занимать лишь такие функции которые безвыгодный имеют точек разрыва на исследуемой области определения. Грубо говоря, возьми рассматриваемой области не обязан вычисляться стержневой аппарат из отрицательного числа да отнюдь не должно выполняться отделение сверху ноль.

Ниже приведен токсоплазма алгоритм, который вынужден во принципе подвизаться для задачи построения графиков:

Для до этого времени Х через ЛГ давно ПГ свершать

Вычислить y=f(x)

Построить точку вместе с координатами (x,y)

Для реальной задачи сей алгоритм работать отнюдь не будет, в области следующим причинам:

  1. Он никак не учитывает, то, в духе устроена система координат компьютерного монитора. (Начало координат на левом верхнем углу и y растет вниз).

  2. Он безвыгодный учитывает, в чем дело? щит монитора имеет ограниченные размеры равно если значения функции будут жирно будет велики или чрезвычайно велика короче область, на которой надо график, ведь значительной части видеографика автор сих строк прямо-таки неграмотный увидим.

  3. Если с хвоста значения функции будут малы или — или круг построения будет мала, ведь автор там видно будет все, хотя получившаяся картинка короче через силу мала за своим размерам.

Попробуем сообразоваться указанные моменты.

Все сии проблемы не возбраняется замыслить одним махом, неравно функцию зафиксировать во том же масштабе, что такое? равно защита монитора. Это очень просто. Пусть, наш брат желаем просмотреть картинку которая ахти мала, например она может взяться нарисована на прямоугольнике который на 0000 единовременно поменьше экрана монитора, тогда её под тем по образу изгонять необходимо увеличить во 0000 раз. Если а возлюбленная наоборот в 0000 однова больше, в таком случае накануне выводом её надо на 0000 разок уменьшить.

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

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

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

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

Введём обозначения:

Left – изнаночная кордон исходной области.

Right – изнаночная межа исходной области.

Down – нижняя рамки исходной области.

Up – верхняя предел исходной области.

Размеры экрана монитора величина фиксированная. Но интересах общности примем для них буквенные обозначения:

Long_x – размер в соответствии с горизонтали

Long_y – размер по мнению вертикали

x, y – значения впредь до выполнения преобразований

x’, y’ – значения по прошествии выполнения преобразований

Тогда отображение подобия запишется следующим образом:

x’=x/(Right - Left)*Long_x y’=y/(Up - Down)*Long_y

Преобразование переноса запишем так:

x’’=x’ – Left y’’=y’ – Down

И перед разлукой отображение “отображения сверху вниз” запишется так:

x’’’=x’’ y’’’=Long_y – y’’

А без дальних слов объединим постоянно три преобразования в одно:

Преобразование

1) x’=x/(Right - Left)*Long_x – Left

2) y’=Long_y - (y/(Up - Down)*Long_y – Down)

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

Для по сию пору точек функции облечь в мясо и кровь

Берём очередную точку

Новая точка=Преобразование над очередной точкой

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

Первое. Если взялись возводить график, стало быть, нам известна область, на которой ты да я будем творить график. Эта область конечна равным образом её норма по мнению координате x равным образом поглощать величины Left, Right.

Предположим, что-нибудь наш брат строим схема на этой области до N точкам. Это означает, что на нашем распоряжении скопление координат y ради N точек. Наибольшее авторитет y в этом массиве вкушать протяжённость Up равным образом наименьшее значение y питаться значение Down.

Тогда Long_x=Right – Left равно Long_y=Up – Down.

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

Ввод границ области построения графика.

Ввод количества точек построения.

Расчёт шага построения.

Расчёт значений координат y

Расчёт максимума равным образом минимума значений y – заговор

Выполнение операций преобразования.

Выше появился детерминант “шаг построения”. Разумно воздвигать точки следующим образом. Пусть самая изнаночная степень письмо – это левая межа области построения. Следующая крапинка сие изнаночная + этап построения, то глотать небольшое число. И каждая очередная уровень сие предыдущая + шаг построения. Если готовить так, ведь координаты х дозволяется безвыгодный владеть на массиве. Каждую координата не возбраняется продумать сообразно очевидной формуле:

xi=Left + стадия * i если бы первую точку считать с номером 0 равным образом

xi=Left + этап * (i – 0) кабы первая точка имеет боец 0.

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

Важное ссылка

Необходимо помнить, ась? планзифтер монитора не квадрат, а прямоугольник, не считая того, исходная округ построения графика в таком случае а параллелограмм да совсем не бесспорно одинаковый прямоугольнику экрана монитора. Это означает, что коэффициент подобия к координат x может проявить себя иным, нежели коэффициент подобия ради координат y.

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

Построение графика на окрестности точек разрыва

Проблема построения монотипия во такой окрестности заключается во том, что ордината функции изменяется очень быстро держи ахти маленьком интервале изменения абсциссы, а вас помните, что наш алгорифм проводит преобразование масштабирования видеографика функции. Это преобразование во случае обработки окрестности точки разрыва приведёт к тому, зачем большая кусок монотипия будет изображена во аспидски маленьком масштабе. Математически сие довольно верно, но получившаяся туз окажется совершенно ненаглядной, равно построение графика потеряет смысл, таково в духе главная функция монотипия сие всё а наглядность.

Как со сим бороться. Идея решения данной проблемы такова – необходимо научится пожертвовать точку разрыва, и в её окрестности сооружать схема не проводя вычислений да масштабирования, а схематично, исходя изо общих свойств точки разрыва.

Как равно во случае не без; экстремумами да точками перегиба нам грешно пользоваться точными определениями математического анализа, по части причинах сего наш брат уж говорили. Следовательно, первое, в чем дело? требуется сделать сие подать отождествление разрыва.

Определить порыв позволительно что-то около – точка разрыва сие такая крапинка на окрестности, которой ипостась изменяется слишком быстро.

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

Мы будем литься с того, ась? в окрестности точки разрыва график строится схематично. Это означает, что график строится неточно, а, следовательно, если окружение достаточно велика, так да в целом возведение видеографика хорошенького понемножку неточным.

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

Для альфа и омега заметим, сколько во окрестности точки разрыва табель функции удовлетворяет следующим свойствам:

  1. Функция либо безгранично растёт, либо неограниченно убывает.

  2. Скорость её роста увеличивается также неограниченно.

Эти двоечка свойства помогут нам обнаруживать необходимые окрестности вместе с высокой степенью точности. Введём некоторые обозначения.

Max – верхняя край значений ординат

Min – нижняя рубеж значений ординат.

Шаг – деяние изменения абсциссы.

А – почин области построения письмо

В – результат области построения видеографика

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

Нестрогое изображение процесса расчётов

Для поиска точек разрыва, наш брат пройдём всю сфера построения не без; медленно достаточно маленьким, так таким который-нибудь позволит пройти всю земля после разумное время. На каждом шаге работа хорошенького понемножку вычисляться новая координата чрез прибавления к предыдущей абсциссе величины шага. Для каждой опять-таки посчитанной абсциссы будем исчислять ординату, равным образом если посчитанная ордината окажется за пределами отрезка [min, max] так будем предполагать, почто найдена окрестность точки разрыва, в дальнейшем ась? потребно быть запущен эксплуатация проверки этого предположения.

Min – сие минимальная с поуже посчитанных ординат равным образом max – сие максимальная изо уже посчитанных ординат.

Процесс проверки предположения заключается на следующем:

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

  • Продолжаем тенденция вперёд. Если функция скачком изменит направление изменения (разрыв первого типа) или скачком видоизмениться авторитет ординаты (разрыв второго типа), значит, автор сих строк нашли окрестность разрыва.

  • Будем сдавливать местность со сохранением её свойств предварительно тех пор, доколе симпатия невыгодный станет достаточно маленькой. Её носитель равно есть точка разрыва.

Строгое справочник алгоритма.

Текущая точка=Началу области построения графика

Шаг=Начальное авторитет шага.

Номер точки разрыва=0

Минимум=0

Максимум=0

Пока текущая крапинка безвыгодный достигла конца области построения творить

Начало

Вычислить ординату текущей точки

Если ордината менее минимума или больше максимума

То

Выполнить функцию поиска разрыва

Если руптура найден

То

Прибавить ко абсциссе текущей точки величину найденной окрестности точки разрыва.

Иначе

Если ордината чище максимума то максимум=ордината

Если ордината поменьше минимума ведь минимум =ордината

Конец

Функция поиска точки разрыва

Шаг=Величина большая текущего шага.

Точка1=текущая ступень

Точка2=Точка1+Шаг

Если Ордината1 > Ордината2 в таком случае Направление =вниз

Если Ордината1 < Ордината2 ведь Направление =вверх

Есди Ордината1=Ордината2

То следствие функции=разрыв неграмотный найден, работу прервать

Повторять

Точка1=Точка2

Точка2=Точка1 + Шаг

Если Ордината1 усильно отличается от ординаты2

То Результат функции=разрыв найден

Если Ордината1 > Ордината2 ведь Направление1 =вниз

Если Ордината1 < Ордината2 в таком случае Направление1 =вверх

Если Направление1 <> Направление2

То Результат функции=разрыв найден

Конец цикла

Важное ссылка

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

Думаю, вас обратили внимание, в чем дело? некоторые понятие в этом месте невыгодный в полном смысле слова определены. Например неграмотный очевидно аюшки? означает фраза “Ордината1 весьма отличается от ординаты2”

Алгоритм построения монотипия функции:

  1. Ввести зачин математической системы координат. Масштаб (количество пикселей в единичном отрезке).

  2. Нарисовать оси координат да сделать разметку (это может оказываться либо сетка, либо не мудрствуя лукаво насечки нате осях). Сделать оцифровку.

  3. Построить график. Для этого:

  • Перебрать целое экранные месторасположение х (от 0 вплоть до 039).

  • Перевести всякий х – экранный на х – математический. (х э =а+х м *m, откуда получаем х м =( х э -а)/ m, идеже (а,в) – координаты точки азбука математической системы координат, m – масштаб).

  • Проверить входит ли найденное х м во зона определения функции, график которой да мы не без; тобой строим.

  • Вычислить у м м =f(х м )).

  • Перевести у м во у э э =round(b- у м )).

  • Изобразить точку со координатами (х э , у э ) получай экране монитора.

Задачи: Построить графики функций: у=х 0 ; у=sinx; у= ; у=1/х.

Диаграммы.

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

Алгоритм разработка столбчатой диаграммы:

  1. Ввести сосредоточение изо чисел.

  2. В исходном массиве выкопать максимальный элемент, равным образом на него найти масштаб для построения столбиков (например, l=round(450/max)).

  3. По количеству элементов определить ширину каждого столбика диаграммы (например, m=round(600/n), где n – количество элементов массива).

  4. Строить отдельный столбик, ради чего использовать процедуру изображения прямоугольника, размеры которого определяются следующим образом: ширина стандартна с целью всех – сие m, высота определяется индивидуально для каждого числа, в частности h=l*a[i].

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

Задача: Построить столбчатую диаграмму, если на исходном массиве глотать вновь и отрицательные числа.

{Пример построения столбиковой диаграммы}

program BarDiagram;

uses crt,graph;

{N - величина элементов исходных данных}

{Name - наименования элементов исходных данных}

{Num - числовые значения элементов исходных данных}

const

N=6;

Name:array[1..N] of string=("1997","1998","1999","2000","2001","2002");

Num:array[1..N] of integer=(10,5,8,11,2,7);

var

Dr,Rg,MaxX,MaxY,X0,Y0,S,I,X1,Y1,X2,Y2,S1:integer;

M:real;

Nm:string;

begin

{Инициализация графического режима}

Dr:=detect;

initgraph(Dr,Rg,"");

{Определение начальных параметров}

cleardevice; {Очистка экрана}

MaxX:=getmaxx; {Определение максимальной координаты соответственно X}

MaxY:=getmaxy; {Определение максимальной координаты по части Y}

X0:=40; {Отступ ото края экрана впредь до рамки по вертикали}

Y0:=20; {Отступ ото края экрана поперед рамки по горизонтали}

S:=round((MaxX-4*X0)/N); {Определение ширины одного столбца}

X1:=2*X0+2; {Начальная ордината объединение X для первого столбца}

Y1:=MaxY-2*Y0+2; {Конечная абсцисса за Y для всех столбцов}

X2:=X0+2; {Координата до X чтобы вывода значений по левую руку оси Y}

{Рисование рамки}

setfillstyle(1,1);

bar(X0,Y0,MaxX-X0,MaxY-Y0);

setcolor(14);

rectangle(X0,Y0,MaxX-X0,MaxY-Y0);

{Рисование осей}

line(2*X0,2*Y0,2*X0,MaxY-2*Y0); {Ось Y}

line(2*X0,MaxY-2*Y0,MaxX-2*X0,MaxY-2*Y0); {Ось X}

{Поиск наибольшего с значений элементов исходных данных во переменную M}

M:=Num[1];

for I:=2 to N do

if Num[I]> M then

M:=Num[I];

S1:=round((MaxY-4*Y0)/M); {Определение длины единичного отрезка получай оси Y}

{Рисование диаграммы}

for I:=1 to N do

begin

Y2:=2*Y0+(MaxY-2*Y0-S1*Num[I]); {Начальная координата по Y}

str(Num[I]:4,Nm);

outtextxy(X2,Y2,Nm); {Вывод значения элемента данных по левую руку оси Y}

line(2*X0-3,Y2-3,2*X0,Y2-3); {Рисование деления на оси Y}

outtextxy(X1,Y1,Name[I]); {Вывод названия элемента данных подо осью X}

setfillstyle(1,I+1); {Определение типа заполнения столбца}

bar(X1-1,Y2-3,X1-1+S,Y1-3); {Рисование столбца}

X1:=X1+S; {Начальная склонение по Х в целях очередного столбца}

end;

repeat

until keypressed;

closegraph {Выход из графического режима}

end.

{Пример построения линейной диаграммы}

program LineDiagram;

uses crt,graph;

{N - часть элементов исходных данных}

{Name - наименования элементов исходных данных}

{Num - числовые значения элементов исходных данных}

const

N=6;

Name:array[1..N] of string=("1997","1998","1999","2000","2001","2002");

Num:array[1..N] of integer=(10,5,8,11,2,7);

var

Dr,Rg,MaxX,MaxY,X0,Y0,S,I,X1,Y1,X2,Y2,S1,X3,Y3,X4,Y4:integer;

M:real;

Nm:string;

begin

{Инициализация графического режима}

Dr:=detect;

initgraph(Dr,Rg,"");

{Определение начальных параметров}

cleardevice; {Очистка экрана}

MaxX:=getmaxx; {Определение максимальной координаты объединение X}

MaxY:=getmaxy; {Определение максимальной координаты по части Y}

X0:=40; {Отступ ото края экрана по рамки по вертикали}

Y0:=20; {Отступ через края экрана накануне рамки по горизонтали}

S:=round((MaxX-4*X0)/N); {Определение интервала между точками согласно X}

X1:=2*X0+2; {Координата согласно X к первой точки диаграммы}

Y1:=MaxY-2*Y0+2; {Координата до Y с целью вывода названий подо осью Y}

X2:=X0+2; {Координата в соответствии с X пользу кого вывода значений налево с оси Y}

{Рисование рамки}

setfillstyle(1,1);

bar(X0,Y0,MaxX-X0,MaxY-Y0);

setcolor(14);

rectangle(X0,Y0,MaxX-X0,MaxY-Y0);

{Рисование осей}

line(2*X0,2*Y0,2*X0,MaxY-2*Y0); {Ось X}

line(2*X0,MaxY-2*Y0,MaxX-2*X0,MaxY-2*Y0); {Ось Y}

{Поиск наибольшего с значений элементов исходных данных на переменную M}

M:=Num[1];

for I:=2 to N do

if Num[I]> M then

M:=Num[I];

S1:=round((MaxY-4*Y0)/M); {Определение длины единичного отрезка держи оси Y}

{Рисование диаграммы}

for I:=1 to N do

begin

Y2:=2*Y0+(MaxY-2*Y0-S1*round(Num[I])); {Координата точки по Y}

X4:=X1-1; {Конечная склонение линии по X}

Y4:=Y2-3; {Конечная склонение линии по Y}

str(Num[I]:4,Nm);

outtextxy(X2,Y2,Nm); {Вывод значения элемента данных налево оси Y}

line(2*X0-3,Y2,2*X0,Y2); {Рисование деления на оси Y}

outtextxy(X1,Y1,Name[I]); {Вывод названия элемента данных лещадь осью X}

setlinestyle(0,1,1); {Определение типа линии диаграммы}

circle(X4,Y4,2); {Рисование узлов диаграммы}

if I <> 0 then

line(X3,Y3,X4,Y4); {Рисование линии диаграммы}

X3:=X1-1; {Начальная эфемерида линии по X}

Y3:=Y2-3; {Начальная ордината линии по Y}

X1:=X1+S; {Координата соответственно X пользу кого очередной точки}

end;

repeat

until keypressed;

closegraph {Выход из графического режима}

end.

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

Построение панорамный диаграммы.

{Пример построения угловой диаграммы}

program RoundDiagram;

uses crt,graph;

{N - цифра элементов исходных данных}

{Name - наименования элементов исходных данных}

{Num - числовые значения элементов исходных данных}

const

N=6;

Name:array[1..N] of string=("1997","1998","1999","2000","2001","2002");

Num:array[1..N] of integer=(10,5,8,11,2,7);

var

Dr,Rg,MaxX,MaxY,Y0,I,S1,Kg,Xc,Yc,R,Yk:integer;

M,S:real;

begin

{Инициализация графического режима}

Dr:=detect;

initgraph(Dr,Rg,"");

{Определение начальных параметров}

cleardevice; {Очистка экрана}

MaxX:=getmaxx; {Определение максимальной координаты объединение X}

MaxY:=getmaxy; {Определение максимальной координаты до Y}

Xc:=300; {Координата центра диаграммы по X}

Yc:=250; {Координата центра диаграммы по Y}

R:=150; {Радиус диаграммы}

{Рисование рамки}

setfillstyle(1,1);

bar(0,0,MaxX,MaxY);

setcolor(14);

rectangle(0,0,MaxX,MaxY);

{Определение фонды значений элементов исходных данных во переменную S}

S:=0;

for I:=1 to N do

S:=S+Num[I];

{Рисование диаграммы}

Y0:=0; {Начальный угол сектора}

for I:=1 to N do

begin

Kg:=round(360*(Num[I]/S)); {Определение кол-ва градусов во секторе}

Yk:=Y0+Kg; {Конечный пристанище сектора}

if Yk> 060 then

Yk:=360;

setfillstyle(1,I+1); {Определение типа заполнения сектора}

pieslice(Xc,Yc,Y0,Yk,R); {Рисование сектора}

Y0:=Yk {Начальный крыша над головой сектора}

end;

repeat

until keypressed;

closegraph {Выход из графического режима}

end.

Работа со файлами.

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

Файл - сие страна памяти бери внешнем носителе, на которой хранится некоторая информация. В языке Паскаль файл представляет из себя последовательность элементов одного типа. Мы будем работать только от файлами последовательного доступа. В таких файлах, с тем получить доступ для элементу, необходимо последовательно прошляпить все предыдущие.

Объявление файловой переменной в разделе описания переменных имеет вид :

var <имя файла> : File of <тип элементов> ;

Например:

var Ft : File of integer;

M : File of char;

Type File_integer=File of integer

File_char=File of char;

Var F1: File_integer;

F2: File_char;

Так как бы на описании указывается тип элементов, такие файлы называются типизированными. Все начатки файла пронумерованы начиная из нуля.

С каждым файлом связан приблизительно называемый файловый указатель. Это неявно описанная переменная, которая указывает на некоторый устройство файла.

(0)

(1)

...

(к)

(к+1)

...

файловый указатель

Все операции производятся вместе с элементом, который определен файловым указателем.

Связь переменной файлового в виде

от файлом в диске.

Процедура Assign( <имя файловой пер-ой> ,’ <имяфайла держи диске> ’);

Например:

Assign ( F 0,’ A : INT . DAT ’);

После установления такого соответствия все операции, выполняемые по-над переменной F1, будут выполнятся надо файлом, хранящимся на диске А равно имеющим кличка INT.DAT

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

Чтение изо файла.

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

Для чтения с файла ничего не поделаешь открыть для чтения путем процедуры

Reset( <имя файловой переменной> );

Собственно зачитывание данных с файла выполняется процедурой

Read( <имя файловой переменной> , <имя переменной> );

Переменная должна заключать оный но тип, что и компоненты файла. Отметим, что-то если оператор ввода имеет наружность Read( <имя переменной> ), в таком случае эмпирика вводятся с клавиатурой, а ежели Read( <имя файловой переменной> , <имя переменной> ); то данные вводятся изо файла, хранящегося на диске.

Закрытие файла

После того на правах причина с файла прочитаны, его нуждаться свернуть посредством процедуры

Close( < термин файловой переменной> )

Общая проект чтения данных с файла, таким образом, следующая:

Reset( <имя файловой переменной> );

.......

Read( <имя файловой переменной> , <имя переменной> );

...........

Close( <имя файловой переменной> );

Признак конца файла

Так наравне цифра элементов файла безвыгодный известно заранее, никуда не денешься оказываться в состоянии определять, что обложка кончился. Для сего используется логическая ипостась Eof( <имя файловой переменной> ) (Eof - End Of File). Она принимает истинное ценность (Тrue), кабы достигнут конец файла, равно ложное (False) - во противном случае.

Пример Прочитаем с файла целые числа и выведем их получи и распишись экран:

Assign(F1,’A:INT.DAT’);

Reset(F1);

While Not Eof(F1) do

begin

read(f1,n); { считываем очередное число из файла}

write(n,’ ‘); { выводим его для экран}

end;

Close(F1);

Запись во обложка

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

Для журнал во обложка надлежит открыть файл чтобы календарь чрез процедуры

Rewrite( < Имя файловой переменной > );

Собственно копия данных на файл выполняется процедурой :

Write ( < имя файловой переменной > , < сила > );

Общая конфигурация склерозник данных во файл, таким образом, следующая:

Rewrite( <> );

......

Write( <имя файловой переменной> , <значение> );

..........

Close( <имя файловой переменной> );

Прямой посещение для элементам файла

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

Установка указателя.

Процедура Seek( <имя файловой переменной> ,N) устанавливает файловый индикатор на N-й элемент. Например, Seek(F1,3). (на 0 элемент)

Определение заезжий дом элемента

Функция FilePos( <имя файловой переменной> ) возвращает боец элемента, сверху который «смотрит» файловый указатель.

Определение количества элементов в файле

Функция FileSize( <имя файловой переменной> ) возвращает наличность элементов в файле.

Удаление да переименование файлов

Erase( <имя файловой переменной> ) процедура удаления файла.

Rename( <имя файловой переменной> ,’ <новое имя получай диске> ’) переименование файла.

Пример : В файле DAT1.DAT записаны целые числа. Вычислить сумму элементов файла и вывод неразлучно со исходными данными записать на обложка DAN2.DAT

Program WW;

Var f1,f2 : file of integer;

s, n : integer;

begin

Assign(f1,’DAT1.DAT’);

Reset(F1);

Assign(f2,’DAT2.DAT’);

Rewrite(f2);

s:=0;

While Not Eof(f1) do { осмотр получи и распишись финал файла}

begin

read(f1,n); {чтение элемента с файла F1}

write(f2,n); { партитура элемента на обложка F2}

s:=s+n;

end;

write(f2,s); {запись деньги элементов во конец файла F2}

write(‘Результат находится на файле DAT2.DAT’);

Close(f1);

Close(f2);

end.

Текстовые файлы

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

Var A: Text;

Для обработки текстовых файлов используются те но процедуры равно функции, что равно к обработки обычных типизированных файлов. Для связывания файловой переменной вместе с файлом получи и распишись диске употребляется процедура Assign. Текстовые файлы могут быть обнаружить к чтения процедурой Reset другими словами к журнал процедурой Rewrite.

Для чтения данных применяется процедура Read. Если ничего не поделаешь впоследствии чтения данных перейти держи следующую строку, то используется мероприятие Readln. Если необходимо прямо-таки переключиться для следующей строке, так позволено пустить в дело процедуру Readln( <имя файловой переменной текстового файла> ); которая устанавливает файловый указатель держи коренной компонента следующей строки.

Процедура Write записывает показатели в текущую строку. Если желательно записать данные равно перешагнуть для следующей строке, то дозволяется пускать в ход процедуру Writeln. Если приходится всего лишь перевестись для записи для новую строку, в таком случае применяется процедура Writeln( <имя файловой переменной текстового файла> ); которая записывает в обложка знак конца строки да устанавливает файловый движок для почин следующей строки.

Так по образу во строках может фигурировать разное количество символов, имеется в наличии логическая функция Eoln( <имя файловой переменной текстового файла> ), которая принимает значение True, ежели достигнут конец строки.

Процедура Append( <имя файловой переменной текстового файла> ). Она открывает файл для «дозаписи», помещая файловый указатель на истечение файла.

Пример : Дан текстовый файл, содержащий только целые числа, во каждой строке может существовать малость чисел, которые разделяются пробелами. Вывести получай экран все числа не без; учетом разбиения в строки и произвести выкладки состав элементов в каждой строке.

Решение: Пусть во файле содержится следующая информация:

-32 06 0 0 0

4 0 0 03 01 -5 -8

6 -8 0 -12

5 0 0 0 0 02

1 0

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

  • создайте небывалый обложка чрез команды New листок File;

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

  • сохраните файл, например, подо именем INT1.DAT

в настоящий момент напишем программу

program rrr;

var f : text;

x, k: integer;

begin

Assign(f,’int1.dat’);

Reset(f);

While Not Eof(f) do {пока невыгодный достигнут конец файла}

begin

k:=0;

While Not Eoln(f) do {пока неграмотный достигнут конец строки}

begin

read(f,x); {считываем очередное число}

write(x,’ ‘); {выводим его получи и распишись экран}

Inc(k); {увеличиваем счетчик}

end;

writeln(‘в строке’, k, ‘ элементов’);

Readln(f) {переходим для следующей строке файла}

end;

Close(f);

end.

Пример. Записать двумерный массив вещественных чисел 0х4 во испытательный файл.

Program mas;

const m=5; n=4;

Var fil : text;

a: real;

s: char;

i,j : integer;

begin

Assign(fil,’massiv.txt’);

Rewrite(fil);

for i:=1 to m do

begin

for j:=1 to n do

begin

a:=random(100);

write(fil,a:5:3,’ ‘); {число записывается в обложка на указанном формате, вслед за ним пробел}

end;

writeln(fil); {переход во файле получай новую строку}

end;

Close(fil);

{Чтение файла равным образом нравоучение матрицы сверху экран по строкам}

Reset(fil); {открытие ранее имеющегося файла}

while not Eof(fil) do

begin

while not Eoln(fil) do

begin

read(fil,a); {чтение числа}

write(a:5:3);

read(fil,s); { проект пробела после числа}

write(s);

end;

writeln;

readln(fil);

end;

Close(fil);

end.

Пример. Дан текстовый обложка f. Переписать в обложка g безвыездно компоненты исходного файла f на обратном порядке.

program tofile;

var f, g : text;

n, i, j : integer;

s : string;

x : array [1..32000] of char;

begin

assign(f,’f.txt’); assign(g,’g.txt’);

rewrite(g); rewrite(f);

writeln(‘Введите контингент строк во создаваемом вами файле ‘);

readln(n);

writeln(‘вводите строки, задним числом введения каждой нажмите Enter’);

for i:=1 to n do begin readln(s); write(f,s); end;

reset(f);

i:=0;

writeln(‘Исходный обложка :’);

while(not eof(f)) and (i <32000) do

begin i:=i+1; read(f,x[i]); write(x[i]); end;

writeln;

writeln(‘Измененный обложка :’);

for j:=i downto 0 do

begin write(g,x[j]); write(x[j]); end;

writeln;

close(f); close(g);

end.

Задача. Дан текстовый файл. Вставить в начало каждой строки ее штучка да записать преобразованные строки на новоизобретённый файл.

Задача. Даны неуд текстовых файла. Записать на незаинтересованный обложка только лишь те строки, которые снедать равно во первом, равным образом нет слов втором файлах.

Запись.

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

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

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

Запись - сие высокоструктурированный тип, описывающий укомплектование данных разных типов. Составляющие фанера объекты называются ее полями. Каждое закраина имеет уникальное (в пределах записи) имя. Чтобы описать запись, должен установить ее имя, имена объектов, составляющих запись, равным образом их типы.

Общий лицо описания ежедневник :

Type <имя записи> =Record

<поле 0> : <тип 0> ;

<поле 0> : <тип 0>

<поле n> : <тип n>

End;

Применительно для рассматриваемой задаче запись позволительно разрисовать этак :

Type

pupil=Record

fam : string[15]; {поле фамилии}

b1,b2,b3,b4,b5 : 0..5; {поля баллов}

sb : Real {средний бал}

End;

Чтобы охранять во памяти компьютер информацию обо всех 05 учениках класса, необходимо ввести конгломерат klass - сосредоточение записей.

Var klass : array[1..25] Of pupil;

Доступ для полям деловой дневник позволительно осуществить двумя способами:

1. С указанием имени переменной равным образом имени поля. Например, klass[2].fam, klass[3].sb, klass[1].b4

Ввод фамилий да оценок учащихся, т.е. элементов массива klass, позволено записать так:

for i:=1 to 05 do

begin

readln(klass[i].fam);

readln(klass[i].b1);

readln(klass[i].b2);

readln(klass[i].b3);

readln(klass[i].b4);

readln(klass[i].b5);

end;

2. С использованием оператора присоединения.

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

With <имя записи> Do <оператор> ;

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

Пример

for i:=1 to 05 do

With klass[i] do

begin

readln(fam);

readln(b1,b2,b3,b4,b5);

end;

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

program zap;

Type pupil=Record

fam : string[15]; {поле фамилии}

b1,b2,b3,b4,b5 : 0..5; {поля баллов}

sb : Real {средний бал}

End;

Var klass : array[1..25] Of pupil;

p: pupl;

i,m : integer;

sbmax : real;

begin

for i:=1 to 05 do

with klass[i] do

begin

writeln(‘Введите фамилию равным образом пятеро оценок’);

readln(fam);

readln(b1,b2,b3,b4,b5);

end;

for i:=1 to m do {вычисление среднего балла}

with klass[i] do sb:=(b1+b2+b3+b4+b5)/5;

sbmax:=0;

{ сканирование максимального среднего балла}

for i:=1 to m do

if klass[i].sb> =sbmax then sbmax:=klass[i].sb;

for i:=1 to m do {печать результатов}

if klass[i].sb=sbmax

then with klass[i] do writeln(fam:20,’ - ‘, sb:6:3);

end.

Пример. Определите дату завтрашнего дня.

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

Пусть число вводится на формате количество - месяц - годок следующим образом:

1 0 0997

Опишем регистрация чтобы хранения даты таким образом:

Type year=1500..2000;

month=1..12;

day=1..31;

data=Record

y : year;

m : month;

d : day;

end;

Заметим, в чем дело? :

  • разве день соответствует безвыгодный последнему дню месяца, так время равным образом месячишко безграмотный изменяются, а день увеличивается возьми 0;

  • даже если срок соответствует последнему дню месяца, в таком случае :

а) если бы месяцочек безграмотный декабрь, в таком случае время не изменяется, месячишко увеличивается сверху 0, а цифра устанавливается во 0;

б) коли месяцочек - декабрь, ведь годок увеличивается на 0, а месяцочек равным образом количество устанавливаются в 1.

Program datanext;

Type year=1500..2000;

month=1..12;

day=1..31;

data=Record

y : year;

m : month;

d : day;

end;

Var dat, next : data;

Function leap(yy:year):boolean; {функция определяет

високосный ли год}

begin

leap:=(yy Mod 0=0) And (yy Mod 000 <> 0);

end;

Function Dmonth(mm:month; yy : year) : day; {функция определения

количества дней данного месяца на данном году}

begin

case mm of

0,3,5,7,8,10,12: Dmonth:=31;

0,6,9,11 : Dmonth:=30;

0 : if leap(yy) then Dmonth:=29 else Dmonth:=28;

end;

end;

procedure Tomorrow(td : data; var nd : data); {опр-ние завтрашней даты}

begin {если сие безвыгодный концевой день-деньской месяца}

if td.d <> Dmonth(td.m, td.y) then

with nd do

begin

d:=td.d+1;

m:=td.m;

y:=td.y;

end;

else {если сие окончательный дата месяца}

if td.m=12 then {если сие декабрь}

with nd do

begin

d:=1;

m:=1;

y:=td.y+1;

end;

else { ежели сие неграмотный декабрь}

with nd do

begin

d:=1;

m:=td.m+1;

y:=td.y;

end;

end;

BEGIN

writeln(‘Введите сегодняшнее число, месяц и год’);

readln(dat.d, dat.m, dat.y);

Tomorrow(dat,next);

writeln(‘завтра будет’);

writeln(next.d, ‘.’, next.m, ‘.’, next.y);

END.

Задачи:

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

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

  3. Даны названия 06 городов да стран, в которых они находятся. Среди них есть города, находящиеся на Италии. Напечатать их названия.

  4. Известны показатели об 06 сотрудниках фирмы: фамилия равно позиция для воинской службе (военнообязанный иначе нет). Напечатать фамилии всех военнообязанных сотрудников.

  5. Известны способности относительно мощности двигателя (в л.с.) равным образом достоинство 00 легковых автомобилей. Определить общую достоинство автомобилей, у которых производительность двигателя превышает 100 л.с.

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

  7. Известны причина по отношению массе равным образом объеме 00 чел, изготовленных с различных материалов. Определить максимальную плотность материала тел.

  8. Известны вес, пол, умножение каждого с 02 человек. Найти общую массу да средний рост мужчин.

  9. Известно величина очков, набранных каждой изо 00 команд - участниц первенства по футболу. Ни одна чета команд не набрала одинакового количества очков.

а) Определить обозначение команды, ставшей чемпионом.

б) Определить названия команд, занявших во-вторых равным образом сладкое места.

в) Определить названия команд, занявших на первом месте равно блюдо места, не используя рядом этом двух операторов цикла (два прохода в области массиву).

г) Вывести названия команд в соответствии из занятыми ими тут и там в чемпионате.

  1. Известны оценки каждого с 05 учеников класса по мнению десяти предметам. Найти фамилию одного с учеников :

а) имеющих наибольшую сумму оценок;

б) имеющих наименьшую сумму оценок.

  1. Известны баллы, набранные каждым из 20 спортсменов-пятиборцев во каждом из пяти видов спорта. Определить фамилию спортсмена - победителя соревнований.

  2. Известны факты касательно 00 учениках класса: фамилии, имена, отчества, даты рождения (год, закидон месяца да число). Определить, есть ли во классе ученики, у которых сегодня с утра до ночи рождения, равным образом разве да, то напечатать прозвище равным образом фамилию каждого.

00 жанр

Повторение: Решить следующую задачу: Существует фирма, которая организует работу получи и распишись контрактной основе, в таком случае есть если к какого-либо специалиста есть работа некто нанимается, согласно окончания работы некто увольняется, вдобавок буквально на соседний праздник его могут нанять снова. Дан обложка во котором хранится вся информация согласно рабочим после год, причем общее сумма рабочих неизвестно. Она выглядит следующим образом: на первой строке записана дом рабочего, на следующей строке воскресенье да месяцочек его найма, на третьей – праздник равно месячишко окончания работы. Необходимо:

а) уволить получи и распишись диcплeй каталог рабочих напротив каждой фамилии каждого указано количество дней его работы, вдобавок если рабочий был нанят порядочно раз, в таком случае и в списке его семейка фигурирует несколько раз.

б) отвести получай кинематография прейскурант рабочих равным образом у каждого обратить точка соприкосновения количество рабочих дней из-за год.

в) сформированный на предыдущем пункте список рассортировать объединение убыванию количества рабочих дней.

Двоичный равным образом к-ичный перебор.

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

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

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

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

На первом шаге обработки массива, увеличим получи и распишись единицу крайний элемент массива, в таком случае есть, получаем следующее подмножество (0, 0, 0, 0, 0). Тем самым мы получили новейший достижимый вариант комплектации массива, во котором выбран последний пятый элемент.

На втором шаге заново увеличиваем последний штучка массива получи и распишись единицу, при этом получаем что-то симпатия равняется двойке, который не мочь по мнению условию формирования массива, следовательно последний устройство нельзя не занулить, а для единицу увеличиваем предыдущий элемент, в таком случае снедать четвертый, получаем (0, 0, 0, 0, 0). Этот разночтение соответствует тому, что-то выбран лишь четвертый объект множества.

На третьем шаге сызнова увеличиваем последний штука массива для единицу, получаем (0, 0, 0, 0, 0). Что соответствует тому, что-то выбраны поуже четвертый равным образом пятый объект некоторого множества.

На четвертом шаге заново увеличиваем последний деталь массива бери единицу, и возлюбленный у нас на итоге равно двойке, что невозможно, того да мы со тобой его зануляем, а на единицу увеличиваем предыдущий разряд, быть этом некто этак но обращается в двойку, что поделаешь равным образом его занулить, а на единицу расширить незаинтересованный элемент массива, во результате получаем такой вариант (0, 0, 0, 0, 0). Следовательно, во множестве выбран всего-навсего беспристрастный объект.

И таким образом происходит перебор всех возможных вариантов формирования множества состоящего с нулей равно единиц. Последний выполнимый проект ради нашего множества, сие совершенно считанные единицы (1, 0, 0, 0, 0). Что соответствует выбору всех объектов рассматриваемого множества. Предположим, что я безвыгодный остановились нате этом этапе и продолжили распространять свой массив, то есть получи и распишись единицу увеличиваем последний элемент массива, быть этом некто обращается в двойку, ты да я его зануляем равным образом переносим единицу на прежний разряд, равным образом во нем получаем двойку, снова-здорово зануляем и переносим, равным образом сие продолжается поперед тех пор, ноне автор невыгодный оказываемся во позиции первого элемента, который-нибудь также обращается во двойку, которую необходимо занулить а единицу выпить до дна чашу на предыдущий разряд, в таком случае убирать во нулевой, какой в обычном используемом нами массиве не фигурирует. Следовательно, на данном случае нам никуда не денешься определить позицию нулевого элемента массива для определения окончания перебора всех возможных вариантов формирования массива изо нулей да единиц. То принимать в начале пишущий сии строки формирует конгломерат изо всех нулей, во фолиант числе мелкая сошка находится равным образом в нулевом разряде, впоследствии того что нами перебраны однако варианты, равным образом единицы находятся закачаешься всех позициях не считая нулевой мы делаем нижеприведённый предприятие да получаем нули во всех позициях вдобавок нулевой, там находится единица, вишь не кто иной эта единица равно короче на посылках для того нас окончанием перебора всевозможных вариантов. В результате перебора автор должны получить 2 n вариантов, идеже n – величина элементов массива. Для успешной работы программы n не может оказываться бесконечно, подле n> 00 на обработку данных программе требуется уже адски бессчетно времени.

Алгоритм решения задачи от использованием двоичного перебора:

  1. Ввести исходные исходняк (если на этом есть необходимость).

  2. Сформировать новый градиент со номерами элементов ото 0 до самого n.

  3. Обработать таковой вектор.

  4. Сформировать новоявленный вектор.

  5. Если новый класс вектора равен 0, то спародировать беспристрастный пункт, иначе закончить.

Задача 0: Вывести нате кино всевозможные наборы 0 равно 0 равным образом их порядковые номера.

program primer;

uses crt;

var p: array [0..30] of byte;

n, i, k: integer;

procedure vector;

begin

i:=n;

while p[i]=1 do begin

p[i]:=0;

dec(i);

end;

p[i]:=1;

end;

procedure work;

begin

inc(k);

write (k:3,’: ‘);

for i:=1 to n do

write (p[i]);

writeln;

end;

begin

clrscr;

writeln (‘Введите n’);

readln (n);

k:=0;

for i:=0 to n do p[i]:=0;

repeat

work;

vector;

until p[0]=1;

readln;

end.

Задачи:

  1. Даны n различных цифр, получить с них всевозможные числа, при условии, сколько во числе цифры не повторяются.

  2. Даны n различных букв, получить совершенно возможные болтовня изо них при условии что-нибудь буквы на словах не повторяются.

  3. Имеется n монет разного достоинства, определить, позволительно ли получить задуманную сумму денег, данными монетами. Если вариантов несколько, в таком случае исключить их весь для экран, а если бы их нет, в таком случае заявить об этом.

  4. Имеется n камней (известна их масса), разложить сии камни бери две кучки так, воеже народ сих кучек отличались побратанец через друга по образу можно меньше (в идеале совпадали).

  5. Даны двум строки, предуготовить может ли первая строчечка являться получена как следует зачеркивания элементов второй.

  6. Известны низы n гирек. определить, можно ли назначенный нагрузка отвесить этими гирьками. Если можно, так указать наилучший (по числу используемых гирек) способ взвешивания. Задачу сделать выбор для двух случаев: а) нагрузка бери одной чаше весов, гирьки в другой; б) гирьки могут находиться нате обоих чашках весов.

Контрольная работа:

  1. Дан гряда цифр 0, 0, 0, 0, 0, 0, 0, 0, 0. Можно ли получить данное численность s, расставляя между цифрами знаки + да -. Если допускается то указать род расстановки знаков. ( Тесты: s=45 0+2+3+4+5+6+7+8+9; s=2 не позволяется (любое четное нельзя); s=1 0-2-3-4+5-6-7+8+9 (12 вариантов); s=47 нельзя; s=31 0+2+3+4+5+6-7+8+9 (3 варианта).

  2. Известно сумма страниц на каждом из n произведений. предназначить дозволено ли распределить сии произведения в 0 тома так, воеже безвыездно тамара оказались одинаковыми. Если можно, ведь вывести один изо вариантов распределения. (Тесты: n=6 (7, 00, 0, 0, 0, 0) не грех (7+5, 0+4, 00+2); n=5 (5, 0, 0, 0, 0) нельзя; n=3 (5, 0, 0) дозволяется (5, 0, 5); n=8 (5, 0, 0, 0, 0, 0, 0, 0) не возбраняется (по 00); n=6 (3, 0, 3, 0, 0, 0) нельзя).

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

Генерация перестановок.

Предположим, который нам дана такая задача: Вывести получи защита всё-таки перестановки чисел 1..n (то лакомиться последовательности длины n, во каждую изо которых каждое с чисел 0..n входит по одному разу).

Для определенности рассмотрим пример при n=5.

Изначально имеем такую расстановку чисел 0 0 0 0 0.

На первом шаге поменяем тут и там два последних элемента, получим 0 0 0 0 0.

Дальше начнем обыскивать центральный из конца элемент, кой склифосовский не в этакий мере следующего за ним (5> 0, а чисто 0 <5). Следовательно, таким элементом хорошенького понемножку тройка, стоящая на третьей позиции. Теперь необходимо найти самый справедливый штука больший, чем нынешний ( 0> 0, так правее есть расчет 0, равно она тоже вяще тройки), следовательно таким элементом короче цифра стоящая на пятой позиции. Меняем их местами. Получили такую перестановку: 0 0 0 0 0. при этом очередь массива, так глотать элементы, стоящие нате двух последних местах оказались упорядоченными в области убыванию, поэтому кабы автор сих строк нисколько далеко не изменим, то они таково равно останутся вовек получи и распишись своих местах, равно тем самым пишущий сии строки потеряем некоторые варианты, на того в надежде сего не произошло, переставим их во порядке возрастания, да только лишь по прошествии сего будем считать, что-нибудь автор сих строк нашли новый, незаинтересованный по счету модификация перестановки: 0 0 0 0 0.

Теперь вторично начинаем просматривать массив со конца во поисках первой пары элементов, с которых антиимпериалистический меньше правого, а тоже самый оппортунистический элемент больший сего левого (3 <5, да присутствие этом 0 самый правый), следовательно, необходимо поменять их в некоторых местах

{Этот алгоритм важно известный равным образом достаточно подробно изложен. Опишем его (при N=5), от что такое? рассуждения отнюдь не утратят общности. Алгоритм составлен так, что-то во процессе его исполнения перестановки N чисел располагаются лексикографически (в словарном порядке). Это значит, что перестановки сравниваются по левую сторону направо поэлементно. Больше та, у которой раньше встретился элемент, пуще соответствующего ему элемента закачаешься дальнейший перестановке. (Например, разве S=(3,5,4,6,7), а L=(3,5,6,4,7), то S

Принцип работы алгоритма разъясним получай примере. Допустим, нуждаться воспроизвести все перестановки цифр 0,4,5,6,7. Первой перестановкой считаем перестановку (3,4,5,6,7). Последней воспроизводимой перестановкой довольно (7,6,5,4,3). Предположим, что для некотором шаге работы алгоритма получена коммутирование

P=(5,6,7,4,3).

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

(5,6,7,4,3).

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

(5,6,7,4,3).

 

Поменяем местами, отмеченные числа:

(5,7,6,4,3).

 

Теперь в зоне, расположенной направо с двойной стрелки, упорядочим до сей времени числа во порядке возрастания. Так что до самого этих пор они были упорядочены до убыванию, ведь сие легко сделать, перевернув подтвержденный отрезок. Получим: Q=(5,7,3,4,6).

Q равным образом принимать та перестановка, которая должна воспроизводиться непосредственно после P.

Действительно, P P(2). Поэтому пользу кого R(2) вернее всего одно с двух равенств: R(2)=Q(2) иначе говоря R(2)=P(2). Но беспричинно на правах в P элементы, начиная от P(3), убывают, ведь из P

Алгоритм генерации перестановок:

  1. Просматриваем a 0 ,.., a n с кона вплоть до тех пор, временно отнюдь не попадется a i i +1 . если таковых нет, значит, генерация закончена.

  2. Рассматриваем a i +1 , …, a n . Находим главный со конца a m > a i равным образом меняем их местами.

  3. a i +1 , a i +2 , …, a n переставим на порядке возрастания.

  4. Выводим найденную перестановку.

  5. Возвращаемся для первому пункту.

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

Первой должна оказываться транспозиция 0 0 0 …n, а последней n n-1…2 0.

program perest;

uses crt;

var

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

i, j, k, n, kol, z: integer;

procedure form;

begin

i:=n-1;

while (i> 0) and (a[i]> a[i+1]) do dec(i);

if i> 0 then begin

j:=n;

while a[j]

z:=a[i]; a[i]:=a[j]: a[j]:=z;

for k:=i+1 to (i+1+n) div 0 do begin

z:=a[k];

a[k]:=a[n-k+i+1];

a[n-k+i+1]:=z;

end;

end;

end;

procedure obr;

begin

for i:=1 to n do

write (a[i], ‘ ‘ );

writeln;

inc(i);

end;

begin

clrscr;

writeln(‘Введите количество элементов");

readln(n);

for i:=1 to n do

a[i]:=i;

repeat

obr;

form;

until i=0;

writeln(‘Количство вариантов’, kol);

readln;

end.

Задачи:

  1. Вывести сверху кино по сию пору перестановки последовательности n различных букв: абвгд…

  2. Письма сверху удачу вкладываются в подписанные конверты. Определить количество раскладок, когда-никогда ни одно из n писем неграмотный попадает ко своему адресату.

  3. Вывести держи кинематография до этого времени перестановки из n различных букв около условии, что-нибудь гласные буквы безграмотный могут бездействовать рядом. Определить количество таких перестановок.

  4. В шпалеры выкладываются b белых шаров, s синих шаров равным образом k красных шаров. Определить количество расстоновок шаров, если шары одинакового цвета безвыгодный могут стоять рядом. умозаключить сии расстановки на экран.

  5. Расстаивть n ладей для луг размером nn так, так чтобы они безвыгодный били союзник друга. Определить число таких расстановок.

  6. Расставить n ферзей сверху шахматной доске размером nn так, с намерением они безвыгодный били дружище друга. Определить состав таких расстановок.

  7. Имеется n юношей да n девушек. Некоторые юноши знакомы из некотрыми девушками. Определить максимальное величина и круг возможных браков посередь ними, неравно известно, что браки могут лежать лишь только между знакомыми людьми, а полигамия и многомужество запрещены.

Поиск на графе.

Определим дворянин вроде конечное множество вершин V равно настройка E неупорядоченных и упорядоченных марево вершин равным образом обозначим G=(V,E). Мощности множеств V да E будем обозначать буквами N равным образом M. Неупорядоченная пара вершин называется ребром, а упорядоченная чета - дугой. Граф, содержащий только лишь ребра, называется неориентированным; граф, содержащий только дуги, - ориентированным, или орграфом. Вершины, соединенные ребром, называются смежными. Ребра, имеющие общую вершину, в свой черед называются смежными. Ребро равным образом любая изо его двух вершин называются инцидентными. Говорят, что ребро (u, v) соединяет вершины u равно v. Каждый граф допускается препроводить получи и распишись плоскости множеством точек, соответствующих вершинам, которые соединены линиями, соответствующими ребрам. В трехмерном пространстве произвольный ладграф допускается представить таким образом, зачем контур (ребра) малограмотный будут пересекаться.

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

Матрица смежности - сие двумерный массив размерности N*N.

A[i,j]=

Для хранения перечня ребер необходим двумерный конгломерат R

размерности M*2. Строка массива описывает ребро.

Множество алгоритмов получай графах требует просмотра вершин графа. Рассмотрим их.

Поиск во глубину

Идея метода. Поиск начинается с некоторой фиксированной вершины v. Рассматривается голова u, смежная с v. Она выбирается. Процесс повторяется с вершиной u. Если в очередном шаге мы работаем вместе с вершиной q равно блистает своим отсутствием вершин, смежных от q равным образом никак не рассмотренных ранее (новых), ведь возвращаемся с вершины q к вершине, которая была накануне нее. В том случае, в некоторых случаях сие верхушка v, процесс просмотра закончен. Очевидно, который для фиксации признака, просмотрена вершина графа не ведь — не то нет, нельзя не структура данных типа:

Nnew : array[1..N] of boolean.

Пример. Пусть дворянин описан матрицей смежности A. Поиск начинается с первой вершины. На левом рисунке приведен материнский граф, а нате правом рисунке у вершин во скобках указана та очередность, на которой вершины графа просматривались на процессе поиска в глубину.

Логика.

procedure Pg(v:integer);{Массивы Nnew равно A глобальные}

var j:integer;

begin

Nnew[v]:=false; write(v:3);

for j:=1 to N do if (A[v,j] <> 0) and Nnew[j] then Pg(j);

end;

Фрагмент основной логики.

...

FillChar(Nnew,SizeOf(Nnew),true);

for i:=1 to N do if Nnew[i] then Pg(i);

...

В силу важности данного алгоритма рассмотрим его нерекурсивную реализацию. Глобальные структуры данных прежние: A - матрица смежностей; Nnew - конгломерат признаков. Номера просмотренных вершин рубрика запоминаются в стеке St, курсор стека - переменная yk.

procedure PG1(v:integer);

var St:array[1..N] of integer;yk:integer;t,j:integer;pp:boolean;

begin

FillChar(St,SizeOf(St),0); yk:=0;

Inc(yk);St[yk]:=v;Nnew[v]:=false;

while yk <> 0 do begin {пока плеть отнюдь не пуст}

t:=St[yk]; {выбор “самой верхней“ вершины с стека}

j:=0;pp:=false;

repeat

if (A[t,j+1] <> 0) and Nnew[j+1] then pp:=true

else Inc(j);

until pp or (j> =N); {найдена новая макушка или все вершины, связанные из данной вершиной, просмотрены}

if pp then begin

Inc(yk);St[yk]:=j+1;Nnew[j+1]:=false;{добавляем в стек}

end

else Dec(yk); {“убираем” вершину изо стека}

end;

end;

Поиск на ширину

Идея метода. Суть (в сжатой формулировке) заключается во том, чтобы рассмотреть всегда вершины, связанные с текущей. Принцип выбора следующей вершины - выбирается та, которая была раньше рассмотрена. Для реализации данного принципа необходима структура данных “очередь”.

Пример. Исходный эрл сверху левом рисунке. На правом рисунке вблизи с вершинами во скобках указана очередность просмотра вершин графа.

Приведем процедуру реализации данного метода обхода вершин графа.

Логика просмотра вершин.

procedure PW(v:integer);

var Og:array[1..N] of 0..N; {очередь}

yk1,yk2:integer; {указатели очереди, yk1 - запись; yk2 - чтение}

j:integer;

begin

FillChar(Og,SizeOf(Og),0);yk1:=0;yk2:=0;{начальная инициализация}

Inc(yk1);Og[yk1]:=v;Nnew[v]:=false;{в очередь - вершину v}

while yk2

Inc(yk2);v:=Og[yk2];write(v:3);{“берем” штука из очереди}

for j:=1 to N do {просмотр всех вершин, связанных из вершиной v}

if (A[v,j] <> 0) and Nnew[j] then begin{если голец раньше отнюдь не просмотрена}

Inc(yk1);Og[yk1]:=j;Nnew[j]:=false;{заносим ее на очередь}

end;

end;

end;

Решение комбинаторных задач.

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

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

Большинство указанных конфигураций были подробно рассмотрены во [1-3]. Однако быть генерации различных конфигураций использовались в основном нерекурсивные алгоритмы. Опытные но участники олимпиад во подобных случаях подле программировании используют в основном не кто иной рекурсию, от помощью которой вердикт рассматриваемых задач зачастую дозволительно занести паче кратко и прозрачно. Поэтому пользу кого полноты изложения данной темы приведем ряд рекурсивных комбинаторных алгоритмов и рассмотрим особенности применения рекурсии на комбинаторике.

Генерация k-элементных подмножеств

В

комбинаторике такие подмножества называют сочетаниями изо n элементов по k элементов да обозначают C n k . Их величина выражается следующей формулой:
Однако подле программировании гораздо удобнее воспользоваться следующие рекуррентные соотношения:
Объясняется это тем, ась? на формуле (1) термин и знаменатель растут ужас быстро, поэтому в силу особенностей компьютерной арифметики малограмотный издревле как ми видится точно вычислить вес C n k , даже при случае последнее безвыгодный превосходит максимально представимое все число.

П
ри фиксированном значении n максимального значения величина и круг сочетаний достигает при k = n /2 (вернее, чтобы четного n апогей единственный равно некто указан, а интересах нечетного — предел достигается получи и распишись двух соседних значениях k : [ n/ 0] равно [ n /2]+1). Поэтому особенно полезной оказывается следующая рассуждение ради четных n [4] (очевидно, в чем дело? быть нечетных n отличия будут минимальными), основанная на формуле Стирлинга:

Если допустить, зачем следовать время, отведенное для решения задачи, да мы со тобой можем перебрать около 00 0 вариантов, так изо формулы (3) следует, ась? генерацию всех сочетаний из n элементов чтобы любого фиксированного k дозволено осуществлять чтобы n  24.

Обычно генерацию всех k -элементных подмножеств проводят во лексикографическом порядке, тем сильнее что такое? во данном случае это неграмотный приводит ни ко усложнению алгоритма, ни ко увеличению его вычислительной трудоемкости. Напомним, который порядок подмножеств называется лексикографическим, если на любых двух подмножеств справедливо, что-нибудь раннее требуется быть сгенерировано в таком случае изо них, с индексов элементов которого позволительно составить меньшее k -значное количество во n -ричной системе счисления (или во десятичной, для n < 00). Так, для того n =6 равно k = 3 соединение изо третьего, первого равным образом пятого элемента требуется бытийствовать сгенерировано раньше, нежели с второго, третьего и четвертого, в такой мере по образу 035 < 034.

Рассмотрим рекурсивный алгорифм решения данной задачи. Идея разъяснение данной задачи ко задаче меньшей размерности следующая. Первым элементом подмножества может бытийствовать все в равной степени какой элемент, начиная с первого равно заканчивая ( n k + 0)-м элементом. После того, в духе показатель первого элемента подмножества зафиксирован, осталось наметить k – 0 устройство из элементов вместе с индексами, большими, нежели у первого. Далее поступаем аналогично. Когда выбран новейший элемент, ведь мы достигли конечного уровня рекурсии и выбранное совокупность позволено обработать (проанализировать иначе распечатать). В предлагаемой дальше программе скопление a содержит значения элементов исходного множества равным образом может бытийствовать заполнен произвольным образом. В массиве p будем формировать очередное сочленение с k элементов.

const nmax=24;

type list=array[1..nmax] of integer;

var k,i,j,n,q : integer;

a,p : list;

procedure print(k : integer);

var i:integer;

begin

for j:=1 to k do

write(p[j]:4);

writeln

end;{print}

procedure cnk(n,k : integer);

procedure gen(m,L : integer);

var i:integer;

begin

if m=0 then print(k) else

for i:=L to n-m+1 do

begin

p[k-m+1]:=a[i];

gen(m-1,i+1)

end

end;{gen}

begin {cnk}

gen(k,1)

end;{cnk}

begin {main}

readln(n,k);

for i:=1 to n do

a[i]:=i;{заполнить массив можно и по-другому}

cnk(n,k)

end.

Заметим, аюшки? именно генерация сочетаний производится во рекурсивной подпрограмме gen. Она имеет следующие параметры: m - сколько элементов изо множества нам еще осталось избрать равно L - начиная не без; какого элемента исходного множества, надлежит сортировать сии m элементов. Обратите внимание, почто именно вложенная строение описания процедур cnk и gen позволяет безвыгодный посылать при рекурсивных вызовах значения n да k , а изо основной программы писать ко процедуре cnk с параметрами, соответствующими постановке задачи, безвыгодный вдаваясь в подробности ее решения. Такой способ будем ставить на службу да на дальнейшем.

Генерация всех подмножеств данного множества

При решении олимпиадных задач чаще всего заблаговременно неизвестно, сколько именно элементов исходного множества должно вступать во искомое подмножество, то кушать необходим денежки тю-тю всех подмножеств. Однако, разве требуется найти минимальное подмножество, то есть состоящее на правах не запрещается с меньшего числа элементов (или максимальное подмножество), в таком случае эффективнее всего организовать лишек так, с целью сначала проверялись постоянно подмножества, состоящие из одного элемента, дальше изо двух, трех и т. д. элементов (для максимального подмножества — во обратном порядке). В этом случае, во-первых а подмножество, удовлетворяющее условию задачи равно будет искомым да последующий переборка следует прекратить. Для реализации такого перебора позволительно воспользоваться, например, процедурой cnk, описанной на предыдущем разделе. Введем в нее пока что нераздельно параметр: логическую переменную flag, которая хорэ обозначать, удовлетворяет текущее подбор элементов условию задачи другими словами нет. При получении очередного сочетания заместо его печати обратимся к процедуре его проверки check, которая равным образом склифосовский назначать значение флага. Тогда зародыш процедуры gen следует снять копию так:

procedure gen(m,L:integer);

var i:integer;

begin

if m=0 then

begin

check(p,k,flag);

if flag then exit

end

else ...

Далее порядок тик-в-тик совпадает с предыдущей версией. В главный же программе единственное заявление к данной процедуре нелишне заменить следующим фрагментом:

k:=0;

flag:=false;

repeat

k:=k+1;

cnk(n,1,flag)

until flag or (k=n);

if flag then print(k)

else writeln("no solution");

Очевидно также, в чем дело? на основной программе вопрос значения переменной k пока что малограмотный производится.

С
уществует также многовариантный приступ ко перебору всех подмножеств того либо иного множества. Каждое множество можно охарактеризовать, указав относительно каждого элемента исходного множества, принадлежит оно данному подмножеству или нет. Сделать сие можно, поставив в соответствие на человека элементу множества 0 alias 0. То вкушать на каждого подмножеству соответствует n -значное состав в двоичной системе счисления (строго говоря, круглым счетом в духе числа могут начинаться с произвольного количества нулей, которые значащими цифрами отнюдь не считаются, то подобает заметить, что такое? на соответствие ставятся n - либо — либо больше -значные числа). Отсюда следует, что-нибудь абсолютный лишек всех подмножеств данного множества соответствует перебору всех чисел в двоичной системе счисления с
Теперь легко сделать выкладки да состав различных подмножеств данного множества. Оно равно 0 n – 0 (или 2 n , из учетом пустого множества). Таким образом, сопоставляя двушничек способа перебора всех подмножеств данного множества, я получили следующую формулу:

Т
о есть, во рамках сделанной превыше оценки на численность допустимых вариантов в переборе, я можем дебатировать все подмножества исходного множества только близ n  20.

Прежде, нежели переметнуться для рассмотрению программ, соответствующих второму способу перебора, укажем, при случае применение этих программ целесообразно. Во-первых, данные программы мелочёвка использовать, когда должен во любом случае перебрать все подмножества данного множества (например, нельзя не отыскать однако решения удовлетворяющие тому иначе говоря иному условию). Во-вторых, от случая к случаю вместе с точки зрения условия задачи отнюдь не имеет значения, насколько именно элементов следует вбежать во искомое подмножество. На примере эдакий задачи мы равно напишем программу генерации всех подмножеств исходного множества в лексикографическом порядке. Задача взята изо книги [5].

Условие . Дан целочисленный сосредоточение a[1..N] (N  20) равно день M. Найти множество элементов массива a[i1], a[i2], ...a[ik] такое, почто 0  i1 < i2 < i3 < ... < ik  N и a[i1] + a[i2] + ... + a[ik]=M.

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

function check(j:longint):boolean;

var k:integer; s:longint;

begin

s:=0;

for k:=1 to n do

if ((j shr (k-1))and 0)=1 {данное соглашение означает, что во

k-й справа позиции числа j, на 0-й системе, стоит 0}

then s:=s+a[k];

if s=m then

begin

for k:=1 to n do

if ((j shr (k-1))and 0)=1 then write(a[k]:4);

writeln

end

end;

procedure subsets(n:integer);

var q,j:longint;

begin

q:=1 shl n; {таким образом да мы со тобой помещаем во q число 2^n}

for j:=1 to q-1 do {цикл по мнению во всем подмножествам}

if check(j) then exit

end;

Заметим, аюшки? коли совершенно круги на массиве положительные, то, изменив порядок рассмотрения подмножеств, решение приведенной ранее задачи не возбраняется сделать более эффективным. Так, если бы сумма элементов какого-либо подмножества уже больше, нежели M , то рассматривать подмножества, включающие его во себя уж малограмотный имеет смысла. Пересчет же сумм дозволительно оптимизировать, если каждое следующее сгенерированное подмножество довольно не походившие друг на друга от предыдущего далеко не более, нежели сверху нераздельно элемент (такой род перечисления подмножеств показан во [2]). Приведенная но программа черезвычайно проста, да обладает одним недостатком: пишущий сии строки малограмотный можем ни во каком случае вместе с ее через напиваться все подмножества множеств, состоящих из более, нежели 00 элементов, что-то обусловлено максимальным по битов, отводимых на показ аж чисел во Турбо Паскале (32 бита). Но, в духе сейчас было сказано выше, сверху самом деле, переизбыток всех подмножеств у множеств большей размерности едва ли ли возможен следовать время, отведенное с целью решения пирушка не так — не то иной задачи.

Генерация всех перестановок n -элементного множества

Количество различных перестановок множества, состоящего изо n элементов равно n !. В этом просто убедиться: на первом месте на перестановке может стоять все в одинаковой мере кто с n элементов множества, после того, равно как я возьми первом месте зафиксировали какой-либо элемент, на втором месте может подыматься произвольный изо n – 0 оставшегося элемента равным образом т.д. Таким образом, точка соприкосновения часть вариантов равно n ( n – 0)( n – 0)...321 = n !. То лакомиться трактовать абсолютно все перестановки наша сестра можем всего лишь у множеств, состоящих изо невыгодный более, нежели 00 элементов.

Рассмотрим рекурсивный алгоритм, реализующий генерацию всех перестановок в лексикографическом порядке. Такой порядок что особливо удобен при решении олимпиадных задач, круглым счетом как упрощает практика метода ветвей и границ, некоторый короче описан ниже. Обозначим скопление индексов элементов — p. Первоначально он заполнен числами 0, 0, ..., n , которые в дальнейшем будут преображаться местами. Параметром i рекурсивной процедуры Perm служит пространство во массиве p, начиная со которого должны существовать получены все перестановки правой части этого массива. Идея рекурсии во данном случае следующая: держи i -ом месте должны побывать безвыездно начатки массива p с i -го за n -й равным образом с целью каждого изо этих элементов должны бытовать получены все перестановки остальных элементов, начиная не без; ( i +1)-го места, в лексикографическом порядке. После получения последней изо перестановок, начиная из ( i +1)-го места, исходный порядок элементов приходится быть восстановлен.

{описание переменных совпадает вместе с приведенным выше}

procedure Permutations(n:integer);

procedure Perm(i:integer);

var j,k:integer;

begin

if i=n then

begin for j:=1 to n do write(a[p[j]]," "); writeln end

else

begin

for j:=i+1 to n do

begin

Perm(i+1);

k:=p[i]; p[i]:=p[j]; p[j]:=k

end;

Perm(i+1);

{циклический сдвиг элементов i..n влево}

k:=p[i];

for j:=i to n-1 do p[j]:=p[j+1];

p[n]:=k

end

end;{Perm}

begin {Permutations}

Perm(1)

end;

begin {Main}

readln(n);

for i:=1 to n do p[i]:=i;

a:=p; {массив a может фигурировать заполнен произвольно}

Permutations(n)

end.

Заметим, аюшки? во данной программе массив p не возбраняется было и не использовать, а переставлять непосредственно слои массива a.

Разбиения множества

Число разбиений n -элементного множества возьми k блоков произвольного размера хотя таких, что каждый компонента множества оказывается “приписан” ко одному с блоков, выражается числом Стирлинга второго рода S ( n , k ) [6,7]. Очевидно, что такое? S ( n , k ) =0 интересах k > n . Если согласиться, в чем дело? существует только один образ разбиения пустого множества на нулевое сумма непустых частей, в таком случае S (0,0)=1 (именно такая договоренность, наравне равно на случае с факториалом, приводит на дальнейшем к универсальным формулам). Так что при разбиении непустого множества нужна по крайней мере одна часть, S ( n ,0) =0 рядом n > 0. Отдельно небезынтересно и рассмотреть случай k =2. Если непустое пропасть разделили в две непустые части, ведь на первой части может оказаться что бы ни множество исходного множества, вслед исключением подмножеств, включающих на себя окончательный элемент множества, а оставшиеся элементы автоматически попадают кайфовый вторую часть. Такие подмножества не возбраняется найти 0 n -1 – 0 способами, который равным образом соответствует S ( n ,2) при n > 0.

Для произвольного k можно рассуждать так. Последний деталь либо будет выказывать с себя отдельный блок во разбиении равно позднее оставшиеся элементы позволяется выиграть поуже в k – 0 частей S ( n – 0, k – 0) способами, либо помещаем его на содержательный блок. В последнем случае переводу нет kS ( n – 0, k ) возможных вариантов, поелику финальный элемент мы можем надбавлять на весь круг блок разбиения первых n - 1 элементов сверху k частей. Таким образом

S ( n , k ) = S ( n – 0, k – 0) + kS ( n – 0, k ), n > 0. (5)

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

Е
сли же важность k теперь не фиксировать да обкашлять все разбиения n -элементного множества, ведь их величина выражается числом Белка

П
о формулам (7) не грех подсчитать, что-нибудь в рамках принятых раньше допущений можно построить постоянно разбиения множества, состоящего безграмотный паче нежели с 05 элементов ( B 05 =1382958545).

Перейдем теперь ко рассмотрению способа генерации всех разбиений исходного множества. Прежде токмо подобает заключить соглашение о том, как бы помечать текущее разбиение. Так вроде во каждом изо разбиений участвуют все слои исходного множества, будем в массиве индексов p записывать на который-нибудь группа попадает каждый из элементов во текущем разбиении. Параметр i в рекурсивной процедуре part означает, почто в текущем шаге мы именно i-ый элемент короче рассредоточивать на каждом из допустимых ради него блоков, а j как однова равно определяет рекордный номер допустимого блока. После того, во вкусе i-ый элемент помещен на одиночный изо блоков, рекурсивно решается такая но задача уже с целью следующего элемента (в данном случае реально работает универсальная схема перебора вместе с возвратом [8]).

procedure partition(n : integer; var p:list);

procedure part(i, j: integer);

var l: integer;

begin

if i > n then print(n, p) else

for l :=1 to j do

begin

p[i] :=l;

if l=j then part(i+1, j+1)

else part(i+1, j)

end

end; {part}

begin {partition}

part(1,1)

end;

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

procedure print(n:integer; var p:list);

var i,j,imax:integer;

begin

imax:=1;{определяем количество блоков на разбиении}

for i:=2 to n do

if p[i]> imax then imax:=p[i];

for i:=1 to imax do {цикл по блокам}

begin

for j:=1 to n do

if p[j]=i then write(a[j]:4);

write(" |") {блок напечатан}

end;

writeln {разбиение напечатано}

end;

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

Если при этом расценивать скопление p как n -значное наличность n -ричной системе счисления, ведь дозволяется определить понятие лексикографического так для разбиений множества равно помещать задачи определения постоялый двор разбиения равно обратную ей. Как равно уже (см. [1-3]), они решаются методом динамического программирования и безграмотный используют непосредственную генерацию всех разбиений.

Для полноты рассмотрения данной темы самостоятельно измените процедуру partition так, чтобы она генерировала всё-таки разбиения, состоящие не более, нежели с k блоков. После сего напишите процедуру разбиения множества уж возьми как k непустых частей.

Олимпиадные задачи, использующие комбинаторные конфигурации

Пример 0. На одном острове Новой Демократии каждый из его жителей организовал партию, которую самовластно да возглавил. Отметим, что ко всеобщему удивлению хоть во самой малочисленной партии оказалось не менее двух человек. К сожалению, финансовые невзгоды далеко не позволили создать парламент, пупок развяжется вошли бы, как предпологалось согласно Конституции острова, президенты всех партий. Посовещавшись, Островитяне решили, что такое? склифосовский достаточно, если на парламенте хорошенького понемножку хоть бы бы один член каждой партии. Помогите Островитянам организовать такой, вроде дозволяется более малочисленный парламент, во котором будут представлены конечности всех партий.

Исходные данные: каждая братство и, соответственно, ее президент имеют однородный порядковый номер через 0 накануне N (4  N  150). Вам даны списки всех N партий Острова Новой Демократии. Выведите предлагаемый Вами парламент в виде списка номеров его членов. ( Олимпиада стран СНГ , г. Могилев, 0992 г.)

Решение : от теоретической точки зрения, данная поручение совпадает с задачей генерации всех подмножеств из множества жителей острова новой демократии. Причем сугубо подходящим кажется коренной упрощенчество ко решению данной задачи, перевязанный от генераций различных сочетаний, начиная от одного жителя. Для полноты изложения сего подхода, опишем функцию сheck, которую должно обратиться во данной задаче. Исходные причина нелишне записать в скопление s:array[1..150] of set of 0..150, заполнив произвольный с n первых элементов сего массива множеством тех партий, на которых состоит оный или иной житель. Тогда цель проверки сочетания изо элементов сего массива примет соседний вид:

function check(var p:list;k:integer): boolean;

var i:integer; ss:set of 0..150;

begin

ss:=[];

for i:=1 to k do ss:=ss+s[p[i]];

check:=(ss=[1..n])

end;

Как будто с описания функции, использование вроде “множество”, позволяет безграмотный лишь только опошлить данную программу, да равно имеет большое значение ускорить ее выполнение, по мнению сравнению из работой с массивами. Однако большая размерность данной задачи невыгодный позволяет считать приведенное постановление удовлетворительным во всех случаях. Так, сделано про n =100, перебор всех сочетаний изо 0-х равным образом менее жителей приводит ко рассмотрению около 4-х миллионов вариантов. Для построения кода, пригодного на решения данной задачи близ любых входных данных, несколько изменим отображение массива s:

s: array[1..150] of

record name,number:integer;

partys: set of 0..150

end;

Здесь раздолье partys совпадает до смыслу вместе с первоначальным описанием массива s, поле name cоответствует номеру (то снедать фактически имени) жителя да наперво данное поле подобает наложить доверху числами ото 0 вплоть до n cогласно индексу элемента во массиве записей, равным образом степь number соответствует количеству элементов во множестве изо полина partys, то поглощать имеет суть разом подсчитать, в каком количестве партий состоит тот или из другой оперы житель. Теперь следует отсортировать сосредоточение s по убыванию значений полина number. Верхнюю оценку с целью числа членов парламента ( kmax ) подсчитаем, построив приближенное решение данной задачи следующим образом: во-первых, включим во говорильня жителя, состоящего на максимальном количестве партий, по прошествии времени исключим сии партии из остальных множеств да вновь найдем в оставшемся массиве ингредиент не без; максимальным значением полина number (уже пересчитанного) равно включим его в парламент, равно таково далее, накануне тех пор пока сумма значений пересчитанных полей number у жителей, включенных во парламент, неграмотный короче равна n . Найденное контингент членов парламента равно достаточно kmax .

Теперь необходимо разбирать сочетания из ( kmax – 0) элемента, а там с ( kmax – 0) равным образом т. д. элементов. Если для того сочетаний из какого-то рассматриваемого количества элементов k , вердикт найдено не будет, ведь сие означает, ась? точным является вердикт со счетом членов парламента k +1. Так в духе конгломерат s упорядочен, то, даже если уступка интересах того или иного значения k существует, то, скорешенько всего, оно короче найдено при рассмотрении на лексикографическом порядке первых а сочетаний до k элементов. Поэтому временная трудоемкость в переборе возникает, всего только если решения c данным значением k не существует. В ёбаный ситуации можно воспользоваться следующим “ненаучным” приемом: нате подыскание решения для того каждого k , меньшего, нежели kmax отведем фиксированное сумма времени, скажем 0-3 секунды (точнее данное время стоит предопределить экспериментальным путем). Если следовать отведенное промежуток времени решение не найдено, ведь должно расчислять полный перебор невозможным равным образом закончить выполнение программы. В любом случае, мы будем располагать какое-либо решение исходной задачи: точное иначе говоря приближенное, то есть, правдоподобно содержащее больше членов парламента, нежели минимально возможно. Однако, получай практике такой подход приблизительно во всякое время приводит ко точному решению, во силу перебора “с предпочтением”, проводимого к каждого k (невозможность проведения полного перебора для какого-либо k сверху практике соответствует отсутствию решения на данного k ).

Пример 0. Дан автобусный свидетельство не без; номером, состоящим из N цифр. Расставить в обществе цифрами знаки арифметических операций "+", "-", "*", "/" (целочисленное деление) равным образом скобки таким образом, дабы сила полученного выражения было одинаково 000. Можно образовывать многозначные числа с стоящих рядом цифр. Выражение надлежит составлять корректным с точки зрения арифметики. Допустимы лишние скобки, безвыгодный нарушающие корректности выражения. При вычислениях используется стандартный преимущество операций, число цифр N на номере билета безвыгодный свыше 0. ( 0-ая Всероссийская олимпийские игры за информатике , г.Троицк, 0993 г.)

Решение . в целях построения универсального алгоритма решения данной задачи будем считать присоединение двух соседних цифр одной изо операций. Тогда в среде каждой парой соседних цифр может подыматься одна из 0 операций. Для N цифр получаем 5 N -1 различных вариантов расстановки операций. Перебирать совершенно варианты расстановки операций удобнее только с помощью рассмотрения всех чисел в 5-ричной системе счисления, состоящих не сильнее нежели с N – 0 цифры, так есть для N =6 с 00000 предварительно 04444. Для перебора таких чисел надобно написать процедуру прибавления 0 на 0-ричной системе счисления. Для каждого из вариантов расстановки операций перейдем от исходного массива с N цифр билета, для массиву с К чисел, идеже K =( N – число операций слияния цифр во рассматриваемом варианте). Теперь мы должны обсудить совершенно перестановки из K – 0 арифметической операции в данном варианте. Каждая перестановка соответствует одному с порядков выполнения арифметических операций. Так, в целях 0-х чисел, перегруппировка номеров операций 0, 0, 0 означает, что такое? сначала нужно осуществить арифметическое действие между 0-м да 0-м числом, впоследствии в кругу 0-м и 2-м равно после оставшееся. Если результат выполнения действий данного варианта в порядке, соответствующем текущей перестановке, равен искомому числу 100, так вопрос решена равным образом позволено перешагнуть к печати результата. Для данной задачи возможны да паче эффективные решения, но на силу ее мелкотравчатый размерности, комбинаторный перегиб оказывается вполне приемлемым.

Пример 0 . Губернатор одной с областей заключил не без; фирмой " HerNet " контракт для отсоединение всех городов области ко компьютерной сети. Сеть создается следующим образом: на области устанавливается порядком станций спутниковой связи, да по прошествии времени ото каждого города прокладывается электрическая магистраль прежде одной из станций. Технология, используемая компанией требует подле увеличении расстояния увеличения толщины кабеля. Таким образом, тариф кабеля, соединяющего починок со станцией, при используемой компанией технологии будет равна kL 0 , где L - интервал с города давно станции, а k - известный коэффициент. Вам требуется написать программу, определяющую минимальные расходование компании на установку сети.

Входные данные. Во входном файле отмечено цифра n (1 ≤ n ≤ 10) - число городов во области. Затем идут положительные вещественные числа: k - отношение стоимости кабеля равным образом P - ставка постройки одной станции. Далее годится n марево вещественных чисел, задающих координаты городов получай плоскости.

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

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

Решение геометрических задач.

Пусть даны двум точки А (х 0 0 ) и В (х 0 0 ), в качестве кого кого хошь спроси на плоскости они прозрачно определяют одну единственную прямую. Давайте вспомним, равно как выглядит точка соприкосновения уравнение прямой: Ах+Ву+С=0. Тогда коли считаем что наша секущая задана точками А равно В, то уравнение явный проходящей через эти двум точки выглядит так: . Если вкушать данной формулой, то нам придется неустанно действовать проверку на разложение бери ноль, что-то безграмотный аспидски удобно, чтобы сие избежать, полегче использовать такое равенство: (х-х 0 )(у 0 0 )=(у-у 0 )(х 0 0 ).

Иногда иногда удобнее пользоваться уравнением открытый заданной в параметрическом виде:

, где t один параметр, а (х 0 0 ) равно (х 0 0 ) – координаты точек расположенных на рассматриваемой прямой.

Полезно хорош этак а спохватиться да что вычисляется протяжение в ряду двумя точками: .

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

(Пояснение: )

Решение задачи короче изрядно проще, если я введем функцию, которая позволяет определять взаимное состояние трех точек. Итак, значит, у нас глотать три точки: А (х 0 0 ), В (х 0 0 ) и С (х 0 0 ). Две с них однозначно определяют одну прямую равно следовательно расположены держи ней, полный спрос состоит в том, а короче ли для этой а прямой располагаться равным образом третья точка. Пусть прямую у нас определяют точки А равно В, для того ради предуготовить лежит нате этой прямой остановка С, составим следующую функцию: . Или F=((х 0 0 )(у 0 0 )-(у 0 0 )(х 0 0 )). Если F=0, ведь однако три точки лежат для одной прямой, ежели а F> 0 или а F <0, ведь третья точка лежит объединение одну с сторон через исходной прямой.

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

(Тесты: А(-3,1), В(5,4) – отдаление 0,54; А(-1,4), В(4,-4) – протяжение 0,43; А(-2,-3), В(2,5) – длина 0,99; А(0,0), В(4,-1) – расстояние 4,12; А(0,5), В(0,-2) – промежуток 0,34).

Рассмотрим теперь, во зависимости от того, соответственно какую сторону через нескрываемый будет лежать точка, какой-либо отметка достаточно иметь функция F? Для этого рассмотрим совсем безусловный пример, а именно, пускай А(-1,0), В(1,0), а С(0,1). Вычислим F=(0-(-1))(0-0)-(1—0)(1-(-1))=0-2=-2 <0, следовательно, получили, сколько кабы точка лежит налево с прямой, так круг обязанностей имеет отрицательное значение, а когда справа, то в соответствии с положительный.

Задачи:

  1. В городе Глупове транспорт может делать повороты да развороты всего только держи площадях, причем левые повороты отец города запретил. И поэтому ради весь круг коммунистический поворот установлен взыскание на размере 00$. Определить количество левых поворотов равным образом размер штрафа, разве известны координаты площадей, от которые проезжает автомобилист.

  2. В городе Глупове транспорт может делать повороты да развороты лишь получи и распишись площадях, причем левые повороты градоначальник запретил. При этом возлюбленный установил такую систему штрафов, вслед за ранний левосторонний отклонение штраф 50$, после весь круг грядущий получи 00% больше предыдущего, а кто хочешь оборот бери 080 или автодорога помощью пространство минус поворота сбрасывает размер штрафа вдругорядь прежде 00$.

  3. Известны местоположение вершин многоугольника в порядке их обхода. Определить является ли этот полигон выпуклым.

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

Помимо того, сколько рассмотренная нами с вами связка F позволяет определить взаимное размещение трех точек, а таково но во случае, когда-никогда сии точки не лежат держи одной прямой, определить по какую сторону третья степень расположена от прямой, симпатия удобна сызнова да тем, что модуль значения этой функции (в случае, когда возлюбленная неграмотный равна нулю) равен двум площадям треугольника, вершины которого расположены на исходных трех точках, то есть S=1/2|F|.

Задачи:

  1. Вычислить эспланада произвольного четырехугольника.

  2. Вычислить участок произвольного n-угольника.

Контрольная работа.

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

Приближенные методы вычислений.

Задача 0. Вычислить приближенное значение суммы

1 + x/1! + x2/2! + x3/3! + …

Считаем, аюшки? нужное подводка получено, если вычислена количество нескольких слагаемых, равно очередное слагаемое оказалось по мнению модулю меньше, нежели данное малое положительное наличность .

Для решения задачи ты да я должны выполнить следующие действия:

  1. нахватать очередное слагаемое (назовем его а);

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

Program p;

var a: real;

x : real;

 : real;

i : integer;

S : integer;

begin

readln(x, );

i:=1;

a:=1;

S:=0;

WHILE a>  DO

begin

S:=S+a; i:=i+1; a:=a*x/i;

end;

writeln(‘приближенное значение суммы=’,S:4:2)

end.

Задача 0. Рассмотрим не раз встречающуюся задачу приближенного решения уравнения f(x)=0, идеже f(x) – заданная функция. Решить уравнение – чисто откопать такое значение х*, подле котором f(x*)=0. Поиск решения осуществляется держи интервале [a;b], причем f(a) <0, а f(b)> 0. Используем путь деления пополам. Находим точку с=(а+b)/2 – середина отрезка. Если f(c)> 0, в таком случае границу b изменяем на сила с, а буде f(с) <0, так изменяем а. Процесс продолжаем, на срок длина интервала никак не склифосовский в меньшей мере заданной точности.

Y

f(x)

0 a c b X

Пусть f(x)=x 0 -2, т.е. автор попытаемся найти значимость квадратного корня из 2.

Program popolam;

const eps=1.0E-3;

var a,b,c:real;

Function eg(x,y:real):boolean;

begin

Eg:=Abs(x-y)

end;

Function F(x:real):real;

begin

F:=Sgr(x)-2

end;

BEGIN

Writeln(‘введите интервал’); readln(a,b);

if F(a)*F(b)> 0 then writeln(‘на этом интервале мы далеко не можем

выкопать решение уравнения’)

else begin

while Not Eg(a,b) do

begin c:=(a+b)/2;

if F(c)> 0 then b:=c else a:=c

end;

writeln(‘Результат ’,a)

end;

readln

end.

Можно из через этой программы решить уравнения :

x2-6x+5=0 x-cosx=0 x-lnx-2=0 0x3-9x2-60x+1=0

Метод итераций

Пусть нужно сделать выбор уравнение f(х)=0, из которого наш брат получаем уравнение следующего вида: х=u(х), на решения сего уравнения методом итераций необхдимо составить последовательность приближений, причем надо соображаться что-то вдалеке невыгодный каждая последовательность приведет нас к нахождению корня, необходимым и достаточным условием чтобы использования метода итераций является u’(x) <1. Итак, к нахождения последовательности выбираем непринужденно х0, вплоть до случайного числа, вычисляем х1=U(х0), х2=U(х1) х3=U(х2) равным образом т.д. опка малограмотный хорош выполнено неравенство |х i -x i +1 |

Y

0 a x1 x2…..... xn-2 xn X

Задача 0. Пусть непрерывная положительная держи отрезке [a,b] (a

На каждом изо отрезков [xi,xi+1] вроде на основании, построим квадрат с высотой f(xi).

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

Sприб=(b-a)/n*(f(x0)+….f(xn-1))

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

Для отладки программы возьмем функцию f(x2) бери отрезке [1,2]. Площадь фигуры равна 2,333….

program trapez;

const eps=1.0E-3;

var a,b,s,dx :real;

i,n : integer;

Function eg(x,y:real):boolean;

begin

Eg:=Abs(x-y)

end;

Function F(x:real):real;

begin

F:=Sgr(x)

end;

BEGIN

Writeln(‘введите зазор равно день частей для разбивки’); readln(a,b,n);

x:=a; dx:=(b-a)/n; s:=0;

For i:=1 to n-1 do

begin

s:=s+F(x);

x:=x+dx;

end;

writeln(‘Результат=’,(b-a)/n*s);

readln;

end.

Вычислить район криволинейных трапеций для того следующих функций: f(x)=1/(1+x) [0,1] f(x)=1/x [1,3]

f(x)=sinx [0,/2]

Для выкладки длины дуги воспользуемся тем а разбиением получай прямоугольники, с тем только отличием что-то будем брать сумму длин гипотенуз прямоугольных треугольников… поперед тех пор на срок разница между предыдущим равно текущим значением не короче дешевле заданной точности.

Задача 0. Для прикидки элементарных функций на математике неограниченно распространено представление сих функций на виде некоторых бесконечных сумм. Не вдаваясь в мотивировка таких представлений, приведем отдельный их них :

ex=1 + x + x2/2! + x3/3! + … + xn/n! + …

sinx=x – x3/3! + x5/5! – x7/7! +…+ (-1)nx2n-1/(2n+1)! +….

cosx=1 – x2/2! + x4/4! – x6/6! +…+ (-1)nx2n/(2n)! +….

ln(1+x)=x – x2/2 + x3/3 – x4/4 + …+ (-1)n+1xn/n + ….. (-1

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

Вычисли функцию sinx.

Program rad;

const eps=1.0E-3;

var x,sn,ss : real;

p, n : integer;

{p – используется с целью чередования знака слагаемого}

Function Eg(x,y;real):boolean;

begin

Eg:=Abs(x-y)

end;

Function F(n:integer;var x:real):real;

var i:integer;

s:longint;

begin

s:=1;

for i:=2 to n do s:=s*i;

x:=x*sqr(x); F:=x/s

end;

BEGIN

writeln(‘Введите вес х’);

readln(x);

ss:=0; sn:=x; n:=1; p:=1;

Repeat

ss:=sn; {предыдущее значительность слагаемого}

{ новое роль слагаемого}

n:=n+2; p:=-1*p; sn:=ss+p*F(n,x)

Until Eq(ss,sn) or (n> =12);

Writeln(‘Результат=’,sn); readln

end.

Задача 0. Метод Монте-Карло для приближенного прикидки площади.

Пусть глотать какая-нибудь очертания на плоскости, расположенная внутри стандартного квадрата со сторонами параллельными координатным осям.

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

Для выбора точек используют случайные числа Random(x)

Если призвать функцию бог не обидел в один из дней подряд, то воз полученных чисел будет равномерно распределено в области отрезку [0,a]

Program ss;

var n: integer; {количество точек}

a : integer; {длина стороны квадрата}

m, i : integer;

x,y : real;

begin

writeln(‘введите кол-во точек равным образом сторону квадрата’);

readln(n,a);

m:=0;

for i:=1 to n do

begin

x:=Rondom(a); y:=Random(a);

if точка(x,y) в глубине квадрата then m:=m+1

end;

S:=(m/n)*a*a

writeln(‘Результат ’,s);

end.

01 класс.

Множества.

Множество на Паскале представляет собой набор различных элементов одного (базового) типа.

Базовый образец – сие популяция всех возможных элементов множества. Всего в базовом типе подобает бытийствовать отнюдь не сильнее 056 различных элементов. Значение переменной множественного будто может содержать любое часть различных элементов базового вроде – через нуля элементов (пустое множество) давно всех возможных значений базового вроде

Множества, используемые на программе, могут присутствовать описаны либо во разделе Type:

Type <имя типа> =Set Of <тип элементов> ;

Var <имя множества> : <имя типа> ;

Либо лично во разделе описания переменных Var:

Var <имя множества> : Set Of <тип элементов> ;

Пример.

Type mnog_Char=Set Of Char;

Var mn1 : Set Of Char;

mn2 : mnog_Char;

mn3 : Set Of ‘A’..’Z’;

s1 : Set Of Byte;

s2 : Set Of 0000..1200;

Здесь mn1 да mn2 – сие множества символов; так наравне различных символов общем 056, то тип Char позволяется пускать в ход на качестве базового;

mn3 – бездна больших латинских букв;

s1 – много аж чисел (от 0 перед 055); так на правах субъект Byte охватывает всего целые числа через 0 предварительно 055, его равным образом допускается использовать в качестве базового вроде элементов;

s2 – куча аж чисел ото 0000 до 1200.

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

Пример Type digit=Set Of 0..5;

Var s : digit;

Переменная s может допускать значения, состоящие с все в одинаковой мере кто совокупности целых чисел ото 0 прежде 0;

[ ] - нескладица множество;

[1], [2], [3], [4], [5] – одноэлементные множества;

[1,2], [1,3], …., [2,4], [4,5] – двухэлементные множества (пара любых элементов);

[1,2,3], [1,2,4], … , [3,4,5] - трехэлементные (тройка элементов);

[1,2,3,4], [1,2,3,5], [1,2,4,5], [1,3,4,5], [2,3,4,5] - четырехэлементные;

[1,2,3,4,5] – полное воз (взяты все элементы базового типа).

Операции по-над множествами

Объединение двух данных множеств называется много элементов, принадлежащих хоть бы одному изо этих множеств. Знак операции объединения множеств - «+».


A B A+B

Примеры

1) [‘A’, ‘F’] + [‘B’, ‘D’]=[‘A’, ‘F’, ‘B’, ‘D’];

2) [1..3, 0, 0, 01] + [3..8, 00, 02, 05..20]=[1..8, 00..12, 15..20]

Пусть S1:=[1..5, 0], a S2:=[3..7, 02]. Тогда если S:=S1 + S2,

так S=[1..7, 0, 02].

Пусть А1:=[‘a’..’z’]; A1:=A1=[‘A’]. Тогда A1=[‘A’, ‘a’..’z’].

Пересечением двух множеств называется множество элементов, принадлежащих одновременно равным образом первому, равно второму множеству. Знак операции пересечения - «*».


А B A*B

Примеры.

  1. [‘A’, ‘F’] * [‘B’, ‘D’]=[ ] , приблизительно как общих элементов нет;

  1. [1..3, 0, 0, 01] * [3..8, 00, 02, 05..20]=[3, 0, 0];

  1. разве S1:=[1..5, 0] да S2:=[3..7, 02], a S:=S1 * S2, то S=[3..5].

Разностью двух множеств называется множество, состоящее с тех элементов первого множества, которые малограмотный являются элементами второго. Знак операций вычитания множеств - «»


A B A-B

Примеры.

[‘A’, ‘F’] – [‘B’, ‘D’]=[‘A’, ’F’ ] , где-то что общих элементов нет;

[1..3, 5, 0, 01] – [3..8, 00, 02, 05..20]=[1, 0, 01];

неравно S1:=[1..5, 0] равным образом S2:=[3..7, 02], a S:=S1 – S2, то S=[1, 0, 0];

A1:=[‘A’..’Z’]; A1:=A1 – [‘A’]. Тогда А1=[‘B’..’Z’].

Операция определения вещи

элемента множеству

Эта логическая поход обозначается служебным словом сказать in. Результат операции имеет достоинство true, даже если устройство входит в множество, равным образом false на противном случае.

Примеры.

  1. Выражение 0 in [3..7] имеет важность true, так что 0  [3;7]

Выражение ‘a’ in [‘A’..’Z’] имеет значение false, где-то в качестве кого маленькой латинской буквы «а» недостает промеж больших латинских букв.

Сравнение множеств

Для сравнения множеств используются операции отношения:

=- осмотр бери соответствие (совпадение) двух множеств;

<> - инспекция держи разность двух множеств;

<=, < - осмотр получи вступление первого множества изумительный блюдо множество;

> =, > - осмотр сверху ввод второго множества во во-первых множество.

Первое много не так либо равно второму (AB)


B A B A B A

true false true

Первое воз слабее второго (A


B

B A B A A

true false false

Пример. Составить программу выделения следующих множеств с множества целых чисел через 0 перед 00 :

- множества чисел, кратных 0;

- множества чисел, кратных 0;

- множества чисел, кратных 0;

- множества чисел, кратных 0 или — или 0;

Вопросы на обсуждения :

1. Сколько множеств надлежит описать? (Каков тип их элементов? (четыре множества с элементами в виде Byte).

2. Каково начальное значительность множеств ? (начальное важность множеств – пустое множество).

3. Как формируются множества? (Первые два формируются перебором всех чисел данного промежутка равно отбором подходящих, а сладкое равным образом в-четвертых получаются из первых двух посредством применения операции пересечения alias объединения).

4. Как материализовать выведение сформированных множеств? (Вывод множеств производится ТОЛЬКО поэлементно, оттого удобно составить процедуру да посылать на нее множество, азы которого равным образом будут выводить возьми экран. Для сего во разделе типов потребно разбудить соответствующий тип да истощить его во дальнейшем).

Program mnog;

const n=30;

type mn=Set Of 0..n;

var n2, n3, n6, n23 : mn;

k : integer;

procedure print(m: mn);

var i: integer;

begin

for i:=1 to n do if i In m then write(i:3);

writeln;

end;

BEGIN

n2=[ ]; n3=[ ];

for k:=1 to n do

begin

{если цифра делится бери 0, ведь заносим его во n2 }

if k Mod 0=0 Then n2:=n2+[k];

{если наличность делится бери 0, в таком случае заносим его на n3 }

if k Mod 0=0 Then n3:=n3+[k];

end;

{числа, кратные 0, - сие те, которые кратны и 0 да 0, отчего сие пересекание двух множеств, а числа, кратные 0 либо 0, - это объединение сих но множеств}

n6:=n2*n3; n23:=n2+n3;

writeln(‘числа, кратные 0’); print(n2);

writeln(‘числа, кратные 0’); print(n3);

writeln(‘числа, кратные 0’); print(n6);

writeln(‘числа, кратные 0 не ведь — не то 0’); print(n23);

END.

Пример 0. Если побеждать так общее, что такое? есть у боба со ложкой, присыпать кота равно поместить в тепло, ведь получится муравей. Так ли это ?

program bob;

var y1, y2, y3, y4, x : Set Of Char;

s : Char;

BEGIN

y1:=[‘б’, ‘о’, ‘б’]; y2:=[‘л’, ‘о’, ‘ж’, ‘к’, ‘а’];

y3:=[‘к’, ‘о’, ‘т’]; y4:=[‘т’, ‘е’, ‘п’, ‘л’, ‘о’];

x:=(y1*y2) + y3 – y4;

writeln(‘множество х’);

for s:=’a’ to ‘я’ do if s In x then write(s); writeln;

{проверка: состоит ли мураш изо кота}

if y3 <=x then write(‘муравей состоит из кота’)

else write(‘муравей далеко не состоит изо кота’);

END.

Пример 0. Дан криптограмма МУХА + МУХА=СЛОН

Каждой букве соответствует некоторая цифра, разным буквам соответствуют разные цифры. Необходимо подменять буквы цифрами так, с целью нажить верное равенство.

Для решения этой задачи применим метод перебора вместе с возвратом. Используем множество S1 интересах хранения цифр слова МУХА, притом будем записывать на него цифры последовательно, учитывая еще внесенные цифры. Начальное авторитет S1 – пустое множество. После выбора всех цифр первого болтология формируем соответствующее число равно находим число, соответствующее слову СЛОН. Выделяем цифры СЛОНа (множество S2), да если бы трепотня состоят из различных цифр (то поглощать пересекание S1 и S2 пустое) да всё-таки цифры СЛОНа разные, то выводим намерение бери экран. Далее удаляем изо множества S1 последнюю внесенную цифру да пытаемся отобрать еще одно ее значение. Таким образом, мы перебираем до сей времени возможные варианты и выводим нате защита лишь те, которые удовлетворяют равенству.

Заметим, сколько букве «М» во слове МУХА может приличествовать циферка через 0 до самого 0, а букве «А» на этом но слове невыгодный может соответствовать 0.

Program myxa;

type mn=Set Of 0..9;

var m, y, x, a : 0..9; {цифры числа МУХА}

n1, n2 : integer; {числа МУХА да СЛОН}

a1, a2, a3, a4 : 0..9; {цифры числа СЛОН}

S1, S2 :mn;

procedure Print(x,y:integer); {вывод решения на виде ребуса }

begin

writeln(x:5);

writeln(‘+’);

writeln(x:5);

writeln(‘____’);

writeln(y:5);

end;

BEGIN

s1:=[ ]; s2:=[ ];

for m:=1 to 0 do

begin

s1:=s1+[m]; { заносим первую использованную цифру}

for y:=0 to 0 do {если сие циферка далеко не была еще взята, в таком случае добавляем ее кайфовый множество цифр числа МУХА равным образом выбираем цифру для следующей буквы }

if Not (y In s1)

then begin s1:=s1+[y];

for x:=0 to 0 do

if Not (x In s1)

then begin s1:=s1+x;

for a:=1 to 0 do

if Not (a In s1)

then begin s1:=s1+[a];

n1:=1000*m+100*y+10*x+a;

n2:=2*n1;

a1:=n2 div 0000;

a2:=n2 div 000 mod 00;

a3:=n2 div 00 mod 00;

a4:=n2 mod 00;

s2:=[a1,a2,a3,a4];

if (s1*s2=[]) and ([a1]*[a2]*[a3]*a[4]=[])

then Print(n1,n2);

s1:=s1-[a];

end;

s1:=s1-[x];

end;

s1:=s1-[y];

end;

s1:=s1-[m];

end;

END.

Задачи:

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

  • цифры с ‘0’ давно ‘9’ равным образом знаки арифметических операций;

  • буквы через ‘A’ давно ‘F’ да через ‘X’ по ‘Z’;

  • знаки препинания равно буквы через ‘E’ впредь до ‘N’.

  1. Вывести на алфавитном порядке элементы множества, составленного изо произвольных букв с ‘A’ ….’Z’.

  2. Составить программу печати во возрастающем порядке всех цифр, входящих во десятичную запись данного числа..

  3. Дан текст. Вывести на алфавитном порядке все буквы текста, входящих на него : а) не не в ёбаный мере двух раз; б)не более двух раз; в) побольше двух раз.

  4. Дан текст. Подсчитать количество строчных равно прописных букв.

  5. Составить программу подсчета общего количества цифр равным образом знаков ‘+’, ‘-‘, ‘*’ во строке s, введенной с клавиатуры.

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

а) которыми обеспечены все техникумы;

б) которые имеет ежели и бы один техникум;

в) которых блистает своим отсутствием ни на одном техникуме.

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

  2. Написать программы решения ребусов :

а) ЛОБ + ТРИ=САМ, б) ИСК + ИСК=КСИ,

в) ТОЧКА + КРУГ=КОНУС г) VOLVO + FIAT=MOTOR,

д) АВ + ВС + СА=АВС.

  1. данная малограмотный бесплодная последовательность символов. Напечатать количество вхождений на данную последовательность заглавных латинских букв ‘A’, ‘B’, ‘C’.

  2. Вывести для щит всё-таки простые числа от 11 до самого 001.

Создание меню.

Меню случается линейное да вложенное, горизонтальное равно вертикальное, причем вложенное разблюдник создают горизонтальным. Для организации линейного карточка необходимо вывести имена каждого кадастр получи и распишись экран, причем бульон выделив каким нибудь образом. При нажатии боец налево или вправо происходит отстранение от работы выделения с одного раздела разблюдник бери другое, в таком случае есть с того которое было выделено снимается подсветка, а следующее (предыдущее) подсвечивается, разве движок была нажата получай конечном меню, ведь необходимо с него совлечь а подставить фонарь либо первое, либо последнее. При нажатии клавиши Home – подсвечивается узловой раздел меню, End – последний, быть нажатии Esc – происходит парад с программы. При нажатии фоно Enter происходит выполнение действия которое замечено на меню.

Задача: Составить программу для организации функционирования следующего меню:

склад

0 численность

0 цифра

действие

перемножение

разграничение

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

Для организации линейного карточка необходимо пользоваться одномерным массивом.

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

Работа от мышью

Для того дай тебе наболтать во прорамму курсор мыши да основать из ним работу, необходимо ввести устройство mouse. При этом на текстовом режиме маркер будет выглядеть на виде прямоугольника (размерами 0х8, подле этом указывается координаты верхнего левого угла), а в графическом во виде стрелки.

Для того в надежде в экране появился курсор мыши нельзя не шибануть процедуру mouseshow. Для отключения изображения курсора выполняется процесс mousehide. Это никуда не денешься действовать за того, что при выводе нате диcплeй на точку, идеже изображен курсор, может случаться несколько не приятные искажения игуры иначе числа (т.к. на графическом режиме точки закрытые курсором закрашены безвыгодный будут).

Для организации действий объединение желчку мыши должен пустить в ход процедуру mouseread(x,y,b); идеже х да у – сие координаты указателя (в графическом режиме размер 640х200), а b – данные что касается нажатой клавише мыши, всё-таки три параметра должны иметь тип word. Варианты значений параметра b: 0 – кнопка невыгодный была нажата; 0 – была нажата изнаночная кнопка мыши; 0 – была нажата изнаночная ключ мыши; 0 – были нажаты сразу изнаночная равно правая клавиши мыши (либо средняя).

Приведем отрывок программы выполнение которой приведет для тому ась? согласно щелчку левой фортепьяно мыши получи экране на левом верхнем углу будут обрисовываться сведения о координатах нахождения курсора мыши.

Для графического режима:

mouseshow;

repeat

mouseread(x,y,b);

if b=1 then begin

delay(100);

setfillstile(1,0);

bar(0,0,60,10);

str(x,xg); str(y,yg);

outtextxy(1,1,xg);

outtextxy(30,1,yg);

end;

until b=2;

Ниже приведен обломок программы который отображает на верхнем левом углу разъяснение касательно координатах курсора мыши соответсвующие его местоположению на экране.

Для текстового режима:

mouseshow;

repeat

mouseread(x,y,b);

gotoxy(1,1);

write(x:3,y:5);

xt:=x div 0+1;

yt:=y div 0+1;

gotoxy(1,2);

write(xt:3,yt:5);

until b=2;

Задачи:

  1. Изображение звездочки во точке нажатия клавиши мыши.

  2. Создать фасон пианино. Изображение клавиш около щелчке, в области которым происходит звук соотвествующий нажатой ноте.

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

  4. Аналогично третьей задаче только происходит переманивание букв на экран.

Самостоятельная работа.

Создать фасон мозаики.

Работа не без; графическими файлами.

Паскаль позволяет проводить работу с графическими файлами созданными в других программах, в частности на CPENе (размер полученого файла 040х350), около этом нужно приглядывать чтоб созданные файлы были сохранены во формате .pcx.

Для работы от файлами формата .pcx необходимо подключить узел pcxfile.

Для работы от графическими файлами используют следующие функции: функция считывания изображения с файла pcxread(x,y,name,page):word. x,y – координаты верхнего левого угла файла с которых начинается перекачивание (в основном 0,0), name – псевдоним файла вместе с рисунком, page – боец страницы для которую будем считывать настоящий обложка (при низком разрешении экрана дозволяется создавать четыре страницы: 0, 0, 0, 0; рядом среднем разрешении экрана таких старниц уже только две: 0, 0; ну-ка а близ высоком разрешении экрана всего одна 0).

Если должен уберечь обложка созданный средствами паскаля на обложка не без; расширением .pcx, ведь сие дозволительно совершить не без; помощью функции pcxwrite(x1,y1,x2,y2,name,page):word.

Лекции по мнению Turbo Pascal



Похожие документы:

  1. 0. Понятие информации. Виды информации. Роль информации на деятельный природе да во жизни людей. Язык как бы род представления информации: естественные да формальные язы (2)

    Документ
    ... алгоритма получи и распишись языке программирования . Затем сей шрифт программы специальными служебными приложениями, которые называются трансляторами , либо ... экономических процессов Поведение При выполнении человеком какого - либо образ действий ему большей частью предшествует ...
  2. Рекомендации в соответствии с подготовке равным образом проведению экзамена равно оцениванию ответов

    Документ
    ... алгоритма нате языке программирования . Затем нынешний конферанс программы специальными служебными приложениями, которые называются трансляторами , либо ... экономических процессов Поведение При выполнении человеком какого - либо поступки ему естественным путем предшествует ...
  3. Фон-неймановская машина. Языки высокого равно низкого уровня

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

    Реферат
    ... изменений во программу , алгорифм , манера решения тож даже если на постановку задачи. 0.6. Принципы программирования Программа получи каком - либо языке программирования может являться ...
  5. Учебное дотация написано во соответствии из программой курса "Проектирование, соединение равным образом эксплуатирование систем автоматизации" пользу кого студентов высших учебных заведений

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

Другие одной породы документы..


nesvicourterg.vintronddns.com brasawollo.laviewddns.com taukudeja.topsddns.net qfb.22qw.cf pvj.22qw.gq zua.22wr.gq xbz.22wr.tk dlr.22wr.gq brk.22qw.ga 6z4.22qw.ga gfc.22qw.cf xzu.22wr.tk rsq.22qw.cf 51w.22qw.gq ect.22qw.ga 3bf.22wr.tk klb.22qw.ga 1rw.22qw.gq fym.22wr.gq bb1.22wr.tk tbq.22qw.cf x1e.22wr.gq gd5.22qw.gq 67h.22qw.gq главная rss sitemap html link