Раздел1. Основные принципы алгоритмизации и программирования 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Раздел1. Основные принципы алгоритмизации и программирования



КОЛЛЕДЖ СВЯЗИ

                                             

ОСНОВЫ ПРОГРАММИРОВАНИЯ

Часть 1

Учебное пособие

 

 

 для специальностей:

09.02.03 – Программирование в компьютерных системах

 

Самара

2015

 

 

Рассмотрено на заседании ПЦК «Информационных систем и технологий» Председатель _________Шомас Е.А. Протокол №___1_ от _31.08.2015г. Утверждаю: Зам. директора по УВР ____________Логвинов А.В. «___10__»______09________2015г.  

Составил преподаватель: Игнатов А.С.


 

Содержание.

Пояснительная записка…………………………………………………………….……..3

Раздел1. Основные принципы алгоритмизации и программирования…………….5

Тема 1.1.Основные понятия алгоритмизации………………………………………….….5

Тема 1.2 Алгоритмы………………………………………………………………………....8

Тема 1.3 Языки программирования……………………………………………………......10

Раздел 2. Программирование на языке Pascal…………………………………………12

Тема 2.1 Основные элементы языка Pascal………………………………………………..12

Тема 2.2 Переменные и константы. Типы данных……………………………………..…16

Тема 2.3 Операторы языка: ввода-вывода, условные операторы………………………...23

Тема 2.4 Составной оператор. Операторы цикла. Операторы управления……………...26

Тема 2.5 Одномерные и многомерные массивы. Обработка массивов.............................32

Тема 2.6 Операции со строками……………………………………………………………38

Тема 2.7 Процедуры и функции……………………………………………………………42

Тема 2.8 Файлы……………………………………………………………………………...50

Тема 2.9 Указатели и динамическая память…………………………………………….…58

Тема 2.10 Модули……………………………………………………………………………65

Раздел 3. Программирование на языке С++……………………………………………72

Тема 3.1 Лексика языка С++………………………………………………………………..72

Тема 3.2 Константы и строки………………………………………………………….……77

Тема 3.3 Линейные программы на С++. Программирование ветвлений…….……….….81

Тема 3.4 Программирование циклов. Операторы управления…………………………...85

Тема 3.5 Одномерные и многомерные массивы…………………………………………..89

Тема 3.6 Указатели…………………………………………………………………………..93

Список литературы………………………………………………………………………...99

 

 

 

П ОЯСНИТЕЛЬНАЯ ЗАПИСКА

 

Дисциплина «Основы программирования» относитьсяв общепрофессиональный цикл для студентов специальности 09.02.03  – «Программирование в компьютерных системах».

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

Целью изучения дисциплины «Основы программирования» является:

· этапы решения задач на компьютере;

· типы данных;

· базовые конструкции изучаемых языков программирования;

· принципы структурного и модульного программирования;

· принципы объектно-ориентированного программирования.

.

Задачи дисциплины:

· работать в среде программирования;

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

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

Методика изучения дисциплины строиться из следующих элементов:

- теоретическая часть (лекция, урок);

- лабораторно-практические занятия;

- самостоятельная работа с книгой и конспектами лекций;

- домашние задание;

- аудиторная контрольная работа;

- консультации.

Цель лекции - сообщение новых знаний, систематизация и обобщение накоплен­ных, развитие познавательных и профессиональных интересов.

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

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

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

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

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

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

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

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

для специальностей:

Рабочая программа рассчитана на:

Максимальная учебная нагрузка обучающегося 210 часов, в том числе:

- обязательная аудиторная учебная нагрузка – 140 часа;

в том числе:

лабораторные занятия – 70 часа;

самостоятельная работа – 70 часов;

Итоговая аттестация в форме экзамена

После изучения предмета «Основы программирования" студент должен:

· иметь представление о роли и месте знаний по дисциплине «Основы программирования»;

· знать основные понятия и принципы программирования;

· уметь работать с языками программирования- Pascal, C++, Delphi.

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

 

 

Кон.                                          End.

Здесь использовано следующее равенство:

 

 

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

