Читайте также:
|
|
Задание на стр. 21, 2 задание на стр 29
Решение некоторых примеров (11занятие)
1.1 Заполнить массив a из n целыхэлементов случайными числами из заданного диапазона [0, m –1].
Для генерации случайных чисел используется стандартная процедура random(m) – датчик случайных чисел (рандомизатор).
program Vect_1;
сonst nmax=10;
type T_El=integer;
vect=array[1..nmax] of T_El;
var a:vect;
n,m:integer;
procedure FillRandom(n:integer; var a:vect; m:integer);
var i:integer;
begin
for i:=1 to n do
a[i]:=random(m)
end;
procedure WriteArr(n:integer; const a:vect);
var i:integer;
begin
for i:=1 to n do
write(a[i],' ');
writeln
end;
begin
write('Введите размер массива ');
read(n);
write('Введите границу диапазона случайных чисел ');
read(m);
FillRandom(n,a,m);
WriteArr(n,a)
end.
1.2 Заполнить массив из n целых чисел числами Фибоначчи.
procedure FillFib(n: integer; var f: vect);
var i: integer;
begin
f[1]:=1; f[2]:=1;
for i:=3 to n do
f[i]:=f[i-1]+f[i-2]
end;
1.3 Дано натуральное число n. Заполнить массив из n элементов значениями, полученными в результате вычисления выражений:
1.4 Заполнить массив a из n элементов простыми числами.
1.5 В массив y поместить таблицу значений функции f(x), вычисленной на отрезке [ a,b ] (a<b) с заданным шагом h.
f(x)=sin(x) / x на отрезке [ 2.21, ] с шагом h = 0.1
Метод решения заключается в следующем:
1) определить размер массива n = (b – a) / h + 1;
2) для всех i от 1 до n (и одновременно для всех x от a до b с шагом h) вычислить y = f(x ).
Табулирование функции представлено в виде процедуры Tabul.
Программа Vect_6 предназначена для табулирования конкретной функции f(x)=sin(x) / x на отрезке [ 2.21, ] с шагом h = 0.1. Вывод значений аргумента и функции в виде таблицы осуществляется процедурой WriteTabl.
program Vect_6;
const nmax = 10;
type T_El=real;
vect=array[1..nmax] of T_El;
func = function(x:real):real;
var n:integer;
y:vect;
function f(x:real):real;
begin f:=sin(x)/x end;
procedure Tabul(a,b,h:real; f:func;
var n:integer; var y:vect);
var i:integer;
x:real;
begin
n:=trunc((b-a)/h)+1;
if n>nmax then n:=nmax;
x:=a;
for i:=1 to n do
begin y[i]:=f(x); x:=x+h end
end;
procedure WriteTabl(n:integer;const y:vect; a,h:real);
var i:integer;
begin
for i:=1 to n do
writeln(a+(i-1)*h:7:2,' ',y[i]:8:4);
end;
begin
Tabul(2.21,pi,0.1,f,n,y);
WriteTabl(n,y,2.21,0.1)
end.
1.6 Заполнить массив a компонентами перечислимого типа, используя в качестве типа компонент и типа индексов заданные перечислимые типы. Вывести полученный массив. Тип индексов – страны Европы, тип элементов – столицы этих стран. Например,
type country = (Austria, Bulgaria, Greece, Italy, Norway, Russia, France);
capital = (Vienna, Sofia, Athens, Rome, Oslo, Moscow, Paris);
Cvect = array [country ] of capital;
В задаче используются следующие перечислимые типы:
– тип country содержит названия стран Европы,
– тип capital содержит столицы этих стран.
Заполнение массива реализуется процедурой FillCapital1.
Так как выводить (и вводить) значения перечислимого типа нельзя, вывод элементов массива заменяется выводом соответствующего текста.
program Vect_7;
type country = (Austria, Bulgaria, Greece, Italy, Norway, Russia,
France);
capital = (Vienna, Sofia, Athens, Rome, Oslo, Moscow, Paris);
Cvect = array [country ] of capital;
var a: Cvect;
i: country;
procedure FillCapital1 (var a: Cvect);
var i: country;
x: capital;
begin
i:= Austria;
x:= Vienna;
a[i]:=x;
while i< France do
begin
i:=succ(i); { следующая страна }
x:=succ(x); { следующая столица }
a[i]:=x
end
end;
begin
FillCapital1(a);
writeln (' страна - столица');
for i:= Austria to France do
case i of
Austria: writeln(' Вена - Австрия ');
Bulgaria: writeln(' София – Болгария ');
Greece: writeln(' Афины - Греция ');
Italy: writeln(' Рим – Италия ');
Norway: writeln(' Осло - Норвегия');
Russia: writeln(' Москва - Россия ');
France: writeln(' Париж – Франция ');
end
end.
Второй вариант процедуры заполнения массива FillCapital2использует преобразование типа (так называемое автоопределённое преобразование типа): указывается идентификатор типа, а за ним в круглых скобках переменная (или выражение) исходного типа.
procedure FillCapital2 (var a: Cvect);
var i,m,n: country;
begin
m:= Austria;
n:= France;
for i:= m to n do
a[i]:= capital(ord(i))
end;
1.7 Сгенерировать массив случайных букв в диапазоне от 'A' до 'Z'.
Это можно сделать, добавляя к случайному числу в диапазоне от 0 до 25 порядковый номер буквы А и используя затем этот новый порядковый номер для получения случайной буквы.
const nmax=10;
type T_El=char;
vect=array[1..nmax] of T_El;
procedure FillRandChar(n:integer;var a:vect);
var i:integer;
begin
for i:=1 to n do
a[i]:=chr(ord('A') + random(25))
end;
1.8 Заполнить массив a из n вещественныхэлементов случайными числами из диапазона [0, 1).
program Vect_3;
сonst nmax=10;
type T_El=real;
vect=array[1..nmax] of T_El;
var a:vect;
n,m:integer;
procedure FillRandom1(n: integer; var a: vect);
var i: integer;
begin
for i:=1 to n do a[i]:=random
end;
procedure WriteArr(n:integer; const a:vect);
var i:integer;
begin
for i:=1 to n do
write(a[i]:7:3,' ');
writeln
end;
begin
write('Введите размер массива ');
read(n);
FillRandom1(n,a);
WriteArr(n,a)
end.
----------------------------------------------------------------------------------------
2.1 Даны натуральное число n,целое число x и массив a из n целых чисел. Найти номер элемента с заданным значением x в массиве a. Если такого элемента в массиве нет, то результату присвоить значение n +1.
2.2 Даны натуральное число n и упорядоченный по неубыванию массив a из n целыхчисел. Найти в массиве индекс элемента с заданным значением x. Если элемент со значением x в массиве отсутствует, результатом считать значение n +1.
2.3 Дан целочисленный массив a из n элементов. Найти количество различных элементов в массиве.
Для решения задачи используется поиск с барьером элемента в части массива a [1.. i -1], i = 2, 3, …, n. Поиск ведётся с начала массива. Элементы
(j = 1, 2, …) сравниваются со значением барьерного элемента до первого совпадения значений.
Алгоритм описан в виде функции Count.
function Count (n:integer; const a:vect):integer;
var i, j, k: integer;
x: integer;
begin
k:=1;
for i:=2 to n do
begin
j:=1; x:=a[i];
while x<>a[j] do j:=j+1;
if j=i then k:=k+1
end;
Count:=k
end;
Дата добавления: 2015-10-30; просмотров: 70 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
ПОЛОЖЕНИЕ 21. | | | Of presidents and kings |