Программирование на Turbo Pascal





Содержание:
  • Цикл for .. to .. do
  • Символьные и строковые переменные.
  • Операции с символами и строками.


  • Цикл for .. to .. do

    В Turbo pascal при выводе информации на экран можно изменять цвет выводимых символов. Для отображения символов в цвете есть 16 цветовых констант с 0 по 15. Цвет с номером 0 - чёный, 1 - синий и так далее. Процедура, изменяющая цвет вывода называется textcolor(n), где n - номер цвета. Попробуем вывести на экран строки, раскрашенные во все возможные цвета:
    Textcolor(0);
    Wtrteln('Color = 0');
    Textcolor(1);
    Wtrteln('Color = 1');
    : Textcolor(15);
    Wtrteln('Color = 15');
    Согласитесь, что писать программу таким способом очень утомительно, ведь нужно написать 32 строки, практически с одинаковым содержимым. В строках меняется только номер цвета. Разумным решением такой проблемы было бы создать цикл, повторяющий заданные действия 16 раз. Для организации повторяющихся действий в Паскале существует несколько видов циклов. В нашем случае нужен цикл, который повторил бы определённые действия заданное число раз. Запись такого цикла выглядит следующим образом:
    For начальное значение to конечное значение do действие; - в случае одного действия и
    For начальное значение to конечное значение do
    Begin
      Действие 1;
      Действие 2;
      ...
      Действие Х;
    End;
    - в случае нескольких действий.
    В цикле должна быть задействована переменная целого типа - счётчик повторений цикла, именно этой переменной задаётся начальное значение, а конечное значение задаётся просто числом.
    Зададим в разделе var переменную, например n, целого типа Integer. В программе напишем цикл в котором n будет изменяться от 0 до 15 Изменяющееся значение n будет изменять цвет выводимых символов:
    uses crt;
    var
      n: integer;
    begin
      clrscr;
      for n:= 0 to 15 do
      begin
       textcolor(n);
       writeln('Color N= ',n);
      end;
      readln;
    end.
    Полученная таким простым образом программа на экране будет давать такой результат:

    Строку с номером 0 мы не видим, так как она чёрного цвета.
    Цикл for может работать "в обратную сторону", то есть начальное значение может быть больше конечного, а вместо оператора to, следует записать downto.
    Символьные и строковые переменные.

    В предыдущих разделах мы упоминали о символьных и строковых переменных, рассмотрим их более подробно.
    Символьные переменные - тип char, это набор отображаемых и неотображаемых символов. Неотображаемые символы, это символы, предназначенные для каких-нибудь действий, например перевода строки (нажатие клавиши Enter). За каждым символом закреплён определённый уникальный номер из таблицы символов.
    Для получения символа по его номеру n, в языке Паскаль есть функция chr(n), которая возвращает символ. Обратная ей функция, которая возвращает код n символа ch - функция ord(ch).
    Напишем небольшую программу, которая будет выводить на экран символы по их номеру в таблице кодов. Следует учесть, что некоторые символы в таблице кодов являются управляющими, например, такие как 13 - Enter, 32 - Пробел и так далее. Такие символы на экране не отображаются, а выполняют свои прямые "обязанности", так например символ с кодом 13 переводит текст на новую строку.
    В нашей программе, мы будем выводить символы в 20 строк по 8 штук в строке. Начнём с символа 33 и по 193. Используем цикл for в котором переменная n будет счётчиком числа выводимых символов. Нужна будет ещё одна переменная, назовём её, например m, она будет счётчиком числа символов в строке и, наконец, нужна будет символьная переменная, назовём её sym. Программа вывода части таблицы символов будет выглядеть так:

    uses crt;
    var
    {Объявляем переменные}
    sym : char;
    n, m: integer;
    begin
      clrscr;
      m:= 1; ; {Задаём положение первого символа в строке}
      for n:= 33 to 193 do
    begin
      if m < 8 then write(n,'= ',chr(n),' '); {Выводим 7 символов в строку}
      if m = 8 then writeln(n,'= ',chr(n),' '); {Выводим 8-й символ и переводим строку}
      inc(m); {увеличиваем счётчик символов в строке на 1}
      if m = 9 then m:= 1; {Если счётчик равен 9, то начинаем опять с 1-го символа в строке}
    end;
      readln;
    end.

    Работа программы будет выглядеть следующим образом:


    В этой программе можно произвольно задавать диапазон выводимых символов. Например for n:=1 to 50 .... При запуске программы можно посмотреть первые 50 символов.

    В Turbo Pascal есть ещё один тип символьных данных, это тип String - строка символов. Строка символов в Pascal может содержать до 255 символов. Фактически, строка это линейный массив из символов. Забегая вперёд (о массивах подробно в следующих разделах), можно сказать, что у каждого символа в строке есть порядковый номер - индекс. По индексу можно обратиться к любому символу в строке. Строковые переменные, так же как и символьные, при вызове должны заключаться в апострофы.

    Операции с символами и строками.

    Рассмотрим все возможные действия, которые можно производить символами и строками.
    Строковые переменные объявляются так же, как и любые другие переменные, и имеют тип String. Например:
    Var
       S1, mystr: string;
       Sym1, ch100 : char;

    При присваивании переменной определённых значений, значения берутся в апострофы, например:
    Sym1:= 'G';
    Mystr := 'Hello Word';
    S1:= '!!!';
    Символы и строки можно складывать:
    S:= Mystr + S1; { в результате строка S будет 'Hello Word!!!'; }
    Можно получить любой символ из строки по индексу символа в строке, например:
    Ch := Mystr[7]; {В квадратных скобках указывается порядковый номер символа в строке. Символ Ch в данном случае будет равен 'W' }

    В Turbo Pascal есть встроенные процедуры и функции для работы со строками:
    Length(s:string):integer; - функция возвращает число символов в строке. Например: ns:= Length('Hello'); числовой переменной ns будет присвоено значение 5.
    Copy(s:string; index:integer; count:integer):string; - Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index. Например:
    s := 'Turbo Pascal';
    s1 := copy(s, 1, 5); {s3 будет равно 'Turbo'}
    s2 := copy(s, 7, 6); {s4 будет равно 'Pascal'}
    Delete(var s:string; index,count:integer); Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index. Например:
    s := 'Turbo Pascal';
    delete(s,1,6); {s будет равно 'Pascal'}
    Insert(source:string; var s:string;index:integer);
    Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки. Например:
    s := 'Pascal Version 7';
    insert('Turbo ',s,1); {s будет равно 'Turbo Pascal Version 7'}
    Pos(substr,s:string):byte;
    Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0. Например:
    s := 'Turbo Pascal';
    x1 := pos('Pascal', s); {x1 будет равно 6}
    x2 := pos('Basic', s); {x2 будет равно 0}
    Str(X: арифметическое числовое выражение; var st: string);
    Процедура преобразует численное выражение X в его строковое представление и помещает результат в st.
    Val(st: string; x: числовая переменная; var code: integer);
    Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x - может быть как целой, так и действительной переменной. Если в st встречается недопустимый (с точки зрения правил записи чисел) символ, то преобразование не происходит, а в code записывается позиция первого недопустимого символа. Выполнение программы при этом не прерывается, диагностика не выдается. Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании.
    В заключение этой темы напишем программу подсчёта числа заданных символов в строке:
    uses crt;
    var
      n: integer; {переменная для цикла}
      z: integer; {переменная для подсчёта числа символов}
      s: string; {вводимая строка}
      c: char; {вводимый символ}
      cx: char; {символ, который будет браться из строки}
    begin
      clrscr;
      z:= 0;
      write('Wwedi stroku: ');readln(s); {вводим строку для исследования}
      write('Wwedi symwol: '); readln(c); {вводим символ для поиска в строке}
    for n:= 1 to length(s) do
    begin
      cx:= s[n]; {{берём из строки очередной символ с индексом n}
      if cx = c then inc(z); {если введённый и взятый символ совпадают, то увеличиваем счётчик z на 1}
    end;
      writeln('Chislo simwolow ',c, '=', z); {Выводим результат на экран}
      readln;
    end.

    Результат работы программы будет выглядеть так:





       ©Гуков Константин Михайлович 2006 - 2011     Почта: [email protected]