Дидактическое пособие "Основы программирования на языке Pascal"
Оценка 4.9

Дидактическое пособие "Основы программирования на языке Pascal"

Оценка 4.9
Работа в классе +2
pdf
информатика
7 кл—9 кл
17.02.2020
Дидактическое пособие "Основы программирования на языке Pascal"
Данное учебное пособие предназначено для изучения курса алгоритмизации и программирования в 7 классах школ с углубленным изучением предметов физико-математического цикла. В нем последовательно излагаются вопросы, касающиеся понятий «информация», «данные», «алгоритм», «программа».
metodicheskoe_posobie_7.pdf

 

Основы программирования на языке Паскаль

для учащихся 7 класса

 

 

 

 

составитель         Волкова Е. И.

 

 

 

2004 г.

 

 

 

 

Содержание

 

                                                              Введение        3

Часть I

I. 1. Информация. Информационные процессы 4

I. 2. Содержательный подход к измерению

информации                                                6

I. 3. Алфавитный подход к измерению информации   8

I. 4. Единицы измерения информации        9

I. 5. Хранение информации в компьютере 10

I. 6.                                         Числа и системы счисления   11

I. 7. Системы счисления, где основания являются

степенями двойки                                      14

I. 8. Представление положительных чисел в памяти

компьютера                                                16

I. 9. Действия над числами в памяти компьютера       18

I. 10. Представление чисел в памяти компьютера с

учетом их знака                                          20

Часть II

II. 1. Системы программирования 22 II. 2. Система программирования Borland Pascal  24

II. 3. Структура программы на языке Паскаль.

Правила написания программы                 25

II. 4. Этапы решения задачи на компьютере      27

II. 5. Процедуры ввода и вывода данных   29

II. 6.                                           Оператор присваивания      32

II. 7. Форматированный вывод вещественных чисел   34

II. 8. Арифметические операции, функции и

выражения                                                  35

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

II. 10. Составные условия в условных операторах      41

II. 11.                                              Оператор выбора 43

II. 12.                                    Оператор цикла с параметром 45

II. 13.                                             Вложенные циклы 52

II. 14.                                   Операторы циклов с условиями         55

II. 15. Сравнительная характеристика циклов    61

II. 16.                                      Целочисленная арифметика   63

          

Литература                                                 69

 

 

Введение

   

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

Пособие состоит из двух частей.

  В первой части учебного пособия вы узнаете:

-  что такое информация;

-  как ее можно измерить;

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

   Во второй части содержатся ответы на вопросы:

-  для чего компьютеру программа; - где создают программы; - как создавать программу.

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

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

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

 - задание для выполнения дома;

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

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

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

 

 

 

 

 

 

 

 

Часть I

 

I. 1. Информация. Информационные процессы.

 

Как вы думаете, почему информатика называется информатикой? Давайте посмотрим вокруг себя, и ответим на вопрос: «С чем нам приходится иметь дело в повседневной жизни?».

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

Но это еще не все! Есть еще что-то, что побуждает лампочку гореть, двигатель работать и т.д. Это энергия: механическая, электрическая, атомная.

Но и это еще не все! Для чего вы смотрите в окно или на экран телевизора, листаете журнал или бродите по Интернету? Что вы хотите там добыть? Конечно же, вам нужна информация.  Так что же такое – информация?

 

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

 

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

 

Ø    Информатика – это наука, изучающая все аспекты получения, хранения, преобразования, передачи и использования

информации.

 

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

 

Ø    Виды информации: текстовая, графическая, числовая, звуковая и т.д.

 

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

глаза, уши, нос, кожа, язык. 

А зачем же нам информация, что нам с нею делать?

Итак, выделяют три действия с информацией, три информационных процесса:

 

1. Хранение 

 

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

 

2. Обработка 

 

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

 

3. Передача 

 

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

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

 

Ø    Источник информации – одушевленный или неодушевленный объект, обладающий информацией.  

 

Например, учитель, ведущий урок, или картина, висящая на стене. Сам источник является хранителем информации, т.е. осуществляет процесс хранения.

 

Ø    Приемник информации – это объект, получающий информацию.

 

Например, ученик, слушающий объяснения учителя. Получив информацию, ученик обдумывает ее, т.е. осуществляет процесс обработки информации.

 

Ø    Каналы передачи – это средства, с помощью которых информация поступает от источника к приемнику.

 

Например, речь учителя, телефонные провода, радиоволны и т.д.

 

Вопросы и задания

 Что такое информация для каждого из нас?

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

 Назовите основные действия с информацией.

§      Почему информацию, которую мы «помним наизусть», можно назвать оперативной? Приведите примеры оперативной информации, которой вы владеете.

§      Сравните оперативную и внешнюю информацию: в чем их достоинства и недостатки?

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

 Приведите три примера обработки информации?

   

I. 2. Содержательный подход к измерению информации. 

 

Мы отметили, что в мировой науке есть три объекта изучения:

вещество, энергия и информация. Вещество и энергия имеют определенные единицы измерения. А как измерить информацию? 

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

Например, я еду в автобусе. Передо мной стоят люди, а мне надо выходить. Я нахожусь в неопределенности: выходят они тоже или нет?

Задаю вопрос: - Вы выходите? 

Вариантов ответа может быть два: «Да» или «Нет». После того как прозвучит ответ, вариант останется один. То есть моя неопределенность в знании ответа уменьшилась в два раза. 

 

Сообщение, уменьшающее неопределенность знаний в два раза, несет 1 бит информации

 

Рассмотрим примеры:

 

1.      Ученик написал контрольную работу. После, он хочет обратиться к учителю за информацией об оценке. Чтобы узнать, сколько битов информации он получит, задав вопрос: «Что у меня за оценка?», постараемся составить вопросы, ответы на которые будут измеряться в 1 бит («Да», «Нет»). Например, вопросы: «У меня хорошая оценка?», «Это оценка 5?».Узнать оценку ученик сможет, задав два простых вопроса, следовательно, информация об оценке измеряется двумя битами информации.

 

2.      В библиотеке восемь полок. Ученику необходимо знать, на какой из полок лежит нужный ему учебник. Сколько битов информации он получит, задав вопрос библиотекарю: «На какой из полок лежит учебник?». Простые вопросы: «Книга лежит на одной из первых четырех полок?», «Книга лежит на первой или второй полке?», «Книга лежит на второй полке?». Аналогично, следует, что информация о полке, измеряется тремя битами. 

 

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

 

Итак, мы приходим к закономерности:

 

Кол-во вариантов (N)

Кол-во бит (i)

2

1

4

2

8

3

16

4

Итог: N=2i

 

Вопросы и задания:

 Что такое информация для человека?

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

 Какой из предложенных источников содержит на ваш взгляд ненулевую информацию для вас: книга на древнеиндийском языке; стихотворение «Уронили мишку на пол…»; свежая газета; учебник информатики для 7 класса.

 Какая наименьшая единица измерения информации вам известна?

 Что такое бит?

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

Сколько бит информации несет сообщение о том, что из колоды в 32 карты достали туз пик?

*     В корзине 4 шара: черный, белый, красный и зеленый. Сколько бит несет сообщение, что вынули белый шар? 

 Проводятся две лотереи: «1 из 32» и «1 из 64». Сообщение о результатах, какой из лотерей несет больше информации?

*     У лотерейщика одинаковые количества билетов с выигрышем по 5, по 10, по 50, по 100, по 200,  по 500, по 1000 руб. и без выигрыша. Сколько бит несет сообщение о том, что некто выиграл 1000 рублей?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I. 3. Алфавитный подход к измерению информации. 

 

 

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

Здесь используется другой подход – алфавитный.

Нужно посчитать количество символов в учебнике. Узнать, сколько битов информации содержит один символ. Умножить количество битов, приходящихся на один символ, на количество символов учебника. 

Обозначим:

I – информативность текста; K – количество символов в тексте; i – информативность символа.

I=K * i

Осталось посчитать количество информации, содержащееся в одном символе.

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

 

Полное число символов алфавита принято называть мощностью алфавита

 

Допустим, мощность равна 64.

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

Обозначим:

N – мощность алфавита; i – информативность символа.

N=2 i

В нашем примере информативность символа 6 бит. 

      В связи с устройством компьютера, наиболее достаточным является алфавит 256 символов.  В нем можно поместить практически все необходимые символы: латинские и русские буквы, цифры, знаки арифметических операций,  скобки, знаки препинания и символы псевдографики (значки для рисования рамок таблицы). Такой алфавит поддерживают текстовый редактор Блокнот, текстовые редакторы систем программирования алгоритмических языков Бейсика и Паскаля.  То есть для каждого символа 256 равновероятных вариантов. Применяя формулу N=2i , получаем, что один символ содержит 8 битов информации. 

Так как 8 бит имеют важную значимость в измерении информации, то ввели новую единицу измерения – байт. 

1 байт = 8 битов 

 

Вопросы и задания:

 Что такое алфавит? Что такое мощность алфавита?

 Как определяется количество информации в сообщении при алфавитном подходе?

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

 Два текста содержат одинаковое количество символов. Первый текст составлен в алфавите мощностью 32 символа, второй – мощностью 64 символа. Во сколько раз отличается количество информации в этих текстах?

 Что такое байт?

 

 

 

 

 

 

I. 4. Единицы измерения информации

 

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

1Кб=1024 байта= 210байта (Килобайт)

1Мб=1024 Кб=210Кб (Мегабайт)

1Гб=1024 Мб=210Мб (Гигабайт) 1Тб=1024 Гб=210Гб (Терабайт)

 

Задача: Книга содержит 150 страниц. На каждой странице по 40 строк по 60 символов в строке. Определить объем информации, содержащейся в книге, напечатанной в 256-и символьном алфавите.

Решение:

Сосчитаем количество символов в книге: К=150*40*60; К=360000; 

Известно,  что 1 символ занимает 1 байт:   i=1 байт;

Согласно формуле: I=K*i=360000 байт=351Кб 576 байт.  

 

Вопросы и задания:

 Что такое байт?

 Какие укрупненные единицы измерения информации вам известны и как они взаимосвязаны?

 Текстовый документ напечатан в 128–символьном алфавите и занимает 4 Кб. Сколько символов содержит текст?

 

 

 

 

 

 

 

I. 5. Хранение информации в компьютере

 

Теперь стоит поговорить о необходимости измерения информации. 

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

Внутренняя память                                                                       

 

 

Неделимой крупинкой компьютерной памяти является миниатюрный элемент, который может находиться в одном из двух состояний: Содержать электрический ток в пределах установленной нормы или ниже этой нормы. Первое состояние мы обозначим единицей, а второе – нулем. Согласуясь с формулой об измерении количества информации N=2 i , приходим к выводу, что информативность одного элемента равна 1 биту (2=2 1). Поэтому:

 

Ø    Мельчайший элемент памяти компьютера называют битом.

 

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

 

Внутренняя память компьютера разбивается на группы по 8 битов – байты. Байты пронумерованы. Нумерация начинается с нуля. 

 

Ø    Порядковый номер байта называется его адресом.

 

Вопросы и задания:

 Как устроена компьютерная память?

 Что представляет собой информация в памяти компьютера?  2400 Мб выразите во всех известных единицах измерения информации.

 Какой информационный объем текста, содержащего слово

ИНФОРМАТИКА?

 Во сколько раз уменьшится информационный объем страницы текста при преобразовании его из кодировки Unicode (65536 различных символов) в кодировку Windows CP-1251 (256 различных символов)?

 

 

 

 

 

 

I. 6. Числа и системы счисления

 

Ø    Система счисления – это способ изображения чисел и соответствующие ему правила действий над числами.

 

Различают два вида систем счисления:

 

Системы счисления

Позиционные Пример: Арабская 242

Непозиционные

