Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Уроки программирования на Turbo Pascal


Информационный Канал Subscribe.Ru


Уроки программирования на Turbo Pascal #22

Подписчиков на 2002-11-19 - 3251 человек(а).

Рассылка проекта "Олимпиада.com.ru".


Главная Архив задач Конкурс Обучение Рассылки Форум Контакты

Здравствуйте, уважаемые подписчики!


  До сих пор мы выводили результат работы программы на черный экран белыми буквами. Но ведь современные мониторы цветные. Для установки цветов понадобится модуль CRT, содержащий стандартные процедуры и функции управления дисплеем и клавиатурой компьютера в текстовом режиме. Текстовые режимы служат для отображения символов кодовой таблицы персонального компьютера и характеризуются количеством символов в строке и строк на экране.


Урок 22


  Основная часть средств TURBO PASCAL расположена в стандартном модуле SYSTEM, с которым мы и имели дело. Этот модуль бывает нужен так часто, что он подсоединяется автоматически. Для подключения других модулей необходимо упомянуть его имя в предложении

  USES имя модуля;

  Для задания одного из текстовых режимов предназначена процедура

  TextMode (Mode:word);

  где Mode - код текстового режима, значение которого может быть задано именем константы или номером режима и принимать следующие значения:

Константа Номер режима Комментарий
BW40 0 черно-белый режим 40х25;
CO40 1 цветной режим 40х25;
BW80 2 черно-белый режим 80х25;
CO80 3 цветной режим 80х25;
MONO 7 монохромный для черно-белого адаптера;
FONT8X8 256 используется для загружаемого шрифта в режиме 80х45 или 80х50 с адаптерами VGA или EGA

     
  По умолчанию (т.е. если режим не указан явно) устанавливается режим СО80. Какой бы режим не был установлен, координаты верхнего левого угла экрана всегда определяются как (1,1). Увеличение значений происходит слева направо и сверху вниз. Значения координат нижнего правого угла зависят от установленного режима.

  С помощью процедуры

  TextBackGround (Color:byte);

  можно устанавливать различные цвета экрана текстового окна.

  Для установления цветов символов служит процедура

  TextColor (Color:byte);

  Цвет фона и цвет символов можно указывать числовой или мнемонической константой.

Мнемоническая константа Числовая константа Цвет
BLACK 0 ЧЕРНЫЙ
BLUE 1 ТЕМНО-СИНИЙ
GREEN 2 ТЕМНО-ЗЕЛЕНЫЙ
CYAN 3 БИРЮЗОВЫЙ
RED 4 КРАСНЫЙ
MAGENTA 5 ФИОЛЕТОВЫЙ
BROWN 6 КОРИЧНЕВЫЙ
LIGHTGRAY 7 СВЕТЛО-СЕРЫЙ
DARKGRAY 8 ТЕМНО-СЕРЫЙ
LIGHTBLUE 9 ГОЛУБОЙ
LIGHTGREEN 10 САЛАТОВЫЙ
LIGHTCYAN 11 СВЕТЛО-БИРЮЗОВЫЙ
LIGHTRED 12 РОЗОВЫЙ
LIGHTMAGENTA 13 МАЛИНОВЫЙ
YELLOW 14 ЖЕЛТЫЙ
WHITE 15 БЕЛЫЙ
BLINK 128 МЕРЦАНИЕ СИМВОЛА

  Процедура TextBackGround устанавливает цвет, а закрашивает экран установленным цветом процедура CLRSCR. (Если цвет не был установлен, то экран закрасится по умолчанию черным цветом). Художник сначала выбирает цвет, а потом рисует, вот и в программе сначала надо установить цвет, а уж потом закрашивать экран или выводить текст.

  Модуль CRT поддерживает возможность в любой момент работы программы использовать для вывода не весь экран, а определенную его часть, которая называется окном. Величина окна определяется пользователем, но не может превышать размера экрана. Для организации окон используется процедура


  WINDOW(Х1,Y1,X2,Y2);

  где X1,Y1 - координаты левого верхнего, а X2,Y2 - координаты правого нижнего угла окна.

  На экране может находиться несколько окон, но в каждый момент времени активным может быть только одно окно.
Следующая программа устанавливает в центре экрана окно и закрашивает его в разные цвета:

uses crt;
  var i:byte;
begin
  window(30,10,50,15);
  for i:=1 to 15 do
  begin
    textbackground(i);
    delay(50000);
    clrscr
  end
end.


  Процедура
DELAY(T:word) задерживает выполнение программы на указанное время, величина задержки зависит от тактовой частоты компьютера, чем больше частота, тем большую задержку надо ставить.

  Следующая программа реализует один из алгоритмов "бегущей строки". Эффект создается циклическим удалением из строки, выводимой на экран, заранее приклеенных к ней слева пробелов.

{Бегущая строка}
uses crt;
var str,st1:string[160];
    i,k:byte;
begin
  str:='Для получения бумажной копии включите принтер';
  st1:=' ';
  Textbackground(5);    {установка цветв фона экрана}
  ClrScr;                {очистка экрана}
  textcolor(blue);      {установка цвета текста}
  st1:=st1+str;
  For i:=1 to length(st1) do
  begin
    Delete(st1,1,1);
    GoToXY(1,10);   {установка текстового курсора в указанное место(1 позиция 10-ой строки)}
    Write(st1);     {вывод текстовой строки}
    Delay(4000);    {Задержка выполнения программы}
    DelLine         {Удаление строки отмеченной курсором}
  end
