Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Общие пояснения. Рассмотрим некоторые моменты, связанные с обработкой одномерных массивов
Рассмотрим некоторые моменты, связанные с обработкой одномерных массивов. Следует помнить, что выделение памяти под массив при его описании может производиться только с помощью констант (в явном виде, или с предварительным описанием константы), например: 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. Вывод результатов. Если в процессе выполнения программы исходный массив изменяется (в нем меняются сами значения элементов, их количество или они переставляются), исправленный массив должен выводиться в конце программы под заголовком 'Измененный массив'. Разбор контрольного варианта
|