Смекни!
smekni.com

Методические указания к выполнению лабораторных работ Фрейз И. И (стр. 9 из 11)

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. Научиться создавать, корректировать и выполнять простые программы с использованием названных структурных типов.

Ход выполнения лабораторной работы.

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.

После загрузки предлагаем им познакомиться с описанием программы, но не заостряем внимание на самой структуре, так как нас интересует работа операций.