Поиск

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

Рекомендуем составить себя представление

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

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

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

015

-

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

0 ранг

Паскаль .

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

Транслятор.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Меню Turbo Pascal

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

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

  3. Search – разыскивание равным образом замена.

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

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

  6. Debug – тестирование программы.

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

  8. Options – юстировка системы.

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

  10. Help – помощь.

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

F1 - помощь;

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

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

F9 - компилировать программу, хотя невыгодный совершать ее;

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

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

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

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

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

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

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

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

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

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

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

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

Exit – появление изо режима Turbo Pascal.

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

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

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

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

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

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

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

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

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

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

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

Ctrl+K,K – подметить результат блока;

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

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

Ctrl+K,Y – уничтожить блок; во каталог Edit выбрать команду Clear.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. цифры;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

begin

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

end .

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

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

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

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

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

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

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

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

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

Тип переменной – сие уймища значений, который симпатия может принимать.

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

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

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

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

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

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

char – кредо или # <код> ;

boolean – необходимо вытекающий тип {true,false}.

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

Тип

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

Целый

ShortInt

-128...127

Integer

-32768 ...32767

Longint

-2147483648 ...

0147483647

Byte

0 .... 055

Word

0 ... 05535

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

Real

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

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

Single

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

Double

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

Extended

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

Comp

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

Логический

Boolean

TRUE

FALSE

Cимвольный

Char

0 отображение

Строковый

String

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

Массивы

array

Записи

record

Множества

set

Файлы

file

Указатели

pointer

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

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

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

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

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

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

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

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

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

Операция присваивания будто бы верной, если субчик выражения соответствует или может состоять приведен ко типу переменной. Переменной будто real можно присвоить авторитет выражения подобно real alias 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;

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

тож

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

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

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

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

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

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

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

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

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

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

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

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

  1. их сумму;

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

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

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

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

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

со точностью поперед сотых.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

abs(x)

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

exp(x)

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

sin(x) и cos(x)

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

arctan(x)

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

ln(x)

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

sqr(x)

Квадрат х.

sqrt(x)

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

random(x)

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

0 <=... < x

Pi

Значение пи.

odd(x)

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

inc(x,n)

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

dec(x,n)

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

int(x)

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

frac(x)

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

trunc(x)

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

round(x)

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

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

выражений.

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

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

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

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

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

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

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

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

0) + -

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

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

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

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

Например :

ax 0 + bx + c записывают что-то около a*x*x +b*x + c

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

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

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

Правильно :

VAR a,b : integer;

r,s : integer;

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

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

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

s:=a*b;

s:=a div b;

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

VAR a,b : integer;

r : integer;

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

VAR a,b : real;

r : integer;

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

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

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

VAR a,b : integer;

r : real;

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

r:=a div b; {r должно фигурировать целым}

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

VAR a : integer;

b : real;

c : real;

...........

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

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

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

06 div 0=4 06 mod 0=0

0 div 8=0 0 mod 0=5

07 div 00=3 07 mod 00=7

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

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

readln (a);

b:= a mod 0;

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

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

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

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

c:= b div a;

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

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

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

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

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

Задачи:

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

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

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

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

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

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

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

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

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

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

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

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

< - меньше;

> - больше;

=- равно;

<> - отнюдь не равно;

> =- значительнее иначе равно;

<=- больше иначе говоря равно.

Функции:

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

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

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

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

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

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

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

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

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

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

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

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

c:= abs (a - b);

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

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

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

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

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

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

a:=Pi/180*30;

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

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

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

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

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

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

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

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

2 x exp(x*ln2)

exp(1/3*ln(x))

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

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

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

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

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

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

b1:=Round(8.51); b1=9

b2:=Trunc(8.51); b1=8

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

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

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

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

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

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

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

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

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

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

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

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

a:=Random; 0

x:=Random+10; 00

y:=5*Random; 0

c:=10*Random-5; -5

b:=7*Random-3;

-3

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

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

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

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

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

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

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

randomize;

for i=1 to 0 do begin

x:=random(6)+1;

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

end;

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

randomize;

for i=1 to 00 do

if random(2)=0

then writeln(’орел’)

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

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

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

2.Функции

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

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

0.+, -, or, xor

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

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

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

  2. ;

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

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

  5. ;

  6. ;

  7. .

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

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

Стандартный узел CRT.

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

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

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

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

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

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

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

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

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

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

NoSound – автоотключение динамика;

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

Гамма:

Uses Crt;

Var i : Integer;

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

Begin

For i:=1 to 0 do begin

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

end;

NoSound;

End.

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

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

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

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

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

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

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

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

Repeat

<Операторы>

Until KeyPressed;

или:

While Not KeyPressed

begin

<Операторы>

end;

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

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

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

If Key=#0 Then

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

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

Enter - 03 ¬ - 0 05

Esc - 07 ­ - 0 02

BackSpace- 0 ® - 0 07

Space - 02 ¯ - 0 00

Tab - 0 Home - 0 01

a - 07 End - 0 09

A - 05 Insert - 0 02

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

Repeat

Key:=ReadKey;

If Key=#0 Then Key:=ReadKey;

Case Key of

05 : Left;

07 : Right;

02 : Up;

00 : Down;

End;

Until Key=#27;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

If договор

then

begin

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

end

else

begin

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

end ;

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

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

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

Примечания:

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

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

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

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

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

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

If статья

then

begin

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

end ;

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

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

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

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

if x> y

then begin

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

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

end

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

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

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

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

else

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

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

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

Задачи:

  1. Рассчитать сила y рядом заданном значении x :

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

г) кратна ли пяти общее число его цифр;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

case речение of

прейскурант констант_1 : begin

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

end ;

меню констант_2 : begin

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

end ;

оглавление констант_n : begin

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

end

else begin

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

end ;

end ;

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

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

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

Примеры:

Case day of Case day of Case day of

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

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

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

end; end; end;

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

Задачи:

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

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

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

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

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

Циклы.

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

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

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

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

For i:=n1 to n2 do

begin

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

end ;

Либо:

For i:=n2 downto n1 do

begin

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

end ;

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

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

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

Примечания:

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

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

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

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

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

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

Примеры:

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

у:=0;

for i:=1 to n do

y:=y+1/i;

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

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

s:=0;

for i:=1 to n do begin

s:=s+sqr(i);

writeln (sqr(i));

end;

writeln (‘s=’,s);

  • y=x k

y:=1;

for i:=1 to k do

y:=y*x;

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

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

Задачи:

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

а) всё-таки целые числа ото 00 перед 05;

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

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

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

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

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

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

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

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

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

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

t = x + 0.

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

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

t =4 a .

      1. Найти:

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

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

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

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

      1. Найти:

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

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

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

      1. Найти:

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

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

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

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

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

Самостоятельная эксплуатация нате повторение с параметром.

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

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

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

while статья do

begin

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

end ;

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

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

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

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

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

Примечание:

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

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

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

program summa;

uses crt;

var

n, s, i: integer;

begin

clrscr;

s:=0; i:=1;

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

while i <=n do

begin

s:=s+i;

i:=i+2;

end;

writeln (‘сумма нечетных чисел через 0 накануне ’, n, ‘=’,s);

readln;

end.

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

program func;

uses crt;

var

x, y: real;

begin

clrscr;

x:=2;

while x <=4 do

begin

y:=sqrt(x);

writeln (y:6:3);

x:=x+0.2;

end;

readln;

end.

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

Задачи:

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

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

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

в) вещь его цифр;

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Дано количество n .

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

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

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

а) Верно ли, аюшки? платеж его цифр больше 10?

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

в) Верно ли, который число его цифр есть четное число?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Под выводом массива понимается вывод на щит значений элементов массива. если на программе надлежит вывести значения всех элементов массива, ведь для этого подходяще воспользоваться оператор цикла 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 alias 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. Известен комната строки, держи которой расположен штука главной диагонали двумерного массива аж чисел. Вывести на диcплeй ценность сего элемента.

  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. Вывести получи диcплeй часть массива :

а) расположенную повыше главной диагонали;

б) расположенную подалее главной диагонали;

в) расположенную сверх побочной диагонали;

г) расположенную вниз побочной диагонали;

  1. Дан двумерный конгломерат аж чисел :

а) во каждом его столбце найти максимальный (минимальный) элемент;

б) месторасположение максимального (минимального) элемента;

в) сумму нечетных элементов в каждом столбце (строке);

г) состав элементов кратных А не ведь — не то В.

д) * выискать строку не без; максимальной суммой элементов;

е) * раскопать графа не без; минимальной суммой элементов.

  1. Даны двушник двумерных вещественных массива одинаковых размеров.

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

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

  1. * Дан двухмерный конгломерат размером nxn , насыщенный целыми числами.

а) целое его элементы, кратные трем, записать во мономерный массив.

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

  1. Дан двухмерный сосредоточение аж чисел.

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

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

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

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

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

  2. Дан двухмерный массив. а) спровадить из него k-ую строку, s-ый столбец.

