Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Паскаль (прогр) 2008июль.doc
Скачиваний:
1
Добавлен:
17.11.2018
Размер:
900.61 Кб
Скачать

Var n,I,j,st,kl,k:integer; a:array [1..10,1..10] of integer;

begin;

clrscr;

write(‘укажите размерность матрицы (до 10)’); readln(n);

st:=n; kl:=n; k:=1; {текущие строка и колонка, элементы натурального ряда}

a[st,kl]:=k; {начальному элементу a(n,n) присваивается 1}

{цикл - конец вычислений по достижении последнего элемента массива}

while k<n*n do begin

{правая сторона – 1 клетка вверх}

if (kl=n) and (st>1) then begin st:=st-1; k:=k+1; a[st,kl]:=k;

while (st<n) and (kl>0) do begin st:=st+1; kl:=kl-1; k:=k+1; a[st,kl]:=k end; {далее вниз-влево}

end

{нижняя сторона – 1 клетка влево}

else if (kl>1) and (st=n) then begin kl:=kl-1; k:=k+1; a[st,kl]:=k;

while (st>1) and (kl<n) do begin st:=st-1; kl:=kl+1; k:=k+1; a[st,kl]:=k end; {далее вверх-вправо}

end

{верхняя сторона – 1 клетка влево}

else if (kl>1) and (st=1) then begin kl:=kl-1; k:=k+1; a[st,kl]:=k;

while (st<n) and (kl>1) do begin st:=st+1; kl:=kl-1; k:=k+1; a[st,kl]:=k end; {далее вниз-влево}

end

{левая сторона – 1 клетка вверх}

else if(kl=1) and (st>1) then begin st:=st-1; k:=k+1; a[st,kl]:=k;

while (st>1) and (kl>0) do begin st:=st-1; kl:=kl+1; k:=k+1; a[st,kl]:=k end; {далее вверх-вправо}

end;

end;

writeln('вывод результата');

for i:=1 to n do begin for j:=1 to n do write(a[i,j]:4); writeln; end;

end.

7. Символьные данные

Паскаль позволяет обрабатывать не только числовые, но и символьные данные, которые бывают двух типов. Символы описываются в описательной части программы атрибутом CHAR и хранят один знак. Строки это цепочки символов и описываются атрибутом STRING. Например, var ST: char; SM: string[32]; SS: string. Здесь ST – одиночный символ, SM – строка не более чем из 32 символов. Если количество символов не указано, строке присваивается емкость в 255 символа. В программе и символы и строки должны заключаться в апострофы, например: ST:='a'; SM:='экзамен';. Над символами и строками с помощью приведенных в таблице функций производятся различные операции.

Строковые функция

Назначение

concat(строка1,строка2)

Соединяет строки строка1 и строка2 в одну (пример: concat('а','б')='аб')

copy(строка,

позиция,количество)

Копирует из строки, начиная с заданной позиции

количество символов (пример: copy('программа',4,5)='грамм')

delete(строка,

количество,позиция)

Удаляет из строки количество символов, начиная с заданной позиции

(пример: delete('программа',4,4)='прома')

insert(строка1,

строка2,позиция)

Вставляет строку1в строку2, начиная с заданной позиции

(пример: insert('сколько стоит','это ',9)='сколько это стоит')

length(строка)

Определяет длину строки (пример: length('саша')=4)

pos(строка1,строка2)

Отыскивает в строке2 первое вхождение строки1 и определяет номер позиции,

с которой она начинается (пример: pos('саша','а')=2)

upcase(символ)

Преобразует символ латинского алфавита в заглавный

str(число,

формат,строка)

Преобразует число типа integer или real в строку по заданному (если есть) формату

(примеры: str(5,x) – результат х='5', str(18.3:5:2,y) – результат y='18.30')

val(строка,

число,признак)

Преобразует строку в целое или вещественное число, если оно прошло успешно, признак =0

(пример: val('12.4',x,k) – получим x=12.4, k=0)

ord(символ)

Преобразует символ в целое число – код символа в ASCII-таблице (пример: ord(Я)=159)

chr(число)

Преобразует число в символ из ASCII-таблицы с соответствующим кодом (пример: chr(159)='Я')

Над символьными данными определена операция “+” (аналогичная concat) сцепления. Пример: 'студент '+'Петров'= 'студент Петров'.

Пример 7-1. В символьной строке X='Петров Саша' поменять местами имя и фамилию и поместить результат в Y. Решение потребует трех действий: 1). Нахождение позиции пробела n=7. 2). Остаток фразы от пробела (т.е. 'Саша') поместить в Y. 3). Дополнить Y пробелом и начальным фрагментом фразы X до пробела. Для наглядности процесс реализован в трех операторах. Но можно записать его и в один: y:=copy(x,pos(' ',x)+1,length(x))+' '+copy(x,1,pos(' ',x)-1);

Пример 7-2. В символьной строке X подсчитать количество K слов. Считаем, что число слов равно числу пробелов +1. Первый вариант программы P7_2 имеет недостаток. Если перед первым словом предложения или после последнего имеются пробелы, или внутри фразы встречается более одного пробела разом, число найденных слов окажется больше фактического. Исправим программу с учетом этих обстоятельств. Во втором варианте добавлен просмотр начала фразы до первого не пробела (j – номер первого значащего символа). Затем просматривается остаток фразы, где подсчитываются только одиночные пробелы (после пробела в i-ой позиции не должен стоять другой пробел). Дополните программу выдачей по отдельности всех слов предложения и их (справа) длин.

коды

символы

0..32

управляющие

65..90

A..Z

97..122

a..z

128..159

А..Я (кроме Ё)

160..175

а..п (кроме ё)

224..239

р..я

240,241

Ё,ё