Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

GOSY / 1 блок-все-шпора(печать)

.pdf
Скачиваний:
37
Добавлен:
09.05.2015
Размер:
1.57 Mб
Скачать

repeat

WriteLn('Введите положительное число');

ReadLn(x); until x>0;

Вложенные циклы - возможны структуры, когда тело цикла включает в себя другие циклы. Разрешается вкладывать вложенные циклы разных типов, при этом необходимо выполнять след. правила: 1) если используются циклы с известным числом повторений, то желательно, чтобы переменная цикла не менялась принудительно внутри другого цикла. Необходимо чтобы каждый цикл имел свою переменную цикла. 2) цикл не должен пересекаться. С помощью repeat until такое пересечение сделать можно, но это будет считаться ошибкой.

Операторы завершения цикла

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

В версии Турбо Паскаль 7.0 определены стандартные процедуры:

Break Continue

Процедура Break выполняет безусловный выход из цикла. Процедура Continue обеспечивает переход к началу новой итерации цикла.

Заметим, что хотя и существует возможность выхода из цикла с помощью оператора безусловного перехода goto, делать этого не желательно. Во всех случаях можно воспользоваться специально предназначенными для этого процедурами Break и Continue.

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

одномерные, двумерные и многомерные. Одномерный массив является двусвязным пронумерованным списком; двумерный массив определяется как массив указателей на одномерные массивы – столбцы или строки. Объявление массивов – задание имени, структуры и типов данных массива перед его использованием. Возможно задание массива либо в области type, либо var.

Пример: type mas=array[1..10] of integer;

var m: array[1..10] of integer; m1:mas;

Элементы массива должны иметь 1 тип, который называется типом данных массива.

Элементы массива также однозначно определяются индексами, значения которых указывают в [ ] через запятую. Указывая, таким образом, имя массива, элементы и значения индексов, мы обращаемся к конкретному элементу для

31

вывода на экран записи данных и изменения данных. В некоторых случаях разрешается обращаться к массиву как к целому. m:=m1

Для массивов обычно определяется операция инициализации – задание начального значения массива: либо 0, либо случайное значение. После создания массива его значение не обязательно равно нулю.

Пример инициализации массива: for i:= 1 to 10 do for j:= 1 to 10 do begin

m[i,j]:=0; m1[i,j]:=random(0); end;

Ввод/вывод массивов

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

Пример ввода массива с клавиатуры: for i:= 1 to 10 do begin write (‘m[‘,i:2,’]=’);

readln (m[i]); end;

Пример вывода одномерного массива: for i:= 1 to 10 do begin выводит

write (‘m[‘,i:2,’]=’);

в виде

writeln (m[i]); end;

столбика

for i:= 1 to 10 do begin

выводит

write (‘m[‘,i:2,’]=’);

в виде

write (m[i],’ ‘); end;

строки

writeln;

Области применения массивов:

1.Ввод/вывод связных данных одномерного массива

2.Перебор данных: поиск, выборка

3.Сортировка данных по возрастанию/убыванию ключевого выражения

4.Построение графика функции

5.Реализация численных методов решения задач на ЭВМ (СЛАУ, ДУ, сеточные методы и т.д.)

6.Вычисление каких-то характеристик массива: суммы, произведения, дисперсии, коррекции и т.д.

32

5.Основные алгоритмы обработки данных. Поиск заданного элемента массива методом перебора. Бинарный поиск. Поиск максимального и минимального элемента массива. Сортировка данных. Простая и быстрая сортировка. Сортировка массива методом «пузырька».

При решении многих задач возникает необходимость установить, содержит ли массив определѐнную информацию или нет. Например, проверить, есть ли в массиве фамилий студентов фамилия Петров. Задачи такого типа называются поиском в массиве.

