На экране нарисовать несколько произвольных закрашенных фигур - Turbo Pascal
Формулировка задачи:
Добрый вечер!
Возникла пара вопросов при работе с нетипизированными файлами в Turbo Pascal 7.0 (а также и в 7.1).
На всякий случай опишу условие задачи: на экране нужно нарисовать несколько произвольных закрашенных фигур; информацию (коордианаты, цвет, количество вершин и пр.) о данных фигурах записать в нетипизированный файл. Каждая запись файла имеет фиксированный размер. Сохранить файл на диске. Восстановить содержимое экрана из файла.
На строке, которая находится в
выдает ошибку disk read error. Эта ошибка говорит о том, что я пытаюсь прочитать что-то после конца файла. Так происходит в среде TurboPascal 7.0; к слову, в среде TurboPascal 7.1 вообще пишет BGI Error: Graphics not initialized (use InitGraph), хотя InitGraph я использую.
В связи с ошибкой, хотелось бы узнать ответы на несколько ответов:
1)команде reset(f, q) передаются два параметра. Как я понял, параметр q передает размер записи. Это значит, что каждый элемент будет иметь размер равный q, или это означает, что максимальный размер файла равен q?
2)как корректно использовать такие процедуры, как BlockRead и BlockWrite? Если я правильно понял, то численный параметр, передаваемый в процедуру означает количество элементов записи/чтения? И что насчет того, что я передаю также на запись/чтение целый массив?
За вопросы, простите, но информация в интернете однотипна и не очень легка для моего восприятия, поэтому и прошу помочь.
Заранее спасибо!
Код программы:
Листинг программы
- program lab11;
- uses
- graph, crt;
- const
- w=10;
- q=30;
- d=7;
- fn = 'd:\progra~1\tp7\bin\lab11';
- type
- ind = 1..w;
- var
- m, n, c, z, s, x, y, x1, y1: integer; {dlya poligonov}
- i, j, k: integer; {schetchiki}
- gd, gm: integer; {ustanovka ekrana}
- f: file;
- buf: array[ind] of integer;
- procedure puttobuf(var a: integer); {pomeshenie v bufer}
- begin
- if k < w then
- buf[k] := a
- else
- begin
- blockwrite(f, buf, 1);
- k:=1;
- buf[k] := a;
- inc(k);
- end;
- end;
- procedure getfrombuf;
- begin
- blockread(f, buf, 1);
- k := 1;
- end;
- begin
- gd := detect;
- initgraph(gd, gm, '');
- assign(f, fn);
- reset(f, q);
- randomize;
- setbkcolor(15); {cvet fona belij}
- k := 1;
- m := random(w)+1; {opredelyaem kol-vo poligonov}
- {cycle drawing of polygons}
- for i := 1 to m do
- begin
- n := random(d)+3; puttobuf(n); {kol-vo vershin}
- c := random(15); puttobuf(c); {cvet pera}
- z := random(15); puttobuf(z); {cvet zalivki}
- s := random(13); puttobuf(s); {stil' zalivki}
- {nizhe opredelyaem vershiny}
- {i risuem polygon}
- setcolor(c);
- x1 := random (456)+5; puttobuf(x1);
- y1 := random (456)+5; puttobuf(y1);
- moveto(x1,y1);
- for j := 1 to n do
- begin
- x := random (456)+5; puttobuf(x);
- y := random (456)+5; puttobuf(y);
- lineto(x,y);
- end;
- lineto(x1,y1);
- end;
- {sbros hvosta, ochistka, etc}
- blockwrite(f, buf, 1);
- close(f);
- delay(2500);
- cleardevice;
- reset(f, q);
- k := 1;
- {vosstanaflivaem iz faila}
- for i := 1 to m do
- begin
- getfrombuf; n := buf[k];
- getfrombuf; c := buf[k];
- getfrombuf; z := buf[k];
- getfrombuf; s := buf[k];
- getfrombuf; x1 := buf[k];
- getfrombuf; y1 := buf[k];
- moveto(x1,y1);
- for j := 1 to n do
- begin
- getfrombuf; x := buf[k];
- getfrombuf; y := buf[k];
- lineto(x,y);
- end;
- lineto(x1,y1);
- end;
- delay(3500);
- closegraph;
- end.
процедуре
getfrombuf
Листинг программы
- blockread(f, buf, 1)
Решение задачи: «На экране нарисовать несколько произвольных закрашенных фигур»
textual
Листинг программы
- var p:array[1.20] of pointtype;
- n:byte;
- .................................
- n:=5;
- p[1].x:=
- p[1].y:=
- p[2].x:=
- p[2].y:=
- ..............
- p[n+1]:=p[1];
- setfillstyle(1,14);//1-сплошная заливка
- fillpoly(n+1,p);
- ..................
Объяснение кода листинга программы
- Создаётся переменная типа array[1.20] of pointtype, которая представляет собой массив из 20 точек.
- Задаётся переменная n типа byte, которая представляет собой количество точек в массиве.
- Значение переменной n присваивается 5.
- Для каждой точки в массиве (от 1 до n) присваиваются значения x и y.
- Значение переменной n увеличивается на 1 и присваивается значение n+1.
- Значение переменной n присваивается первому элементу массива.
- Массив точек заполняется значениями из первого элемента массива.
- Устанавливается стиль заполнения полигонов (в данном случае - сплошная заливка).
- Заполняется полигон, используя массив точек.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д