Пример: Римская CCXLII

 

   Разница в системах следующая: в примере числа арабской системы счисления, цифра 2, стоящая на первом месте, означает количество сотен (т.е. число 200). А цифра 2, стоящая на последнем месте – количество единиц. В примере числа из римской системы, где бы ни стояла цифра Х, она все равно означает 10.  

 

Ø    В непозиционных системах счисления от позиции цифры в числе не зависит величина, которую она обозначает.

 

Ø    В позиционных системах счисления от позиции цифры в числе зависит величина, которую она обозначает.

 

Позиционных систем счисления много. 

Известный русский математик Н. Лузин сказал: «Преимущества десятичной системы не математические, а зоологические. Если бы у нас на руках было не 10 пальцев, а 8, то человечество пользовалось бы восьмеричной системой».

 

Ø    Количество используемых цифр в позиционной системе счисления называется основанием, а сами цифры - алфавитом

 

Например:

Система

Основание

Алфавит

Пример

Двоичная

2

0 1

101002

Восьмеричная

8

0 1 2 3 4 5 6 7

6548

Десятичная

10

0 1 2 3 4 5 6 7 8 9

28610

Шестнадцатеричная

16

0 1 2 3 4 5 6 7 8 9 А В С D E F 

                                                 (10)(11)(12)(13)(14)(15)

A2F16

 

Два – это наименьшее основание системы.

Если допустить, что основание системы равно 1, то количество цифр в системе счисления было бы равно 1. То есть мощность алфавита была бы равна 1. Мы уже убедились, что любое сообщение, написанное в алфавите мощности 1, будет нести нулевую информацию. 

 

Ø    Основание системы счисления – любое натуральное число, большее единицы.

 

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

 

Алгоритм перевода чисел в систему с новым основанием:

1.      Делим число на основание новой системы счисления, записывая остаток – младший разряд числа в новой системе.

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

3.      И так до тех пор, пока последнее частное не станет меньше основания – старший разряд числа.

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

 

 

Ответ:11111102

 

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

Например: 24510=200+40+5=2*100+4*10+5=2*102+4*101+5*100 !  Не забывайте понятие степени числа:

 an=a*a*a*..a  , a0=1.  

                            n раз

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

 

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

 

Например: 2231106=2*62+3*61+1*60=72+18+1=9110

 

Алгоритм перевода чисел в десятичную систему:

1.      Нумеруем цифры числа справа налево, начиная с 0;

2.      Составляем сумму произведений цифр, на степени основания системы соответствующие номерам; 

3.      Выполняем арифметические операции.

 

Осуществим перевод: А216          Х10

А12016=10*161+2*160=160+2=16210

 

Чтобы перевести из системы с одним основанием в систему с другим основанием, если оба основания отличны от 10, нужно: перевести данное число в десятичную систему, а затем перевести в новую систему.

Например: 579      Х3.     

          

  51709=5*9+7=5210

 

 

Ответ: 12213

 

Вопросы и задания:

 Дайте определение понятию "система счисления"?

 Какие виды систем счисления вы знаете?

 Чем отличается позиционная система от непозиционной системы?

 Чем отличаются позиционные системы?

 Что такое основание?

 Какое оно может быть?

 Что называется алфавитом системы счисления?

 Каковы правила перевода из одной системы в другую?

 Верно, ли записаны числа: А216, 356, 198, 323, Е313, 0Е316? Если неверно, то почему?

 Осуществить перевод: 789                Х5, 1278                Х4, 4568         Х3

Решите уравнение: 1013+2374= 3035

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I. 7. Системы счисления, где основания являются 

степенями двойки

 

Существуют простые способы перевода между системами, основания которых являются степенями двойки. Вспомним формулу  измерения количества информации: N- алфавит системы счисления; i – количество бит, приходящееся на один символ.  N=2i 

Исходя из этой формулы, в двоичной системе каждый символ несет один бит информации, а, например, в восьмеричной системе 3 бита (N=8=23, следовательно, на каждый символ приходится три бита информации) и т.д.

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

 

Осуществим перевод: 658      Х2 по обычным правилам.

658=6*8+5=53

53:2=26(ост. 1)

26:2=13(ост. 0)

13:2=6(ост. 1)

6:2=3(ост. 0)

3:2=1(ост. 1) Ответ: 1101012

А теперь переведем цифры восьмеричного числа по отдельности как десятичные числа в двоичную систему счисления.

6:2=3(ост. 0)    5:2=2(ост. 1) 3:2=1(ост. 1)     2:2=1(ост. 0) 

1102                     1012

 Объединив результаты, получаем тот же ответ.

 

i

Алгоритм перевода чисел из системы с основанием 2 в двоичную систему счисления: 

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

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

3.      Объединяем переводы в одно число. Приписываем индекс 2.

 

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

i :  с основанием 2

1.    Разбиваем число, начиная с конца по i символов. В случае недостающих битов, дописываем незначащие нули;

2.    Переводим по отдельности группы в десятичную систему; 3. Объединяем переводы в одно число. Приписываем индекс системы.

Осуществим перевод: 1110001002      Х8.

                                       7     0      6

Ответ:7068.

 

 

Вопросы и задания:

 Как взаимосвязаны системы с основаниями, являющимися степенями двойки?

 Каков алгоритм перевода чисел из системы с основанием 2i в двоичную систему счисления? 

 Каков алгоритм перевода чисел из двоичной системы счисления в систему с основанием 2i ?

 Осуществите перевод: 328      Х2 .

§    Осуществите перевод: Е216        Х2

§    Осуществите перевод: 1100001011102      Х16 .

 Осуществите перевод: А316        Х2  Осуществите перевод: 1101011102      Х8 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I. 8. Представление положительных чисел в памяти

компьютера

 

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

Нам уже известно, что в памяти компьютера вся информация представлена в двоичном коде, т. е. в виде 0 и 1. Мы с вами отметили, что компьютерная память состоит из миниатюрных элементов – битов, каждый из которых может находиться в одном из двух состояний. Бит может содержать электрический ток, соответствующий норме (1), а может содержать электрический ток ниже допустимой нормы (0).  Много ли различных чисел можно закодировать в одном бите информации? Всего два: 0 и 1. Поэтому биты объединяются в группы – байты.

 

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

 

Минимальное неотрицательное число, которое можно закодировать в одном байте 0.

 

7 6 5 4 3 2 1 0

0

 0

0

0

0

0

0

0

 

Максимальное неотрицательное число, которое можно закодировать в одном байте 255. 

 

7 6 5 4 3 2 1 0

1

 1

1

1

1

1

1

1

=27+26+25+24+23+22+21+20=128+64+32+16+8+4+2+1=255

 

Ø    Вывод: В одном байте можно закодировать числа от 0 до 255.

 

Но этого мало. Как же быть с остальными числами? Решили смежные байты объединить по два или по четыре. 

 

Ø    Два (четыре) смежных байта называются двухбайтовым (четырехбайтовым) машинным словом. 

 

Минимальное неотрицательное число, которое можно закодировать в одном двухбайтовом слове 0.

 

15     14     13     12      11     10       9        8        7        6        5       4              3             2             1             0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

0

 

Максимальное неотрицательное число, которое можно закодировать в одном двухбайтовом слове 65535. 

 

15     14     13     12      11     10       9        8        7        6        5       4              3             2             1             0

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

1

=65535

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

1.      Перевести число в двоичную систему;

2.      Дополнить незначащими нулями до байта (или слова).

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

1. Перевести число в десятичную систему.

 

Вопросы и задания:

 Как представлены числа в компьютере? От чего это зависит?

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

 Что такое машинное слово?

 Какое минимальное неотрицательное число можно закодировать в одном байте (слове) и какое максимальное? 

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

 Закодируйте числа: 23, 129, 315, 3275.

 Декодируйте числа: 11110000, 00110011, 1111100000011111.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I. 9. Действия над неотрицательными числами в памяти компьютера

     

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

Рассмотрим основные операции: сложение и вычитание. Компьютер – это машина, поэтому подчиняется строгим законам:

 

Ø    результат сложения или вычитания чисел должен занимать в памяти компьютера целое количество байтов (1, 2 или 4);

 

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

 

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

 

Правила двоичной арифметики:

0+0=0   

0+1=1  

1+0=1    

1+1=10 (0 пишу, 1 переношу в следующий разряд)

0-0=0   

0-1=1 (такой результат возможен только тогда, когда есть возможность занять из старших разрядов)  1-0=1    

1-1=0 

Например:

01000111

10001101

11010100

 

1110001110 010011

1100001110 001101

0010000000 000110

 

                         10111000

 

                      +             11110000               0000000110101000

 

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

 

 

Вопросы и задания:

Назови три основных правила сложения и вычитания чисел.

Каковы правила двоичной арифметики?

Сложи коды чисел: 11100011 и 00010101.

Сложи коды чисел: 11001111 и 11100001.  0000001110001111 и 0000110001010011.

Выполни вычитание: 11100011 – 00011101. Выполни вычитание: 10001110 – 00011000.

   Выполни вычитание: 0000011110000011 – 0000000001111001.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

I. 10. Представление чисел в памяти компьютера с учетом

их знака

   Возникает вопрос: «Как быть с отрицательными числами? Как закодировать знак минус перед числом?». Решили обмануть компьютер.

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

7 6 5 4 3 2 1 0

 

 

 

 

 

 

 

 

 

                           Знак числа: если 0, то «+», если 1, то «-»

 

10011011 – отрицательное, 01110011 – положительное.

 

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

1.      Переводим в двоичную систему модуль числа;

2.      Дополняем до байта (слова);

3.      Инвертируем (единицы заменяем нулями, а нули единицами); 4. Прибавляем единицу  по правилам двоичной арифметики. 

 

Например, закодируем –126 в одном байте.

1)  Переведем модуль:          Получили 1111110.

2)  Дополним до байта: 01111110. 3) Инвертируем: 10000001 4) Прибавим 1: 

                                                                   10000001

                                                              +                 1

                                                                   10000010

             

                                Ответ: 10000010.

 

Если рассмотреть коды чисел с учетом их знака, то у неотрицательных чисел старший бит равен 0. Декодировать такие числа мы уже умеем. У отрицательных чисел старший бит равен 1.

 

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

1.      Инвертируем число (меняем единицы на нули, а нули на единицы);

2.      Прибавляем единицу;

3.      Переводим в десятичную систему;

4.      Перед результатом ставим знак минус.

Например. Декодировать число 10011011. 

1

01100101

=64+32+4+1=10110                                 Ответ: -101. 

Рассмотрим число 10000011. Если предположить, что при кодировке числа знак не учитывали, то есть, следовали правилам кодирования неотрицательных чисел, то при декодировании получим число131. 

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

 

 

Числа представлены без учета знака

Числа представлены с учетом знака

Коды слагаемых

10000011 + 01111101

10000011 + 01111101

Десятичная форма

131+125

-125 + 125

Результат

256

0

Код результата

0000000100000000

00000000

Пояснение

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

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

Девятый бит не учитываем.

Вопросы и задания:

 Как кодируются отрицательные числа?

 Как декодировать отрицательное число?

 Даны числа в двоичной кодировке с учетом знака:11000010,

01111110, 00001111, 11111100. Каков их знак? Какие это числа?  Закодируйте число 45 в одном байте и слове с учетом знака. 

 Закодируйте число –115 и убедитесь в правильности перевода, декодировав результат.

 Сложите два числа: 11100100 и 01011001 по правилам двоичной арифметики с учетом и без учета знака. Убедитесь в правильности (для этого декодируйте слагаемые и сумму).

§   Докажите, что с учетом знака в одном байте можно представить любое число из диапазона -128 до 127.

 Докажите, что с учетом знака в одном двухбайтовом слове можно представить любое число из диапазона –32768 до 32767.

 Переведите числа 110 и –110 в двоичный код и убедитесь, что при сложении этих чисел получится 0.

§   Закодируйте числа -76 и -109 в одном байте с учетом знака. Выполните их сложение. Декодируйте результат и убедитесь в правильности перевода.

 

 

 

 

 

Часть II

 

