Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Пример цикла типа while




Пример цикла типа for

Вычисление n чисел Фибоначчи:
F1=1; F2=1;…; Fn=Fn-1+Fn-2, например F3=F2+F1=1 + 1 = 2; F4 = 2 + 1 = 3 и т.д.

program fib; {Нахождение чисел Фибоначчи}
var x, y, z, i, n: integer;
begin
writeln (‘Введите n’); read (n);
x:=1; y:=0;

for i:=1 to n do
begin
z:=x; x:=x+y; y:=z;
write (' ', x);
end;
readln;
end.

Cоставление таблицы функции y = a3/(a2+x2) для х, принадлежащих отрезку [-1; 1] с шагом 0.1. Так как параметр цикла типа for должен быть целочисленным, удобнее использовать цикл while, в котором значение х можно изменять при каждом шаге на Dх = 0.1

 

program cycl_while;
uses crt; {вызов модуля Crt для управления режимом экрана}
var
a, x, y: real; i: integer;
begin
clrscr; {процедура очистки экрана из модуля Crt}
writeln ('Введите а ');
readln (a);
x:= -1.; writeln (‘ x ‘, ‘ y ’);
while do x<1.05 begin
y:= sqr(a)*a/ (a*a+x*x);
writeln (x:6:2, y:8:4);
x:=x+0.1
end;
readln;
end.

Условие х<1.05 соответствует каждому значению х плюс половина шага.

 

Пример цикла типа repeat... until

Определить число n, при котором сумма квадратов натурального ряда чисел от 1 до n не превысит величину K, введенную с клавиатуры. Т.е.
S >= K, где S=

program sum_sq; {Сумма квадратов натурального ряда }
uses crt;
var k, s, n: integer;
begin
clrscr;
writeln('Введите K');
readln (k);
s:=0; n:=1;
repeat
s:=s+n*n;
n:= n+1;

until s > k;
writeln ('N= ', n: 3, ' s= ', s: 5);
readln;
end.

Цикл повторяется до тех пор, пока условие записанное после ключевого слова until, будет ложным (не выполняется). Как только это условие выполнится, происходит выход из цикла. После окончания цикла производится печать результата (оператор writeln). Отметим, что цикл с предусловием (типа while) может не выполниться ни разу, цикл с постусловием repeat... until выполнится по крайней мере 1 раз. Когда число повторений цикла неизвестно заранее, применяются циклы с предусловием или с постусловием. Когда число повторений цикла известно заранее, как правило, применяется цикл типа for. Но любой цикл типа for можно заменить циклом с предусловием или постусловием.

 

Тема 2.3 Массивы

 

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

 

Месяц                        
Температура -21 -18 -7,5 5,6     22,2     5,4 -7 -18

 

Такую таблицу называют линейной. Она представляет собой последовательность упорядоченных чисел. Если требуется какая-то математическая обработка этих данных, то для их обозначения обычно вводят индексную символику. Например, через T1, обозначается температура января (первого месяца), Т5—температура мая и т.д. В общем виде множество значений, содержащихся в таблице, обозначается так:

{ T j }, i=l,..., 12.

Порядковые номера элементов (1, 5, i и т.д.) называются индексами. Индексированные величины удобно использовать для записи их математической обработки. Например, среднегодовая температура выражается следующей формулой:

 

Т ср =

Теперь представьте, что нам требуется собрать информацию о среднемесячных температурах за 10 лет, например с 1981 по 1990 г. Очевидно, что для этого удобна прямоугольная таблица, в которой

столбцы соответствуют годам, а строки — месяцам.

 

Год Месяц
1 2 3 4 5 6 7 8 9 10 11 12
1981 -23 -17 -8,4 6,5 14 18,6 25 19 12,3 5,6 -4,5 -19
1982 -16 -8,5 -3,2 7,1 8,4 13,8 28,5 21 6,5 2 -13 -20
1983 -9,8 -14 -9,2 4,6 15,6 21 17,8 20 11,2 8,1 -16 -21
1990 -25 -9,7 -3,8 8,5 13,9 17,8 23,5 17,5 10 5,7 -14 -20

 

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

в каком году был самый холодный январь или какой месяц был самым нестабильным за десятилетие.

Для значений, хранящихся в такой таблице, удобно использовать двухиндексные обозначения. Например, H1981,2 обозначает температуру в феврале 1981 г. и т.п. А вся совокупность данных, составляющих таблицу, обозначается так:

(Hi, j), i = 1981.. 1990; j = 1.. 12

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

А значение средней температуры за весь десятилетний периодвычисляется так:

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

массива обозначаются переменными с индексами. Индексы записывают в квадратных скобках после имени массива. Например:

T [ l ], T [ 5 ], T [ i ], H [ 1981,9 ], H [ i, j ] и т.п.

Массив, хранящий линейную таблицу, называется одномерным, прямоугольную таблицу — двумерным. В программах могут использоваться массивы и большей размерности. Тип элементов массива называется его базовым типом. Очевидно, что для рассмотренных массивов температур базовым типом является вещественный (Real).