ЗАДАЧИ ПОВЫШЕННОЙ СЛОЖНОСТИ

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

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

  3. Д

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *

    *


    практически двумерный сосредоточение размером 5х5, фаршированный буквами. Напечатать слово, образованное элементами массива, отмеченными звездочкой (*), около прочтении их:

а) по левую руку по правую сторону во каждой строке, начиная от первой;

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

  1. Напечатать слова, образованные четными элементами каждой строки массива.

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

  3. Проверить, одинакие ли строки целочисленного массива со номерами N да М.

  4. Найти :

а) боец первой до порядку строки целочисленного массива, содержащей наибольшее количество цифр;

б) закидон первого до порядку столбца символьного массива, содержащего наибольшее величина и круг пробелов;

в) пункт последней в соответствии с порядку строки символьного массива, содержащей наибольшее сумма букв «Ш» равным образом «Щ».

  1. Шахматную доску доставить на виде квадратного символьного массива размером 0 х 0. Заполнить скопление таким образом, с целью круги массива, соответствующие черным полям, имели значение Х. Левое нижнее луг на шахматной доске век черное.

Символы да строки.

Помимо числовой информации компьютер может культивировать символьную информацию. Turbo Pascal оперирует информацией, которая может быть представлена отдельными символами или строками символов.

Символы.

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

Имя:;

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

Примеры: otv: char;

ch: char;

Как равным образом любая аргумент программы, переменная будто char может заразиться свое значение во результате выполнения команды присвоения сиречь ввода (read, readln). Если аргумент в виде char получает значение на результате выполнения операции присвоения, в таком случае по правую руку с знака :=должно бездействовать слово в виде char или символьная – символ, заключенный на двойные кавычки.

В результате выполнения программы:

var

c1, c2, otvet: char;

begin

c1:=’*‘;

c2:=c1;

write (‘Вы хотите научиться программировать?’);

readln (otvet);

writeln (c1, ‘Ваш ответ: ’, otvet, c2);

readln;

end.

аргумент с1 получает значение присваиванием значения константы, с2 – присваиванием значения переменной с1, а авторитет переменной otvet вводится вместе с клавиатуры.

Обратите внимание: аргумент otvet объявлена в духе char, т.е. сам символ. Поэтому неравно на отчёт для дилемма программы будет введено, скажем дисфемизм «Да», то переменная otvet получит значение «Д».

Переменную как char позволительно обдумывать с другой переменной как char другими словами с символьной константой. Сравнение основано бери том, что такое? на брата символу поставлено во соответствии число, причем символу ‘0’ соответствует наличность меньшее чем символу ‘9’, а символу ‘A’ – меньшее, нежели ‘B’, символу ‘Z’ – меньшее нежели ‘a’. Таким образом дозволено записать: ‘0’ <’1’ <… <’9’ <… <’A’ <’B’ <… <’Z’ <’a’ <’b’ <… <’z’.

Символам русского алфавита соответствуют числа большие, нежели символы латинского алфавита.

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

Строки.

Последовательность символов называют строкой. Для хранения да обработки последовательностей символов (строк) можно утилизировать сосредоточение символов. Например, если бы конспект должна вводить с клавиатуры фамилии людей. Эту задачу можно урегулировать вводя строки на символьный массив, расстояние которого выбирается равной количеству букв самой длиной фамилии. Однако во этом случае на клавиатуре кажинный в один из дней приходится набирать строку длиной равной ровно столько символов какое количество на самой длиной фамилии (дополняя короткие фамилии пробелами), ась? отнюдь не архи удобно. Поэтому помимо массивов с символов вкушать такое понятие наравне строки, сие переменные типа string, Значением переменной подобно string может существовать любая последовательность символов длиной неграмотный паче 055.

Переменная как string должна присутствовать объявлена в разделе описания переменных так:

Имя: string;

либо

Имя: string[длина];

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

Примеры: name: string [30]:

s: string;

Если возле объявлении переменной длина не указывается, ведь предполагается что длина строки равно 055 символам, т.е. объявления s: string; равным образом s:string[255]; эквивалентны.

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

parol:=’большой секрет’;

не так — не то parol:=’2004’;

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

Переменную вроде string не грех сравнивать с новый переменной иначе говоря константой типа 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);

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

Стиль контуры

SetLineStyle (s, p, t);

идеже s – род лини; p – привычка линии; t – толщина линии.

П еременная s может зачислять приобретать следующие значения:

0

1

2

3

4 Определяется шаблоном

Переменная t принимает следующие значения:

1 - Тонкая

3 - Толстая

Переменная p может иметь любое вес даже если вкус очертания не шаблон (т.е. когда s <> 0).

Отрезок откровенный силуэт

Line (x1,y1, x2,y2);

идеже x1,y1- начальные местоположение откровенный линии; x2,y2 – координаты конца линии.

Отрезок предварительно точки

LineTo (x,y);

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

Данную команду покойно использовать при рисовании ломанных линий.

Перемещение текущего указателя в точку не без; координатами ( x , y )

MoveTo (x,y);

Отрезок (вектор)

LineRel (dx, dy);

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

Задания:

  1. Построить канареечный треугольник, вершинами которого являются следующие точки (200;100), (300;100), (250; 00).

  2. Нарисовать домик.

  3. Нарисовать лесенку, коли от клавиатуры задаются следующие параметры: а – ширина ступеньки, b – высоты ступеньки, с – цифра ступенек.

  4. Нарисовать лесенку неравно помимо вышеуказанных параметров задается еще возникновение да течение лесенки.

Самостоятельная действие : Нарисовать куб. (Оценивается возьми «5» - разве нижняя левая глава куба, а да апофема его ребра задается со клавиатуры, сверху «4» - если изобразили отталкиваясь с исходных данных: головка имеет месторасположение (100; 400), метраж ребра 000).

Контур прямоугольника

Rectangle(x1,y1,x2,y2);

x1,y1,x2,y2 – местоположение противоположных далеко не смежных вершин прямоугольника.

Окружность

Circle (x, y, r);

идеже x, y – координата центра окружности, а r – радиус окружности.

Дуга окружности

Arc (x,y,nu,ku,r);

идеже x,y – координаты центра окружности, r – радиус окружности, nu – ранний угловая точка со которого начинается рисование дуги, ku – конечный угол, переменные nu,ku – измеряются во градусах.

Дуга эллипса

Ellipse(x,y,nu,ku,rx,ry);

идеже x,y – координаты центра эллипса, rx,ry – радиусы эллипса сообразно по оси х равным образом сообразно оси у, nu – начальный вершина не без; которого начинается рисование дуги, ku – конечный угол, переменные nu,ku – измеряются на градусах.

Например в целях того чтоб нарисовать полный эллипс надлежит выполнить такую команду: Ellipse(x,y,0,360,rx,ry);

Задание: Изобразить получи экране какую–нибудь смешную рожицу.

Закрашенные фигуры

Стиль заполнения фигуры

SetFillStyle (s, c);

идеже s – дух заполнения фигуры, c – штучка активного цвета.

Виды стилей заполнения:

0 - сплошная закрашивание фоновым цветом

0 - сплошная покраска активным цветом

0 - замалевывание пикселей во шахматном порядке

02 - пользовательский жанр

0 0 0 0 0 0 0 00 01

Закрашенный квадрат

Bar (x1,y1, x2,y2);

x1,y1,x2,y2 – расположение противоположных далеко не смежных вершин прямоугольника.

Параллелепипед

Bar3d(x1,y1,x2,y2,d,t);

x1,y1,x2,y2 – позиция противоположных никак не смежных вершин передней грани параллелепипеда, d – просвет латеральный грани, t - Верхняя грань(True (TopOn) – есть, False (TopOff) – нет).

Закрашенный эллипс

FillEllipse (x,y,Rx,Ry);

идеже x,y – координаты центра эллипса, Rx,Ry – радиусы эллипса сообразно по оси х равным образом в области оси у.

Закрашенный директриса круга

PieSlice (x,y,nu,ku,r);

идеже x,y – координаты центра круга, r – радиус круга, nu – начальный раствор из которого начинается рисование сектора круга, ku – последний угол, переменные nu,ku – измеряются во градусах.

Закрашенный директриса эллипса

Sector(x,y,nu,ku,rx,ry);

идеже x,y – координаты центра эллипса, rx,ry – радиусы эллипса сообразно по оси х равным образом объединение оси у, nu – начальный раствор со которого начинается рисование сектора эллипса, ku – крайний угол, переменные nu,ku – измеряются на градусах.

Закраска произвольной фигуры

FloodFill (x,y, b);

идеже x,y - координаты внутренней точки; b – часть цвета границы.

Задание сверху оценку: Разукрасить нарисованную перед этим рожицу.

Вывод текста на графике

Стиль текста

SetTextStyle(s, d, r)

идеже s – образ текста, d – направление, r – размер.

стиль: 0 – побитовый направление: 0 - в горизонтальном положении (®) размер: 0..10

0 – трехкратный 0 - на попа (­)

0 – маленький

0 – гротесковый

0 – готический

Вывод текста

OutTextXY(x, y,s)

где, x, y – координаты, s – молитва (тип - string).

Выравнивание текста

SetTextJustify(h, v)

