- •Д.С.Ситкин
- •Информатика.
- •Программированиевdelphi
- •Лабораторныйпрактикум
- •Содержание
- •Введение
- •Основныепонятияпрограммирования
- •Этапыпрограммирования
- •Средаdelphi.Созданиепростейшегопроекта
- •Формаиеёсвойства
- •Компонентыформыиихсвойства
- •КомпонентLabeledEdit
- •Событиеипроцедураобработкисобытия
- •Пример1.1
- •Компиляцияизапускпроектанаисполнение
- •Структураисохранениепроекта
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Линейныйалгоритм
- •Типыданных
- •Константыипеременные
- •Арифметическиеоперации
- •Правилазаписитиповыхдействий
- •Структурапроцедурыобработкисобытия
- •Пример2.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Подпрограммы
- •Классификацияиструктураподпрограмм
- •Механизмработыподпрограммыиобменапараметрами
- •Пример3.1
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Структурамодуля
- •Созданиеиподключениемодуля
- •Пример4.1
- •Условныйоператор.Неполнаяформа
- •Условныйоператор.Полнаяформа
- •IfусловиеthenоператорS1elseоператорS2
- •Пример5.1
- •Пример5.2
- •Операторвыбора
- •Пример5.3
- •Содержаниеотчёта
- •Контрольныевопросы
- •Контрольсинтаксисавводимыхданных
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Алгоритмыповторений
- •Операторцикласпредварительнымусловием
- •Пример7.1
- •Операторцикласпараметром(сосчётчиком)
- •Пример7.2
- •Пример7.3
- •Операторцикласпоследующимусловием
- •Пример7.4
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Массивы
- •Объявлениемассива
- •Обработкамассивов
- •Пример8.1
- •Динамическиемассивы
- •Подпрограммасоткрытымпараметром-массивом
- •Пример8.2
- •Целесообразностьвыделенияпамятиподмассивы
- •Контрольсинтаксисаэлементовмассива
- •Задание
- •Обработкамногомерныхмассивов
- •Пример9.1
- •КомпонентStringGrid
- •Пример9.2
- •Сортировкамассивов
- •Пример9.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Внешниефайлы
- •Физическиеилогическиефайлы
- •Классификациялогическихфайлов
- •Процедурыифункцииобработкифайлов
- •Пример 10.1
- •КомпонентыOpenDialog иSaveDialog
- •Пример 10.2
- •Пример 10.3
- •Задание
- •Содержаниеотчёта
- •Контрольныевопросы
- •Олабораторнойработе
- •Информатика. Программированиев delphi
Целесообразностьвыделенияпамятиподмассивы
Выше говорилось, что, при написании проектов для работы смассивами, целесообразно использовать динамические массивы длярационального расходования памяти. Но в некоторых случаях хра-нить в памяти в виде массива набор однотипных переменных, над ко-торымивыполняютсяодинаковыедействия,ненужно ивовсе.
Впримере8.1массив,вкоторыйсчитывалисьчислаизкомпо-нентаMemo,можнонеобъявлять,т.к.вусловияхпоставленнойзадачинетнеобходимостихранитьвпамятивсечислаодновременно.Дляреализацииалгоритма(рис.8.2)достаточнообъявитьотдельнуюпе-ременнуюx,вкоторуювциклебудетзаписыватьсяочереднойэле-ментизMemo, затемxпроверяетсяна отрицательностьивыводитсявкомпонентLabel3. На следующей итерации переменнаяxполучит но-воезначение,староеприэтомпотеряется,нооноужебыловыведеновLabel3напредыдущейитерации,хранитьеговпамятиненужно.Т.е.в тексте вместоx[i] писатьx, а массивarray[1..m]ofreal не объявлять.Однаковпримере8.2вобеихпроцедурахTForm1.Button1ClickиTForm1.Button2Clickпамять под массивы выделить нужно.Это связано стем,чтокаждыйизмассивовзначений,введённыхскомпонентов
Memo,передаётсяцеликомвпроцедурувычисленияпроизведения.
Контрольсинтаксисаэлементовмассива
Контролировать синтаксис массива чисел, вводимого, например,с компонентаMemo, конструкциями, рассмотренными в работе № 6,нельзя, т.к. чисел несколько, запятых и знаков минуса допускаетсянесколько в компоненте. В таких случаях полезна стандартная проце-дураVal(S,V,Cod),онапреобразовываетстрокуS(типString)вчисло,возвращаемое в параметреV(типIntegerилиReal). Если в числе нетсинтаксических ошибок, тоCodвозвращает значение ноль, иначекодошибки.ВкачестведесятичногоразделителявпроцедуруValнужно передавать символ «.». Следует в цикле подставить вValкаж-дое число из строкиMemo, в случае ошибки (Cod0) досрочно завер-шитьпроцедуру,еслиошибкинет,точислобудетзаписановпамять.
Задание
Разработатьпроект длявводадвухмассивовидлякаждого
Найтинаименьшийэлементиуказатьегоположение.
Найтисуммыотрицательныхиположительныхэлементов.
Найти сумму и число чётных элементов целочисленного массива.4.Удвоитьнечётныеэлементыцелочисленногомассива,сосчитатьих.
Найтисреднееарифметическоезначениеэлементов.
Пронормироватьэлементыотносительнонаибольшегоэлемента.
Умножить чётныеэлементы целочисленногомассиваназадаваемоепользователем число.
Найтисколькоположительныхиотрицательныхэлементов.
Определитьположениезаданнойфамилии.
Использоватьдинамическиемассивыиподпрограммусоткры-тыммассивомдлявыполнениятиповогодействиясмассивами.
Содержаниеотчёта
цельработыизадание;
блок-схемаалгоритматиповоговычисления;
блок-схемаалгоритмавыполненияосновныхдействий;
текстмодуляпроекта;
примерработыприложениясуказаниемкомпонентовформы;
выводыпоработе.
Контрольныевопросы
Чтотакоемассив,каковыегохарактеристикииспособыописания?
Чемотличаетсядинамическиймассивотобычного(статического)?
Чтопонимаютподсловами«эффективноерасходованиепамяти»?
Каковоназначениеоткрытогопараметра-массиваподпрограммы?
Лабораторнаяработа№9
МНОГОМЕРНЫЕМАССИВЫ.ВЛОЖЕННЫЕЦИКЛЫ
Цель работыприобретение умений разработки и программнойреализации алгоритмов обработки многомерных массивов с исполь-зованиемконструкцийвложенных циклов.
Объявлениемногомерныхмассивов
Всёсказанноеотносительноописанияодномерныхмассивовсправедливо и для многомерных, с учётом изменения в количествеиндексов.Рассмотримпримерыобъявлениядвумерныхмассивов.
Черезобъявлениепеременной
varx:array[1..10,1..10]ofbyte;//массивизстаэлементовцелоготипа
Черезобъявлениетипаданныхипеременнойэтоготипа
typemass=array[1..5,1..7]ofinteger;
varx:mass;//массивизтридцатипятиэлементовцелоготипа
Сиспользованиемимёнконстант
constm=0;n=5;
typematr=array[m..n,n..n]ofsingle;
varx:matr;//массивиз66-тивещественныхпеременных(элементов)
Динамический массивvarx:array of array ofreal;или
typedyn_matr=arrayofarrayofreal;
varx:dyn_matr;
Какивслучаеодномерныхмассивов,памятьподдинамическийдву-мерныймассиввыделяетсявовремяработыпрограммыпроцедурой
SetLength(имя_массива,число строк,число столбцов); нижнийиндексдлялюбогоизмерениядинамическогомассиваравеннулю.
Память может быть выделена под непрямоугольный массив (т.е.подструктуру,неэквивалентнойматрице)
SetLength(x, n); //задание размерности по первому индексу (число строк)SetLength(x[0], n1); //задание длины первой строки (нумерация от нуля)SetLength(x[1],n2); //заданиедлины второйстроки
……………………
SetLength(x[n1],nn);//заданиедлиныпоследнейстроки
Обращение к элементу массива записывают с указанием именимассива с номерами индексов через запятую в квадратных скобках,например:x[1,1]; x[i,j]; x[i+1,j]ит.п.
