Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 8 лет назад пользователемВера Чикунская
1 Учебная система программирования Pascal ABC и возможность ее использования в учебном процессе С.С. Михалкович Доклад
2 Причины создания Необходима среда для обучения программированию Язык Паскаль – лучший язык для первоначального обучения Система Borland Pascal 7.0 (1993 г.) устарела Система Borland Delphi сложна для первоначального обучения
3 Недостатки Borland Pascal Устаревший интерфейс Устаревшая графика Неудобная объектная модель Невозможность писать программы, управляемые событиями
4 Недостатки Borland Delphi (1) Насыщенный интерфейс
5 Недостатки Borland Delphi (2) Консольное приложение выглядит неуклюже. Его минимальный текст выглядит достаточно сложно Поддержка русификации проблематична
6 Недостатки Borland Delphi (3) Минимальный текст Windows-приложения выглядит абсолютно непонятным Программа не имеет ни начала ни конца
7 Требования к Pascal ABC Простая система для первоначального обучения программированию. Является стартовой площадкой для изучения профессиональных систем программирования. Содержит все основные элементы современного программирования ( богатая графика, классы, стандартные контейнеры, богатые библиотеки ). Позволяет осваивать технически сложные понятия на более ранних этапах обучения ( модули, классы, сокеты, структуры данных ). Содержит встроенный электронный задачник, позволяющий генерировать задания и осуществлять их автоматическую проверку.
8 Ограничения Pascal ABC Компиляция в память с последующей интерпретацией дерева программы, отсутствие возможности создания.exe-файлов, выполнение программ лишь в рамках интегрированной среды Быстродействие в вычислительных задачах примерно в 50 раз меньше, чем в Borland Delphi, и в 20 раз меньше, чем в Borland Pascal
9 Тест скорости Pascal ABC проводился на следующей программе: uses Utils; var s: real; i,j: integer; begin cls; i:=1; while i<=1000 do begin j:=1; while j<=1000 do begin s:=s+1/i/j; j:=j+1; end; i:=i+1; end; write(s,' ',Milliseconds/1000); end.
10 Вид окна Pascal ABC
11 Особенности языка Pascal ABC Тип string – максимум 255 символов Оператор Goto отсутствует Двоичные нетипизированные файлы отсутствуют Переменная Result в функциях Операции + и – с типизированными указателями Тип complex Структурная эквивалентность типов Перегрузка имен – без слова overload
12
Переменная Result function MinElement (var a: array [1..100] of real; n: integer): real; var i: integer; begin Result:=a[1]; for i:=1 to n do if a[i]
13 Структурная эквивалентность типов var a: array [1..100] of integer; b: array [1..100] of integer; p1: procedure (i: integer); p2: procedure (x: integer); r1: record i,j: integer end; r2: record x,y: integer end; begin a:=b; // все в порядке p1:=p2; // все в порядке r1:=r2; // ошибка!... procedure foreach(var a: array [1..100] of real; n: integer; f: function(r: real): real); var i: integer; begin for i:=1 to n do a[i]:=f(a[i]); end;
14 Операции с указателями const n=20; type pinteger=^integer; ArrN=^array [1..MaxInt] of integer; var p,pi: ^integer; pa: ArrN; i: integer; begin GetMem(p,n*sizeof(integer)); pi:=p; for i:=1 to n do begin pi^:=2*i; pi:=pi+1; end; pa:=ArrN(p); for i:=1 to n do write(pa^[i]:3); FreeMem(p); end.
15 Тип complex const ci=(0,1); var c: complex; begin c:=(3,7); c.Re:=2*c.Im; c:=ci*c+(2*c.Im,c.Re); writeln(c:10:2); writeln(abs(c)); writeln(conj(c)); writeln(carg(c)); writeln(sin(c),' ',cos(c),' ',exp(c)); writeln(ln(c),' ',sqrt(c)); end.
16 Перегрузка имен – нет overload procedure p(b: byte); begin end; procedure p(r: real); begin end; type A=class constructor Create; constructor Create(n: integer); end;... p(2); p(2.0);
17 Встроенные учебные модули Электронный задачник Programming Taskbook (автор М.Э.Абрамян) – 1000 заданий от простейших до заданий на файлы, рекурсию, указатели и структуры данных. Исполнители Робот и Чертежник (для школьников 7-9 классов) Позволяют автоматически ставить задания и проверять правильность их выполнения
18 Электронный задачник – группы заданий Begin ввод и вывод данных, оператор присваивания (40), Integer целые числа (30), For цикл с параметром (40), Boolean логические выражения (40), If условный оператор (30), Case оператор выбора (20), While цикл с условием (30), Series последовательности (40), Proc процедуры и функции (60), Minmax минимумы и максимумы (30), Array одномерные массивы (140), Matrix двумерные массивы (матрицы) (100), String символы и строки (70), File типизированные файлы (90), Text текстовые файлы (60), Param составные типы данных в процедурах и функциях (70), Recur рекурсия (30), Pointer указатели и динамические структуры данных (80)
19 Окно задачника
20 Шаблон программы и процесс решения uses PT4; begin Task('Begin3'); end. uses PT4; var a,b,S,P: real; begin Task('Begin3'); read(a,b); S:=a*b; P:=2*(a+b); write(S,P) end. Перенаправление ввода-вывода – при подключении модуля задачника PT4 ввод осуществляется из полей вода окна задачника, а вывод - в соответствующие поля вывода окна задачника
21 Задание Pointer2
22 Решение задания Pointer2 uses PT4; var P1,P2: PNode; n: integer; begin Task('Pointer2'); read(P1); n:=0; while P1<>nil do begin write(P1^.Data); Inc(n); P2:=P1; // сохраняем адрес текущего элемента P1:=P1^.Next; // и переходим к следующему элементу end; write(n,P2); end. type PNode = ^TNode; TNode = record Data: Integer; Next: PNode; Prev: PNode; end;
23 Просмотр результатов выполнения заданий
24 Другие возможности электронного задачника Задачник реализован для следующих сред: Borland Pascal 7.0, Borland Delphi 3.0–7.0, Microsoft Visual Basic 5.0–6.0, Borland C++Builder 4.0–5.0, Microsoft Visual C++ 6.0, Microsoft Visual Studio.NET 2003 (языки Visual C++ 7.0, Visual Basic.NET и Visual C#.NET) Имеется контрольный центр преподавателя (не входит в дистрибутив Pascal ABC), позволяющий управлять файлами результатов учащихся, выводить сводную информацию, создавать файлы вариантов заданий
25 Модуль GraphABC – возможность быстрого написания графических программ
26 Модуль GraphABC (1) function RGB(r,g,b: integer): integer; procedure SetPixel(x,y,color: integer); procedure Line(x1,y1,x2,y2: integer); procedure Circle(x,y,r: integer); procedure Ellipse(x1,y1,x2,y2: integer); procedure Rectangle(x1,y1,x2,y2: integer); procedure FloodFill(x,y,color: integer); procedure Pie(x,y,r,a1,a2: integer); procedure Polygon(var a; n: integer); procedure Polyline(var a; n: integer); procedure SetPenColor(color: integer); function PenColor: integer; procedure SetPenWidth(w: integer); function PenWidth: integer; procedure SetPenStyle(ps: integer); function PenStyle: integer; procedure SetBrushColor(color: integer); function BrushColor: integer; procedure SetBrushStyle(bs: integer); function BrushStyle: integer ; Примитивы, перья и кисти
27 Модуль GraphABC (2) procedure TextOut(x,y: integer; s: string); procedure SetFontColor(color: integer); function FontColor: integer; procedure SetFontSize(sz: integer); function FontSize: integer; procedure SetFontName(name: string); function FontName: string; procedure SetFontStyle(fs: integer); function FontStyle: integer; fsNormal fsBold fsItalic fsBoldItalic fsUnderline fsBoldUnderline fsItalicUnderline fsBoldItalicUnderline procedure ClearWindow; procedure SetWindowWidth(w: integer); function WindowWidth: integer; procedure SetWindowHeight(h: integer); function WindowHeight: integer; procedure SetWindowCaption(s: string); function WindowCaption: string; Текст и графическое окно
28 Модуль GraphABC (3) function LoadPicture(fname: string): integer; procedure DrawPicture(n,x,y: integer); procedure DestroyPicture(n: integer); function PictureWidth(n: integer): integer; function PictureHeight(n: integer): integer; function CreatePicture: integer; procedure CopyToPicture(n: integer; r: Rect); procedure SavePicture(n: integer; fname: string); n:=LoadPicture('demo.bmp'); w:=PictureWidth(n); h:=PictureHeight(n); SetBrushColor(clWhite); for i:=0 to WindowWidth-w do begin DrawPicture(n,i,0); Sleep(10); FillRect(i,0,i+1,0+h); end; DestroyPicture(n); Рисунки: дескрипторная модель. Каждый рисунок имеет описатель – целое число
29 Модуль Sounds Интерфейс модуля n:=LoadSound(fname); PlaySound(n); StopSound(n); RewindSound(n); DestroySound(n); b:=SoundIsPlaying(n); t:=SoundTime(n); Пример uses Sounds; var snd: integer; begin snd:=LoadSound('kuku.wav'); PlaySound(snd); while SoundIsPlaying(snd) do Sleep(100); DestroySound(snd); end. Звуки: дескрипторная модель
30 Модуль Events. Простейшие события OnMouseDown: procedure (x,y,mb: integer); OnMouseUp : procedure (x,y,mb: integer); OnMouseMove: procedure (x,y,mb: integer); OnKeyDown : procedure (key: integer); OnKeyUp : procedure (key: integer); OnKeyPress : procedure (ch: char); OnResize : procedure; OnClose : procedure;
31 События OnMouseDown и OnMouseMove uses GraphABC,Events; procedure MouseDown(x,y,mb: integer); begin MoveTo(x,y); end; procedure MouseMove(x,y,mb: integer); begin if mb=1 then LineTo(x,y); end; begin OnMouseDown:=MouseDown; OnMouseMove:=MouseMove end.
32 Событие OnKeyDown uses GraphABC,Events; var x,y: integer; procedure KeyDown(Key: integer); begin SetBrushColor(clWhite); Ellipse(x-9,y-9,x+9,y+9); case Key of VK_Left: x:=x-5; VK_Up: y:=y-5; VK_Right: x:=x+5; VK_Down: y:=y+5; end; SetBrushColor(clBlack); Ellipse(x-9,y-9,x+9,y+9); end; begin x:=WindowWidth div 2; y:=WindowHeight div 2; SetPenStyle(psClear); OnKeyDown:=KeyDown; SetBrushColor(clBlack); Ellipse(x-9,y-9,x+9,y+9); end.
33 Модуль Timers uses Timers, Events; procedure p; begin write(1); end; var t: integer; begin t:=CreateTimer(500,p); readln; StopTimer(t); readln; StartTimer(t); end. Таймеры: дескрипторная модель
34 Модуль Utils type DateTime=record Day, Month, Year, Hour, Minute, Second, Milliseconds: integer; end; LongSize=record Megabytes, Bytes: integer; end; function CreateDir(name: string): boolean; function DeleteFile(name: string): boolean; function DirectoryExists(name: string): boolean; function GetCurrentDir: string; function RemoveDir(name: string): boolean; function RenameFile(OldName,NewName: string): boolean; function SetCurrentDir(name: string): boolean; function Trim(s: string): string; function TrimLeft(s: string): string; function TrimRight(s: string): string; function Milliseconds: integer; function CompileTime: integer; function CurrentDateTime: DateTime; procedure ShowMessage(s: string); function CompareMem(p1,p2: pointer; len: integer): boolean; function DiskSize(Drive: integer): LongSize; function DiskFree(Drive: integer): LongSize;
35 Модуль Sockets Клиентская программа Серверная программа Сокеты: дескрипторная модель
36 Структура модуля Pascal ABC unit GraphLib; uses GraphABC; const Dim=5; var Colors: array [1..Dim] of integer; function RandomColor: integer; begin Result:=RGB(Random(255),Random(255),Random(255)); end; procedure FillByRandomColor; var i: integer; begin for i:=1 to Dim do Colors[i]:=RandomColor; end; begin FillByRandomColor; end. Модули должны находиться либо в папке основной программы, либо в папке UNITS корневой папки Pascal ABC
37 Создание модулей во внешних DLL Library Test; procedure RegisterLib(s: string); begin s:='unit Test;'+ 'procedure myInc(var i: integer; n: integer); external 1;'+ 'function Sum(a,b: integer): integer; external 2;'+ 'end.'; end; procedure Execute(n: integer; p: pointer); var pi: pinteger; a,b: pinteger; begin case n of 1:begin // myInc pi:=getpointer(p); pi^:=pi^+pinteger(p)^; end; 2:begin // Sum a:=getinteger(p); b:=getinteger(p); pinteger(p)^:=a+b; end; end; end;
38 Особенности классов в Pascal ABC Ссылочная объектная модель – как в Delphi Все методы – виртуальные Возможность определять тела методов как внутри, так и вне тела класса Отсутствуют абстрактные классы, интерфейсы и статические методы Имеются свойства и индексированные свойства с одним индексом По умолчанию все поля и методы – public
39 Класс Object – неявный предок всех классов type Object=class constructor Create; destructor Destroy; function TypeName: string; function ToString: string; end;
40 Определение методов внутри класса type Figure=class private x,y: integer; public constructor Create(xx,yy:integer); begin x:=xx; y:=yy; end; procedure Draw; begin end; procedure Show; begin SetPenColor(clBlack); Draw; end; procedure Hide; begin SetPenColor(clWhite); Draw; end; procedure MoveTo(xx,yy: integer); begin Hide; x:=xx; y:=yy; Show; end; function Clone: Figure; begin Clone:=Figure.Create(x,y); end; end; RectG=class(Figure) private w,h: integer; public constructor Create(x1,y1,x2,y2: integer); begin inherited Create(x1,y1); w:=x2-x1; h:=y2-y1; end; procedure Draw; begin Rectangle(x,y,x+w,y+h); end; function Clone: Figure; begin Clone:=RectG.Create(x,y,x+w,y+h); end;
41 Определение методов внутри и вне класса type AssocArray=class private words: StringArray; nums: IntArray; procedure setProp(ind: string; value: integer); function getProp(ind: string):integer; public constructor Create; begin words:=StringArray.Create; nums:=IntArray.Create; end; function getSize: integer; begin Result:=words.Size; end; property Size: integer read getSize; property Items[ind: string]:integer read getProp write setProp; property Keys: StringArray read words; property Values: IntArray read nums; end; procedure AssocArray.setProp (ind: string; value: integer); var i: integer; begin i:=words.IndexOf(ind); if i<>0 then nums[i]:=value else begin words.add(ind); nums.add(value); end; end; function AssocArray.getProp (ind:string): integer; var i: integer; begin i:=words.IndexOf(ind); if i<>0 then Result:=nums[i] else begin words.add(ind); nums.add(0); Result:=0; end; end;
42 Модуль Containers Классы контейнеров: IntArray RealArray StringArray ObjectArray IntStack RealStack StringStack ObjectStack IntQueue RealQueue StringQueue ObjectQueue IntSet RealSet StringSet ObjectSet IntAssocArray RealAssocArray StringAssocArray ObjectAssocArray
43 Модуль Containers – интерфейсы классов IntArray=class constructor Create; constructor Create(n: integer); destructor Destroy; procedure Put(ind,v: integer); function Get(ind: integer): integer; property Items[n: integer]: integer read get write put; function Size: integer; function Count: integer; procedure Resize(n: integer); procedure Add(v: integer); procedure Fill(v: integer); procedure Clear; procedure Insert(ind,v: integer); procedure Delete(ind: integer); procedure Remove(v: integer); procedure Exchange(i1,i2: integer); function IndexOf(v: integer): integer; function LastIndexOf(v: integer): integer; function Find(v: integer): boolean; function MinElement: integer; function MaxElement: integer; function MinInd: integer; function MaxInd: integer; procedure Sort; procedure Reverse; function Sum: integer; function Average: real; procedure Print; procedure Println; end; StringStack=class constructor Create; destructor Destroy; procedure Push(s: string); function Pop: string; function Top: string; function IsEmpty: boolean; end; RealQueue=class constructor Create; destructor Destroy; procedure Push(r: real); function Pop: real; function First: real; function Last: real; function IsEmpty: boolean; end;
44 Модуль Containers – интерфейсы классов ObjectSet=class OwnsObjects: boolean; constructor Create; destructor Destroy; procedure Include(o: Object); procedure Exclude(o: Object); function Find(o: Object): boolean; procedure Delete(o: Object); procedure Reset; procedure MoveFirst; procedure MoveLast; procedure Next; procedure Prev; function Current: Object; function Eos: boolean; function First: Object; function Last: Object; procedure Clear; procedure Union(s1,s2: ObjectSet); procedure Intersect(s1,s2: ObjectSet); procedure Difference(s1,s2: ObjectSet); function Embed(s: ObjectSet): boolean; function Count: integer; function IsEmpty: boolean; procedure Print; procedure Println; procedure Print(delim: string); procedure Println(delim: string); end; IntAssocArray=class constructor Create; destructor Destroy; procedure Clear; procedure Add(key: string; value: integer); function Find(key: string): boolean; procedure Delete(key: string); procedure Reset; procedure MoveFirst; procedure MoveLast; procedure Next; procedure Prev; function CurrentKey: string; function CurrentValue: integer; function EoA: boolean; procedure Put(key: string; value: integer); function Get(key: string): integer; property Items[key: string]: integer read get write put; function Count: integer; function IsEmpty: boolean; procedure Print; procedure Println; procedure Print(delim: string); procedure Println(delim: string); end;
45
Пример 1: сортировка по критерию в динамических массивах объектов uses Containers; type Pupil=class age: integer; name: string; constructor Create(name: string; age: integer); begin Self.age:=age; Self.name:=name; end; function ToString: string; begin Result:=name+' '+IntToStr(age); end; end; function LessAge(o1,o2: Object): boolean; begin Result:=Pupil(o1).age
46 Пример 2: ассоциативные массивы uses Containers; var Zoo: IntAssocArray; begin Zoo:=IntAssocArray.Create; Zoo['бегемоты']:=8; Zoo['крокодилы']:=6; Zoo['жирафы']:=1; Zoo['страусы']:=Zoo['страусы']+1; Zoo.Println; Zoo.Reset; while not Zoo.EoA do begin writeln(Zoo.CurrentKey,' ',Zoo.CurrentValue); Zoo.Next; end; Zoo.Destroy; end.
47 Библиотека визуальных компонентов VCL. Основные требования Простая иерархия компонентов Обработчики событий – внешние процедуры, а не методы, как в Delphi Два типа обработчиков – обычные и расширенные Все компоненты создаются явно, двоичный файл формы.dfm отсутствует Все компоненты автоматически разрушаются при завершении программы. Деструкторы компонентов вызывать необязательно
48 Библиотека VCL. Иерархия классов
49 Пример 1 программы PABC Forms uses VCL; var MainForm: Form; Label1: Label; Edit1: Edit; procedure SetFormCaption; begin MainForm.Caption:=Edit1.Text; end; begin MainForm:=Form.Create(200,200,300,100); Label1:=Label.Create(5,20,'Заголовок формы:'); Edit1:=Edit.Create(140,20); Edit1.OnChange:=SetFormCaption; end.
50 Пример 2. Экран более сложной программы
51 Pascal ABC в сети Интернет Систему Pascal ABC и HTML-версию электронного задачника Programming Taskbook можно загрузить с сайта Компьютерной школы при механико- математическом факультете РГУ sunschool.math.rsu.ru
52 Что на повестке дня Интерфейсы Методы в записях (без наследования и полиморфизма) Исключения Потоки, средства синхронизации потоков Усовершенствование модуля Sockets – с обработчиками событий Долговременная цель (2 года) – создание компилятора Pascal ABC для.NET
53 Как можно использовать Pascal ABC в учебном процессе Использование электронного задачника. Разработка новых заданий. Создание банка заданий для студентов Создание банка решений типовых задач – обучение на примерах Курсовые работы – создание модулей для Pascal ABC Изменение акцентов – объектно-ориентированное программирование можно начинать во втором семестре, опираясь также на графическую библиотеку; ознакомление с объектами можно проводить, используя контейнерные классы и классы визуальных компонентов
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.