» » » Алгоритмы и программы

Презентация на тему Алгоритмы и программы


Здесь Вы можете скачать готовую презентацию на тему Алгоритмы и программы. Предмет презентации: Информатика. Красочные слайды и илюстрации помогут вам заинтересовать своих одноклассников или аудиторию. Для просмотра содержимого презентации воспользуйтесь плеером, или если вы хотите скачать презентацию - нажмите на соответствующий текст под плеером. Презентация содержит 83 слайда.

Слайды презентации

Слайд 1
Автор : ФЕДОРОВ АЛЕКСАНДР МИХАЙЛОВИЧ - учитель информатики Кюкяйской средней общеобразовательной школы Сунтарского улуса Республики Саха, 2010 год
Слайд 2
Компьютерная программа представляет собой список команд , которые указывают компьютеру , что он должен делать . Некоторые программы – системные – управляют основными действиями компьютера . Такие программы постоянно хранятся в ПЗУ , встроенном в компьютер . Другие программы – прикладные – подробно указывают компьютеру , что нужно делать при выполнении определенной работы , например при обработке текста . Такие программы обычно записываются на диске и загружаются в компьютер , когда нужно . Все программы должны быть написаны очень тщательно , потому что ошибки в них ведут к неправильной работе компьютера .
Слайд 3
ПРОГРАММНОЕ ОБЕСПЕЧЕНИЕ КОМПЬЮТЕРА Каждая программа предназначена для практического использования : играть , сочинять музыку , производить вычисления или рисовать . Программы такого типа называются прикладными . Прикладная программа обычно хранится на магнитной дискете или на CD. Эта программа представляет собой набор команд , вводимых в память компьютера . Существует и другой тип программы : программа , которая управляет информацией , хранящейся на диске , называется дисковой операционной системой – ДОС (DOS). ПЗУ содержит , как правило , лишь необходимый минимум информации , а остальная часть ОС может быть считана с системного диска . Оперативная память – это ЗУ , предназначенное для информации , непосредственно участвующей в процессе выполнения операций , выполняемых процессором . Процессор и память – это главные компоненты компьютера . Компьютер , обработав информацию из оперативной памяти , записывает ее во внешнюю память и “ листает книжку ” дальше , считывая в оперативную память очередную порцию информации . Для ПК имеются внешние носители информации : жесткие , гибкие , лазерные , магнитооптические диски , магнитные ленты и т . д .
Слайд 4
ПЕРИФЕРИЙНЫЕ УСТРОЙСТВА ( УСТРОЙСТВА ВВОДА – ВЫВОДА ) Клавиатура или манипулятор мышь - для ввода задания ПК Сканер – ввод графического изображения Дисковод – для получения информации из внешней памяти Монитор – для вывода итогов работы ПК на экран Принтер – для вывода на бумагу Проектор – для вывода на экран слайдов Модем – “ модулятор – демодулятор ” преобразует цифровые сигналы “ своего компьютера в аналоговые и посылает их в телефонную сеть . На конце телефонной линии другой модем преобразует аналоговые сигналы в цифровые .
Слайд 5
Основы алгоритмического управления Совокупность всех команд , которые может выполнить конкретный БИ , называется системой команд этого исполнителя . А совокупность всех действий , которые он может выполнить в ответ на эти команды , называется системой допустимых действий исполнителя . Алгоритм – это организованная последовательность допустимых для некоторого исполнителя действий , приводящая к определенному результату , а программа – это запись алгоритма на языке конкретного БИ . Как правило , алгоритмы пишутся для человека . При этом можно применять какие- то сокращения слов или заменять одни слова другими . Важно только , чтобы за этими словами стояли действия , допустимые для данного исполнителя . Примеры : 1. Как открыть дверь . 2. Как приготовить хороший чай . 3. Как приготовить пельмени . БИ – бездумный исполнитель ( прикладные программы , любой компьютер со своей специфичной системой команд) . Основной задачей программирования является разработка проекта до такого уровня , чтобы в нем остались только стандартные конструкции и операторы из системы команд БИ , для которого пишется программа . .
Слайд 6
Исправьте алгоритм , чтобы предотвратить несчастный случай Налить в чайник воду . Открыть кран газовой горелки . Поставить чайник на плиту . Ждать , пока вода не закипит . Поднести спичку к горелке . Зажечь спичку . Выключить газ . АЛГОРИТМ ПОЛУЧЕНИЯ КИПЯТКА
Слайд 7
Алгоритм и его свойства Алгоритмы – это организованная последовательность действий , допустимых для некоторого БИ . Алгоритм не роскошь , а средство достижения цели . Линейный алгоритм – набор команд , выполняемых последовательно во времени друг за другом . начало А , В , С D=AB/ В+ С D конец
Слайд 8
Разветвляющийся алгоритм Разветвляющийся алгоритм– алгоритм , содержащий хотя бы одно условие , в результате проверки которого БИ переходит на один из двух возможных шагов . Прове рка процесс да нет проверк а Процесс 1 процесс2 ответвление , раздвоение , переключение ( несколько процессов )
Слайд 9
Циклический алгоритм Многократное повторение одного и того же действия над новыми исходными данными . Цикл программы – последовательность команд ( серия , тело цикла ) , которая которая может выполняться до удовлетворения некоторого условия . Проверка условия повторения Тело цикла Проверка в начале цикла Тело цикла Проверка условия повторения Проверка в конце цикла
Слайд 10
Отправляйся в ближайший магазин , где не был СПРОСИ АРАХИС Есть ли арахис в магази не Купи арахис Иди домой БЛОК-СХЕМА программы покупки арахиса Да Нет
Слайд 11
b=4 b:=b+1 a:=a*2 Определите значение переменной a после выполнения фрагмента алгоритма a:=1 b:=0 да нет * Умножение := присваивание
Слайд 12
Алгоритмический язык АЯ – это система обозначений формальной записи алгоритмов , предназначенных для анализа их исполнителем – человеком , а затем и для реализации на машине . В общем виде имеются операторы ( описание однородных этапов изучаемого процесса ) четырех типов : 1. Действующие ; определяют изменение в объекте . 2. Логические ; описывают условия , от которых зависит направление процесса . 3. Варьирующие ; определяют изменения вспомогательных величин , называемых параметрами . 4. Операторы перехода ; определяют порядок выполнения операторов первых трех типов . Кроме операторов , применяются знаки начала и конца процесса . Оператор предписывает исполнителю алгоритма команду . Команды обозначают одним полным или сокращенным словом , а также определенным значком . Эти обозначения команд назыв . c лужебными словами и символами . Алгоритм вычисления суммы пяти чисел алг сумма ( цел S, цел N, таб M[1:5]) арг N рез S S:=0 - действующий N:=5 - действующий нач цел i - знак начала процесса i:=0 - действующий пока i <=N -логический нц - перехода i:=i+1 - действующий S:=S+M[i] - действующий кц -перехода кон - знак конца процесса
Слайд 13
БИБЛИОТЕКА АЛГОРИТМОВ
Слайд 14
МНОГОКРАТНОЕ СУММИРОВАНИЕ ( ПРОИЗВЕДЕНИЕ ) =1+2+3+ …+n; =1 *2*3* …*n =n!( факториал ) 1. 2. 3. =x*x*x*…*x= k - называется параметром суммирования( умножения ) k изменяется по закону k:=k+1 C уммирование : S:=0 { начальное значение суммы } нц для k от а до b S:=S+f k кц Ум н о жение : Р :=1 { начальное значение произведения } нц для k от a до b P:=P*f k кц а – начальное значение параметра k, b- конечное значение k f k – k- й член ( k- е слагаемое ( сомножитель )). алг задача1 ( цел n,s ) дано n надо s нач цел k s:=0 нц для k от 1 до n s:=s+k кц кон алг задача2( цел n, fact) дано n надо fact нач цел k f act :=1 нц для k от 1 до n fact:= fact*k кц кон Для задачи3 составить алгоритм самим
Слайд 15
Язык программирования ПАСКАЛЬ 1 . Начальные операторы Program < имя >; begin end 2. Описание числовых переменных Var < список переменных > : integer ; - целочисленные переменные Var < список переменных >: real; - вещественные 3 . Оператор условия IF (< условие >) THEN begin < оператор >; … end ELSE begin < оператор > … end; Конструкция ИНАЧЕ ( ELSE ) может отсутствовать . В языке ПАСКАЛЬ необходимо после последнего оператора END поставить точку с запятой .
Слайд 16
4. Оператор цикла по условию WHILE (< условие >) DO begin < оператор > … end; 5. Оператор цикла с параметром FOR < переменная > := < арифм . выражение > TO begin < оператор > … end; 6. Работа с подпрограммами Procedure < имя > ( < список параметров с указанием их типов >) begin < оператор > … end; Для возврата в главную программу служит оператор EXIT; 7. Операторы ввода и вывода информации READLN( < имя переменной >); WRITE(< сообщение >,< имя переменной >);
Слайд 17
Алгоритм вычисления члена ряда Фибоначчи PROGRAM Fib; VAR A1,A2,N,R,I: INTEGER; BEGIN READLN(N); A1:=0; A2:=1; FOR I:=1 TO N DO BEGIN R:= A1+A2; A1:=A2; A2:=R; END; WRITE (N, ̕- й член равен̕ , A2) END.
Слайд 18
СИМВОЛЬНОЕ КОДИРОВАНИЕ C читая , что каждый символ кодируется 16 – ю битами , оцените информационный объем следующей пушкинской фразы в кодировке Unicode: Привычка свыше нам дана : Замена c частию она . Бит – 0 или 1 ; Байт – последовательность битов ( 8 или 16 битов ) , один символ соответствует 1 байту . 1 килобайт = 1024 байта , 1 мегабайт = 1024 кбайт , 1 гигабайт = 1024 мегабайт . Световое табло состоит из лампочек , каждая из которых может находиться в двух состояниях ( “ вкл ” и “ выкл ”) . Какое наименьшее количество лампочек должно находиться на табло , чтобы с его помощью можно было передать 50 различных сигналов ? Значение выражения 16+8 *2 в двоичной системе счисления равно : --------------------?
Слайд 19
т ф Диаграммы I) II) В цехе трудятся рабочие трех специальностей – токари ( Т ), слесари (C) и фрезеровщики . Каждый рабочий имеет разряд не меньший второго и не больший пятого . На диаграмме I отражено количество рабочих с различными разрядами , а на диаграмме II – распределение рабочих по специальностям . Каждый рабочий имеет только одну специальность и один разряд . Имеются четыре утверждения : А ) все рабочие третьего разряда могут быть токарями Б) все рабочие третьего разряда могут быть фрезеровщиками В ) все слесари могут быть пятого разряда Г ) все токари могут быть четвертого разряда
Слайд 20
Кобол , Паскаль , ПЛ -1 , Си , Фортран , Ассемблер и т . д .
Слайд 21
Язык программирования ПАСКАЛЬ Язык Паскаль был разработан Никлаусом Виртом в 1970 г. как язык со строгой типизацией и интуитивно понятным синтаксисом. В 80-е годы наиболее известной реализацией стал компилятор Turbo Pascal фирмы Borland, в 90-е ему на смену пришла среда программирования Delphi, которая стала одной из лучших сред для быстрого создания приложений под Windows. Delphi ввела в язык Паскаль ряд удачных объектно-ориентированных расширений, обновленный язык получил название Object Pascal PascalABC.NET - достаточно зрелая среда. Ее прототип - учебная система Pascal ABC - появилась в 2002 году и достаточно активно используется в российских школах. PascalABC.NET - развивающаяся среда. Ведутся разработки новых языковых возможностей, новых библиотек и новых языков программирования, которые будут интегрированы в общую среду
Слайд 22
Структура программы: обзор Программа на языке PascalABC.NET имеет следующий вид: program имя программы; раздел uses раздел описаний begin   операторы end . Первая строка называется заголовком программы и не является обязательной. Раздел uses начинается с ключевого слова uses , за которым следует список имен модулей и пространств имен .NET, перечисляемых через запятую. Раздел описаний может включать разделы описания переменных , констант , меток , типов , процедур и функций , которые следуют друг за другом в произвольном порядке. Далее следует блок begin / end , внутри которого находятся операторы, отделяемые один от другого символом "точка с запятой". Раздел uses и раздел описаний могут отсутствовать. Например: program MyProgram; var   a,b: integer;   r: real; begin   readln(a,b);   x := a/b;   writeln(x); end ;
Слайд 23
Описание переменных Переменные могут быть описаны в разделе описаний, а также непосредственно внутри любого блока begin / end . Раздел описания переменных начинается со служебного слова var , после которого следуют элементы описания вида список имен: тип; или имя: тип := выражение; или имя := выражение; Имена в списке перечисляются через запятую. Например: var a,b,c: integer;   d: real := 3.7;   s := 'Pascal forever';   al := new ArrayList;   p1 := 1; В последних трех случаях тип переменной определяется по типу правой части. Переменные могут описываться непосредственно внутри блока . Внутриблочные описания переменных имеют тот же вид, что и в разделе описаний, с тем исключением, что в каждой секции var может быть лишь один элемент описания: begin   var a1,a2,a3: integer; var s := ''; ... end . Кроме того, переменные-параметры цикла могут описываться в заголовке операторов for и foreach
Слайд 24
Описание констант Раздел описания именованных констант начинается со служебного слова const , после которого следуют элементы описания вида имя константы = значение; или имя константы : тип = значение; Например: const   Pi = 3.14;   Count = 10;   Name = 'Mike';   DigitsSet = ['0'..'9'];   Arr: array [1..5] of integer = (1,3,5,7,9);   Rec: record name: string ; age: integer end = (name: ' Иванов'; age: 23);   Arr2: array [1..2,1..2] of real = ((1,2),(3,4));
Слайд 25
Описание меток Раздел описания меток начинается с зарезервированного слова label , после которого следует список меток, перечисляемых через запятую. В качестве меток могут быть использованы идентификаторы и положительные целые числа: label a1,l2,777777;
Слайд 26
Описание типов Раздел описания типов начинается со служебного слова type , после которого следуют строки вида имя типа = тип; Например, type myint = integer;   arr10 = array [1..10] of integer;   pinteger = ^integer;   A = class     i: integer; constructor Create(ii: integer); begin       i:=ii; end ; end ; При описании рекурсивных структур данных указатель на тип может фигурировать раньше описания самого типа в определении другого типа: type   PNode = ^TNode;   TNode = record     data: integer;     next: PNode; end ; При этом важно, чтобы определения обоих типов находились в одном разделе type . В отличие от Delphi Object Pascal следующее рекурсивное описание верно: type   TNode = record     data: integer;     next: ^TNode; end ; Отметим, что для ссылочных типов (классов) разрешается описание поля с типом, совпадающим с типом текущего класса: type   Node = class     data: integer;     next: Node; end ;
Слайд 27
Область действия идентификатора Любой используемый в блоке идентификатор должен быть предварительно описан. Идентификаторы описываются в разделе описаний. Идентификаторы для переменных могут также описываться внутри блока. Основная программа, подпрограмма, блок , модуль , класс образуют так называемое пространство имен - область в программе, в которой имя должно иметь единственное описание. Таким образом, в одном пространстве имен не может быть описано двух одинаковых имен (исключение составляют перегруженные имена подпрограмм ). Кроме того, в сборках .NET имеются явные определения пространств имен. Область действия идентификатора (т.е. место, где он может быть использован) простирается от момента описания до конца блока, в котором он описан. Область действия глобального идентификатора, описанного в модуле, простирается на весь модуль, а также на основную программу, к которой данный модуль подключен в разделе uses . Кроме этого, имеются переменные, определенные в блоке и связанные с некоторыми конструкциями ( for , foreach ). В этом случае действие переменной i простирается до конца соответствующей конструкции. Так, следующий код корректен: var a: array of integer := (3,5,7); for i: integer := 1 to 9 do   write(a[i]); foreach i: integer in a do   write(i); Идентификатор с тем же именем , определенный во вложенном пространстве имен, скрывает идентификатор, определенный во внешнем пространстве имен.
Слайд 28
Например, в коде var i: integer; procedure p; var i: integer; begin   i := 5; end ; значение 5 будет присвоено переменной i , описанной в процедуре p ; внутри же процедуры p сослаться на глобальную переменную i невозможно. Переменные, описанные внутри блока, не могут иметь те же имена, что и переменные из раздела описаний этого блока. Например, следующая программа ошибочна: var i: integer; begin   var i: integer; // ошибка end . В производных классах, напротив, можно определять члены с теми же именами, что и в базовых классах, при этом их имена скрывают соответствующие имена в базовых классах. Для обращения к одноименному члену базового класса из метода производного класса используется ключевое слово inherited : type   A= class     i: integer; procedure p; begin       i := 5; end ; end ;   B= class (A)     i: integer; procedure p; begin       i := 5; inherited p; end ; end; -
Слайд 29
Алгоритм поиска имени в классе следующий: вначале имя ищется в текущем классе, затем в его базовых классах, а если не найдено, то в глобальной области видимости. Алгоритм поиска имени в глобальной области видимости при наличии нескольких подключенных модулей следующий: вначале имя ищется в текущем модуле, затем, если не найдено, по цепочке подключенных модулей в порядке справа налево. Например, в программе uses unit1,unit2; begin   id := 2; end . описание переменной id будет искаться вначале в основной программе, затем в модуле unit2, затем в модуле unit1. При этом в разных модулях могут быть описаны разные переменные id. Данная ситуация означает, что unit1 образует внешнее пространство имен, пространство имен unit2 в него непосредственно вложено, а пространство имен основной программы вложено в unit2. Если в последнем примере оба модуля - unit1 и unit2 - определяют переменные id, то рекомендуется уточнять имя переменной именем модуля, используя конструкцию ИмяМодуля . Имя : uses unit1,unit2; begin   unit1.id := 2; end .
Слайд 30
Обзор типов Типы в PascalABC.NET подразделяются на простые, строковые , структурированные, типы указателей , процедурные и классовые типы. К простым относятся целые и вещественные типы, логический , символьный , перечислимый и диапазонный тип. Структурированные типы образованы массивами , записями , множествами и файлами . Все простые типы, кроме вещественного, называются порядковыми . Только значения этих типов могут быть индексами массивов с фиксированной размерностью и параметрами цикла for . Кроме того, для порядковых типов используются функции Ord, Pred и Succ, а также процедуры Inc и Dec. Все типы, кроме типов указателей, являются производными от типа Object (как в .NET). Каждый тип в PascalABC.NET   имеет отображение на тип .NET . Тип указателя принадлежит к неуправляемому коду и моделируется типом void*. Все типы подразделяются на две большие группы: размерные и ссылочные . Данные размерных типов располагаются на стеке, данные ссылочных типов представляют собой указатели, хранящие адрес динамической памяти, где расположены собственно данные указанного типа. К размерным относятся все простые типы, указатели, записи, статические массивы. К ссылочным типам относятся множества, классы, динамические массивы, строки, файлы и процедурный тип.
Слайд 31
Строковый тип Строки имеют тип string , состоят из набора последовательно расположенных символов char и используются для представления текста. Строки могут иметь произвольную длину. К символам в строке можно обращаться, используя индекс: s[i] обозначает i -тый символ в строке, нумерация начинается с единицы. Если индекс i выходит за пределы длины строки, то генерируется исключение. Операция + для строк означает конкатенацию (слияние) строк. Например: 'Петя'+'Маша' = 'ПетяМаша' . Операция += для строк добавляет в конец строки - левого операнда строку - правый операнд. Например: var s: string := 'Петя'; s += 'Маша'; // s = 'ПетяМаша' Строки реализуются типом System.String платформы .NET и представляют собой ссылочный тип. Таким образом, все операции над строками унаследованы от типа System.String . Однако, в отличие от .NET - строк, строки в PascalABC.NET изменяемы. Например, можно изменить s[i] (в .NET нельзя). Более того, строки string в PascalABC.NET ведут себя как размерные: после var s2 := 'Hello'; var s1 := s2; s1[2] := 'a'; строка s1 не изменится. Аналогично при передаче строки по значению в подпрограмму создается копия строки, т.е. обеспечивается поведение, характерное для Delphi Object Pascal, а не для .NET. Однако, строке можно присвоить nil , что необходимо для работы с NET-кодом. Кроме того, в PascalABC.NET реализованы размерные строки. Для их описания используется тип string[n] , где n - константа целого типа, указывающая длину строки. В отличие от обычных строк, содержимое размерных строк при присваивании и передаче по значению копируется. Кроме того, размерные строки, в отличие от обычных, можно использовать как компоненты типизированных файлов . Для совместимости с Delphi Object Pascal в стандартном модуле описан тип shortstring=string[255] . Стандартные подпрограммы работы со строками представлены здесь . В .NET каждый тип является классом. Члены класса string приведены здесь . Отметим, что в методах класса string считается, что строки индексируются с нуля.
Слайд 32
Указатели Указатель - это ячейка памяти, хранящая адрес. В PascalABC.NET указатели делятся на типизированные (содержат адрес ячейки памяти данного типа) и бестиповые (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа). Тип указателя на тип T имеет форму ^T, например: type pinteger = ^integer; var p: ^ record r,i: real end ; Бестиповой указатель описывается с помощью слова pointer. Для доступа к ячейке памяти, адрес которой хранит типизированный указатель, используется операция разыменования ^: var   i: integer;   pi: ^integer; ... pi := @i; // указателю присвоили адрес переменной i pi^ := 5; // переменной i присвоили 5 Операция разыменования не может быть применена к бестиповому указателю. Типизированный указатель может быть неявно преобразован к бестиповому: var   p: pointer;   pr: ^real; ... p := pr; Обратное преобразование также может быть выполнено неявно: pr := p; pr^ := 3.14; Указатели можно сравнивать на равенство (=) и неравенство (<>). Для того чтобы отметить тот факт, что указатель никуда не указывает, используется стандартная константа nil (нулевой указатель) : p := nil . Внимание! Ввиду особенностей платформы .NET тип T типизированного указателя не должен быть ссылочным или содержать ссылочные типы на каком-то уровне (например, запрещены указатели на записи, у которых одно из полей имеет ссылочный тип). Причина такого ограничения проста: указатели реализуются неуправляемым кодом, который не управляется сборщиком мусора. Если в памяти, на которую указывает указатель, содержатся ссылки на управляемые переменные, то они становятся недействительными после очередной сборки мусора. Исключение составляют динамические массивы и строки, обрабатываемые особым образом. То есть, можно делать у казатели на записи, содержащие в качестве полей строки и динамические массивы.
Слайд 33
Процедурный тип Переменные, предназначенные для хранения процедур и функций, называются процедурными . Тип процедурной переменной представляет собой заголовок процедуры или функции без имени. Например: type   procI = procedure (i: integer);   funI = function : integer; Процедурной переменной можно присвоить процедуру или функцию с совместимым типом: procedure my(i: integer); begin   ... end ; function f: integer; begin end ; ... var   p1: procI;   f1: funI; ... p1 := my; f1 := f; После этого можно вызвать процедуру или функцию через эту процедурную переменную, пользуясь обычным синтаксисом вызова: p1(5); write(f1); Для процедурных переменных принята структурная эквивалентность типов : можно присваивать друг другу и передавать в качестве параметров процедурные переменные, совпадающие по структуре (типы и количество параметров, тип возвращаемого значения).
Слайд 34
Обычно процедурные переменные передаются как параметры для реализации обратного вызова : procedure forall( var a: array of real; p: procedure ( var r: real)); begin for var i := 0 to a.Length-1 do     p(a[i]); end ; procedure mult2( var r: real); begin   r := 2*r; end ; procedure add3( var r: real); begin   r := r + 3; end ; procedure print( var r: real); begin   write(r,' '); end ; ... forall(a,mult2); // умножение элементов массива на 2 forall(a,add3);  // увеличение элементов массива на 3 forall(a,print); // вывод элементов массива Процедурная переменная может хранить нулевое значение, которое задается константой nil . Вызов подпрограммы через нулевую процедурную переменную приводит к ошибке. Процедурные переменные реализуются через делегаты .NET. Это означает, что они могут хранить несколько подпрограмм. Для добавления/отсоединения подпрограмм используются операторы += и -= : p1 += mult2; p1 += add3; forall(a,p1);
Слайд 35
Подпрограммы в этом случае вызываются в порядке прикрепления: вначале умножение, потом сложение. Отсоединение неприкрепленных подпрограмм не выполняет никаких действий: p1 -= print; Кроме того, к процедурной переменной можно прикреплять/откреплять статические и экземплярные методы классов. Пример. type   A = class   private     x: integer;   public     constructor Create(xx: integer);     begin x := xx;     end;     procedure pp;     begin       write(x);     end ;     procedure ppstatic; static ;     begin       write(1);     end ;   end ; begin   var p: procedure ;   var a1: A := new A(5);   p += a1.pp;   p += A.ppstatic;   p; end . В результате запуска данной программы на экран будет выведено: 51
Слайд 40
Логический тип Значения логического типа boolean занимают 1 байт и принимают одно из двух значений, задаваемых предопределенными константами True (истина) и False (ложь). Для логического типа определены статические функции: boolean.Parse(s) - функция, конвертирующая строковое представление числа в значение типа boolean . Если преобразование невозможно, то генерируется исключение; boolean.TryParse(s,res) - функция, конвертирующая строковое представление числа в значение типа boolean и записывающая его в переменную res . Если преобразование возможно, то возвращается значение True , в противном случае - False . Кроме этого, определена экземплярная функция ToString , возвращающая строковое представление переменной типа boolean . Логический тип является порядковым . В частности, False < True , Ord(False) =0, Ord(True) =1.
Слайд 41
Символьный тип Символьный тип char занимает 2 байта и хранит Unicode-символ. Символы реализуются типом System.Char платформы .NET. Стандартные подпрограммы работы с символами представлены здесь. Члены класса char приведены здесь. Для преобразования между символами и их кодами в кодировке Windows (CP1251) используются стандартные функции Chr и Ord : Chr(n) - функция, возвращающая символ с кодом n в кодировке Windows; Ord(с) - функция, возвращающая значение типа byte , представляющее собой код символа c в кодировке Windows. Для преобразования между символами и их кодами в кодировке Unicode используются стандартные функции ChrUnicode и OrdUnicode : ChrUnicode(w) - возвращает символ с кодом w в кодировке Unicode; OrdUnicode(с) - возвращает значение типа word , представляющее собой код символа c в кодировке Unicode. Кроме того, выражение # число возвращает Unicode-символ с кодом число (число должно находиться в диапазоне от 0 до 65535). Аналогичную роль играют явные преобразования типов: char(w) возвращает символ с кодом w в кодировке Unicode; word(с) возвращает код символа c в кодировке Unicode.
Слайд 42
Перечислимый и диапазонный типы Перечислимый тип определяется упорядоченным набором идентификаторов. type typeName = (value1, value2, ..., valuen); Значения перечислимого типа занимают 4 байта. Каждое значение value представляет собой константу типа typeName , попадающую в текущее пространство имен. Например: type Season = (Winter,Spring,Summer,Autumn);   DayOfWeek = (Mon,Tue,Wed,Thi,Thr,Sat,Sun); К константе перечислимого типа можно обращаться непосредственно по имени, а можно использовать запись typeName.value , в которой имя константы уточняется именем перечислимого типа, к которому она принадлежит: var a: DayOfWeek; a := Mon; a := DayOfWeek.Wed; Для значений перечислимого типа можно использовать функции Ord , Pred и Succ , а также процедуры Inc и Dec . Функция Ord возвращает порядковый номер значения в списке констант соответствующего перечислимого типа, нумерация при этом начинается с нуля. Для перечислимого типа определена экземплярная функция ToString , возвращающая строковое представление переменной перечислимого типа. При выводе значения перечислимого типа с помощью процедуры write также выводится строковое представление значения перечислимого типа. Например: type Season = (Winter,Spring,Summer,Autumn); var s: Season; begin   s := Summer;   writeln(s.ToString); // Summer   writeln(s); // Summer end . Диапазонный тип представляет собой подмножество значений целого, символьного или перечислимого типа и описывается в виде a..b , где a - нижняя, b - верхняя граница интервального типа, a < b : var intI: 0..10;   intC: 'a'..'z';   intE: Mon..Thr; Тип, на основе которого строится диапазонный тип, называется базовым для этого диапазонного типа. Значения диапазонного типа занимают в памяти столько же, сколько и значения соответствующего базового типа.
Слайд 46
Массивы Массив представляет собой набор элементов одного типа, каждый из которых имеет свой номер, называемый индексом (индексов может быть несколько, тогда массив называется многомерным ). Массивы в PascalABC.NET делятся на статические и динамические . При выходе за границы изменения индекса в PascalABC.NET всегда генерируется исключение.
Слайд 47
Статические массивы Тип статического массива конструируется следующим образом: array [тип индекса1, ..., тип индексаN] of базовый тип Тип индекса должен быть порядковым . Обычно тип индекса является диапазонным и представляется в виде a..b , где a и b - константные выражения целого, символьного или перечислимого типа. Например: type   MyEnum = (w1,w2,w3,w4,w5);   Arr = array [1..10] of integer; var   a1,a2: Arr;   b: array ['a'..'z',w2..w4] of string ;   c: array [1..3] of array [1..4] of real; При описании можно также задавать инициализацию массива значениями: var   a: Arr := (1,2,3,4,5,6,7,8,9,0);   cc: array [1..3,1..4] of real := ((1,2,3,4), (5,6,7,8), (9,0,1,2)); Статические массивы одного типа можно присваивать друг другу, при этом будет производиться копирование содержимого одного массива в другой: a1:=a2; При передаче статического массива в подпрограмму по значению также производится копирование содержимого массива - фактического параметра в массив - формальный параметр: procedure p(a: Arr); ... p(a1); Как правило, в этой ситуации копирование не требуется, поэтому статический массив рекомендуется передавать по ссылке: procedure p1( var a: Arr); ... r(a1);
Слайд 48
Динамические массивы Тип динамического массива конструируется следующим образом: array of тип элементов  (одномерный массив) array [] of тип элементов  (одномерный массив) array [,] of тип элементов   (двумерный массив) и т.д. Переменная типа динамический массив представляет собой ссылку. Поэтому динамический массив нуждается в инициализации (выделении памяти под элементы). Для выделения памяти под динамический массив используется два способа. Первый способ использует операцию new в стиле вызова конструктора класса: var   a: array of integer;   b: array [,] of real; begin   a := new integer[5];   b := new real[4,3]; end . В этом случае можно также задавать инициализацию массива значениями: a := new integer[3](1,2,3); b := new real[4,3] ((1,2,3),(4,5,6),(7,8,9),(0,1,2)); Второй способ использует стандартную процедуру SetLength : SetLength(a,10); SetLength(b,5,3); Процедура SetLength обладает тем преимуществом, что при ее повторном вызове старое содержимое массива сохраняется. Если объявлен массив массивов var с: array of array of integer; то его инициализацию можно провести только с помощью SetLength : SetLength(с,5); for i := 0 to 4 do   SetLength(c[i],3);
Слайд 49
Для инициализации такого массива с помощью new следует ввести имя типа для array of integer: type IntArray = array of integer ; var с: array of IntArray; ... c := new IntArray[5]; for i := 0 to 4 do   c[i] := new integer[3]; При описании инициализацию динамического массива можно проводить в сокращенной форме: var   a: array of integer := (1,2,3);   b: array [,] of real := ((1,2,3),(4,5,6),(7,8,9),(0,1,2)); c: array of array of integer := ((1,2,3),(4,5),(6,7,8)); При этом происходит выделение памяти под указанное справа количество элементов. При таком способе в инициализаторе одномерного массива должно содержаться не менее 2 элементов. Динамические массивы одного типа можно присваивать друг другу, при этом обе переменные-ссылки будут указывать на одну память: var a1: array of integer; var a2: array of integer; a1 := a2; Следует обратить внимание, что для динамических массивов принята структурная эквивалентность типов : можно присваивать друг другу и передавать в качестве параметров подпрограмм динамические массивы, совпадающие по структуре. Чтобы одному динамическому массиву присвоить копию другого массива, следует воспользоваться стандартной функцией Copy: a1 := Copy(a2); Длина массива (количество элементов в нем) возвращается стандартной функцией Length или свойством Length: l := Length(a); l := a.Length; Для многомерных массивов длина по каждой размерности возвращается стандартной функцией Length с двумя параметрами или методом GetLength(i): l := Length(a,0); l := a.GetLength(0);
Слайд 50
Указатели Указатель - это ячейка памяти, хранящая адрес. В PascalABC.NET указатели делятся на типизированные (содержат адрес ячейки памяти данного типа) и бестиповые (содержат адрес оперативной памяти, не связанный с данными какого-либо определенного типа). Тип указателя на тип T имеет форму ^T , например: type pinteger = ^integer; var p: ^ record r,i: real end ; Бестиповой указатель описывается с помощью слова pointer . Для доступа к ячейке памяти, адрес которой хранит типизированный указатель, используется операция разыменования ^ : var   i: integer;   pi: ^integer; ... pi := @i; // указателю присвоили адрес переменной i pi^ := 5; // переменной i присвоили 5 Операция разыменования не может быть применена к бестиповому указателю. Типизированный указатель может быть неявно преобразован к бестиповому: var   p: pointer;   pr: ^real; ... p := pr; Обратное преобразование также может быть выполнено неявно: pr := p; pr^ := 3.14; Указатели можно сравнивать на равенство ( = ) и неравенство ( <> ). Для того чтобы отметить тот факт, что указатель никуда не указывает, используется стандартная константа nil (нулевой указатель) : p := nil . Внимание! Ввиду особенностей платформы .NET тип T типизированного указателя не должен б

Другие презентации по информатике



  • Яндекс.Метрика
  • Рейтинг@Mail.ru