Invest-currency.ru

Как обезопасить себя в кризис?
3 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Массив символов паскаль

Массив символов.

Одномерный массив символов по своим свойствам существенно отличается от всех остальных массивов языка Паскаль. Свойства одномерного массива символов приближены к свойствам коротких строк (String).

Инициализация массива символов.

  • Массив можно объявить и присвоить ему начальное значение непосредственно в разделе констант. При этом требуется соблюдение условия — длина текстовой константы должна равняться количеству элементов массива. CONST В: ARRAY[1 .. 50] OF CHAR = ‘Я учусь программировать’;
  • Массив символов можно ввести с клавиатуры как последовательность символов конечной длины N, не превышающей количество элементов массива — N ? HIGH(B) – LOW(B) + 1.

VAR ARRAY[1.. 500] OF CHAR; I, N: WORD;
BEGIN .
WRITELN(‘Введите длину строки текста не более 500 символов, N’);
READLN(N);
WRITELN(‘Введите строку текста В’);
FOR I :=1 ТО N DO READ(B[I]); .
Существенным недостатком этого способа ввода текста является необходимость знать точное количество символов N во вводимой строке.

  • Массив символов можно заполнить в теле программы с помощью оператора присваивания. Но есть ограничение — количество символов в текстовой константе должно быть равно количеству элементов массива.

VAR ARRAY[1..23] OF CHAR;
BEGIN .
В:= ‘Я учусь программировать’;

Вывод массива символов.

Массив символов можно вывести на экран монитора двумя способами.

  • Процедуры WRITELN и WRITE поддерживают вывод массива символов. Допускается запись — WRITELN(B), где В — идентификатор одномерного массива символов.
  • Содержимое массива символов можно выводить в цикле, используя оператор WRITE(B[I]). Ниже приведен фрагмент программы, обеспечивающей посимвольный вывод элементов массива B в строку.

WRITELN(‘Массив В содержит текст:’);
FOR I := LOW(B) ТО HIGH(B) DO WRITE(B[I]); WRITELN;
Пример 9. Ввести натуральное число N. Вывести строку S, представляющую запись этого числа в двоичной системе счисления. Для пояснения алгоритма преобразования десятичного числа в двоичную систему счисления используем пример на рис. 2.1.

PROGRAM PR9;
CONST B:ARRAY[1..10] OF CHAR = «;
VAR I, К, N: BYTE; S: STRING[1];
BEGIN
WRITELN(‘Введите число N’);
READLN(N);
К:= 0;
WHILE N> 1
DO BEGIN
К:= К + 1;
STR(N mod 2:1, S);
В[К] := S[1];
N := N div 2
END;
IF(N= 1) or (K = 0)
THEN BEGIN
К := К + 1;
STR(N mod 2:1, S);
B[K] := S[1]
END;
WRITELN(‘B двоичном коде число будет равно:’);
FOR I:= К DOWNTO 1 DO WR1TE(B[I]); <Вывод массива символов>
WRITELN
END.

Из этой программы видно, что строковая процедура STR, преобразующая число в строку, не принимает в качестве аргумента переменные типа CHAR. Именно по этой причине пришлось ввести строку S единичной длины.

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

Массивы символов можно использовать в сцепках. Например, в операторе WRITELN в списке вывода допускается строковое выражение:
WRITELN(‘Результирующая строка:’ + B + ‘,’);
где i массив символов. Знак + означает операцию сцепки строк. Недостатком такого выражения является то, что пустые разряды массива B займут на экране свои позиции, и поэтому запятая может оказаться на значительном удалении от текста, хранимого в массиве B.
Массивы символов A и B в отличие от массивов всех других типов можно сравнивать между собой с помощью операций отношения =, <>; допускается использование также , =.
Сравнение массивов производится путем последовательного сравнения литер (элементов массивов) от наименьшего индекса до наибольшего индекса. Сравнение завершается при первом несовпадении или достижении верхнего индекса одного из массивов. Если Вам потребуется заправить картридж для принтера обращайтесь в надежный сервисный центр. Качественная заправка цветных картриджей HP по оптимальным ценам возможна как в офисе, так и на дому. Для достижения высокого качества печати оформляйте заявку, и опытные специалисты проведут все необходимые работы. Массивы A и B могут иметь разную размерность. В строковых выражениях сцепок массивы символов ничем не отличаются от строк. Так допустима следующая конструкция:
IF A+B>=’X = ‘ + B + ‘.’
THEN S := А + ‘за вычетом’ + В;
где A и B массивы символов, a S строка String.