Заголовок программы начинается со слова Program (програм­ма), за которым следует произвольное имя, придуманное про­граммистом (division — деление). Раздел описания переменных на­чинается со слова Var (variables — переменные), за которым сле­дует список переменных. Тип указывается после двоеточия словом integer — целый. Начало и конец раздела операторов програм­мы отмечаются словами Begin (начало) и End (конец). В конце программы обязательно ставится точка.

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

Операторы присваивания в Паскале записываются так же, как в АЯ. Знак умножения — * (звездочка).

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

Необходимо строгое соблюдение правил правописания (син­таксиса) программы. В частности, в Паскале однозначно опреде­лено назначение знаков пунктуации. Точка с запятой (;) ставится в конце заголовка программы, в конце раздела описания пере­менных, после каждого оператора. Перед словом End точку с за­пятой можно не ставить. Запятая (,) является разделителем эле­ментов во всевозможных списках: списке переменных в разделе описания, списке вводимых и выводимых величин.

Строгий синтаксис в языке программирования необходим преж­де всего для транслятора. Транслятор — это программа, которая испол­няется формально. Если, допустим, разделителем в списке перемен-

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

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

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

«Оттранслируем» алгоритм вычисления факториала натураль­ного числа (N \) на Паскале.

Из этого примера, во-первых, видно, как записывается на Пас­кале оператор цикла с предусловием (цикл-пока):

While <условие выпог.нения> Do <тело цикла>

(while — пока, Do — делать). Если тело цикла содержит последо­вательность операторов, то говорят, что оно образует составной оператор, в начале и в конце которого надо писать Begin и End. Служебные слова Begin и End часто называют операторными скоб­ ками, которые объединяют несколько операторов в один состав­ной. Если же тело цикла — один оператор (не составной), то опе­раторных скобок не требуется. Тогда транслятор считает, что тело цикла заканчивается на ближайшем знаке «;».

Во-вторых, из примера видно, что в Паскале нет специальных слов для обозначения начала цикла (нц) и конца цикла (кц). На все случаи есть универсальные слова Begin и End.

Рассмотрим еще один примерного уравнения.

В этой программе по сравнению с предыдущими появилось много новых элементов. Имя вещественного типа в Паскале —r e a l.

Цикл с постусловием (цикл-до) программируется оператором Repeat <тело цикла> Until <условие окончания>

(здесь Repeat — повторять, Until — до). Тело цикла может быть как одиночным, так и составным оператором, однако употребле­ния Begin и End не требуется, поскольку сами слова Repeat и Until выполняют роль операторных скобок.

Знак не равно в Паскале пишется так: <>, знак больше или рав­но: >=.

Правила записи арифметических выражений мы подробно рас­смотрим немного позже. В формулах вычисления корней исполь­зуется стандартная функция квадратного корня (Vx), которая в Паскале записывается так: sqrt (x). Порядок выполнения опера­ций в выражении определяется скобками и старшинством опера­ций. Старшинство операций такое же, как и в алгебре. Операции одинакового старшинства выполняются в порядке их записи (сле­ва направо).

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

If <условие> Then <оператор 1> Else <оператор 2>

(здесь If — если, Then — то, Else — иначе). Операторы 1 и 2 могут быть как простыми, так и составными. Составной оператор следует заключать в операторные скобки Begin и End.

Так же, как и в Алгоритмическом языке, возможно использо­вание неполной формы условного оператора:

if <условие> then <оператор>

Характерной чертой данной программы является использова­ние в тексте комментариев. Комментарий — это любая последо­вательность символов, заключенных в фигурные скобки {...}. Мож­но употреблять также следующие ограничители комментариев (*...*). Комментарий не определяет никаких действий программы и является лишь пояснительным текстом. Он может присутство­вать в любом месте программы, где можно поставить пробел. Про­граммист пишет комментарии не для компьютера, а для себя. Комментарий придает тексту программы большую ясность. Хо­рошо откомментированные программы называют самодокумен­тированными. Во многих подобных программах объем коммента­риев превышает объем вычислительных операторов.

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

