Модуль GraphABC


#1
  1. Написать программу, которая закрашивает фон экрана произвольным цветом
  2. Выводит строку “Brave World” два раза разными шрифтами: внизу экрана горизонтально и слева от рисунка с 3 задачи вертикально
  3. Рисует белого снеговика (далее в отдельной программе, если я правильно понял)
  4. Выводит оси координат y=x+2 зеленым цветом
  5. Выводит черными точками график функции y=f(x)=kx+10k, k=7 (координат.оригин?)

Код написал, но не уверен в правильности. Кидаю на проверку!) Пока что написал. Другую часть попробую чуть позже выложить

  1. uses graphABC begin Setwindowsize(800,600); ///ширина и высота 800 точек на 600 clearwindow(clPink); ///фон
  2. SetFontColor(clGold); //цвет шрифта Texout(370,600,‘Brave World’); //Итого текст должно находится снизу экрана посередине горизонтально. Теперь надо вывести текст слева от рисунка вертикально. Думаю написать ТекстОут несколько раз, изменяя высоту от предыдущего символа на -10 или -30. Может через for получится, попробую так for i:=1 to 10 do textout(a,b-30);
  3. SetPenColor (clWhite); SetPenWidth(3); Circle (200,300,75); Circle (200,175,50); Circle (200,100,25); FloodFill (200,100,clGray); FloodFill (200,175,clGray); FloodFill (200,300,clGray); SetPenColor (clBlack); SetPenWidth(5); Line (125,225,175,175); Line (250,175,300,175); SetPenColor (clBlack); Circle (190,95,5); FloodFill (190,95,clBlack); Circle (210,95,4); FloodFill (210,95,clBlack); Line (195,100,205,100); FloodFill (205,105,clBrown); end.

#2
  1. ClearWindow(clRandom)
  2. TextOut(0,0,'Brave World') и
  TextOut(0,0,
  'B'+char(10)+
  'r'+char(10)+
  'a'+char(10)+
  'v'+char(10)+
  'e'+char(10)+
  ' '+char(10)+
  'W'+char(10)+
  'o'+char(10)+
  'r'+char(10)+
  'l'+char(10)+
  'd')

Это самое простое. Но вы даже не попытались в паскале это написать, на ваше TexOut компилятор разумеется ругается. Для остального давайте вы почитаете про GraphABC в справке, посмотрите примеры (C:\PABCWork.NET\Samples) и попробуете разобраться сами. Вот когда вы попробовали, сделали всё что могли и не работает надо обращаться за помощью. И тогда уже писать в тему помощь новичкам.

А ещё чтоб код выглядел красиво ставьте по 3 знака ` с обоих сторон от него, или по 1 если код в 1 строчку. Этот знак находится за ё в англ раскладке.


#3

Это естественно. Всю справку и книгу, что нам выдали по программированию по АБС-нет, где описана теория Графа, я прочитал. И основываясь на этом писал эту программу. Но раз уж вы сомневаетесь, прочитаю я их еще раз и попробую написать код


#4

Я говорю про то что надо код сначала написать и только если он не работает обращаться за помощью на форумы, иначе получается что мы все за вас делаем…


#5

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

function f(x:real):real;
begin
f:=x+2;
end;
var 
begin
setwindowsize(600,600);
centerwindow;
x0:=windowwidth div 2;
y0:=;;;```

Опишите схему. Что за чем идет. Думаю тогда будет понятно.

#6

А я говорю посмотрите примеры, там есть где то функция рисующая готовый график, чтоб в 1 строчку… Вот в самом интерфейсе паскаля:


#7

Нормального кода систем координат в семпл-нет. Есть хорошая система координат в GraphWPF, но её функции в АБС не работают. В справках пишут о функции function Coordinate: GraphABCCoordinate. Но ладно, не будем рассматривать эти задачи тут.

Я написал код

begin
Setwindowsize(800,600);
clearwindow(clYellow);
setFontcolor(clGold);
textOut(370,500,'brave world');
setfrontcolor(clPink);
  TextOut(370,170,
  'B'+char(10)+
  'r'+char(10)+
  'a'+char(10)+
  'v'+char(10)+
  'e'+char(10)+
  ' '+char(10)+
  'W'+char(10)+
  'o'+char(10)+
  'r'+char(10)+
  'l'+char(10)+
  'd')
 SetPenColor(clOrange);
