АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07e011.pdfУДК 681.3.06 ББК 22.18...

151
ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ИНСТИТУТ (ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ) ЗАОЧНЫЙ ФАКУЛЬТЕТ Заочный факультет АКАТНОВА Л.А. ИНФОРМАТИКА МОСКВА 2005

Upload: others

Post on 06-Aug-2020

20 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ИНСТИТУТ

(ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ЗАОЧНЫЙ ФАКУЛЬТЕТ

Заочныйфакультет

АКАТНОВА Л.А.

ИНФОРМАТИКА

МОСКВА 2005

Page 2: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ФЕДЕРАЛЬНОЕ АГЕНСТВО ПО ОБРАЗОВАНИЮ РОССИЙСКОЙ ФЕДЕРАЦИИ

МОСКОВСКИЙ АВТОМОБИЛЬНО-ДОРОЖНЫЙ ИНСТИТУТ (ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ)

ЗАОЧНЫЙ ФАКУЛЬТЕТ

АКАТНОВА Л.А.

ИНФОРМАТИКА

МОДУЛЬ 1. ВОПРОСЫ ТЕОРЕТИЧЕСКОЙ И ПРИКЛАДНОЙ ИНФОРМАТИКИ

МОДУЛЬ 2. Алгоритмизация и программирование

Рекомендовано научно-методическим советом

факультета управления МАДИ (ГТУ)

МОСКВА 2005

Page 3: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

УДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО «Техполи-

графцентр», 2005. – 150 с. Лицензия на издательскую деятельность – код 221, серия ИД

№ 03313 от 20.11.2000 г. Рецензент: кандидат технических наук, доцент, начальник отдела Респуб-

ликанского медиацентра Сергеев А.С. МОДУЛЬ 1. В модуле содержится описание основных понятий и

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

МОДУЛЬ 2. В модуле приведено большое количество примеров с алгоритмами, которые представлены в виде схем алгоритмов и в виде записи на алгоритмическом языке. За основу взят метод опе-раторного программирования на языке Паскаль. Рассмотрены ли-нейные, разветвляющиеся и циклические участки в вычислениях, использование одномерных, двухмерных массивов, строк символов, файлов.

© Акатнова Л.А., 2005

Page 4: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

МОДУЛЬ 1

ВОПРОСЫ ТЕОРЕТИЧЕСКОЙ И ПРИКЛАДНОЙ ИНФОРМАТИКИ

1. ОТ ИНФОРМАЦИИ К ИНФОРМАЦИОННЫМ ТЕХНОЛОГИЯМ 1.1. Информатика, как наука

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

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

Три кита информатики: техника- алгоритм- программа. Как любая наука имеет два направления: • Теоретическая информатика: понятия, определения; ис-

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

• Прикладная информатика: процесс сбора, передачи и хранения информации; защита от помех и несанкционированного доступа; технические средства; алгоритмизация и программирова-ние; пакеты прикладных программ; принципы построения информа-ционных сетей; базы данных и знаний; искусственный интеллект; построение экспертных систем.

В соответствии с этим различаются два подхода: информация - информационные технологии - информационный ресурс и модель – алгоритм – программа.

Так как вопросы прикладной информатики подробно рассмат-риваются в различных дисциплинах кафедры, остановимся на про-блемах теоретической. Информатика, как новая наука, должна:

• определить предмет изучения (это – информационный ресурс, как симбиоз знания и информации);

Page 5: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• создать или частично заимствовать из других наук поня-тия (категории), так информация, информационный шум, бит, байт – это теория связи; объект управления, прямая и обратная связь – это кибернетика, есть и свои:

1. - ИР (информационный ресурс), 2. - социальная энтропия, 3. - информационная среда, 4. - ИТ (информационные технологии), 5. - искусственный интеллект, 6. - модели представления знаний (тезисные, аналитиче-

ские, синтетические – ТАС модели), 7. квант знания, 8. информационный цикл (рождение, накопление, обработ-

ка, использование информации для развития системы). 1.2. Информация, её свойства, способы измерения Информация (латинское - разъяснение, изложение, осведом-

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

Передача информации состоит из нескольких этапов, напри-мер, источник сообщения ⇒ канал связи ⇒ получатель сообщения или более развёрнуто, как на рис.1.1

Ошибка!событие сбор преоб-

разова-обработка на ВМ

передача

Рис 1.1. Схема передачи информации

потребитель информации

воспроизве-дение

передача хранение

Информация обрабатывается на вычислительной машине (ВМ), т.е. машина является инструментом таким, как палка, камень, молоток и пр. Этот инструмент изменялся (XVI век – русские счёты; XVII – суммирующая машина Паскаля; XIX – механический арифмо-метр Чебышева и Беббиджа для последнего работала первым про-граммистом - Ада Лавлейс); XX - первые аналоговые (АВМ) и циф-

Page 6: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ровые (ЦВМ) машины, название ЦВМ трансформировалось сначала в электронные (ЭВМ) машины, потом в персональный компьютер (ПК или PC – personal computer; computer – устройство преобразо-вания информации). Наши первые ЦВМ появились в 1947 – 1952 го-дах МЭСМ и БЭСМ (малая и большая счётная машина).

Рассмотрим основные свойства информации и познакомимся с терминологией:

• релевантность (способность соответствовать запросам по-требителя);

• полнота (способность полностью характеризовать отобра-жаемый объект);

• своевременность (вовремя соответствовать нуждам потре-бителя);

• достоверность (не иметь скрытых ошибок); • доступность (возможность её получения данным потреби-

телем); • защищённость (невозможность несанкционированного ис-

пользования или изменения); • эргономичность (удобство формы и объёма информации с

точки зрения потребителя); • адекватность (однозначно соответствовать отображаемому

объекту, т.е. релевантность + достоверность); • форма или внутренняя организация (неупорядоченная, от-

сортированная или с применением каких – то структур данных). Для измерения информации могут быть использованы сле-

дующие способы: • объёмный (количество символов в информации, чувстви-

телен к форме представления, сравним 25, 110012, двадцать пять; файл с одними и теми же данными, представленный в текстовом или двоичном формате занимает в памяти разное количество байт);

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

Page 7: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

1/32, в теории информации используется Э=log2m (m – число равно-вероятных выборов), Э= log2 32=5. Проверим это набором вопросов:

- карта красной масти? - 0; - трефы? – 0; - одна из четырёх старших? – 1; - одна из двух старших? – 0; - дама? – 1. Э=001012. • алгоритмический (количественная характеристика слож-

ности сообщения как минимальное число внутренних состояний машины Тьюринга): бесконечная лента, разбитая на ячейки для представления одного символа (число символов – это алфавит), устройство управления, головка для считывания, которая находится в одном из допустимых состояний; выполняется цикл – прочесть символ под головкой, состояние головки определит новый записы-ваемый символ и перемещение головки. 1.3. Информационный ресурс и информационные технологии

Информационный ресурс – это симбиоз знаний и информации, именно ИТ выступают средством превращения знаний в ИР. Это по-нятие связано с созданием в 70 годы интеллектуальных систем (баз знаний и механизмов их обработки и вывода). Можно дать ещё одно определение: математическая формализация и логическая полнота среды и всех факторов, обеспечивающих появление новых знаний, их передачу, использование и воздействие на объект рассматри-ваемой системы.

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

В понятие ИТ входят и технические средства, и математиче-ское, алгоритмическое, программное, лингвистическое обеспечение, и средства связи по взаимодействию с людьми.

В формировании ИТ участвуют различные науки: кибернетика, системотехника, теория информации, общественные науки, эконо-

Page 8: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

ИТ основаны на повсеместном применении ПК и оргтехники, активном участии пользователей в информационном процессе, вы-соком уровне дружественного пользовательского интерфейса, ши-роком использовании пакетов прикладных программ (ППП), приме-нении систем искусственного интеллекта и экспертных, использова-нии телекоммуникаций.

К современным ИТ относятся базы и банки данных, ППП, вы-числительные сети, глобальная информационная сеть ИНТЕРНЕТ, модели представления знаний и искусственный интеллект, эксперт-ные системы, мультимедийные технологии. Последние позволяют объединять данные, звук, анимацию и графическое изображение в единое целое.

Понятие искусственный интеллект (ИИ) появилось при созда-нии «решателей» задач, относящихся к разряду творческих; разра-ботке роботов, действующих в реальной среде и выполняющих не-тривиальные задания, поставленные человеком; оснащении ПК про-граммно – техническими средствами высокого уровня, способными делать логические выводы.

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

1.4. Информатизация общества Информатизация общества предполагает: • наличие технической базы (компьютерные и телеком-

муникационные системы и сети); • развитие интеллектуального (информационного) рынка. Общество можно назвать информационным, если большинст-

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

Page 9: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Западная Европа к 2030, Россия к 2050. Любая страна, насколько развитой она ни была, перейдёт в разряд стран третьего мира, если опоздает с информатизацией.

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

• бумажная информация (книги, документы, рецепты и пр.); • опытные образцы (любые товары, препараты, оборудо-

вание); • машинная информатика (модели, алгоритмы, програм-

мы); • техника (компьютерная, интегральные схемы, средства

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

газеты, телефонные справочники и пр.). Объём расходов США на информатизацию превосходит объём

военных расходов. Можно назвать два проекта, базирующихся на развитых ИТ – это КОИ (компьютерная оборонная инициатива) и СОИ (стратегическая оборонная инициатива).

1.5. Принцип программного управления Теоретические основы вычислительной техники были сформу-

лированы Фон Нейманом в 1945 году при подготовке предложений по первой ЦВМ США EDVAC, позднее они получили название «принципа программного управления», вот они:

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

• адресный принцип (в команде указываются не значения данных, над которыми выполняются операции, а адреса ячеек памя-

Page 10: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ти, где они размещаются); • автоматизм (машина работает автоматически), она запо-

минает адрес выполняемой команды и в ней же содержится указа-ние на адрес следующей:

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

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

Революционный для своего времени «принцип программного управления» успешно работает и в современных ПК.

Приведённые понятия и определения могут использоваться для вводной лекции по дисциплине Информатика и, как сведения, о дисциплинах, читаемых на кафедре по данному направлению («Системотехника», «Программирование на языках высокого уров-ня», «БД», «Экспертные системы», «Мультимедиа» и пр.).

1.6. Тесты Вариант 1

1. Информатика является разделом математики самостоятельной наукой частью кибернетики

2. Предметом изучения информатики является информационный ресурс информационный шум соединение компьютеров в сеть

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

Page 11: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Вариант 2 1. К разделам прикладной информатики относится

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

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

использование баз знаний базовое обучение сотрудников

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

Вариант 3 1. К собственным категориям информатики относится

искусственный интеллект информационный шум ПК, как объект управления

2. К основным свойствам информации можно отнести её многовариантность постоянство в течение длительного времени эргономичность

3. В свойство переадресации принципа программного управления была заложена

возможность передавать информацию в двоичной системе счисления

возможность работать не только с числами, но и со строками символов

работа с массивами чисел 2. МАТЕМАТИЧЕСКИЕ ОСНОВЫ ИНФОРМАТИКИ

В этом разделе будут рассмотрены две большие темы, отно-сящиеся к разделу теоретической информатики: системы счисления и представление символ и чисел в ПК. По двум этим темам должна быть выполнена первая контрольная работа.

Page 12: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2.1. Системы счисления Команды, которые выполняет ПК, данные, которые в этих ко-

мандах используются, представлены в двоичной системе счисле-ния, так как большинство устройств и элементов имеют только два устойчивых состояния «да» - 1 и «нет» - 0. Запись числа в двоичной системе счисления (разложенного по степеням основания два) тре-бует, по сравнению с десятичной системой, приблизительно в 3.3 цифр больше. Представление этих чисел в системах счисления 2k , во-первых, требует меньшего количества цифр, во-вторых, правило перевода из двоичной системы счисления в систему 2k очень про-стое и уже давно эта операция возложена на ПК. Таким образом, нас будут интересовать системы счисления десятичная, двоичная, восьмеричная и шестнадцатеричная. Каждая из них характеризует-ся своим основанием (10, 2, 8, 16), по степеням которого число рас-кладывается, и конечным набором специальных символов (цифр). Количество этих символов совпадает со значением основания. Все эти системы называются позиционными, так как значение каждой цифры зависит от её положения по отношению к запятой или пра-вому краю целого числа. Десятичное число 202,5 раскладывается по степеням 10 следующим образом: 2*102+0*101+2*100+5*10-1 («вес» первой и второй цифры два - разный). Можно десятичное число 37,5 разложить по степеням основания два: 1*25+0*24+0*23+1*22+0*21+1*20+1*2-1 , теперь запишем все цифры, стоящие перед основанием два и получим двоичное представление этого числа (37,510=100101,12). Мы будем использовать довольно простые «мнемонические» (запоминай и делай как я!) правила пе-ревода. Римская система счисления не относится к позиционным, так как её цифра X (десять) на любой позиции будет означать де-сять. Запись десятичного числа 30 в римской системе - XXX. Коли-чество символов в таких системах должно увеличиваться, чтобы не допускать длинных цепочек в записи больших чисел. В римской сис-теме используются символы: I-1, V-5, X-10, L-50, C-100, D-500, M-1000.

Page 13: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Цифры, которые используются в разных системах счисления, приведены в табл. 2.1. «Цифры» от A до F имеют «вес» от 10 до 15.

Таблица 2.1 Цифры для различных систем счисления

Система счисления Цифры Десятичная 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 Двоичная 0, 1 Восьмеричная 0, 1, 2, 3, 4, 5, 6, 7 Шестнадцатеричная 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F

2.2. Перевод из одной в другую систему счисления Можно пользоваться довольно простыми правилами («мнемо-

ническими»), за которыми стоят математические формулы. Для не-которых из них необходимо использовать таблицу представления чисел от 0 до 9 в разных системах счисления. В табл. 2.2. приведе-ны эти значения для десятичных чисел от 0 до 19. В правилах, при-ведённых ниже, появляется название ещё одной системы счисления двоично-десятичная, она давно и активно используется в ПК. Читая правила 7 и 8, обратите внимание, что двоичная и двоично-десятичная системы счисления по-разному представляют числа: первая – это разложение числа по степеням два, а вторая - пред-ставление каждой десятичной цифры её двоичным аналогом.

В ПК используются и двоичная и двоично-десятичная системы счисления.

Таблица 2.2 Представление чисел в разных системах счисления

10 2 8 16 10 2 8 16 0 0 0 0 10 1010 12 A1 1 1 1 11 1011 13 B2 10 2 2 12 1100 14 C3 11 3 3 13 1101 15 D4 100 4 4 14 1110 16 E5 101 5 5 15 1111 17 F6 110 6 6 16 10000 20 107 111 7 7 17 10001 21 118 1000 10 8 18 10010 22 129 1001 11 9 19 10011 23 13

Page 14: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

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

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

0⇐…⇐частное⇐частное⇐целое число10 2 (8, 16, 5 и т.д.) ⇓ ⇓ ⇓ остаток…остаток остаток2 (8, 16, 5 и т.д.)

0⇐1⇐2⇐4⇐9⇐18⇐3710 2 ⇓ ⇓ ⇓ ⇓ ⇓ ⇓ 1 0 0 1 0 12

2.2.2. Перевод дробной части десятичного числа в любую систему счисления

0⇐4⇐3710 8 ⇓ ⇓ 4 58

0⇐2⇐3710 16 ⇓ ⇓ 2 516

3710=1001012=458=2516

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

Page 15: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

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

0, дробная часть10 x 2 (8, 16, 5,…)⇒дробная часть результата⇒…⇒ ⇓ ⇓ целая часть результата … 2 (8, 16, 5…)

2.2.3. Перевод целой части числа любой системы счисления в десятичное число

Порядок перевода целой части числа любой системы счисле-ния в целое десятичное представление – следующий: старшую цифру числа умножаем на основание системы (⇓), к результату прибавляем следующую цифру и снова умножаем на основание, за-вершаем вычисления после прибавления самой младшей цифры. Это значение не умножаем на основание!

цифра цифра … цифра2 (8,16, 5, …)x 2 (8, 16, 5,…) ⇓ +⇓ + рез-ат рез-ат …10

0,5 1,0 2,0 4,0 0,2510x2⇒0,5 ⇒ 0 0,2510x8 ⇒ 0 0,2510x16 ⇒ 0 ⇓ ⇓ ⇓ ⇓ 0 1 2 4 Конечный перевод: 0,2510=0,012=0,28=0,416. 0,74 1,48 0,96 1,92 1,84 1,68 1,36… 0,3710 x 2⇒ 0,74 ⇒ 0,48 ⇒ 0,96 ⇒ 0,92 ⇒ 0,84 ⇒ 0,68 ⇒ 0,36… ⇓ ⇓ ⇓ ⇓ ⇓ ⇓ ⇓… 0 1 0 1 1 1 1… 2,96 7,68 5,44 3,52 … 0,3710 x 8 ⇒ 0,96 ⇒ 0,68 ⇒ 0,44 ⇒ 0,52 … ⇓ ⇓ ⇓ ⇓ … 2 7 5 3 … Бесконечный перевод: 0,3710≈ 5,92 14,72 11,52 8,32 … 0,01011112 ≈ 0,27538≈0,5EB8160,3710x 16 ⇒ 0,92 ⇒ 0,72⇒ 0,52⇒ 0,32 … ⇓ ⇓ ⇓ ⇓ … 5 E B 8 …

1 0 0 1 0 12 = 3710 4 58 = 3710 1 1 1 1 1 12 = 6310

x 2 | ⁄ | ⁄ | ⁄ | ⁄ | ⁄ +! x 8 | ⁄ + x 2 | ⁄ | ⁄ | ⁄ | ⁄ | ⁄ + 2 4 8 18 36 32 2 6 14 30 62 1 1 1 1 18 = 468110 F F16 = 25510

x 8 | ⁄ | ⁄ | ⁄ | ⁄ + x 16 | ⁄ + 8 72 584 4680 240

Page 16: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2.2.4. Перевод дробной части числа любой системы счисления в десятичное число

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

0, цифра цифра … цифра цифра2(8, 16, 5, …)

⇓ + ⇓ ⇓ + ⇓ : 2 (8,16, 5,…) рез-ат10 рез-ат … рез-ат рез-ат

0, 0 12 0, 9 B 2 816

⇓ + ⇓ : 2 ⇓ ⇓ ⇓ ⇓ : 16 0,2510 0,5 0,697 0,5 0,60610 0,15625

2.2.5. Перевод двоичного числа в систему счисления 2k Если k=3, то двоичное число переводится в восьмеричную

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

100101,01011112 100101,01011112

4 5 , 2 7 48 2 5 , 5 Е16

2.2.6. Перевод числа из системы счисления 2k в двоичное число Для обратного перевода следует каждую восьмеричную или

шестнадцатеричную цифру записать своим двоичным аналогом (табл. 2.2) обязательно на трёх (для восьмеричной системы) или четырёх (для шестнадцатеричной системы) позициях. Незначащие нули (в начале или конце числа) могут не записываться. 730,5268 ⇒ 111011000,101010112

F2B,0A616 ⇒ 111100101011,000010100112

Page 17: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2.2.7. Перевод десятичного числа в двоично-десятичную систему счисления

Седьмое правило похоже на шестое, мы снова пользуемся табл. 2.2 и каждую десятичную цифру записываем своим двоичным аналогом обязательно на четырёх позициях. 37,2510 ⇒ 110111,001001012-10, но 37,2510 ⇒ 100101,012.

2.2.8. Перевод двоично-десятичного числа в десятичную систему счисления

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

1101111000,0010011112-10 ⇒ 378,27810, но 0111111,1 не может быть числом двоично-десятичной системы счисления (3?,8). 2.3. Представление символьной и числовой информации в ПК

Под кодированием понимается переход от исходного пред-ставления информации, удобной для восприятия человеком, к представлению, удобному для хранения, передачи и обработки. Вся информация в памяти ПК записывается нулями и единицами в циф-ровом двоичном коде. Это объясняется тем, что электронные эле-менты, из которых строится оперативная память (и все основные устройства ПК), могут находиться только в одном из двух устойчи-вых состояний (магнитное поле есть или нет, электрическая цепь замкнута или разомкнута и пр.). Устройство, которое в любой мо-мент времени может находиться в одном из двух возможных со-стояний, называется двоичным индикатором, значения этих состоя-ний – (двоичный код – 0 или 1) – битом. Минимальная единица ин-формации, которую анализирует компьютер – последовательность из восьми бит называется байтом. Важным понятиям является «слово» - последовательность бит, рассматриваемых компьютером, как целое (может быть два или четыре байта). Единицами измере-

Page 18: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ния ещё являются: Кбайт = 1024 байта ≈ 1*103 – (килобайт); Мбайт = 1048576 байт ≈ 1*106 – (мегабайт); Гбайт =1073741824 байта ≈ 1*109 – (гигабайт).

Форматы данных, используемых в ПК можно разделить на три группы:

• символы, числа без знака, битовые данные (всё, что раз-мещается сейчас в одном байте и может иметь значение от 0 до 255, перспективно размещение в двух байтах, с десятичным значе-нием от 0 до 65535);

• формат с фиксированной точкой (для целых чисел); • формат с плавающей точкой (для вещественных чисел).

2.3.1. Кодировка символов С помощью единиц и нулей требуется закодировать цифры,

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

Наиболее известными кодами являются: BCD (Bimary Code Decimal) – двоично–десятичный код, в кото-

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

EBCDIC (Extended Binary Code Decimal Interchange Code) – расширенный вариант предыдущего кода, который позволяет коди-ровать и все прочие символы.

ASCII (American Standard Code for Information Interchange) – американский стандартный код обмена информацией.

КОИ-7 (двоичный семибитовый код обмена информацией) – совпадает с предыдущим, за исключением букв русского алфавита.

2.3.2. Представление чисел с фиксированной точкой Целые числа, имеющие значения от -128 до 127 занимают

один байт памяти, со значениями от -32768 до 32767 – два байта, а

Page 19: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

в четырёх байтах могут храниться значения от -2147483648 до 2147483647.

При кодировке все положительные числа записываются в дво-ичной системе счисления (прямой код), а отрицательные в обрат-ном или дополнительном коде. Для представления отрицательного числа в любой системе счисления в дополнительном коде следует вычесть его из единицы с количеством нулей равным количеству цифр в отрицательном числе. Как мы увидим, это общее правило очень просто реализуется, особенно для двоичной системы счисле-ния. Обратный код – это дополнение до максимальной цифры той или иной системы счисления, а дополнительный – до её основания.

-369810 : -101112 : 9999 11111 - 3698 - 10111 6301 обратный 01000 обратный + 1 + 1 6302 дополнительный 01001 дополнительный 10000 100000 - 3698 - 10111 6302 дополнительный 01001 дополнительный

Из примера перевода отрицательного двоичного числа видно,

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

2.3.3. Представление чисел с плавающей точкой Данные и результаты очень редко имеют только целые значе-

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

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

Page 20: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

того, где находится точка (для неё явно один разряд не выделяется, её положение «подразумевается»), диапазон чисел будет различ-ным, если слева, то числа от 0.00000 до 0.99999, если после двух цифр, то – от 0.000 до 99.999 и т.д.

Разрядные сетки первых компьютеров имели именно такое строение.

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

Этот метод означает следующее: каждый раз при записи числа в память модуль мантиссы изменяется таким образом, чтобы соот-ветствовать разрядной сетке компьютера r<=|мантисса|<R. Изменя-ется при этом и порядок числа (вот почему плавающая точка – её положение в мантиссе «плавает» в зависимости от порядка), это действие называется нормализацией, а значения r и R – условием нормализации. В двоичной разрядной сетке самый левый бит отво-дится под знак числа (0, если число положительное и 1, если отри-цательное) в следующих восьми разрядах содержится порядок (ха-рактеристика) числа. Это значение может меняться от -12810 (-2008) до 12710 (1778), так как для знака порядка разряд не предусматрива-ется, то к любому порядку добавляется 12810 (2008) – «смещённый порядок». Условие нормализации мантиссы 0<=|M|<1, т.е. после за-пятой обязательно идёт значащая цифра (не ноль), для мантиссы выделяется либо 23 двоичных разряда при размещении в четырёх байтах, либо 55 – в восьми байтах. В первом случае в мантиссе до восьми десятичных значащих цифры, во втором до шестнадцати.

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

-97,510= -141,48= -1100001,12= -0,110000112*27; знак числа: 1; мантисса: 11000011;

Page 21: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

порядок: 710=(7+200)8=100001112. 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14... 1 0 1 1 0 0 0 0 1 1 1 1 1 0 0 0 0 1 1 0... 0 0 знак| порядок | мантисса |

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

Мантисса Знак порядка Порядок Знак числа Пример 1. Условие нормализации 1<=|M|<10. Числа: -1; 10; 1234567; 0.00023. Сначала представим эти данные в нормализованном виде: -1= -1*100; 10= 1*101; 1234567= 1,234567*106; 0,00023= 2,3*10-4. Теперь запишем их в разрядную сетку, отметив в ней положение за-пятой.

Мантисса Знак порядка Порядок Знак числа ,

0 0 1 1 0 0 0 0 0 1 0 1 0 0 0 0 0 6 0 1 2 3 4 5 1 4 0 2 3 0 0 0

Пример 2. Условие нормализации 0,01<=|M|<0,1. Числа: 108; -674*10-5; 0,00546. Нормализация: 108= 0,01*1010; -674*10-5= -0, 0674*10-1; 0,00546= 0,0546*10-1. Разрядная сетка:

Мантисса Знак порядка Порядок Знак числа 0,0

0 10 0 1 0 0 0 0 1 1 1 6 7 4 0 0 1 1 0 5 4 6 0 0

Page 22: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2.4. Задания на контрольную работу по системам счисления и представлению чисел Вариант 1 (с решением)

1. Восьмеричное число 708 перевести в десятичную систему счисления, результат - в двоичную, новый результат – в восьме-ричную.

2. Нормализовать и разместить в условной разрядной сетке числа:

• 2,5*103; • -2,5*10-3; • 1000.

Условие нормализации 100<=|M|<1000. Решение: 1)

0← 1 ← 3 ← 7 ← 14← 28← 5610 2 ↓ ↓ ↓ ↓ ↓ ↓ 1 1 1 0 0 02

7 08 =5610 x 8 +

56

Если первое задание решено правильно, то с точностью до дробной части Вы должны получить исходное число.

1 1 1 0 0 02 =708

2) Нормализация: 2,5*103 =250*101; -2,5*10-3= -250*10-5; 1000=100*101.

