Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Заполнение двумерного массива по строке.

Поиск

Массив содержит 3 строки и 4 столбца, т.е. 3х4=12 элементов.

Заполним значениями элементы первой строки:

For j:=l to 4 do

a[i]:=random(100);

Для того, чтобы перейти к заполнению элементов второй строки, мы должны изменить индекс строки на 1 и получить два, и т.д. Индекс строк меняется медленнее, чем индекс столбца. Фрагмент программы для общего случая:

for i:=l to 3 do

for j:=l to 4 do

a[i,j]:=random(100);

Заполнение двумерного массива по столбцу.

Заполним двумерный массив, перемещаясь по столбцу.

for j:=l to 4 do {внешний цикл: j — индекс столбца; он меняется медленнее}

for i:=l to 3 do

a[i,j]:==random(100);

Обратите внимание на порядок расположения индексов a [i,j]!

Печать содержимого двумерного массива в виде таблицы.

for i:=l to 3 do begin

for j:=l to 4 do

write(a[i,j],' '); {печатаем элементы строки, не перемещая курсор}

writeln() {перемещаем курсор}

end;

При составлении программ ранее использовались переменные. Для каждой переменной компьютер отводит ячейку памяти обращение к которой выполняется по имени переменной. Недостатком такого способа написания программ – при работе с большим количеством данных пришлось бы выделять большое количество переменных. Зачастую работа с одним типом данных проводится по одному принципу меняется лишь числовое значение. Гораздо легче данные одного типа обозначать одной переменной меняя лишь номер ячейки в которой хранится значения. Такая организация данным называется массив.

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

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

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

Имя типа = ARRAY [ диапазоны индексов ] OF тип элемента массива;

В качестве типа для элементов массива можно использовать любые типы Турбо Паскаля кроме файловых. Диапазоны индексов представляют собой один или несколько диапазонов, перечисленные через запятую. В качестве диапазонов индексов нельзя использовать диапазоны с базовым типом Longint.

ПРИМЕР: Три способа описания одного и того же типа массива:

type {1} M1 = array [0..5] of integer;

M2 = array [char] of M1;

M3 = array [-2..2] of M2;

{2} M3 = array [-2..2] of array [char] of array [0..5] of integer;

{3} M3 = array [-2..2,char,0..5] of integer;

var A:M3;

{Обращаться к элементам массива можно следующим образом:}

Begin

read (A[-1,'a',3]);

read (A[1]['x'][0]);

A[1]['c',1]:=100;

end.

Глубина вложенности, т.е. количество индексов, при определении массивов не ограничена. Играет роль только суммарный объем данных в программе. В стандартном режиме работы Турбо Паскаля этот объем ограничен размерами сегмента, т.е. 64 килобайта. Целиком над массивами допускается применение только операции присваивания массивов (подмассивов) одинаковых типов. Остальные операции должны выполняться поэлементно.

ПРИМЕР: Вычисление значения многочлена степени N, коэффициенты которого находятся в массиве A в точке X по схеме Горнера.

Pn(x) = A[0]*X^n + A[1]*X^(n-1) +... + A[n-1]*X + A[n] =

= (...((A[0]*X + A[1])*X + A[2])*X +... + A[n-1])*X + A[n].

program Scheme_Gorner;

type Mas = array [0..100] of integer;

var A:Mas; i,j,n:integer; x,p:real;

Begin

write ('степень многочлена = '); read (n);

writeln ('введите целые коэффициенты: ');

for i:=0 to n do read (A[i]);

write ('значение X = '); read (x);

p:=0;

for i:=0 to n do p:=p*x+A[i];

writeln ('Pn(X) = ',p);

end.

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

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

Var

n1,n2,n3,n4,n5,

n6,n7,..., n100: Integer;

Это будет выглядеть крайне громоздко, не так ли? Вот здесь и возникает понятие массивов. Массив - это на самом деле одна переменная, но она содержит в себе большое количество отдельных элементов, того типа, который определит программист, и столько, сколько он захочет. (При этом размер массива несколько ограничен). Что это означает? Что заведя переменную-массив мы как бы создаем цепочку переменных. После чего мы можем обратиться к любому элементу этой цепочки: прочитать его, изменить, сделать с ним все, что можно сделать с обычной переменной.

