Доброе время суток. Попалась интересная задачка. Допустим на экране выведено какое - то число (число может быть как целое так и дробное). Задание такое : передвигать под ним курсор, при этом имея возможность исправить любую из цифр, и что самое главное новое число потом будет обрабатываться, то есть программа должна его прочитать и записать под соответствующий тип. Какие идеи ?
вы не могли бы описать как я могу получить это значение ? Какие - то мысли есть в голове, но вряд ли верные.
procedure getnumber;
var
regs : registers;
begin
regs.ax := $0800;
intr($10, regs);
n:= ???
end;
Я бы все-таки пользовался первым способом:
uses crt, dos;
type
{
описываем структуру, которую имеет видеопамять
(символ и затем - его атрибут: цвет фона, цвет текста, мигание)
}
R = record
ch: char; attr: byte;
end;
{
Это - массив наложенный на видеопямять,
поэтому ее содержимое можно читать из этого самого массива...
Для упрощения я сделал работу с экраном 25 строк * 80
столбцов и принял за основу цветной режим, но можно сделать
и универсальную функцию...
}
var
VMem: array[1 .. 25, 1 .. 80] of R
absolute $b800:$0000;
var
currx, curry: integer;
s: string;
begin
clrscr;
{ сначала пишем на чистый экран какое-то число }
writeln;
writeln(' 12345 ');
{
потом установим курсор под одну из цифр этого числа
и переместимся по нему вправо, пока не встретим пробел или нулевую позицию экрана.
в этом случае мы достигли начала числа ...
}
gotoxy(4, 2);
currx := wherex; curry := wherey;
while (currx >= 1) and (VMem[curry, currx].ch <> ' ') do dec(currx);
inc(currx, 1);
{ а теперь идем обратно и читаем его в строковую переменную: }
s := '';
while VMem[wherey, currx].ch <> ' ' do begin
s := s + VMem[wherey, currx].Ch;
inc(currx);
end;
{ Вот то число, которое было прочитано! }
gotoxy(10, 10);
writeln('s = ', s);
end.
огромное спасибо!!! пойду разбираться, если будут вопросы отпишусь!