Размещение в условной разрядной сетке: Мантисса Знак

порядка Порядок Знак числа ,

0 1 0 2 5 0 0 0 1 5 1 2 5 0 0 0 0 1 0 1 0 0 0 0

Вариант 2 1. Десятичное число 4610 перевести в шестнадцатеричную сис-

тему счисления, результат - в двоичную, новый результат – в деся-тичную.

2. Нормализовать и разместить в условной разрядной сетке

Page 23: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

числа: • -531259; • 1*105; • 3,75*10-3.

Условие нормализации 0.1<=|M|<1. Вариант 3

1. Двоичное число 10110112 перевести в десятичную систему счисления, результат – в восьмеричную, новый результат – в дво-ичную.

2. Нормализовать и разместить в условной разрядной сетке числа:

• 10; • 3*106; • -0, 0007. Условие нормализации 10<=|M|<100. 3. ПОРЯДОК ПОДГОТОВКИ И РЕШЕНИЯ ЗАДАЧ НА ПК Перед решением задачи на компьютере требуется предвари-

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

Познакомимся со всеми этапами подготовки решения задачи. 3.1. Постановка задачи

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

a) что является объектом исследования; b) какова цель исследования; c) какие данные являются исходными, какие граничными; d) какие ограничения накладываются на объект исследова-

ния.

Page 24: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

3.2. Формализация задачи Математическое описание физического процесса называют его

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

3.3. Выбор метода решения задачи Большинство задач точных методов решения либо не имеют,

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

3.4. Подготовка алгоритма решения задачи Теория алгоритмов, как раздел математики, появилась в 20

годы прошлого столетия. Марков А.А. в «Теории алгоритмов» дал следующее определение алгоритму: «точное предписание, опреде-ляющее вычислительный процесс, ведущий от варьируемых исход-ных данных к искомому результату». Арабский математик Абу Джафар ибн Муса аль-Хорезми разработал правила выполнения основных арифметических операций над многозначными числами (при умножении двух многозначных чисел следует получить част-ные произведения множимого, на каждую цифру множителя сдви-гая их на одну позицию, а затем сложить эти частные произведе-ния). В названиях алгоритм и алгебра увековечено его имя. Алго-ритм должен обладать целым рядом свойств, вот - основные свой-ства:

Page 25: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

a) свойство определённости, при котором предписание должно содержать строго определённый порядок действий;

b) свойство массовости, когда при любых исходных данных заданный порядок действий должен приводить к результату (следу-ет отметить, что вывод сообщения, например, «нет решения» и продолжение алгоритма дальше – тоже результат);

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

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

1) Начало. Перейти к пункту 2. 2) Ввести U, V, W. Перейти к пункту 3. 3) Сравнить U и V, если U>V, то положить M=U, в противном

случае положить M=V. Перейти к пункту 4. 4) Сравнить M и W, если W>M, то положить M=W. Перейти

к пункту 5. 5) Вывести M в качестве наибольшего значения. Перейти к

пункту 6. 6) Конец.

начало

w>m

M=w

вывод M

Ввод u, v, w

u>v

M=v M=u

Конец

Рис. 3.1. Максимальное значение среди трёх заданных

Page 26: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

В схемах алгоритмов используются стандартные блоки по ГОСТу 19.002-80 и 19.003-80, некоторые блоки приведены в табл. 3.1.

Таблица 3.1 Стандартные блоки для схем алгоритмов

Наименование Обозначение, размеры Функция

Пуск – останов Начало, конец схемы

Процесс Выполнение операции или группы операций

Решение

Выбор направления выполнения алгоритма в зависимости от усло-вий

Данные Ввод – вывод

a b

a

b

Предопреде-лённый процесс

Использование от-дельно подготовлен-ных алгоритмов

Соединитель

a=10, 15, 20, ... мм; b=1,5*a. При подготовке алгоритма конкретной задачи могут встретить-

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

3.5. Запись алгоритма

a b

a b

0,5 a

Page 27: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Подготовленный алгоритм можно записать на внутреннем язы-ке конкретной машины (в командах), в настоящее время этот способ почти не используется; на символическом языке конкретной машины Ассемблере и на языке высокого уровня (раньше это были языки Алгол, Фортран, Кобол, ПЛ-1, сейчас Паскаль, Си и др.). Весь вто-рой модуль этой дисциплины посвящён записи алгоритмов разных задач на языке Паскаль.

Отладка программы Отладка представляет собой процесс поиска и устранения

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

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

Для оперативного контроля компиляцию программы можно проводить после набора каждых 4-5 строк программы. После неко-торой практики поиск и ликвидация этого типа ошибок не будет вы-зывать затруднений. Ошибки, которые возникают на шаге выполне-ния программы, доставляют гораздо больше неприятностей.

Довольно часто оказывается, что синтаксически правильная программа завершает своё выполнение (Run / Run) аварийно с со-общением, например, о попытке деления на ноль, не найденном файле с исходными данными или «инвалидном» представлении чи-словых данных. Кроме того, программа может, по непонятной при-чине, зацикливаться. Сообщение о таких ошибках имеет вид: Run-time error код ошибки at адрес в памяти, где произошла ошибка.

Page 28: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Можно воспользоваться специальной программой отладки (Debugger), которая также интегрирована в систему Turbo. Для ра-боты в отладчике предусмотрен отдельный пункт меню (Debug) и различные функции в других пунктах (Run: Program reset, Trace into, Step over; Options: Debugger и пр.).

Часто очень полезным бывает проведение отладочного расчё-та, при котором не обязательно задавать действительные значения данным. Числа 0, 1, 10 иногда помогут выявить ошибки при записи операторов (операция умножения заменена операцией сложения, вместо деления на какую-то величину выражение умножается на неё и др.).

3.7. Решение задачи Решение задачи завершается многократными прогонами и

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

3.8. Несколько основных алгоритмов В завершении этой темы познакомимся с несколькими алго-

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

потребуется «посредник», ещё одна область памяти для временно-го хранения любой из двух переменных. Например, при каких-то ус-ловиях значения двух переменных требуется поменять (х=5, у=15, нужно, чтобы х=15 и у=5), в математике достаточно записать х=у, у=х. При записи такого обмена в программе следует иметь в виду, что х и у хранятся в отдельных областях памяти и первая запись х=у приведёт к потере числа 5, теперь в областях памяти для х и у хра-нится одно и тоже значение 15. Чтобы этого не произошло, требует-ся выполнить действия р=х, х=у, у=р (возможен алгоритм и без по-средника: х=х+у, у=х-у, х=х-у – всё равно операций три, а запомнить его сложнее). Проверьте работу каждого алгоритма.

Page 29: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

II. Найдём максимальное значение не среди трёх переменных U, V, W, а в массиве А, в котором находится 10 элементов. Этот ал-горитм приведён на рис. 3.2.а.

m=?

i=1

ввод ai

ai >m

m=ai

i=i+1

i<=10

вывод m

конец

да

да

начало

k=1

i=1

ввод ai

ai >ak

k= i

i=i+1

i<=10

вывод ak

конец

да

да

начало

Блок присвоения максимуму M начального значения не запол-нен. Можно это выполнить тремя способами:

Рис. 3.2. Значение (a) и индекс (б) максимального элемента в массиве

• Сначала ввести все 10 значений элементов массива, то-гда в блоке M=? можно записать M=A1. Во втором циклическом уча-стке остаётся только блок сравнения.

• В блоке M=? записать M= -1*105 (очень маленькое значе-ние), степень можно увеличить до 10, 20, 30. При поиске минималь-ного значения в массиве надо соответственно взять в качестве на-чального очень большое значение: M=1*105.

Page 30: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

в массиве А. Схема этого алгоритма приведена на рис. 3.2.б. Этот алгоритм является общим и может использоваться в

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

IV. Для некоторых алгоритмов должны использоваться так на-зываемые рекуррентные формулы (новое значение переменной оп-ределяется по её предыдущему значению). В отличие от математи-ческой записи In=In-1+1, это выражение в программе записывается без индексов новое значение, предыдущее (I=I+1), так как берётся прежнее значение области памяти, отведённой под переменную, оно изменяется и новое значение записывается по тому же адресу. Следует только помнить, что для всех рекуррентных формул зада-ётся начальное значение. Это рекомендуется выполнять всегда, даже если в каком-то языке или его версии говорится «начальное значение глобальных переменных обнуляется», не поленитесь за-писать в начале программы I=0. Первый такой алгоритм «счётчик» (сколько раз произошло событие):

K=K+1 K=0

V. Алгоритм нахождения суммы записывается таким образом: S=S+ав S=0

ав – это арифметическое выражение, которое необходимо сумми-ровать, например, S=∑Ai – сумма элементов массива А, S=∑i2 – сумма квадратов значений i, например от i=3 до i=6 (или другие пределы суммирования), S=∑(Xi+Yi/2) здесь выражением, участ-вующим в суммировании будут элементы двух массивов.

VI. Алгоритм получения произведения похож на предыдущий (символ ∏):

P=P*ав P=1

Page 31: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

VII. Следующий алгоритм показывает, как из исходного масси-ва A по какому-то условию сформировать новый массив B.

В этом алгоритме при выполнении заданного условия сначала

с помощью счётчика определяем порядковый номер элемента ново-го массива, а затем этому элементу присваиваем значение именно того элемента исходного массива, при котором произошло такое со-бытие. Все другие варианты записи (Bi=Ai или Ai=Bk и пр.) неверны. На рис. 3.3 демонстрируется этот алгоритм на примере задачи «из массива А сформировать массив В, в который войдут только отри-цательные элементы исходного».

K=K+1 K=0 BBk= Ai

i : 1 2 3 4 5 6 7 8 9 10 11 A K : 1 2 B

4 -3 0 2 -7 6 1 0 1 2 6

-3 -7

Рис. 3.3. Алгоритм форми-рования нового массива

Как мы видим, второй элемент исходного массива А должен стать значением первого элемента нового массива, а пятый эле-мент – второго. Всегда при использовании этого алгоритма пользу-емся правилами:

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

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

• После завершения подсчёта и формирования нового мас- сива в нём окажется К элементов. Это значение не следует «пор-тить» и его можно будет использовать при дальнейших расчётах в программе (в массиве В содержится К элементов).

Page 32: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

3.9. Тесты Вариант 1

1. Формализация задачи это – запись задачи формальными символами описание строгой последовательности действий математическая модель

2. Алгоритм должен обладать свойством надёжной связи между блоками своевременности строгого определения порядка действий

3. Алгоритм счётчика записывается так: S=S+ выражение

S=S+1 S=S+1+ выражение

Вариант 2 1. Выбор метода решения предполагает

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

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

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

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

Вариант 3 1. Свойство массовости для алгоритма означает

предусмотреть получение результата (любого) при всех дан-ных

предусмотреть многовариантный расчёт по своей задачи найти лучший вариант расчёта

Page 33: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

сформировать новый массив B» Bi=Ti

k=k+1, BBk=Ti k=k+1, Tk=Bi

4. ОПЕРАЦИОННЫЕ СИСТЕМЫ 4.1. Назначение операционных систем

С точки зрения пользователя любой ПК состоит из процессора (выполнение арифметических, логических и других операций, управление различными узлами компьютера), оперативной памяти, памяти на магнитных дисках и терминала (монитора, клавиатуры, мыши и других устройств, для ввода и вывода информации). Всем этим «техническим обеспечением» управляет специальная про-грамма (лучше сказать программный комплекс), который называется операционной системой и относится к «программному обеспече-нию» ПК. Только ПК насчитывают несколько поколений операцион-ных систем (CP/M, PC-DOS, MS-DOS, DR-DOS, OS/2, UNIX, Windows, Netware, Linux и др.). В функции операционной системы входит общее управление компьютером, запуск, проверка работо-способности всех узлов, запуск программ на выполнение, а также связь программ друг с другом и с внешними устройствами.

Над первыми операционными системами появлялись про-граммы надстройки, которые позволяли выполнять действия, не помня о формате команд, с помощью которых проводились все об-ращения к операционной системе (с некоторыми такими командами мы познакомимся чуть позже). Так над MS-DOS появилась сначала табличная надстройка Norton Commander (NC), уже имевшая своё меню, MS-DOS Shell, затем графическая надстройка (оболочка)

Page 34: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

4.2. Идентификация файлов Все программы, данные хранятся на магнитных носителях в

виде файлов. Файл – это часть дискового пространства, заполнен-ного данными и имеющая имя, составленное по определённым пра-вилам. Операционная система в своих системных каталогах соби-рает информацию обо всех имеющихся файлах, и оперативно мо-жет их находить и выполнять требуемые действия. Вот необходи-мые данные о файле, позволяющие его идентифицировать (одно-значно определить). устройство:\путь\полное_ имя_файла

Устройство обозначается одной буквой латинского алфавита (вообще говоря, от A до Z), после которой ставится двоеточие и об-ратная косая черта (слэш). Буквами A и B принято обозначать дис-ководы, куда вставляются дискеты (если дисковод один, ему отданы обе эти буквы). Устройство С - это жёсткий диск (иногда жёстких дисков может быть два или один диск разбит на несколько «логиче-ских дисков», тогда им отдаются следующие буквы алфавита). Сле-дующей буквой обозначается устройство для CD-ROM и т.д.

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

Полное имя состоит из двух частей, разделённых точкой. Пер-вая часть - это собственно имя, которое даёт ему создатель файла, вторая часть называется типом файла (расширением), может также задаваться создателем файла (.id, .dan – это данные, подготовлен-ные для проведения расчётов), некоторые типы зарезервированы пакетами и могут назначаться ими без вмешательства пользовате-

Page 35: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ля. Собственное имя может иметь от одного до восьми символов

(теперь и больше, но лучше придерживаться старого правила). В качестве символов следует использовать латинские буквы, цифры и символ подчёркивания (можно использовать и русские буквы и сим-волы псевдографики, но лучше придерживаться правила: имя – это идентификатор). Есть несколько зарезервированных имён: AUX, COM1, COM2, CON, LPT1, LPT2, LPT3, PRN. В расширение может входить от одного до трёх символов, правило для выбора символов такое же, как для собственного имени. Существуют стандартные ти-пы, которые используются операционной системой (может быть не всегда удачно, так файл с программой на Паскале с типом .PAS бу-дет считаться файлом другого пакета Delphi). Вот некоторые стан-дартные типы: .SYS – системные файлы (драйверы – программы, обслужи-вающие те или иные устройства вывода).

.BAS, .PAS, .CPP, .ASM – файлы исходных текстов программ на алгоритмических языках Бейсик, Паскаль, С++ и Ассемблер.

.DOC – файлы, подготовленные в пакете Word.

.PPT - файлы, подготовленные в пакете Power Point.

.COM, .EXE – загрузочные файлы программ (исполняемые файлы).

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

prog?.pas – все файлы с типом pas, на пятой позиции после prog стоит любой символ.

*.pas – все файлы с типом pas. p*.dan – файлы с типом dan, в собственном имени которых по-

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

*.* - все файлы любых типов.

Page 36: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

4.3. Файловая система В этой теме мы познакомимся с понятием путь, который нам

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

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

Всем каталогам даётся имя и, хотя Вы можете эти правила об-ходить, рекомендуется, чтобы оно было идентификатором, не было слишком длинным (1 – 8 символов), но было содержательным и не имело бы расширения.

В разное время название изменялось от директории через ка-талоги – подкаталоги к папкам, что привычней для современных пользователей, «на столе» или в ящике лежат папки, в которые вложены другие папки, а в них ещё какие-то папочки.

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

корневая папка \

Windows BP 1ACY Lima4.dan

Lima6.pas 1ACY2 Lima4.pas Lima4_1.dan

C:

Lima6.dan

Рис. 4.1. Пример файловой системы

Page 37: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

структуру корневой папки устройства С:\ (рис. 4.1.) Начиная выполнение лабораторных работ в среде Turbo, про-

думайте, какая папка будет Вашей текущей папкой. При запуске ин-тегрированной среды Паскаль (turbo.exe или bp.exe), текущей пап-кой будет \bp\bin, что не совсем корректно и удобно (засоряете файлами системные папки и поиск своего файла среди огромного количества файлов и папок bin – проблематичен).

Можно текущей папкой сделать корневую папку устройства A: , где находится Ваша дискета с файлами, но это чревато потерей или порчей файлов. Лучше все, принесённые для работы файлы скопировать в выбранную или созданную папку, а после входа в среду Паскаль выполнить пункт меню смены папки (File / Change dir) и работать в своей папке. Вот как можно идентифицировать файлы, находящиеся в разных папках, если текущей папкой будет 1ACY:

• Если файлы находятся в одной папке, то достаточно ука-зать полное имя файла. Так имя файла Lima4_1.dan может исполь-зоваться в тексте программы Lima4.pas, а файл Lima4.dan не будет найден, так как он расположен в другой папке (assign (f, ‘lima4_1.dan’);).

• Файл всегда будет найден, если задавать его полную идентификацию или идентификацию от корневой папки, если речь идёт об одном устройстве (С:).

c:\lima4.dan или \lima4.dan, так как устройство у текшей папки и папке с данными – одно (assign(f, ‘\lima4.dan’););

или a:lima4_2.dan – исходные данные на дискете; \1acy\1acy2\lima6.dan – исходные данные находятся во вло-

женной папке. • Найти файл можно, если он расположен ниже по дереву,

используя приём «от текущей папки»: 1acy2\lima6.dan – обратите внимание на отсутствие в описании

пути начального слэша, что означает, идём вниз от текущей папки по вложенным папкам (assign(f, ‘1acy2\lima6.dan’);).

Page 38: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• В любом месте пути могут появиться две идущие подряд точки, что означает «подняться на один уровень вверх».

..\lima4.dan – в программе Lima4.pas при текущей папке 1acy файл lima4.dan будет найден (assign(f, ‘..\lima4.dan’);).

4.4. Основные команды Познакомимся с некоторыми командами почти забытой опера-

ционной системы, чтобы лучше оценить работу в графической сре-де Windows и выполнить лабораторную работу в среде Windows и MS-DOS.

1. Создание и уничтожение папок MD устройство:\путь\имя папки - создаёт новую папку, RD устройство:\путь\имя папки - удаляет папку, она должна

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

2. Смена папки CD устройство:\путь 3. Вывод на экран содержимого папки DIR устройство:\ путь DIR – содержимое текущей папки; DIR A: - содержимое дискеты. 4. Как создать свой файл? • с помощью специальных программ «редакторов» (блокнот,

Word и др.); • любая интегрированная среда (Паскаль, С++ и пр.) обяза-

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

• командой COPY (см. пункт 9). 5. Для того чтобы выполнить файл с типом .EXE, .COM,

.BAT достаточно набрать устройство:\путь\имя (только собственное, без точки и типа). Для получения из исходного текста программы на Паскале (.pas) загрузочного (исполняемого) файл (.exe) следует:

Page 39: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• загрузить среду Паскаля (в папке C:\bp\bin файлы turbo.exe или bp.exe);

• выполнить смену папки, сделав текущей, например, 1acy (File / Change dir...);

• Набрать исходный текст программы <F3> lima4[.pas] program lima4; ... end. <F2>

• выполнить поиск и исправление синтаксических ошибок <Alt><F9>;

• проверить место размещения загрузочного файла: Compile / Destanion – если Memory, то нажать <Enter> (Memory

изменится на Disk); • повторить компиляцию на диск <Alt><F9>. • проверить содержимое текущей папки: <F3> *.* - файлы lima4.pas и lima4.exe должны присутствовать. 6. Удаление файлов DEL устройство:\путь\полное имя файла DEL A: *.* - все файлы дискеты будут удалены. 7. Переименование файла RENAME идентификация_старого_файла идентифика-

ция_нового_файла RENAME *.bak *.pas – у всех файлов, имеющих тип .bak будет

тип .pas, если файл с новы именем существует, то переименования для него не произойдёт.

8. Вывод содержимого файла на экран TYPE устройство:\путь\полное имя файла - выводить надо тек-

стовые, а не двоичные файлы (.pas – можно, .exe – не следует); файлы выводятся по одному, в имени файла не могут стоять сим-волы * и ?.