Помните строку? Я имею в виду тип String, который позволяет обратиться к любому символу своему символу:

S: String; S[2]:= 'a';

Так вот, String - это и есть своего рода массив. Массив из переменных типа Char. Посмотрите, мы заводим всего одну переменную, после чего можем обратиться к любому ее символу, изменить его, прочитать и т.д. (Однако предупрежу, String - это всеже не массив. Просто этот тип очень подходит для примера).

Также мы можем создать цепочку и из чисел, и из символов, да и вообще из чего угодно. Сегодня мы разберем создание массивов из чисел, а далее по ходу рассылки разберемся и с другими типами массивов.


19. Классификация типов данных в Паскале.

Под типом данных понимается множество допустимых значений этих данных, а также совокупность операций над ними.3.1. Классификация типов данныхВ Turbo Pascal можно выделить следующие группы типов: - простые типы; - структурированные типы; - указатели; - процедурные типы; - объекты.Среди типов, используемых в языке, есть стандартные (предопределенные) и определяемые программистом. К стандартным типам, не требующим предварительного определения, относятся целые типы, вещественные типы, логические типы, символьный тип - Char, тип-строка - string, ASCIIZ-строка - PChar, текстовый файл - Text, тип-указатель - Pointer. Все другие используемые типы данных должны быть определены либо в разделе объявления типов, либо в разделе объявления переменных или типизированных констант. Раздел объявления типов начинается зарезервированным словом type, после которого определяются вводимые типы. Определение каждого нового типа начинается с идентификатора типа. За ним следует знак равенства, а далее - само определение, завершающееся точкой с запятой: type<имя типа 1> = <определение типа 1>;<имя типа 2> = <определение типа 2>;<имя типа N> = <определение типа N>; В качестве примера см. п. 3.2.4.В данном разделе будут описаны только простые типы данных, все остальные типы будут рассмотрены после описания переменных, констант и выражений.3.2. Простые типы данныхПростой тип определяет допустимое множество значений данных этого типа а также совокупность операций над ними.В Turbo Pascal имеются следующие группы простых типов: - целые типы; - перечисляемый тип; - логический тип; - тип-диапазон; - символьный тип; - вещественные типы.Все простые типы, за исключением вещественных, являются порядковыми типами. Для величин порядковых типов определены: следующее значение и предыдущее значение. Для величин порядковых типов определены стандартные процедуры и функции: Dec, Inc, Ord, Pred, Succ.3.2.1. Целые типыВ отличие от языка Паскаль, где определен единственный целый тип Integer, в Turbo Pascal имеется пять стандартных типов целых чисел: Shortint, Integer, Longint, Byte, Word. Характеристики этих типов приведены в табл. 2.Таблица 2. Целые типы данныхТип Диапазон Формат Размер в байтахShortint -128.. 127 Знаковый 1Integer -32768.. 32767 Знаковый 2Longint -2147483648.. 2147483647 Знаковый 4Byte 0.. 255 Беззнаковый 1Word 0.. 65535 Беззнаковый 23.2.2. Логический типСтандартный логический тип Boolean (размер - 1 байт) представляет собой тип данных, любой элемент которого может принимать лишь два значения: True и False. При этом справедливы следующие соотношения:False < True Succ (False) = TrueOrd (False) = 0 Pred(True) = FalseOrd(True) = 1В Turbo Pascal 7.0 добавлено еще три логических типа ByteBool (размер - 1 байт), WordBooL (размер - 2 байта) и LongBool (размер - 4 байта). Они введены для унификации с другими языками программирования и со средой Windows. Отличие их от стандартного типа Boolean заключается в фактической величине параметра этого типа, соответствующей значению True. Для всех логических типов значению False соответствует число 0, записанное в соответствующее количество байтов. Значению же True для типа Boolean соответствует число 1, записанное в его байт, а для других типов значению True соответствует любое число, отличное от нуля (хотя функция Ord в этом случае дает значение 1).3.2.3. Символьный типСтандартный символьный тип Char определяет полный набор ASCII-символов. Функция Ord от величины типа Char дает код соответствующего символа. Сравниваются величины символьного типа по своим кодам.3.2.4. Перечисляемый типПеречисляемый тип не является стандартным и определяется набором идентификаторов, с которыми могут совпадать значения параметра. Список идентификаторов указывается в круглых скобках, идентификаторы разделяются запятыми:type<имя типа> = (<идентификатор 1, идентификатор 2,..., идентификатор М>);Важно, в каком порядке перечислены идентификаторы при определении типа, т. к. первому идентификатору присваивается порядковый номер 0, второму - 1 и т. д. Один и тот же идентификатор можно использовать в определении только одного перечисляемого типа. Функция Ord от величины перечисляемого типа дает порядковый номер ее значения. Пример. Перечисляемый тип,type Operat = (Plus, Minus, Mult, Divide);Логический тип является частным случаем перечисляемого типа:type Boolean = (False, True);3.2.5. Тип-диапазонВ любом порядковом типе можно выделить подмножество значений, определяемое минимальным и максимальным значением, в которое входят все значения исходного типа, находящиеся в этих границах, включая и сами границы. Такое подмножество определяет тип - диапазон. Тип-диапазон задается указанием минимального и максимального значений, разделенных двумя точками:type<имя типа> = <мин. значение>.. <макс. значение>;Минимальное значение при определении такого типа не должно быть больше максимального. Пример. Определение типов-диапазонов.typeDozen = 1..12; {числа от 1 до 12}AddSub = Plus..Minus; {операции сложения и вычитания}3.2.6. Вещественные типыВ отличие от стандарта языка Паскаль, где определен только один вещественный тип Real, в Turbo Pascal имеется пять стандартных вещественных типов: Real, Single, Double, Extended, Comp. Характеристики этих типов см. в табл. 3. Таблица 3. Вещественные типы данныхТип Диапазон Число Размер значащих цифр в байтахReal 2.9*10-39..1.7*1038 11-12 6Single 1.5*10-45..3-4*1038 7-8 4Double 5.0*10-324..1.7*10308 15-16 8Extended 3.4*10-4932..1.1*104932 19-20 10Comp -263.. +263-1 19-20 8Тип Comp фактически является типом целых чисел увеличенного диапазона, однако порядковым не считается.Типы Single, Double, Extended и Comp можно использовать в программах только при наличии арифметического сопроцессора или при включенном эмуляторе сопроцессора

 


