- •Міністерство освіти і науки україни
- •Лабораторная робота №1 «Строковые переменные»
- •Работа со строковыми переменными
- •Вопросы на защиту:
- •Лабораторная робота №2 «Сортировка выбором»
- •Вопросы на защиту:
- •Лабораторная робота №3 «Стандарт оформления кода. Построение блок-схем.»
- •Вопросы на защиту:
- •Лабораторная робота №4 «Передача массивов в подпрограммы»
- •Вопросы на защиту:
- •Додаток а
Вопросы на защиту:
Зачем нужно две переменные счётчика цикла? Почему во всех циклах используется переменная i и только в одном j?
Ответ: ____________________________________________ __________________________________________________ __________________________________________________
Почему внутренний цикл начинает с 2?
Ответ: ____________________________________________ __________________________________________________ __________________________________________________
Из чего высчитывается переменная lastPos?
Ответ: ____________________________________________ __________________________________________________ __________________________________________________
В чём отличие сортировки выбором от сортировки пузырьком?
Ответ: ____________________________________________ __________________________________________________
Какой способ сортировки выбором лучше, изначальный или альтернативный, и почему?
Ответ: ___________________________________________ __________________________________________________
Работу написал Работу проверил
Лабораторная робота №3 «Стандарт оформления кода. Построение блок-схем.»
Тема работы: Стандарт оформления кода. Построение блоксхем.
Цель работы: научиться правильно оформлять код программы, а так же создавать блок-схемы к нему.
Теоретический материал
Стандарт оформления кода – это набор правил и соглашений, используемых при написании кода программы. Наличие общего стиля облегчает понимание кода, написанного более чем одним программистом, а также упрощает взаимодействие нескольких человек при разработке программного обеспечения.
Основное правило оформления кода звучит примерно так: каждая зависимая строка, должна начинаться глубже, чем строка, от которой она зависит, а равные строки должны начинаться на одном уровне. Это значит, что если внутри какого-то оператора есть строки с другими операторами, эти строки должны быть утоплены по отношению к главному оператору и находиться на одинаковом уровне по отношению друг к другу.
Проще говоря, если у оператора есть (или могут быть) операторские скобки, то всё что внутри этих скобок должно быть на один уровень глубже этого оператора.
В Паскале всего четыре оператора, требующих операторские скобки:
If;
Case;
For;
While.
Так же операторские скобки нужны вспомогательному оператору Else, а так же процедурам и функциям (которые будут рассмотрены на следующих занятиях).
Исходя из всего этого, понять и запомнить правила оформления программного кода совсем не сложно!
Так же, есть два варианта расставления операторских скобок, которые прижились в современном мире:
стиль Кернигана и Ричи (в нём открывающая операторская скобка ставится в одной строке с оператором):
if (<cond>) {
····<body>
}
стиль Олмана (в котором открывающая операторская скобка ставится на строку ниже самого оператора, но на одном уровне с ним):
if (<cond>)
{
····<body>
}
В обоих случаях закрывающая операторская скобка ставиться в отдельной строке, на одном уровне со своим оператором.
Чаще используют стиль Олмана, но и стиль Кернигана и Ричи лишь немного отстает по популярности, поскольку он позволяет сократить количество строк, тем самым улучшив читаемость кода.
Размер отступа можно делать разным, однако наиболее распространено такое правило: использовать для отступов пробелы вместо символа табуляции, а сам размер отступа делать равным 4-м символам.
Использование пробелов вместо табуляции позволяет отображать код корректно в разных текстовых редакторах. Иногда бывает, что нужно посмотреть его на сервере с помощью установленного там редактора, либо вы используете утилиту по сравнению исходников, либо используете форму слияния в системе контроля версий. По умолчанию в во многих редакторах текста табуляция равна 8 символов и это стандарт юникса. Для сложного кода это слишком много. Когда отступ меньше 4-х символов, то код хуже читается. Поэтому выбрана золотая середина - 4 символа.
Правила построения блок-схем немного сложнее, но не сильно.
Блок-схема – это графическая модель, описывающая алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последователь-ности.
Чтобы построить блок-схему, нужно последовательно рисовать блоки соответсвующей формы, коротко вписывая в них нужные действия, и объединяя линиями со стрелками, в направлении выполнения программы.
Блок-схема строится сверху вниз, с возможностью разветвления в стороны, которые так же должны стоять вертикально, но при надобности могут идти наверх.
Блоки блок-схемы должны быть равной ширины, но могут отличаться по высоте. В один блок можно записать несколько, связанных между собою логически, строк.
Основные элементы блок-схем:
Наименование |
Обозначение |
Функция |
Блок начало-конец (пуск-остановка) |
|
Элемент отображает начало и конец программы. Внутри фигуры записывается соответствующее действие. |
Блок действия |
|
Выполнение одной или нескольких операций, обработка данных любого вида (изменение значения данных, и т.д.). Внутри фигуры записывают непосредственно сами операции, например, операцию присваивания: a := 10*b + c. |
Логический блок (блок условия) |
|
Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Над каждой исходящей линией следует написать результат, приводящий к выбору данного пути развития. |
Предопределённый процесс |
|
Символ отображает выполнение процесса, состоящего из одной или нескольких операций, который определен в другом месте программы (в подпрограмме, модуле). Внутри символа записывается название процесса и передаваемые в него данные. Например, вызов процедуры или функции. |
Данные (ввод-вывод) |
|
Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод). Данный символ не определяет носителя данных. |
Граница цикла |
|
Символ состоит из двух частей − соответственно, начало и конец цикла − операции, выполняемые внутри цикла, размещаются между ними. Условия цикла и приращения записываются внутри символа начала или конца цикла − в зависимости от типа организации цикла. Часто для изображения на блок-схеме цикла вместо данного символа используют символ условия, указывая в нём решение, а одну из линий выхода замыкают выше в блок-схеме (перед операциями цикла).
|
Соединитель |
|
Символ используется для обрыва линии и продолжения её в другом месте (например, для избегания слишком длинных линий, а также, если схема состоит из нескольких страниц). Соответствующие соединительные символы должны иметь одинаковое (при том уникальное) обозначение. |
Комментарий |
|
Используется для более подробного описания шага, процесса или группы процессов. Описание помещается со стороны квадратной скобки и охватывается ей по всей высоте. Пунктирная линия идет к описываемому элементу, либо группе элементов (при этом группа выделяется замкнутой пунктирной линией). Также символ комментария следует использовать в тех случаях, когда объём текста, помещаемого внутри некоего символа (например, символ процесса, символ данных и др.), превышает размер самого этого символа. |
Ход выполнения лабораторной работы
Program FourSort;
uses crt;
const N=20;
var i,j,k,min,pos,temp,cnt1,cnt2,cnt3,cnt4: integer;
Arr1,Arr2,Arr3,Arr4: array[1..N] of integer;
bestSort: string;
begin
clrscr;
randomize;
cnt1:=0; cnt2:=0; cnt3:=0; cnt4:=0;
writeln('Не сортированный массив:');
for i:=1 to N do begin
Arr1[i]:=random(90)+10;
Arr2[i]:=Arr1[i];
Arr3[i]:=Arr2[i];
Arr4[i]:=Arr3[i];
write(Arr4[i]:4);
end;
writeln; writeln;
writeln('Сортировка пузырьком:');
for j:=1 to N do
for i:=1 to N-j do begin
cnt1:=cnt1+1;
if Arr1[i]>Arr1[i+1] then begin
temp:=Arr1[i];
Arr1[i]:=Arr1[i+1];
Arr1[i+1]:=temp;
cnt1:=cnt1+1;
end;
end;
for i:=1to N do
write(Arr1[i]:4);
writeln('Отсортировано за ', cnt1, ' действий(я)');
writeln;
writeln('Сортировка выбором:');
for j:=1 to N do begin
min:=Arr2[j];
pos:=j;
for i:=j to N do begin
cnt2:=cnt2+1;
if min>Arr2[i] then begin
min:=Arr2[i];
pos:=i;
end;
end;
temp:=Arr2[pos];
Arr2[pos]:=Arr2[j];
Arr2[j]:=temp;
cnt2:=cnt2+1;
end;
for i:=1 to N do
write(Arr2[i]:4);
writeln('Отсортировано за ', cnt2, ' действий(я)');
writeln;
writeln('Сортировка вставками:');
for j:=2 to N do begin
i:=j;
while (i>1) and (Arr3[i]<Arr3[i-1]) do begin
temp:=Arr3[i];
Arr3[i]:=Arr3[i-1];
Arr3[i-1]:=temp;
i:=i-1;
cnt3:=cnt3+3;
end;
end;
for i:=1 to N do
write(Arr3[i]:4);
writeln('Отсортировано за ', cnt3, ' действий(я)');
writeln;
writeln('Сортировка Шелла:');
k:=N div 2;
while k>1 do begin
for j:=1 to N-k do begin
i:=j;
while (i>=1) and (Arr4[i]>Arr4[i+k]) do begin
temp:=Arr4[i];
Arr4[i]:=Arr4[i+k];
Arr4[i+k]:=temp;
i:=i-1;
cnt4:=cnt4+3;
end;
end;
k:=k div 2;
end;
for i:=1 to N do
write(Arr4[i]:4);
writeln('Отсортировано за ', cnt4, ' действий(я)');
writeln;
min:=cnt1;
bestSort:='Пузырьком';
if min>cnt2 then begin
min:=cnt2;
bestSort:='выбором';
end;
if min>cnt3 then begin
min:=cnt3;
bestSort:='вставками';
end;
if min>cnt4 then begin
min:=cnt4;
bestSort:='Шелла';
end;
writeln('Сортировка ',bestSort,' самая эффективная, она выполнена за ',min,' действий(я)!');
writeln; writeln; writeln;
write('PRESS ANY KEY TO CONTINUE...');
readkey;
end.
Задание:
Скопировать код программы в редактор Free Pascal и отформатировать его согласно правил оформления.
В любом редакторе нарисовать блок-схему к ней (главное суметь потом вставить её в Word).
Написать отчёт.
Отчёт должен содержать: титульный лист, отформатированный по правилам код программы, блок-схему и ответы на вопросы со следующей страницы.