9. Копирование файлов

Page 40: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

COPY идентификация_файла_1 + идентификация_файла_2 +... идентификация_нового_файла – позволяет один, а если нужно, не-сколько файлов объединить в один и скопировать их в новое место или дать другое имя. COPY lima4.pas+lima4_1.dan+..\lima4.dan+lima6.pas+1acy2\lima6.dan A:prog.txt – пять файлов с диска C: скопированы под именем prog.txt на дискету. Проверьте правильность указания пути, если текущей является папка 1acy. Посмотрим, что ещё можно выполнять этой командой.

Зарезервированные собственные имена CON и PRN обозна-чают консоль (экран при выводе и клавиатура при вводе) и принтер.

copy con lima.pas – создание файла, который набирается на клавиатуре, после нажатия <Ctrl><Z> (конец файла) получим сооб-щение о копировании набранного текста в файл lima.pas.

copy lima4.pas con – вывод файла на экран (аналог команды TYPE).

copy lima4.pas prn – вывод файла на принтер. copy con prn – режим пишущей машинки: что набираю на кла-

виатуре тут же попадает на принтер. 10. Выход из MS-DOS – команда EXIT.

4.5. Операционная система WINDOWS 4.5.1. Некоторая терминология

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

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

Загрузочные файлы, подготовленные для работы с Windows, называются приложениями (все программные файлы MS OFFICE –

Page 41: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Word, Excel, Outlook и др.). Программные файлы, поставляемые с Windows (Paint – гра-

фический редактор, Notepad – блокнот, простейший текстовый ре-дактор и др.) называются стандартными.

Документом называется файл, который создаётся или обра-батывается программным файлом приложением или стандартным (в редакторе Word документ – годовой отчёт фирмы; в среде Паска-ля документ - программа по заданию №5; в табличном редакторе Excel документ – расписание движения поездов и пр.).

Используются в среде Windows программные файлы для MS-DOS (версия Turbo Pascal 6.0, например, в отличие от седьмой вер-сии работает с Windows, как программный файл, который требует выхода в MS-DOS, надо с этим предупреждением согласиться и продолжить работу).

В среде Windows активно работает мышь. Познакомимся с не-которыми приёмами работы.

<щелчок левой кнопкой> - выделение объекта (устройства, папки, файла);

<щелчок><щелчок> - двойной щелчок левой кнопкой: если файл является приложением (.exe, .com), то оно выполняется; если это устройство, папка, документ, то он «открывается» (для докумен-та .doc сначала загружается текстовый редактор Word, затем этот документ в нём). При открытии документа делается попытка по его типу (.doc, .txt, .pas и т.д.) связать с каким-то приложением, что не всегда выполняется правильно (.pas загрузит среду Delphi, а не среду Pascal), а иногда и не может выполниться. В меню Файл и контекстном меню есть функция «Открыть с помощью» и выбор «Блокнота» часто поможет при просмотре файлов;

<щелчок>, <щелчок> - два щелчка (время между нажатиями кнопок больше, чем в первом случае) можно изменить имя папки или файла;

<щелчок правой кнопкой мыши> - открывается контекстное меню (информация о нём в следующем разделе)

Page 42: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

<нажать левую кнопку мыши и тащить объект> - технология Drag and Drop – перетащить и опустить, связана с копированием или перемещением папок и файлов.

4.5.2. Многооконная система Рассмотрим типичное окно, которое открывается в Windows. В

верхней строке находится: пиктограмма системного меню, заголовки программного файла и документа, если он уже загружен (Infor-mDo.doc – Microsoft Word – документ в текстовом редакторе Word). В правом углу три пиктограммы: свернуть окно в пиктограмму и по-местить его внизу в панель задач, в любой момент щелчок на этой пиктограмме снова развернёт окно. Следующая пиктограмма меня-ет размер окна – распахивает, запахивает его, последняя закрывает окно. Следует отметить, что функции системного меню дублируют эти действия (Восстановить, Переместить, Размер, Свернуть, Раз-вернуть, Закрыть), поэтому можно ими не пользоваться. Перемеще-ние окна выполняется мышью: курсор устанавливаем на заголовке окна, нажимаем левую кнопку мыши и перемещаем окно в нужное место.

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

Ещё одно меню появляется на экране при нажатии на правую кнопку мыши, оно называется контекстным, так как зависит от того, на какой объект направлен курсор мыши.

Следующее большое поле – это поле, где мы работаем с до-кументами. Внизу и справа от него находятся полосы прокрутки (скроллинга), позволяющие перемещаться по документу («листать» страницы или обращаться к правому – левому полю документа). Внизу может располагаться ещё какая-то панель инструментов (на-пример, для рисования). Функция меню Вид/ Панели инструментов позволяет выставлять и убирать панели. Загрузив в программный

Page 43: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Окно самой Windows отличается от остальных окон. На экране мы видим несколько пиктограмм (Мой компьютер, Мои документы, Сетевое окружение, Корзина), все остальные можно считать мусо-ром, потому что, экономя несколько секунд времени, различные пользователи заполняют экран ярлыками разных устройств, про-грамм, документов. Конечно, компьютер потому персональный, что пользователь создаёт свою комфортную среду работы, но на стадии обучения можно и поискать нужные файлы в папках. Windows имеет своё меню, которое скрыто под кнопкой ПУСК, справа от этой кнопки находится панель задач, где, кроме пиктограмм для свёрнутых Вами задач, могут находиться ещё дополнительные пиктограммы, напри-мер, для запуска Интернета. Через меню ПУСК можно загружать программные файлы пакета Office, Internet Explorer, осуществлять поиск файлов, папок, завершать работу с Windows. В его подменю Стандартные представлены файлы, поставляемые с Windows (блокнот, калькулятор, адресная книга), функция его меню Команд-ная строка позволяет выйти в MS-DOS и выполнить там любые ко-манды, для возвращения в Windows набираем EXIT. Сейчас мы пе-рейдём к рассмотрению вопросов, связанных с папками и файлами, функция Проводник меню Пуск создаёт комфортные условия при обмене данными между устройствами и папками.

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

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

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

Page 44: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Для того чтобы выполнить любое действие над папками или файлами их надо выделить.

<щелчок> - один объект выделен; <щелчок> на первом объекте, нажимаем клавишу <Shift> и,

удерживая её, переводим курсор к последнему объекту в выделяе-мой группе, на нём выполняем <щелчок>, будут выделены подряд все объекты;

<щелчок> на первом объекте, нажимаем клавишу<Ctrl> и, удерживая её, делаем щелчки мышью на любых объектах в любом порядке, эти объекты будут выделены;

<Ctrl><A> или меню Правка / Выделить всё – все объекты вы-делены.

Чтобы отменить выделение, можно <Ctrl><щелчок> выполнять на каждом объекте, если их много, то лучше выполнить <щелчок> на новом объекте, выделение всех остальных снимется, и останется убрать выделение нового объекта.

Чтобы создать файл следует выполнить команду меню Файл / Создать или контекстного меню Создать и выбрать необходимый редактор.

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

Файл удаляется командой основного или контекстного меню (Файл/ Удалить) или клавишей <Delete>.

Page 45: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

В основном меню (Файл) и в контекстном есть функция пере-именования файла, но это же самое мы можем выполнить, если два раза нажмём левую клавишу мышки. После изменения имени нажи-мается <Enter>.

Копирование или перемещение файлов очень ответственная операция, поэтому самый надёжный способ – это меню Правка, где есть два действия Копировать или Вырезать (выделили нужные файлы и выполнили команду для копирования или перемещения), открыв папку, куда следует поместить файлы, пользуемся функци-ей меню Правка / Вставить.

Конечно, способ «перетаскивания мышью» из одной открытой папки в другую – быстрый, но надо запомнить следующее, если уст-ройство одно, то выполняется операция перемещения, если устрой-ства разные, то копирование. Если в своих действиях Вы уверены, то пользуйтесь технологией Drag and Drop.

4.6. Задание на лабораторную работу по операционным системам

1. Из меню ПУСК через ПРОГРАММЫ / ПРОВОДНИК – про-смотреть содержимое папки \Program Files\ …; менять ВИД (контек-стное меню): значки, список, таблица; для последнего вида выпол-нить сортировку файлов по размеру и имени; найти самый большой файл с типом .EXE в любой вложенной папке.

2. Из пиктограммы МОЙ КОМПЬЮТЕР на устройстве C: создать папку, например, 1acy1, Lima и пр., окна закрыть.

3. Загрузить Паскаль (папка \bp\bin– имя файла turbo.exe или bp.exe);

- выполнить смену папки (это действие выполняется на всех занятиях, наша папка 1ACY!) File / Change DIR… , выбрать соз-данную папку C:\1acy1;

- открыть файл File / Open… или <F3> , набрать имя_файла.PAS;

- написать программу в одну две строчки; program prg1; writeln (‘любой текст любыми символами’); end.

- сохранить ее <F2>;

Page 46: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

- откомпилировать на ДИСК!; - выполнить программу; записать результат; - выйти из Паскаля. 4. Проверить содержимое папки, если файл .exe отсутству-

ет, то повторить пункт 3. 5. Из меню ПУСК через ПРОГРАММЫ / СТАНДАРТНЫЕ/

КОМАНДНАЯ СТРОКА - выйти в MS DOS (c:\>); сменить папку (C:\1ACY1>); просмотреть содержимое каталога; создать еще один файл на Паскале (COPY CON LIMA.pas <Enter>; набрать текст про-граммы в одну – три строчки:

program prg2; writeln(‘любой текст’); end. <Ctrl><z>,<Enter>). Вернуться в Windows, выполнив команду Exit. 6. Повторить вход в Паскаль (пункт 3), открыть файл

LIMA.pas; откомпилировать его на диск; выйти из Паскаля; прове-рить наличие файла LIMA.exe.

7. Из пиктограммы МОЙ КОМПЬЮТЕР, открыть на устрой-стве C: свою папку 1acy1; скопировать один из файлов .PAS из пап-ки C:\1ACY1 в корневую C:\; переименовать этот файл (BOBA.pas⇒VOVA.pas); показать результат преподавателю (в C:\1ACY1 два файла .PAS, два - .EXE; в C:\ - файл .PAS и может быть ряд других папок и файлов); удалить все файлы, кроме двух файлов .EXE (с дисковода C:\ удалить файлы .PAS, .$$$).

8. Выполнить файлы .EXE (двойной щелчок на файле), если чёрный экран с результатом только мелькнул, то следует проверить свойства этих файлов (мышь установить на файл .EXE, вызвать контекстное меню в нём функцию свойства, на её вкладке ПРОГРАММА найти и выключить независимую кнопку “закрыть окно по завершению программы”, удалив в окне галочку), теперь при двойном щелчке на файлах .EXE должен быть результат.

9. Выйти в MS DOS (пункт 5), выполнить файлы .EXE, про- верить результат, показать преподавателю, удалить файлы, уда-лить папку.

Page 47: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

10. Просмотреть содержимое корзины (на пиктограмме КОРЗИНА вызвать контекстное меню), очистить корзину.

5. ИНТЕГРИРОВАННАЯ СРЕДА РАЗРАБОТЧИКА И РЕДАКТОР ЭТОЙ СРЕДЫ

5.1. Главное меню среды Turbo Так как при знакомстве с разделами алгоритмизация и про-

граммирование модуля 2, за основу будет принят язык программи-рования Паскаль, мы познакомимся со средой (IDE – Integrated Disign Environment), в которой предстоит Вам работать и командами редактора этой среды, которые позволят эффективно с минималь-ным количеством ошибок набирать и исправлять Ваши тексты (про-граммы и исходные данные). Следует отметить, что эта информа-ция поможет при практической работе с другими языками програм-мирования, использующими аналогичную среду Turbo.

Термином Turbo принято называть собранные вместе разно-образные средства, не относящиеся непосредственно к языку про-граммирования, но облегчающие процесс разработки, исправления, поиска ошибок, тестирования и отладки программ. Интегрированная среда разработчика включает в себя текстовый редактор (не сле-дует при подготовке программ и исходных данных пользоваться другими текстовыми редакторами «блокнот» и тем более Word), компилятор, отладчик, справочную систему и пр.

Запуск Turbo Pascal выполняют загрузочные файлы turbo.exe или bp.exe.

На экране появляется меню, окно, в котором можно набирать тексты (таких окон может быть несколько), и строка подсказки внизу. Если размер всех окон занимает не весь экран, можно нажать одно-временно две клавиши <Alt><Enter>.

Меню имеет следующий вид:

File Edit Search Run Compile Debug Tools Options Window Help

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

Page 48: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• пункт меню - этот пункт сразу выполняется (New, Cut и др.);

• пункт меню> - раскрывается меню следующего уровня; • пункт меню … - открывается диалоговое окно, в котором

требуется задать или проверить дополнительную информацию (Open..., Find...).

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

Рассмотрим назначение только некоторых пунктов меню. 5.2. Меню FILE – действия с файлами и выход

New Open... <F3>

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

New открывает окно редактора и присваивает ему имя NONA-MEnn.pas, nn число от 00 до 99, так как это имя временное и его всё равно будет необходимо изменять, я рекомендую всегда пользо-ваться второй функцией.

Open... открывается диалоговое окно. В строке ввода можно ввести имя файла (новое AKA1<Enter> – тип .pas будет добавлен автоматически, или имя файла, который ВЫ собираетесь корректи-ровать или использовать в работе a:\Prog1.pas<Enter>), имя суще-ствующего файла можно выбрать и из списка, расположенного ниже (подвести курсор и нажать клавишу Enter). Save <F2> Save AS... Save All

Эти функции выполняют сохранение файла редактора на ка-ком-то устройстве. Первая сохраняет в текущей папке (информация о том, какая папка является текущей, можно найти при нажатии на клавишу <F3> ниже списка файлов). Последняя функция позволяет сохранить в текущей папке содержимое всех окон редактора. Если

Page 49: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

требуется сохранить файл не в текущей папке (например, текущая c:\1ACY, сохранить хотим на дискете a:), то в окне ввода диалогово-го окна набираем полную информацию о необходимом размещении файла (a:\Aka1.pas – обратите внимание, что имя типа в этом слу-чае задавать надо). Если файл имел имя NONAMEnn.pas, то при со-хранении всегда будет выполняться Save AS..., независимо от вы-бранной функции меню. Change Dir...

Смена каталога (папки) – очень важная функция, с которой должна начинаться каждая работа в среде Turbo. После загрузки среды Turbo, текущей папкой будет папка c:\bp\bin (проверьте это, нажав на клавишу <F3>). Размещать свои учебные файлы (даже и профессиональные) в системной папке не следует (это и не удобно, так как там много файлов и отыскать свой файл довольно пробле-матично). В открывающемся диалоговом окне следует выбрать под-ходящую папку и сделать её текущей.

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

Следует перед запуском среды Turbo, скопировать все файлы в выбранную или созданную папку на устройстве С:, а после завер-шения работы, скопировать файлы из этой текущей папки на диске-ту. DOS shell Exit <Alt><x>

Выход из среды Turbo. Первая функция обеспечивает времен-ный выход в MS-DOS, все назначения и содержимое файлов в окнах редактора сохраняются, для возвращения в среду следует набрать слово exit и нажать клавишу Enter. Вторая – завершает работу со средой Turbo, по каждому окну редактора задаётся вопрос о сохра-нении файла.

5.3. Меню EDIT – редактирование файлов

Page 50: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

В этом разделе мы познакомимся не только с функциями этого меню, но и с основными командами редактора, которые позволяют оптимальным образом набирать текст, перемещаться по нему, вы-делять, удалять, добавлять фрагменты текста (блоки). Undo Redo

Первая функция отменит предыдущее действие (и даже не од-но), например, удаление строки; вторая повторно выполнит то, что отменили Undo. Cut <Shift><Delete> Copy <Ctrl><Insert> Paste <Shift><Insert> Clear <Ctrl><Delete>

Первые три функции предполагают использование временного хранилища текста, которое называется буфер (карман), его содер-жимое можно также загружать в отдельное окно редактора и, в слу-чае необходимости, редактировать. Часть текста можно вырезать (Cut) или скопировать (Copy) в буфер, содержимое которого затем можно вставить (Paste) в одно или несколько мест того же или дру-гого окна редактора, текст буфера можно перед вставкой изменить. Последняя функция (Clear) удалит часть текста, без помещения его в буфер. Часть текста, которую мы хотим поместить в буфер или удалить должна быть выделена, ниже приводится информация, как это выполняется. Show clipboard - загрузка в окно редактора содержимого буфера производится этой функцией меню.

5.4. Обзор основных команд редактора Выполнение всех команд производится при нажатии на две

или три клавиши, нажимается первая и, не отпуская первую, вторая; если их три, то нажимается первая и, не отпуская её, поочерёдно нажимаются вторая и третья. Для символьных клавиш регистр не имеет значения. В состав редактора среды Turbo входит около 50 команд, которые делятся на четыре группы:

• перемещения курсора (табл. 5.1.); • вставки и удаления (табл. 5.2.);

Page 51: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• работы с блоками (табл. 5.3.); • прочие команды.

Таблица 5.1 Команды перемещения курсора

На символ влево ⇐ На символ вправо ⇒ На строку вверх ⇑ На строку вниз ⇓ Начало строки <Home> Конец строки <End> На страницу вверх <Page Up> На страницу вниз <Page Down> В начало окна <Ctrl><Home> В конец окна <Ctrl><End> В начало файла <Ctrl><Page Up> В конец файла <Ctrl><Page Down>

Таблица 5.2 Команды вставки и удаления

<Insert> Переключение режима вставки (в указан-ное место вставляется новый символ, а существующие раздвигаются) на режим ис-правления (символ в указанной позиции заменяется новым) Удаление символа слева от курсора <Backspace> или <←> Удаление символа в положении курсора <Delete> Вставить пустую строку <Ctrl><N>, можно <En-

ter> в режиме вставки Удалить строку <Ctrl><Y> Удалить строку от положения курсора до конца

<Ctrl><Q><Y>

Таблица 5.3 Команды работы с блоками

Начало блока <Ctrl><K><B> Конец блока <Ctrl><K><K> Выделить (отметить) блок

Подвести курсор к началу блока, выпол-нить команду, затем к концу и выполнить вторую команду или нажать <Shift> и кла-вишами <⇓>, <⇑>, <⇒>, <⇐> выделить фрагмент

Page 52: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Продолжение табл. 5.3 Отметить одно слово <Ctrl><K><T> Скопировать блок Edit / Copy, Edit / Paste Переместить блок Edit / Cut, Edit / Paste Удалить блок <Ctrl><Delete> или Edit / Clear Записать блок в от-дельный файл

<Ctrl><K><W>

Вставить в указанное место редактора файл

<Ctrl><K><R>

Спрятать или показать выделение блока (блок остаётся выделенным)

<Ctrl><K><H>

Переместить блок вправо на одну пози-цию

<Ctrl><K><I>

Переместить блок вле-во на одну позицию

<Ctrl><K><U>

При выполнении команд <Ctrl><K><W> и <Ctrl><K><R> по за-просу сообщается имя файла (которое Вы хотите дать своему бло-ку, или реально существующего файла, который Вы хотите вставить в файл окна редактора).

5.5. Меню SEARCH – поиск и замена текста Find... Replace... Search again <Ctrl><L>

Из всего списка функций этого меню рассмотрим только пер-вые три.

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

Диалоговые окна для поиска (Find) и замены (Replace) имеют много общего. В окне ввода следует задать строку, которую необхо-димо найти, для Replace во второй строке ввода задаётся строка, на которую заменяется найденная. Далее следует проанализировать режимы, и если нужно изменить их в группах переключателей: Op-tions, Direction, Scope, Origin.

Page 53: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Переключатели могут быть независимыми, в группе их может быть несколько ([ ] переключатель - выключен, [v] переключатель – включён) и зависимыми, когда в группе может быть включён только один (( ) переключатель – выключен, (.) переключатель – включён). Перевод одного значения в другое происходит при нажатии на кла-вишу пробел, при нахождении курсора внутри скобок. Options:

[ ] Case sensitive – учитывать ли регистр (только для латинских букв);

[ ]Whole words only – учитывать только целое слово или его вхождение (out - да, output - нет); [ ] Regular expression; [ ]Prompt on replace (только в Replace) – запрашивать ли под-тверждение на каждую замену;

Direction: ( ) Forward – поиск вниз по тексту; ( ) Backward – поиск вверх по тексту;

Scope: ( ) Global – искать во всём тексте; ( ) Select text – искать в выделенном тексте;

Origin: ( ) From cursor – начать поиск от текущего положения курсора; ( ) Entire scope – начать поиск от начала текста. В Replace можно сделать выбор между кнопками [OK] – поиск

и замену одной строки, с повторением действий функцией Search Again или выполнить эти действия по всему тексту сразу [Change All]. 5.6. Меню Run и Compile – запуск программы на выполнение и

её компиляция В каждом из этих меню мы рассмотрим только по одной функ-

ции. Run <Ctrl><F9> - запуск программы на выполнение, если в