идеже h - сочетание согласно горизонтали, v - выравнивание в соответствии с вертикали.

Выравнивание текста относительно точки привязки



Преобразование чисел на конферанс

Str ( x, s )

идеже x – исходное число, s - строчечка (текст) - фигура - string

Ширина строки - Функция

TextWidth (S)

идеже S – строчка (ширина во пикселях)

Высота строки - Функция

TextHeight(S)

идеже S – ряд (высота на пикселях)

Задание:

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

  2. Нарисовать шахматную доску, если координаты верхнего левого угла и сторона квадрата задаются со клавиатуры.

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

Задачи:

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

  2. Нарисовать наклонную шахматную доску.

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

Зачет объединение текстовому режиму.

Задачи:

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

  • Построить картина лодочки.

  • Написать программу, которая рисует концентрические окружности.

  • Нарисуйте радугу, т.е. разноцветные дуги концентрических окружностей опирающихся бери нижнюю границу экрана.

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

  • Написать программу, которая рисует лучи исходящие с левого нижнего угла экрана.

  • В верхнем левом углу экрана нарисовать солнышко.

  • Написать программу, которая рисует произвольную ломанную линию.

  • Написать программу, рисующую произвольный бегущий отрезок.

  • Написать программу, которая рисует эллипсы.

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

  • Построить ромб со косвенно А равным образом острым углом х.

  • Изобразите получи экране ход точки по окружности.

  • «Нарисуйте» клепсидра да «заставьте их «ходить».

  • Составить программу построения отрезка штриховой откровенный линии, ограниченного точками со координатами А(X,Y) B(X,Y). Размеры штриха да интервала между штрихами получите равными. Исходные данные: значения координат точек и размер штриха введите со клавиатуры.

  • Изобразите получи и распишись экране оттаивание горящей свечи.

  • Составить программу рисования спирали.

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

а) y=sinx б) y=tgx в) y=cosx г) y=ax+b д) y=e x е) y=logx

  • Нарисуйте горизонтальные(вертикальные) линии длиной L располагая их в соответствии с всей плоскости экрана получи и распишись расстоянии d.

  • Расчертите держи клеточки со косвенно a огулом экран.

  • на )

    б)

    Нарисуйте :

а )

д )


г )


е )

ж )


0 класс.

Организация движения во Turbo Pascal.

Алгоритм организации движения:

  1. Задать начальную точку привязки.

  2. Нарисовать фигуру условно этой точки привязки.

  3. Сделать задержку.

  4. Стереть нарисованную фигуру, ведь есть нарисовать ее фоновым цветом.

  5. Изменить начальные позиция точки привязки.

  6. Проверка окончания движения, если движение снова далеко не закончено ведь выполняем пункт 0.

Пример: На экране параллель в соответствии с которой движется точка. (от левого края до правого).

Задачи:

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

  2. Даны двум прямые, по мнению которым двигаются две точки от разными скоростями.

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

Задачи:

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

  2. Две рожицы двигаются в соответствии с экрану (одна веселая, другая грустная).

  3. Бильярдный шишка двигается сообразно экрану.

  4. Броуновское движение.

Управление движением.

Пример: течение шарика всего лишь при нажатии стрелок.

Задачи:

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

Движение до окружности.

Подпрограммы.

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

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

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

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

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

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

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

Процедура во Паскале

равным образом ее формат.

Любая утилита может содержать несколько процедур да функций. Процедуры и функции объявляются во разделе описания вслед вслед за пределом описания переменных.

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

Структура процедуры имеет обличье :

Procedure имя(список формальных параметров);

(* раздел описаний *)

begin

(* раздел операторов *)

end;

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

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

Тело процедуры заключается на операторные скобки BEGIN да END, вдобавок затем END ставится точка не без; запятой.

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

Процедура вызывается объединение ее имени :

имя(список фактических параметров);

Формальные размер - параметры, определенные во заголовке процедуры.

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

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

Фактические границы - сие параметры, которые передаются процедуре присутствие ее вызове.

Количество равным образом субчик формальных равно фактических параметров должны во точности совпадать.

Формальные объем описываются в заголовке процедуры равно определяют тип и простор подстановки фактических параметров. Формальные параметры делятся сверху двоечка вида: параметры-переменные и параметры-значения.

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

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

Все переменные программы делятся на глобальные равно локальные. Глобальные переменные объявляются во разделе описаний коренной программы. Локальные переменные объявляются на процедурах и функциях. Таким образом, локальные переменные «живут» только лишь закачаешься время работы подпрограммы.

Пример. Составить программу для вычисления аn : целые числа а равно n (n> =0) вводятся не без; клавиатуры. ( составить процедуру с целью прикидки степени целого числа).

Program ex;

var a, n : integer;

s: longint;

Procedure Degree(x,y : integer; var st : longint);

var i : integer;

begin

st:=1;

for i:=1 to y do st:=st*x;

end;

{ начатие ведущий программы}

begin

writeln(‘введите двойка числа - основание и норматив степени’);

readln(a,n);

Degree(a,n,s); { заявление для процедуре }

writeln(‘Результат ’,s);

end.

Процедура названа именем Degree. В скобках записан роспись формальных параметров, то принимать перечислены переменные с указанием их типа. Используем три параметра: стержневой - основа степени, то убирать число, которое должно воздвичь в степень; второстепенный - признак степени, третий - результат. Первые двоечка формальных параметра - мера значения, третий - параметр-переменная, равным образом под ним указано дисфемизм var. Все они описаны как целые (x равно y - переменные как integer, st - Longint, приблизительно что степенная связка быстро возрастает).

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

Далее отлично пикния процедуры. Оно начинается служебным одно слово Begin равно заканчивается служебным словом сказать End, затем которого стоит знак не без; запятой (в конце программы после последнего End ставится точка). В теле процедуры вычисляется степень числа x от через цикла For.

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

!!!! Процедура вызывается по образу оператор, состоящий с имени процедуры. В круглых скобках записываются фактические параметры. В нашем примере формальные параметры x, y да st принимают значения фактических параметров a, n равным образом s соответственно. После завершения работы процедуры переменные a равно n сохранят те же значения, что-то равно рядом вызове, а s получит новое значение.

Пример 0 : Используя процедуру для вычисления степени числа, отрыть значение выражения : y=a4x4 + a3x3 + a2x2 + a1x + a0

program ex2;

var a: array[0..4] of integer;

i, x: integer;

y,s: longint;

Procedure Degree(xx,n : integer; var st : longint);

var i : integer;

begin

st:=1;

for i:=1 to n do st:=st*xx;

end;

{ начатие центральный программы}

begin

write(‘введите спица в колеснице переменной х ‘); readln(x);

writeln(‘введите конгломерат коэффициентов’);

for i:=0 to 0 do begin write(‘a[‘,i,’]=’); readln(a[i]); end;

y:=a[0];

for i:=1 to 0 do

begin

Degree(x,i,s); y:=y+a[i]*s;

end;

writeln(‘y=’,y);

end.

Пример 0. Просуммировать различные части массива.

Program sumir;

var a: array [1..100] of integer; sa1, sa2,sa3 : integer;

n,l,t : integer;

procedure summa(a:array [1..100] of integer; k,m :integer; var s:integer);

var i:integer;

begin

s:=0;

for i:=k to m do s:=s+a[i];

end;

BEGIN

for t:=1 to 000 do

begin

write(‘введите ближайший элемент массива ‘);

readln(a[i]);

end;

summa(a,10,20,sa1);

summa(a, n , l , sa2);

summa(a, n,n+3,sa3);

end.

Задачи:

  1. Составить программу, на результате которой калибр А меняется значением с величиной В, а количество С - вместе с величиной D. (Определить процедуру, осуществляющую размен значениями двух переменных величин)

  2. Даны стороны двух треугольников. Найти сумму их периметров равным образом сумму их площадей. (Определить процедуру к расчета периметра равно площади треугольника по его сторонам.)

  3. Даны основные принципы равным образом высоты двух равнобедренных трапеций. Найти сумму их периметров и сумму их площадей (Определить процедуру для расчета периметра равно площади равнобедренной трапеции в соответствии с ее основаниям и высоте)

  4. Написать рекурсивную процедуру для вывода получи кино цифр натурального числа во обратном порядке.

  5. Написать рекурсивную процедуру для ввода от клавиатуры последовательности чисел равным образом вывода ее в морда во обратном порядке (окончание последовательности - рядом вводе нуля).

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

Функции

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

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

Таким образом, полный внешность описания функции нижеперечисленный :

Function Имя[(список формальных параметров)]:Тип результата

описательная порцион

Begin

апотеций функции, во которой обязательно должно составлять

зажуливание Имя_функции:=значение

End;

Пример 0 Составить программу, подсчитывающую число сочетаний не принимая во внимание повторения с n элементов соответственно k. Число сочетания без повторения вычисляется за формуле

Обозначим вследствие n да k переменные для хранения введенных чисел; С - переменную для хранения результата.

Воспользуемся функцией чтобы вычисления факториала числа n. (n!=1*2*..*n)

program sochet;

var n,k : integer;

a1,a2,a3,c : lohgint;

Function factorial(n:integer):longint;

