Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
На первую страницук этому сообщениюк последнему сообщению

Открыть новую тему     Написать ответ в эту тему

globus_ussr



Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

{$M $1000, 0, 0}
Program Stroka;
uses Crt, Dos;
type video = array[1..25,1..80] of  
record
symbol:char;
attr:byte;
end;
var  
memory: video  absolute $B800:$0000;
OldVector: Procedure;
OldKey: Procedure;
vkl:boolean;
time,time1,s:real;
str:string[80];
str1: array[1..25,1..80] of char;
i,j,code1,code2,n,k,dlin,p,m,x,y: integer;
 
Procedure  SetCurSize(BegLine, EndLine: Byte);
Var Regs:Registers;
Begin
With Regs Do
Begin
AH:=$01;  CH:=BegLine;   CL:=EndLine;
End;
Intr($10,Regs);
End;  
 
 
{$F+}
procedure NewProc; interrupt;
begin
     time:=time+time1;
     if(time>s) then
     begin
          time:=0;
          if(vkl=true) then
          begin
               SetCurSize($20, $00);
               j:=j-1;
               if j=0 then j:=80;
               p:=j;
               k:=0;
               for i:=1 to 80 do  
               begin
                    for m:=1 to 25 do
                    memory[m][i].symbol:=str1[m][i];
               end;
               for i:=1 to dlin do  
               begin
                    if (p+k=81) then  
                    begin
                         p:=1;  
                         k:=0;
                    end;
                    memory[n][p+k].symbol:=str[i];
                    k:=k+1;
                    if k=81 then k:=0;
               end;
          end
     end;
     Oldvector;
end;
{$F-}
{$F+}
procedure Key; interrupt;
begin
     if (port[$60]=1) then  
     begin
          vkl:=false;
          for i:=1 to 80 do  
          begin
               for m:=1 to 25 do
               memory[m][i].symbol:=str1[m][i];
          end;
          SetCurSize($06, $07);
          GoToXY(x,y);
     end;
     if vkl=true then
     begin
          SetCurSize($20, $00);
          for i:=1 to 80 do  
          begin
               for m:=1 to 25 do
               memory[m][i].symbol:=str1[m][i];
          end;
          p:=j;
          k:=0;
          for i:=1 to dlin do  
          begin
               if (p+k=81) then  
               begin
                    p:=1;  
                    k:=0;
               end;
          memory[n][p+k].symbol:=str[i];
          k:=k+1;
          if k=81 then k:=0;
          end;
     end;
     Inline($9C);
     OldKey;
end;
{$F-}
BEGIN    
  TextMode(3);
  if ParamCount>=3 then
     begin
          Val(ParamStr(1), s, Code1);      {s-скорость перемещения текста в секундах}
          Val(ParamStr(2), n, Code2);      {n-номер строки где будет текст<=25}
          for i:=3 to ParamCount do str:=str+ParamStr(i)+' ';   {str-текст <=80 символов}
          time:=0;
          vkl:=true;
          j:=2;
          dlin:=length(str);
          k:=0;
          if (code1=0) and (s>0) then
                 begin
                      if (code2=0) and (n>0) and (n<=25) then
                           begin
                                if (dlin>0) and (dlin<82) then
                                    begin
                                         time1:=1/18.2;
                                         dlin:=dlin-1;
                                         writeln('Dla ostanovki stroki press <Esc>');
                                         x:=wherex;
                                         y:=wherey;
                                         SetCurSize($20, $00);
                                         for i:=1 to 80 do  
                                         begin
                                              for m:=1 to 25 do
                                              str1[m][i]:=memory[m][i].symbol;
                                         end;
                                         GetIntVec($8,@OldVector);
                                         SetIntVec($8,Addr(NewProc));
                                         GetIntVec($9,@OldKey);
                                         SetIntVec($9,Addr(Key));
                                         Keep(0);
                                    end
                                else
writeln('Oshibka! Vvedite 3-i parametr pravilno, primer: 5.exe  0.2  5  This is a string');
                           end
                      else
                      writeln('Oshibka! Vvedite 2-i parametr pravilno, primer: 5.exe  0.2  5  This is a string');
                 end
          else
          writeln('Oshibka! Vvedite 1-i parametr pravilno, primer: 5.exe  0.2  5  This is a string');
      end
  else
    begin
     writeln('Oshibka! Vvedite 3 parametra, primer: 5.exe  0.2  5  This is a string');
     writeln('1 parametr - skorost peremeshenia stroki');
     writeln('2 parametr - nomer stroki gde budet tekst');
     writeln('3 parametr - tekst stroki');  
     writeln('Dla ostanovki stroki press <Esc>');
    end;
END.

Всего записей: 249 | Зарегистр. 06-04-2005 | Отправлено: 19:39 16-01-2012 | Исправлено: globus_ussr, 19:43 16-01-2012
Открыть новую тему     Написать ответ в эту тему

На первую страницук этому сообщениюк последнему сообщению

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Задачи на Pascal/Object Pascal/Free Pascal (Delphi/Lazarus)


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru