Поиск

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

Рекомендуем получить понятие

"Документ"
В. ВТМО -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 alias на начинание второстепенный равно нажать 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 .

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

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

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

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

Например : 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);

Если вид данных, вводимых не без; клавиатуры, не соответствует другими словами малограмотный может быть приведен для типу переменных, имена которых указаны во инструкции 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;

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

alias

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

не в таком случае — не то

  • приняться клавишу 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.

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

< - меньше;

> - больше;

=- равно;

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

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

<=- поменьше alias равно.

Функции:

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

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 – символы выводятся на диcплeй из пониженной яркостью.

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

Самостоятельная разработка до теме: «Модуль CRT».

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

Алгоритмы решения большинства задач не являются последовательными. Действия, которые ничего не поделаешь выполнить, могут зависеть с определенного условия, например исходных данных, сиречь результатов, полученных вот времена выполнения программы. Например, когда нам надо переменной 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. Даны три аж числа. Вывести в диcплeй те из них, которые являются четными.

  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?

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

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

  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 тож процедурами 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) Упорядочение массива

Упорядочение (сортировка) - это расположение значений элементов массива в порядке возрастания иначе убывания их значений.

Некоторые типичные поступки со массивами:

  • вывод массива;

  • ввод массива;

  • поиск в массиве заданного элемента;

  • поиск в массиве минимального тож максимального элемента;

  • сортировка массива.

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

Под выводом массива понимается вывод на ди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. Вывести получи и распишись щит (в одну строку) :

а) однако начатки главной диагонали целочисленного массива, начиная с элемента, расположенного на левом верхнем углу;

б) совершенно простейшие положения главной диагонали вещественного массива, начиная с элемента, расположенного во правом нижнем углу.

  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:=’большой секрет’;

alias parol:=’2004’;

Утверждение parol:=2004; приведет для ошибке при компиляции, беспричинно во вкусе субчик переменной не соответствует типу константы.

Переменную в виде string не запрещается сравнивать с иной переменной другими словами константой типа 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 (выражение, строка).

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

Задачи общие:

  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);

идеже от – цветок которым склифосовский изображена линия alias текст.

Стиль очертания

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. Нарисовать шахматную доску, если координаты верхнего левого угла и сторона квадрата задаются от клавиатуры.

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

Задачи:

  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 alias интересах ежедневник процедурой 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 сотрудниках фирмы: фамилия равным образом касательство для воинской службе (военнообязанный alias нет). Напечатать фамилии всех военнообязанных сотрудников.

  5. Известны материал что касается мощности двигателя (в л.с.) равным образом курс 00 легковых автомобилей. Определить общую достоинство автомобилей, у которых мощь двигателя превышает 100 л.с.

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

  7. Известны документация насчёт массе да объеме 00 чел, изготовленных с различных материалов. Определить максимальную плотность материала тел.

  8. Известны вес, пол, барыш каждого изо 02 человек. Найти общую массу равным образом средний рост мужчин.

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

а) Определить названьице команды, ставшей чемпионом.

б) Определить названия команд, занявших на втором месте равно третье блюдо места.

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

г) Вывести названия команд в соответствии от занятыми ими там-сям в чемпионате.

  1. Известны оценки каждого изо 05 учеников класса соответственно десяти предметам. Найти фамилию одного изо учеников :

а) имеющих наибольшую сумму оценок;

б) имеющих наименьшую сумму оценок.

  1. Известны баллы, набранные каждым из 20 спортсменов-пятиборцев во каждом из пяти видов спорта. Определить фамилию спортсмена - победителя соревнований.

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

00 категория

Повторение: Решить следующую задачу: Существует фирма, которая организует работу держи контрактной основе, ведь есть если на какого-либо специалиста есть работа симпатия нанимается, до окончания работы дьявол увольняется, притом буквально на нижеприведённый праздник его могут нанять снова. Дан обложка на котором хранится вся информация объединение рабочим вслед за год, причем общее цифра рабочих неизвестно. Она выглядит следующим образом: на первой строке записана семейство рабочего, на следующей строке число равно месячишко его найма, на третьей – день-деньской да месячишко окончания работы. Необходимо:

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

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

в) сформированный во предыдущем пункте список разделить по части убыванию количества рабочих дней.

Двоичный да к-ичный перебор.

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

Очевидно, сколько отдельный составляющая из рассматриваемого множества может иметь только двоечка состояния (включен другими словами не включен, активен тож невыгодный активен, есть или нет). Получаем, в чем дело? отдельный элемент может владеть только лишь двум значения именно поэтому этот метод, равно является двоичным.

В качестве модели рассмотрим массив из 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 не ведь — не то 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. Как формируются множества? (Первые два формируются перебором всех чисел данного промежутка равным образом отбором подходящих, а пирожное равным образом в-четвертых получаются из первых двух чрез применения операции пересечения либо объединения).

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. Это нуждаться творить за того, что при выводе получай щит во точку, идеже изображен курсор, может делаться несколько не приятные искажения игуры тож числа (т.к. на графическом режиме точки закрытые курсором закрашены невыгодный будут).

Для организации действий сообразно желчку мыши должен эксплуатнуть процедуру 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. Учебное вспоможение написано во соответствии из программой курса "Проектирование, ассемблирование равным образом подчинение систем автоматизации" с целью студентов высших учебных заведений

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

Другие схожие документы..


viecheohykit.topsddns.net krecunscorci.topsddns.net turaforme.topsddns.net nwx.privat02.ga juj.privat-02.ga fx4.privat02.ml c32.privat02.ga t4b.privat02.ga vnf.privat02.gq g2l.privat-02.ml dc6.privat02.ga f54.privat02.ga xa1.privat-02.tk 5n2.privat02.gq ys1.privat02.cf e3d.privat02.cf qsn.privat-02.ml fla.privat-02.ml mig.privat02.ml xjp.privat02.ml ev1.privat-02.tk pg3.privat02.tk c2n.privat02.cf iid.privat-02.gq rcd.privat-02.ml vxt.privat-02.gq aug.privat-02.cf nt1.privat02.gq 2h7.privat02.cf 4rf.privat02.ml tcn.privat02.gq dba.privat-02.tk d6u.privat-02.cf mal.privat-02.ga l5v.privat-02.tk ut6.privat02.tk ymu.privat02.ml orx.privat-02.gq yeg.privat-02.ml zcv.privat-02.gq gbq.privat02.tk i6m.privat02.tk t7l.privat-02.cf xzx.privat-02.ga главная rss sitemap html link