Массивы символов в Паскале

Массивы символов представляют собой символьную строку определенной длины. Элементами символьного массива м.б. любой символ (типа CHR) как основного так и дополнительного набора символов кода ASCII.

Основной набор ASCII символы с кодами 0..27, дополнительный (содержит символы национальных алфавитов и др. символы) символы с кодами 128..255. Символы можно записывать указывая их код #С где С принадлежит 0..255.

Например:

Читать еще:  Запись математических выражений на языке паскаль

Символы с кодами 0..31 являются управляющими, они не отображаются на экране, а выполняют определенные функции (некоторые из них приведены в табл. 1).

Управляющие символы можно задавать как ^С.
#7 =>^G; #10 =>^J; #13 =>^M.
Эти символы можно включать в текстовые строки без разделителей.
В строках вывода они выполняют определенные функции
Writeln(^G^G’Таблица №1’:30^M^J,’A’:10,’B’:10,’y’:10);
Над данными символьного типа можно выполнять отношения (при этом сравниваются их ASCII коды). Для данных символьного типа существует набор процедур и функций:

ORD(S)– определяет порядковый номер символа по таблице кодов; ORD(‘B’)=>66;
CHR(N) – определяет символ по порядковому номеру в таблице кодов; CHR(66)=>’B’;
SUCC(S)– определяет последующий символ;
SUCC(‘B’)=>’C’;
PRED(S)– определяет предыдущий символ;
PRED(‘B’)=>’A’;
UpCASE(S)– определяет символ в верхнем регистре;
UpCASE(‘y’)=>’Y’.

Пример 17.1. Упорядочить строку символов в алфавитном порядке.

Текст программы:

Program chr_1;
Uses CRT;
Const n=10;
Type vec=array[1..n] of char;
Var Arr_s :vec;
s :char;
i :byte;
k :Boolean;
Begin
clrscr;
Writeln(‘Введите строку из 10 символов:’);
For i:=1 to n do Read(Arr_s[i]);
Readln;
Repeat
k:=True;
For i:=1 to n-1 do
If ord (Arr_s[i])> ord (Arr_s[i+1]) Then
Begin
s:=Arr_s[i];Arr_s[i]:= Arr_s[i+1];Arr_s[i+1]:=s;
k:=False;
End;
Until k;
Writeln(‘Упорядоченная строка:’);
For i:=1 to n do Write(Arr_s[i]);
ReadKey;
End.

Результаты работы программы

Введите строку из 10 символов
1qasderfgt
Упорядоченная строка:
1adefgqrst

Пример 17.2. Подсчитать количество букв, цифр и скобок в строке.

Текст программы:

Program chr_2;
Uses CRT;
Const n=100;
Type vec=array[1..n] of char;
Var Arr_s :vec;
s :char;
i,kc,kb,ks :byte;
Begin
clrscr;
kb:=0; kc:=0; ks:=0;
Writeln(‘Введите оператор:’);
i:=1;
Repeat
Read(Arr_s[i]); s:= Arr_s[i];
Case s of
‘A’..’Z’, ‘a’..’z’: kb:=kb+1;
‘0’..’9′ : kc:=kc+1;
‘(‘,’)’ : ks:=ks+1;
End;
inc(i);
Until s=’;’;
Writeln(‘Результат:’);
Write(‘kb=’,kb,’ kc=’,kc,’ ks=’,ks);
ReadKey;
End.

Результаты работы программы

Введите оператор:
y:=2*a(cos(x)+sin(x))/3;
Результат:
kb=10 kc=2 ks=6

Строковые типы данных (string)

Строка – это упорядоченная последовательность символов. Диапазон переменных строкового типа 1..255.