SetPenWidth(3);
Circle(500,300,75);
Circle(500,175,50);
Circle(500,100,25);
FloodFill(500,100,clOrange);
FloodFill(500,175,clOrange);
FloodFill(500,300,clOrange);
SetPenColor(clBlack);
SetPenWidth(3);
Line(377,225,449,175);
Line(550,175,650,175);
SetPenColor(clSilver);
Circle(490,95,1);
FloodFill(490,95,clSilver);
Circle(510,95,1);
FloodFill(510,95,clSilver);
Line(500,100,521,120);
FloodFill(521,120,clSilver);
end.```

Два вопроса. Можно ли сделать, чтобы прямоугольник, в котором выводится текст был не белого цвета, а цвета фона графического экрана?
что делает чар(10)? спускает следующий символ на 10 точек вертикально&

#8

Нет, все задания всегда надо выполнять в разных файлах.

Попробуйте цвет кисти поставить прозрачный, тогда фон тексту не должно делать белым…

Coordinate это не то, в справку надо заглядывать когда знаешь имя функции и надо узнать как работает… Samples\Graphics\GraphABC\Graphics в этой папке смотрите.

char это тип символа, из которых состоят строки. Я беру символ номер 10 в юникоде который соответствует символу новой строки, то есть я сделал чтоб вывело много строчный текст.


#9
begin
Setwindowsize(800,600); 
clearwindow(clMediumTurquoise); 
SetFontColor(clGold);
SetBrushColor(clMediumTurquoise);
TextOut(370,500,'Brave World'); 
SetFontColor(clPink);
SetBrushColor(clMediumTurquoise);
TextOut(370,170,
  'B'+char(10)+
  'r'+char(10)+
  'a'+char(10)+
  'v'+char(10)+
  'e'+char(10)+
  ' '+char(10)+
  'W'+char(10)+
  'o'+char(10)+
  'r'+char(10)+
  'l'+char(10)+
  'd');
SetPenColor (clMidnightBlue);
SetPenWidth(3);
Circle (500,300,75);
Circle (500,175,50);
Circle (500,100,25);
FloodFill (500,100,clSnow); 
FloodFill (500,175,clSnow);
FloodFill (500,300,clSnow);
Circle(500,300,5);
FloodFill(500,300,clWhite);
Circle(500,175,5);
FloodFill(500,175,clWhite);
SetPenColor (clBlack); 
SetPenWidth(3);
Line (410,77,449,170);
Line (550,175,600,77);
Circle(410,77,10);
Circle(600,77,10);
FloodFill(410,77,clSnow);
FloodFill(600,77,clSnow);
SetPenColor (clBlack);
Line(603,70,619,50);
Line(601,70,601,50); 
Line(413,70,407,50);
Line(413,70,423,50);
Circle (490,95,1);
FloodFill (490,95,clSilver);
Circle (510,95,1);
FloodFill (510,95,clSilver);
Line (500,100,521,120);
FloodFill (521,120,clSilver);
end.

uses GraphABC;
function f(x:real):real;
begin
  f:=x+2;
end;
var m,x:real;
    a,b,c,i:integer;
begin
setwindowsize(500,500);
centerwindow;
setwindowcaption('График y=x+2');
a:=-7;
b:=7;
c:=windowwidth div 2;
m:=(c-20)/5;
setpencolor(clGold);
line(0,c,2*c,c);
textout(2*c-20,c-20,'X');
line(c,0,c,2*c);
textout(c+5,0,'Y');
textout(c+5,c+10,'0');
for i:=1 to 8 do
 begin
  line(c+round(i*m/2),c-3,c+round(i*m/2),c+3);
  line(c-round(i*m/2),c-3,c-round(i*m/2),c+3);
  textout(c+round(i*m/2)-5,c+10,floattostr(i/2));
  textout(c-round(i*m/2)-5,c+10,floattostr(-i/2));
  line(c-5,c-round(i*m/2),c+5,c-round(i*m/2));
  line(c-5,c+round(i*m/2),c+5,c+round(i*m/2));
  textout(c-25,c-round(i*m/2)-5,floattostr(i/2));
  textout(c-25,c+round(i*m/2)-5,floattostr(-i/2));
 end;
setpencolor(clBlue);
x:=a;
moveto(c+round(x*m),c-round(f(x)*m));
while x<=b do
 begin
  lineto(c+round(x*m),c-round(f(x)*m));
  x:=x+3;  
  end;
  end.

uses GraphABC;
function f(x:real):real;
begin
  f:=x+2;
end;
var m,x:real;
    a,b,c,i:integer;
begin
setwindowsize(500,500);
centerwindow;
setwindowcaption('График y=x+2');
a:=-7;
b:=7;
c:=windowwidth div 2;
m:=(c-20)/5;
setpencolor(clGold);
line(0,c,2*c,c);
textout(2*c-20,c-20,'X');
line(c,0,c,2*c);
textout(c+5,0,'Y');
textout(c+5,c+10,'0');
for i:=1 to 8 do
 begin
  line(c+round(i*m/2),c-3,c+round(i*m/2),c+3);
  line(c-round(i*m/2),c-3,c-round(i*m/2),c+3);
  textout(c+round(i*m/2)-5,c+10,floattostr(i/2));
  textout(c-round(i*m/2)-5,c+10,floattostr(-i/2));
  line(c-5,c-round(i*m/2),c+5,c-round(i*m/2));
  line(c-5,c+round(i*m/2),c+5,c+round(i*m/2));
  textout(c-25,c-round(i*m/2)-5,floattostr(i/2));
  textout(c-25,c+round(i*m/2)-5,floattostr(-i/2));
 end;
setbrushcolor(clBlack);
x:=a;
while x<=b do
 begin
  circle(c+round(x*m),c-round(f(x)*m),1);
  x:=x+0.1;  
  end;
  end.

То что автор темы сделал скидываю


#10

Посоветуйте как можно сделать анимацию падающих снежинок.

begin
Setwindowsize(800,600);
clearwindow(clMediumTurquoise);
SetPenColor (clMidnightBlue);
SetPenWidth(3);
Circle (500,300,75);
Circle (500,175,50);
Circle (500,100,25);
FloodFill (500,100,clSnow); 
FloodFill (500,175,clSnow);
FloodFill (500,300,clSnow);
Circle(500,300,5);
FloodFill(500,300,clWhite);
Circle(500,175,5);
FloodFill(500,175,clWhite);
SetPenColor (clBlack); 
SetPenWidth(3);
Line (410,77,449,170);
Line (550,175,600,77);
Circle(410,77,10);
Circle(600,77,10);
FloodFill(410,77,clSnow);
FloodFill(600,77,clSnow);
SetPenColor (clBlack);
Line(603,70,619,50);
Line(601,70,601,50); 
Line(413,70,407,50);
Line(413,70,423,50);
Circle (490,95,1);
FloodFill (490,95,clSilver);
Circle (510,95,1);
FloodFill (510,95,clSilver);
Line (500,100,521,120);
FloodFill (521,120,clSilver);
end.```