Чтобы выполнить программу на ЭВМ, ее нужно ввести в память, оттранслировать и исполнить. Для того чтобы проделать всю эту ра­боту, на компьютере должны быть специальные средства програм­много обеспечения. На ПК они составляют систему Турбо Паскаль.

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

Латинские буквы: от А до Z (прописные) и от а до z (строчные).

Цифры: О, 1, 2, 3, 4, 5, 6, 7, 8, 9.

Шестнадцатеричные цифры: О, 1, 2, 3, 4, 5, 6, 7, 8, 9, А, В, С, D, E, F.

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

Следующие комбинации специальных символов являются еди­ными символами (их нельзя разделять пробелами):

:= знак присваивания;             <= меньше или равно;

>= больше или равно;         (* *)    ограничители комментариев

<> не равно;                                  (используются наряду с { });

(..) эквивалент [ ].

Пробелы — символ пробела (ASCII-32) и все управляющие сим­волы кода ASCII (от 0 до 31).

К спецсимволам относятся служебные слова, смысл которых определен однозначно. Служебные слова не могут быть использо­ваны для других целей. С точки зрения языка это единые символы. Вот список служебных слов Турбо Паскаля:

 

absolute end inline procedure type
and external interface program unit
array file interrupt record until
begin for label repeat uses
case forward mod set var
const function nil shl while
div goto not shr with
do if of string xor
downto implementation or then  
else in packed to  

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

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

 

Расшифровать это можно так: идентификатор — это любая пос­ледовательность букв и цифр, начинающаяся с буквы. В Турбо Пас­кале к буквам приравнивается также знак подчеркивания. Строч­ные и прописные буквы в идентификаторах и служебных словах не различаются. Например: max, мах, Мах и тАх — одно и то же имя.

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

Комментарии. Следующие конструкции представляют собой комментарии и поэтому игнорируются компилятором:

{любой текст, не содержащий символ «}» }

(* любой текст, не содержащий символы «*)»*)

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