II. 1. Системы программирования 

 

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

 

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

 

Ø      Компьютер является исполнителем.  

 

Ø      Программа – алгоритм, записанный на языке исполнителя. 

 

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

 

Ø      Программа – это указание на последовательность действий (команд), которую должен выполнить компьютер, чтобы решить поставленную задачу обработки информации.

 

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

 

Ø      У компьютера своя система команд – машинных команд.

Машинные команды представлены в виде двоичных кодов.  

 

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

Однако эта программа становится непонятной компьютеру, ведь он «говорит» только на машинном языке. Тогда программисты придумали специальные пакеты программ, которые могли переводить компьютеру программу с языка высокого уровня, на понятный ему машинный язык.

 

Ø      Системы программирования позволяют писать и исполнять на ЭВМ программы, написанные на языках высокого уровня.

 

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

 

Ø      Система программирования – это исполнитель программ на соответствующем ей языке. 

 

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

 

 Программа на языке программирования                            Система программирования               Программа на языке понятном компьютеру

 (пишет программист)                 (трансляция)                          (языке машинных команд)

 

Существует два типа трансляторов: компилятор и интерпретатор.

 

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

Вопросы и задания:

 Что такое программа?

 Как называется язык, который понимает компьютер?

 Для чего придумали языки программирования высокого уровня?

 Что такое система программирования и, каково ее предназначение?

 Как называются программы-переводчики на язык машинных команд?  Охарактеризуйте типы трансляторов.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 2.  Система программирования Borland Pascal

 

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

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

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

Запуск программы на исполнение: Run (Ctrl+F9).

Возврат в программу:  Alt+F5.

Выход из программы: Alt+X.

Язык Паскаль был разработан в 1971 году швейцарским ученым Никлаусом Виртом. По замыслу авторов, это не сложный язык, легко изучаемый, предназначенный для программирования задач обработки информации.

 

Алфавит языка Паскаль:

1.      Буквы латинского алфавита (большие и малые система не различает);

2.      Символ подчеркивания « _»;

3.      Цифры от 0 до 9; 4. Специальные символы: 

+

-

/

*

<

>

=

@

#

$

^

()

[]

{}

;

:

,

.

5.      Некоторые комбинации специальных символов  :=, <=, >=, <>, ..  и т.п. 

6.      Служебные слова (с ними мы будем знакомиться постепенно). Буквы русского алфавита мы пока будем использовать только в комментариях.

Из символов алфавита строится вся программа на языке Паскаль.

 

Вопросы и задания:

 Что представляет собой среда BorlandPascal?

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

 Кем и когда был разработан язык Паскаль?

 Из чего состоит алфавит языка Паскаль?  Из чего строится программа на языке Паскаль?

 

 

 

 

 

 

 

 

 

 

II. 3. Структура программы на языке Паскаль. Правила

написания программы 

 

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

Структура программы на языке Паскаль:

 Uses <раздел описания модулей>;

Описательная Label <раздел описания меток>; часть Const < раздел описания констант>;

 Type <раздел описания типов>;

 Var <раздел описания переменных>;

 Procedure <раздел описания процедур>;

 Function <раздел описания функций>;

 Begin

Исполнительная <тело программы, состоящее из

часть операторов>;

End.

 

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

 

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

 

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

 

Раздел описания переменных Var

 

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

 

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

 

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

 

Формат <имя>:<тип>;

Например:

Var a: integer; b,с: real;

 

Ø    Имя переменной называется идентификатором переменной.

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

2.      Начинаться идентификатор может только с буквы.

3.      Идентификатор не может совпадать со служебными словами.

Тип переменной означает:

1. Способ представления ее значений в памяти компьютера; 2. Диапазон значений, которые она может принимать;

3. Операции, которые можно с ней выполнять.

 

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

 

Целочисленные типы (целые величины)

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

Размер памяти

Способ представления

Название

0..255

1 байт

Без учета знака

Byte

0..65535

2 байта

Без учета знака

Word

-128..127

1 байт

С учетом знака

Shortint

-32768..32767

2 байта

С учетом знака

Integer

-231..231-1

4 байта

С учетом знака

Longint

Вещественные типы (целые и дробные величины)

-

6 байтов

-

Real

 

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

 

Отдельная команда языка называется оператором.

 

Исполнительная часть заключается в операторные скобки: Begin и End.

! После каждого оператора или указания типа в разделе Var ставится “;”.

 

Вопросы и задания:

 Какова структура программы на языке Паскаль?

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

 Для чего нужен раздел Var? 

 Что такое переменная?

 Как происходит описание переменной?

 Что такое идентификатор? Каковы правила написания идентификаторов?

 Что подразумевает понятие типа переменной.

 Из чего состоит исполнительная часть программы?

 Как называется отдельная команда на языке программирования?

 Как отделить один оператор от другого?  Что такое операторные скобки?

 

 


II. 4. Этапы решения задачи на компьютере

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

 

Первый этап – работа с условием задачи. Читая задачу, необходимо ответить на три вопроса:

1.      Что дано в задаче? – исходные данные (два числа);

2.      Что требуется найти? – ожидаемый результат (сумма чисел);

3.      Как это сделать? – как бы вы решали эту задачу без помощи компьютера (сложить числа).  

 

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

 

Третий этап – алгоритмизация задачи. Строим алгоритм решения задачи в графической (блок-схема) или в текстовой форме.

Например:

1.      ввести данные;

2.      вычислить по формуле сумму;

3.      вывести значение суммы на экран.

 

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

1.      однозначность - чтобы исполнитель мог правильно истолковать (умел сложить два числа по формуле);

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

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

4.      правильность – способность получить правильный результат.

 

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

1.      ввести данные для обработки;

2.      указать, как их обработать;

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

1.      как ввести данные в память (ввод);

2.      как указать правильные команды для обработки данных (операторы);

3.      как передать обратно данные из программы на экран (вывод).

 

Пятый этап – ввод программы и исходных данных в компьютер. Печать программы в текстовом редакторе системы программирования.

 

Шестой этап – тестирование. При запуске на выполнение к работе приступает компилятор системы программирования. Если в написании программы допущены ошибки, то он сообщит об этом.

 

Седьмой этап – отладка программы. Проверяем работу программы на

контрольных примерах. Программа не верна, если  3 5 8 .                                                                         

 

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

 

Вопросы и задания:

 Перечислите основные этапы решения задач на ЭВМ. Поясните, какие действия выполняет разработчик программы на каждом этапе.  Что такое алгоритм, и каким свойствам он должен удовлетворять? Приведите пример словесного описания алгоритма и покажите, что он обладает указанными свойствами.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 5.  Процедуры ввода и вывода данных

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

 

Ø    Именованная ячейка памяти компьютера называется переменной.

 

Все переменные необходимо перечислить в разделе описания переменных (Var). О размерах ячеек будут свидетельствовать типы данных, о которых речь шла выше. Чтобы переменные получили свои значения необходимо ввести эти значения в память компьютера.

 

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

 

Это команда компьютеру – «читать» данные с клавиатуры и сохранять их в своей памяти под именами соответствующих переменных.

 

Формат: read(«список переменных»); 

Механизм работы процедуры таков:

1.                  Ввожу одно данное;

2.                  Нажимаю Enter;

3.                  Данное помещается в ту переменную, которая была в списке первой;

4.                  Ввожу следующее данное;

5.                  Нажимаю Enter;

6.                  Данное помещается в следующую по списку переменную; 7. И т. д.

 

! Запомните: при вводе данных необходимо учитывать тип, предназначенных для них переменных. 

Например:

Var a,b:integer; с,e:real; 

Begin Read(a,b,c,е);  End.

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

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

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

 

Для вывода на экран используется процедура вывода

 

Формат: write(«список вывода»); 

                                 или

                writeln(«список вывода»); 

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

1.      текст, заключив его в апострофы;

2.      числа;

3.      значения переменных;

4.      значения небольших арифметических выражений.

 

! Запомните: каждый отдельный элемент в списке вывода отделяется запятой.

Например:

Var a,b:integer; с,e:byte; 

Begin

Writeln(‘введите два целых и два вещественных числа’);

Read(a,b,c,е); 

Writeln(a,’и’,b,‘-целые числа’);

Writeln(5.8,’и’,-5.3,‘-вещественные числа’); Write(c+e,’сумма вещественных чисел’); End.

 

!Запомните: Чтобы написать программу нужно:

1.                  Внимательно прочитать задачу;

2.                  Определить исходные данные и дать им идентификаторы;

3.                  Определиться с идентификаторами результатов;

4.                  Определить типы переменных, в которых будут храниться данные и результаты;

5.                  Оформить описательную часть;

6.                  Оформить исполнительную часть по следующей схеме: Begin

<ввод данных>;

<обработка данных>; <вывод результатов>; End. Возможно, что какой-то из пунктов схемы будет отсутствовать.

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

 

Задача: Получить на экране следующее: 

 

а

 

 

а

а

 

 

а

 

 

а

 

а

а

а

О

 к

 т

я

б

 р

 я

а – цифра от 0 до 9.

Итак, из текста задачи следует:

Дано: а - переменная целого типа. Например: integer.

Решение:

В результате надо вывести 5 строк, для этого следует 5 раз применить процедуру writeln. Чтобы соблюсти расстояние между цифрами, будем разделять их пробелами. Пробел – это символ текста, следовательно, должен быть заключен в апострофы, равно как и текст “Октября”.  Var a:integer;

Begin

Writeln(‘Введите цифру от 0 до 9‘);

Readln(a); Writeln(‘ ‘,a);

Writeln(a,a);

Writeln(‘ ‘,a);

Writeln(‘ ‘,a);

Writeln(a,a,a,’Октября’); End.

Задача: Найти сумму и произведение двух целых чисел.

Дано: a,b-целые числа.

Найти: a+b , a*b-целые результаты.

Var a,b,s,p:integer;

Begin

Writeln(‘Введите два целых числа’);

Readln(a,b);

Writeln(a+b,’-сумма чисел’);

Write(a*b,’произведение чисел’); End.

Вопросы и задания:

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

 Что необходимо помнить при работе с процедурой ввода?

 Для чего нужна процедура?

 Что необходимо помнить при работе с процедурой вывода?

 О чем свидетельствует окончание „-ln‟ после имени процедуры вывода?

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

0

0

0

0

0

0

0

А

А

А

А

0

0

А

Х

Х

А

0

0

А

Х

Х

А

0

0

А

А

А

А

0

0

0

0

0

0

0

,где 0 –  неизменная цифра, Х – переменная целого типа, а А – символ латинского алфавита (комментарий).

 Даны целые числа a, b, c. Найти их произведение, сумму и среднее арифметическое.

 

 

 

 

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

 

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

 

Формат: 

 

<переменная>:=<значение>;

 

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

 

! Запомните: 

ü    если переменной не было присвоено значение, то она считается равной нулю;

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

Таблица совместимости типов

Тип переменной

Тип присваиваемого значения

real

Real, longint, integer, word, sortint, byte

longint

Longint, integer, word, sortint, byte

integer

integer,  sortint, byte

word

word, byte

shortint

sortint

byte

byte

 

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

 

Задача: Даны целые числа a и b. Найти их удвоенную сумму.

 

Дано: a и b-целые числа(integer)

Найти: u-удвоенную сумму(сумма целых чисел s- целое число, удвоенное целое – целое число integer)

Var a,b,s,u:integer;

Begin

Writeln(’Введите два целых числа’);

Read(a,b);

S:=a+b;

U:=2*s;

Write(u,’-удвоенная сумма чисел’); End.

 

Вопросы и задания:

 При работе, каких операторов происходит присвоение значения переменной?

 Каков формат оператора присваивания?

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

 Даны стороны прямоугольника. Найти его периметр и площадь.

 Дана длина стороны правильного n-угольника. Найти его периметр.

§   Дан круг радиуса R. Найти длину окружности.

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

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 7. Форматированный вывод вещественных чисел 

 