var i: integer;

rez : longint;

begin

rez:=1;

for i:=1 to n do rez:=rez*i;

factorial:=rez;

end;

begin

writeln(‘ установление n равным образом k :’); readln(n,k);

a1:=factorial(n); { счёт n!}

a2:=factorial(k); { подсчитывание k!}

a3:=factorial(n-k); {вычисление (n-k)!}

c:=a1 div (a2*a3); { результат}

writeln(‘результат=’,c) ;

end.

Первая пункт во описании функции - это ее заголовок. Служебное вокабула Function (функция) указывает возьми то, аюшки? именем factorial названа функция. В скобках записан список формальных параметров функции, состоящий с одной переменной целого типа. Далее на заголовке указан тип значения функции. В данном примере результат функции factorial - длинное целое число.

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

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

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

Пусть n=5, k=3. Когда на программе встречается оператор a1:=factorial(n), выполняются следующие действия:

  • выделяется видеопамять ради переменных, описанных во функции factorial;

  • формальному параметру присваивается значение фактического: n:=n (n=5);

  • выполняется функция, вычисляется факториал числа 0;

  • спица в колеснице функции передается во место обращения ко этой функции, в таком случае есть присваивается переменной a1;

  • на операторах a2:=factorial(k) a3:=factorial(n-k) пока что двукратно вызывается связка factorial с параметрами k=3 n-k=2.

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

Пример 0 : Написать функцию, подсчитывающую количество цифр натурального числа. Используя ее, определить, во каком из двух данных чисел значительнее цифр.

Program chisla;

Var n1, n2 : longint;

k1, k2 : byte;

Function kol(x : longint): byte;

var k: byte;

begin

k:=0;

While x <> 0 do

begin

Inc(k);

x:=x div 00;

end;

kol:=k;

end;

BEGIN

writeln(‘Введите двум числа’); readln(n1, n2);

k1:=kol(n1);

k2:=kol(n2);

if k1=k2 Then writeln(‘одинаковое количество цифр’)

else if k1> k2 Then Writeln(‘в первом числе цифр больше’)

else writeln(‘во втором числе цифр больше’)

END.

Задачи:

  1. Рассчитать достоинство х , определив и использовав функцию :

а)

г)

б)

д)

в)

е)

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

а) z=max(a,2b)*max(2a-b,b) б) z=min(a,3b)*min(2a-b,b)

идеже max(x,y), min(x,y) - пик да узел с чисел x,y

При решении:1) неграмотный использовать функцию max, min.

0) назначить и использовать функцию max,min.

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

  2. Даны три квадратных уравнения ax 0 + bx + c=0, bx 0 + ax + c=0, cx 0 + ax + + b=0. Сколько изо них имеют вещественные корни ? (Определить функцию, позволяющую распознавать реальность вещественных корней во квадратном уравнении.)

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

  4. Даны вещественные числа a, b, c, d, e, f, g.

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

е

g d

a f

b не без;

  1. Даны вещественные числа x 0 , y 0 , x 0 , y 0 ,... x 0 , y 0 .Найти площадь пятиугольника (см 00.6) вершины которого имеют месторасположение (x 0 , y 0 ), (x 0 , y 0 ), ...( x 0 , y 0) . (Определить функцию на расчета площади треугольника по координатам его вершин).

  2. Даны двум последовательности целых чисел : а 0 , а 0 ,... а 0 , и b 0 , b 0 , ... b 0 . Найти количество четных чисел на первой с них равно количество нечетных вол второй. (Определить функцию, позволяющую распознавать четные числа.)

  3. Найти авторитет выражения (2*5! + 0*8!)/(6! + 4!), идеже n! функция.

  4. Даны неудовлетворительно натуральных числа. Выяснить, в каком с них совокупность цифр больше.(сумма цифр - функция).

  5. Даны n различных чисел. Определить максимальное с них. (Определить функцию, находящую максимум из двух различных чисел.)

  6. Найти НОД(a,b,c)=НОД(НОД(a,b),c). (где НОД(a,b) - функция.)

  7. Даны n натуральных чисел. Найти их НОД. (где НОД(a,b) - функция.)

  8. Написать рекурсивную функцию :

а) подсчеты деньги цифр натурального числа;

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

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

а) n-го члена прогрессии; б) фонды n первых членов прогрессии.

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

а) n-го члена прогрессии; б) суммы n первых членов прогрессии.

Построение графиков функций и диаграмм.

Для основные принципы работы, маленько упростим задачу. А именно, договоримся, что функция задана явно, в таком случае кушать совершенно наши функции имеют нижеупомянутый облик y=f(x). И пока пишущий сии строки будем доставать только лишь такие функции которые безвыгодный имеют точек разрыва во исследуемой области определения. Грубо говоря, для рассматриваемой области не вынужден вычисляться начало из отрицательного числа равным образом невыгодный должно выполняться разложение получи ноль.

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

Для всегда Х через ЛГ вплоть до ПГ деять

Вычислить y=f(x)

Построить точку из координатами (x,y)

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

  1. Он невыгодный учитывает, то, во вкусе устроена система координат компьютерного монитора. (Начало координат на левом верхнем углу и y растет вниз).

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

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

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

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

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

Но по прошествии того наравне исходная область будет увеличена, симпатия постоянно непропорционально будет находиться из-за пределами экрана для отображения. А сие означает, в чем дело? после преобразования подобия необходимо осуществить ещё симультанный перенос. После преобразования подобия вектор переноса останется прежним, если преобразование коротать так, чтобы левый низший девятина исходной области остался возьми месте.

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

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

Введём обозначения:

Left – изнаночная край исходной области.

Right – изнаночная кордон исходной области.

Down – нижняя предел исходной области.

Up – верхняя межа исходной области.

Размеры экрана монитора величина фиксированная. Но ради общности примем для них буквенные обозначения:

Long_x – размер по части горизонтали

Long_y – размер объединение вертикали

x, y – значения прежде выполнения преобразований

x’, y’ – значения задним числом выполнения преобразований

Тогда перевод подобия запишется следующим образом:

x’=x/(Right - Left)*Long_x y’=y/(Up - Down)*Long_y

Преобразование переноса запишем так:

x’’=x’ – Left y’’=y’ – Down

И под конец пересчёт “отображения сверху вниз” запишется так:

x’’’=x’’ y’’’=Long_y – y’’

А неотложно объединим безвыездно три преобразования в одно:

Преобразование

1) x’=x/(Right - Left)*Long_x – Left

2) y’=Long_y - (y/(Up - Down)*Long_y – Down)

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

Для до этого времени точек функции осуществить

Берём очередную точку

Новая точка=Преобразование над очередной точкой

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

Первое. Если взялись основывать график, стало быть, нам известна область, на которой ты да я будем воздвигать график. Эта область конечна равно её габариты объединение координате x равным образом убирать величины Left, Right.

Предположим, который ты да я строим схема на этой области объединение N точкам. Это означает, что на нашем распоряжении сосредоточение координат y пользу кого N точек. Наибольшее значительность y в этом массиве поглощать протяжённость Up да наименьшее значение y снедать протяжение Down.

Тогда Long_x=Right – Left да Long_y=Up – Down.

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

Ввод границ области построения графика.

Ввод количества точек построения.

Расчёт шага построения.

Расчёт значений координат y

Расчёт максимума да минимума значений y – заговор

Выполнение операций преобразования.

Выше появился антилогарифм “шаг построения”. Разумно устраивать точки следующим образом. Пусть самая изнаночная остановка письменность – это левая грань области построения. Следующая след сие изнаночная + резьба построения, то вкушать небольшое число. И каждая очередная пиксел сие предыдущая + шаг построения. Если вытворять так, так координаты х позволительно малограмотный удерживать на массиве. Каждую координата дозволительно подсчитать за очевидной формуле:

xi=Left + деяние * i кабы первую точку считать с номером 0 равно

xi=Left + предприятие * (i – 0) если бы первая точка имеет штучка 0.

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

Важное ремарка

Необходимо помнить, в чем дело? кино монитора не квадрат, а прямоугольник, помимо того, исходная район построения графика ведь а параллелограмм равно совсем не кровь из носу подходящий прямоугольнику экрана монитора. Это означает, что коэффициент подобия пользу кого координат x может проявить себя иным, нежели коэффициент подобия к координат y.

Это означает, ась? преобразованный график, поскорее всего, окажется искаженным, с точностью до самого подобия либо — либо объединение оси Ox или по оси Oy, так сие неизбежная оклад за возможность выпустить из рук всё график.

Построение графика на окрестности точек разрыва

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

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

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

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

Это ужас неточное определение. Здесь два неясных термина. Во-первых, непонятно, что знать ультра- бойко и, во-вторых, какого размера расстояние принимается за окружение точки разрыва. Однако уже ясно, аюшки? около сие означивание может попасть безграмотный исключительно пятнышко разрыва, а и такая точка, во окрестности которой функция легко имеет большую первую производную, ведь лакомиться изменяется действительно быстро, же сие наша плата за шанс проведения численного счета. А сегодня займёмся уточнением определения.

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

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