Строка, начинающаяся с символов {$ или (*$, является дирек­тивой компилятора. За этими символами следует мнемоника ко­манды компилятора.

 

 

Тема 2.2 Переменные и константы. Типы данных.

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

В стандартном Паскале отсутствует строковый тип. Кроме того, в Турбо Паскале целые и вещественные — это группы типов. В стар­ших версиях Турбо Паскаля существует процедурный тип и тип объект.

Каждый тип имеет свой идентификатор.

В табл. 2  представлена информация о простых типах данных, определенных в Турбо Паскале. Для вещественных типов в скоб­ках указано количество сохраняемых значащих цифр мантиссы в десятичном представлении числа.

Идентификатор Длина, байт Диапазон (множество) значений

Целые типы

Integer 2 -32768...32767
Byte 1 0...255
Word 2 0... 65535
Shortint 1 -128... 127
Longint 4 -2147483648...2147483647

Вещественные типы

Real 6 2,9-10~39... 1,7-1038    (11 - 12)
Single 4 1,5-10~45...3,4-1038     (7-8)
Double 8 5-10"324... 1,7-Ю308      (15-16)
Extended 10 3,4-10-4932... 1,Ы04932 (19-20)

Логический тип

Boolean 1 true, false

Символьный тип

Char 1 все символы кода ASCII

табл. 2

 

В стандарте Паскаля из вещественных типов определен только тип Real; из целых типов — Integer.

Типы Single, Double, Extended употребляются в Паскаль-программах только в том случае, если ПК снабжен сопроцессо­ром «плавающей арифметики» (для процессоров IBM PC, начи­ная с Intel-80486 и старше, это условие всегда выполняется).

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

Описание переменных. Для всех переменных величин, исполь­зуемых в программе, должны быть указаны их типы. Это делается в разделе переменных программы. Структура раздела переменных показана на рис. 5.

 

Пример раздела переменных программы:

Var m,n,k: Integer; х,у,z: Real; Symbol: Char;

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

Целые десятичные константы записываются в обычной форме целого числа со знаком или без знака, например 25, -24712, 376.

Целые шестнадцатеричные константы записываются с префик­сом $. Они должны находиться в диапазоне от $00000000 до SFFFFFFFF.

Вещественные константы с фиксированной точкой записывают­ся в обычной форме десятичного числа с дробной частью. Разде­литель целой и дробной части — точка, например: 56.346, 0.000055, -345678.0.

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

<мантисса>Е<порядок>

Здесь мантисса — целое или вещественное число с фиксиро­ванной точкой, порядок — целое число со знаком или без, на­пример 7Е-2 (7-e-2), 12.25Е6 (12,25-106), 1Е-25 (10"25).

Символьная константа — любой символ алфавита, заключен­ный в апострофы, например, 'W, '!', '9'.

Логическая константа — одно из двух слов: true, false.

Строковая константа — строка символов, заключенная в апострофы, например Turbo Pascal', 'Ответ:', '35-45-79'. Максимальная длина — 255 символов.

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

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

В Турбо Паскале имеется ряд имен, зарезервированных за оп­ределенными значениями констант. Ими можно пользоваться без предварительного определения в программе (табл. 3).

Таблица 3

 

Идентификатор Тип Значение
True boolean истина
False boolean ложь
Maxlnt integer 32767

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

Для описания типов пользователя в Паскале существует раздел типов, структура которого представлена на рис. 8.

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

Определенное имя типа затем используется для описания пе­ременных. Например:

Type Gaz=(C,0,N, F);

Metal=(Fe,Co,Na,Cu, Zn); Var Gl,G2,G3:Gaz;

Metl,Met2:Metall; Day:(Sun,Mon,Tue,Wed,Thu,Fri,Sat)

Здесь Gaz и Metal — имена перечисляемых типов, которые ставятся в соответствие переменным Gl, G2, G3 и Metl, Met2. Переменной Day назначается перечисляемый тип, которому не присвоено имя.

Значения, входящие в перечисляемый тип, являются констан­тами. Действия над ними подчиняются правилам, применимым к константам. Каждое значение в перечисляемом типе занимает в памяти 2 байта. Поэтому число элементов не должно превышать 65535.

Перечисляемый тип — упорядоченное множество. Его элемен­ты пронумерованы начиная от 0 в порядке следования в описа­нии.

В программе, в которой присутствует данное выше описание, возможен такой фрагмент:

if Day=Sun then WriteLn('Ура!Сегодня выходной!');

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

Рис. 10

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

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

Пример:

Type Numbers=l..31;

Alf='A'..'Z'; Var Data:Numbers;;

Bukva:Alf;

 

Форматы процедуры Write

/ — выводится десятичное представление величины /, начиная с позиции расположения курсора:

Значение /               Оператор               Результат

134                           Write(I)               134

287                           Write(1,1,1)        287287287

1:Р — выводится десятичное представление величины /в край­ние правые позиции поля шириной Р:

Значение /               Оператор                    Результат

134                           Write(I:6)               134

312                           Write ((I + I):7)           624

R — в поле шириной 18 символов выводится десятичное пред­ставление величины R в формате с плавающей точкой. Если R > 0,0, используется формат _#.##########Е*##. Если R < 0,0, то фор­мат имеет вид _-#.##########Е*##:

Значение R               Оператор         Результат

715.432                   Write(R)         _7.1543200000Е+02

-1.919Е+01              Write(R)          _-1.9190000000Е+01

R: Р — в крайние правые позиции поля шириной Р символов выводится десятичное представление значения R в нормализо­ванном формате с плавающей точкой. Минимальная длина поля вывода для положительных чисел составляет 7 символов, для от­рицательных — 8 символов. После точки выводится по крайней мере одна цифра:

Значение R               Оператор            Результат

511.04                      Write(R:15)    5.110400000Е+02

46.78                        Write(-R:12)      -4.67800Е+01

R: P: Q — в крайние правые позиции поля шириной Р симво­лов выводится десятичное представление значения R в формате с фиксированной точкой, причем после десятичной точки вы­водится Q цифр (0 < Q< 24), представляющих дробную часть числа. Если Q— 0, то ни дробная часть, ни десятичная точка не выво­дятся. Если Q > 24, то при выводе используется формат с плава­ющей точкой:

Значение R                Оператор                Результат

511.04                                     Write(R:8:4)               511.0400

-46.78                                     Write(R:7:2)               _-46.78

Ch: P — в крайнюю правую позицию поля шириной Р выво­дится значение СИ:

Значение СИ               Оператор                 Результат

'X'                              Write(Ch:3)          __ X

'!'                                Write(Ch:2,Ch:4) _!___!

S — начиная с позиции курсора выводится значение S:

Значение S                Оператор                 Результат

'Day N'                   Write(S)             Day N

'RRDD'                     Write(S,S)         RRDDRRDD

S. P — значение S выводится в крайние правые позиции поля шириной Р символов:

Значение S                Оператор                 Результат

'Day N'                                    Write(S:10)                    .__ Day N

'RRDD'                                    Write(S:5,S:5)          _RRDD_RRDD

В — выводится результат выражения В: true или false, начиная с текущей позиции курсора:

Значение В                Оператор                 Результат

True                            Write (В)              True

False                           Write(В,Not B)    FalseTrue

B: P — в крайние правые позиции поля шириной Рсимволов выводится результат булевского выражения:

Значение В                 Оператор                  Результат

True                             Write(В:6)               —True

False                            Write (В: б,Not В: 7) _False____ True

 

Тема 2.4 Составной оператор. Операторы цикла. Операторы управления.

Алгоритмическая структура ветвления программируется в Пас­кале с помощью условного оператора. Раньше мы его описывали в таком виде:

If <условие> Then <оператор 1> Else <оператор 2>;

Кроме того, возможно использование неполной формы услов­ного оператора:

If <условие> Then <оператор>;

Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы (рис. 13).

То, что мы раньше называли условием, есть логическое выраже­ ние, которое вычисляется в первую очередь. Если его значение рав­но true, то будет выполняться <оператор 1> (после Then), если

Рис. 13

false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).

Пример 1. По длинам трех сторон треугольника а, Ь, с вычис­лить его площадь.

Для решения задачи используется формула Герона

у]р(р-а)(р-Ь)(р-с),

где р = (а + b + с) /2 — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сто­рон треугольника: длина каждой стороны должна быть меньше длин двух других сторон.

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

Program Geron;

Var A,B,C,P,S: Real;

Begin

WriteLn('Введите длины сторон треугольника:'); Write('a='); ReadLn(A) Write Cb='); ReadLn (В) Write('c='); ReadLn(C) If (A>0) And (B>0) And (C>0) And (A+B>C) And (B+OA) And (A+OB) Then Begin

P:=(A+B+C)/2;

S:=Sqrt(P*(P-A)*(P-B)* (P-C)); WriteLn('Площадь=',S) End Else WriteLn('Неверные исходные данные') End.

Теперь рассмотрим синтаксическую диаграмму оператора цикл- пока, или цикл с предусловием (рис. 14).

Сначала вычисляется <Логическое выражение > Пока его значение равно t r u e, выполняется <Оператор> — тело цикла. Здесь <Оператор> может быть как простым, так и составным.

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

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

S:=0;

I: = l;

While (l/I>=Eps) And (KMaxInt) Do

Begin

S:=S+1/I;

I:=I+1

End;

Синтаксическая диаграмма оператора цикл-до, или цикл с постусловием, представлена на рис. 15.

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

S:=0;

1:=1;

Repeat

S:=S+1/I; I:=I+1

Until (1/KEps) Or (I>=MaxInt);


Тема 2.4 Составной оператор. Операторы цикла. Операторы управления.

    Алгоритмическая структура ветвления программируется в Паскале с помощью условного оператора. Раньше мы его описывали в таком виде:

If  <условие> Then  <оператор 1> Else  <оператор 2>;

 

Кроме того, возможно использование неполной формы условного оператора: 

If  <условие> Then  <оператор>;

 

    Теперь дадим строгое описание условного оператора в форме синтаксической диаграммы (рис. 16).

     То, что мы раньше называли условием, есть логическое выражение, которое вычисляется в первую очередь. Если его значение равно true, то будет выполняться <оператор 1> (после Then), если

 

false, то <оператор 2> (после Else) для полной формы или сразу следующий оператор после условного для неполной формы (без Else).

     Пример 1. По длинам трех сторон треугольника а, b, с вычислить его площадь. 

 Для решения задачи используется формула Герона

 

где р = (а + b + с) /2 — полупериметр треугольника. Исходные данные должны удовлетворять основному соотношению для сторон треугольника: длина каждой стороны должна быть меньше длин двух других сторон. 

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

Program Geron; 

Var A,B,C,P,S: Real;

Begin

WriteLn('Введите длины сторон треугольника:');

Write ('a='); ReadLn(A)

Write('b='); ReadLn(В)

Write('c='); ReadLn(С)

If (A>0) And (B>0) And (C>0) And (A+B>C) And (B+OA) And (A+OB)

  Then Begin

            P:=(A+B+C)/2;

            S:=Sqrt(P*(P-A)*(P-B)* (P-C));

           WriteLn('Площадь=',S)

End

Else WriteLn('Неверные исходные данные')

End.

Теперь рассмотрим синтаксическую диаграмму оператора циклока, или цикл с предусловием (рис. 17). 

 

 

Сначала вычисляется <Логическое выражение Пока его значение равно true, выполняется <Оператор> — тело цикла. Здесь <Оператор> может быть как простым, так и составным. 

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

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

S:=0;

 I:=l; 

While (l/I>=Eps) And (KMaxInt) Do 

Begin

 S:=S+1/I; 

  I:=I+1 

End;

 Синтаксическая диаграмма оператора цикл-до, или цикл с постусловием, представлена на рис. 18.

 

 

Исполнение цикла повторяется до того момента, когда <Логическое выражение> станет равным true. 

Предыдущая задача с использованием цикла с постусловием решается так:

S:=0; 

1:=1; 

Repeat

       S:=S+1/I; I:=I+1

Until (1/I<Eps) Or (I>=MaxInt);


Цикл по параметру

       Рассмотрим следующую простую задачу: требуется вычислить сумму целых чисел от М до N путем прямого суммирования. Здесь M и N — целые числа. Задачу можно сформулировать так

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

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

  Здесь целая переменная I последовательно принимает значения в диапазоне от М до N. При каждом значении I выполняется тело цикла. После последнего выполнения цикла при I= N происходит выход из цикла на продолжение алгоритма. Цикл выполняется хотя бы один раз, если M<N, и не выполняется ни разу при М > N.

 

 

 

 

   В программе используется оператор цикла For, синтаксическая диаграмма которого представлена на рис. 21.

 

 

 
    Выполнение оператора For в первом варианте (То) происходит по следующей схеме:

        1. Вычисляются значения <Выражения 1> и <Выражения 2>.

Это делается только один раз при входе в цикл. 

        2. Параметру цикла присваивается значение <Выражения 1>.

        3. Значение параметра цикла сравнивается со значением вы­ ражения 2>. Если параметр цикла меньше или равен этому значе­ нию, то выполняется тело цикла, в противном случае выполне­ ние цикла заканчивается.

        4. Значение параметра цикла изменяется на следующее значение в его типе (для целых чисел — увеличивается на единицу); происходит возврат к пункту 3. Оператор цикла For объединяет в себе действия, которые при использовании цикла while выполняют различные операторы: присваивание параметру начального значения, сравнение с ко­ начнем значением, изменение на следующее. 

   Как известно, результат суммирования целых чисел не зависит от порядка суммирования. Например, в рассматриваемой задаче числа можно складывать и в обратном порядке, т.е. от./V до М (N S М). Для этого можно использовать второй вариант оператора цикла For:

 

    Слово DownTo буквально можно перевести как «вниз до». В таком случае параметр цикла изменяется по убыванию, т.е. при каждом повторении цикла параметр изменяет свое значение на предыдущее (равносильно i:=pred(i)). Тогда ясно, что цикл не выполняется ни разу, если N < М. 

  Работая с оператором For, учитывайте следующие правила: 

• параметр цикла не может иметь тип Real; 

• в теле цикла нельзя изменять переменную «параметр цикла»;

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



Поделиться:


Последнее изменение этой страницы: 2021-04-05; просмотров: 100; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.15.221.67 (0.23 с.)