Для организации поиска в массиве могут быть использованы различные алгоритмы. Наиболее простой – это алгоритм простого перебора. Поиск осуществляется последовательным сравнением элементов массива с образцом до тех пор, пока не будет найден элемент, равный образцу, или не будут проверены все элементы. Алгоритм простого перебора применяется, если элементы массива не упорядочены.

Поиск в массиве методом перебора элементов Программа поиска в массиве целых чисел методом перебора элементов.

Перебор элементов массива осуществляет инструкция repeat, в теле которой инструкция if сравнивает текущий элемент массива с образцом и присваивает переменной found значение true, если текущий элемент равен образцу. Цикл завершается, если в массиве обнаружен элемент, равный образцу (в этом случае значение переменной found равно true), или если проверены все элементы массива. По завершении цикла по значению переменной found можно определить, успешен поиск или нет.

Program poisk; Var

massiv: array[1..10] of integer {массив целых} obrazec: integer {образец для поиска}

found: boolean {признак совпадения с образцом} i:integer;

Begin

{ввод 10 целых чисел} writeln(‗Поиск в массиве‘);

write(‗Введите 10 целых в одной строке через пробел‘); writeln(‗и нажмите <Enter>‘);

write(‗->‘);

for i:=1 to 10 do read(massiv[i]);

{числа введены в массив}

write(‗Ведите образец для поиска (целое число) -> ‘); readln(obrazec);

{поиск простым перебором} found:=false; {совпадений нет}

33

i:=1; repeat

if massiv[i]=obrazec

then found:=true; {совпадение с образцом} else i:=i+1; {переход к следующему элементу}

until (i>10) or (found); {завершим, если совпадение с образцом или проверен последний элемент массива}

if found

then writeln(‗Совпадение с элементом номер‘, i,‘. Поиск успешен.‘) else writeln(‗Совпадений с образцом нет.‘);

end.

Очевидно, что чем больше элементов в массиве и чем дальше расположен нужный элемент от начала массива, тем дольше будет программа искать нужный элемент.

Так как операции сравнения применимы как к числам, так и к строкам, то данный алгоритм может использоваться для поиска как в числовых, так и в строковых массивах.

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

Для поиска в упорядоченных массивах применяют другие, более эффективные по сравнению с методом простого перебора, алгоритмы, один из которых – метод бинарного поиска.

Суть метода бинарного поиска: выбирается средний (по номеру) элемент упорядоченного, например, по возрастанию массива (элемент с номером sred), и с этим элементом сравнивается образец.

Если средний элемент равен образцу, то задача решена.

Если средний элемент меньше образца, то искомый элемент расположен выше среднего элемента (между элементами с номерами verh и sred).

Если средний элемент больше образца, то искомый элемент расположен ниже среднего (между элементами с номерами sred и niz).

После того, как определена часть массива, в которой может располагаться искомый элемент, поиск проводят в этой части, выделяя новый средний элемент. Номер среднего элемента вычисляется по формуле: (niz-verh)/2 +verh. Программы бинарного поиска в упорядоченном массиве. В программу добавлены операторы вывода значений переменных verh, niz и sred. Выводимая информация полезна для понимания сути алгоритма. Кроме того, переменная n позволяет оценить эффективность этого алгоритма по сравнению с поиском методом простого перебора (для массивов, упорядоченных по возрастанию).

Program poisk1;

34

Var

A:array[1..9] of integer; {массив целых} Obrazec:integer; {образец для поиска}

Sred, verh, niz: integer; {номера среднего, верхнего и нижнего элементов массива}

Found:boolean; {признак совпадения с образцом}

I:inteher; Begin

{ввод 9 целых чисел} Writeln(‗Бинарный поиск в массиве.‘);

Write(‗Ведите 9 целых в одной строке через пробел ‘); Writeln(‗и нажмите <Enter>‘);

For i:=1 to 9 do Read(a[i]);

{здесь числа в массив введены}

Writeln(‗Введите образец для поиска (целое число)‘);

Readln(obrazec);

{бинарный поиск}

Verh:=1;