Задача: Даны целые числа a и b. Найти половину их среднего арифметического.

 

Дано: a и b-целые числа(integer)

Найти: pl-половину среднего арифметического

Решение: Среднее арифметическое – это сумма чисел деленная на их количество. Сумма целых чисел - целое число(ineger). Если сумму разделить на количество, то в результате может получиться нецелое число (real).

Половина вещественного числа – число вещественное(real).

Var a,b,s:integer; ar,pl:real;

Begin

Writeln(’Введите два целых числа’);

Readln(a,b); S:=a+b; ar:=s/2; pl:=ar/2;

Writeln(pl,’-половина среднего арифметического чисел’); End. Если запустить программу на выполнение, результат будет не нагляден.

По умолчанию, вещественное число выводится на экран в формате: <мантисса>E<порядок>.  

На экран выводится 18 символов: 

положительные числа

отрицательные числа

__#.##########E@##

_-#,##########E@##

, где # - означает цифру, а @ - знак (+ или -).

До точки должна быть одна значащая цифра, большая 0.

Например:

__6.5000000000Е+04 означает 6.5Е+4, т.е. 6,5*104=65000. _-5.0000000000Е-03 означает –5Е-3, т.е. –5*10-3= -0.005.

Такую форму еще называют форматом вещественного числа с плавающей точкой.  Эта сложная картина связана с представлением вещественных чисел в памяти машины.  

  Чтобы вывод вещественного числа на экран был нагляден, его надо упорядочить, указав вначале необходимое количество символов, отводимых под все число, а, затем, необходимое количество символов отводимое под дробную часть, т.е.: Write(pl:4:2).

 

Вопросы и задания:

 Как форматировать вывод вещественного числа на экран? Для чего это нужно?

§    Представить в вещественном виде числа: –7.88*10-9;    –5.667;    599. 6699.

 Представить в вещественном виде числа: –0.008*10-9;    5000.667;  3000.0  

§    Дано представление вещественных чисел –6Е4;   4.345Е-5. Что это за числа?

 Дано представление вещественных чисел 9Е-5;   -6.48Е3. Что это за числа?

 Даны числа a, b, c, d найти значение выражения (a-b)*c/d.

II. 8. Арифметические операции, функции и выражения 

 

Оператор присваивания часто применяют для вычисления более сложных арифметических выражений.

 

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

 

В среде BorlandPascal выполнимы следующие арифметические операции:  +, -, *, /, div (деление нацело: 26 div 7=3), mod (деление с остатком: 26 mod 7=5).

Если эти операции выполняются над целыми числами, то результатом будет целое число (! Исключение составляет операция / - результат, при выполнении этой операции- вещественное число real).            Операции div и mod выполнимы только с целыми числами.

 

В среде BorlandPascal выполнимы следующие арифметические функции: 

Abs(x)-модуль числа х,  sqr(x)- квадрат числа х,  tranc(x)- целая часть числа х,  round(x)- округление числа х до целого.

 

Правила записи арифметических выражений:

1.      Выражение записывается в строчку без пробелов и переносов.

2.      Не допускается следование двух знаков подряд.

3.      Выражения в скобках выполняются в первую очередь.

4.      Операции выполняются в порядке приоритета:

-                     функция

-                     *, /, div, mod -            +, -.

 

Например: выражение  на языке Паскаль запишется так:

Sqr(abs(a+b*b*b)/c)+c/(a*b)

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

 

Задача: Написать математическую формулу, соответствующую выражению на Паскале: (p+q)/(r+s)-p*q/(r*s).

Решение:  .

 

Задача: Вычислить в уме значение выражения: 

5*3-8 mod 3*5-6*(15 div 4 mod 2)

             1   7      2       3   8   6          4         5 Решение: Расставим действия: 5*3-8 mod 3*5-6*(15 div 4 mod 2) Выполним действия: 15-2*5-6*1= -1.

 

Задача: Дано целое шестизначное число. Найти произведение его цифр.

 

Дано: х – целое шестизначное число. Раз число шестизначное, то оно больше 32767 и 65536. Следовательно, тип переменной longint.

Найти: p – произведение цифр числа - integer.

Решение:

  Чтобы найти произведение цифр, надо знать сами цифры (х1, х2, х3, х4, х5, х6 - integer). Проще всего найти последнюю цифру числа.

 

! Последняя цифра в любом числе является остатком от деления числа на

10.

 

Например: 453287 mod 10=7

Чтобы найти предпоследнюю цифру, проще сделать ее последней, разделив число на 10 нацело.

453287 div 10=45328. Теперь, с помощью операции деления с остатком, найдем предпоследнюю цифру. И так далее, пока цифры не кончатся.

Напишем программу:

Var  x:longint; x1, x2, x3, x4, x5, х6,p:integer; Begin

Writeln(‘введите шестизначное число’);

Read(x); x6:=x mod 10; x:=x div 10; x5:=x mod 10; x:=x div 10; x4:=x mod 10; x:=x div 10; x3:=x mod 10; x:=x div 10; x2:=x mod 10; x:=x div 10; x1:=x mod 10; p:=x1*x2*x3*x4*x5*x6;  write(p,’-произведение цифр числа’); End.

 

Вопросы и задания:

 

Первый блок

 Каков формат оператора присваивания?

 Что такое арифметическое выражение? Каковы правила его записи?

 Какие арифметические операции выполнимы в среде BorlandPascal?

 Как зависят типы результатов операций от типов величин, над которыми операции производят?

 Какие арифметические функции выполнимые в среде BorlandPascal вам известны?

 Как зависят типы значений арифметических функций от типов их аргументов?

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

3 a a2 a3 3 a b c 4;                        105 2 k3 4

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

     1E3+beta/(x-gamma*delta);                            a/b*(c+d)-(a-b)/b/c+1E-8.  Вычислить значение выражения 3*7 div 2 mod 7/3- trunc(sgr(5.2))

§    Если у – вещественная переменная, а n – целая, то какие из операторов присваивания правильные:

                                                Y:=n+1                                                             Y:=y div 2

                                                Y:=n div 2                                                        N:=4.0

                                                N:=y-1                                                              Y:=trunc(y)

 Задание: Запишите программу, вычисляющую значение арифметического выражения:

х2 5х 2                              4

x .

8x

 Дано вещественное число х. Вычислить х(5х+6)2-10.

§    Дано вещественное число. Какова его дробная часть?

 

Второй блок

§    Дано 3-значное число. Найти сумму его цифр.

 Дано пятизначное число.  Посчитать сумму и среднее арифметическое его цифр.

§    Дан рост человека в миллиметрах. Выразить его в метрах, сантиметрах и миллиметрах. Например: 1853 мм=1 м  85 см 3 мм

 С начала суток прошло х секунд. Сколько часов, минут и секунд показывают часы?

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

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

 

   Очень часто отдельные этапы вычислений выполняются в зависимости от условий (не всегда последовательно).

Задача: Даны два числа. Найти из них максимальное число.

Чтобы найти максимальное число из двух, необходимо их сравнить, то есть проверить условие «какое из чисел больше».

Для проверки условий на Паскале существует оператор, который называется условным оператором или оператором ветвления.

Формат:

If <условие>then begin 

                            <операторы1>                                end                        else begin

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

Механизм работы оператора:

1.      Выполняется проверка условия на истинность;

2.      Если получено значение true (истина), то выполняется серия команд по ветке then. Если получено значение false (ложь), то выполняется серия команд по ветке else;

3.      Выполняется команда, следующая после условного оператора.

 

Особенности написания оператора:

 

1.      Перед else « ; » не ставится;

 

2.      Если по веткам then или else следует один оператор, то операторные скобки (begin .. end) можно не писать:

If <условие>then           

                 <оператор1>  else begin

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

         end;

 

If <условие>then    

                              begin 

             <операторы1>                                  end                        else 

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

 

If <условие>then 

                 <оператор1>                        else 

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

 

 

Запишем решение выше предложенной задачи.

Дано: х, у – два целых числа (integer);

Найти: max – максимальное число из х и у (integer).

Решение:

Var x,y,max: integer;

Begin

Writeln(‘введите два целых числа’);

Read (x,y);

 If x>y then max:=x else max:=y;

Writeln(max,'-максимальное'); End. 

 

3. Если в случае невыполнения условия ничего делать не надо, то существует краткая форма условного оператора:

If <условие>then begin 

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

                       

 

 

Пример1. Дан возраст человека. Если возраст меньше 2, то вывести сообщение «В садик еще рано!».

Дано: х – возраст человека (real); Результат: сообщение или пустой экран.

Решение:

Var x: real;

Begin

Writeln(‘введите возраст человека’); Read (x);

 If x<2 then write ('В садик еще рано!'); End. 

 

Пример2. Найти максимальное из трех чисел.  Дано: х, у,z – три целых числа (integer); Найти: max – максимальное из х, у и z(integer).

Решение:

Var x,y,z,max: integer;

Begin

Writeln(‘введите три целых числа’);

Read (x,y,z);

 If x>y then max:=x else max:=y;

 If z>max then max:=z; Writeln(max,'-максимальное'); End. 

 

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

Пример. Найти максимальное из трех чисел. 

 

Дано: х, у,z – три целых числа (integer); Найти: max – максимальное из х, у и z(integer).

Решение:

Var x,y,z,max: integer;

Begin

Writeln(‘введите три целых числа’);

Read (x,y,z);

 If x>y then if x>z then max:=x else max:=z             else if y>z then max:=y else max:=z;

 Writeln(max,'-максимальное'); End. 

Вопросы и задания:

Первый блок  Назовите назначение, формы записи и механизм выполнения условного оператора.  Даны сторона квадрата и радиус окружности. Верно-ли что круг вписан в квадрат?

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

 Лодка выдержит на плову 250 кг. Кирпич весит 1450 г. Выдержит ли лодка х кирпичей. Посчитайте максимальное количество кирпичей, выдерживаемое лодкой.

§      Даны 2 числа. Если их сумма больше 10, то вывести на экран их удвоенное произведение, а иначе большее из чисел заменить их суммой, а меньшее разностью.

Дан автобусный билет. Определить, счастливый ли он.

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

Второй блок

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

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

Дано число n. Вывести ответ, каким будет значение выражения  (a+2)2-24 (отрицательным, положительным, нулем). 

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

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

 

*  Вычислить значение функции  

                                              5,если0 x 3;

                  y                           ,в противномслучае

 

*  Дано трехзначное число. Расставить его цифры в порядке возрастания.

 

 

 

 

 

 

 

 

 

 

 

II. 10. Составные условия в условном операторе

Условие оператора if может быть составным. В составном условии используются логические операции and («и»), or («или»), not («не») и части условия берутся в алгебраические скобки. 

При проверке условия операции отношения (<, >, =, <=,  >=, <>) и логические операции получают результаты false или true. 

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

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

X

Y

Not X

X and Y

X or Y

T

T

F

T

T

T

F

F

F

T

F

T

T

F

T

F

F

T

F

F

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

 

Пример. Определить результат выполнения программы:

Var a, b, c:integer;

Begin

 Read(a,b,c);

If ((a mod 2=0) or (a mod 3=0)) and (not(b>c) and (a>b)) then write(a) else write(b); End.

Введены числа: 10, 2 и 6. В нашем примере:  a mod 2=0 true a mod 3=0 false b>c false a>b true

(T or F) and ((not F)and T)=T and (T and T)=T На экран выведется 10.

 

Задача. Найти максимальное из трех  различных чисел. 

 

Дано: х, у,z – три целых числа (integer); Найти: max – максимальное из х, у и z(integer).

Решение:

Var x,y,z,max: integer;

Begin

Writeln(‘введите три целых числа’);

Read (x,y,z);

 If (x>y) and (x>z) then max:=x;

 If (y>x) and (y>z) then max:=y;

 If (z>x) and (z>y) then max:=z;  Writeln(max,'-максимальное'); End. 

 

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

