WIWOD(p,12);
m[2]:=Max(p,12);writeln;
writeln('Maksimal P=',m[2]);
writeln;
writeln ('Massiv T');
WIWOD(t,33);
m[3]:=Max(t,33);writeln;
writeln('Maksimal T=',m[3]);
maxi:=Max(m,3);
writeln('Max=',maxi);writeln;
zamena(a,22);
writeln('Noviy A');
WIWOD(a,22);
zamena(p,12);writeln;
writeln('Noviy P');
WIWOD(p,12);
zamena(t,33);writeln;
writeln('Noviy T');
WIWOD(t,33);
readln;
end.
Задача 3. В матрице А(4,8) определить с помощью функции разность между максимальным и минимальным элементом каждой строки и записать в дополнительный столбец в основной программе. Предусмотреть вывод начального массива и массива после дозаписи.
Лабораторная работа №13-14. Строки.
Цель: Освоить на практике новый тип данных – строка, научиться работать с текстом.
Теоретическая часть.
A: string[5]
5 | О | С | Е | Н | Ь |
- строка
B: array[1..5] of char
О | С | Е | Н | Ь |
- массив из символов
В отличие от массива первый (т.е. нулевой) байт памяти содержит информацию по количеству символов в строке. Поэтому, если строка описана длиной 10 символов, то любые символы введенные с терминала или добавляемые к строке после 10 будут игнорироваться.
Type <название типа 1> = string[10];
<название типа 2> = string;
(до 255)
Var <идентификатор>:<название типа>;
II способ
Var <идентификатор>: string[ ];
зарезерв длина
Замечание. Если две строки А и В описаны одинаково, то разрешено присвоение A:=B. Однако сравнение двух строк разрешается посимвольно. Обращение к каждому символу в строке аналогично доступу к каждому элементу в массиве.
Var A:string;
A[1] – первый символ
A[2 – второй символ
…
A[i – I – ый символ
a) Можно складывать, причем сложение строк неперестановочно:
. Сложение наз-ся конкатенация. Concat – равносильно сложению нескольких строк. Результат в 1 –ой строке concat(a1,a2,a3)b) Присвоение
c) Разрешается сравнение строк, при этом учитывается номер каждого символа из кодовой таблицы.
Пример 'кот'<'котомка'
'котт' > 'кота'
'аа' < 'ааа'
'а' < 'я'
Все символы русского и латинского алфавитов имеют коды соответствующих их порядку, т.е. 'А' < 'В'
Разрешены процедуры и функции над строками.
1) Copy (st,p,n)
Из строки st копируется n символов в память, начиная с позиции p.
2) Delete (st,p,n)
Из строки st удаляется n символов, начиная с p.
3) Insert(st1,st2,p)
Вставить строку st1 в st2, начиная с позиции p.
4) Length (st)
Вычисляет длину строки st.
5) Pos (st1,st2)
Находит позицию первого появления строки st1 в строке st2.
6) Str(n,st)
Процедура перевода цел. Переменной n в строку st.
7) Val(st,n,m)
Процедура переводит содержимое строки st в целочисленную переменную n, причем m – номер ошибочного символа.
uses crt;
var
s:string;
x:char;
n,i,m:byte;
mas:array[1..10] of string;
begin clrscr;
s:='Уж небо осенью дышало';
n:=length(s);m:=1; mas[m]:=' '; {Обнуление нового слова}
for i:=1 to n do
if s[i]=' ' then begin
m:=m+1;
mas[m]:=' ';
end
else mas[m]:=mas[m]+s[i];
n:=0;
for i:=1 to m do
begin
writeln(mas[i]);
if mas[i,1] in ['T','t'] then inc(n)
end;
writeln('Количество слов, начин-ся с c T=',n);
readln;
end.
Индивидуальное задание:
1) Записать все слова строки T в одномерный массив. Подсчитать количество слов, количество букв в которых нечетно.
uses crt;
const raz=[' ',',','.',';','-',':','!','?'];
var t:string;
mas:array[1..15] of string;
i,n,m:byte;
begin clrscr;
writeln('Vvedite stroku');
readln(t);
n:=length(t); m:=1;
mas[m]:='';
for i:=1 to n do
if t[i] in raz then begin
while(t[i] in raz) do inc(i);
inc(m);mas[m]:=t[i];
end
else mas[m]:=mas[m]+t[i];
writeln;
writeln;
writeln('Massiv:');
for i:=1 to m do writeln(mas[i],' ',length(mas[i]));
n:=0;
for i:=1 to m do
if odd(length(mas[i])) then inc(n);
writeln('Kol-vo netetn slov=',n);
readln;
end.
2) Ввести строку A: string с клавиатуры. Заменить все встретившиеся строчные буквы на такие же прописные и вывести строку А после изменения.
3) Написать программу, определяющую, сколько раз встретилось заданное слово в текстовом файле, длина строки в котором не превышает 80 символов. Текст не содержит переносов слов.
Лабораторная работа № 15. Исследовательско - практическая работа.
Цель: закрепление знаний, развитие навыков самостоятельной работы.
Ход урока.
На данном уроке закрепляются знания, полученные на предыдущем уроке, и проводится самостоятельная исследовательская работа.
Для закрепления знаний можно воспользоваться программой, предлагаемой в качестве поддержки урока
program А8; {Строковые переменные}
uses crt;
var i,m:integer;
c,ch:char; s,s1: string;
begin
ClrScr;
GotoXY(10,3);
Writeln ('Вы работаете с программой демонстрации
строковых переменных'); Writeln; Writeln(‘ Введите 7-10 символов.');
GotoXY(5,8);
Readln(s);
Writeln;
Writeln(‘ Вы ввели строку символов: ',s);
Writeln;
i:=length(s);
m:=Round(i/2);
if m<>0 then c:=s[m];>
Writeln(‘ Количество символов в строке: ',i);
Writeln;
Writeln(‘ В середине строки есть символ: ',с);
Writeln;
Writeln(‘ Последний символ строки:
',copy(s,length(s),l));
Writeln;
Write(‘ А вот ваша строка "задом наперед":'); ". for m:=i downto 1 do write(s[m]);
Writeln; si :="; Writeln;
for m:=0 to i do
begin
if (ord(s[m])>127) and (ord(s[m])<176) then
1sl:=sl+s[m];
if (ord(s[m])>223) and (ord(s[m])<240) then
sl:=sl+s[m];
end;
if length(s1)<>O then Writeln(‘ В строке есть русские буквы: ',s1);
Writeln;
sl:=";
for m:=0 to i do if (ord(s[m])>47) and (ord(s[m])<58) thensl:=sl+'s[m];
if length(sl)oO then WritelnC В строке есть цифры: ',sl);
sl:=";
for m:=0 to i do
begin
if (ord(s[m])>64) and (ord(s[m])<91) then sl:=sl+s[m];
if (ord(s[m])>96) and (ord(s[m])<123) then
sl:=sl+s[m];
end;
Writeln;
if length(sl)oO then Writeln(' В строке есть латинские
буквы: ',sl);
if (ord(s[lJ)>128) and (ord(s[l])<159) then Writeln('Привет,',s+'!'); ch:=ReadKey end.
Необходимо решить задачи:
1. Вызовите программу А8, исполните ее. Обратите внимание, как в программе проводится формирование строки из отдельных символов, как из строковой переменной выделяются отдельные символы и как работают основные функции и процедуры.
2. Придумайте свои варианты обработки информации в форме строк символов.
3. Составьте программу, преобразующую число в строку символов и строку символов-цифр в число.
После этого даем студентам задание:
1. В процедуре Val(s,x,Gode) используется переменная code типа word. Она принимает значение О, если преобразование строки в число проведено успешно. Определите назначение этой переменной в случае, если при преобразовании строки в число обнаружен символ, который не является атрибутом числа.
2. При записи идентификаторов и операторов прописные и строчные буквы не различаются. Выясните, различаются ли прописные и строчные буквы в значениях строковых переменных, в частности, при операциях сравнения.
3. При нажатии клавиши Enter в файл записывается символ конца строки, не имеющий изображения на экране дисплея. Найдите информацию об использовании стандартной функции eoln, распознающей этот символ.
Домашнее задание: повторить [1] п. 14.4., 14.3; подготовиться к контрольной работе. Выполнить решение задач:
Составить алгоритм, подсчитывающий количество тех слов в строке из N букв, в которых третьей является заданная буква Ь. Слова разделены пробелами. Других знаков препинания нет.
Лабораторная работа №16. Решение задач.
Цель: закрепление знаний, подготовка к контрольной работе.
Ход урока;
Проверка домашнего задания с анализом выполненных ими программ. Студенты, успешно справившиеся с домашним заданием, предлагаем перейти к решению задач.
Примерные тексты задач.
а
аб
абс
абсд
…
аб...я.
Домашнее задание: повторить процедуры работы со строковыми величинами и приемы обработки массивов, просмотреть решение задач на строковые величины и двумерные массивы, подготовиться к контрольной работе.
Лабораторная работа №17. Контрольная работа «Строковые величины и двумерные массивы».
Цель: проверка знаний студентов, навыков самостоятельного решения задач и умения применять полученные знания на практике.
Студентам предлагаем несколько вариантов работы, в каждом из которых две задачи.
Вариант 1.
1. Имеется двумерный массив целых положительных чисел. Найти номер строки, для которой среднеарифметическое значение ее элементов максимально.
2. Составить алгоритм, подсчитывающий для заданного текста частоту вхождения всех букв русского алфавита.
Вариант 2.