Niz:=9;

Found:=false;

N:=0;

Writeln(‗ verh niz sred‘);

Repeat

Sred:=(niz-verh) div 2 +verh; Writeln(verh:6,niz:6sred:6); N:=n+1;

If a[sred]=obrazec then found=true Else begin

If obrazec<a[sred] Then niz:=sred-1 Else verh:=sred+1; End;

Until (verh>niz) or found; If found

Then write(‗Совпадение с элементом номер ‘, sred, ‗. Выполнено n сравнений.‘) Else witeln(‗Образец в массиве не найден.‘);

Readln;

End.

Поиск минимального (максимального) элемента массива Алгоритм поиска минимального (максимального) элемента в

неупорядоченном массиве довольно очевиден: делается предположение, что

35

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

Program mine1; Const Granica=10; Var

A:array[1..granica] of integer; {массив целых} Min:integer; {номер минимального элемента массива}

I:integer; {номер элемента, сравниваемого с минимальным}

Begin

{здесь инструкция ввода массива}

Min:=1; {пусть первый элемент - минимальный}

For i:=2 to granica do

If a[i]<a[min] then min:=i;

Writeln(‗Минимальный элемент массива:‘,a[min]); Writeln(‗Номер элемента: ‘,min);

End.

Нахождения max и (min)

…….Begin

Y:=x[1]

m:=1

for k:=2 to 20 do if y<(>) x[k] then y:=x[k]…….

36

5.Основные алгоритмы обработки данных: сортировка данных. Простая и быстрая сортировка. Сортировка массива методом

пузырька.

Одним из основных способов представления данных является массив. Массив даѐт возможность реализации многих алгоритмов:

1.Ввод данных представленных виде таблицы значений

2.Вывод данных виде таблицы

3.Алгоритмы перестановки элементов внутри массива

4.Определение мах, min элементов массива, сумма элементов массива и т. д. Задачи поиска элементов массива

5.Сортировка элементов массива порядке возрастания и убывания.

Под сортировкой подразумевается процесс перестановки элементов с целью упорядочивания их в соответствии с каким-либо критерием.

Так как можно сравнивать переменные типов integer, real, char и string, то можно сортировать массивы этих типов.

Задача сортировки распространена в информационных системах и используется как предварительный этап задачи поиска, так как поиск в упорядоченном (отсортированном) массиве проводится намного быстрее, чем в неупорядоченном.

Существует много методов (алгоритмов) сортировки массивов. Рассмотрим два метода:

o Метод прямого выбора. o Метод прямого обмена.

Сортировка методом прямого выбора:

1.Просматривая массив от первого элемента, найти минимальный элемент и поместить его на место первого элемента, а первый – на место минимального.

2.Просматривая массив от второго элемента, найти минимальный элемент и поместить его на место второго элемента, а второй – на место минимального.

3.И так далее до последнего элемента.

Program sortarr; const

SIZE=5; var

a : array[1..SIZE] of integer;

i : integer; {номер элемента, от которого ведѐтся поиск минимального элемента}

j : integer; {номер элемента, сравниваемого с минимальным}

buf : integer; {буфер, используемый при обмене элементов массива} k : integer;

begin

37

writeln(‗Сортировка массива.‘);

write(‗Введите ‘, SIZE:3,‘целых в одной строке ‘); writeln(‗через пробел и нажмите <Enter>‘);

for k := 1 to SIZE do read(a[k]); writeln(‗Сортировка‘);

for i := 1 to SIZE-1 do begin

{поиск минимального элемента в части массива от a[i] до a[SIZE]} min := i;

for j := i+1 to SIZE do begin if a[j]<a[min] then min := j;

{поменяем местами a[min] и a[i]} buf := a[i];

a[i] := a[min]; a[min] := buf; {выведем массив}

for k :=1 to SIZE do write(a[k],‘ ‗); writeln;

end;

end;

writeln(‗Массив отсортирован.‘); end.