Определить истинность выражения 

((a<=b) and (a>d)) or not((a<>c) and (a=d) and (d>c)) or (b=c),  если a=6, b=4, c=-2, d=6.

Найти максимальное из 4 чисел тремя способами.

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

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

Даны коэффициенты k, b уравнения прямой. Составить программу, правильно печатающую уравнение прямой (y=kx+b) при любых значениях коэффициентов (оба положительны, k-отрицательный, а bположительный, k-положительный, а b-отрицательный, оба отрицательны, коэффициент k=1 или k= -1). Второй блок

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

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

Дано трехзначное число и цифра х. Входит ли эта цифра в запись числа.

Даны три числа a, b, c. Определить, какое из них равно d. Если равных d чисел нет, то найти  максимальное из  d-a, d-b, d-c.

 Дано четырехзначное число. Если в нем есть нули, то перевернуть его, иначе приписать ноль (пример: 2305      5032, 2346      23460).

 

 

 

 

 

 

 

 

 

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

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

Например. Составить программу, печатающую по номеру месяца его название.

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

 

Формат: 

 

Case <выражение> of

<возможное значение1>: begin <операторы1> end; <возможное значение2>: begin <операторы2>end;

. .

<возможное значение N>: begin <операторыN> end else begin <другие операторы> end;

end;

 

Механизм выполнения:

1.      Определяется значение выражения, стоящего после служебного слова Case;

2.      Это значение выбирается среди списка возможных значений;

3.      Выполняется соответствующая серия операторов;

4.      Если среди списка значение не было найдено, то выполняется серия операторов по ветке else.

 

Особенности написания:

1.      Перед служебным словом else не ставят « ; »;

2.      Оператор заканчивается служебным словом end;

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

 

Напишем программу для указанной задачи.

Дано: n – номер месяца.

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

Решение:

Var n: integer;

Begin

Writeln(‘введите номер месяца’);

Read (n);

Case n of

1: writeln(‘январь’);

2: writeln(‘февраль’);

3: writeln(‘март’);

4: writeln(‘апрель’);

5: writeln(‘май’);

6: writeln(‘июнь’); 7: writeln(‘июль’);

8: writeln(‘август’);

9: writeln(‘сентябрь’);

10: writeln(‘октябрь’);

11: writeln(‘ноябрь’); 12: writeln(‘декабрь’)

else writeln(‘неверно введен номер месяца’); end; end.

 

Вопросы и задания:

 Назначение, формат, механизм выполнения и особенности написания оператора выбора.

 Составить программу, печатающую по номеру дня недели его название.  Составить программу печатающую по номеру дня недели количество уроков в этот день.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 12.  Оператор цикла с параметром

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

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

 

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

 

Формат:

 For <параметр цикла>:=<начальное значение>to<конечное значение> do         

                                                                                      begin <тело цикла> end;

Пояснения:

1.      параметр цикла – переменная-счетчик, в которой отсчитывается число шагов цикла;

2.      начальное значение – значение переменной-параметра на первом шаге; 3. конечное значение – значение переменной-параметра на последнем шаге;

4.      тело цикла – та серия операторов, которую нужно повторить.

5.      Дословно оператор читается так:

 

Для параметра, принимающего значения от начального до конечного с шагом «единица», делай тело цикла. 

 

Механизм выполнения оператора:

1.        Переменная-параметр принимает начальное значение;

2.        Если значение параметра не превышает конечное, то выполняется серия операторов, обозначенных в теле цикла;

3.        Переменная-параметр увеличивает свое значение на единицу;

4.        Если значение параметра не превышает конечное, то выполняется серия операторов, обозначенных в теле цикла;

5.        И так далее, пока переменная- параметр не примет конечное значение;

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

7.        Выполняется оператор, следующий после цикла.

 

Особенности написания оператора цикла:

1.      Переменная-параметр, начальное и конечное значения могут быть только целого типа;

2.      Переменную-параметр цикла нельзя изменять внутри тела цикла;

 

Антипример1.

Var i,k,a:integer;

Begin

Read(k);

For i:=1 to k do begin i:=i-1; read(a); end; End.

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

 

Антипример2.

Var i,a:integer;

Begin

For i:=1 to 10 do begin i:=i+1; а:=а+i; end; Write(a); End.

 

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

Можно привести массу примеров на этот счет.

 

Запомни главное! Параметр цикла отвечает за количество повторений его тела. Цикл с параметром используют, когда это количество известно. Так зачем намеренно изменять это количество?!!

 

3. Если тело цикла содержит только один оператор, то операторные скобки можно не писать;

 

Пример1. Вывести на экран свое имя 100 раз.

 

Решение: Чтобы вывести на экран имя один раз, нужно использовать процедуру  writeln(„Имя‟); . Чтобы имя вывелось 100 раз, надо повторить эту команду 100 раз. Пусть параметр будет именоваться i.

Составим программу:

Var i:integer;

Begin For i:=1 to 100 do Writeln(‘Имя’);  End.

 

Пример2. Вывести на экран свое имя n раз.

 

Дано: n – число повторений (integer);

Решение: Чтобы вывести на экран имя один раз, нужно использовать процедуру  writeln(„Имя‟); . Чтобы имя вывелось n раз, надо повторить эту команду n раз. Пусть параметр будет именоваться i.

Составим программу:

Var n,i:integer;

Begin

Writeln(‘Введите количество повторений’);

Read (n);

For i:=1 to n do Writeln(‘Имя’);  End.

 

Пример3. Ввести с клавиатуры n целых чисел.

 

Дано: n – число повторений (integer);

Решение: Чтобы ввести с клавиатуры число один раз, нужно использовать процедуру  Readln(x); . В результате в ячейку памяти х будет помещено целое число (integer). Чтобы число вводилось n раз, надо повторить эту команду n раз. Тогда ячейка х будет обновляться n раз. Пусть параметр будет именоваться i. Составим программу:

Var n,i,x:integer;

Begin

Writeln(‘Введите количество повторений’);

Read (n);

For i:=1 to n do readln(x);  End.

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

 

Пример4. Ввести n целых чисел с клавиатуры и найти сумму четных из них.

 

Дано: n – число повторений (integer);

Найти: sum – сумма четных чисел среди введенных (integer);

Решение: Чтобы ввести с клавиатуры число один раз, нужно использовать процедуру  Readln(x); . В результате в ячейку памяти х будет помещено целое число (integer). Чтобы проверить число на четность, нужно использовать условный оператор. И только если число четное, нужно добавить его к сумме, применив оператор присваивания. Чтобы число вводилось n раз, надо повторить эту команду n раз. Тогда ячейка х будет обновляться n раз. Поэтому проверку на четность и увеличение суммы необходимо тоже каждый раз повторять. Таким образом, в теле цикла будет две команды: процедура ввода и условный оператор. Пусть параметр будет именоваться i. Составим программу:

 

Var n,i,x,sum:integer;

Begin

Writeln(‘Введите количество повторений’);

Read (n);

For i:=1 to n do begin

                          read (x);

                          if x mod 2=0 then sum:=sum+x;                           end;

Writeln( sum,’-сумма четных чисел из ’,n,’ введенных’); End.

 

 

 

 

Пример5. Вывести на экран все трехзначные числа, кратные 15.

 

Решение: Все трехзначные числа находятся в промежутке от 100 до 999. Необходимо каждое из них проверить на кратность 15 и в случае истинности вывести на экран. Для проверки условия должен использоваться условный оператор. Условный оператор необходимо повторить столько раз, сколько чисел в промежутке от 100 до 999. Если использовать для повтора оператор цикла с параметром, то за начальное и конечное значения можно взять числа 100 и 999. Тогда переменная-параметр будет принимать значения из указанного диапазона – каждый раз новое значение. Эту переменную мы и будем проверять на кратность 15. 

Составим программу:  Var i:integer;

Begin

For i:=100 to 999 do if  i mod 15=0 then Writeln( i); End.

 

4. Если необходимо вести отсчет шагов в обратном направлении, вместо служебного слова to используется служебное слово downto (шаг –1);

 

Пример. Найти сумму чисел из промежутка от a до b, где a и b целые числа.

 

Дано: a,b – целые числа, концы промежутка (integer);

Найти: sum – сумма целых чисел (integer);

Решение: Сумму чисел из указанного промежутка можно отыскать, опираясь на предыдущий пример. Трудность заключается в том, что в предыдущем примере концы промежутка были заданы в явном виде (100 и 999), а здесь это переменные величины. Если окажется что a>b, то отсчет придется вести в обратном направлении.

Составим программу.

Var a,b,i,sum:integer;

Begin

Writeln(‘Введите концы промежутка – два числа’);

Read (a,b);

If  a>b then For i:= a downto b do sum:=sum+i             else For i:=a to b do sum:=sum+i;

Writeln(sum,’ –сумма чисел из промежутка от ’,a,’ до’,b); End.

 

Вопросы и задания:

 

Первый блок

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

§    Внимательно рассмотрите фрагмент программы и ответьте на вопросы: For i:=1 to 20 do read(a); a:=a+1; write(a); Какие операторы являются телом данного цикла?

Сколько раз выполнится тело цикла?

Сколько чисел будет выведено на экран?

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

 

 

 

Var i,n:real; a:integer;

i

a

 

 

 

 

 

 

Begin  n:=3; a:=5;

For i:=1 to n do begin  a:=a+i; i:=i-2; end; Write(a:3:2); End.

§    Составить программу, печатающую на экране 25 раз фразу: «Привет! Я учусь в седьмом классе».

§    Составить программу, печатающую на экране числа от 1 до n.  Составить программу, печатающую нечетные числа из промежутка от 1 до n.

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

1 до n.

 Вывести на экран все числа из промежутка от 1 до n, которые делятся на

2, 3 и 5.

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

 

Второй блок

*     Заполнить таблицу значений, опираясь на фрагмент программы. a:=1; b:=0;

i

a

b

5

 

 

6

 

 

7

 

 

8

 

 

9

 

 

10

 

 

For i:=5 to 10 do begin

                            a:=a+i;                             b:=b+2*a;

                            end;

 

 

 

*     Найти ошибки в программе:

Var a,b,i,x:real;

Begin Read(x); a:=x;

For i:=1 downto b do begin

                                  i:=i+3;                                   a:=a/2;                                   x:=x+a;

                                  end; write(x); end.

 

 Рассмотрите фрагменты программ и ответьте на вопрос: «Что будет выведено на экран?».

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

 Составить программу, распечатывающую все четырехзначные числа-

 

«перевертыши» (2442 –«перевертыш»).

Составить программу, распечатывающую таблицу умножения на

 

заданное число а. Например, при а =5, на экране 5 * 1 должно быть следующее: 5 * 2

                                                                                                       5     *     3

                                                                                                       5     *     4

                                                                                                       5     *     5

                                                                                                       5     *     6

                                                                                                       5     *     7

                                                                                                       5     *     8

                                                                                                       5     *     9

                                                                                                       5     *     10

Составить программу, выводящую на экран таблицу значений функции  y=ax+b, при заданных a и b для х, принимающего значения от -10 до 10.

=

=

=

=

=

=

=

=

=

=

5

10

15

20

25

30

35

40

45

50

n:=5; x:=2; n:=4; a:=n;

For a:=1 to n do begin For x:=1 to n do                                   

                            x:=x*3;                           a:=a-3;

                            writeln(x);                           writeln(a);

                            end; 

                            write(n);

 

Третий блок

§    Составить программу, которая запрашивает ввод десяти чисел.

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

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

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

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

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

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

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

 

 

 

Четвертый блок

§    Составьте программу к задаче: «Соблюдая диету, человек в первый день сбросил 1 кг. Каждый последующий день он скидывал на 200 г больше, чем в предыдущий. Сколько человек потеряет в весе за неделю?».

*     Составьте программу к задаче: «Первоначальная выручка предприятия за месяц работы равна х руб. Каждый месяц выручка возрастает на а% от выручки предыдущего месяца. Какова будет месячная выручка через k месяцев?».