программе есть синтаксические ошибки (отсутствует точка с запя-

Page 54: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Compile <Alt><F9> - выполнение только первого из трёх шагов – компиляции, если есть синтаксические ошибки, то выдаются со-общения, при их отсутствии или повторной компиляции после всех исправлений появляется окно с сообщением об успешной компиля-ции, после ознакомления с которым следует нажать любую клави-шу.

5.7. Меню Window – работа с окнами При работе в среде Turbo можно открыть несколько окон ре-

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

Tile - стандартное размещение всех окон экрана черепицей. Cascade – стандартное размещение всех окон каскадом. Close all – удаляет с экрана все окна. Size/Move <Ctrl><F5> - позволяет изменить положение и раз-

меры активного окна. Рамка становится одинарной и меняет свой цвет. Клавиши <⇐>, <⇒>, <⇓>, <⇓> перемещают (Move) окно по эк-рану, а эти же клавиши при нажатой клавише <Shift> позволяют ме-нять его размер (Size). Когда положение и размер окна установле-ны, нажимается клавиша <Enter> и окно снова становится активным в двойной рамке.

Zoom <F5> - распахивает активное окно во весь экран, или возвращает его к прежнему размеру.

Page 55: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Next <F6> - активным становится следующее окно. Previous <Shift><F6> - активным становится предыдущее ок-

но. Close <Alt><F3> - удаляет с экрана активное окно. List... <Alt><0> - показывает список всех открытых окон. Каждое окно справа вверху имеет номер от 1 до 9, вместо

функций Next и Previous для вызова нужного окна можно воспользо-ваться клавишами <Alt><номер окна>.

5.8. Меню Help – справочная служба Contents <F1> - открытие окна справочной службы. Index <Shift><F1> - вызов оглавления справочной службы. Topic Search <Ctrl><F1> - вызов контекстной справки по язы-

ку. Previous Topic <Alt><F1> - вывод предыдущего справочного

окна. Если дважды нажать клавишу <F1>, вызов справок по спра-

вочной службе позволит проанализировать информацию по сле-дующим темам:

• About On line Help • … • Borland Pascal Menu – по меню, • The Editor – по командам редактора, • Function – по стандартным функциям, • Procedure – по стандартным процедурам, • …

5.9. Задание на лабораторную работу по меню и редактору среды Turbo

Работа в среде Turbo, использование команд редактора этой среды и функций меню FILE, EDIT, SEARCH, WINDOW.

1. Загрузить среду Turbo Pascal (c:\bp\bin\turbo.exe). 2. Сменить текущую папку c:\bp\bin, например, на c:\1acy

(File / Change Dir...). 3. В двух окнах редактора (File / Open...) набрать по 4-6

Page 56: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

строк текстов двух файлов. Тексты могут не иметь смысла, но луч-ше, чтобы в одном были только латинские буквы, в другом русские буквы или цифры.

4. На экране дополнительно поместить окно буфера и вы-полнить разнообразные команды редактирования (движение курсо-ра, вставки и удаления, работа с блоками).

P1.pas Clipboard ASDEF HJU XSER N M<UY AAAADDDDFG P2.pas

123 5467 234 43536373822 342

5. Проверить работу всех функций меню Edit (Cut, Copy, Paste, Clear, Undo, Redo). Скопировать фрагмент из одного файла, добавить в него что-то прямо в буфере и записать этот фрагмент в другой файл. Записать фрагмент одного файла в отдельный файл, дать ему имя, например sms.pas, а потом вставить его в другой файл.

6. Сохранить файлы один под тем же именем, другой под другим именем и в другой папке (File /Save, File / Save as...).

7. Используя функции меню Search (Find, Replace, Search again), назначать различные режимы зависимым и независимым пе-реключателям диалогового окна («заменить все заглавные буквы D на символы xxz, по одному, все сразу, подтверждая каждую замену» и пр.).

8. Сдать работу преподавателю 6. СХЕМЫ АЛГОРИТМОВ

6.1. Циклический сдвиг элементов массива вправо Продолжим рассмотрение различных схем алгоритмов, кото-

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

Page 57: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

A1 A2 A3 ... A8 A9 A10 A10 A1 A2 ... A7 A8 A9

После ввода всех элементов массива, следует в какой-то об-

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

ai=ai-1

i=i-1

i=1

a1=p

i>=2

Вывод ai

i=i+1

i<=10

Конец

Начало

i=1

Ввод ai

i=i+1

i<=10

p=a10

i=10

Попробуйте самостоятельно выполнить сдвиг влево. Рис. 6.1. Сдвиг элементов массива на один вправо

6.2. Циклические участки в вычислениях без массивов Циклические участки в вычислениях встречаются и в задачах,

где массивы не присутствуют. Пусть для всех a<= X <=b, в n точках найти y=sinx+cosx. Шаг изменения Х от a до b найдём по выраже-нию (b-a)/(n-1). Схема алгоритма приведена на рис. 6.2. 6.3. Сумма элементов массива чётных по значению или индексу

Два похожих по звучанию задания, реализация которых – раз-ная.

ассиве из 20 элементов целых чисел найти сумму В м

Page 58: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Начало

Ввод a,b,h

x=a

y=sinx+cosx

Вывод x,y

x=x+h

x<=b

Конец

Рис. 6.2. Циклический участок без массива

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

• возьмём частное от деления ai на два (div или, при отсутст-вии такой операции, следует взять целую часть от результата), за-тем умножим на два, если результат равен элементу массива, то элемент – чётный;

• возьмём остаток от деления ai на два (mod), если он равен нулю, то число – чётное;

• в Паскале есть специальная функция (odd), если её значе-ние - true, то число – нечётное.

Для второго алгоритма следует в сумму включать элементы массивов a2, a4, ..., a20, то есть значение переменной i менять с ша-гом два, а не один и циклические вычисления начинать со второго элемента. Схемы этих алгоритмов приведены на рис. 6.3. Не за-будьте задать начальное значение сумме, и обратите внимание, что в первом случае ввод элементов массива совмещён с алгоритмом, а во втором случае используются два цикла. 6.4. Индексы последнего и первого отрицательного элемента в

массиве В двух следующих алгоритмах будем находить индекс К, в

Page 59: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

НачалоНачало

S=0

первом случае последнего отрицательного элемента, а во втором – первого. На рис. 6.4 приведены эти две схемы. В первом случае ввод и алгоритм в одном цикле, во втором случае сначала вводим все элементы, а потом в цикле от а20 до а1 находим первый отрица-тельный элемент. Начальное присвоение К=0 позволяет зафикси-ровать случай, когда в массиве нет отрицательных элементов. Схе-ма алгоритма представлена на рис. 6.4. 6.5. Досрочный выход из цикла при накоплении суммы и фор-

мирование нового массива из всех элементов исходного На рис. 6.5.а показана схема алгоритма задачи, когда сумми-

рование элементов следует прекращать, и выдавать сообщение о номере элемента, при котором это событие происходит (в качестве

i=1

Ввод ai

ai-чёт-ное?

S=S+ai

i=i+1

i<=20

Вывод S

Конец a)

i=2

S=S+ai

i=i+2

i<=20

Вывод S

и индексу (б) Рис. 6.3. Сумма элементов массива четных по значению (а)

Конец

б)

i=1

Ввод ai

i=i+1

S=0

i<=20

Page 60: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

k<>0

Вывод отр. нет

Вывод k

Конец

Начало

k=0

i=1

Ввод ai

ai<0

k=i

i=i+1

i<=20

a)

i=20

ai<0

k=i

i=i-1

i>=1

k<>0

Вывод отр. нет

Вывод k

Конец

б)

Рис. 6.4. Индекс последнего (а) и первого (б) отрицательного элемента

Начало

i=1

Ввод ai

i=i+1

k=0

i<=20

1, если xi >0, Yi = 0, если xi =0, -1, если xi <0.

Page 61: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

6.6. Формирование нового массива из части элементов исходного

Подготовим последнюю схему алгоритма: заданы значения 20 элементов массива А. Определить количество элементов, которые меньше величины (а1+а20)/2. Сформировать новый массив В, в ко-торый войдут те элементы исходного, которые больше среднего арифметического всего массива. В первом циклическом участке бу-дем вводить элементы исходного массива, и накапливать их сумму. Во втором цикле можно выполнить все остальные действия. Счёт-чик K используется для нахождения количества элементов меньших

Начало

i=1

Ввод xi

xi>0

xi=0

yi=0 yi=-1

yi=1

Вывод xi,yi

i=i+1

i<=20

Конец

Вывод i

i=1

Ввод ai

i=i+1

i<=20

S=0

i=1

S>=0

S=S+ai

i=i+1

i<=20

Конец

Рис. 6.5.a. Номер элемента, при котором сумма - отрицательна формируется из исходного

Рис. 6.5.б. Новый массив

Начало

Page 62: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

заданной величины, а счётчик L для формирования массива В и оп-ределения количества элементов в нём (рис. 6.6).

6.7. Задания на контрольную работу по схемам алгоритмов Вариант 1

Заданы значения элементов двух массивов x1, x2,..., x30 и y1, y2, ..., y30; найти S=∑ (xi*yi).

Вариант 2 Заданы значения элементов массива c1, c2,..., c17; определить

каких элементов в массиве больше – положительных или отрица-тельных.

Вариант 3 Заданы значения элементов массива g1, g2,..., g50; определить

среднее арифметическое этого массива и создать новый массив fi=gi-s, элементы обеих массивов вывести.

Начало

s=0

i=1

Ввод ai

s=s+ai

i=i+1

i<=2

0 s=s/20

t=(a1+a20)/2

k=0

L=0

i=1

ai<t

k=k+1

ai>s

L=L+1

bL=ai

Вывод bL

i=i+1

i<=20

i<=L

i=1

Конец

Вывод bi

i=i+1

Рис. 6.6. Формирование нового массива из части элементов исходного

Вывод k

Page 63: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ЛИТЕРАТУРА Основная

1. Острейковский В.А. Информатика. - М.: Высшая школа, 2000.

2. Иванова Г.С. Основы программирования. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002.

3. Вирт Н. Алгоритмы и структуры данных. - СПб.: Невский диалект, 2001.

Дополнительная 4. Милов А.В. Основы программирования в задачах и при-

мерах. - М.: ООО «Изд-во АСТ»; Харьков: «Фолио», 2003. 5. Минакова Н.И., Невская Е.С. и др. Методы программиро-

вания. Под редакцией Угольницкого Г.А. - М.: Вузовская книга, 1999.

Page 64: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

МОДУЛЬ 2

АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ

1. ЗАПИСЬ АЛГОРИТМА РЕШЕНИЯ ЗАДАЧИ НА ВНЕШНИХ АЛГОРИТМИЧЕСКИХ ЯЗЫКАХ

В последние годы программирование для ПК выделилось в не-которую дисциплину, владение которой стало основным и ключевым моментом, определяющим успех многих инженерных проектов, а сама она превратилась в объект научного исследования и из ре-месла перешла в разряд академических наук. Крылатое определе-ние К. Вирта «программа = структура данных + алгоритм» как нель-зя лучше подходит к этому разделу. Решение о том, как представ-лять данные, невозможно принять, не зная, какие алгоритмы будут к ним применяться и наоборот, выбор алгоритма часто очень сильно зависит от строения данных, к которым он применяется. Изложение этих вопросов может идти на общераспространённом языке (рус-ском, английском) или с помощью абстрактных нотаций (металин-гвистические формулы Бэкуса – Науэра), но лучше всего для этой цели подходит язык Паскаль, который первоначально был предло-жен Н. Виртом, как язык описания алгоритмов и только потом поя-вились трансляторы с этого языка и варианты его реализации на компьютерах. Объяснение синтаксических конструкций языка будем давать в словесном описании, хотя для этой цели могут использо-ваться и специальные синтаксические диаграммы.

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

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

I. ЗАГОЛОВОК ПРОГРАММЫ: PROGRAM идентификатор;

II. РАЗДЕЛ ОПИСАНИЙ:

Page 65: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

A. Описание меток: LABEL целое или идентификатор [,целое или идентифи-катор] ...;

B. Описание констант: CONST идентификатор=значение; [идентификатор =значение;] ...

C. Описание типов: TYPE идентификатор=описание типа; [идентификатор =описание типа;]...

D. Описание переменных: VAR идентификатор [,идентификатор] ... : тип; [идентификатор [,идентификатор] ... : тип;]...

E. Описание процедур: PROCEDURE идентификатор [( список параметров с указанием типа )]; РАЗДЕЛ описаний {LABEL,VAR,CONST,...}; РАЗДЕЛ операторов ; END;

F. Описание функции: FUNCTION идентификатор [(список параметров с ука-занием типа)] : тип функции ; РАЗДЕЛ описаний {LABEL,VAR,...}; РАЗДЕЛ операторов ; идентификатор функции:=Значение; END;

III. РАЗДЕЛ ОПЕРАТОРОВ: BEGIN оператор [;оператор] ...

END. Квадратные скобки показывают, что эта часть может и отсутст-

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

Page 66: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

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

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

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

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

Правильные идентификаторы: AKA5, aka5, _prog_my_1, __123, a, abc99.

Неправильные идентификаторы: Лима5, 5aka, aka 5, prog-my-1, α, begin, and, in, do, repeat. В Паскале прописные и строчные буквы не различаются, поэтому идентификаторы AKA5, aka5 – одинако-вые, также как способ написания слова end, END, End, eNd роли не играет. Последние пять слов в списке неправильных идентификато-

Page 67: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

1.2. Символы и знаки операций Знакомясь с предыдущим разделом, мы уже столкнулись с ка-

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

• буквы латинского алфавита (A, B, C, ..., Y, Z, a, b, c, ..., y, z); • специальные символы (@, $, #, _); • цифры (0, 1, 2, …, 9); • разделители или ограничители (, . ; : пробел ( ) [ ] { }); • знаки операций:

1. арифметические операции (+, -, *, /, div, mod); сложение, вычитание, умножение и деление вопросов не вызывают, операция возведения в степень отсутствует, а две последние операции выполняются только над целы-ми данными и дают целый результат, первая – частное от деления, вторая – остаток.

7/2 ⇒ 3,5; 7 div 2 ⇒ 3; 7 mod 2 ⇒ 1. 2. операции отношения (>, >=, <, <=, =, <>);

следует обратить внимание на запись с помощью двух символов и именно в таком порядке операций больше или равно, меньше или равно и необычное сочетание двух символов <> для операции не равно;

3. логические операции (not, and, or, xor); назначение и ре-зультат этих операций приводится в теме логические вы-ражения;

4. выражения над строками: операция + объединяет две строки символов в одну строку;

5. операция присвоения (:=) эта операция обозначает: вы-числить то, что записано справа от неё, и переслать в

Page 68: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

область памяти, которая определена переменной слева от этой операции. Не путать две совершенно разные операции равенства (=) и присвоения (:=);

6. операции над множествами (+ - объединение множеств; - -дополнение к множеству; * - пересечение множеств; IN – наличие в множестве);

7. адресные операции (&, ^) (структуры данных - множество и указатели в пособии не рассматриваются).

1.3. Константы В этом разделе мы начинаем знакомиться с данными, которые

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

К константам, прежде всего, относятся числа, которые делятся на целые со значениями от -2147483648 до 2147483647 и вещест-венные. Вещественные числа, записываемые в программе и зада-ваемые в качестве исходных данных, можно представлять в двух форматах с фиксированной точкой (-1123.4567, 1.0, 0.0001) и с пла-вающей точкой (1.0е2, -1е-5, 0.12345Е20, -1е10). В формате с фик-сированной точкой целая часть от дробной отделяется точкой, нельзя задавать константы без целой или дробной части (записи 1. и .1 – неверны). В формате с плавающей точкой число состоит из двух частей мантиссы (она либо целая, либо с фиксированной точ-кой) и порядка (целого числа со значениями от -39 до 38) между ни-ми находится буква е (Е), числа записываются без пробелов, и имеют значения: 1.0е2=1*102=100, -1е-5= -1*10-5 = -0.00001.

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

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

Page 69: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ные символы, позволяющие красиво оформлять всевозможные таб-лицы). Если в качестве символа задаётся апостроф, то в программе он удваивается, но лишний байт ему не выделяется. Строки симво-лов в программе могут записываться и другим способом, для него необходимо знать десятичный код символа и строка задаётся #код#код…#код. Так строки ‘A a’ и #65#32#97 – идентичны.

Последняя константа Паскаля – это метка, которая записыва-ется перед оператором программы, и отделяется от него двоеточи-ем. Этот оператор называется именованным и теперь из любого места программы по этой метке к нему можно обращаться операто-ром перехода. В качестве метки можно использовать идентифика-тор или целое число со значением от нуля до 9999. Все метки обя-зательно объявляются в разделе описаний. Это выглядит так: label 1, kon; ... begin ...1: оператор; …; kon: end.

Если константа часто встречается в программе или является громоздкой, ей можно дать имя и затем выполнять обращение по имени или по значению. const gr=57.3; t=1e6; buk=’A’; zv=’***************’;

Недостатком такого способа является невозможность изме-нить это значение, т.е. записать gr:=gr+5; или zv:=zv+’***’ нельзя. В этом случае следует объявить типизированную константу.

const идентификатор: тип = значение; (о типе будет рассказа-но в следующем разделе). Например, const s: real=0; теперь запись s:=s+10; вполне допустима.

В Паскале есть несколько заранее объявленных (предопреде-лённых) констант:

1. pi=3.1415... 2. maxint=32767. 3. maxlongint=2147483647.

1.4. Переменные В Паскале можно использовать простые (одиночные) пере-

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

Page 70: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Все простые переменные в программе записываются своими идентификаторами, которые обязательно объявляются в разделе описаний: var список идентификаторов: тип; список идентификаторов: тип; …

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

Типы данных языка Паскаль Простые Сложные Ссылки Массив (array) pointer Ограниченные Перечисление Множесто (set) ^тип Запись (record) нач.значение Type color=(идент. Файл (file) ..кон.знач [,идент.]...); Динамические массивы Стандартные Списки Целый (integer, shortint, longint) Очереди Целый без знака (byte, word) Деревья Вещественный (real, single, double, extended) Логический (boolean) Символьный (char) Строковый (string [k]) Текстовый (text)

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

Page 71: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

стандартный идентификатор идентификатор типа ТИП идентификатор из описания TYPE описание типа

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

• для целых переменных табл. 1.1. Таблица 1.1

Целые типы идентификатор типа количество байт значения integer 2 -32768…32767 word 2 0…65535 byte 1 0…255 shortint 1 -128…127 longint 4 -2147483648…2147483647

• для вещественных переменных табл. 1.2. Таблица 1.2

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

типа количество

байт значения

real 6 до 12 цифр в мантиссе, порядок - 39..38

single 4 до 8 цифр в мантиссе, порядок - 45..38

double 8 до 16 цифр в мантиссе, порядок - 324..308

extended 10 до 20 цифр в мантиссе, порядок - 4951..4932

• для логических переменных идентификатор boolean, вы-деляется под значения true или false 1 байт.

• для символьной переменной, в которой может храниться только один символ (код от 32 до 255), идентификатор char и один байт в памяти.

• для переменной типа строки символов (в ней может хра-ниться от нуля до 255 символов), в качестве идентификаторов мо-

Page 72: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

жет использоваться string; - это идентификатор типа, и в значении такой переменной может находиться до 255 символов или string[k]; где 1<=k<=255, тогда это называется описание типа и выделяется К байт памяти. Примите к сведению, что объявление строки подразу-мевает массив из К+1 элементa, каждый из которых имеет тип char (array[0..k] of char).

• переменные любого целого типа, типов boolean и char от-носятся к упорядоченным типам, так как, зная одно значение, можно однозначно назвать следующее и предыдущее (за исключением граничных значений). Для упорядоченных типов может использо-ваться ограниченный тип (какой-то диапазон от исходного типа). Этот тип задаётся следующим образом: начальное значе-ние..конечное значение обратите внимание, что точек между двумя значениями только две, начальное значение обязательно в своём диапазоне должно быть меньше конечного.

Примеры объявления переменных: var i, j: integer; {две переменные целого типа} r, s: real; {две переменные вещественного типа} fam: string[15]; {строка символов с количеством символов не

более 15} txt: string; {строка символов с количеством символов не бо-

лее 255} c1, c2: char; {две переменные символьного типа} n, m: 1..50; {две переменные ограниченного типа от целого} buk: ‘A’..’Z’; {ограниченный тип от символьного с кодами от

65 до 90} zif: ‘0’..’9’; {ограниченный тип от символьного с кодами от 48

до 57} 1.5. Массивы

Скорость внедорожника на 10 участках трассы Мурманск – Владивосток можно записать как десять простых переменных V1, V2, V3, ..., V10 (кстати, она достигала на отдельных участках и 220 км. час). Для того чтобы определить среднюю скорость нужно будет

Page 73: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

эти переменные просуммировать, а теперь представим, что таких переменных 100.

Удобней всем переменным дать одно имя V, а к его десяти элементам обращаться по индексу (V1, V2, ..., V10), тогда в сумме бу-дет участвовать один элемент S=S+Vi, а значение i будет меняться от единицы до 10. Об этом говорил ещё Фон Нейман в своём «Принципе программного управления» (свойство переадресации).

В Паскале индекс элемента записывается в квадратных скоб-ках, а не как подстрочный символ. V[1], V[2], S:=S+V[i] и т.д. Запом-ните, что V1- простая переменная, а V[1] - первый элемент в масси-ве, имя (идентификатор) которого V.

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

matr[2,5] – элемент двухмерного массива, находящийся во второй строке и пятом столбце;

tenz[3,6,2] – элемент с третьей страницы, номер строки – шестая, столбец – второй;

fam[5][1] – такое обращение используется для «массив мас-сива», объяснение приведено ниже.

Идентификатор массива объявляется в разделе описания пе-ременных var. Следует задавать количество измерений, тип индек-сов (обычно задаётся ограниченный тип с минимальным и макси-мальным значениями индекса) и тип элемента массива. Тип индек-сов должен относиться к упорядоченному типу, а тип элемента – любой.

var идентификатор: array [тип первого индекса, тип второго ин-декса, …] of тип элемента массива;

Всё, что записано после двоеточия называется описанием массива. Оно может быть задано в type. Тогда после двоеточия в

Page 74: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Примеры объявления массивов: type matr=array [1..10,1..10] of real; {объявлено имя типа двухмер-ного массива из 100 вещественных чисел, именно столько областей будет резервироваться для переменных такого типа в памяти} var a,b : array[1..20] of integer;{два массива целых чисел, по два-дцать элементов в каждом}

d : array[0..255] of real; c : array[byte] of real; {объявление массивов c и d – одинако-вое, выделяется по 256 областей памяти, способ объявления для d – более нагляден} e : array[-3..5] of boolean; {выделяется девять областей па-мяти, в каждой из которых может размещаться значение true или false} fam : array[1..25] of string[20];{массив из 25 элементов для размещения строк символов, в каждом элементе количество симво-лов от нуля до 20} g1: matr; {объявление имени типа приведено выше, поэтому проще сделать объявление, аналогичное g2}

g2 : array[1..10,1..10] of real; Если мне нужно обратиться к первому символу пятой пере-

менной fam, следует записать fam[5][1] – «массив массива», верни-тесь к теме простые переменные (тип – string) и объясните, почему.

1.6. Указатели функций Вызов функции, которая возвращает значение, полученное по

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

Обращение к функции: идентификатор функции [(список аргу-ментов)]. Аргументы передаются в функцию и их значения исполь-зуются в её алгоритме для вычисления результата. Список может отсутствовать.

Page 75: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Рассмотрим некоторые стандартные функции Паскаля. 1.6.1. Математические функции

SIN(X) - синус (аргумент задается в радианах); COS(X) - косинус (аргумент задается в радианах); ARCTAN (X) - арктангенс (результат в радианах); ABS (X) - абсолютное значение от X; EXP (X) - Е возводится в степень X; LN (X) - натуральный логарифм от числа X; 0.4343*LN(X)-десятичный логарифм от числа X; SQRT (X) - квадратный корень из числа X; SQR (X) - число X, возведенное в квадрат; TRUNC(X)- отбрасывает дробную часть от числа X; INT (X) - отбрасывает дробную часть от числа X, в первой результат – целый, во второй результат - вещественный; ROUND (X) - округляет число X до ближайшего целого; RANDOM (X) - датчик случайных чисел, X-целое, 0<= случайное число <X; RANDOM - датчик случайных чисел, результат вещественный, 0<= случайное число < 1; ODD (X) - результат- TRUE, если целое Х - нечётное, и FALSE - если Х чётное; SUCC(X) - возвращает следующее значение упорядоченной пере-менной X; PRED(X) - возвращает предыдущее значение упорядоченной пере-менной X.

1.6.2. Функции для работы со строками символов: CONCAT (s1 [,s2,...,sn]) - функция, возвращающая строку после сце-пления строк параметров s1,s2,...,sn (аналог операции s1+s2+...+sn); COPY (st, k, l) - функция, копирующая из строки st, начиная с пози-ции k, l символов; LENGTH (st) - функция, возвращающая длину строки st (длина стро-ки хранится так же в элементе st[0] в символьном виде); POS (s1, st) – функция, возвращающая номер позиции, где строка s1 первый раз встретилась в строке st, если s1 не найдена, возвраща-ется ноль;

Page 76: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

CHR(x) - функция, преобразующая код символа (32<= X <= 255) в символ; ORD(ch) - функция, возвращающая код символа ch.