Сортировка методом прямого обмена В основе алгоритма лежит обмен соседних элементов массива. Каждый

элемент массива, начиная с первого, сравнивается со следующим, и если он больше следующего, то элементы меняются местами. Таким образом, элементы с меньшим значением продвигаются к началу массива (всплывают), а элементы с большим значением – к концу массива (тонут), поэтому этот метод иногда называют метод «пузырька». Этот процесс повторяется на единицу меньше раз, чем элементов в массиве.

program sortarr1; const

SIZE=5; var

a : array[1..SIZE] of integer; i : integer; {счѐтчик циклов}

k : integer; {текущий индекс элемента массива} buf : integer;

begin

writeln(‗‘Сортировка массива пузырьковым методом.); write(‗Введите ‘, SIZE:3,‘ целых в одной строке через пробел ‘); writeln(‗и нажмите <Enter>‘);

38

for k:=1 to SIZE do read(a[k]); writeln(‗Сортировка‘);

for i:=1 to SIZE-1 do begin

for k:=1 to SIZE-1 do begin

if a[k]>a[k+1] then begin

{обменяем k-й и (k+1)-й элементы} buf:=a[k];

a[k]:=a[k+1];

a[k+1]:=buf; end;

end;

for k:=1 to SIZE do write(a[k],‘ ‗); writeln;

end;

writeln(‗Массив отсортирован.‘); end.

Сортировка информации - это одна из стандартных функций, возникающих в процессе решения задач самого различного характера. Под сортировкой данных в самом широком смысле слова можно понимать процесс изменения порядка элементов в некоторой информационной совокупности таким образом, чтобы обеспечить возрастание (неубывание) или убывание (невозрастание) числового значения элемента данных или определенного числового параметра, связанного с каждым элементом данных (ключа), при переходе от предыдущего элемента к последующему. Для числовых данных понятия ―возрастания‖ и ―убывания‖ обычно относятся непосредственно к значению чисел - для любой пары натуральных или вещественных чисел определены отношения порядка типа ―больше‖ и ―меньше‖. Для символьных данных понятия ―возрастания‖ и ―убывания‖ относятся к числовым значениям внутри машинного кода, используемого для представления символов в памяти компьютера. Так как все буквенные символы располагаются в таблице кодов по алфавиту, то сортировка слов текста всегда приводит к их упорядочению в алфавитной (лексикографической) последовательности. Компьютерные информационные системы нельзя представить без возможности отсортировать ту или иную информацию. Типичный пример отсортированной (упорядоченной) информации - это любой словарь, список фамилий, перечень файлов в рабочем окне программы. К настоящему времени известно множество различных алгоритмов, обеспечивающих решение этой задачи. Наиболее известными:

1. Метод сортировки обменами (алгоритм ―пузырька‖).

39

2.Метод сортировки вставками.

3.Метод сортировки выбором элемента.

4.Метод разделения (алгоритм ―быстрой‖ сортировки).

5.Метод ―пирамиды‖.

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

procedure OBMEN( var a, b: integer ); var men: integer;

begin

men := a; a := b; b := men end;

ДОПОЛНИТЕЛЬНО Поиска элемента равного данному

….. m:=2

for k:=1 to 20 do if x[k]=2 then write (`k=`,k);…..

Зеркальной перестановки.

…..For k:=1 to 20 do

Y:=x[k] X[k]:=x[21-k] X[21-k]:=y;

Сортировка элементов массива Сортировка элементов - это процесс перестановки элемента массива так, что

они в порядке возрастания или убывания ключа Ключ или ключевое выражение это математическое выражение, результатом

которого является число для каждого элемента массива. Ключ дает своѐ значение.

Самый простой ключ равен значению элемента массива но может быть равен модулю элемента, функции от элемента.

Алгоритм сортировки не зависит от ключевого выражения.

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

Алгоритмы простой сортировки.

40

Соседние файлы в папке GOSY