Вывод координат разными цветами - Free Pascal
Формулировка задачи:
Добрый день!
Помогите пожалуйста с программой. Есть строка вида: "12,34 34,56, 76,2"
Где первое число(до запятой) это номер строки, а второе число это номер символа в этой строке.
В одной процедуре мы получаем координаты символа и идём в другую процедуру, где по заданным координатам мы должны с помощью графического модуля(init Graph) Вывести строку одного цвета(первая координата), и в этой строке символ(вторая координата) должен быть выделен другим цветом. Подскажите как это сделать
Procedure Draw(var numstr,numsto:string); var f:text; str,strV:string; count:integer; begin assign(f,str0); reset(f); count:=0; while not Eof(f) do begin read(f,str); count:=count+1; if count=numstr then for i:=1 to length(str) do begin if str[i]=numsto then else strV:=strV+str[i]; end; end; end; Procedure Search_Err(var str,str1:string); const D=[',',' ']; var n,count:integer; numstr,numsto:string; begin n:=1; count := WordCount(str1, D); while n < Count do begin numstr:=ExtractWord(n, str1, D); numsto:=ExtractWord(n + 1, str1, D); inc(n,2); Draw(numstr,numsto); end; end;
Решение задачи: «Вывод координат разными цветами»
textual
Листинг программы
uses graph;
Procedure Search(var str:string;var numstr,numsto:integer);
var c:integer;
begin
val(copy(str,1,pos(',',str)-1),numstr,c);
delete(str,1,pos(',',str));
val(copy(str,1,pos(' ',str)-1),numsto,c);
delete(str,1,pos(' ',str));
end;
Procedure Draw(var f:text;numstr,numsto,k:integer);
var str,str1:string;
i,j:integer;
begin
reset(f);
i:=0;
while not Eof(f) do
begin
readln(f,str);
i:=i+1;
if i=numstr then
begin
j:=1;
str1:=str;
end;
end;
close(f);
for i:=1 to length(str1) do
begin
if i=numsto then setcolor(12)else setcolor(10);
outtextXY(i*8,k,str1[i]);
end;
end;
var s:string;
gd,gm,n,m,k:integer;
f:text;
begin
s:='3,12 5,13 8,12';{в строке должны быть номера строк, которые есть в файле
и номера символов которые есть в строке}
s:=s+' ';
gd:=0;
initgraph(gd,gm,'');
settextstyle(0,0,1);{шрифт по умолчанию, горизонтальный, шприна символов=8}
k:=20;{координата Y для первой строки}
assign(f,'1.txt');
while s<>'' do
begin
Search(s,n,m);
Draw(f,n,m,k);
k:=k+20;
end;
readln
end.
Объяснение кода листинга программы
Этот код использует функцию для поиска и отображения чисел в тексте, а затем использует эти числа для отображения текста в графическом режиме. Вот список действий, которые выполняет код:
- Подготавливает файл для чтения и записывает его в переменную
f. - Создает переменные
str,str1,i,j,k,gd,gm,n,mи устанавливает их значения. - Устанавливает начальную позицию X и Y для отображения текста.
- Проверяет, не пуст ли файл, и читает его построчно, пока он не закончится.
- Когда он находит строку, которую нужно отобразить, он сохраняет ее в переменную
str1и устанавливает начальное значение X и Y для отображения текста. - Затем он проходит по каждому символу в строке и отображает его в графическом режиме с помощью функции
outtextXY. - После завершения отображения текста он увеличивает значение Y на 20 для перехода к следующей строке.
- Когда он доходит до конца файла, он завершает графический дисплей с помощью функции
readln.