Для азы заметим, который во окрестности точки разрыва табель функции удовлетворяет следующим свойствам:

  1. Функция либо бесконечно растёт, либо неограниченно убывает.

  2. Скорость её роста увеличивается также неограниченно.

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

Max – верхняя рубеж значений ординат

Min – нижняя кордон значений ординат.

Шаг – нарезка изменения абсциссы.

А – почин области построения письменность

В – прекращение области построения письменность

Важное отметка . Нам существенно не просто раскопать окрестность, а во-первых, достаточно определённо предопределить абсциссу точки разрыва, а во-вторых, определить тип разрыва, а их может бытийствовать два:

Нестрогое дефиниция процесса расчётов

Для поиска точек разрыва, да мы вместе с тобой пройдём всю округ построения от медленный достаточно маленьким, так таким какой-никакой позволит пройти всю круг из-за разумное время. На каждом шаге суд бросьте вычисляться новая координата хорошенько прибавления к предыдущей абсциссе величины шага. Для каждой еще раз посчитанной абсциссы будем исчислять ординату, равным образом если посчитанная ордината окажется за пределами отрезка [min, max] ведь будем предполагать, что-нибудь найдена окрестность точки разрыва, позже что такое? приходится быть запущен слушание проверки этого предположения.

Min – сие минимальная изо сделано посчитанных ординат равно max – сие максимальная с уже посчитанных ординат.

Процесс проверки предположения заключается на следующем:

  • Резко уменьшим деяние движения равным образом сделав ещё некоторое состав шагов убедимся, что цель продолжает изменятся быстрым темпом на фолиант а направлении. Если сего никак не происходит, то, следовательно, это безграмотный округа точки разрыва.

  • Продолжаем тенденция вперёд. Если функция скачком изменит направление изменения (разрыв первого типа) или скачком поменяться значимость ординаты (разрыв второго типа), значит, автор нашли окрестность разрыва.

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

Строгое изображение алгоритма.

Текущая точка=Началу области построения графика

Шаг=Начальное значительность шага.

Номер точки разрыва=0

Минимум=0

Максимум=0

Пока текущая уровень отнюдь не достигла конца области построения действовать

Начало

Вычислить ординату текущей точки

Если ордината не в экий мере минимума или больше максимума

То

Выполнить функцию поиска разрыва

Если просвет найден

То

Прибавить ко абсциссе текущей точки величину найденной окрестности точки разрыва.

Иначе

Если ордината хлеще максимума то максимум=ордината

Если ордината не в ёбаный мере минимума так минимум =ордината

Конец

Функция поиска точки разрыва

Шаг=Величина большая текущего шага.

Точка1=текущая пиксел

Точка2=Точка1+Шаг

Если Ордината1 > Ордината2 ведь Направление =вниз

Если Ордината1 < Ордината2 ведь Направление =вверх

Есди Ордината1=Ордината2

То произведение функции=разрыв отнюдь не найден, работу прервать

Повторять

Точка1=Точка2

Точка2=Точка1 + Шаг

Если Ордината1 усиленно отличается от ординаты2

То Результат функции=разрыв найден

Если Ордината1 > Ордината2 ведь Направление1 =вниз

Если Ордината1 < Ордината2 ведь Направление1 =вверх

Если Направление1 <> Направление2

То Результат функции=разрыв найден

Конец цикла

Важное нотабене

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

Думаю, ваша сестра обратили внимание, аюшки? некоторые понятие на этом месте малограмотный весь определены. Например далеко не очевидно который означает фраза “Ордината1 весьма отличается от ординаты2”

Алгоритм построения письменность функции:

  1. Ввести возникновение математической системы координат. Масштаб (количество пикселей в единичном отрезке).

  2. Нарисовать оси координат равно сделать разметку (это может бытовать либо сетка, либо без затей насечки возьми осях). Сделать оцифровку.

  3. Построить график. Для этого:

  • Перебрать всегда экранные положение х (от 0 накануне 039).

  • Перевести с головы х – экранный на х – математический. (х э =а+х м *m, откуда получаем х м =( х э -а)/ m, идеже (а,в) – координаты точки введение математической системы координат, m – масштаб).

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

  • Вычислить у м м =f(х м )).

  • Перевести у м во у э э =round(b- у м )).

  • Изобразить точку из координатами (х э , у э ) держи экране монитора.

Задачи: Построить графики функций: у=х 0 ; у=sinx; у= ; у=1/х.

Диаграммы.

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

Алгоритм порядок столбчатой диаграммы:

  1. Ввести скопление с чисел.

  2. В исходном массиве отрыть максимальный элемент, равно ради него установить масштаб для построения столбиков (например, l=round(450/max)).

  3. По количеству элементов определить ширину каждого столбика диаграммы (например, m=round(600/n), где n – количество элементов массива).

  4. Строить весь круг столбик, к чего использовать процедуру изображения прямоугольника, размеры которого определяются следующим образом: ширина стандартна для того всех – сие m, высота определяется индивидуально для каждого числа, на выдержку h=l*a[i].

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

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

{Пример построения столбиковой диаграммы}

program BarDiagram;

uses crt,graph;

{N - число элементов исходных данных}

{Name - наименования элементов исходных данных}

{Num - числовые значения элементов исходных данных}

const

N=6;

Name:array[1..N] of string=("1997","1998","1999","2000","2001","2002");

Num:array[1..N] of integer=(10,5,8,11,2,7);

var

Dr,Rg,MaxX,MaxY,X0,Y0,S,I,X1,Y1,X2,Y2,S1:integer;

M:real;

Nm:string;

begin

{Инициализация графического режима}

Dr:=detect;

initgraph(Dr,Rg,"");

{Определение начальных параметров}

cleardevice; {Очистка экрана}

MaxX:=getmaxx; {Определение максимальной координаты по мнению X}

MaxY:=getmaxy; {Определение максимальной координаты до Y}

X0:=40; {Отступ с края экрана накануне рамки по вертикали}

Y0:=20; {Отступ ото края экрана накануне рамки по горизонтали}

S:=round((MaxX-4*X0)/N); {Определение ширины одного столбца}

X1:=2*X0+2; {Начальная склонение в соответствии с X для первого столбца}

Y1:=MaxY-2*Y0+2; {Конечная эфемерида в соответствии с Y для всех столбцов}

X2:=X0+2; {Координата за X интересах вывода значений направо оси Y}

{Рисование рамки}

setfillstyle(1,1);

bar(X0,Y0,MaxX-X0,MaxY-Y0);

setcolor(14);

rectangle(X0,Y0,MaxX-X0,MaxY-Y0);

{Рисование осей}

line(2*X0,2*Y0,2*X0,MaxY-2*Y0); {Ось Y}

line(2*X0,MaxY-2*Y0,MaxX-2*X0,MaxY-2*Y0); {Ось X}

{Поиск наибольшего изо значений элементов исходных данных во переменную M}

M:=Num[1];

for I:=2 to N do

if Num[I]> M then

M:=Num[I];

S1:=round((MaxY-4*Y0)/M); {Определение длины единичного отрезка в оси Y}

{Рисование диаграммы}

for I:=1 to N do

begin

Y2:=2*Y0+(MaxY-2*Y0-S1*Num[I]); {Начальная координата по Y}

str(Num[I]:4,Nm);

outtextxy(X2,Y2,Nm); {Вывод значения элемента данных по левую руку оси Y}

line(2*X0-3,Y2-3,2*X0,Y2-3); {Рисование деления на оси Y}

outtextxy(X1,Y1,Name[I]); {Вывод названия элемента данных по-под осью X}

setfillstyle(1,I+1); {Определение типа заполнения столбца}

bar(X1-1,Y2-3,X1-1+S,Y1-3); {Рисование столбца}

X1:=X1+S; {Начальная эфемерида по Х на очередного столбца}

end;

repeat

until keypressed;

closegraph {Выход из графического режима}

end.

{Пример построения линейной диаграммы}

program LineDiagram;

uses crt,graph;

{N - наличность элементов исходных данных}

{Name - наименования элементов исходных данных}

{Num - числовые значения элементов исходных данных}

const

N=6;

Name:array[1..N] of string=("1997","1998","1999","2000","2001","2002");

Num:array[1..N] of integer=(10,5,8,11,2,7);

var

Dr,Rg,MaxX,MaxY,X0,Y0,S,I,X1,Y1,X2,Y2,S1,X3,Y3,X4,Y4:integer;

M:real;

Nm:string;

begin

{Инициализация графического режима}

Dr:=detect;

initgraph(Dr,Rg,"");

{Определение начальных параметров}

cleardevice; {Очистка экрана}

MaxX:=getmaxx; {Определение максимальной координаты сообразно X}

MaxY:=getmaxy; {Определение максимальной координаты согласно Y}

X0:=40; {Отступ ото края экрана прежде рамки по вертикали}

Y0:=20; {Отступ с края экрана поперед рамки по горизонтали}

S:=round((MaxX-4*X0)/N); {Определение интервала между точками согласно X}

X1:=2*X0+2; {Координата в области X ради первой точки диаграммы}

Y1:=MaxY-2*Y0+2; {Координата согласно Y пользу кого вывода названий подина осью Y}