1.7. Выражения Запись для вычисления значения называется выражением. В

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

• арифметические выражения (ав), результатом является число; • символьные выражения (св), результат - один символ или

строка символов; • логические выражения (лв), результат – логическая константа

true или false; • выражения над множествами; • адресные выражения.

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

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

• вычисление функций; • знак числа +, -; • NOT; • *, /, DIV, MOD, AND; • +, -, OR, XOR; • > , < , >= , <= , = , <> , IN.

При записи арифметических выражений, в связи с отсутствием операции возведения X в степень Y, следует руководствоваться следующим правилом:

• Если Y – целое, то с помощью математических преобра-зований и функции возведения в квадрат надо получить приемлемую запись выражения X9=((X2)2)2*X = sqr(sqr(sqr(X)))*X.

Page 77: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• Если Y – вещественное, то воспользоваться такой фор-мулой XY=ey*lnx =exp(Y*ln(X)).

Количество открывающих и закрывающих скобок должно быть одинаково и их положение может привести к совершенно непра-вильному результату, нельзя опускать операцию умножения, как это делается в математических формулах. Если при записи в програм-ме выражение нужно перенести на новую строку, операция записы-вается только один раз (на любой строке). Приведём несколько примеров, запись арифметических и логических выражений будет ещё показана ниже. sin2x3 = sqr(sin(sqr(x)*x)),

3 2 lgx3lnxx ⋅−+ = exp(1/3*ln(sqr(x) +sqrt(abs(ln(x) - 3*0.4343*ln(x)))))

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

В символьном выражении можно использовать операцию со-единения двух строк в одну (const fam=’Akatnova’; ... ‘ Фамилия: ‘+fam); такой же результат можно получить при использовании функции concat. Две строки можно сравнивать между собой только двумя операциями (=, <>), правда теперь речь идёт уже о следую-щем логическом выражении.

В логическое выражение могут входить: • логические константы (TRUE, FALSE), • логические переменные (var PR:boolean), • отношения (два выражения, объединенные операциями отно-

шения >, <, >=, <=, =, <>); • их последовательность, объединённая логическими опера-

циями (NOT- ”НЕ”, AND- “И”, OR- “ИЛИ”, XOR- “исключающее ИЛИ”) Результат логических операций приведён в табл. 1.3. В логическое выражение могут входить любые операции

(арифметические, отношения, логические), поэтому ещё раз про-анализируйте таблицу старшинства операций.

Page 78: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Таблица 1.3 Результат логических операций

a TRUE TRUE FALSE FALSE b TRUE FALSE TRUE FALSE NOT a FALSE FALSE TRUE TRUE a AND b TRUE FALSE FALSE FALSE a OR b TRUE TRUE TRUE FALSE a XOR b FALSE TRUE TRUE FALSE

Из-за того, что операция отношения имеет самый низкий уро-вень, в логических выражениях часто используются круглые скобки: 1<= X < 5 ⇒ (X>=1) AND (X<5).

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

логические выражения. Напоминаю Вам, что при записи ав исполь-зуются буквы только латинского алфавита (α - это не латинская бук-ва); прописные и строчные буквы считаются одинаковыми (A и a – одинаковое имя); записи A5 и A5 – разные (простая переменная - A5 и элемент массива - A[5]); A3j – элемент двухмерного массива A[3, j]; для корня квадратного есть функция sqrt, а для кубического исполь-зуется специальная формула (ав1/3); для десятичного логарифма должна использоваться формула зависимости его от натурального логарифма; если в задании приведено выражение типа 80,3*10-6 – это записывается в Паскале, как 80.3е-6. Будьте внимательны при использовании скобок:

x3x2

x1

x

−−

− ⇒ x/ (1-x/ (2-x/ ( 3-x )))

Запишем на Паскале арифметическое выражение: 105*(yi

2 - y2i-1 - b*eab+ lg yi2 ) ⇒ 1e5*(sqr(y[i]) – y[2*i-1]+b*exp(a*b) +

0,4343*ln(sqr(y[i]))). Математическая запись логического выражения отличается от

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

Page 79: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

скобки. Основная ошибка – неумение найти в записи отношение (два арифметических выражения, между которыми стоит операция отношения) и заключить его в скобки. Логические операции: ¬ - not, ∧ - and, ∨ - or. В задании на контрольную работу требуется сначала записать логическое выражение, потом вычислить его значение. В логических выражениях требуется иногда вычислять значения арифметических выражений, калькулятор для этой цели использо-вать не надо, так как придётся только сделать вывод, равны ли они, какое из них больше и пр. Запишем и найдём значение следующего выражения:

с – 1=b2∧ c<=0 ∨ b<c ∧ true, при b=0.99, c= -607.1e-2. 1 3 2 6 4 5 порядок выполнения операций (c-1=sqr(b)) and (c<=0) or (b< c) and true

1. false, 2. true, 3. false, 4. false, 5. false, 6. false.

Более наглядно это решение можно представить так:

(c-1=sqr(b)) and (c<=0) or (b<c) and true

false true false

false false

false

Задания на контрольную работу Вариант 1

1. Записать на Паскале арифметическое выражение:

[ ] 33,53

2e

zy25,3xsinx

z2yx

+−+

+⋅⋅ .

Page 80: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2. Записать на Паскале и вычислить значение логического выра-жения:

c ∨ f ∧ r=t, при r=20, t=0, c=true, f=false. Вариант 2

1. Записать на Паскале арифметическое выражение:

2,5)(xcos1)(xxsin 3222 +++⋅ .

2. Записать на Паскале и вычислить значение логического выра-жения:

p>=q ∧ s ≠ p ∧¬ f ∨ x, при p=0.1e4, q=60.27e03, s=1070.2, f=true, x=false.

Вариант 3 1. Записать на Паскале арифметическое выражение:

4

22

2 100,12sinxx

xsin1xln0,3

−⋅⋅⋅

++

−⋅ ππ

2. Записать на Паскале и вычислить значение логического выра-жения:

¬ (3(x+y) =15) ∧ (i<=1 ∨ false) , при x=4, y=3, i=0.5. 1.9. Тесты Вариант 1

1. Правильной записью арифметического выражения a+ b2 - √⏐c⏐ является:

a+sqr(b) - sqrt abs(c) a + b*b – sqrt(⏐c⏐) a+sqr(b) –sqrt(abs(c))

2. Правильной записью логического выражения ¬(E∨F) ∧ R=T является:

not E or F and (R=T) not(e or f) and (r=t) not(e or f) and r=t

3. Для каждой операции отношения и логической операции, вы-бранной Вами записи логического выражения, проставьте поряд-ковый номер её выполнения и результат (t или f) при следующих

Page 81: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

значениях переменных: R⇒20, T⇒20, E⇒false, F⇒true. Порядок Результат выполнения операции операции not or = and

Вариант 2 1. Правильной записью арифметического выражения

tz2yx 1,5

2⋅является:

x*sqr(y)/2/exp(1.5*ln(z))/t x*y*y/2*exp(1.5*ln(z))*t x*sqr(y)/(2*exp(ln(1.5*z))*t)

2. Правильной записью логического выражения B-1=C2 ∧ C<=0 является:

B-1=C*C and C<=0 (B-1=sqr(C)) and (C<=0) (B-1=sqr(C)) or (C<=0)

3. Для каждой операции отношения и логической операции, выбранной Вами записи логического выражения, проставьте по-рядковый номер её выполнения и результат (t или f) при следую-щих значениях переменных: C⇒-600E-2, B⇒37. Порядок Результат выполнения операции операции = <= and

Вариант 3 1. Правильной записью арифметического выражения

Page 82: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

1xxsin 42 + является: sin(x)*sin(x)*sqr(x*x*x*x+1) sin(sqr(x)*sqrt(x*x*x*x+1) sqr(sin(x))*sqrt(sqr(sqr(x))+1)

2. Правильной записью логического выражения 2a<=4b ∨ k ∧ true является:

2*a <=4*b or k and true (2*a <=4*b) or k and true 2*a <=4*b and k or true

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

A⇒-1, B⇒-3, K⇒false. Порядок Результат выполнения операции операции <= or and

Вариант 4 1. Правильной записью арифметического выражения

sin236°+cos(36° -π)+1 является: sqr(sin(36/180)) + cos(36/180- pi)+1 sqr(sin(36)) + cos(36- 3.14)+1 sqr(sin(36)) + cos(36- pi)+1

2. Правильной записью логического выражения (a+b)>=0 ∧ i ∨ L является:

(a+b)>=0 and (i or L) (a+b>=0) and i or L (a+b)>=0 and i or L

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

Page 83: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ковый номер её выполнения и результат (t или f) при следующих значениях переменных:

A⇒10, B⇒-30, L⇒false, i⇒true. Порядок Результат выполнения операции операции >= and or

Вариант 5 1. Правильной записью арифметического выражения 3sinx +

4cos2x3 -103,7*102 является: 3*sin x+4*cos (x*x*x)*cos (x*x*x) – 103.7*10*10 3*sin (x)+4sqr(cos (x*x*x)) – 10370 3*sin (x) + 4*sqr(cos (sqr(x)*x)) – 103.7e2 2. Правильной записью логического выражения p>=q ∧s ≠ p ∨¬ F

является: p>=q and s not = p or not F (p>=q) and (s <> p) or not f p>=q and s <> p or not F

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

p⇒0.1e4, q⇒60.27e3, s⇒100, F⇒false. Порядок Результат выполнения операции операции >= <> and or not

Page 84: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2. ОПЕРАТОРНОЕ ПРОГРАММИРОВАНИЕ В дальнейшем в дисциплинах кафедры или при самостоятель-

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

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

2.1. Оператор присваивания Оператор присваивания позволяет значение выражения, запи-

санное справа от операции присвоения (:=) переслать в область па-мяти, отведённую для простой переменной, элемента массива или поля записи.

простая переменная элемент массива := выражение; поле записи

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

Page 85: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

var i, k: integer; r, t :real; type sp=array [1..10] of string[15]; var a, b: array [1..5] of real; c: array [1..5] of real; gr1, gr2: sp; fam: string[15]; s: string[2]; ...i:=10; k:=i; r:=1; {исключение из правила – вещественной перемен-ной можно присвоить вещественное и целое выражение} i:=k/2; {не-допустимый оператор: выражение – вещественное, а переменная – целая} i:=k div 2; i:=round (k/2); r:=i; s:=t; {недопустимый оператор: выражение – вещественное, а переменная – строка символов} s:=’no’; a:=b; gr1:=gr2;{два оператора представляют собой второе ис-ключение из правил и выражение и переменная не являются ска-лярными, но, при таком объявлении, они относятся к одному типу и это присвоение возможно} a:=c; {недопустимый оператор, хотя опи-сание массивов полностью совпадают, такое объявление не относит их теперь к одному типу} c[3]:=0; r:=3; c[r]:=0; {недопустимый опера-тор: индекс массива не относится к упорядоченному типу} c[trunc(r)]:=0; fam:=’Akathova’; gr1[8]:=fam; k:=pos(‘t’, gr1[8]); {какое значение получит переменная K?}

2.2. Оператор вызова подпрограмм Оператор вызова подпрограмм предполагает обращение к от-

дельному блоку, в котором при вычислении заданного алгоритма результат присваивается не имени (abs, sin и др.), а одной или не-скольким переменным из списка параметров. Обращение к подпро-грамме выполняет оператор: идентификатор [(список аргументов)]; - список может отсутствовать.

В Паскале существуют стандартные процедуры, а свой алго-ритм можно задать в блоке procedure идентификатор (список пара-метров); ... end;

Некоторые стандартные процедуры Паскаля: • read(список ввода); readln(список ввода); write(список вывода);

Page 86: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

writeln(список вывода); – операторы ввода и вывода, им будет посвящен раздел 2.12.

• inc(i); inc(i,k); dec(i); dec(i,k); – переменные i и k должны быть целого типа; значение i увеличивается (inc) или уменьшается (dec) на величину k, если k не указано, то на единицу.

• delete (строка, k, L); – результатом является новое значение строки, в которой, начиная с позиции k, удалено L символов.

• insert (строка_1, строка_2, k); - в строку_2, начиная с позиции k, вставляется строка_1.

• str(число, строка); - число (целое или вещественное) преобра-зуется в строку символов.

• val (строка, число, k); строка символов, если это возможно, преобразуется в число; k является результатом, если его зна-чение ноль преобразование выполнено, иначе k – это номер позиции, где находится первый недопустимый символ.

i:=2; inc(i, 5); dec(i); writeln(i); i ⇒ 6. var slovo: string[10]; a: real; k: byte; ...slono:=’пароход’; insert(‘воз’, slovo, 8); delete(slovo,5,3); wrteln(slovo); slovo⇒’паровоз’. str (123, slovo); writeln(slovo); slovo⇒ ‘123’. val (‘12E3’, a, k); k ⇒ 0, a ⇒ 12е3. val (‘12A3’, a, k); k ⇒3, a – не имеет решения, так как на третьей по-зиции – недопустимый символ. 2.3. Лабораторная работа «Линейные участки в вычислениях»

(выполняется Ваш вариант по заданию № 1 задачника [7]) Обычная линейная программа содержит в себе:

I. операторы ввода (правильней называть операторы вызова процедур ввода и вывода) - read(список ввода); и readln(список ввода);

II. операторы вывода - write(список вывода); и writeln(список вы-вода); Окончание ln означает, что после ввода или вывода списка происходит переход на новую строку. Допустимы конструкции без списка ввода/ вывода, их назначение: readln; - задержка

Page 87: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

экрана, до нажатия на клавишу <ENTER>,writeln; - вывод на экран пустой строки. Эти действия произойдут только в случае, если последний оператор ввода/ вывода заканчивался на LN, в противном случае соответствующий оператор записывается дважды.

III. операторы присваивания - переменная := выражение; Следует учесть, что при операциях присваивания переменные и выражения должны иметь одинаковый тип. Однако если в правой части оператора записано целое выражение, то пере-менная в левой части может быть как типа integer, так и типа real; переменной типа строка может быть присвоено значение символьного выражения.

IV. арифметические выражения, которые записываются с помо-щью:

A. констант и переменных арифметического типа; B. арифметических операций: +, -, *, /, DIV - целочисленное

деление, MOD - остаток от целочисленного деления; C. стандартных арифметических функций.

Порядок выполнения лабораторной работы: • Загрузить среду Turbo Pascal (c:\bp\bin\turbo.exe). • Сменить текущую папку, например, на c:\1acy (File / Change

Dir). • Открыть новый файл, в диалоговом окне задать имя этого

файла, рекомендуется, чтобы оно совпадало с именем про-граммы, тип .PAS можно не набирать (File / Open... prog1a[.pas]).

• Набрать текст программы: program prog1a; ... end. • Откомпилировать программу для поиска и исправления оши-

бок (Compile / Compile <Alt><F9>), это действие можно прово-дить и после набора двух- трёх строк программы.

• Сохранить программу (File / Save <F2>), это действие так же желательно повторять после набора нескольких строк, чтобы при сбоях в работе ПК не потерять набранную информацию.

Page 88: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

• Выполнить программу (Run / Run <Ctrl><F9>), если всё прошло успешно (нет сообщений об ошибках), на чёрном экране на-брать значения исходных данных (полная информация об этом приведена в разделе 2.12.).

• Чтобы посмотреть результат (а после завершения задачи пе-ред Вами экран редактора с текстом программы, а не чёрный – экран пользователя) следует выполнить функцию меню (Win-dow / User Screen <Alt><F5>).

• Возвращение к окну редактора для корректировки существую-щей или набора новой программы выполняется при нажатии на любую клавишу.

• Завершение сеанса работы (File / Exit <Alt><X>). В качестве примеров рассмотрим подготовку и оформление двух

задач. Пример 1

Вводится фамилия студента, номер варианта, координаты двух точек P1(X1,Y1) и P2(X2,Y2). Вывести номер варианта, фамилию и расстояние между точками. program prog1a; var X1,Y1,X2,Y2,R: real; NVAR : integer; FAM : string[15]; Begin writeln(‘ВВОДИТЕ ДАННЫЕ’); readLN(FAM); readLN(NVAR,X1,Y1,X2,Y2); R:=sqrt(sqr(X1-X2)+sqr(Y1-Y2)); writeln(‘ВАРИАНТ #’:15,NVAR:5,FAM:20); writeln(‘ R=’,R) end. Исходные данные: AKATHOBA 35 2 1 5 1 На экране будет представлен результат:

Page 89: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

������ВАРИАНТ #���35������������AKATHOBA R= 0.3000000000E 01 Для наглядности пробел заменён символом .

Пример 2 Заданы значения α, β, c, d. Определить

dkcf(k)lgβαk 2

⋅=+= ; .

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

переменная идентификатор a α b β

c c d d k k

f(k) f

program prog1b; var A, B, C, D, K, F: real; begin read(A, B, C, D); K:=sqr(A)+0.4343*ln(B); F:=sin(K)+C/(D*K); writeln(‘ОТВЕТ: K=’, K, ’ F(k)=’, F) end. Исходные данные: 1 0.5 -7 1e2<enter>

В программе на Паскале идентификаторы (пользователя или стандартные) можно записывать прописными или строчными буква-ми, они идентичны. Вся программа может быть записана в одну строку без отступов, но это снижает её наглядность. Жирным шриф-том выделены три раздела программы (заголовок, разделы описа-ний и операторов). В списке оператора вывода четыре элемента: две строки символов (для «красоты») и значения двух переменных k и f.

Запишите полученные результаты (это будут числа в формате

Page 90: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

2.4. Оператор перехода Оператор перехода позволяет обратиться к любому оператору

программы, если перед ним стоит метка: goto метка; Напоминаем правила работы с метками:

• Метки стоят перед оператором и отделяются от него двоеточием.

• В качестве метки можно брать идентификатор или целое число от 1 до 9999.

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

имеют средства описания алгоритмов, которые позволяют совер-шенно исключить использование операторов перехода. При объяс-нении многовариантных расчётов и подготовке к лабораторным ра-ботам по заданиям 2 и 3, операторы перехода будет применяться, но после темы «описание циклических участков» они с успехом должны быть заменены операторами циклов.

2.5. Составной оператор Составной оператор позволяет несколько любых операторов

языка объединить в один. Это нужно из-за того, что конструкции не-которых операторов (условного, цикла, выбора), разрешают исполь-зовать только один оператор. Составной позволяет несколько опе-раторов рассматривать, как один. Вот его вид: begin оператор_1; оператор_2; …; оператор_n end; {перед end точ-ка с запятой может не ставиться}. Вся группа от begin до end – один составной оператор.

2.6. Условный оператор Условный оператор после проверки условий позволяет выпол-

нить одну или другую группу операторов. В Паскале используются

Page 91: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

две модификации такого оператора: if лв then оператор; - короткий условный оператор. if лв then оператор_1 else оператор_2; - полный условный оператор. ЛВ – логическое выражение, рассматривалось в теме выражения, следует ещё раз просмотреть этот материал. После then и else раз-решается записать только один оператор, но мы узнали возмож-ность несколько операторов представить, как один – составной опе-ратор. На рис. 2.1 показаны фрагменты схем алгоритмов для этих двух конструкций.

лв

оператор

лв

оператор1 оператор2

да да

Работают эти операторы следующим образом: проверяется

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

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

Примеры записи условных операторов: 1) Если x<0, то изменить его знак.

if x < 0 then x:= -x; {этот результат можно получить и без провер-ки: x:=abs(x);}

2) Если x<y, то их значения поменять, т.е. значение первой переменной всегда должно быть больше второй.

if x < y then begin p:=x; x:=y; y:=p end; 3)

1, если x>y, a=

0, если x<=y. if x>y then a:=1 else a:=0;

1, если x>y, a= 0, если x=y, -1, если x<y.

4)

Page 92: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

if x>y then a:=1 else if x=y then a:=0 else a:=-1;

Обратите внимание, что третья проверка не нужна. Ступенча-тая запись используется для того, чтобы подчеркнуть правило: else всегда относится к ближнему then. Поэтому короткий условный опе-ратор, записанный после else, никогда не приведёт к ошибке, а за-писанный после then – может привести.

Другой вариант из трёх коротких операторов имеет лишнюю проверку: if x>y then a:=1; if x=y then a:=0; if x<y then a:=-1;

Вариант, когда вначале, без проверки переменной присваива-ется из нескольких вариантов самое простое выражение, а затем используются условные операторы, эффективен и нагляден в про-граммах: a:=0; if x>y then a:=1; if x<y then a:=-1;

Подумайте, правильна ли такая запись: a:=0; if x>y then a:=1 else a:=-1;

5) Заданы значения двух переменных x и y, следует выдавать сообщения, когда обе переменные отрицательны и когда перемен-ная X – не отрицательна. if x<0 then if y<0 then writeln (‘X and Y < 0’) else writeln (‘X >= 0’); - оператор – некорректен. if x<0 then if y<0 then writeln (‘X and Y < 0’)

else else writeln (‘X >= 0’); - оператор – корректен.

6) Задание для последнего примера представлено следующим образом:

y=0 y=√ x y=x/2 y=0 5 50 100 X

if (x<=5) or (x>=100) then y:=0 else if x<=50 then y:=sqrt(x) else y:=x/2;

Page 93: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2.7. Оператор выбора Если проверок в условном операторе слишком много, то вме-

сто него следует воспользоваться оператором выбора. Оператор выбора записывается так: case выражение of значение1, значение2, …, значениеN : оператор_1; ... значениеМ, значениеМ+1, …значениеM+N : оператор_М else оператор_L end;

Не забывайте, что каждому case должен соответствовать свой end; Выражение и все значения должны принадлежать к одному упорядоченному типу. В качестве значений можно брать одно зна-чение, список значений, задаётся через запятую, диапазон значений (ограниченный тип). После двоеточия записывается любой опера-тор, но только один (может быть составной); перед end точка с запя-той может не ставиться, перед else она никогда не должна ставить-ся. Группа else оператор_L – может отсутствовать.

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

В первом примере будем проверять, является ли символ глас-ной буквой латинского алфавита. Подумайте, как этот алгоритм за-писать условным оператором. var ch: char; ... case ch of ‘A’, ‘a’, ‘E’, ‘e’, ‘I’, ‘i’, ‘O’, ‘o’, ‘U’, ‘u’, ‘Y’, ‘y’ : writeln(‘It is ‘, ch, ‘-vowel’) else writeln(‘It is ‘, ch, ‘-consonant’) end;

Page 94: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Второй пример: у 5

1.5

-10 -5 0 50 var x, y: real; ... case trunc (x) of -9..-5: y:=1.5; -4.. 50: y:=5 else y:=0 end;

2.8. Многовариантные расчёты Рассмотрим вопросы, связанные с организацией многовари-

антных расчётов. В лабораторных работах по заданиям 2 и 3 следует преду-

смотреть расчёты при нескольких наборах исходных данных. Поря-док работы за ПК был рассмотрен в разделе 2.3. После нажатия на клавиши <Ctrl><F9> мы задавали один набор исходных данных. Чтобы провести вычисления при втором, третьем и т.д. наборах придётся снова выполнять <Ctrl><F9>. Нам следует организовать циклический алгоритм от ввода исходных данных до вывода ре-зультата: ..BB: read(...);...writeln (...); goto BB;... Такой бесконечный цикл не может использоваться, следует предусмотреть условие прекращения вычислений, т.е. выхода из цикла. Различные способы будут рассмотрены на примере задачи из раздела 2.3 prog1b (...read(A,B.C.D); ... writeln(..., F); end.).

