Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь FAQ Написать работу КАТЕГОРИИ: ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву
Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Сортировка методом пузырька.Содержание книги
Поиск на нашем сайте Алгоритм состоит в повторяющихся проходах по сортируемому массиву. За каждый проход элементы последовательно сравниваются попарно и, если порядок в паре неверный, выполняется обмен элементов. Проходы по массиву повторяются до тех пор, пока на очередном проходе не окажется, что обмены больше не нужны, что означает – массив отсортирован. При проходе алгоритма, элемент, стоящий не на своём месте, «всплывает» до нужной позиции как пузырёк в воде, отсюда и название алгоритма. В качестве примера рассмотрим сортировку по возрастанию массива из 10 целых чисел. Массив формируется датчиком случайных чисел, генерирующим значения от 0 до 9. Var i, j, n, t: integer; a: array [1..10] of integer; Begin {Инициализация датчика случайных чисел} randomize; n:= 10; {Заполнение массива и вывод его на экран} for i:= 1 to n do a[i]:= Random(10); WriteLn('Исходный массив'); for i:=1 to n do Write(a[i],' '); WriteLn; {Сортировка массива методом пузырька} for i:=1 to n-1 do for j:=1 to n-i do if a[j]>a[j+1] then Begin t:=a[j]; a[j]:=a[j+1]; a[j+1]:=t; end; {Вывод на экран отсортированного массива} WriteLn('Отсортированный массив'); for i:=1 to n do Write(a[i],' '); WriteLn; ReadLn; End.
Сортировка методом поиска минимума (максимума). В данной сортировке используется методика поиска минимума (если упорядочить надо по возрастанию) или максимума (если упорядочить надо по убыванию) среди элементов массива. Основная идея алгоритма следующая: на i -м шаге итерации среди элементов массива a[i]…a[n] ищется минимальный (максимальный) элемент массива и меняется местами с a[i]. На следующем шаге i увеличивается на единицу и процедура поиска повторяется. Всего надо сделать n-1 итераций, где n – число элементов массива. При использовании данного алгоритма сортировки предыдущая задача будет выглядеть следующим образом: Var i, j, n, t, min: integer; a: array [1..10] of integer; Begin {Инициализация датчика случайных чисел} randomize; n:= 10; {Заполнение массива и вывод его на экран} for i:=1 to n do a[i]:=Random(10); WriteLn('Ishodnyi massiv'); for i:=1 to n do Write(a[i],' '); WriteLn; {Сортировка массива методом поиска минимума} for i:=1 to n-1 do Begin min:=a[i]; for j:=i+1 to n do if min>a[j] then Begin min:=a[j]; t:=a[j]; a[j]:=a[i]; a[i]:=t; end; end; {Вывод на экран отсортированного массива} WriteLn('Otsortirovannyi massiv'); for i:=1 to n do Write(a[i],' '); WriteLn; ReadLn; End.
Сортировка методом вставки. В данном алгоритме используется методика «вставки» очередного элемента массива в уже отсортированную часть массива в нужную позицию. Основная идея следующая: на i -ом этапе итерации производится вставка j -того элемента массивав нужную позицию среди элементов a[1], a[2],..., a[j-1], которые уже упорядочены (j = i - 1). После этой вставки первые j элементов массива a будут упорядочены. При использовании данного алгоритма сортировки предыдущая задача будет выглядеть следующим образом: Var i,j,n, key: integer; a: array [1..10] of integer; Begin {Инициализация датчика случайных чисел} randomize; n:=10; {Заполнение массива и вывод его на экран} for i:= 1 to n do a[i]:= Random(10); WriteLn('Исходный массив'); for i:= 1 to n do Write(a[i],' '); WriteLn; {Сортировка массива методом вставки} for i:= 2 to n do begin key:=a[i]; j:= i – 1; while (j >= 1) and (a[j] > key) do Begin a[j+1]:= a[j]; j:= j – 1; a[j+1]:= key; end; end; {Вывод на экран отсортированного массива} WriteLn('Otsortirovannyi massiv'); for i:= 1 to n do Write(a[i],' '); WriteLn; ReadLn; End.
Записи и файлы
Данные типа записи Запись – это сложный тип данных, представляющий собой структуру, состоящую из фиксированного числа компонент, называемых полями. При этом в разных полях могут быть данные разных типов. Данные типа запись описываются следующим образом: Type tr = record f11, f12,…, f1l: t1; f21, f22,…, f2m: t2; … fk1, fk2,…,fkn: tk; end;
Var mp: tr; Здесь tr – имя типа; mp – имя записи; l – число полей типа t1; m – число полей типа t2; n – число полей типа tk; fij – имена полей (элементов записи); служебные слова record, end – выполняют роль операторных скобок, открывающей и закрывающей соответственно. Обращение к элементу записи (полю) fij осуществляется следующим образом: mp.fij, где mp – имя записи, fij – имя элемента (поля). Между именем записи и именем поля ставится точка. Например, описать сведения о книге как данные типа запись. Пусть требуется хранить о книге следующие сведения: шифр книги (shg), название книги (ng), авторы (avt), год издания (GI). Type kniga = record shg: string[10]; ng: string[100]; avt: string[100]; gi: integer; end; Var a: kniga; Begin … a.shg:= ‘ВМ-991’; a.ng:= ‘Информатика 2002’; a.avt:= ‘Алексеев А.П.’; a.gi:= 2002; end.
Элементы массива также могут иметь тип запись. Для обращения к полям элемента массива указывают mp[i].fij, где mp – имя элемента массива, i – номер элемента массива; fij – имя элемента записи (поля). Например, требуется описать сведения о 10-ти книгах: Var a: array [1..10] of kniga; Begin … a[1].shg:= ‘831.3 а45’; a[1].ng:= ‘информатика 2002’; a[1].avt:= ‘алексеев а.п.’; a[1].gi:= 2002; End.
Примеры программ, работающих с данными типа запись.
Пример 1. Составить программу, которая вводит о каждом студенте следующие данные: номер зачетки, фамилия, оценка за контрольную. Данные оформить как массив из 10 записей. Элементы массива имеют тип запись. Вывести сведения о студентах, у которых оценка больше средней оценки. Type st = record nz: string [6]; fio: string [20]; ok: real; end; Var a: array [1..10] of st; sr: real; k, i: integer; Begin {присвоение сумме оценок значения 0} sr:= 0; for i:= 1 to 10 do Begin {ввод данных} Write(‘Номер зачетки=’); ReadLn(a[i].nz); Write (‘Фамилия=’); ReadLn(a[i].fio); Write(‘Оценка=’); ReadLn(a[i].ok); {суммирование оценок} sr:= sr + a[i].ok end; {расчет средней оценки} sr:= sr/10; WriteLn(‘Средняя оценка=’, sr:5:2); WriteLn(‘Список студентов, у которых оценка выше средней’); {вывод сведений о студентах, у которых оценка больше средней по группе} for i:= 1 to 10 do if a[i].ok > sr then WriteLn(a[i].nz,’ ‘, a[i].fio,’ ‘, a[i].ok:3:1); {вывод списка всех студентов} WriteLn(‘Общий список’); for i:= 1 to 10 do WriteLn(a[i].nz,’ ‘, a[i].fio,’ ‘, a[i].ok:3:1); ReadLn; End. Для удобства работы с переменными типа записи используется оператор присоединения with, формат которого: with x do op; где х – имя записи, ор – оператор. При этом в операторе ор при ссылках на элементы записи имя х опускается. Пример 2. Ввести сведения о студентах: шифр группы, фамилия, оценки за последнюю сессию. Вывести список студентов, имеющих средний балл больше среднего балла по группе. Type stud = record shg: string [7]; fio: string [20]; f, m,c: integer; cr: real end; Var st: array [1..25] of stud; k, i: integer; s: real; Begin {ввод количества студентов} Write(‘Введите количество студентов=’); ReadLn(k); {ввод в цикле исходных данных} for i:= 1 to k do with st[i] do Begin Write(‘’); ReadLn(shg); Write(‘’); ReadLn(fio); Write(‘’); ReadLn(f, m, c); {расчет среднего балла студента} cr:= (f + m + c)/3; end; {расчет среднего балла по группе} s:=0; for i:= 1 to k do s:= s + st[i].cr; s:= s/k; WriteLn(‘Средний балл по группе=’, s:5:2); {вывод сведений о студентах с высоким баллом} Writeln(‘Студенты со средним баллом больше среднего балла по группе’); for i:= 1 to k do with st[i] do if cr > s then WriteLn(shg, ’ ‘, fio,’ ‘, cr:5:2); {вывод сведений о всех студентах} WriteLn(‘Общий список’); for i:= 1 to k do with st[i] do WriteLn(shg, ’ ‘, fio, ’ ‘, cr:5:2); End.
Работа с файлами Под файлом понимается либо именованная область на носителе информации (локальном, сетевом или съемном диске), содержащая данные определенного вида. Любой файл имеет три характерные особенности. Во-первых, у него есть имя, что дает возможность программе работать одновременно с несколькими файлами. Во-вторых, он содержит компоненты одного типа. Типом компонентов может быть любой тип Турбо Паскаля, кроме файлов (т.е. нельзя создать файл, состоящий из других файлов). В-третьих, размер вновь создаваемого файла никак не оговаривается при его объявлении и ограничивается только емкостью устройств внешней памяти. Для организации ввода-вывода информации в файл в программе используются специальные переменные файлового типа. Переменные файлового типа описываются следующим образом: Var имя переменной: file of тип элементов файла;
Например, Var a: file of integer; b: file of real; В отличие от массива длина файла, то есть количество элементов, не задается, место элемента не определяется индексом. С каждой переменной файлового типа связано понятие текущего указателя. Текущий указатель указывает на некоторый конкретный элемент файла. Все действия с файлами (чтение из файла, запись в файл) производятся поэлементно, причем в этих действиях участвует тот элемент файла, на который указывает указатель. В результате совершения операций текущий указатель может перемещаться. Все элементы файла считаются пронумерованными, начальный элемент имеет нулевой номер.
|
||
|
Последнее изменение этой страницы: 2017-02-05; просмотров: 413; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 216.73.216.10 (0.008 с.) |