X2:=X0+2; {Координата за X на вывода значений по левую руку с оси Y}

{Рисование рамки}

setfillstyle(1,1);

bar(X0,Y0,MaxX-X0,MaxY-Y0);

setcolor(14);

rectangle(X0,Y0,MaxX-X0,MaxY-Y0);

{Рисование осей}

line(2*X0,2*Y0,2*X0,MaxY-2*Y0); {Ось X}

line(2*X0,MaxY-2*Y0,MaxX-2*X0,MaxY-2*Y0); {Ось Y}

{Поиск наибольшего изо значений элементов исходных данных во переменную M}

M:=Num[1];

for I:=2 to N do

if Num[I]> M then

M:=Num[I];

S1:=round((MaxY-4*Y0)/M); {Определение длины единичного отрезка получи оси Y}

{Рисование диаграммы}

for I:=1 to N do

begin

Y2:=2*Y0+(MaxY-2*Y0-S1*round(Num[I])); {Координата точки по Y}

X4:=X1-1; {Конечная абсцисса линии по X}

Y4:=Y2-3; {Конечная абсцисса линии по Y}

str(Num[I]:4,Nm);

outtextxy(X2,Y2,Nm); {Вывод значения элемента данных налево оси Y}

line(2*X0-3,Y2,2*X0,Y2); {Рисование деления на оси Y}

outtextxy(X1,Y1,Name[I]); {Вывод названия элемента данных лещадь осью X}

setlinestyle(0,1,1); {Определение типа линии диаграммы}

circle(X4,Y4,2); {Рисование узлов диаграммы}

if I <> 0 then

line(X3,Y3,X4,Y4); {Рисование линии диаграммы}

X3:=X1-1; {Начальная абсцисса линии по X}

Y3:=Y2-3; {Начальная ордината линии по Y}

X1:=X1+S; {Координата в области X ради очередной точки}

end;

repeat

until keypressed;

closegraph {Выход из графического режима}

end.

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

Построение кругообразный диаграммы.

{Пример построения угловой диаграммы}

program RoundDiagram;

uses crt,graph;

{N - контингент элементов исходных данных}

{Name - наименования элементов исходных данных}

{Num - числовые значения элементов исходных данных}

const

N=6;

Name:array[1..N] of string=("1997","1998","1999","2000","2001","2002");

Num:array[1..N] of integer=(10,5,8,11,2,7);

var

Dr,Rg,MaxX,MaxY,Y0,I,S1,Kg,Xc,Yc,R,Yk:integer;

M,S:real;

begin

{Инициализация графического режима}

Dr:=detect;

initgraph(Dr,Rg,"");

{Определение начальных параметров}

cleardevice; {Очистка экрана}

MaxX:=getmaxx; {Определение максимальной координаты за X}

MaxY:=getmaxy; {Определение максимальной координаты сообразно Y}

Xc:=300; {Координата центра диаграммы по X}

Yc:=250; {Координата центра диаграммы по Y}

R:=150; {Радиус диаграммы}

{Рисование рамки}

setfillstyle(1,1);

bar(0,0,MaxX,MaxY);

setcolor(14);

rectangle(0,0,MaxX,MaxY);

{Определение деньги значений элементов исходных данных во переменную S}

S:=0;

for I:=1 to N do

S:=S+Num[I];

{Рисование диаграммы}

Y0:=0; {Начальный угол сектора}

for I:=1 to N do

begin

Kg:=round(360*(Num[I]/S)); {Определение кол-ва градусов во секторе}

Yk:=Y0+Kg; {Конечный раствор сектора}

if Yk> 060 then

Yk:=360;

setfillstyle(1,I+1); {Определение типа заполнения сектора}

pieslice(Xc,Yc,Y0,Yk,R); {Рисование сектора}

Y0:=Yk {Начальный вершина сектора}

end;

repeat

until keypressed;

closegraph {Выход из графического режима}

end.

Работа от файлами.

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

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

Объявление файловой переменной в разделе описания переменных имеет вид :

var <имя файла> : File of <тип элементов> ;

Например:

var Ft : File of integer;

M : File of char;

Type File_integer=File of integer

File_char=File of char;

Var F1: File_integer;

F2: File_char;

Так во вкусе во описании указывается тип элементов, такие файлы называются типизированными. Все азы файла пронумерованы начиная не без; нуля.

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

(0)

(1)

...

(к)

(к+1)

...

файловый указатель

Все операции производятся от элементом, который определен файловым указателем.

Связь переменной файлового в виде

со файлом нате диске.

Процедура Assign( <имя файловой пер-ой> ,’ <имяфайла сверху диске> ’);

Например:

Assign ( F 0,’ A : INT . DAT ’);

После установления такого соответствия все операции, выполняемые по-над переменной F1, будут выполнятся надо файлом, хранящимся на диске А равно имеющим прозвище INT.DAT

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

Чтение изо файла.

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

Для чтения с файла нельзя не открыть для чтения через процедуры

Reset( <имя файловой переменной> );

Собственно зачитывание данных с файла выполняется процедурой

Read( <имя файловой переменной> , <имя переменной> );

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

Закрытие файла

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

Close( < термин файловой переменной> )

Общая график чтения данных изо файла, таким образом, следующая:

Reset( <имя файловой переменной> );

.......

Read( <имя файловой переменной> , <имя переменной> );

...........

Close( <имя файловой переменной> );

Признак конца файла

Так в качестве кого цифра элементов файла малограмотный известно заранее, что поделаешь мочь определять, что обложка кончился. Для сего используется логическая занятие Eof( <имя файловой переменной> ) (Eof - End Of File). Она принимает истинное роль (Тrue), разве достигнут конец файла, равным образом ложное (False) - на противном случае.

Пример Прочитаем с файла целые числа и выведем их в экран:

Assign(F1,’A:INT.DAT’);

Reset(F1);

While Not Eof(F1) do

begin

read(f1,n); { считываем очередное число из файла}

write(n,’ ‘); { выводим его получи и распишись экран}

end;

Close(F1);

Запись на обложка

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

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

Rewrite( < Имя файловой переменной > );

Собственно заметка данных во файл выполняется процедурой :

Write ( < имя файловой переменной > , < значительность > );

Общая график ежедневник данных на файл, таким образом, следующая:

Rewrite( <> );

......

Write( <имя файловой переменной> , <значение> );

..........

Close( <имя файловой переменной> );

Прямой ход для элементам файла

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

Установка указателя.

Процедура Seek( <имя файловой переменной> ,N) устанавливает файловый индикатриса на N-й элемент. Например, Seek(F1,3). (на 0 элемент)

Определение постоялый двор элемента

Функция FilePos( <имя файловой переменной> ) возвращает выпуск элемента, возьми который «смотрит» файловый указатель.

Определение количества элементов в файле

Функция FileSize( <имя файловой переменной> ) возвращает численность элементов в файле.

Удаление равно переименование файлов

Erase( <имя файловой переменной> ) процедура удаления файла.

Rename( <имя файловой переменной> ,’ <новое имя получай диске> ’) переименование файла.

Пример : В файле DAT1.DAT записаны целые числа. Вычислить сумму элементов файла и исход дружно со исходными данными записать во обложка DAN2.DAT

Program WW;

Var f1,f2 : file of integer;

s, n : integer;

begin

Assign(f1,’DAT1.DAT’);

Reset(F1);

Assign(f2,’DAT2.DAT’);

Rewrite(f2);

s:=0;

While Not Eof(f1) do { осмотр получи развязка файла}

begin

read(f1,n); {чтение элемента изо файла F1}

write(f2,n); { протокол элемента на обложка F2}

s:=s+n;

end;

write(f2,s); {запись деньги элементов во конец файла F2}

write(‘Результат находится во файле DAT2.DAT’);

Close(f1);

Close(f2);

end.

Текстовые файлы

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

Var A: Text;

Для обработки текстовых файлов используются те а процедуры равно функции, что да про обработки обычных типизированных файлов. Для связывания файловой переменной вместе с файлом нате диске употребляется процедура Assign. Текстовые файлы могут быть обнаружить в целях чтения процедурой Reset либо — либо с целью деловой дневник процедурой Rewrite.

Для чтения данных применяется процедура Read. Если надо со временем чтения данных перейти получай следующую строку, то используется порядок Readln. Если необходимо без затей переметнуться для следующей строке, в таком случае не возбраняется эксплуатировать процедуру Readln( <имя файловой переменной текстового файла> ); которая устанавливает файловый указатель для стержневой компонента следующей строки.

Процедура Write записывает исходняк в текущую строку. Если надлежит записать данные да перескочить для следующей строке, то позволительно эксплуатнуть процедуру Writeln. Если надо всего только перескочить для записи нате новую строку, в таком случае применяется процедура Writeln( <имя файловой переменной текстового файла> ); которая записывает в обложка примета конца строки равным образом устанавливает файловый индикатриса получи зачаток следующей строки.

Так по образу во строках может являться разное количество символов, не без этого логическая функция Eoln( <имя файловой переменной текстового файла> ), которая принимает значение True, ежели достигнут конец строки.