• Счётчик вариантов. Переменная nv будет хранить текущий но-мер варианта и будет его сравнивать:

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

var ...; nv: integer; label bb; begin

Page 95: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

nv:=1; bb: read(A, B, C, D); ... writeln(... ,F); inc(nv); if nv<=3 then goto bb; end. 2. с переменной n, значение которой будет вводиться пе-

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

var ...; nv, n: integer; label bb; begin read(n); nv:=1; bb: read(A, B, C, D); ... writeln(... ,F); inc(nv); if nv<=n then goto bb; end. 2 1 0.5 -7 1е2 1 2 3 4<enter> {2 – это количество вариантов, самая распространённая ошибка - забываете его задавать}

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

var ...; label bb, kon; begin bb: read(A, B, C, D); if A>=1e5 then goto kon; ... writeln(... ,F); goto bb; kon: end.

Page 96: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

1 0.5 -7 1е2 1 2 3 4 1e5 1 1 1<enter> Приведены исходные данные для трёх наборов, расчёт бу-дет проведён только для двух, обратите внимание, что в третьем, проверочном наборе, задаются все четыре числа, так как в операторе ввода четыре переменные, и только по-сле их ввода значение первой проверяется.

• Использование стандартной функции eof (End Of File). С таким вариантом познакомимся в разделе 2.12. и будем им часто пользоваться.

Везде в примерах присутствует оператор goto, который будет в дальнейшем заменён оператором цикла.

2.9. Лабораторная работа «Описание разветвлений» (выполняется Ваш вариант по заданию № 2 задачника [7]) Требования к лабораторной работе по заданию №2: 1. Предусмотреть многовариантный расчёт. 2. Провести отладочный просчёт хотя бы двух наборов данных. 3. В отчёте кроме текста программы, исходных данных и резуль-

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

⎪⎪⎩

⎪⎪⎨

+++⋅

<≤+⋅++

<−−+

=

случаях.остальныхвx)ln(3)(xx1,x0если,x0,523)(x

0,xесли,x3x

y2

2

32

ππ

π

Выводить номер варианта и значения переменных X и Y. Отладочный просчёт:

x= -1 x=0 x=1 Y=4-4,141/3≈2,4 Y=9+sqrt(1,57) ≈10,25 Y=4+ ln 4,14 ≈5,3

На рис. 2.2 показаны три отрезка по оси X, где должны исполь-зоваться разные формулы.

0 1

Формула 3Формула 1 Формула 2

Рис. 2.2. Отрезки по оси X

Page 97: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Анализ этого рисунка показывает, что не требуется использо-вание сложного логического выражения для проверки второго усло-вия: if x<0 then else if (x>=0) and (x<1) then

else

1

2

3

После проверки первого условия (X<0), на ветвь else попадают все X>=0, остаётся только проверить X<1 или нет. Это показано на схеме алгоритма рис. 2.3.

Начало

nv=1

Текст программы: program prog2; label 1; var nv : byte; x, y, t : real; begin

Ввод x

t=x2+3

x<0

x<1

y=t*x+ln(П+x)

Вывод nv,x,y

nv=nv+1

nv<=

4

Конец

xty +Π+= 5.2 0

Рис. 2.3. Схема алгоритма по заданию №2

3 y x t − Π = −

Page 98: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

nv:=1; 1: read (x); t:=sqr(x) + 3; if x<0 then y:=t-exp(ln(pi – x)/3) else if x<1 then y:=sqr(t) + sqrt (0.5*pi+x) else y:= t*x+ ln(pi+x); writeln(‘# :’, nv:3, x:8:2, y:8:2); inc(nv); if nv <= 4 then goto 1; end. Исходные данные: -1 0 1 1.75<Enter> Выражение x2+3 повторяется в программе несколько раз, его лучше вычислить один раз.

2.10. Лабораторная работа «Строковые переменные» (выполняется Ваш вариант по заданию № 3 задачника [7])

Требования к лабораторной работе по заданию № 3 – много-

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

количество строк символов, признаком, что строк больше нет - стро-ка со значением END. Количество символов в каждой строке не больше 60. Определить по каждой строке количество латинских букв, цифр, знаков операций (учитывать только +, -, *. /) и прочих символов. program prog3; var st: string[60]; i, n, kl, kv, ko, kp: byte; {при поиске во всём большом тексте – word} label 1, 2; begin 1: readln (st); if st<>’END’ then begin

Page 99: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

n:= length(st); kl:=0; kv:=0; ko:=0; kp:=0; {обнуление счётчиков} i:=1; {первый символ в строке} 2: case st[i] of ‘A’..’Z’,’a’..’z’: inc (kl); ‘0’..’9’: inc (kv); ‘+’, ‘-‘, ‘*’, ‘/’: inc(ko) else inc (kp); end; inc(i); if i<=n then goto 2; writeln (st, ‘:’, ‘ Букв:’, kl, ‘ Цифр:’, kv, ‘ Операций:’, ko, ‘ Прочих:’,kp); goto 1; end; end.

Эта задача с двумя операторами перехода (двумя вложенны-ми циклическими участками) переход ко второму, третьему и т.д. слову (goto 1), а перебор i–тых символов в слове (goto 2).

Отладочные данные: Azk1+7-20br.;я<> END<>

kl ⇒ 5, kv ⇒ 4, ko ⇒ 2, kp ⇒ 3.

2.11. Операторы цикла Циклические участки в вычислениях нам встречаются во всех

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

to 1. for параметр цикла := начальное значение конечное значение downto do оператор;

Page 100: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Оператор состоит из двух частей: заголовка (for ...do) и тела цикла, где может находиться только один оператор (составной – это тоже один).

Параметр цикла – скалярная переменная любого упорядочен-ного типа, по которой должно быть известно начальное и конечное значение. От начального к конечному значению параметр цикла из-меняется, беря каждый раз следующее (succ) значение, если в за-головке цикла стоит to или предыдущее (pred), если – downto. Для параметра цикла целого типа это увеличение на единицу или уменьшение на единицу. Значения другого шага задавать нельзя.

Цикл завершает свою работу, когда параметр цикла выйдет за своё конечное значение. Многовариантный расчёт задачи prog2 мог быть реализован так:

for nv:=1 to 4 do begin read(x); ...; writeln(‘# :’, nv:3, x:8:2, y:8:2); end; Метка и оператор goto теперь не нужны, тело цикла – состав-ной оператор, в который входят четыре оператора программы, вы-полняющиеся многократно.

Если шаг изменения параметра цикла не подчиняется функци-ям succ и pred (не принадлежит к упорядоченному типу, не равен плюс, минус единице), или для выхода из цикла требуется задать сложное логическое выражение, следует воспользоваться другими модификациями. 2. while лв do оператор;

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

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

• Эти значения в теле цикла должны изменяться, иначе получим «бесконечный» цикл.

Page 101: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

...x:=30; while x<= 275 do begin writeln ((sin(x/57.3) + cos(x/57.3)):8:4); x:=x+30; end; ... 3. repeat оператор; оператор; … until лв;

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

Все три варианта продемонстрируем на примере получения суммы 20 элементов массива ... s:=0; for i:=1 to 20 do begin read (a[i]); s:=s+a[i] end; ... ... s:=0; i:=1; while i<=20 do begin read (a[i]); s:=s+a[i]; inc(i) end; ... ... s:=0; i:=1; repeat read (a[i]); s:=s+a[i]; inc(i) until i >20; ...

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

2.12. Ввод и вывод из стандартных и внешних файлов Внимательно изучите эту тему. Вам будет предложено шесть

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

read ([идентификатор файла,] список переменных); readln

write ([идентификатор файла,] список выражений); writeln

Page 102: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Для ввода и вывода используются по два служебных слова, окончание ln означает строка (line). В квадратные скобки помещены необязательные конструкции, и в тексте они записываться не будут, зачем при вводе и выводе нужен идентификатор файла, мы разбе-рём в шестом правиле. Элементы в списках разделяются запятыми. Правило 1

Если ввод или вывод осуществляется из стандартных файлов (клавиатура и экран дисплея), то идентификаторы файлов могут не записываться, хотя для них существуют служебные слова – input (при вводе) и output (при выводе). Правило 2

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

Readln; и writeln; могут записываться в программе без своих списков. Readln; вызовет задержку экрана с результатами (не нужно нажимать клавиши <Alt><F5>), до тех пор, пока не будет нажата клавиша <Enter>.

Если оператор ввода, предшествовавший readln; был readln(...), то задержка экрана произойдёт; в противном случае для задержки экрана надо записать readln; readln; (на мой взгляд, за-держка экрана уместна, когда вся выводимая информация не уме-щается на экране и её удобно выводить порциями, а нажать на кла-виши <Alt><F5> не так сложно).

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

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

Page 103: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

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

Числа при вводе задаются в десятичной системе счисления, друг от друга отделяются хотя бы одним пробелом; операторы read(a); read(b); read(c); и оператор read(a, b, c); - идентичны, при этом второй компактней и наглядней. Исходные данные и в первом и во втором случае задаются одинаково, причём варианты могут быть различны: каждое значение с новой строки, все три числа на одной строке, два числа на одной, третье на другой и пр. Операторы readln(a); readln(b); readln(c); предполагают, что каждое значение задаётся с новой строки (а Вам это нужно?). Совершенно не имеет смысла использовать окончание ln при вводе элементов массива.

for i:=1 to 20 do read(a[i]); Двадцать чисел задаёте в любом ви-де: все в одной строке, на двадцати строчках, по пять элементов в одной строке и пр. Оператор readln(a[i]); будет работать только в случае, если каждое число задавать на новой строке.

Исходные данные типа char и string[k] следует задавать пер-вое на одной, второе на k позициях и друг от друга пробелами и прочими символами не отделять. Пусть имеется две фамилии: Цой и Домогарова. var fam1, fam2: string[10]; ... readln(fam1, fam2);... исходные данные: Цой Домогарова<Enter>

Для оператора ввода …readln(fam2, fam1); … исходные дан-ные: ДомогароваЦой<Enter>

В первом случае фамилия Цой найдена не будет, так как зада-на фамилия с семью пробелами в конце. В разделе 3.2. эти про-блемы будут сняты. Объявление строки символов string, вместо

Page 104: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

string[k] может вызвать, при неправильном использовании операто-ров ввода, различные неудобства и ошибки.

В одном операторе ввода задавать слова и числа следует ос-торожно. Можно рекомендовать два варианта:

• в одном операторе все переменные – числа, в другом все пе-ременные - слова. ...readLN (число, число,…); readln (слово, слово, …);

• весь список задавать в одном операторе, но сначала в нём должны следовать все переменные – слова, потом – числа. ...readln(слово, слово, …, число, число, …); Обратите внимание, что для ввода строк используется опера-

тор readLN. В табл.2.1 приведено правильное и неправильное использова-

ние операторов ввода для задачи, имеющей объявление: var n: integer; a,b: real; sl1, sl2: string[5];

Таблица 2.1 Операторы ввода для слов и чисел

запись – некорректна запись правильная read(n, a, b); readln(sl1, sl2); readLN(n, a, b); readln(sl1, sl2); readln(n, a, b, fam1, fam2); или readln (fam1, n, a, fam2, b);

readln (fam1, fam2, n, a, b);

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

Выражения, которые задаются в списке вывода, могут являть-ся константами (‘A=’, ‘Результат’. 2005, true и пр.), скалярными пе-ременными (n, sl2, r[i] и пр.), выражениями (abs(r[i]), sin(x/57.3)+cos(x/57.3), sl1+’ ‘+ sl2, a>b и пр.).

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

Пусть три целых числа k, l, m имеют значения 1, 2, 34, опера-тор writeln(k, l, m); выведет последовательность 1234, конечно, мож-но вставлять между переменными пробелы (k,’ ‘, ...), но это непра-

Page 105: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

вильное решение задачи. Вещественные числа (real) выводятся на 18 позиций в форма-

те с плавающей точкой и нормализацией 1<=|мантисса|<10, что не всегда удобно.

При выводе больше четырёх чисел в одной строке в середине пятого значения будет выполнен переход на новую строку экрана (в строке вывода размещается 80 символов, а 18*5=90). Формат выво-да с фиксированной точкой, конечно, в большинстве случаев – предпочтительней.

Данные типа char выводятся на одну позицию, а строки string[k] – на k позиций. Здесь тоже возникают вопросы, как, например, вы-вести слово ТАБЛИЦА с 60 позиции. Свой, а не стандартный фор-мат вывода, задаётся очень просто:

• для всех типов данных, кроме real, после выражения ставится двоеточие и указывается, на какое количество позиций вывес-ти это значение. В этом поле значение прижимается вправо.

writeln (k:3, l:3, m:3); writeln (‘ТАБЛИЦА’ : 30); Результат будет таким: 1 2 34

ТАБЛИЦА • для вещественных типов после выражения ставится двоето-

чие и задаётся всё поле, которое отводится для данного, за-тем ставится второе двоеточие и указывается количество цифр в дробной части, если они Вам не нужны, следует за-дать ноль. Число в заданном поле прижимается вправо. Пусть переменная А= -12,35. Три оператора вывода дадут разный вид результата.

writeln(a); writeln(a:6:2); writeln(a:6:0); -1.23500000000E 01 -12.35

-12 Правило 6

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

Page 106: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

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

Файлом называется набор данных, который имеет свое имя и размещается в каком-либо месте: на винчестере, дискете, экране или вводится с клавиатуры. Текстовым называется файл, состоя-щий из символов (числа - это тоже последовательность символов!).

Данные, вводимые с клавиатуры или выводимые на экран дис-плея, являются текстовым файлом, называемым стандартным.

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

• Объявить файловые переменные: var f, ff: text; {text-это файл из символов, f, ff - идентификаторы файлов}; • Записать связь логического и физического имени:

assign (идентификатор файла, 'физическое имя'); Например, assign (f, 'fam.id'); assign (ff, 'a:\p7.rez'); {fam.id или A:\p7.rez - это имена реально существующих в файловой системе файлов}.

• "Открыть" файл и объявить, для чего он открыт (для ввода - Reset; для вывода - Rewrite; для ввода, корректировки и по-следующего вывода -Append): reset (идентификатор файла); reset (f); rewrite (идентификатор файла); rewrite (ff); append (идентификатор файла); append (f);

• В операторах ввода-вывода указать идентификатор файла:

Page 107: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

read[ln] (идентификатор файла, список ввода-вывода); write[ln]

Readln(f, a, b, c); Writeln(ff, a+b, c/a); • "Закрыть" файл в конце программы:

close (идентификатор файла); close (f); close (ff); • Функция EOF (идентификатор файла) - позволяет вводить

любое количество данных, после последнего данного нажи-маются клавиши <Ctrl><z>. EOF- end of file. Функция eof может использоваться и при вводе исходных данных из стандартного файла (клавиатуры), тогда круглые скобки с идентификатором файла опускаются.

2.13. Тесты Вариант 1

1. Оператор присвоения позволяет: вычислить выражение, записанное справа от операции := и запи-сать результат в область памяти, заданную переменной или эле-ментом массива, которые находятся слева от этой операции

поменять местами выражения, записанные справа и слева от операции :=

изменить все элементы массива, идентификатор которого запи-сан слева от операции :=, на значение выражения, записанного справа от неё

2. Если значение A>3, то t=1; если A<3, то t=-1; если A=3,то t=0. Это можно записать так:

if a>3 then t:=1 else t:=-1; if a=3 then t:=0;

t:=0; if a>3 then t:=1 else t:=-1;

t:=0; if a>3 then t:=1; if a<3 then t:=-1;

3. При значении элементов массива ⇒ 3 0 -6 5 2, оператор с заго-ловком цикла i:=1; while a[i]< 0 do … выполнится

два раза три раза ни одного раза

Page 108: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Вариант 2 1. Для объявления: var a,b :integer; c :real; d:string[3]; e,f :array [1..6] of string[3]; g :array[1..6] of string[3]; следующие операторы присвоения являются корректными

a:=c; c:=b; e:=f; e:=g; e:=d; d:=e[2]; c:=2; d:=e[c];

2. Информация о каждом из трёх объектов содержит два числа (r, u) и строку символов (txt). Для ввода в цикле для трёх объектов двух чисел и одной строки символов должен использоваться один опе-ратор ввода, какой вариант записан правильно

...readln (r, u, txt);... ...readln (txt, r, u);... ...read (txt, r, u);

3. По алгоритму требуется чётные по индексу элементы массива A обрабатывать от конца к началу массива (n – чётный индекс)

for i:=n downto 1 do ...; for i:=n step -2 downto 2 do ...; i:=n; while i<=2 do begin ...; dec(i, 2); end;

Вариант 3 1. Составной оператор используется для:

описания любых действий в условном операторе и операторе вы-бора

записи алгоритма в виде самостоятельного блока в программе объединения нескольких любых операторов в один и записи тако-го «одного» оператора после then, else; в ветвях оператора case; в качестве тела цикла для операторов for и while

2. Оператор перехода может организовать

Page 109: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

3. Операторы тела цикла, заданные многоточием, при любом N вы-полняются хотя бы один раз

i:=1; repeat ... until i>n; i:=1; while i<=n do begin ... end; for i:=1 to n do begin ... end;

Вариант 4 1. Оператор присвоения целой переменной K значения от -50 до 50 следует записать так:

K := random (100)- 50; K := - random (50); K :=-50 + random (101);

2. Алгоритм: в новом массиве должны отсутствовать элементы, равные нулю в исходном массиве, правильно записан в варианте:

for i:=1 to 20 do if a[i]<>0 then b[i]:=a[i]; k:=1; i:=1; repeat if a[i]<>0 then begin b[k]:=a[i]; inc(k);end; inc(i); until

i>=1; k:=0; for i:=1 to 20 do if a[i]<>0 then begin inc(k); b[k]:=a[i]; end;

3. В цикле по обработке 10 элементов массива A, действия, пока-занные многоточием, следует выполнять только при значениях Ai >10.5

i:=1; while (i<=20) and (a[i]>10.5) do begin ...; inc(i); end; for i:=1 to 20 do if a[i]>10.5 then begin ...; end; for i:=1 to 20 do begin if a[i]<=10.5 then ...; end;

Вариант 5 1. Оператор присвоения, при объявлении переменной K с типом in-teger, записан правильно в случае:

K := sqr(101 mod 50 + 101 div 50); K := sqr(101 + 101/50); K :=sqrt (101 mod 50 + 101 div 50);

Page 110: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

2. Какие исходные данные представлены правильно для ввода че-тырёх целых чисел операторами readln(i,j); readln(k,l);

5 10 6 8

5 10 6 8 5, 10, 6, 8

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

i:=1; repeat ... until i>=1; i:=1; while i>=10 do ...; i:=1; while i<=10 do ...;

3. АЛГОРИТМЫ 3.1. Массив счётчиков, формируемый без проверок

Алгоритм задачи массив счётчиков интересен тем, что при правильной организации, формирование его может проходить без операторов if и case. Пусть вводится любое количество оценок (oc), результат зимней сессии по потоку 1ACY. Требуется определить полученное количество двоек, троек и т.д. и средний балл потока за эту сессию. Заведём массив счётчиков с индексами 2, 3, 4, 5, тогда при вводе оценки два следует увеличить на единицу счётчик именно с этим индексом. По алгоритму счётчиков мы знаем о необходимо-сти его обнуления. var k, s:word; oc, i: 2..5; mc: array [2..5] of word; ... for i:=2 to 5 do mc[i]:=0; k:=0; while not eof do begin inc(k); read(oc); inc(mc[oc]); end; s:=0; for i:=2 to 5 do s:=s+ i*mc[i];

Page 111: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

writeln (‘Средний балл: ‘, s/k); ... Исходные данные: 2 4 4 5 3 3 3 4 4 5 5 5 3 2 …<Ctrl><z>, <Enter> Вторая задача: вводятся строки символов, количество символов в каждой - не более 70. Определить, сколько раз встречается каждая прописная буква латинского алфавита. Результат вывести в обрат-ном порядке (от ‘Z’ до ‘A’). var mc: array[‘A’..’Z’] of byte; st: string[70]; ch: char; i, n: byte; ... for ch:=’A’ to ‘Z’ do mc[ch]:=0; while not eof do begin readln(st); n:=length(st); for i:=1 to n do begin ch:=st[i]; if (ch>=’A’) and (ch<=’Z’) {лучше: if ch in [‘A’..’Z’] } then inc(mc[ch]); end; end; for ch:=’Z’ downto ‘A’ do writeln (ch:5, ‘:’, mc[ch]:6); ... Исходные данные: A+. B! а я U<Ctrl><z>.,<Enter>.

3.2. Удаление пробелов в строке символов Работа со строками символов требует чёткого представления,

о том, что пробел такой же символ, как любой другой (‘A’ ‘ A’ – две разные строки), и о том, как исходные данные следует задавать, если в одном операторе ввода представлены несколько перемен-ных типа строки символов или строки символов и числа.

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

var s1, s2, s3: string[5]; k1, k2, k3: byte; ... readln(s1, s2, s3); k1:=length(s1); k2:=length(s2); k3:=length(s3); {теперь сами подумайте, как найти минимальное значение среди

k1, k2, k3, и вывести соответствующее значение s1, s2, s3}

Page 112: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

При исходных данных: Иа КенгаПух<Enter>

Будет выведено значение Пух и если нам понадобится опре-делить, есть ли в этом списке Иа ответ будет – нет. Символом обозначен пробел, т.е. после Иа следует три пробела. Выход из по-ложения: или использовать три оператора ввода и каждую строку задавать с новой строки экрана, или после ввода каждой строки удалять все имеющиеся пробелы. readln(s1); readln(s2); readln(s3); или while pos(‘ ’, s1) <> 0 do delete (s1, pos(‘ ’, s1), 1); - это просто пробел!

3.3. Удаление и вставка элемента в массив Следующие алгоритмы будут касаться удаления элементов из

массива. Самые простые из них связаны с созданием нового масси-ва, в который элементы будут попадать по какому-то условию. Пусть требуется из массива А удалить все элементы, равные нулю. … k:=0; for i:=1 to n do if a[i]<>0 then begin inc(k); b[k]:=a[i] end; ...

Теперь по тому же принципу сформируем новый массив, в ко-торый не войдёт элемент с индексом K, (это может быть индекс максимального элемента в массиве чисел, или самого длинного слова в массиве слов и пр.). ... for i:=1 to k-1 do b[i]:=a[i]; for i:= k to n-1 do b[i]:=a[i+1]; ...

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

Закончим вопрос по удалению из массива A элемента с номе-ром K, при этом новый массив заводить не будем, а выполним пе-ремещение элементов в исходном массиве.

i 1 2 3 ... k n ak=ak+1 ...

...

Page 113: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Место удаляемого элемента с номером K должен занять сле-дующий и т.д., пока на место n-1 элемента не встанет n элемент. ... for i:=k to n-1 do a[i]:=a[i+1];...

Рассмотрим два алгоритма вставки в массив A после элемента с номером K нового данного (T), будем создавать новый массив B или «раздвигать» элементы в исходном массиве, чтобы поместить туда добавляемый элемент. Не забудьте продумать вопросы, свя-занные с количеством элементов в этих массивах.

Вариант с новым массивом: ... for i:=1 to k do b[i]:=a[i]; b[k+1]:=t; for i:=k+2 to n+1 do b[i]:=a[i-1]; ...

Вариант добавления в исходный массив: ...for i:=n+1 dowto k+2 do a[i]:=a[i-1]; a[k+1]:=t; ...

4. ЦИКЛИЧЕСКИЕ УЧАСТКИ В ВЫЧИСЛЕНИЯХ И ИХ ЗАПИСЬ В ПРОГРАММЕ

4.1. Лабораторная работа «Одномерные массивы» (выполняет-

ся Ваш вариант по заданиям № 4, 6 задачника [7]) В вариантах работ по заданию №4 предусмотрены простые

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

Требования к этим лабораторным работам: • исходные данные для задания №4 – желательно, а для №6 –

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

по возможности совмещать действия в одном цикле. Пример для задания №4

Заданы значение переменной A и значения элементов двух массивов x1, x2, ..., x6; y1, y2, ..., y6. Элементы нового массива D

должны вычисляться по формуле: a)(yx

yxd i6

1i i

6

1i iii −⋅

∑ ⋅=

=

= .

Page 114: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

В задаче пять или шесть циклических участков: • ввод элементов массивов X и Y; элементы будут следовать в

таком порядке: x1, y1, ..., x6, y6 – иначе для ввода потребуется два циклических участка;

• накопление суммы выражений xi*yi; • накопление произведения элементов xi; • формирование элементов нового массива di; • вывод элементов нового массива di.

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

Ввод элементов массива будет задаваться с клавиатуры (Вы должны организовать ввод из внешнего файла одного или двух, в последнем случае, операторов цикла будет три). program prog4; var x, y, d: array[1..6] of real; a, s, p, t: real; i: byte; begin s:=0; p:=1; for i:=1 to 6 do begin read (x[i], y[i]); s:=s+x[i]*y[i]; p:=p*x[i]; end; t:=s/p; read (a); for i:=1 to 6 do begin d[i]:=t*(y[i]-a); writeln(‘D[‘, i, ‘]=’, d[i]:10:3);

Page 115: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

end; writeln(s, p, t); end.

Не забудьте, что чисел следует задать тринадцать. Перемен-ная t позволяет не вычислять шесть раз одно и то же значение s/p. Последний оператор вывода покажет, удачно ли выбран формат для вывода элементов массива D, может быть количество цифр в дробной части надо будет увеличить. Пример для задания №6

Заданы элементы массива t1, t2, ..., t20. Сформировать новый массив, в который войдут элементы исходного массива до первого отрицательного элемента в нём. Найти сумму элементов с чётными индексами после этого отрицательного элемента.

Анализ задачи на количество циклических участков: • ввод элементов массива T; • поиск индекса первого отрицательного элемента; • формирование нового массива до первого отрицательно-

го элемента; • вывод элементов нового массива; • накопление суммы элементов массива T с чётными ин-

дексами после первого отрицательного элемента. В алгоритме будем использовать цикл по формированию эле-

ментов нового массива и определению индекса отрицательного элемента. Этот индекс (i) может быть чётным, тогда накопление суммы начнётся с индекса i=i+2, или нечётным, тогда с индекса i=i+1.

Схема алгоритма приведена на рис. 4.1. Конечно, вариант объединения нескольких циклических участ-

ков в один может быть и другим. В одном цикле с вводом элементов массива T можно найти и индекс первого отрицательного элемента, но это потребует дополнительного анализа, проверки, введения ещё одной переменной – счётчика или логической: …L:=0;

Page 116: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

for i :=1 to 20 do begin read(f, t[i]); if t[i]<0 then inc(L); if L=1 then k:=i; end; ... При чтении текста программы следите за блоками схемы, ввод

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

Начало

i=1

Ввод ti

i=i+1

i<=20

i=1

ti>0 и

i<=20 ri=ti

Вывод ri

i=i+1

k=i

s=0

i<20

i -не-чет-

i=i+1 i=i+2

s=s+ti

i=i+2

i<=20

Вывод K,S

Конец

Рис. 4.1. Схема алгоритма по заданию № 6

Page 117: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Текст программы: <F3> prog6[.pas] program prog6; var t, r: array[1..20] of real; s: real; i, k: byte; f: text; begin assign (f, ‘prog6.id’); reset(f); for i:=1 to 20 do read (f, t[i]); close (f); i:=1; while (i<=20) and (t[i]>=0) do begin r[i]:=t[i]; writeln(‘R[‘, i:2, ‘]=’, r[i]:10:3); inc(i); end; k:=i; s:=0; if i<20 then {если нет отрицательного элемента – сумма равна ну-лю} begin if odd (i) then inc(i) else inc(i, 2); while i<=20 do begin s:=s+t[i]; inc(i, 2); end; end; writeln (‘Сумма чётных по номеру элементов, после ‘, k, ‘ –го эле-мента’, s); end. <F2> Файл с исходными данными: <F3>prog6.id

Page 118: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

3 8 4 3 7 8 9 18 2 4 0 12 15 -6 -10 1 0 0 0 0<Enter> <F2>

В массив R войдёт тринадцать элементов (3, …, 15), а сумма после четырнадцатого элемента будет равна единице.

4.2. Лабораторная работа «Простые» циклические задачи (выполняется Ваш вариант по заданию № 5 задачника [7]) В этой лабораторной работе требуется подготовить рекур-

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

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

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

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

• Y=X3+X6+X9+X12+X15 •

• Y=X3/2 – X6/4 + X9/6 – X12/8

рекуррентные формулы начальные значения B = B * X3 1 Y = Y + B 0 i = i + 3 (шаг цикла) 3 ⎯⎯⎯⎯⎯⎯⎯⎯⎯ i<=15

рекуррентные формулы начальные значения B = B * (- X3 ) -1 i = i + 2 (шаг цикла) 2 Y = Y + B/i 0 ⎯⎯⎯⎯⎯⎯⎯⎯⎯ i<=8

Page 119: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

programe prog5_a; var x, y, b, t: real;

i: byte; begin read(x); t:= -sqr(x)*x; b:=-1; y:=0; i:=2; while i<=8 do begin b:=b*t; y:=y+b/i; inc(i, 2); end; writeln(‘ При X= ‘, x, ‘ Y=’, y); end. • Y=X3/2 – X6/4 + X9/6 – ..., |X|<=1, определить с точностью ε.

В этом варианте определяется сумма бесконечного ряда. За-дача будет решена, когда разница между новым и предыдущим зна-чениями Y станет меньше, чем заданная точность ε (значения точ-ности 0.001, 0.0001, 0.000001 и т.д. увеличивают количество сла-гаемых).

рекуррентные формулы начальные значения B = B * (- X3 ) -1 i = i + 2 (шаг цикла) 2 Y = Y + B/ i 0 ⎯⎯⎯⎯⎯⎯⎯⎯⎯ |B/i| > ε и i<=50

Второе условие называется проверкой на количество итера-ций и позволяет предотвратить зацикливание в случае, если за 25

Page 120: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

• Y=X3/(2*3!) – X6/(4*5!) + X9/(6*7!) – ..., |X|<=1, определить с точ-ностью ε.

3!=1*2*3; 5!= 1*2*3*4*5 , т.е. чтобы получить новое значение нечётных факториалов нужно взять предыдущее значение (3!) и ум-ножить его на i (4) и на i+1 (5), что и отражено в формуле для B. Можно было для знаменателя завести свою переменную F=F*i*(i+1) с начальным значением единица, тогда B=B*(-X3), Y=Y+B/i/F.

рекуррентные формулы начальные значения i = i + 2 (шаг цикла) 2 B = B * (- X3 ) / (i*(i+1)) -1 Y = Y + B/ i 0 ⎯⎯⎯⎯⎯⎯⎯⎯⎯ |B/i| > ε и i<=50

В приведённой ниже программе показан контроль исходных данных. Проверяется, правильно ли задано значение X (abs(x)<=1) и точность ε, которая должна быть не более чем 0.01 и всегда задаёт-ся единицей с некоторым количеством нулей перед ней, (это не кон-тролируется, но Вы должны об этом помнить). Так из трёх вводимых наборов данных (X и ε) расчёт будет проведён только по последне-му набору.

Исходные данные: 5 0.001 (неправильно задано X), 1 1 (неправильно задано ε), -1 0.01 (данные представлены корректно). program prog5_b; var x, b, y, e, t: real; i: byte; begin repeat writeln (‘Введите |X|<=1 и E<=0.01’); readln (x, e); until (abs(x)<=1) and (e<=0.01);

Page 121: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

t:= -sqr(x)*x; b:=-1; y:=0; i:=0; repeat {попробуйте заменить на оператор цикла while} inc(i, 2); b:=b*t/i/(i+1); y:=y+b/i; until (abs (b/i)<=e) or (i>50); if i>50 {проверяем по какому из условий завершился цикл} then writeln (‘Авария при X=’, x, ‘ Y=’, y) else writeln (‘Ответ при ’, i div 2, ‘ шагах равен :’, y); end. • Пример, когда очень загадочная задача, становится просто

решаемой.

99...963 ++++ Вот рекуррентные формулы: i=i-1 33

y=√3*i+y 0

i>=1

4.3. Документированный вывод При выполнении этой лабораторной работе Вы должны полу-

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

• ввод исходных данных проводить из внешнего файла; • результат должен быть представлен в виде таблицы, имею-

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

а) для горизонтальных линий: * - знак умножения, - - "минус", . - точка, _ - подчеркивание.

б) для вертикальных линий: * - знак умножения, ! - восклицательный знак, I - буква i.

в) для любых линий - коды символов псевдографики:

