Моделирование популяции животных. Массивы. Язык программирования Pascal Массивы
Скачать 416.5 Kb.
|
Язык программирования Pascal МассивыМассивыМассив – поименованный набор однотипных элементов, каждый из которых имеет свой номер, (индекс). Если индексов несколько, то массив многомерный). Особенности:
весь массив имеет одно имя все элементы расположены в памяти рядом Примеры: список учеников в классе квартиры в доме школы в городе данные о температуре воздуха за год Структура массиваB Одномерный массив А[i] типа real из 9 элементов Двумерный массив В[i,j] типа integer из 4 строк и 5 колонок. Элемент массива В[2,4]=34
Номер строки Номер столбца Объявление массивовЗачем объявлять?
выделить место в памяти ЭВМ Объявление массива позволяет правильно оперировать с данными и резервировать место для хранения данных в памяти. Объявление массива целых чисел Массив – поименованный набор однотипных элементов, каждый из которых имеет свой номер, (индекс). Если индексов несколько, то массив многомерный).Массив описывают в секции VAR var A : array[ 1 .. 5 ] of integer ; имя начальный индекс конечный индекс тип Const N=12; var A: array[1.. N] of integer; Описание через константу Объявление массивовМассивы других типов: var X, Y: array [1..10] of real; C: array [1..20] of char; Другой диапазон индексов: var Q: array [0..9] of real; C: array [-5..13] of char; Индексы других типов: var A: array ['A'..'Z'] of real; B: array [False..True] of integer; D: array ['a'..'z',w2..w4] of string; A['C'] := 3.14259*A['B']; B[False] := B[False] + 1; Что нельзя делать?Нельзя в массивы целого типа вводить вещественные значения var a: array[1..10] of integer; ... A[5] := 4.5; Нельзя использовать индексы отсутствующие в перечислениях var a: array ['z'..‘с'] of integer; ... A['B'] := 15; Нельзя выходить за пределы индексов указанные в описании var a: array [0..9] of integer; ... A[10] := 'X'; Операции с массивамиВыполняются в циклах Объявление const N = 5; var a: array[1..N] of integer; i: integer; Ввод данных с клавиатуры for i:=1 to N do begin write('a[', i, ']='); read ( a[i] ); end; Данные обрабатывают поэлементно for i:=1 to N do a[i]:=a[i]*2; Вывод данных на дисплей writeln('Массив A:'); for i:=1 to N do write(a[i]:4); a[1] = a[2] = a[3] = a[4] = a[5] = 5 12 34 56 13 a[1] = a[2] = a[3] = a[4] = a[5] = 10 24 68 112 26 10 24 68 112 26 for i:=1 to N do writeln (‘a[‘,I,’]=‘,a[i]:4); Что будет на экране? Решение задач1. Определить среднее арифметическое массива из пяти чисел. Предусмотреть, что изменение количества чисел должно менять только секцию описаний. program mass1; const n=5; var i:integer; a: array [1..n] of real; sr:real; begin for i:=1 to n do begin write ('введите а[',i,']='); readln (a[i]); end; Sr:=0; for i:=1 to n do sr:= sr+a[i]; sr:=sr/n; for i:=1 to n do writeln ('а[',i,']=',a[i]); writeln('среднее арифметическое sr=',sr); end. Решение задач2. В массиве из пяти элементов найти минимальный элемент и его номер. Изменение количества чисел должно менять только секцию описаний program mass2; const n=5; var i,j:integer; a: array [1..n] of real; min:real; begin for i:=1 to n do begin write (‘а[',i,']='); readln (a[i]); end; min:=a[1]; for i:=1 to n do if a[i]<=min then begin min:=a[i]; j:=i; end; for i:=1 to n do writeln ('à[',i,']=',a[i]); writeln('min=',min,' ¹min=',j); end. Задание на самоподготовкуЗаполнить массив случайными целыми числами из интервала от -7 до 25. Дан целочисленный массив, c числом элементов N, вывести все его нечетные элементы в начиная с конца и их сумму. Написать программу, которая вычисляет, сколько раз введенное с клавиатуры число встречается в массиве. Написать программу, которая проверяет, есть ли во введенном с клавиатуры массиве элементы с одинаковыми значением. const n = 100; var a: array[1..n] of integer; sum, pr, x : real; i,sov: integer; begin for i := 1 to n do a[i]:=Trunc(random*(9-2+1))+2; for i := 1 to n do writeln ('a[',i,']=',a[i]); Одномерный массивСуммирование (произведение) элементов. Поиск в массиве максимального (минимального) элементов и их индексов. Поиск совпадений. Сортировка массива по убыванию и возрастанию. Одномерный массив суммированиеСоздать массив 100 целых случайных чисел из интервала [2;9]. Найти: количество совпадений с числом введенным с клавиатуры; сумму чисел кратных трем; произведение всех чисел массива. const n = 100; var a: array[1..n] of integer; sum, pr, x : real; i,sov: integer; begin for i := 1 to n do a[i]:=Trunc(random*(9-2+1))+2; for i := 1 to n do writeln ('a[',i,']=',a[i]); writeln ('введите число для поиска'); read (x); sov:=0; for i := 1 to n do if x=a[i] then sov:=sov+1; sum := 0; for i := 1 to n do if a[i] mod 3 = 0 then sum := sum + a[i]; pr := 1; for i := 1 to n do pr := pr * a[i]; writeln('Число совпадений: ', sov); writeln('Сумма элементов: ', sum:10:2); writeln('Произведение элементов: ', pr:20:2); end. Двумерный массивМассив – набор элементов одного типа, имеющих общее имя, и разные номера (индексы). Массив с двумя индексами называют двухмерным. Моделью двумерного массива является прямоугольная таблица элементов - матрица. Номер элемента состоит из двух чисел – номера строки, и номера столбца. Матрица 3х3 элемента Главная диагональ Обращение к элементам массива имеет вид: А [ i , j ]. Это означает, что мы хотим получить элемент, расположенный в i -й строке и j -м столбце. Описание двумерного массиваОписание матрицы в разделе var аналогично описанию одномерного массива, только необходимо указывать диапазон изменения столбцов и строк. Const n=10; m=12; Var a:array [1..n,1..m] of integer; Или Var B:array [1..10,1..12] of real; Ввод двумерного массива Паскаля с клавиатурыWriteln (‘Введите матрицу построчно’); For i:=1 to n do For j:= 1 to m do Begin Write (‘a[‘,i,’,’,j,’]=‘); Readln (a[i,j]); End; Ввод двумерного массива из генератора случайных чиселRandomize; For i:=1 to n do Begin For j:=1 to m do Begin a[i,j]:=random(11)+2; write(a[i,j],’ ‘); End; Writeln; End; Массив случайных целых чисел из интервала [2,12] Суммирование элементов массиваСумма всех элементов: sum:=0; for i:=1 to n do for j:=1 to m do sum:=sum+a[i,j]; writеln('Сумма=',sum); Сумма элементов главной диагонали (x[1,1], x[2,2] и т.д.): sum:=0; for i:=1 to n do sum:=sum+a[i,i]; writеln ('Сумма=',sum); Cумма по столбцам с записью в массив zum[1..m]: for j:=1 to m do zum[j]:=0; for i:=1 to n do zum[j]:=zum[j]+x[i,j]; for j:=1 to m do write(zum[j]:4); Максимальный (минимальный) элемент массиваmax:=a[1,1]; min:=a[1,1]; for i:=1 to n do for j:=1 to m do begin if a[i,j]>max then max:=a[i,j]; if a[i,j] Решение задачВывести максимальные и минимальные элементы в каждом столбце двумерного массива program mass2x; Const n=10; m=12; Var a:array [1..n,1..m] of integer; i,j,min,max: integer; begin For i:=1 to n do Begin For j:=1 to m do Begin a[i,j]:=random(11)+2; write(a[i,j]:6,' '); End; Writeln; End; Writeln; For j:=1 to m do Begin min:=a[1,j]; max:=a[1,j]; For i:=1 to n do Begin if min>a[i,j] then min:=a[i,j]; if max then max:=a[i,j]; write (a[i,j]:6,' '); End; writeln(j,' столбец min=',min,' max=',max) ; End; Writeln(‘----------------------------------------------------’); end. Задание на самоподготовкуНайти произведение нечетных элементов двумерного массива целых чисел. Найти сумму элементов двумерного массива, находящихся ниже главной диагонали. Найти максимальный элемент дополнительной диагонали квадратной матрицы. Дополнительная диагональ Главная диагональ Генератор случайных чиселRandomize — это процедура которая используется в Паскаль для включения генератора случайных чисел. Функция Random определяет диапазон случайных чисел. Пример:
Пример : 1) A может равняться числам от 0 до 9, не 10!!!! 2) вывести числа от 0 до 1
от -23 до 5 складываем 23 и 5 без учета знаков и прибавляем 1(всегда) , у нас будет 29. var a : integer; --------------- a := random(29); (это вернет нам числа от 0 до 28) 4) 5 до 29 = 29 - 5 + 1 = random(25) + 5 5) -1 до 13 = 13 + 1 + 1 = random(15) - 1 x := random(max-min+1)+min; от -5 до -10, random(-5-(-10)+1)+(-10) var a : integer; begin randomize; // пишем до использование random(), чтобы числа не повторялись a := random(10); writeln(a); readln; end; { Array1. Дано целое число N (> 0). Сформировать и вывести целочисленный массив размера N, содержащий N первых положительных нечетных чисел: 1, 3, 5, … .} program Array1; const MaxN=10; var i, n:integer; a: array [1..MaxN] of integer; begin readln(n); for i:=1 to n do a[i]:=2*i-1; for i:=1 to n do write(a[i]:2); writeln; end. {Array2. Сформировать и вывести массив размера N, содержащий степени двойки от первой до N-й} program Array2; var a: array of LongInt; i, n: LongInt; begin ReadLn (n); SetLength(a, n); for i := 0 to n - 1 do begin a[i] := round(exp(ln(2)*(i+1))); Write (a[i]:5); end; WriteLn; ReadLn; end. procedure SetLength(var s: string; n: integer); Устанавливает длину строки s равной n {Array2. Сформировать и вывести массив размера N, содержащий N первых членов данной прогрессии: A, A+D, A+2*D, A+3*D+ ...} program Array3; var a: array of real; i, n: integer; d: real; begin WriteLn ('Количество членов прогрессии:'); ReadLn (n); SetLength(a, n); WriteLn('Первый член прогрессии:'); ReadLn (a[0]); WriteLn ('Разность прогрессии:'); ReadLn (d); WriteLn ('Прогрессия: '); Write (a[0]:5:2, ' '); for i := 1 to n - 1 do begin a[i] := a[0] + i*d; Write (a[i]:5:2, ' '); end; WriteLn; ReadLn; end. procedure SetLength(var s: string; n: integer); Устанавливает длину строки s равной n |