*     Составьте программу к задаче: «На весах стояло n гирь. Первая весила m

г. Каждая следующая гиря на 15% тяжелее предыдущей. Найти общий вес гирь, средний вес гирь и самую тяжелую гирю».

 Составьте программу к задаче: «На яблоне было х яблок. В первый день с яблони упало а яблок. Каждый следующий день опадало в 2 раза больше яблок, чем в предыдущий. Сколько яблок останется через k дней?».

*     Составить программу поиска трехзначного числа, которое кратно заданному числу m и, в котором цифры расположены по возрастанию.

Если такого числа не существует, сообщите об этом.

Составьте программу к задаче: «Мама дает ученику на карманные расходы а руб. в день. Ученик тратит b руб. Каждый день расходы его увеличиваются на 3% от расходов предыдущего дня. Сколько денег ему выпросить у папы, чтобы прожить 10 дней. Если денег просить не придется, то сообщите об этом». 

 

Пятый блок

§    Составить программу, которая запрашивает ввести n чисел и находит среди них максимальное число.

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

§    Составить программу, вычисляющую сумму 1.                                 

 

 Составить программу, вычисляющую сумму 1                       , где

знаменатель взят из промежутка от 1 до n.                                                                

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

 

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

 

 

 

 

 

 

 

II. 13. Вложенные циклы

 

Рассмотрим фрагмент программы: x:=0; y:=0;

For i:=1 to 3 do begin

                          For j:=1 to 2 do x:=x+2*j;

                          y:=y+x*i;

                          end;  

В этом фрагменте присутствуют два цикла с параметрами: цикл по параметру i и цикл по параметру j. 

 

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

 

Заметьте, что цикл по параметру j входит в тело цикла по параметру i.

 

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

 

! Цикл, в теле которого расположен другой цикл, называется внешним

 

В нашем примере, цикл по параметру i – внешний, а цикл по параметру j – вложенный.

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

1.      Параметр i  принял значение 1.

2.      Начинает выполняться тело цикла по параметру i. В нем два оператора: цикл по параметру j и оператор присваивания. 

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

ü    Когда цикл по параметру j закончит свою работу будет выполняться оператор присваивания и переменная у получит значение 6.

3.      Параметр i увеличивает свое значение на 1. Пункт 2 повторяется, но с учетом того, что переменные х и у уже имеют значения равные 6.

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

i

j

x

y

1

1

2

6

2

6

2

1

8

30

2

12

3

1

14

84

2

18

Заметьте, что во внешнем цикле было 3 шага, а во внутреннем 2 шага, но тело цикла по параметру j выполнялось 2*3=6 раз.

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

Пример. Составить программу к задаче: «Человек купил лотерейный билет. Билет состоит из двух одинаковых частей. На каждой части 10 ячеек, покрытых оболочкой. Под оболочкой цифры от 0 до 9. Игрок может стереть оболочку только на одной из ячеек в первой части билета и на одной из ячеек во второй части. Задача игрока – набрать х баллов (от 0 до 18). Выяснить, какие могут быть варианты и сколько шансов на победу».

 

Дано: х – количество баллов (число от 0 до 18 – byte);

Найти: a, b – баллы в ячейках на первой и второй половине билета, дающие в сумме х очков (числа от 0 до 9 – byte);              k – количество шансов на победу (byte). Решение. 

Переменная а содержит количество баллов в открытой игроком ячейке на первой половине билета, то есть может принимать значения от 0 до 9. При каждом значении переменной а переменная b (количество баллов в открытой игроком ячейке на второй половине билета) может принимать значения от 0 до 9. Перебирая варианты, необходимо проверять условие a+b=x. Только при истинности этого условия, нужно вывести значения соответствующих ячеек на экран и увеличить счетчик шансов на 1. Только после вывода всех подходящих вариантов следует вывести количество подсчитанных шансов на победу. Для перебора вариантов, нам понадобятся два цикла: внешний цикл с параметром а и вложенный цикл с параметром b. В теле цикла нам понадобится условный оператор, при истинности которого необходимо выводить пару значений (процедура вывода) и увеличивать счетчик шансов (оператор присваивания).

Составим программу:

Var  a,b,x,k: byte;

Begin

Writeln(‘Введите количество баллов победителя – от 0 до 18’);

Readln(x);

Writeln(‘Возможные варианты:’);

For a:=0 to 9 do

      For b:=0 to 9 do If a+b=x then begin

                                                        Writeln(a, ‘ ’,b);                                                          k:=k+1;

                                                        end;

Writeln(‘У игрока ’,k, ‘шансов на победу’); End.

 

Вопросы и задания:

 

Первый блок

 Какой цикл называют вложенным? Расскажите механизм выполнения компьютером вложенных циклов.

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

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

For i:=1 to 3 do begin

     For j:=1 to 3 do begin

           For k:=1 to 2 do begin

                                      a:=2*k;                                       b:=b+a;                                       end;                                       b:=b+2;                                       end;                                       c:=a+b;                                       end;

Составить программу к задаче: «Сколько шансов при бросании двух игральных костей выбросить х очков (от 2 до 12) и какие это варианты».

*     Составить программу к задаче: «Сколько шансов при бросании трех игральных костей выбросить х очков (от 3 до 18) и какие это варианты».

*     Составить программу к задаче: «Необходимо перевезти груз через реку. Бочки весят 100 кг, ящики – 50 кг, а пакеты – 0.5 кг. Плот выдержит 1 тонну груза. Как укомплектовать плот, если требуется перевезти 100 предметов?».

 Составить программу к задаче: «В кассе остались купюры по 3 и 5 рублей. Кассиру необходимо выдать сумму s рублей (известно, что s>7).

Какие могут быть варианты по количеству тех и других купюр?».  Составить программу к задаче: «Долгожитель обнаружил, что если к сумме квадратов цифр его возраста прибавить число дня его рождения, то получится его возраст. Сколько ему лет?».

 Составить программу к задаче: «Числа a, b и c называются «пифагоровой тройкой», если выполняется условие a2 b2 c2. Отыщите все

«пифагоровы тройки» среди чисел от 1 до n».

 

Второй блок

 Составить программу к задаче: «Известно, что число 1?2?? ( знаки вопроса свидетельствуют о пропущенных цифрах) делится нацело на 37.

Определите пропущенные цифры и распечатайте это число».

Составить программу печати трехзначных чисел, имеющих 10 делителей.  Составить программу к задаче: «Число называется «совершенным» если оно равно сумме всех своих делителей включая 1, но, не включая само себя. Распечатайте все совершенные числа из промежутка от 1 до n».   Составить программу к задаче: «Распечатайте все простые числа из промежутка от 1 до n». 

Составить программу к задаче: « Напечатайте число из промежутка от 1 до n с наибольшим количеством делителей». 

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 14. Операторы циклов с условиями

 

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

Если известно условие, при котором надо повторять серию команд

Если известно условие, при котором надо прекратить повторы 

Оператор цикла с предусловием (цикл «ПОКА»)

Оператор цикла с постусловием (цикл «ДО»)

Формат

While <условие>do begin

                               <тело цикла>

                                  end;

Формат

Repeat  <тело цикла>

Until<условие>;

 

тело цикла – это серия операторов, которые надо повторять.

Механизм выполнения оператора

1.      проверяется условие на истинность;

2.      если условие истинно, то выполняется тело цикла;

3.      снова проверяется условие на истинность;

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

5.      если условие стало ложным, то выполняется оператор, следующий после цикла.

 

1.      выполняется тело цикла;

2.      проверяется условие на истинность;

3.      если условие ложно, то выполняется тело цикла;

4.      снова проверяется условие на истинность;

5.      и так далее, будет выполняться тело цикла, и проверяться истинность условия, пока условие не станет истинным;

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

 

 

Дословный перевод оператора

«Пока условие истинно, делай тело цикла ».

«Повторяй тело цикла до того, как условие станет истинным».

Особенности написания оператора

Если тело цикла состоит из одного оператора, то операторные скобки можно не писать.

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

Пример. Составить программу, увеличивающую заданное целое число x вдвое, пока оно не превысит 1000.

Дано: x – целое число (integer);

Результат: Сообщение о том, что x превысило 1000. 

Решение: Чтобы увеличить x в два раза понадобится один оператор присваивания x:=x*2. Этот оператор необходимо повторять. Следовательно, понадобится оператор цикла.

Количество повторений не известно, но известно условие повторений x<=1000. Воспользуемся оператором цикла «ПОКА». Составим программу.

Var x:integer;

Begin

Writeln(‘Введите число x’);

Readln(x);

While x<=1000 do x:=x*2;

Writeln(‘число превысило 1000 и стало равно’,x); End. 

 

Количество повторений не известно, но известно условие, при котором повторы следует прекратить x>1000. Воспользуемся оператором цикла «ДО».

Составим программу.

Var x:integer;

Begin

Writeln(‘Введите число x’);

Readln(x); Repeat  x:=x*2; Until x>1000 

Writeln(‘число превысило 1000 и стало равно’,x); End. 

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

 

шаги

х

 1

200

2

400

3

800

4

1600

X превысило

1000 и стало равно

1600

 

шаги

х

 1

200

2

400

3

800

4

1600

X превысило

1000 и стало равно

1600

                           

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

 

Допустим, введено число большее 1000. Например, 1100. Цикл «ПОКА» проверит условие, убедится в его ложности и программа выведет сообщение «x превысило 1000 и стало равно 1100». Цикл «ДО» вначале выполнит тело цикла, а затем, убедится в истинности условия и прекратит работу. После этого последует сообщение «x превысило 1000 и стало равно 2200». В данном случае вторая программа работает некорректно по отношению к исходным данным.

 

Отличие в работе циклов в том, что цикл «ПОКА» может не выполниться ни разу, если условие заведомо ложно, а цикл «ДО» хотя бы один раз, но выполнится

 

! Если решение задачи связано с реализацией циклического алгоритма, то, работая над задачей, следует выяснить: 1. «Что необходимо повторять?» - тело цикла;

2.         а)  «При каком условии следует повторять?» - цикл «ПОКА»;

б)  «До выполнения, какого условия следует повторять?» - цикл «ДО»;

3.         Необходимо, чтобы переменные, участвующие в условии были определены до его проверки;

Пример. Вводить числа с клавиатуры, пока не будет введен 0.

 

Решение: Для ввода одного числа используем процедуру ввода read(x).

Эту процедуру необходимо повторять пока x<>0 или до x=0. Составим программу двумя способами.

 

Var x:integer;

Begin

While x<>0 do read(x); End.

Var x:integer;

Begin

Repeat  read(x); Until x=0; End.

В этом случае, до проверки условия переменная x не определена, а значит, равна 0. Условие оказалось заведомо ложным, а значит, программа составлена неверно.

В этом случае, до проверки условия переменная x получила свое значение в результате ввода, а значит, программа составлена верно.

Правильное решение:

Var x:integer;

Begin

Read(x);

While x<>0 do read(x); End.

 

 

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

 

X:=4;

While x<10 do write(‘цикл работает’);

 

 В этом фрагменте повторяется вывод фразы «цикл работает». Переменная x на протяжении работы цикла не изменит своего значения и останется равной 4. Следовательно, условие работы цикла не изменит своей истинности, и цикл будет работать бесконечно.  Этот фрагмент можно исправить хотя бы так:

 

X:=4;

While x<10 do begin write(‘цикл работает’); x:=x+3; end;

 

В этом случае, на втором шаге работы цикла x примет значение 10, и цикл прекратит работу.

 

Примеры решения задач

 

Пример 1. Составить программу к задаче: «Вводить числа с клавиатуры, пока их сумма не превысит 100».

Решение: Для ввода одного числа используем процедуру ввода read(x). Эту процедуру необходимо повторять пока сумма sum<=100 или до sum>100.

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


Составим программу.

Цикл «ПОКА»