Page 122: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

в строке, задающей список вывода, помещается последователь-ность #код#код#код#код#код#код... или нажимаются клавиши <alt>код, <altl>код,... при этом коды набираются на числовой клавиа-туре (этот способ на экране выглядит более наглядно).

Коды символов псевдографики: 218 194 191 213 209 184 196 205 ┌ ┬ ┐ ╒ ╤ ╕ ─ ═ 195 197 180 198 216 181 179 186 ├ ┼ ┤ ╞ ╪ ╡ ⌡ ║ 192 193 217 212 207 190 └ ┴ ┘ ╘ ╧ ╛ 214 210 183 201 203 187 ╓ ╥ ╖ ╔ ╦ ╗ 199 215 182 204 206 185 ╟ ╫ ╢ ╠ ╬ ╣ 211 208 189 200 202 188 ╙ ╨ ╜ ╚ ╩ ╝

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

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

4.4. Лабораторная работа «Документированный вывод»

(выполняется Ваш вариант по заданию №7 задачника [7]) Заданы фамилии пользователей сети МТС, их телефоны и

Page 123: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

сумма на счёте. Вывести всю информацию о тех, у кого сумма на счёте меньше средней суммы. Макет таблицы:

Взнос меньше среднего=

*************************************************

*№ по порядку* Фамилия * Телефон * Сумма *

**************************************************

* 1 *Иванов * 155-01-46* 1500 *

Для лучшего понимания текста программы пробелы в макете таблицы обозначены специальным символом . Вся таблица от края сдвигается на пять позиций. Количество символов ‘*’: 12*3+9+5=50 (три столбца по 12 позиций, один -9 и пять символов ‘*’ - разделителей столбцов). program prog7; var fam: array[1..100] of string[12]; tel: array[1..100] of string[9]; sv: array[1..100] of word; i, k, m: byte; s: real; f: text; zv: string[50]; begin assign (f, ‘MTC.id’); reset (f); k:=0; s:=0; while not eof(f) do begin inc(k); readln (f, fam[k], tel[k], sv[k]); s:=s+ sv[k]; end; s:=s/k; close (f);

Page 124: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

zv:=’’; {пустая строка} for i:=1 to 50 do zv:=zv+’*’; writeln (‘Взнос меньше среднего=’: 33, s:8:0); writeln (zv:55); {почему появилось такое поле для вывода?} writeln (‘*№ по порядку* Фамилия * Телефон * Сумма *’: 55); {при наборе символ означает нажать клавишу пробел} writeln (zv:55); m:=0; for i:=1 to K do if sv[i]<s then begin inc(m); writeln (‘*’:6, m:9, ‘ *’, fam[i], ‘*’, tel[i]:12, ‘*’, sv[i]:7, ‘ *’); end; {самый главный оператор вывода в программе, сравните каждый элемент вывода с макетом таблицы, например, почему для fami формат не требуется, а для teli - требуется} writeln (zv:55); end.

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

Иванов 155-01-46 1500<Enter>

Кржижановски200-20-20 300<Enter>

Петров 900-90-90 8100<Ctrl><z>, <Enter>

5. ВЛОЖЕННЫЕ ЦИКЛЫ. ОПЕРАТОРЫ BREAK И CONTINUE Любая конструкция оператора цикла может быть целиком, без

Page 125: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

пересечения, вложена в другую конструкцию. На простом примере разберём, как это происходит. for x:=1 to 3 do for y:=5 to 6 do writeln (x+y);

x Y x+y 1 5

6 6 7

2 5 6

7 8

3 5 6

8 9

for y:=5 to 6 do for x:=1 to 3 do writeln(x+y);

y x x+y

Параметр внешнего цикла X получает начальное значение, за-тем параметр внутреннего цикла Y проходит все значения от на-чального до конечного и выводятся X+Y. Затем параметр внешнего цикла изменяет своё значение, а внутреннего восстанавливает на-чальное значение, и циклы продолжают выполняться. Заполните сами таблицу, когда параметры внешнего и внутреннего циклов по-менялись местами. Несколько правил при работе с циклами. Правило 1

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

Правило 2

Обращение к операторам тела цикла с помощью оператора goto – запрещён (т.е. вход в цикл, минуя его заголовок, не разреша-ется). Досрочный выход из цикла оператором goto не запрещается, но и не рекомендуется, так как можно либо изменить конструкцию оператора цикла, добавив в его заголовок условие досрочного вы-хода, либо воспользоваться операторами break и continue. Правило 3

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

Page 126: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

дцатью элементами массива A, но вычисления должны прекращать-ся, как только встретится элемент равный нулю. ...for i:=1 to 20 do begin if a[i]=0 then goto M; ...end; M:…

Кроме того, что надо будет объявлять метку M, программиро-вание с оператором перехода в настоящее время стараются не ис-пользовать (текст программы перегружен и в какой-то момент ста-новится проблематично понять, куда осуществляется переход). ...for i:=1 to 20 do begin if a[i]=0 then break; ...end; …

Этот вариант не требует метки, а результат получаем тот же. ... i:=1; while (i<=20) and (a[i]<>0) do begin ...; inc(i) end; ...

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

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

Пусть нам требуется включать в сумму только положительные элементы массива, затем, с текущим значением суммы, проводить ещё какие-то вычисления, если элемент в сумму не добавлялся, то и дополнительные действия над ней нам не нужны. ... s:=0; for i:=1 to 20 do begin if a[i]<=0 then continue; s:=s+a[i]; ... end;...

В цикле будут проверяться все двадцать элементов исходного массива, но действия будут выполняться только над положитель-ными элементами (возможен и вариант проверки a[i]>0, запишите его).

Приведём пример, когда вложенными конструкциями являются другие модификации оператора цикла.

Изменения переменных X и Y представлены выражениями: 6<=X<=7, hx=0.3; -1.5<=Y<=1.5, hy=0.5. Найти всевозможные значения c=x2+√ |y| .

Page 127: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

x:=6; while x<=7 do begin y:=-1.5; while y<=1.5 do begin writeln (x:5:1, y:5:1, (sqr(x)+sqrt(abs(y))):5:1); y:=y+0.5; end; x:=x+0.3; end; ...

Любые действия с многомерными массивами требуют обяза-тельного вложения операторов цикла друг в друга. Пусть требуется обрабатывать элементы A[i,j] двухмерного массива (матрицы), вот что нужно для этого делать: for i:=1 to 2 do {как меняется строка i} for j:=1 to 4 do {как меняется столбец j} ...a[i,j]; Какие элементы матрицы, и в каком порядке будут обрабатываться?

i j a[i,j] 1 1

2 3 4

a11a12a13a14

2 1 2 3 4

a21a22a23a24

j i a[i,j] 1 1

2 a11a21

2 1 2

a12a22

3 1 2

a13a23

4 1 2

a14a24

Для второй таблицы операторы цикла записываются в другом порядке: for j:=1 to 4 do for i:=1 to 2 do ... a[i,j];

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

