1 / 53

Учебная с истема программирования Pascal ABC и возможность ее использования в учебном процессе

Учебная с истема программирования Pascal ABC и возможность ее использования в учебном процессе. С.С. Михалкович Доклад 12.05.05. Причины создания. Необходима среда для обучения программированию Язык Паскаль – лучший язык для первоначального обучения

emele
Download Presentation

Учебная с истема программирования Pascal ABC и возможность ее использования в учебном процессе

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Учебная система программирования Pascal ABCи возможность ее использования в учебном процессе С.С.Михалкович Доклад 12.05.05

  2. Причины создания • Необходима среда для обучения программированию • Язык Паскаль – лучший язык для первоначального обучения • Система Borland Pascal 7.0 (1993 г.) устарела • Система Borland Delphi сложна для первоначального обучения

  3. Недостатки Borland Pascal • Устаревший интерфейс • Устаревшая графика • Неудобная объектная модель • Невозможность писать программы, управляемые событиями

  4. Недостатки BorlandDelphi (1) • Насыщенный интерфейс

  5. Недостатки BorlandDelphi (2) • Консольное приложение выглядит неуклюже. Его минимальный текст выглядит достаточно сложно • Поддержка русификации проблематична

  6. Недостатки BorlandDelphi (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;beginResult:=a[1];for i:=1 to n doif a[i]<ResultthenResult:=a[i];end;function f(r,i: integer): record r,i:integer end;beginResult.r:=r;Result.i:=iend;

  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; begina:=b;// все в порядкеp1:=p2; // все в порядке r1:=r2; // ошибка! ... procedureforeach(var a: array [1..100] of real; n: integer; f: function(r: real): real);var i: integer;beginfor 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);beginend; procedure p(r: real);beginend; type A=classconstructor 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 type  PNode = ^TNode;  TNode = record   Data: Integer;   Next: PNode;   Prev: PNode;end; uses PT4; var P1,P2: PNode; n: integer; begin Task('Pointer2'); read(P1); n:=0; while P1<>nil dobegin write(P1^.Data); Inc(n); P2:=P1; // сохраняем адрес текущего элемента P1:=P1^.Next; // и переходим к следующему элементу end; write(n,P2); 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) • Примитивы, перья и кисти functionRGB(r,g,b: integer): integer; procedure SetPixel(x,y,color: integer);procedureLine(x1,y1,x2,y2: integer);procedure Circle(x,y,r: integer);procedureEllipse(x1,y1,x2,y2: integer);procedureRectangle(x1,y1,x2,y2: integer);procedure FloodFill(x,y,color: integer);procedurePie(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) • Текст и графическое окно procedureTextOut(x,y: integer; s: string);procedure SetFontColor(color: integer);functionFontColor: integer;procedure SetFontSize(sz: integer);functionFontSize: integer;procedure SetFontName(name: string);functionFontName: string;procedure SetFontStyle(fs: integer);functionFontStyle: integer;fsNormal fsBold fsItalic fsBoldItalic fsUnderlinefsBoldUnderline fsItalicUnderline fsBoldItalicUnderline procedure ClearWindow;procedure SetWindowWidth(w: integer);functionWindowWidth: integer;procedure SetWindowHeight(h: integer);functionWindowHeight: integer;procedure SetWindowCaption(s: string);functionWindowCaption: 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 dobegin 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) doSleep(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); beginif mb=1 then LineTo(x,y); end; begin OnMouseDown:=MouseDown; OnMouseMove:=MouseMove end.

  32. Событие OnKeyDown beginx:=WindowWidth div 2; y:=WindowHeight div 2;SetPenStyle(psClear);OnKeyDown:=KeyDown;SetBrushColor(clBlack); Ellipse(x-9,y-9,x+9,y+9); end. uses GraphABC,Events; var x,y: integer; procedure KeyDown(Key: integer); beginSetBrushColor(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;

  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 unitGraphLib; 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;beginfor 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; procedureExecute(n: integer; p: pointer);var pi: pinteger; a,b: pinteger;begincase n of1: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=classconstructor Create; destructor Destroy; function TypeName: string; function ToString: string; end;

  40. Определение методов внутри класса RectG=class(Figure) privatew,h: integer; publicconstructor 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; beginClone:=RectG.Create(x,y,x+w,y+h); end; end; type Figure=class privatex,y: integer; publicconstructor Create(xx,yy:integer);begin x:=xx; y:=yy;end;procedure Draw; beginend;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;

  41. Определение методов внутри и вне класса procedure AssocArray.setProp(ind:string; value: integer);var i: integer;begin i:=words.IndexOf(ind);if i<>0 then nums[i]:=valueelsebegin 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]elsebegin words.add(ind); nums.add(0); Result:=0;end;end; type AssocArray=classprivate words: StringArray; nums: IntArray;procedure setProp(ind: string; value: integer);function getProp(ind: string):integer;publicconstructor 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]:integerread getProp write setProp;property Keys: StringArray read words;property Values: IntArray read nums;end;

  42. Модуль Containers • IntSetRealSetStringSetObjectSet • IntAssocArray RealAssocArray StringAssocArray ObjectAssocArray Классы контейнеров: • IntArray RealArray StringArray ObjectArray • IntStackRealStack StringStack ObjectStack • IntQueueRealQueue StringQueue ObjectQueue

  43. Модуль Containers – интерфейсы классов StringStack=classconstructor Create;destructor Destroy;procedure Push(s: string);function Pop: string;function Top: string;function IsEmpty: boolean;end; RealQueue=classconstructor Create;destructor Destroy;procedure Push(r: real);function Pop: real;function First: real;function Last: real;function IsEmpty: boolean;end; IntArray=classconstructor 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;

  44. Модуль Containers – интерфейсы классов IntAssocArray=classconstructor 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]: integerread get write put; function Count: integer; function IsEmpty: boolean; procedure Print; procedure Println;procedure Print(delim: string); procedure Println(delim: string); end; 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;

  45. Пример 1:сортировка по критерию в динамических массивах объектов var d: ObjectArray; begin cls; d:=ObjectArray.Create; d.Add(Pupil.Create('Иванов',15)); d.Add(Pupil.Create('Попов',14)); d.Add(Pupil.Create('Петров',12)); d.Add(Pupil.Create('Козлова',16)); d.Add(Pupil.Create('Кротова',12)); d.Add(Pupil.Create('Дурова',13));d.Sort(LessName); writeln('Сортировка по имени:');d.Println(#10);d.Sort(LessAge); writeln('Сортировка по возрасту:');d.Println(#10); d.Destroy;end. uses Containers;typePupil=class age: integer; name: string;constructor Create(name: string; age: integer);beginSelf.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<Pupil(o2).ageend; function LessName(o1,o2: Object): boolean;begin Result:=Pupil(o1).name<Pupil(o2).name end;

  46. Пример 2:ассоциативные массивы uses Containers; varZoo: IntAssocArray; begin Zoo:=IntAssocArray.Create;Zoo['бегемоты']:=8;Zoo['крокодилы']:=6;Zoo['жирафы']:=1;Zoo['страусы']:=Zoo['страусы']+1;Zoo.Println;Zoo.Reset;whilenotZoo.EoA dobegin writeln(Zoo.CurrentKey,' ',Zoo.CurrentValue);Zoo.Next;end;Zoo.Destroy;end.

  47. Библиотека визуальных компонентов VCL. Основные требования • Простая иерархия компонентов • Обработчики событий – внешние процедуры, а не методы, как в Delphi • Два типа обработчиков – обычные и расширенные • Все компоненты создаются явно, двоичный файл формы .dfm отсутствует • Все компоненты автоматически разрушаются при завершении программы. Деструкторы компонентов вызывать необязательно

  48. Библиотека VCL. Иерархия классов

  49. Пример 1 программы PABC Forms usesVCL; 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. Экран более сложной программы

More Related