1. Найти номер строки и столбца двумерного массива для максимального элемента этого массива.
2. Написать программу, которая введенное с клавиатуры слово напечатает следующим образом:
школа
к л
о о
л л
алокш
Вариант 3.
1. Найти сумму элементов двумерного массива вещественных чисел с(15,15), расположенных на главной диагонали.
. 2. Написать программу, которая перевернет введенное с клавиатуры слово или фразу.
Домашнее задание на данном уроке не задается.
Лабораторная работа №17. Анализ самостоятельной работы. Работа над ошибками.
Цель: проанализировать наиболее характерные ошибки, развивать навыки самостоятельного анализа проблем и выбора метода их решения.
Ход урока:
На данном уроке необходимо проанализировать ошибки, допущенные студентами в ходе выполнения самостоятельной работы, разобрать причины, вызвавшие эти ошибки. Провести работу по исправлению допущенных ошибок. В том случае, если с какой-либо из задач не справилось большинство учащихся, ее выполнявших, то целесообразно привести решение этой задачи на доске с подробным анализом решения.'
После исправления ошибок предлагаем учащимся проверить работу их программ на компьютере (провести тестирование программ).
Примерные варианты решения задач:
Вариант 1.
1. program vll; uses crt;
var a:array[1..50,1..50] of integer; i,j,n,m,s,k:integer; sr:real; begin clrscr;
write('ввeдитe количество строк и столбцов'); readln (m,n); randomize; for i:=l to m do for j:=l to n do a[i,j]:=random(50); clrscr;
writeln ('исходный массив'); for i:=l to m do
begin forj:=l to ndo write(a[ij]:4); writeln; end; sr:=-5; {так как массив положительных чисел}
writeln; for i:=l to mdo \ begin .^' s:=0; ' forj:=l to ndo
J s:=s-i-a[i,j]; writeln(s/n:6:2); {распечатка средних арифметических для контроля} ifs/n>sr then begin
sr:=s/n; k:=i; end; end;
writeln;
writeln('иcкoмaя строка-' ,k); repeat until keypressed; end.
2.program vl 2;
uses crt;
var fr,bukv,z:string; a:array[l..32] of integer;
i,k: integer;
{определение номера буквы}
procedure por(var znach: integer;x:string;bukv:string); • var i: integer;
begin
znach:=0
i:=l;
while (i<=32) and (znach=0) do
if x=copy(bukv,i, 1) then znach:=i
else i:=i+l; end;
{исполняемая часть} begin clrscr;
wгiteln('ввeдитe фразу'); readln(fr);
Ьику:='абвгдежзийклмнопрстуфхцчшщъыьэюя'; for i:=l to 32 do a[i]:=0; for i:=l to length(fr) do begin por(k,copy(fr,i,l),bukv); {просмотр фразы и определение вхождения}
ifk>Othena[k]-a[k]+l;
end; writeln;
write ('абвгдежзийклмнопрстуфхцчшщъэюя'); writeln;
for i:=l to 32 do write(a[i]:2); repeat until keypressed; end.
Вариант 2.
1. program v21; uses crt;
vara:array[1..50,1..50] of real; i,j,n,m,k,l:integer; max:real;
begin : clrscr;
write('ввeдитe размер массива m,n'); readln(m,n); randomize; I for i:=l to mdo r forj:-l to n do ' a[ij]:=random(50); ' clrscr;
; writpln ('исходный массив'); 1; for i:=l to mdo •:■ begin
for j:=l ton do
write(a[ij]:6:2);
writeln;
end; max:=a[l,ll;
for i:=l to m do
forj.-l ton do
if max<a[i,j] then begin
max:=a[i,j];k:=i;l:=j; end;
writeln('мaкcимaльный элемент равен ',max:6:2,');
writeln( 'oh находится в ', к,'строке ', 1 'столбце');
repeat until keypressed;
end.
2.
program v22; uses crt;
yar fr:string;i,n,k:integer; begin clrscr
writeln('ввeдитe слово'); ; read(fr); gotoxy(4,12); write(fr);
for i:=2 to length(fr) do begin gotoxy (4,11 +i); write(copy(fr,i, 1)) gotoxy(4+length(fr)-l ,11+i); write(copy(fr,length(fi-)-i+1,1)); end; for i:=2 to length(fr)-l do begin
gotoxy(3+i,l l+length(fr)); write(copy(fr,length(fr)-i+l,l)); end; repeat until keypressed; end.
Вариант 3.
1. program v31;
uses crt; ,
var c:array[1..15,1..15] ofreal; ij:integer; s:real; begin clrscr; randomize; for i:=l to 15 do forj:=l to 15 do c[i,j]:=random(50); clrscr;
writeln ('исходный массив'); for i:=l to 15 do begin
forj:=l to 15 do
write(c[i,j]:6:2);
writeln; end; s:=0; fori:=l to 15 dp
s:=s+c[i,i]; '
writeln('Искомая сумма-,s: 10:2); repeat until keypressed; end.
2.
programv32 uses crt;
var fr:string;i: integer; begin
clrscr; .
vvrite('BBeflHTe слово или фразу'); readln(fr); writeln;
for i:=l to length(fr) do write(copy (fr,length(fr)-i+1,1)); repeat until keypressed; end.
Домашнее задание: повторить основные типы данных, строковые, массивы.
Лабораторная работа18. Использование множеств для решения задач в Паскале.
Цель работы:
Ход выполнения лабораторной работы.
1) Прочитайте теорию по данной теме (см. лекции или учебник). Отметьте в отчете для лабораторных все, что считаете важным.
2) Загрузите язык Паскаль. Наберите в разных окнах программы, приведенные ниже. Запустите разобранные программы, поэкспериментируйте над ними…
3) Запишите в отчет выполненные индивидуальные задания.
4) Защитите лабораторную работу.
!!! Повторите материал по теме «Множества».
Задача 1. В произвольном тексте А: string определить, какие цифры встречаются, вывести их.
Подсказка: Пусть DI – тип множества всех встретившихся символов – цифр. Сначала DI=[]. Затем, просматривая текст, все цифры добавляются во множество DI. Они будут встречаться там в одном экземпляре, сколько бы одинаковых цифр не встретилось бы в тексте ( по свойствам множества).(Наберите программу и объясните приведенное решение).
Type XX=set of ‘0’..’9’;
Var s:char ; a:string; DI:XX; n,i:byte;
Begin write(‘Введите текст’);
Readln(A);
DI:=[]; n:=length(a);
For i:=1 to n do
If a[i] in [‘0’..’9’] then DI:=DI+[a[i]];
If DI=[] then writeln (‘В тексте цифр нет’) else writeln (‘В тексте следующие цифры’);
For s:=’0’ to ‘9’ do
If s in DI then write(s:3);
End.
Задача 2. Сформировать множества А и В, базовый тип которых 0..50, по заданному числу элементов для каждого множества. Найти число и сумму элементов, принадлежащих одновременно и А и В; выведите на экран все элементы множества А, не принадлежащие В.
Подсказка. Допустим n – количество элементов для множества А. Тогда при формировании А можно использовать цикл k:=0; Repeat…until k>=n, где k – это счетчик для множества.
Задача 3. Решить Задачу 2, если известно, что рассматриваются множества А и В, базовый тип которых – буквы русского и латинского алфавитов.
Подсказка. Для формирования множества из букв воспользуемся кодовой таблицей и все необходимые диапазоны кодов букв поместим в дополнительное множество М. Тогда при формировании В (или А) можно использовать тот же способ, что и в предыдущей задаче, например:
type mnog=set of char;
var a,b:mnog;
m:set of 0..255;
y,x,k,n:byte;
begin
m:=[65..90,97..122,128..175,224..239];
writeln;
writeln('Vvedite kol-vo elementov mn-va B);
readln(n); b:=[];
repeat
k:=0;
x:=random(255);
if x in M then B:=B+[chr(x)];
for y:=0 to 255 do
if chr(y) in b then k:=k+1;
until k>=n;
writeln ('Mn-vo B');
for x:=0 to 255 do
if chr(x) in B then write (chr(x):5);
writeln;
…
Лабораторная работа №19. Множества . (Продолжение)
Цель: показать практическое использование этого типа данных при решении задач.
Множества можно описать в разделе описания типов:
type имя множества = set of тип элементов;
var идентификатор переменной : имя множества;
или же в разделе переменных:
var идентификатор переменной : set of имя типа элементов;
Тип элементов задается диапазоном или перечислением идентификаторов (в последнем случае обязательны круглые скобки), например:
type den = set of 1..5;
этим мы определили множество с именем den, значениями которого могут быть наборы целых чисел в диапазоне от 1 до 5: [], [1], [2], [3], [4], [5], [1,2], [2,3], [1,3], [2,3] ,[1,2,3], [1,2,3,4,5] и другие сочетания (в данном случае упорядоченные по возрастанию). Для экономии времени можно взять меньший диапазон значений.
var а: den; описана переменная типа множества den.
Описание в разделе переменных может выглядеть так:
Var s: set of'А'..'В';
Описана переменная s как множество, значениями которого могут быть: [], ['А'],['В'] и ['А','В'].
Или
var kinder : set of (inna,ivan);
Описана переменная kinder как множество, значениями которого могут быть: [], [inna],[ ivan] и [inna, ivan].
Множество можно описать в разделе констант:
const p=[3,7,9]; (простая константа)
типизированная константа так:
const m:set=[‘a’..’z’];
или так: const mn0:set of char=[‘a’..’z’];
Всe элементы множества должны иметь одинаковый тип (char, boolean, ограниченный, перечисляемый). Элементами множества могут быть выражения. Число элементов множества называют мощностью множества (число элементов до 255, поэтому в описании множества нельзя указать типы integer и real). Порядок следования элементов и способ их записи не играет роли: одинаковы множества [1,2,3], [3,2,1], [3,1,2], [1+2,1,2], [1..3], [3,3,3,1,2,3], но, если множество обозначается как диапазон, важно, чтобы начальный элемент был меньше, чем конечный, иначе множество будет считаться пустым. Например, ['z'..'а'] - пустое множество.
[ ] - также пустое множество.
При работе с множествами можно использовать следующие правила или операции:
* - пересечение множеств; с:=a*b, где а и b - переменные типа множество.
+ - объединение множеств; с:= а+ b ;
- - разность множеств; с:=а- b ;
=, <>, >=, <= - проверки на равенство, неравенство и т.д.
а> b и т.д.
in - проверка на принадлежность; d in а.
Практическая работа.
label 1;
type mn=set of char;
var ml,m2,m3,m4:mn;
a,b,m:integer;
c:char;
u:boolean;
bs:string[5];
begin
l:ClrScr;
GotoXY(10,4); ,
Writeln('Bы работаете с программой демонстрации операций с множествами');
Writeln;
WritelnC Создадим два множества, в каждом из которых по 5-10 символов:');
т1:=П; ,
т2:=[];
тЗ:=[];
т4:=['д';Д'Д','и];
Writeln; ;
WriteC Введите мощность (число элементов) множества ml:');
repeat
GotoXY(55,8);
ClrEol;
Readln(bs);
val(bs,b,a);
until (a=0) and ((b>l) and (b<20));
WritelnC При вводе элементов множества клавишу Enter использовать не надо');
WriteC Вводите множество ml из ',Ь,' символов:');
for m:=l to b do WriteC Проверка вхождения: ml >= m2 ');
u:=(ml >= m2);
Writeln(u);
Writein; ,
WriteC Введите какой-либо символ:');
c:=ReadKey;
Write(c);
Writein;
WriteC Проверка вхождения:',c,'inml ');
u:=c in ml;
Writeln(u);
WriteC Проверка вхождения:',c,'in m2 ');
u:~c in m2;
Writeln(u);
Writein;
Writein;
WriteC Еще будете работать с программой? (д/н)');
c:=ReadKey;
if с in m4 then Goto 1;
end.
После загрузки предлагаем им познакомиться с описанием программы, но не заостряем внимание на самой структуре, так как нас интересует работа операций.