end.


Тренировочные задания.

1. Напишите программу "бегущей строки" с вводом текста строки с клавиатуры.
2. Составьте программу выводящую на экран введенную фразу разными цветами лесенкой.
3. Постройте семейство разноцветных прямоугольников, расположенных по горизонтали, в каждом из которых стоит знак вопроса.
4. Напишите программу рисующую на экране несколько вложенных друг в друга разноцветных прямоугольников.
5. Напишите программу, которая выводит на экран прямоугольник движущийся по горизонтали.

Разбор заданий 21 урока.
1. Вычислите длину самого короткого слова в предложении из трех слов, разделенных пробелами.
Для решения этой задачи надо выделить из предложения отдельные слова, определять их длину, и запоминать меньшую. Начальное значение длины можно задать 255, так как это максимальная длина предложения.

var i,k,x:byte;
a,b:string;
begin
  write('Введите предложение '); readln(a);
  x:=length(a);
  i:=1; k:=255;
  while i<x do
  begin
    b:=''; {пустая строка}
    while (i<x)and(a[i]<>' ') do
    begin
      b:=b+a[i];
      i:=i+1
    end;
    i:=i+1;
    if k>length(b) then k:=length(b);
  end;
  writeln('самое короткое слово=',k);
end.


2. Заданы, фамилия, имя и отчество учащегося, разделенные пробелом. Напечатайте его фамилию и инициалы.
Задача похожа на предыдущую. Только в ней первое слово надо печатать полностью, а у остальных только первую букву.

var i:byte;
    a,b:string;
begin
  write('Введите предложение ');
  readln(a);
  i:=1;
  b:='';
  while (a[i]<>' ') do
  begin
    b:=b+a[i]; {формируем фамилию}
    i:=i+1
  end;
  i:=i+1; {пропускаем пробел}
  write(b,' ',a[i],'.'); {выводим фамилию и первую букву имени с точкой}
  while (a[i]<>' ') do i:=i+1; {определяем позицию второго пробела}
  i:=i+1; {переходим к символу, стоящему после пробела}
  writeln(a[i],'.');
end.


3. Даны два слова. Составьте программу, определяющую можно или нет из букв слова А составить слово В.

var i,k,n:byte;
    a,b:string;
begin
  write('Введите первое слово');
  readln(a);
  write('Введите второе слово');
  readln(b);
  k:=length(b);
  i:=i+1;
  while (pos(b[i],a)<>0)and (i<=k) do
  begin
    n:=pos(b[i],a);
    delete(a,n,1);
    i:=i+1
  end;
  if i<=k then writeln('нельзя') else writeln('можно');
end.

4. Даны два слова. Определить, сколько начальных букв первого слова совпадает с начальными буквами второго слова.

var i,k,n:byte;
    a,b:string;
begin
  write('Введите первое слово');
  readln(a);
  write('Введите второе слово');
  readln(b);
  if length(b)< length(a) then k:= length(b) else k:= length(a);
  I:=1;
  while (b[i]=a[I]) and (i<=k) do I:=I+1;
  writeln(I-1,'совпадений');
end.


Желаю успехов!
Ганилова Татьяна Евгеньевна, school6@rikt.ru.
Гимназия №6, г. Междуреченск.

Распространение, переработка и тиражирование только с согласия автора.


Архив рассылки:

  Архив предыдущих выпусков рассылки: http://olimpiada.com.ru/learing.php?lesson=all;

Урок 1 Урок 2 Урок 3 Урок 4 Урок 5
Урок 6 Урок 7 Урок 8 Урок 9 Урок 10
Урок 11 Урок 12 Урок 13 Урок 14 Урок 15
Урок 16 Урок 17 Урок 18 Урок 19 Урок 20
Урок 21

Реклама в рассылке:

RLE    

  


Подпишитесь на наши рассылки:

Новости проекта "Олимпиада.com.ru" [Алексей Шамис]
Новости проекта "Olimpiada.com.ru". Новые темы на форуме. Информация о пополнениях в архиве задач. Оперативно и своевременно!

Уроки программирования на Turbo Pascal [Татьяна Ганилова]
Хотите стать Великим Программистом? Начните свой путь к вершине славы с изучения языка Turbo Pascal. Он как нельзя лучше подходит для начинающих программистов и в то же время используется для разработки сложных "профессиональных" программ.

Олимпиадные задачи с решениями на Turbo Pascal [Алексей Шамис]
В рассылке публикуются решения интересных олимпиадных задач различного уровня. Содержит много теоретической информации. Периодичность - 2-3 раза в неделю.

Задача в неделю. Олимпиадные задачи по информатике [Александр Алексеев]
Каждый понедельник в рассылке публикуется задача, которую необходимо решить и в следующий понедельник прислать программу на тестирование. Решения проверяются, и в пятницу публикуется разбор и итоги тестирования.



Всегда рады видеть Вас на нашем сайте.

Copyright © 2002 by Tatyana Ganilova.



http://subscribe.ru/
E-mail: ask@subscribe.ru
Отписаться
Убрать рекламу

В избранное