20. Типовые алгоритмы обработки массивов. Вычисление суммы, среднего, произведения.

Задача:

Найти средние арифметические пяти массивов, состоящих их десяти целых чисел.

Описание переменных:

arr – массив, состоящий их 5 элементов-массивов, каждый из которых в свою очередь содержит 10 целых чисел;

average – массив, содержащий средние арифметические вложенных массивов массива arr;

Алгоритм решения задачи:

1. Заполняем массивы целыми числами с помощью функции fill_array. Функция вызывается в цикле for 5 раз и возвращает очередной подмассив массива arr.

2. Для каждого вложенного массива целых чисел вычисляется среднее арифметическое с помощью функции found_average. Результат заносится в массив average.

Программа на языке Паскаль:

const n = 10; m = 5;

Type

type_numbers = array [1..n] of integer;

type_arr = array [1..m] of type_numbers;

type_average = array [1..m] of real;

Var

arr: type_arr; {array of arrays}

average: type_average; {array of averages}

i,j: byte;

 

function fill_array():type_numbers;

var i: byte; a:type_numbers;

Begin

for i:=1 to n do a[i]:=random(50)+1;

fill_array:= a;

end;

 

function found_average(a:type_numbers): real;

var i: byte; sum: integer;

Begin

sum:= 0;

for i:=1 to n do sum:=sum+a[i];

found_average:= sum / n;

end;

 

Begin

randomize;

for i:=1 to m do arr[i]:= fill_array();

for i:=1 to m do begin

for j:=1 to n do write(arr[i,j]:3);

average[i]:=found_average(arr[i]);

writeln(' -- ', average[i]:6:2);

end;

readln

end.

 



Поделиться:


Последнее изменение этой страницы: 2016-08-15; просмотров: 600; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.137.162.21 (0.008 с.)