Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Степан / Информатика / Паскаль (Попов).doc
Скачиваний:
56
Добавлен:
20.04.2015
Размер:
828.93 Кб
Скачать

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

Ё,ё