Описание массивов. Переменная регулярного типа описывается в разделе описания переменных в следующей форме:

Var <идентификатор>: Array [<тип индекса>] Of <тип компонент>

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

Var T: Array [1.. 12] Of Real;

Описание массива определяет, во-первых, размещение массива в памяти, во-вторых, правила его дальнейшего употребления в программе. Последовательные элементы массива располагаются в последовательных ячейках памяти (Т [ 1 ], Т [2 ] и т.д.), причем значения индекса не должны выходить из диапазона 1... 12. В качестве индекса может употребляться любое выражение соответствующего типа. Например, T[i+j ], T[m div 2].

Тип индекса может быть любым скалярным порядковым типом, кроме integer. Например, в программе могут присутствовать следующие описания:

Var Cod: Array [Char]Of 1..100;

L: Array [Boolean] Of Char;

В такой программе допустимы следующие обозначения элементов массивов:

cod [ 'x' ]; L[true]; cod[chr (65)]; L[a>0]

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

Type Index=(А,В,С,D);

Var Class_10: Array [Index] Of Byte;

И если, например, элемент ciass_10[A] равен 35, то это означает, что в 10«А» классе 35 чел. Такое индексирование улучшает наглядность программы. Часто структурированному типу присваивается имя в разделе типов, которое затем используется в разделе описания переменных.

Type Masl =Array [1..100] Of Integer;

Mas2 =Array [-10..10] Of Char;

Var Num: Mas1; Sim: Mas2;

До сих пор речь шла об одномерных массивах, в которых типы элементов скалярные.

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

 

Var H: Array [1981..1990] Of Array[1..12] Of Real;

 

Вот примеры обозначения некоторых элементов этого массива:

 

Н[1981][1]; Н[1985][10]; Н[1990][12]

 

Однако чаще употребляется другая, эквивалентная форма обозначения элементов двумерного массива:

Н[1981,1]; Н[1985,10]; Н[1990,12]

 

Переменная Н [1981] обозначает всю первую строку таблицы, т.е. весь массив температур за

1981 г.

Другим вариантом, эквивалентным приведенному выше описанию, является следующий:

 

Type Month=Array[l..12] Of Real;

Year=Array [1981..1990] Of Month;

Var H: Year;

Наиболее краткий вариант описания данного массива такой:

 

Var H: Array[1981..1990,1..12] Of Real;

Продолжая по аналогии, можно определить трехмерный массив как одномерный массив, у которого элементами являются двумерные массивы. Вот пример описания трехмерного массива:

Var A: Array[1..10,1..20,1..30] Of Integer;

Это массив, состоящий из 10*20*30 = 6000 целых чисел и занимающий в памяти 6000*2 = 12000 байт. В Паскале нет ограничения сверху на размерность массива. Однако в каждой конкретной реализации Паскаля ограничивается объем памяти, выделяемый

под массивы. В Турбо Паскале это ограничение составляет 64 килобайта.

По аналогии с математикой одномерные числовые массивы часто называют векторами, а двумерные — матрицами.

В Паскале не допускается употребление динамических массивов, т. е. таких, размер которых определяется в процессе выполнения. Изменение размеров массива происходит через изменение в тексте программы и повторную компиляцию. Для упрощения таких

изменений удобно определять индексные параметры в разделе констант:

 

Const Imax=10; Jmax=20;

Var Mas: Array[1..Imax,1..Jmax] Of Integer;

 

Теперь для изменения размеров массива Mas и всех операторов

программы, связанных с этими размерами, достаточно отредактировать

только одну строку в программе — раздел констант.

Действия над массивом как единым целым. Такие действия допустимы лишь в двух случаях:

• присваивание значений одного массива другому;

• операции отношения «равно», «не равно».

В обоих случаях массивы должны иметь одинаковые типы (тип индексов и тип элементов). Пример:

 

Var P,Q: Array[l..5,1..10] Of Real;

 

При выполнении операции присваивания Р: =Q все элементы массива Р станут равны соответствующим элементам массива Q.

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

можно делать так:

 

Н[1989]:=Н[1981]

А если нужно поменять местами значения этих строк, то это делается через третью переменную того же типа:

 

Р:=Н[1989];Н[1989]:=Н[1981];Н[1981]:=Р;

 

где Р описана так:

 

Var P: Array [1..12] Of Real;

 

Обработка массивов в программах производится покомпонентно. Вот примеры ввода значений в массивы:

For I:=l To 12 Do

ReadLn(T[I]);

For I:=l To IMax Do

For J:=l To JMax Do

ReadLn(Mas[I,J]);

 

Здесь каждое следующее значение будет вводиться с новой строки. Для построчного ввода используется оператор Read. Аналогично в цикле по индексной переменной организуется

вывод значений массива. Например:

For I:=l То 12 Do Write(T[I]:8:4);

Следующий фрагмент программы организует построчный вывод

матрицы на экран:

For I:=l To IMax Do




Поделиться с друзьями:


Дата добавления: 2014-10-17; Просмотров: 627; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.065 сек.