#11

Реализация этого уже зависит от вашей фантазии. Я бы сделал бесконечный цикл while true do с перерисовкой и перерасчётом снежинок(вращение+движение вниз и может немого в бок). Но даже это как реализовывать есть много вариантов, от массива с координатами снежиное до полного просчёта физики + рисовать тоже можно разными способами. Задавайте вопрос как реализовать себе самому когда.

И выделение кода вы всё ещё используете не правильно, поэкспериментируйте с предпросмотром справа, потому что у вас получается

begin writeln end.

вместо

begin
  writeln
end.

#12

Учтено


#13

А как в модуле GraphABC выводить текст под уголом 90 градусов?


#14

Не совсем сюда, но допишу есть ли в какой-нибудь стандартной библиотеке извлечение каких-то примитивных звуков?


#15

Зачем, если через Windows доступен и медиаплеер и все прочие программы?


#16

Один из простых вариантов - использовать SoundPlayer. Обратите внимание на следующее:

SoundPlayer Класс не может воспроизвести остальных типов файлов, например .wma или MP3.

, хотя, Вы можете конвертировать в WAV другой тип файла.


#17

А текст поворачивать?


#18

Опять же типичное задание турбопаскаля - музыкальный инструмент. Нажал одну кнопку , одна нота, другую - другая. Помню в школе ещё делал программу “проверка слуха”. издавались звуки всё более высокой частоты , пока не перестанишь слышать. Что-то подобное сейчас реализуют на роликах в ютубе, но там всё отвратно - ютуб обрезает звуки высокой частоты.


#19

В GraphABC - это сложно. Вам надо на System.Drawing.Bitmap нарисовать буквы, потом повернуть и создать на основе полученного битмапа избражение (в GraphABC вроде для этого есть конструктор).

Системные звуки можно воспроизводить с помощью System.Console.Beep. Но это работает только для бибиканья, можно задать только частоту и продолжительность. И, если я всё правильно понимаю - воспроизведено это вроде будет встроенной в системный блок бибикалкой, а не динамиками, так что качество ужасное.


#20

Да, большое спасибо, именно такая бибикалка и нужна была! А по графике - я в итоге решил срузу на GraphWPF переводить код, там с поворотом нормально.