Процедура Append( <имя файловой переменной текстового файла> ). Она открывает файл для «дозаписи», помещая файловый указатель во финал файла.

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

Решение: Пусть во файле содержится следующая информация:

-32 06 0 0 0

4 0 0 03 01 -5 -8

6 -8 0 -12

5 0 0 0 0 02

1 0

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

  • создайте небывалый обложка путем команды New карта File;

  • запишите всё-таки числа, разделяя их пробелами, равным образом разбейте нате строки, как указано во задании;

  • сохраните файл, например, перед именем INT1.DAT

сегодня напишем программу

program rrr;

var f : text;

x, k: integer;

begin

Assign(f,’int1.dat’);

Reset(f);

While Not Eof(f) do {пока невыгодный достигнут конец файла}

begin

k:=0;

While Not Eoln(f) do {пока никак не достигнут конец строки}

begin

read(f,x); {считываем очередное число}

write(x,’ ‘); {выводим его держи экран}

Inc(k); {увеличиваем счетчик}

end;

writeln(‘в строке’, k, ‘ элементов’);

Readln(f) {переходим ко следующей строке файла}

end;

Close(f);

end.

Пример. Записать двумерный массив вещественных чисел 0х4 на отладочный файл.

Program mas;

const m=5; n=4;

Var fil : text;

a: real;

s: char;

i,j : integer;

begin

Assign(fil,’massiv.txt’);

Rewrite(fil);

for i:=1 to m do

begin

for j:=1 to n do

begin

a:=random(100);

write(fil,a:5:3,’ ‘); {число записывается в обложка во указанном формате, после ним пробел}

end;

writeln(fil); {переход на файле в новую строку}

end;

Close(fil);

{Чтение файла равным образом суд матрицы в экран по строкам}

Reset(fil); {открытие сейчас имеющегося файла}

while not Eof(fil) do

begin

while not Eoln(fil) do

begin

read(fil,a); {чтение числа}

write(a:5:3);

read(fil,s); { произнесение пробела после числа}

write(s);

end;

writeln;

readln(fil);

end;

Close(fil);

end.

Пример. Дан текстовый обложка f. Переписать в обложка g всегда компоненты исходного файла f на обратном порядке.

program tofile;

var f, g : text;

n, i, j : integer;

s : string;

x : array [1..32000] of char;

begin

assign(f,’f.txt’); assign(g,’g.txt’);

rewrite(g); rewrite(f);

writeln(‘Введите контингент строк на создаваемом вами файле ‘);

readln(n);

writeln(‘вводите строки, в дальнейшем введения каждой нажмите Enter’);

for i:=1 to n do begin readln(s); write(f,s); end;

reset(f);

i:=0;

writeln(‘Исходный обложка :’);

while(not eof(f)) and (i <32000) do

begin i:=i+1; read(f,x[i]); write(x[i]); end;

writeln;

writeln(‘Измененный обложка :’);

for j:=i downto 0 do

begin write(g,x[j]); write(x[j]); end;

writeln;

close(f); close(g);

end.

Задача. Дан текстовый файл. Вставить в начало каждой строки ее стриптиз да записать преобразованные строки на новоявленный файл.

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

Запись.

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

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

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

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

Общий личина описания ежедневник :

Type <имя записи> =Record

<поле 0> : <тип 0> ;

<поле 0> : <тип 0>

<поле n> : <тип n>

End;

Применительно ко рассматриваемой задаче запись дозволяется живописать где-то :

Type

pupil=Record

fam : string[15]; {поле фамилии}

b1,b2,b3,b4,b5 : 0..5; {поля баллов}

sb : Real {средний бал}

End;

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

Var klass : array[1..25] Of pupil;

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

1. С указанием имени переменной равно имени поля. Например, klass[2].fam, klass[3].sb, klass[1].b4

Ввод фамилий равно оценок учащихся, т.е. элементов массива klass, допускается записать так:

for i:=1 to 05 do

begin

readln(klass[i].fam);

readln(klass[i].b1);

readln(klass[i].b2);

readln(klass[i].b3);

readln(klass[i].b4);

readln(klass[i].b5);

end;

2. С использованием оператора присоединения.

Имеется достижимость осуществлять доступ ко полям еженедельник таким образом, как ежели бы они были простыми переменными. Общий внешность оператора присоединения:

With <имя записи> Do <оператор> ;

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

Пример

for i:=1 to 05 do

With klass[i] do

begin

readln(fam);

readln(b1,b2,b3,b4,b5);

end;

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

program zap;

Type pupil=Record

fam : string[15]; {поле фамилии}

b1,b2,b3,b4,b5 : 0..5; {поля баллов}

sb : Real {средний бал}

End;

Var klass : array[1..25] Of pupil;

p: pupl;

i,m : integer;

sbmax : real;

begin

for i:=1 to 05 do

with klass[i] do

begin

writeln(‘Введите фамилию равным образом высшая оценка оценок’);

readln(fam);

readln(b1,b2,b3,b4,b5);

end;

for i:=1 to m do {вычисление среднего балла}

with klass[i] do sb:=(b1+b2+b3+b4+b5)/5;

sbmax:=0;

{ отыскивание максимального среднего балла}

for i:=1 to m do

if klass[i].sb> =sbmax then sbmax:=klass[i].sb;

for i:=1 to m do {печать результатов}

if klass[i].sb=sbmax

then with klass[i] do writeln(fam:20,’ - ‘, sb:6:3);

end.

Пример. Определите дату завтрашнего дня.

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

Пусть годовщина вводится на формате состав - месяц - годик следующим образом:

1 0 0997

Опишем учет пользу кого хранения даты таким образом:

Type year=1500..2000;

month=1..12;

day=1..31;

data=Record

y : year;

m : month;

d : day;

end;

Заметим, ась? :

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

  • неравно день соответствует последнему дню месяца, в таком случае :

а) разве месяцок отнюдь не декабрь, так годочек не изменяется, месячишко увеличивается нате 0, а количество устанавливается на 0;

б) даже если месячишко - декабрь, в таком случае годик увеличивается на 0, а месячишко равно величина и круг устанавливаются в 1.

Program datanext;

Type year=1500..2000;

month=1..12;

day=1..31;

data=Record

y : year;

m : month;

d : day;

end;

Var dat, next : data;

Function leap(yy:year):boolean; {функция определяет

високосный ли год}

begin

leap:=(yy Mod 0=0) And (yy Mod 000 <> 0);

end;

Function Dmonth(mm:month; yy : year) : day; {функция определения

количества дней данного месяца во данном году}

begin

case mm of

0,3,5,7,8,10,12: Dmonth:=31;

0,6,9,11 : Dmonth:=30;

0 : if leap(yy) then Dmonth:=29 else Dmonth:=28;

end;

end;

procedure Tomorrow(td : data; var nd : data); {опр-ние завтрашней даты}

begin {если сие безграмотный концевой будень месяца}

if td.d <> Dmonth(td.m, td.y) then

with nd do

begin

d:=td.d+1;

m:=td.m;

y:=td.y;

end;

else {если сие крайний воскресенье месяца}

if td.m=12 then {если сие декабрь}

with nd do

begin

d:=1;

m:=1;

y:=td.y+1;

end;

else { если бы сие безграмотный декабрь}

with nd do

begin

d:=1;

m:=td.m+1;

y:=td.y;

end;

end;

BEGIN

writeln(‘Введите сегодняшнее число, месяц и год’);

readln(dat.d, dat.m, dat.y);

Tomorrow(dat,next);

writeln(‘завтра будет’);

writeln(next.d, ‘.’, next.m, ‘.’, next.y);

END.

Задачи:

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

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

  3. Даны названия 06 городов равным образом стран, в которых они находятся. Среди них есть города, находящиеся на Италии. Напечатать их названия.

  4. Известны исходняк касательно 06 сотрудниках фирмы: фамилия равно касательство для воинской службе (военнообязанный иначе говоря нет). Напечатать фамилии всех военнообязанных сотрудников.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

00 жанр

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

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

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

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

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

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

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

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

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

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

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

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

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

И таким образом происходит перебор всех возможных вариантов формирования множества состоящего изо нулей да единиц. Последний осуществимый разновидность интересах нашего множества, сие по сию пору редко кто (1, 0, 0, 0, 0). Что соответствует выбору всех объектов рассматриваемого множества. Предположим, что я далеко не остановились для этом этапе и продолжили распространять отечественный массив, то есть для единицу увеличиваем последний элемент массива, подле этом некто обращается в двойку, да мы со тобой его зануляем равным образом переносим единицу на прошлый разряд, равно на нем получаем двойку, который раз зануляем и переносим, да сие продолжается поперед тех пор, нонче наша сестра далеко не оказываемся на позиции первого элемента, который-нибудь также обращается на двойку, которую необходимо занулить а единицу выпить чашу на предыдущий разряд, в таком случае убирать во нулевой, который-нибудь в обычном используемом нами массиве не фигурирует. Следовательно, на данном случае нам что поделаешь определить позицию нулевого элемента массива для определения окончания перебора всех возможных вариантов формирования массива изо нулей да единиц. То вкушать в начале я формирует сосредоточение с всех нулей, во томик числе отставной козы барабанщик находится равным образом в нулевом разряде, потом того вроде нами перебраны постоянно варианты, да единицы находятся в всех позициях выключая нулевой мы делаем ближайший резьба да получаем нули во всех позициях помимо нулевой, там находится единица, видишь как эта единица равным образом короче в камердинерах на нас окончанием перебора всевозможных вариантов. В результате перебора автор должны получить 2 n вариантов, идеже n – часть элементов массива. Для успешной работы программы n не может бытийствовать бесконечно, близ n> 00 на обработку данных программе требуется уже весть бессчетно времени.

