Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Sitkin_Informatika_Programmirovanie_v_DELPHI.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
600.56 Кб
Скачать

Целесообразностьвыделенияпамятиподмассивы

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

Впримере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, в случае ошибки (Cod0) досрочно завер-шитьпроцедуру,еслиошибкинет,точислобудетзаписановпамять.

Задание

Разработатьпроект длявводадвухмассивовидлякаждого

  1. Найтинаименьшийэлементиуказатьегоположение.

  2. Найтисуммыотрицательныхиположительныхэлементов.

  3. Найти сумму и число чётных элементов целочисленного массива.4.Удвоитьнечётныеэлементыцелочисленногомассива,сосчитатьих.

  1. Найтисреднееарифметическоезначениеэлементов.

  2. Пронормироватьэлементыотносительнонаибольшегоэлемента.

  3. Умножить чётныеэлементы целочисленногомассиваназадаваемоепользователем число.

  4. Найтисколькоположительныхиотрицательныхэлементов.

  5. Определитьположениезаданнойфамилии.

Использоватьдинамическиемассивыиподпрограммусоткры-тыммассивомдлявыполнениятиповогодействиясмассивами.

Содержаниеотчёта

  • цельработыизадание;

  • блок-схемаалгоритматиповоговычисления;

  • блок-схемаалгоритмавыполненияосновныхдействий;

  • текстмодуляпроекта;

  • примерработыприложениясуказаниемкомпонентовформы;

  • выводыпоработе.

Контрольныевопросы

  1. Чтотакоемассив,каковыегохарактеристикииспособыописания?

  2. Чемотличаетсядинамическиймассивотобычного(статического)?

  3. Чтопонимаютподсловами«эффективноерасходованиепамяти»?

  4. Каковоназначениеоткрытогопараметра-массиваподпрограммы?

Лабораторнаяработа№9

МНОГОМЕРНЫЕМАССИВЫ.ВЛОЖЕННЫЕЦИКЛЫ

Цель работыприобретение умений разработки и программнойреализации алгоритмов обработки многомерных массивов с исполь-зованиемконструкцийвложенных циклов.

Объявлениемногомерныхмассивов

Всёсказанноеотносительноописанияодномерныхмассивовсправедливо и для многомерных, с учётом изменения в количествеиндексов.Рассмотримпримерыобъявлениядвумерныхмассивов.

    1. Черезобъявлениепеременной

varx:array[1..10,1..10]ofbyte;//массивизстаэлементовцелоготипа

    1. Черезобъявлениетипаданныхипеременнойэтоготипа

typemass=array[1..5,1..7]ofinteger;

varx:mass;//массивизтридцатипятиэлементовцелоготипа

    1. Сиспользованиемимёнконстант

constm=0;n=5;

typematr=array[m..n,n..n]ofsingle;

varx:matr;//массивиз66-тивещественныхпеременных(элементов)

    1. Динамический массив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[n1],nn);//заданиедлиныпоследнейстроки

Обращение к элементу массива записывают с указанием именимассива с номерами индексов через запятую в квадратных скобках,например:x[1,1]; x[i,j]; x[i+1,j]ит.п.