Массив символов паскаль

Для обработки строковой информации в Турбо Паскаль введен строковый тип данных. Строкой в Паскале называется последовательность из определенного количества символов. Количество символов последовательности называется длиной строки. Синтаксис:

n — максимально возможная длина строки — целое число в диапазоне 1..255. Если этот параметр опущен, то по умолчанию он принимается равным 255.

Строковые константы записываются как последовательности символов, ограниченные апострофами. Допускается формирование строк с использованием записи символов по десятичному коду (в виде комбинации # и кода символа) и управляющих символов (комбинации ^ и некоторых заглавных латинских букв).

Пустой символ обозначается двумя подряд стоящими апострофами. Если апостроф входит в строку как литера, то при записи он удваивается.

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

Выражения типа char можно присваивать любым строковым переменным.

В Турбо Паскаль имеется простой доступ к отдельным символам строковой переменной: i-й символ переменной st записывается как st[i]. Например, если st — это ‘Строка’, то st[1] — это ‘С’, st[2] — это ‘т’, st[3] — ‘р’ и так далее.

Над строковыми данными определена операция слияния (конкантенации), обозначаемая знаком +. Например:

В этом примере переменная c приобретет значение ‘TurboPascal’.

Кроме слияния над строками определены операции сравнения ,=,<>, =. Две строки сравниваются посимвольно, слева направо, по кодам символов. Если одна строка меньше другой по длине, недостающие символы короткой строки заменяются символом с кодом 0.

Процедуры и функции для работы со строками

В системе Turbo Pascal имеется несколько полезных стандартных процедур и функций, ориентированных на работу со строками. Ниже приводится список этих процедур и функций с краткими пояснениями. Функция возвращает в качестве результата значение текущей длины строки-параметра

Пример.
Функция выполняет слияние строк-параметров, которых может быть произвольное количество. Каждый параметр является выражением строкового типа. Если длина строки-результата превышает 255 символов, то она усекается до 255 символов. Данная функция эквивалентна операции конкатенации «+» и работает немного менее эффективно, чем эта операция.
Функция возвращает подстроку, выделенную из исходной строки s, длиной count символов, начиная с символа под номером index.

Процедура удаляет из строки-параметра s подстроку длиной count символов, начиная с символа под номером index.

Читать еще:  Из чего состоит задача математического программирования

Пример.
Процедура предназначена для вставки строки source в строку s, начиная с символа index этой строки.

Пример.
Функция производит поиск в строке s подстроки substr. Результатом функции является номер первой позиции подстроки в исходной строке. Если подстрока не найдена, то функция возвращает 0.

Процедура преобразует численное выражение X в его строковое представление и помещает результат в st.
Процедура преобразует строковую запись числа, содержащуюся в st, в числовое представление, помещая результат в x. x — может быть как целой, так и действительной переменной. Если в st встречается недопустимый (с точки зрения правил записи чисел) символ, то преобразование не происходит, а в code записывается позиция первого недопустимого символа. Выполнение программы при этом не прерывается, диагностика не выдается. Если после выполнения процедуры code равно 0, то это свидетельствует об успешно произошедшем преобразовании.

В дополнение приведем некоторые функции, связанные с типом char, но которые тем не менее часто используются при работе со строками.
Функция возвращает символ по коду, равному значению выражения n. Если n можно представить как числовую константу, то можно также пользоваться записью #n.
В данном случае функция возвращает код символа ch.
Если c — строчная латинская буква, то функция возвращает соответствующую прописную латинскую букву, в противном случае символ c возвращается без изменения.

Волгоградский государственный педагогический университет
Кафедра алгебры, геометрии и информатики

лабы по информатике, егэ

лабораторные работы и задачи по программированию и информатике, егэ по информатике

Pascal: Занятие № 11. Строковый тип данных в Паскаль

Символьный тип char в Паскале

Символьной переменной соответствует тип char:

Инициализация символьной переменной:

Основные функции для работы с символами

Функция преобразует целое число, имеющее тип BYTE, в один символ ASCII-кода:

Функция возвращает порядковый номер символа параметра в таблице ASCII:

var i: integer; begin for i:=32 to 255 do write(chr(i):3); end.

Строковые переменные в Паскаль

Строковые переменные в Паскале имеют тип String

Объявление и инициализация строковой переменной:

var a:string; begin a:=’Привет всем!’; writeln(a); end.

Ввод значения строковой переменной с клавиатуры:

var a:string; begin writeln(‘Введите слово’); readln(a); writeln(‘Вы ввели слово ‘,a); end.

Строка «рассматривается» компилятором, как массив букв:

Функции работы со строками в Pascal

var s:string[30]; n,i:integer; begin writeln(‘введите текст’); readln(s); n:=0; for i:=1 to length(s) do if s[i]=’f’ then n:=n+1; write(‘в тексте букв f = ‘,n) end.

const m = [‘1’..’9′]; var s: string; i, k: byte; begin read(s); k := 0; for i := 1 to length(s) do if s[i] in m then inc(k); writeln(‘цифр = ‘, k); readln; end.

var a,b,c:string; i:longint; begin write(‘введите слово:’); readln(a); b:=»; for i:=1 to length(a) do b:=a[i]+b; if a=b then write(‘перевертыш’) else write(‘не перевертыш’); end.

String 6. Определить, встречается ли в тексте сочетание букв «ку».

String 7. Заменить данную букву в слове другой буквой (буквы вводит пользователь).

  • После того как строка считывается (вводится), измеряется ее длина (функция length).
  • Далее стока просматривается посимвольно в цикле while или for .
  • Если символ строки входит в множество букв ( const letters=[‘a’..’z’]; ), то этот символ прибавляется к первому элементу массива слов строки ( . array [1..100] of string ).
  • Если символ равен пробелу, то увеличиваем счетчик для массива слов и переходим к следующей итерации цикла.

  • Пока не достигнем пробела, формируем элемент массива b (строковый массив — будущий массив из слов предложения). Добавляя каждую букву в переменную d.
  • При достижении пробела чистим переменную d для слова и начинаем формировать следующее слово.
  • После того, как массив из всех слов сформирован: начиная со второго элемента, сравниваем его длину с длиной предыдущего элемента. При необходимости меняем элементы местами. Проходим алгоритм до конца массива b.

    Примечание:
    Использовать функции: Pos, Copy, Delete

    Посимвольный ввод до пробела

    Посимвольный ввод удобен для «мгновенной» обработки символов в строке.

    Для организации массива символьных строк:

    1. Все данные разделяются одним пробелом. Нужно подсчитать, сколько студентов получили отметку 5.
    2. Вывести фамилии студентов, у которых оценка 2.
    3. Вывести фамилии студентов, родившихся в 1996 году.

    Пример:
    Входной текст: Алгоритм — это правила выполнения определенных действий!, предписание исполнителю! совершить последовательность действий!, набор команд для компьютера!
    Выходной текст: Алгоритм — это правила выполнения определенных действий, предписание исполнителю! совершить последовательность действий, набор команд для компьютера!

    Трудность низкая:
    Программа должна формировать в памяти вторую строковую переменную с измененным текстом, а потом выводить ее на экран.

    Читать еще:  Язык программирования паскаль для чайников

    Трудность высокая:
    Программа должна преобразовывать исходную строку без использования дополнительных переменных, и затем выводить ее на экран.

    И напоследок рассмотрим олимпиадное задание по Паскалю:

    * Решить ту же задачу, в которой сдвиг будет не на 3 позиции, а на k, причем отрицательное значение является признаком сдвига влево, положительное — вправо.

    var a:char; i,n:byte; s,s1:string; begin s1:=»; readln(s); for i:=1 to length(s) do begin n:=ord(. ); n:=n+3; if n=123 then n:=97; <в ASCII 120 - x, 97 - a>if . ; <в ASCII 121 - y, 98 - b>if . ; <в ASCII 122 - z, 99 - c>a:=chr(. ); s1:=. ; end; writeln(s1) end.

    Потренируйтесь в решении задач по теме, щелкнув по пиктограмме:

    Массив символов паскаль

    Язык:
    Русский
    English

    Константы типа массивов

    Объявление константы типа массива определяет значения компонентов массива.

    Тип компонентов массива может быть любым, кроме файлового .

    Пример

    type
    Status = (Active, Passive, Waiting);
    StatusMap = array[Status] of String[7];

    const StatStr : StatusMap = (‘Active’, ‘Passive’, ‘Waiting’);

    < компоненты StatStr:
    StatStr[Active] = ‘Active’
    StatStr[Passive] = ‘Passive’
    StatStr[Waiting] = ‘Waiting’ >

    Символьные массивы

    Упакованные константы со строковым типом (символьные массивы) могут быть определены и как одиночные символы, и как строки. Например, такое определение:

    const Digits : array[0 .. 9] of Char = (‘0’, ‘1’, ‘2’, ‘3’, ‘4’, ‘5’,
    ‘6’, ‘7’, ‘8’, ‘9’);

    может быть выражено более коротко:

    const Digits : array[0 .. 9] of Char = ‘0123456789’;

    Нуль-основанные символьные массивы

    Нуль-основанный символьный массив — это такой массив, в котором индекс первого элемента равен нулю, а последнего — положительному ненулевому целому числу. Например:

    array[0 .. X] of Char;

    const FileName = array[0 .. 79] of Char = ‘TEST.PAS’;

    Если строка короче, чем длина массива, то оставшиеся символы устанавливаются равными NULL (0), и массив будет содержать строку с нулевым окончанием .

    Константы — многомерные массивы

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

    Например, такое объявление:

    type
    Cube = array[0 .. 1, 0 .. 1, 0 .. 1] of Integer;

    const Maze : Cube = (((0, 1), (2, 3)), ((4, 5), (6, 7)));

    создаёт инициализированный массив Maze:

    Maze[0, 0, 0] = 0
    Maze[0, 0, 1] = 1
    Maze[0, 1, 0] = 2
    Maze[0, 1, 1] = 3
    Maze[1, 0, 0] = 4
    Maze[1, 0, 1] = 5
    Maze[1, 1, 0] = 6
    Maze[1, 1, 1] = 7

    Агрегаты (так они называются в языке Ада) можно использовать не только при инициализации констант, но и вообще в любых выражениях. В ЛЮБЫХ!

    procedure Arr_Agg is

    type Cube is array (0 .. 1, 0 .. 1, 0 .. 1) of Integer;

    Maze : Cube := (((0, 1), (2, 3)), ((4, 5), (6, 7)));

    begin
    Maze := (((7, 6), (5, 4)), ((3, 2), (1, 0)));
    end Arr_Agg;

    Подобные скобочные выражения могут быть восприняты компилятором двояко, и в этом случае нужно явно указывать тип с помощью конструкции тип'(значение). Например:

    будет всегда воспринято однозначно. В приведённом выше примере тип указывать не потребовалось, потому что сопоставление типов в языке Ада производится не только снизу вверх, но и сверху вниз. Переменной Maze можно присвоить только выражение типа Cube, поэтому указание типа было необязательно.

    Одним из следствием двустороннего сопоставления типов является возможность перегружать функции не только по типу аргументов , но и по типу результата.

    Также внутри агрегатов можно указывать индексы:

    — Демонстрация гибкости массивных агрегатов
    Cube'(0 => (1 => (0 | 1 => 7), 0 => (1 => 5, others => 4)),
    1 => ((0 .. 1 => 3), others => (others => <>)))

    Индексированные элементы должны следовать за неиндексированными. На порядок элементов нет ограничений. Индексированный элемент может задавать значение сразу нескольким элементам массива. Для этого отдельные индексы и диапазоны индексов перечисляются через | (знак трубы). Также можно в конце списка использовать зарезервированное слово others, чтобы задать значение оставшимся элементам:

    (1 | 3 .. 5 | 7 | 9 .. 11 | 13 .. 15 => True, others => False)

    Лексема <> означает значение по умолчанию.

    Как и в Borland Pascal, строковый литерал эквивалентен агрегату символов.

  • Ссылка на основную публикацию
    ВсеИнструменты 220 Вольт
    Adblock
    detector