Помощь - Поиск - Пользователи - Календарь
Полная версия: Курсор изменяет цифры числа
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Tan
Доброе время суток. Попалась интересная задачка. Допустим на экране выведено какое - то число (число может быть как целое так и дробное). Задание такое : передвигать под ним курсор, при этом имея возможность исправить любую из цифр, и что самое главное новое число потом будет обрабатываться, то есть программа должна его прочитать и записать под соответствующий тип. Какие идеи ?
volvo
Цитата
Какие идеи ?
Какие еще могут быть идеи, кроме

1) прямого доступа к видеопамяти для чтения любого символа с экрана
2) есть такая функция 08H прерывания 10H, которая читает символ из позиции, в которой находится курсор, без необходимости работы напрямую с видеопамятью...

Выбирай...
Tan
вы не могли бы описать как я могу получить это значение ? Какие - то мысли есть в голове, но вряд ли верные.

procedure getnumber;
var
regs : registers;
begin
regs.ax := $0800;
intr($10, regs);
n:= ???
end;
volvo
Я бы все-таки пользовался первым способом:
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.


Я надеюсь перевести строку в число через Val проблем не будет?

Точно так же не должно быть проблем и с перемещением курсора: пользуйся функциями wherex, wherey и gotoxy...

Работает только в Турбо Паскале, FPC даже не мучай - Absolute там не совмещает с адресом, только с другой переменной...
Tan
огромное спасибо!!! пойду разбираться, если будут вопросы отпишусь!
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.