- •Министерство образования российской федерации
- •Var X,y: real;
- •Var X,y: real;
- •Var t:integer; p:char;
- •0..17: Write('детство');
- •20..30: Write('молодость');
- •31..54: Write('зрелость');
- •Var s:char;
- • Оператор цикла с предусловием имеет вид
- •Program p5_8;
- •Var y,X,z: integer;
- •Var I,j:integer; X,y,r:real;
- •Var I,j: integer;
- •Var n,I,j:integer; s,y,sr:real; X: array [1..10,1..5] of real;
- •Var I,j,n,m: integer;
- •X:array [1..10] of integer;
- •Var n,I,j,st,kl,k:integer;
- •Var st: char; sm: string[32]; ss: string;
- •Var n:integer;y:string;
- •Var k,I:integer; X: string;
- •Var X:string[1]; d:string; I:integer;
- •Var X:vr; y:array [1..5] of vr;
- •Ввод и вывод информации для типизированных и текстовых файлов производится процедурами:
- •X,y:real;
- •X,y:real; I:integer;
- •Im: string[4];
- •I: integer;
- •Im: string[4];
- •I: integer;
- •Im:string[4]
- •Im:string;
- •Var d,I,m,rx,ry:integer;
- •Var d,m,rx,ry:integer;
- •X,y,xn,xk,ymin,ymax,dx:real;
- •Ответы на тестовые задания, имеющиеся в тексте пособия:
- •& Тесты по курсу
- •Тираж: 150. Заказ №
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.
Задание 6.11. Поиск в отсортированном массиве. Очевидно, что найти нужное значение Х можно сплошным перебором данных. Однако в худшем случае (если искомое значение находится внизу или его нет вовсе) нам придется просмотреть все элементы массива. Имеется гораздо более быстрый алгоритм, называемый бинарным поиском. Массив делится пополам и Х сравнивается со средним элементом. Если Х оказался больше, пополам делится нижняя часть, если нет – верхняя и т.д. Напишите программу поиска.
Тест. 6.1. В худшем случае, сколько раз будет выполнен цикл поиска для массива из N элементов? 1) N/4, 2) N/2, 3)log2N.
Тест. 6.2. Какого типа могут быть индексы элементов массива? 1) вещественного, 2) целого, 3) логического.
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. Каким будет значение переменной W после выполнения следующих действий. Выберите один из трех ответов: 1).123834, 2).371237, 3).2314.
var y,x,w:string; m,z:integer;
begin
y:='1234';
x:=copy(y,3,2); val(x,z,m); str(z+3,x); w:=x+copy(y,1,2)+x;
end.
Пример 7-1. В символьной строке Х=‘Петров Саша’ поменять местами имя и фамилию и поместить результат в Y. Решение потребует трех действий: 1). Нахождение позиции пробела n=7, 2). Остаток фразы от пробела (т.е. ‘Саша’) поместить в Y. 3). Дополнить Y пробелом и начальным фрагментом фразы Х до пробела. Для наглядности процесс реализован в трех операторах. Но можно записать его и в один y:=copy(x,pos(' ',x)+1,length(x))+' '+copy(x,1,pos(' ',x)-1);
PROGRAM P7_1;
const x='Петров Саша';