Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Общие пояснения. Рассмотрим некоторые моменты, связанные с обработкой одномерных массивов






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

Const MIN=5;

MAX=100;

Var Massiv1: array[1..110] of real;

Massiv2: array[MIN..MAX] of integer;

Кроме того, рекомендуется сначала завести свои описатели типов массивов, а затем с их помощью выделять место под конкретные переменные этих " массивных" типов, например:

Const MAXI=200;

Type IntMasMAX = array[1..MAX] of integer; {описатель для целочисленных массивов из MAX элементов}

RealMass = array[1..110] of real; { описатель

для вещественных массивов из 110 элементов }

Var Massiv1, Nmbs: IntMasMAX; {завели 2 целочисл. массива}

Massiv2, WindV: RealMass; {Завели 2 веществ. массива}

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

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

VAR

Finput: text; {завели файловую переменную для набора данных текстового типа}

...

BEGIN

...

Writeln(' Введи длину массива');

metka: Read(N);

if(N< MIN) or (N> MAX) then

Begin

Writeln('Недопустимое количество, введите снова');

goto metka;

End;

Assign(Finput, 'UMNIK4.DAT'); { связали файловую

переменную с набором данных UMNIK4.DAT }

Reset(Finput); { открыли файл для чтения }

for i: =1 to N do

Read(Finput, Massiv2[i]);

...

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

2. Вывод исходных данных. Включает обычно вывод заголовка массива, возможно с указанием его длины, и затем вывод заполненных элементов массива в удобной для просмотра на экране (и при распечатке) форме. При выводе на дисплей можно ориентироваться на ширину экрана (80 позиций), при печати – на 60 (вдоль тетрадного листа), 76 (поперек тетрадного листа или при выводе на стандартный лист).

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

· в разделе описаний переменных завести файловую переменную типа text для вывода;

· в выполняемом блоке связать файловую переменную с набором данных и открыть для вывода (используя стандартные процедуры Assign и ReWrite);

· в операторах Write и WriteLn в качестве первого (или единственного) параметра указывать имя файловой переменной;

· перед концом программы закрыть выводной файл стандартной процедурой Close.

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

Например, если числа целые и находятся в диапазоне от –999 до +999, формат должен быть не менее: 5 (с учетом разделяющих пробелов). Если диапазон целых чисел неизвестен, следует рассчитывать на максимум. Для самых длинных целых чисел (–32768) он составит: 7 и выводить удобно по 10 значений в строке.

Для вещественных чисел, если использовать экспоненциальную форму записи, достаточно оставлять три значащие цифры, что с учетом знака, точки и порядка числа составит: 11, например, _–0.836Е-02, и выводить имеет смысл по пять чисел в строке.

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

При выводе в конце каждой строки следует давать команду Writeln для перехода на новую строку. Определить, что пора менять строку, можно по остатку от деления текущего номера элемента на количество значений в строке. Ниже приведен пример вывода на печать в выводной текстовый файл Fout одномерного вещественного массива по " k" значений в строке:

Assign(Fout, 'UMNIK4.RES'); {связали Fout с Н.Д. UMNIK4.RES }

ReWrite(Fout); { открыли файл для записи }

Writeln(Fout, ' Исходный массив из ', N, ' элементов');

for i: =1 to N do

Begin

Write(Fout, Massiv2[i]: 8: 2); { печать в текущей строке}

if i mod k = 0 then Writeln(Fout); {если номер элемента

кратен " к", переходим на новую строку}

End;

...

Close(Fout); {закрытие файла }

3. Обработка массива. Здесь могут встретиться различные ситуации, на которые следует обратить внимание.

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

for i: =1 to N do

begin

if K[i] mod 5 = 0 then

{ делать что надо, т.к. элемент массива делится на 5};

...

end;

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

Например, если надо что-то делать с каждым пятым элементом массива К длиной N элементов, то цикл обработки будет иметь вид:

M: =N div 5; { определение числа повторений цикла }

for i: =1 to M do

begin

j: =i*5; { определение номера обрабатываемого элемента}

{ обработка K[j]-го элемента массива }

...

end;

Если нужно обрабатывать каждый пятый элемент, начиная с третьего, программа будет выглядеть по-другому:

j: =3;

M: =(N-(3-1)) div 5; {определение числа повторений цикла}

for i: =1 to M do

begin { обработка K[j]-го элемента массива }

...

j: =j+5; {определение номера следующего обраб.элемента}

end;

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

Присваивание значения переменной можно сделать либо перенося это значение из другой переменной (если она содержит в данный момент нужный символ), либо задавая присваивание константы, либо используя функцию Chr(i), преобразования целого числа в символ (с кодом, равным этому числу). Таблица кодов символов приведена в Приложении Г. Примеры присваивания:

Const

SimA ='A';

Paragraf = #21;

Kod = 21;

SixKod = $15;

Var S1, S2, S, S4, S5, S6: char;

...

Begin

...

S1: = SimA;

S2: =S1;

S3: ='A';

S3: =Paragraf;

S4: =#21;

S5: =#$15;

S6: =Chr(21);

S7: =Chr($15);

Пример используемых операторов:

...

Var Sim: char;

TextM: array[1..100] of char; {завели символьный массив}

i, N: shortint;

...

Begin

...

{Если заполнение символьного массива TextM с клавиатуры}

for i: =1 to N do

begin

writeln('Вводи очередной символ');

readln(TextM[i]);

end;

...

{Если заполнение символьного массива TextM из файла}

assign(fin, 'UMNIK4.DAT');

reset(fin);

for i: =1 to N do

read(fin, TextM[i]);

...

close(fin); { не забыть в конце закрыть все открытые файлы }

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

Разбор контрольного варианта






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.