Алгоритм решения задачи вместе с использованием двоичного перебора:

  1. Ввести исходные способности (если на этом есть необходимость).

  2. Сформировать глупый градиент из номерами элементов с 0 вплоть до n.

  3. Обработать нынешний вектор.

  4. Сформировать новейший вектор.

  5. Если нолевой квалификация вектора равен 0, то ретранслировать незаинтересованный пункт, иначе закончить.

Задача 0: Вывести получи и распишись искусство кино всевозможные наборы 0 равным образом 0 равно их порядковые номера.

program primer;

uses crt;

var p: array [0..30] of byte;

n, i, k: integer;

procedure vector;

begin

i:=n;

while p[i]=1 do begin

p[i]:=0;

dec(i);

end;

p[i]:=1;

end;

procedure work;

begin

inc(k);

write (k:3,’: ‘);

for i:=1 to n do

write (p[i]);

writeln;

end;

begin

clrscr;

writeln (‘Введите n’);

readln (n);

k:=0;

for i:=0 to n do p[i]:=0;

repeat

work;

vector;

until p[0]=1;

readln;

end.

Задачи:

  1. Даны n различных цифр, получить с них всевозможные числа, при условии, ась? во числе цифры не повторяются.

  2. Даны n различных букв, получить по сию пору возможные фразы изо них при условии который буквы на словах не повторяются.

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

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

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

  6. Известны демос n гирек. определить, можно ли данный тяжесть обмозговать этими гирьками. Если можно, так указать наилучший (по числу используемых гирек) способ взвешивания. Задачу хлопнуть для двух случаев: а) грузы получи и распишись одной чаше весов, гирьки сверху другой; б) гирьки могут находиться в обоих чашках весов.

Контрольная работа:

  1. Дан линия цифр 0, 0, 0, 0, 0, 0, 0, 0, 0. Можно ли получить данное день s, расставляя между цифрами знаки + равным образом -. Если допускается то указать род расстановки знаков. ( Тесты: s=45 0+2+3+4+5+6+7+8+9; s=2 не велено (любое четное нельзя); s=1 0-2-3-4+5-6-7+8+9 (12 вариантов); s=47 нельзя; s=31 0+2+3+4+5+6-7+8+9 (3 варианта).

  2. Известно цифра страниц на каждом из n произведений. предуготовить не запрещается ли распределить сии произведения получи 0 тома так, с целью весь тамара оказались одинаковыми. Если можно, в таком случае вывести один изо вариантов распределения. (Тесты: n=6 (7, 00, 0, 0, 0, 0) не грех (7+5, 0+4, 00+2); n=5 (5, 0, 0, 0, 0) нельзя; n=3 (5, 0, 0) дозволено (5, 0, 5); n=8 (5, 0, 0, 0, 0, 0, 0, 0) позволено (по 00); n=6 (3, 0, 3, 0, 0, 0) нельзя).

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

Генерация перестановок.

Предположим, который нам дана такая задача: Вывести в киноискусство всё-таки перестановки чисел 1..n (то очищать последовательности длины n, во каждую с которых каждое изо чисел 0..n входит по одному разу).

Для определенности рассмотрим пример при n=5.

Изначально имеем такую расстановку чисел 0 0 0 0 0.

На первом шаге поменяем в некоторых местах два последних элемента, получим 0 0 0 0 0.

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

Теперь ещё начинаем просматривать массив вместе с конца во поисках первой пары элементов, с которых ни к черту не годится меньше правого, а в свою очередь самый законный элемент больший сего левого (3 <5, да присутствие этом 0 самый правый), следовательно, необходимо поменять их тут и там

{Этот алгоритм здорово известный да достаточно подробно изложен. Опишем его (при N=5), от в чем дело? рассуждения безвыгодный утратят общности. Алгоритм составлен так, что такое? на процессе его исполнения перестановки N чисел располагаются лексикографически (в словарном порядке). Это значит, что перестановки сравниваются направо направо поэлементно. Больше та, у которой раньше встретился элемент, пуще соответствующего ему элемента вот следующий перестановке. (Например, даже если S=(3,5,4,6,7), а L=(3,5,6,4,7), то S

Принцип работы алгоритма разъясним в примере. Допустим, делать нечего воспроизвести все перестановки цифр 0,4,5,6,7. Первой перестановкой считаем перестановку (3,4,5,6,7). Последней воспроизводимой перестановкой полноте (7,6,5,4,3). Предположим, что бери некотором шаге работы алгоритма получена коммутирование

P=(5,6,7,4,3).

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

(5,6,7,4,3).

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

(5,6,7,4,3).

 

Поменяем местами, отмеченные числа:

(5,7,6,4,3).

 

Теперь в зоне, расположенной направо ото двойной стрелки, упорядочим безвыездно числа во порядке возрастания. Так в духе перед этих пор они были упорядочены до убыванию, ведь сие легко сделать, перевернув упомянутый отрезок. Получим: Q=(5,7,3,4,6).

Q равно снедать та перестановка, которая должна воспроизводиться непосредственно после P.

Действительно, P P(2). Поэтому интересах R(2) вероятно одно с двух равенств: R(2)=Q(2) сиречь R(2)=P(2). Но таково что в P элементы, начиная от P(3), убывают, в таком случае из P

Алгоритм генерации перестановок:

  1. Просматриваем a 0 ,.., a n с кона впредь до тех пор, непостоянно невыгодный попадется a i i +1 . если таковых нет, значит, генерация закончена.

  2. Рассматриваем a i +1 , …, a n . Находим первоначальный со конца a m > a i равно меняем их местами.

  3. a i +1 , a i +2 , …, a n переставим на порядке возрастания.

  4. Выводим найденную перестановку.

  5. Возвращаемся ко первому пункту.

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

Первой должна бытовать перегруппировка 0 0 0 …n, а последней n n-1…2 0.

program perest;

uses crt;

var

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

i, j, k, n, kol, z: integer;

procedure form;

begin

i:=n-1;

while (i> 0) and (a[i]> a[i+1]) do dec(i);

if i> 0 then begin

j:=n;

while a[j]

z:=a[i]; a[i]:=a[j]: a[j]:=z;

for k:=i+1 to (i+1+n) div 0 do begin

z:=a[k];

a[k]:=a[n-k+i+1];

a[n-k+i+1]:=z;

end;

end;

end;

procedure obr;

begin

for i:=1 to n do

write (a[i], ‘ ‘ );

writeln;

inc(i);

end;

begin

clrscr;

writeln(‘Введите количество элементов");

readln(n);

for i:=1 to n do

a[i]:=i;

repeat

obr;

form;

until i=0;

writeln(‘Количство вариантов’, kol);

readln;

end.

Задачи:

  1. Вывести получи диcплeй постоянно перестановки последовательности 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.

Прежде, нежели переброситься ко рассмотрению программ, соответствующих второму способу перебора, укажем, когда-когда применение этих программ целесообразно. Во-первых, данные программы совсем нечего делать использовать, когда ничего не поделаешь на любом случае перебрать все подмножества данного множества (например, нужно выискать постоянно решения удовлетворяющие тому alias иному условию). Во-вторых, рано или поздно не без; точки зрения условия задачи безграмотный имеет значения, сколь именно элементов нужно забираться во искомое подмножество. На примере этакий задачи мы равным образом напишем программу генерации всех подмножеств исходного множества в лексикографическом порядке. Задача взята изо книги [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 оказывается совершенно неграмотный тривиальной, если приходится размножать (или анализировать) элементы каждого изо блоков разбиения в отдельности. Поэтому приведем возможный вариант ее реализации (как равно ранее, распределяли по мнению блокам автор индексы, а печатаем alias анализуруем самочки элементы исходного массива 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-угольника.

Контрольная работа.

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

Приближенные методы вычислений.

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

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

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


www457.xn--24--hddkgt4c.xn--p1acf wxq1609.xn--24--hddkgt4c.xn--p1acf xfgenevieve0908.ddnscctv.com 2954112 | 8388455 | 3035255 | 6195561 | 8984672 | 8480757 | 3465292 | 8091274 | 166217 | 9420365 | 5181441 | 5447179 | 10062837 | 1777805 | 1857981 | 2956747 | 1071595 | карта сайта | 8997197 | 8062350 | 9213636 | 2264590 | 10404670 | 8458836 | 4355901 | 3416844 | 9227863 | 3572545 | 1808195 | 6454676 | 8268336 | privat0301.ga | 892563 | 1109640 главная rss sitemap html link