При подготовке к лабораторной работе по заданию №8 (мат-

Page 128: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

Рассмотрим несколько примеров с фрагментами по обработке матриц. Законченная программа приведена в главе 6.

I. Найдём значение максимального элемента во всей матрице A, в которой n строк и m столбцов.

... max:= -1e10; for i:=1 to n do for j:=1 to m do begin read (a[i,j]); if a[i,j] > max then max:=a[i,j]; end; ...

II. Найдём индексы (номер строки K и номер столбца L) мак-симального элемента матрицы.

... k:=1; l:=1; for i:=1 to n do for j:=1 to m do begin read (a[i,j]); if a[i,j] > a[k,l] then begin k:=i; l:=j; end; end; ... Максимальным будет элемент A[K,L].

III. Найдём значения максимальных элементов в каждой строке матрицы. В отличие от первого алгоритма MAX - это массив из n элементов.

... for i:=1 to n do begin max[i]:= -1e10; for j:=1 to m do

Page 129: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

begin read (a[i,j]); if a[i,j] > max[i] then max[i]:=a[i,j]; end; end; ...

IV. Найдём значения максимальных элементов в каждом столбце матрицы. MAX - это тоже массив, но он состоит из m элементов.

... for i:=1 to n do for j:=1 to m do read (a[i,j]); for j:=1 to m begin max[j]:= -1e10; for i:=1 to n do if a[i,j] > max[j] then max[j]:=a[i,j]; end; ...

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

6. ЛАБОРАТОРНАЯ РАБОТА «МАТРИЦЫ» (выполняется Ваш вариант по заданию №8 задачника [7]) В главе 5 много внимания было уделено двухмерным масси-

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

Рассмотрим ещё два способа вывода матрицы в "красивом" виде: …for i:=1 to n do begin writeln; {каждая строка матрицы выводится с новой строки экра-на} for j:=1 to m do write (a[i,j]:8:0); end;

Page 130: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

или ... for i:=1 to n do for j:=1 to m do begin if (j-1) mod k=0 then writeln; {задается, сколько элементов одно-го столбца будет выводиться в одной строке матрицы} write (a[i,j]:8:0); end; где, n, m-число строк и столбцов в матрице; k-максимальное число эле-ментов в одной строке, можно задать k=10, 8, 5 и т.д., но к*p, где р - поле вывода (мы выбрали - 8), не должно превышать 80. Требования к лабораторной работе:

• количество элементов в матрице следует задавать не менее 25;

• удобно объявлять матрицу большого размера (10*10) и вво-дить с клавиатуры при каждом расчёте n – количество строк, m – количество столбцов

• исходные данные задавать во внешнем текстовом файле; • обязательно выводить исходную, новую матрицы и, возможно,

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

просчёта (можно воспользоваться способом, предложенным в P.S.3).

Пример задания № 8 Заданы элементы квадратной матрицы A размером 6*6. Опре-

делить сумму элементов во всех чётных строках матрицы (S1) и в нечётных столбцах её (S2). Если первая сумма меньше второй, то элементы главной диагонали заменить нулями.

В алгоритме будет четыре циклических участка: • ввод, вывод элементов матрицы и накопление суммы элемен-

тов чётных строк матрицы;

Page 131: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

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

меньше второй; • вывод новой матрицы (она может совпадать с исходной мат-

рицей). Схема алгоритма этой задачи приведена на рис. 6.1. Обратите внимание, что в первом вложенном операторе цикла

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

Удобно было бы записать в виде отдельного блока алгоритм «красивого» вывода элементов матрицы (это в программе выполня-ется дважды), в следующей дисциплине, где будут рассматриваться методы процедурного и модульного программирования, мы сможем это реализовать. program prog8; var a : array[1..6, 1..6] of real; i, j : byte; s1, s2 : real; f : text; begin assign (f, ‘prog8.id’); reset(f); s1:=0; for i:=1 to 6 do begin writeln; for j:=1 to 6 do begin read (f, a[i, j]); write (a[i, j]:10:2); if not odd (i) then s1:=s1+a[i, j]; end; end; s2:=0; j:=1;

Page 132: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

s2=s2+aij

i=i+1

i<=6

j=j+2

j<=6

Начало

s1=0

s2>s1

i=1

aij=0i=i+1

i<=6

i=1

j=1

Вывод aij

j=j+1

j<=6

i=i+1

i<=6

Конец

i=1

j=1

Ввод aij

i-чет

s1=s1+aij

j=j+1

j<=6

i=i+1

i<=6

s2=0

j=1

i=1

Рис.6.1. Схема алгоритма для задания № 8

Page 133: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

while j<=6 do begin for i:=1 to 6 do s2:=s2+a[i j]; inc(j, 2); end; if s2>s1 then for i:=1 to 6 do a[i, i]:=0; writeln; writeln; for i:=1 to 6 do begin writeln; for j:=1 to 6 do write (a[i, j]:10:2); end; end.

P.S.1. При отладке задачи следует задавать два набора ис-ходных данных (prog8.id и prog8.id2) и в операторе assign менять эти имена, что – неудобно.

P.S.2. Можно имя файла задать не константой, а переменной и вводить это имя с клавиатуры: ... var st: string; begin writeln (‘Имя файла: ’); readln (st); assign (f, st);...

P.S.3. Можно вводить только часть подготовленной матрицы, правильно организуя при вводе переход к новой строке, иначе не те элементы будут вводиться. … var n, m: byte; begin readln (n, m); ... for i:=1 to n do begin writeln; for j:=1 to m do begin read (f, a[i, j]); write (a[i, j]:10:2); if not odd (i) then s1:=s1+a[i, j];

Page 134: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

end; readln (f); {иначе элементы будут считываться не с той строки} end; … Везде в программе константы шесть поменять на перемен-ные n и m. Для матрицы: 1 1 1 1 1 1 Если задать размер матрицы 3*3, то S1=3, а S2=6, 1 1 1 1 1 1 элементы главной диагонали будут нулями. 1 1 1 1 1 1 Для всей матрицы S1=S2=18 и замены не будет. 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

7. АЛГОРИТМЫ 7.1. Работа с несколькими строками, значениями которых яв-

ляются строки символов Рассмотрим, как записать алгоритм задачи, в которой исполь-

зуется массив строк. Удобней объявить строку простой перемен-ной, вводить одну строку, её обрабатывать, затем вторую и т.д., при работе со строками отказ от массива иногда упрощает, если не ал-горитм, то обращение к символам строки.

Из внешнего фала вводится любое количество строк с количе-ством символов не более 60. В текстах строк могут встречаться точ-ки. В другой внешний файл выводить строки так, чтобы они заканчи-вались точкой. Два файла исходный и результирующий приводятся ниже. Предполагается, что количество символов между двумя точ-ками не превышает 60 символов. <F3> LA.id Информация обрабатывается на ВМ. Машина является инструмен-том. Палка, камень, молоток - это инструмент. Инструмент ВМ - изменялся.<Ctrl><z>,<Enter> <F2>

LA.rez Информация обрабатывается на ВМ. Машина является инструментом. Палка, камень, молоток - это инструмент. Инструмент ВМ - изменялся.

Page 135: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

Алгоритм представим в виде программы. var st: string[60]; i, n: byte; f, ff: text; begin assign (f, ‘la.id’); reset (f); assign (ff, ‘la.rez’); rewrite (ff); while not eof (f) do begin readln (f, st); if pos (‘.’, st)=0 then write (ff,st) else begin n:=length (st); for i:=1 to n do if st[i]=’.’ then writeln (ff, st[i]) else write (ff, st[i]); end; end; end.

7.2. Алгоритмы сортировки Алгоритмов сортировок существует очень много, Д. Кнут в кни-

ге [8] этой теме посвятил около 500 страниц. Алгоритмы могут опти-мизировать время, расходуя память (внутренняя сортировка – весь массив хранится в оперативной памяти), или наоборот оптимизиру-ется память (внешняя сортировка, массив хранится на винчестере или дискете), оптимизация может идти за счёт уменьшения числа сравнений и пр.

Каждый метод имеет название, например, «Обменная сорти-ровка» и в нём модификации («пузырёк», «обменная со слиянием» и др.). Мы будем заниматься алгоритмом самой простой сортировки из методов «Сортировка посредством выбора».

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

Page 136: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

растанию. Для нашей задачи сортировку будем проводить по убы-ванию, для чего нам понадобится находить индекс максимального элемента (для другого порядка размещения элементов – индекс ми-нимального элемента). На рис. 7.1. дано объяснение этому алго-ритму, а на рис. 7.2. приведена его схема.

Рис.7.1. Алгоритм сортировки выбором

i=1 i=2 ... i=n-1 k=i k=i j=i+1 j=i+1 ... ... j=n j=n

K

K

Ai Ak

p=ai

ai=ak

ak=p

i=i+1

i<=n-

1

Начало j=i+1

aj>ak

k=j

j=j+1

j<=n

i=1

Ввод ai

i=i+1

i<=n

i=1

k=i

i=1

Вывод ai

i=i+1

i<=n

Конец

Последовательно n-1 раз просматриваем элементы массива A, при каждом просмотре в цикле по j (i+1<= j <= n) находим индекс (K) максимального элемента в массиве и меняем местами значения элементов Ai и Ak (алгоритм обмена содержимого двух областей па-мяти).

Рис. 7.2. Сортировка элементов массива по убыванию

Фрагмент программы с вложенными операторами цикла: … for i:=1 to n-1 do begin

Page 137: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

k:=i; for j:=i+1 to n do if a[j]>a[k] then k:=j; p:=a[i]; a[i]:=a[k]; a[k]:=p; end; ...

Вот фрагмент другого алгоритма, когда самый тяжёлый эле-мент «всплывает» - этот метод называется «пузырёк». Всплывать положено самому лёгкому элементу, но мы сохраняем сортировку по убыванию. … pr:=true; i:=2; while (i<=n-1) and pr do begin pr:=false; for j:=n downto i do if a[j]>a[j-1] then begin

p:=a[j]; a[j]:=a[j-1]; a[j-1]:=p; pr:=true; end;

inc(i); end; ...

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

Сортировать по этим алгоритмам можно не только числа, но и строки, ведь каждый символ строки представлен своим кодом. Коды латинских букв упорядочены по возрастанию (прописные буквы имеют код меньше, чем строчные), а с русскими есть некоторые проблемы (посмотрите их коды). Не забудьте объявить с типом string[...] не только элементы сортируемого массива, но и посредни-ка P.

Page 138: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

7.3. Поиск одинаковых элементов в массиве Задача «в массиве A найти одинаковые элементы и вывести

их порядковые номера», при добавлении некоторых условий, может оказаться довольно не простой. Вот массив: 1 5 6 2 3 7 5 8 0 3 4 5 3 12 9; возьмём первый элемент массива (1) и сравним его со всеми элементами от второго до последнего, затем возьмём второй эле-мент (5) и выполним сравнение его с элементами от третьего до по-следнего элемента. Последний раз во внешнем цикле будет участ-вовать предпоследний элемент (12), который сравнивается с по-следним элементом (9). Если при любом сравнении будут найдены одинаковые элементы, их номера выводятся. Вот реализация этого алгоритма: ... for i:=1 to n-1 do for j:=i+1 to n do if a[i]=a[j] then writeln (a[i], ’:’, i:3, j:3, ‘;’);... 5: 2 7; 5: 2 12; ... 5: 7 12;

Вывод индексов одинаковых элементов со значением три - опущен.

Такое представление результата – неудобно. Номера 2, 7, 12 должны быть выведены только по одному разу. 5: 2 7 12; 3: 5 10 13;

Новый алгоритм испортит исходный массив, поэтому, если в дальнейшем он будет нужен, заведите его копию. При нахождении одинаковых элементов второму элементу (a[j]) следует присвоить значение, которое не может встретиться в массиве («мусорное» значение), для чисел это может быть, например, -maxint, для слов ‘***’. Этот «мусор» не должен выводиться в качестве одинаковых значений, поэтому для них внутренний цикл не будем выполнять. ... for i:=1 to n-1 do begin

Page 139: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

if a[i] =- maxint then continue; k:=0; for j:=i+1 to n do if a[i]=a[j] then begin inc(k); if k=1 then write(a[i], ‘:’, i:3); write(j:3); a[j]:=- maxint; end; if k<>0 then writeln(‘;’); end; ...

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

Вводится любое количество чисел M: 6 0 0 4 0 7 0 0 0 0 5 0 7 5 3 <Ctrl><z>, <Enter>. Определить максимальное количество идущих подряд нулей (в нашем случае – четыре). В представленной на рис. 7.3. схеме алгоритма, K – текущее количество нулей, а MK - макси-мальное. Здесь надо обратить внимание на два важных момента:

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

из цикла (без второго сравнения, в случае если последние числа ..5 3 0 0 0 0 0, ответ пять мы не получим). Запишите текст программы для схемы алгоритма, приведён-

ной на рис. 7.3. Найдите в схеме алгоритма блоки, реализующие два замеча-

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

7.5. Алгоритмы последовательного и двоичного поиска Последний алгоритм, которым мы займёмся, это алгоритм по-

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

Алгоритм последовательного поиска в массиве A значения,

Page 140: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

есть дан-ные

k>mk

mk=k

Вывод mk

Конец

m=0

k<>0

k>mk

mk=k

k=0

k=k+1

Начало

mk=0

k=0

Ввод m

равного B записывается так:

Рис. 7.3. Максимальное количество идущих подряд нулей

... for i:=1 to n do if a[i]=b then writeln (i); ... здесь не предусмотрена проверка и выдача сообщения об отсутст-вии в массиве значения B. Вот устранение этого недостатка: ... pr:=true; for i:=1 to n do if a[i]=b then begin writeln (i); pr:=false end; if pr then writeln (‘ Элемент =’, b, ‘ отсутствует’); ...

Вы должны помнить, что переменная pr объявляется с типом boolean и, следовательно, является логическим выражением, по-этому использование проверки pr=true не требуется.

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

Page 141: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

B, либо при выходе за границы массива выдаётся сообщение, что элемент с таким значением не обнаружен. В приведённой на рис. 7.4. схеме алгоритма приняты обозначения: ib – начальное значение индекса; ik – конечное значение индекса; is – среднее значение индекса, вычисляется по формуле (ib+ik)/2, только результат нужен целый.

Начало

Ввод b i=1

Для массива, упорядоченного по возрастанию его элементов

(0 2 3 5 6 7 8 9 17 22), сравнение a[is] и B приведёт к таким действи-ям:

Для массива, упорядоченного по убыванию его элементов (22 17 9 8 7 6 5 3 2 0), сравнение a[is] и B приведёт к другим действиям:

Ввод ai

i=i+1 ik>ib

i<=n

ib=1

ik=n

is=(ib+ik)/2

Вывод "НЕТ"

Конец

ais>b

ik=is-1 ais<b

Вывод is

ib=is+1 STOP Рис. 7.4. Схема

алгоритма двоичного поиска

< ib=is+1 нижняя половина массива a[is] > B ik=is-1 верхняя половина массива = вывод is

< ik=is-1 верхняя половина массива a[is] > B ib=is+1 нижняя половина массива = вывод is

Page 142: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

... pr:=true; ib:=1; ik:=n; while ik>ib do begin is:=(ib +ik) div 2; if a[is]>b then ik:=is-1 else if a[is]<b then ib:=is+1 else begin writeln(is); pr:=false; break end; end; if pr then writeln (‘ Элемент =’, b, ‘ отсутствует’): ...

7.6. Тесты 1. В массиве 10 строк, в каждой из которых не более 40

символов. В программе объявлено: var ST: array [1..10] of string[40]; Для обращения к J-му символу

I-ой строки в программе надо записать: ST[i, j] ST[i][j] ST[j]

2. В массиве 10 строк, в каждой из которых не более 40 символов. В программе объявлено:

var ST: array [1..10, 1..40] of char; Для обращения к J-му симво-лу I-ой строки в программе надо записать:

ST[i, j] ST[i][j] ST[j]

3. Массив строк не используется. В программе объявлено: var ST: string [40]; В цикле по параметру i будут последова-

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

ST[i, j] ST[i][j]

Page 143: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ST[j] 4. Удалить пробелы в конце слова (var sl1, sl2 : string[10];...

readln(sl1, sl2);) можно так: n:=length(sl1); k:=pos(‘ ‘, sl1); delete(sl1, n, k); k:=pos(‘ ‘, sl1); delete(sl1, k, 11-k); for i:=10 downto 1 do if sl1[i]=’ ‘ then delete(sl1, i, 1);

5. Переменная N может принимать целые значения от -5 до 1 (var N: -5..1;). Следует случайным образом сформировать 100 таких чисел и найти, сколько из них имеют значения -5, -4, -3, -2, -1, 0, 1. Какой алгоритм проще решит эту задачу: var mc: array[-5..1] of byte; ... for i:=-5 to 1 do mc[i]:=0; for i:=1 to 100 do begin n:=random(?) - ?; inc(mc[n]); end;... var mc: array[1..7] of byte; ... for i:=1 to 7 do mc[i]:=0; for i:=1 to 100 do begin n:=random(?) - ?; case n of -5: inc( mc[1]); -4: inc( mc[2]); ... 1: inc( mc[7]); end; end;...

Вместо Case предыдущего варианта использовать условный оператор

... if n= -5 then inc( mc[1]) else if n= -4 then inc( mc[2]) ... else inc( mc[7]);

5. В массиве t1,...,t20 удалить элемент с номером K: for i:=k to n-1 do t[i]:=t[i+1];

i:=k; while i<=20 do t[i]:=t[i+1]; for i:=21 downto k do t[i]:=t[i-1];

Page 144: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ИТОГОВЫЕ ТЕСТЫ 1. В качестве метки в Паскале могут использоваться:

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

2. Для описания переменных в Паскале используются служеб-ные слова:

- type - var - const

3. Число, записанное в виде последовательности 3А7, пред-ставляет:

- неверную запись - число в восьмеричной системе счисления - число в шестнадцатеричной системе счисления

4. Для записи числа в восьмеричной системе счисления ис-пользуются:

- любые арабские цифры - цифры от нуля до семи - цифры от нуля до восьми

5. Правильной записью числа 123,45*106, при условии норма-лизации 10<=|мантисса|<100 будет:

- 0.12345*109

- 12345*104

- 12.345*107

6. В Паскале к целым типам, кроме integer, относятся: - byte, longint, single, word, shortint - byte, longint, word, shortint - byte, longint, word, shortint, extended

7. Для реализации проверки 1<= A <50, в программе следует записать:

- 1<=a<50

Page 145: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

- (a>=1) or (a<50) - (1<=a) and (a<50)

8. В программе записаны процедуры вывода: write(1); write(2,3); writeln(4); write(5,6); writeln; writeln(7,8); результат будет выглядеть:

- 1 2 3 4 5 6 7 8

- 1 23 4 56 78

- 1234 56 78

- 1 2 3 4 5 6 7 8 9. Результатом выражения Паскаля concat(copy(‘ЛИМА’, 3, 2),

copy(‘ПАЛЬМА’, 5, 2)) будет строка: - пустая строка - ЛИПА - МАМА

10. Результатом выражения Паскаля random(10) + random(15) + 6 будут числа:

- от 0 до 31 - от 6 до 29 - от 6 до 31

11. Операторы тела цикла выполнятся хотя бы один раз в опе-раторах:

- for ... begin ... end;

Page 146: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

- while лв begin ... end; - repeat ... until лв;

12. Оператор continue позволяет: - повторно выполнить группу операторов - не выполнять операторы от него до конца тела цикла, воз-

вращаться к заголовку цикла и снова выполнять циклический уча-сток вычислений

- прекращать вычисления - организовать выход из цикла

13. Значениями R, K при выводе после вызове подпрограммы val(‘123e2’, r, k) будут:

- 12300 0 - 123 4 - 1.23e4 0

14. Для описания циклических участков в вычислениях исполь-зуется оператор:

- while ... - составной begin ... end - case ... end

15. Многовариантный расчёт – это: - сравнение нескольких алгоритмов решения задачи - расчёт нескольких наборов данных без вмешательства

пользователя - подбор оптимального результата

16. Какое логическое выражение удовлетворяет условию: Х лежит вне отрезков [2, 5] и [-1, 1]:

- not((x>=2) and (x<=5) or (x>= -1) and (x<=1)) - ((x>=2) or (x<=5)) and ((x>= -1) and (x<=1)) - (x<= -1) or (x>=5) or (x>1) and (x<2)

17. Если i, j, k – целые, то правильной будет следующая запись оператора присвоения:

- i:=sqrt (abs(k+j));

Page 147: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

- i:=trunc(sqrt (abs(k+j))); - i:=int(sqrt (abs(k+j)));

18. В массиве из 10 элементов действия над ними следует вы-полнить в обратном порядке:

- for i :=10 to 1 do …; - i:=10; repeat …; dec(i); until i<=10; - for i:=10 downto 1 do …;

19. Указать корректные операторы цикла: - i:=1; while i<=10 do begin …; inc(i);end; - i:=1; repeat …; inc(i); until i<=10; - for i:=1 to 10 do begin …; inc(i); end; - i:=1; repeat …; inc(i); until i >10; - i:=1; while i >10 do begin …; inc(i);end; - for i:=10 to 1 do begin …; end; - for i:=10 downto 1 do begin … end;

20. Результат работы программы следует выводить во внеш-ний файл. Для открытия файла используется процедура:

- assign (f, ‘a.rez’); - rewrite(f); - reset(f); - append(f);

ЛИТЕРАТУРА Основная

1. Иванова Г.С. Основы программирования. - М.: Изд-во МГТУ им. Н.Э. Баумана, 2002.

2. Вирт Н. Алгоритмы и структуры данных. - СПб.: Невский диалект, 2001.

3. Немнюгин С.А. Turbo Pascal. Практикум. 2-е издание. - СПб.: ООО «Питер Принт», 2003.

Дополнительная 4. Милов А.В. Основы программирования в задачах и при-

мерах. - М.: ООО «Изд-во АСТ»; Харьков: «Фолио», 2003.

Page 148: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

5. Минакова Н.И., Невская Е.С. и др. Методы программиро-вания. Под редакцией Угольницкого Г.А. - М.: Вузовская книга, 1999.

6. Акатнова Л.А. Лабораторный практикум по программиро-ванию на языке Паскаль /МАДИ. - М., 2003.

7. Акатнова Л.А., Евстратова И.А. и др. Сборник заданий по программированию /МАДИ. - М., 1994.

8. Кнут Д. Искусство программирования для ЭВМ, т.3. – М.: Мир, 1978.

СОДЕРЖАНИЕ МОДУЛЬ 1. ВОПРОСЫ ТЕОРЕТИЧЕСКОЙ И ПРИКЛАДНОЙ

ИНФОРМАТИКИ…………………………………………. 1. От информации к информационным технологиям ……………….

1.1. Информатика, как наука ………………………………………… 1.2. Информация, её свойства, способы измерения ……………. 1.3. Информационный ресурс и информационные технологии ..1.4. Информатизация общества ……………………………………..1.5. Принцип программного управления ….……………………….. 1.6. Тесты ..………………………………………………………………

2. Математические основы информатики .…………………………….2.1. Системы счисления .…………………………………………….. 2.2. Перевод из одной в другую систему счисления .……………

2.2.1. Перевод целой части десятичного числа в любую сис-тему счисления ………………………………………………

2.2.2. Перевод дробной части десятичного числа в любую систему счисления ..………………………………………..

2.2.3. Перевод целой части числа любой системы счисления в десятичное число …………………………………………

2.2.4. Перевод дробной части числа любой системы счисле-ния в десятичное число ……………………………………

2.2.5. Перевод двоичного числа в систему счисления 2k .….. 2.2.6. Перевод числа из системы счисления 2k в двоичное

число …………………………………………………………. 2.2.7. Перевод десятичного числа в двоично-десятичную

систему счисления ………………………………………… 2.2.8. Перевод двоично-десятичного числа в десятичную

систему счисления ….……………………………………… 2.3. Представление символьной и числовой информации в ПК ..

2.3.1. Кодировка символов ……………………………………......2.3.2. Представление чисел с фиксированной точкой ………. 2.3.3. Представление чисел с плавающей точкой ……………

2.4. Задания на контрольную работу по системам счисления и

33346789

101112

13

13

14

1515

15

16

1616171718

Page 149: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

представлению чисел ……………………………………………... 3. Порядок подготовки и решения задач на ПК ……………………...

3.1. Постановка задачи ………………………………………………..3.2. Формализация задачи ….……………………………………….. 3.3. Выбор метода решения …………………………………………. 3.4. Подготовка алгоритма решения задачи .……………………...3.5. Запись алгоритма ..………………………………………………..3.6. Отладка программы ……………………………………………… 3.7. Решение задачи …………………………………………………...3.8. Несколько основных алгоритмов ……………………………… 3.9. Тесты ………………………………………………………………..

4. Операционные системы ……………………………………………… 4.1. Назначение операционных систем ………………………….....4.2. Идентификация файлов ………………………………………… 4.3. Файловая система ……………………………………………….. 4.4. Основные команды ………………………………………………. 4.5. Операционная система Windows ………………………………

4.5.1. Некоторая терминология ………………………………….. 4.5.2. Многооконная система …………………………………….. 4.5.3. Работа с файлами и папками ……………………………..

4.6. Задание на лабораторную работу по операционным системам…………………………………………………………….

5. Интегрированная среда разработчика и редактор этой среды ... 5.1. Главное меню среды Turbo …………………………………….. 5.2. Меню File – действия с файлами и выход …………………… 5.3. Меню Edit – редактирование файлов ………………………… 5.4. Обзор основных команд редактора ………………………....... 5.5. Меню Search – поиск и замена текста ………………………... 5.6. Меню Run и Compile – запуск программы на выполнение

или её компиляция ………………………………………………..5.7. Меню Window – работа с окнами ……………………………… 5.8. Меню Help – справочная служба ……………………………… 5.9. Задание на лабораторную работу по меню и редактору

среды Turbo ……………………………………………………….. 6. Схемы алгоритмов ……………………………………………………..

6.1. Циклический сдвиг элементов массива вправо …………….. 6.2. Циклические участки в вычислениях без массивов …………6.3. Сумма элементов массива чётных по значению и индексу . 6.4. Индексы последнего и первого отрицательного элемента в

массиве ……………………………………………………………. 6.5. Досрочный выход из цикла при накоплении суммы и фор-

мирование нового массива из всех элементов исходного …6.6. Формирование нового массива из части элементов исход-

2422222323232626272739323233353739394142

44464647494951

525354

5455555656

57

58

Page 150: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

ного………………………………………………………………….. 6.7. Задания на контрольную работу по схемам алгоритмов ….

ЛИТЕРАТУРА ………………………………………………………………

606762

МОДУЛЬ 2. АЛГОРИТМИЗАЦИЯ И ПРОГРАММИРОВАНИЕ……… 1. Запись алгоритма решения задачи на внешних алгоритмиче-

ских языках ………………………………………………………………1.1. Структура программы ………………………………………. 1.2. Символы и знаки операций …………………………………1.3. Константы ………………………………………………….…..1.4. Переменные ………………………………………………….. 1.5. Массивы ………………………………………………………..1.6. Указатели функций …………………………………………..

1.6.1. Математические функции …………………………………..1.6.2. Функции для работы со строками символов …………….

1.7. Выражения …………………………………………………….1.8. Контрольная работа по теме выражения …………….…. 1.9. Тесты ……………………………………………………….….

2. Операторное программирование ……………………………………2.1. Оператор присваивания …………………………………….2.2. Оператор вызова подпрограмм ……………………………2.3. Лабораторная работа «Линейные участки в

вычислениях»……………………………………………………… 2.4. Оператор перехода …………………………………………. 2.5. Составной оператор ………………………………………… 2.6. Условный оператор …………………………………………. 2.7. Оператор выбора ……………………………………………. 2.8. Многовариантные расчёты ………………………………… 2.9. Лабораторная работа «Описание разветвлений» ….…..2.10. Лабораторная работа «Строковые переменные» ……..2.11. Операторы цикла ……………………………………………. 2.12. Ввод и вывод из стандартных и внешних файлов ……. 2.13. Тесты …………………………………………………………..

3. Алгоритмы ……………………………………………………………… 3.1. Массив счётчиков, формируемый без проверок ………. 3.2. Удаление пробелов в строке символов …………………. 3.3. Удаление и вставка элемента в массив ………………….

4. Циклические участки в вычислениях и их запись в программе 4.1. Лабораторная работа «Одномерные массивы» ……….. 4.2. Лабораторная работа «Простые циклические

программы» ……………………………………………………….. 4.3. Документированный вывод …………………………………4.4. Лабораторная работа «Документированный вывод» ….

5. Вложенные циклы. Операторы break и continue ………………….

63 63 63 66 67 68 71 73 74 74 75 77 79 83 83 84 85 89 89 89 92 93 95 97 98 100106109109110111112112 117120121123

Page 151: АКАТНОВА ЛА - lib.madi.rulib.madi.ru/fel/fel1/fel07E011.pdfУДК 681.3.06 ББК 22.18 Акатнова Л.А. Информатика. Модуль 1, 2 – М.: ООО

6. Лабораторная работа «Матрицы» …………………………………..7. Алгоритмы ……………………………………………………………….

7.1. Работа с несколькими строками, значениями которых являются строки символов ……………………………………….

7.2. Алгоритмы сортировки ………………………………………7.3. Поиск одинаковых элементов в массиве ………………...7.4. Максимальное количество следующих подряд

одинаковых значений ……………………………………………. 7.5. Алгоритмы последовательного и двоичного поиска .…..7.6. Тесты …………………………………………………………...

ИТОГОВЫЕ ТЕСТЫ ……………………………………………………….ЛИТЕРАТУРА ………………………………………………………………

128133 133134137 138138141143146

АКАТНОВА Лима Александровна ИНФОРМАТИКА. Модуль 1, 2 Редакция авторская

Подписано в печать Формат 60х84/16 Печать офсетная Усл. печ.л. 9,38 Уч.-изд.л Тираж 400 экз. Заказ Цена договорная