Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторки (основы программирования).docx
Скачиваний:
22
Добавлен:
02.02.2015
Размер:
377 Кб
Скачать

Вопросы на защиту:

Зачем нужно две переменные счётчика цикла? Почему во всех циклах используется переменная i и только в одном j?

Ответ: ____________________________________________ __________________________________________________ __________________________________________________

Почему внутренний цикл начинает с 2?

Ответ: ____________________________________________ __________________________________________________ __________________________________________________

Из чего высчитывается переменная lastPos?

Ответ: ____________________________________________ __________________________________________________ __________________________________________________

В чём отличие сортировки выбором от сортировки пузырьком?

Ответ: ____________________________________________ __________________________________________________

Какой способ сортировки выбором лучше, изначальный или альтернативный, и почему?

Ответ: ___________________________________________ __________________________________________________

Работу написал Работу проверил

Лабораторная робота №3 «Стандарт оформления кода. Построение блок-схем.»

  1. Тема работы: Стандарт оформления кода. Построение блоксхем.

  1. Цель работы: научиться правильно оформлять код программы, а так же создавать блок-схемы к нему.

  1. Теоретический материал

Стандарт оформления кода – это набор правил и соглашений, используемых при написании кода программы. Наличие общего стиля облегчает понимание кода, написанного более чем одним программистом, а также упрощает взаимодействие нескольких человек при разработке программного обеспечения.

Основное правило оформления кода звучит примерно так: каждая зависимая строка, должна начинаться глубже, чем строка, от которой она зависит, а равные строки должны начинаться на одном уровне. Это значит, что если внутри какого-то оператора есть строки с другими операторами, эти строки должны быть утоплены по отношению к главному оператору и находиться на одинаковом уровне по отношению друг к другу.

Проще говоря, если у оператора есть (или могут быть) операторские скобки, то всё что внутри этих скобок должно быть на один уровень глубже этого оператора.

В Паскале всего четыре оператора, требующих операторские скобки:

  • If;

  • Case;

  • For;

  • While.

Так же операторские скобки нужны вспомогательному оператору Else, а так же процедурам и функциям (которые будут рассмотрены на следующих занятиях).

Исходя из всего этого, понять и запомнить правила оформления программного кода совсем не сложно!

Так же, есть два варианта расставления операторских скобок, которые прижились в современном мире:

  1. стиль Кернигана и Ричи (в нём открывающая операторская скобка ставится в одной строке с оператором):

if (<cond>) {

····<body>

}

  1. стиль Олмана (в котором открывающая операторская скобка ставится на строку ниже самого оператора, но на одном уровне с ним):

if (<cond>)

{

····<body>

}

В обоих случаях закрывающая операторская скобка ставиться в отдельной строке, на одном уровне со своим оператором.

Чаще используют стиль Олмана, но и стиль Кернигана и Ричи лишь немного отстает по популярности, поскольку он позволяет сократить количество строк, тем самым улучшив читаемость кода.

Размер отступа можно делать разным, однако наиболее распространено такое правило: использовать для отступов пробелы вместо символа табуляции, а сам размер отступа делать равным 4-м символам.

Использование пробелов вместо табуляции позволяет отображать код корректно в разных текстовых редакторах. Иногда бывает, что нужно посмотреть его на сервере с помощью установленного там редактора, либо вы используете утилиту по сравнению исходников, либо используете форму слияния в системе контроля версий. По умолчанию в во многих редакторах текста табуляция равна 8 символов и это стандарт юникса. Для сложного кода это слишком много. Когда отступ меньше 4-х символов, то код хуже читается. Поэтому выбрана золотая середина - 4 символа.

Правила построения блок-схем немного сложнее, но не сильно.

Блок-схема – это графическая модель, описывающая алгоритмы или процессы, в которых отдельные шаги изображаются в виде блоков различной формы, соединенных между собой линиями, указывающими направление последователь-ности.

Чтобы построить блок-схему, нужно последовательно рисовать блоки соответсвующей формы, коротко вписывая в них нужные действия, и объединяя линиями со стрелками, в направлении выполнения программы.

Блок-схема строится сверху вниз, с возможностью разветвления в стороны, которые так же должны стоять вертикально, но при надобности могут идти наверх.

Блоки блок-схемы должны быть равной ширины, но могут отличаться по высоте. В один блок можно записать несколько, связанных между собою логически, строк.

Основные элементы блок-схем:

Наименование

Обозначение

Функция

Блок начало-конец (пуск-остановка)

Элемент отображает начало и конец программы. Внутри фигуры записывается соответствующее действие.

Блок действия

Выполнение одной или нескольких операций, обработка данных любого вида (изменение значения данных, и т.д.). Внутри фигуры записывают непосредственно сами операции, например, операцию присваивания: a := 10*b + c.

Логический блок (блок условия)

Отображает решение или функцию переключательного типа с одним входом и двумя или более альтернативными выходами, из которых только один может быть выбран после вычисления условий, определенных внутри этого элемента. Вход в элемент обозначается линией, входящей обычно в верхнюю вершину элемента. Если выходов два или три, то обычно каждый выход обозначается линией, выходящей из оставшихся вершин (боковых и нижней). Если выходов больше трех, то их следует показывать одной линией, выходящей из вершины (чаще нижней) элемента, которая затем разветвляется. Над каждой исходящей линией следует написать результат, приводящий к выбору данного пути развития.

Предопределённый процесс

Символ отображает выполнение процесса, состоящего из одной или нескольких операций, который определен в другом месте программы (в подпрограмме, модуле). Внутри символа записывается название процесса и передаваемые в него данные. Например, вызов процедуры или функции.

Данные (ввод-вывод)

Преобразование данных в форму, пригодную для обработки (ввод) или отображения результатов обработки (вывод). Данный символ не определяет носителя данных.

Граница цикла

Символ состоит из двух частей − соответственно, начало и конец цикла − операции, выполняемые внутри цикла, размещаются между ними. Условия цикла и приращения записываются внутри символа начала или конца цикла − в зависимости от типа организации цикла. Часто для изображения на блок-схеме цикла вместо данного символа используют символ условия, указывая в нём решение, а одну из линий выхода замыкают выше в блок-схеме (перед операциями цикла).

Соединитель

Символ используется для обрыва линии и продолжения её в другом месте (например, для избегания слишком длинных линий, а также, если схема состоит из нескольких страниц). Соответствующие соединительные символы должны иметь одинаковое (при том уникальное) обозначение.

Комментарий

Используется для более подробного описания шага, процесса или группы процессов. Описание помещается со стороны квадратной скобки и охватывается ей по всей высоте. Пунктирная линия идет к описываемому элементу, либо группе элементов (при этом группа выделяется замкнутой пунктирной линией). Также символ комментария следует использовать в тех случаях, когда объём текста, помещаемого внутри некоего символа (например, символ процесса, символ данных и др.), превышает размер самого этого символа.

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

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.

Задание:

  1. Скопировать код программы в редактор Free Pascal и отформатировать его согласно правил оформления.

  2. В любом редакторе нарисовать блок-схему к ней (главное суметь потом вставить её в Word).

  3. Написать отчёт.

Отчёт должен содержать: титульный лист, отформатированный по правилам код программы, блок-схему и ответы на вопросы со следующей страницы.