Var x,sum: integer;

Begin 

Sum:=0;

While sum<=100 do begin

                             

Writeln(‘введите целое число’);

                              Read(x);

                              Sum:=sum+x;                               End;

Writeln(‘сумма превысила 100 и стала равна ’,x); End.

 

Цикл «ДО»

Var x,sum: integer;

Begin 

Sum:=0;

Repeat    Writeln(‘введите целое число’);

   Read(x);

   Sum:=sum+x;

Until sum>100; Writeln(‘сумма превысила 100 и стала равна ’,x); End.


Пример 2. Составить программу к задаче: «Вводить числа с клавиатуры, пока количество четных чисел, среди введенных, не станет равным k».

 

Дано: k – целое число (integer);

Результат: сообщение о том, что количество четных чисел равно k;

Решение:  Для ввода одного числа используем процедуру ввода read(x). Эту процедуру необходимо повторять пока количество четных чисел kol<>k или до kol=k. Первоначальное значение kol=0. Чтобы изменялась истинность условия, внутри тела цикла количество четных чисел нужно считать.

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

Составим программу.

Цикл «ПОКА» Цикл «ДО»

Var x,k,kol: integer; Var x,sum: integer;

Begin  Begin 

Writeln(‘введите число’); Writeln(‘введите число’);

Readln(k); Readln(k); kol:=0; kol:=0;

While kol<>k do begin Repeat 

   Writeln(‘введите целое число’);   Writeln(‘введите целое число’);

    Read(x);    Read(x);

    If x mod 2=0 then kol:=kol+1;                                                       If x mod 2=0 then kol:=kol+1;                                                                                              end; Until kol=k;

Writeln(‘количество четных Writeln(‘количество четных

чисел равно ’,k); чисел равно ’,k);

End. End.

 

Пример 3. Составить программу к задаче: «Вводить числа с клавиатуры, пока они образуют возрастающую последовательность».

 

Результат: сообщение о том, что возрастание последовательности нарушилось.

Решение:  Для ввода одного числа используем процедуру ввода read(x). Эту процедуру необходимо повторять пока предыдущее число меньше следующего (x1<x) или до (x1>=x). Чтобы условие было определено, необходимо ввести первые два члена последовательности (read(x1,x)). На


первом шаге цикла будет введено третье число. Теперь надо сравнить второе и третье. Значит, на место x1 должно встать предыдущее x, а на место x, его новое значение.  

Составим программу.

Var x,x1: integer;

Begin 

Writeln(‘введите 2 члена последовательности’);

Readln(x1,x); While x1<x do begin

    x1:=x; 

   Writeln(‘введите следующий член последовательности’);

    Read(x);

                          end;

Writeln(‘возрастание последовательности нарушилось’); End.

 

С помощью оператора цикла «ДО» эту задачу можно решить, только привлекая, дополнительные операторы ветвления!

 

 

Вопросы и задания:

 

Первый блок

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

 Назовите отличие в работе операторов циклов «ПОКА» и «ДО».  Как работать над задачей, решение которой содержит циклический алгоритм?

 Какой из циклов универсален и почему? 

Составьте программу к задаче «Вводить числа с клавиатуры, пока они положительны».

*     Составьте программу к задаче «Вводить числа с клавиатуры, пока не встретится задуманное число x».

 Усовершенствуйте предыдущую, чтобы после ввода числа выводилось одно из сообщений «МНОГО» или «МАЛО».

 Составьте программу к задаче «Вводить числа с клавиатуры и выводить ответ на вопрос: «является ли число четным?», пока не будет введен ноль».

*     Составьте программу к задаче «Дано число x. Делить его на 2 нацело, пока оно не обратится в 0. Посчитать количество делений».  Составьте программу к задаче «Вводить числа с клавиатуры, пока не встретится число кратное 5. Сколько среди введенных чисел оканчивалось цифрой 2?».

 

Второй блок

*     Перед вами программа к задаче «Вводить пары чисел, пока первое число больше второго».

 

 

Var a,b: integer;

Begin 

While a>b do begin  writeln(‘введите пару чисел’);

readln(a,b); end;

Write(‘условие нарушилось’); End. 

Найдите ошибку в программе и исправьте ее.

*     Сколько раз выполнится тело цикла:

B:=1;  X:=96;

WHILE  B=1 DO BEGIN 

IF X<3 THEN B:=0;  

X:=X DIV 7 +1;  

END;

A) 1 раз;   B)2 раза;  C)3 раза;   D)4 раза;   E)5 раз;

 Чему будут равны значения целых переменных C и D после выполнения  фрагмента программы: 

C:=10; A:=46; B:=7; D:=A;

WHILE D>=B DO BEGIN   C:=C-1;   D:=D-2*B;  END;

A) 6; -2;    B) 7; 4;   C) 7; -1;  D) 9; 2;  E) 7; 2;

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

*     Составьте программу к задаче «В первый день выручка предпринимателя составила k рублей. Каждый последующий день выручка увеличивалась на 15 %. Вырученные деньги складываются в копилку. Сколько потребуется дней, чтобы заработать 1000000?».  Составьте программу к задаче «Вводить числа, пока их сумма не превысит 100. Среди них найти максимальное число».

*     Составьте программу к задаче: «Напечатать в возрастающем порядке все трехзначные числа, пока не встретится число, сумма цифр которого равна заданному числу m».

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 15. Сравнительная характеристика циклов 

 

   Рассмотрим решение следующей задачи: «Ввести n чисел с клавиатуры и найти сумму четных положительных из них».

 

Дано: n – количество чисел (integer);

Найти: sum – сумма четных положительных чисел (integer);

Решение: Для ввода одного числа используем процедуру ввода read(x). Эту процедуру необходимо повторять n раз, то есть можно использовать оператор цикла с параметром. На каждом шаге цикла следует проверять, является ли x четным и положительным. В случае истинности условия, необходимо число добавлять к сумме.

Составим программу:

Var x,sum,n,i: integer;

Begin  

Writeln(‘Введите количество чисел’);

 Read(n);

 Sum:=0;

 For i:=1 to n do begin

                           Writeln(‘Введите число’);

                            Read(x);

                            If (x mod 2=0) and (x>0) then sum:=sum+x;                             end;

 Writeln(‘Сумма четных положительных чисел равна ’,sum); End.

 В этой программе параметр цикла введен для того, чтобы отсчитывать количество введенных чисел. Параметр будет увеличиваться на 1, пока не достигнет значения n, то есть при выполнении условия ( i<n). Очевидно, что программу к задаче можно составить и используя цикл «ПОКА». Только в этом случае необходимо предусмотреть, что этот вид циклов не может менять автоматически значения переменных. До начала ввода чисел значение параметра равно 0, а каждый раз после ввода увеличивается на единицу. Составим программу. Var x,sum,n,i: integer;

 Begin 

 Writeln(‘Введите количество чисел’);

 Read(n);  i:=0;

 While  i<n do begin

                           Writeln(‘Введите число’);

                            Read(x);

                            i:=i+1;

                            If (x mod 2=0) and (x>0) then sum:=sum+x;                             end;

 Writeln(‘Сумма четных положительных чисел равна ’,sum); End.

 

Так как можно определить условие работа цикла, то можно определить и условие выхода из него (i=n). Следовательно, можно составить программу и с использованием оператора цикла «ДО». Составим программу.

Var x,sum,n,i: integer;

 Begin 

 Writeln(‘Введите количество чисел’);

 Read(n);  i:=0;

Repeat   Writeln(‘Введите число’);

 Read(x);   i:=i+1;

  If (x mod 2=0) and (x>0) then sum:=sum+x;

 Until i=n;

 Writeln(‘Сумма четных положительных чисел равна ’,sum);  End.

 

Вывод:

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

(«ПОКА» или «ДО»);

 

Вопросы и задания:

 Какой вид циклов является универсальным и почему?

 Какой из циклов самый заменимый и почему?

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

 Составить программы вывода на экран всех чисел из промежутка от 1 до n, которые делятся на 4 и 5 с использованием всех видов циклов.  Составить программы нахождения суммы всех двузначных чисел, у которых цифры расположены по возрастанию с использованием всех видов циклов.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

II. 16. Целочисленная арифметика

 

   Целочисленная арифметика – это вычисления связанные с цифрами целых чисел. 

 

Ряд задач на целочисленную арифметику был уже предложен вам в предыдущих параграфах. Например, задача: «Дан шестизначный номер автобусного билета. Говорят, что билет «НЕВЕЗУЧИЙ», если сумма цифр равна 13. Проверить билет на «невезучесть»».

 

Вспомним как решать такие задачи.

Дано: n – шестизначный номер (longint);

Результат: одно из сообщений «НЕВЕЗУЧИЙ» или «ОБЫЧНЫЙ». Решение: Чтобы определить, является ли билет «невезучим», необходимо сравнить сумму его цифр с числом 13. Чтобы посчитать сумму, надо знать цифры. Назовем их a1, a2, a3, a4, a5, a6. Последняя цифра в любом числе находится как остаток от деления этого числа на 10 (a6:=n mod 10). Следующую цифру можно найти, если сделать ее последней в числе. Для этого надо убрать шестую цифру. Чтобы убрать цифру из числа. Нужно поделить число на 10 нацело (n:=n div 10). Теперь можно найти a5 (a5:=n mod 10). И так далее. Пока не найдем все цифры.

Составим программу.

Var n: longint; a1,a2,a3,a4,a5,a6,sum: integer; Begin

Writeln(‘введите номер вашего билета’);

Read(n); a6:=n mod 10; n:=n div 10; a5:=n mod 10; n:=n div 10; a4:=n mod 10; n:=n div 10; a3:=n mod 10; n:=n div 10; a2:=n mod 10; n:=n div 10; a1:=n mod 10; sum:=a1+a2+a3+a4+a5+a6;

If sum=13 then writeln(‘НЕВЕЗУЧИЙ’) else writeln(‘ОБЫЧНЫЙ’); End.

 

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

 

 

Составим программу:

 

Var n: longint; a,sum,i: integer;

Begin

Writeln(‘введите номер вашего билета’);

Read(n);

For i:=1 to 6 do begin

                         a:=n mod 10;                          n:=n div 10;                          sum:=sum+a;                          end;

If sum=13 then writeln(‘НЕВЕЗУЧИЙ’) else writeln(‘ОБЫЧНЫЙ’); End.

 

Заметьте, как значительно сократился текст программы.

В изложенной задаче было известно количество цифр в исходном числе. А как быть, если количество цифр неизвестно?

 

Задача. «Дано целое число. Определить, сколько в нем цифр».

 

Дано: n – целое число (longint);

Результат: kol – количество цифр в числе (integer).

Решение: Чтобы определить, количество цифр в числе, надо знать цифры.

Для поиска и подсчета цифр будет повторяться серия команд 

(a:=n mod 10; n:=n div 10; kol:=kol+1;). Количество повторений зависит от количества цифр, поэтому оно неизвестно и цикл с параметром в составлении программы применять нельзя. Попробуем использовать цикл «ПОКА». Остается не выясненным условие, при котором необходимо выполнять повторы. Рассмотрим на примере конкретного числа. Допустим n=1267. Заполним таблицу значений переменных при реализации повторений:  

 

0

0

1267

0

 шаги

a

n

kol

1

7

126

1

2

6

12

2

3

2

1

3

4

1

0

4

. .

 

 

 

 

Количество цифр будет найдено, когда переменная a будет равна первой цифре числа, при этом число n  обратится в 0. 

 

Вывод: Поиск цифр продолжается, пока число не обратится в 0 (n<>0).

 

  Составим программу.

 

 

 Var n: longint; a,kol: integer; Begin Writeln(‘введите число’); Read(n);

While n<>0 do begin

                         a:=n mod 10;                          n:=n div 10;                          kol:=kol+1;                          end;

Writeln(‘количество цифр в числе: ’,kol); End.

   

Примеры решения задач

 

  Пример 1.  Составить программу, определяющую, входит ли в запись числа n заданная цифра k.       

              

Дано: n – целое число (longint);             k – цифра (integer).

Результат: одно из сообщений «цифра входит в запись числа» или «цифра не входит в запись числа».

Решение: Чтобы ответить на вопрос задачи, надо сравнить цифры числа с цифрой k. Для этого их надо искать. Отыскивать цифры мы будем до тех пор, пока среди них не встретится цифра k, либо пока они не закончатся. Следовательно, цикл будет работать пока a<>k и  n<>0, а закончит свою работу при a=k или n=0.

Составим программу.

  Var n: longint; a,k: integer; Begin Writeln(‘введите число’); Read(n); Writeln(‘введите цифру’);

Read(k);

While (a<>k) and (n<>0) do begin

                                              a:=n mod 10;                                               n:=n div 10;                                               end;

If a=k then writeln(‘цифра входит в запись числа’)             else writeln(‘цифра не входит в запись числа’); End.

 

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

 

Дано: n – целое число (longint).

Найти: max – максимальная цифра (integer).

Решение: Чтобы найти максимальную цифру, надо сравнить цифры числа.  Для этого за максимальную цифру примем первую цифру, которую найдем (a:=n mod 10; n:=n div 10; max:=a;). Следующую, найденную нами цифру, сравним с максимальной. При этом значение переменной max может измениться (if a>max then max:=a;). Таким образом, нужно сравнить все цифры.

Составим программу.

Var n: longint; a,max: integer; Begin Writeln(‘введите число’); Read(n); a:=n mod 10;  n:=n div 10;  max:=a;

While (n<>0) do begin

                            a:=n mod 10;                             n:=n div 10;

                            if a>max then max:=a;                                             end;

writeln(‘максимальная цифра ’,max);  End.

 

Пример 3.  Составить программу, меняющую местами первую цифру числа с последней цифрой.

 

Дано: n – целое число (longint).

Найти: m – новое число (longint).

Решение: Чтобы поменять цифры в числе, их надо найти. Рассмотрим на конкретном примере. 

Пусть n=56234, тогда m=46235. Математически смену цифр в числе можно получить так: 56234 – 50000 + 40000 – 4 + 5 = 5* 104 + 4* 104 – 4 + 5 = 46235.

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

 

Пусть а- первая цифра, а b – последняя цифра. Тогда получаем формулу вычисления: m=n-a*10 kol-1+b*10 kol-1-b+a. Чтобы применить эту формулу, необходимо вычислить: a, b, kol и 10 kol-1.

Последняя цифра равна остатку от деления числа на 10 (b:=n mod 10).

Первую цифру можно найти «оторвав» все остальные. Попутно можно найти количество цифр.  While (n<>0) do begin

                            a:=n mod 10;                             n:=n div 10;                             kol:=kol+1;                             end;

Возвести число в степень можно с помощью оператора цикла с параметром ( St:=1; For i:=1 to kol-1 do St:=St*10;). Осталось применить формулу m:=n-a*St+b*St-b+a. 

Обратите внимание, что, когда происходил поиск количества цифр, число n обратилось в 0. Так как значение переменной n терять нельзя, то перед входом в цикл его нужно сохранить в другой переменной (n1:=n).

Формула для получения результата будет выглядеть так:   m:=n1-a*St+b*St-b+a.  

 Составим программу.

Var n,m: longint; a,b,kol,St,i: integer;

Begin Writeln(‘введите число’);

Read(n); b:=n mod 10; n1:=n; 

While n<>0 do begin

                            a:=n mod 10;                             n:=n div 10;                             kol:=kol+1;

                             end;

St:=1; For i:=1 to kol-1 do St:=St*10;

m:=n1-a*St+b*St-b+a;

writeln(‘если поменять первую и последнюю цифру, получим ’,m);  End.

 

Вопросы и задания:

 

Первый блок

 Какой класс задач носит название «целочисленная арифметика»?

§    Составить программу к задаче «Дано число n. Напечатать его цифры в столбик, начиная с последней цифры».

§    Составить программу к задаче «Дано число n. Найти произведение его цифр».

 Составить программу к задаче «Дано число n. Найти среднее арифметическое его цифр».

*     Составить программу к задаче «Дано число n. Найти сумму его нечетных цифр».

 Составить программу к задаче «Дано число n. Найти сумму его четных цифр и произведение нечетных».

Составить программу к задаче «Дано число n. Сколько в нем нулей?». Составить программу к задаче «Дано число n. Есть ли в нем цифра 5?».

 

Второй блок

§    Составить программу к задаче «Дано число n. Найти минимальную цифру».

*     Составить программу к задаче «Дано число n. Найти максимальную цифру. Сколько раз максимальная цифра повторяется в числе?».

§    Составить программу к задаче «Дано число n. Обрезать первую и последнюю цифры».

*     Составить программу к задаче «Дано число n и цифра k. Заменить первую цифру цифрой k».

 Составить программу к задаче «Дано число n и цифра k. Дописать цифру k в начало и конец числа».

 

 

Третий блок

*     Составить программу к задаче «Дано число n. Получить новое число, приписав к нему такое же».

*     Составить программу к задаче «Дано число n. Если количество цифр в числе нечетное, то заменить среднюю цифру нулем».

§    Составить программу к задаче «Дано число n. Перевернуть число».  Составить программу к задаче «Дано число n. Является ли оно «перевертышем»?».

Составить программу к задаче «Дано число n. Заменить его максимальную цифру нулем».

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Литература, использованная при составлении пособия:

 

1.      Задачник-практикум по информатике под ред. Семакина И.Г., Хеннера Е.К.

2.      Кушнеренко А.Г., Лебедев Г.В. 12 ЛЕКЦИЙ о том, для чего нужен школьный курс информатики и как его преподавать. Приложение к газете «Первое сентября», 1999г. (№ 1, 3, 5, 6, 8, 10, 11, 12, 14). 

3.      Ляхович В.Ф. Руководство к решению задач по основам информатики и вычислительной техники. М., ВШ, 1994.

4.      Попов В.Б. TURBO PASCAL для школьников. Москва, «Финансы и статистика», 2003

5.      Семакин И.Г. Лекции по программированию. Учебное пособие,Пермь,1996.

6.      Семакин И., Залогова Л., Русаков С., Шестакова Л. Информатика. Базовый курс для 7-9 классов. – М.: Лаборатория Базовых Знаний, 1999.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Основы программирования на языке

Основы программирования на языке

Содержание

Содержание

II. 16.

II. 16.

Часть I I. 1. Информация

Часть I I. 1. Информация

А зачем же нам информация, что нам с нею делать?

А зачем же нам информация, что нам с нею делать?

Например, речь учителя, телефонные провода, радиоволны и т

Например, речь учителя, телефонные провода, радиоволны и т

В библиотеке восемь полок. Ученику необходимо знать, на какой из полок лежит нужный ему учебник

В библиотеке восемь полок. Ученику необходимо знать, на какой из полок лежит нужный ему учебник

I. 3. Алфавитный подход к измерению информации

I. 3. Алфавитный подход к измерению информации

I=K * i Осталось посчитать количество информации, содержащееся в одном символе

I=K * i Осталось посчитать количество информации, содержащееся в одном символе

Во сколько раз отличается количество информации в этих текстах?

Во сколько раз отличается количество информации в этих текстах?

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

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

I. 6. Числа и системы счисления Ø

I. 6. Числа и системы счисления Ø

Два – это наименьшее основание системы

Два – это наименьшее основание системы

Например: 2 2 3 1 1 0 6 =2*6 2 +3*6 1 +1*6 0 =72+18+1=91 10

Например: 2 2 3 1 1 0 6 =2*6 2 +3*6 1 +1*6 0 =72+18+1=91 10

I. 7. Системы счисления, где основания являются степенями двойки

I. 7. Системы счисления, где основания являются степенями двойки

Алгоритм перевода чисел из системы с основанием 2 в двоичную систему счисления: 1

Алгоритм перевода чисел из системы с основанием 2 в двоичную систему счисления: 1

I. 8. П редставление положительных чисел в памяти компьютера

I. 8. П редставление положительных чисел в памяти компьютера

Максимальное неотрицательное число , которое можно закодировать в одном байте 255

Максимальное неотрицательное число , которое можно закодировать в одном байте 255

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

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

Правила двоичной арифметики: 0+0=0 0+1=1 1+0=1 1+1=10 (0 пишу, 1 переношу в следующий разряд) 0-0=0 0-1=1 (такой результат возможен только тогда, когда есть возможность занять…

Правила двоичной арифметики: 0+0=0 0+1=1 1+0=1 1+1=10 (0 пишу, 1 переношу в следующий разряд) 0-0=0 0-1=1 (такой результат возможен только тогда, когда есть возможность занять…

Назови три основных правила сложения и вычитания чисел

Назови три основных правила сложения и вычитания чисел

I. 10. Представление чисел в памяти компьютера с учетом их знака

I. 10. Представление чисел в памяти компьютера с учетом их знака

Ответ: -101. Рассмотрим число 10000011

Ответ: -101. Рассмотрим число 10000011

Докажите, что с учетом знака в одном двухбайтовом слове можно представить любое число из диапазона –32768 до 32767

Докажите, что с учетом знака в одном двухбайтовом слове можно представить любое число из диапазона –32768 до 32767

Поэтому программисты придумали другие языки – языки, которые ближе человеку по смыслу

Поэтому программисты придумали другие языки – языки, которые ближе человеку по смыслу

Как называются программы-переводчики на язык машинных команд?

Как называются программы-переводчики на язык машинных команд?

Некоторые комбинации специальных символов := , <= , >= , <> ,

Некоторые комбинации специальных символов := , <= , >= , <> ,

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

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

Диапазон значений Размер памяти

Диапазон значений Размер памяти

II. 4. Этапы решения задачи на компьютере

II. 4. Этапы решения задачи на компьютере

Поэтому, мы должны научиться: 1

Поэтому, мы должны научиться: 1

II. 5. Процедуры ввода и вывода данных

II. 5. Процедуры ввода и вывода данных

Механизм работы процедуры таков: 1

Механизм работы процедуры таков: 1

Writeln(a,’и’,b,‘-целые числа’);

Writeln(a,’и’,b,‘-целые числа’);

Var a,b,s,p:integer; Begin

Var a,b,s,p:integer; Begin

Таблица совместимости типов

Таблица совместимости типов

II. 7. Форматированный вывод вещественных чисел

II. 7. Форматированный вывод вещественных чисел

Readln(a,b); S:=a+b; ar:=s/2; pl:=ar/2;

Readln(a,b); S:=a+b; ar:=s/2; pl:=ar/2;

В среде BorlandPascal выполнимы следующие арифметические операции: +, -, *, /, div (деление нацело: 26 div 7=3), mod (деление с остатком: 26 mod 7=5)

В среде BorlandPascal выполнимы следующие арифметические операции: +, -, *, /, div (деление нацело: 26 div 7=3), mod (деление с остатком: 26 mod 7=5)

Дано: х – целое шестизначное число

Дано: х – целое шестизначное число

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

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

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

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

Writeln(max,'-максимальное'); End

Writeln(max,'-максимальное'); End

If x>y then if x>z then max:=x else max:=z else if y>z then max:=y else max:=z;

If x>y then if x>z then max:=x else max:=z else if y>z then max:=y else max:=z;

II. 10. Составные условия в условном операторе

II. 10. Составные условия в условном операторе

Дано: х, у,z – три целых числа (integer);

Дано: х, у,z – три целых числа (integer);

Даны три числа a, b, c. Определить, какое из них равно d

Даны три числа a, b, c. Определить, какое из них равно d

Перед служебным словом else не ставят « ; »; 2

Перед служебным словом else не ставят « ; »; 2

II. 12. Оператор цикла с параметром

II. 12. Оператор цикла с параметром

Механизм выполнения оператора: 1

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