Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архитектура ЭВМ.docx
Скачиваний:
0
Добавлен:
23.09.2019
Размер:
376.65 Кб
Скачать

6. Алгоритм поиска максимального и минимального элементов в векторе.

Задан вектор b:array [1..n] of integer. Ищем минимальный элемент. Запоминаем значение первого элемента вектора в переменной m: m:=b[1];

Последовательно в цикле просматриваем элементы вектора. Если очередной элемент вектора меньше m, то запоминаем его в m: if b[i]< m then m:=b[i]

m:=b[1];

for i:=2 to n do

if b[i]<m then m:=b[i];

Пример. Вектор 1 -2 -3 5

0. m=1

  1. i=2 m=-2

  2. i=3 m=-3

  3. i=4 m=-3

  4. i=4 m=-3

7. Алгоритм поиска максимального и минимального элемента в матрице.

8. Алгоритм поиска в множестве точек точки, наиболее близко расположенной к началу координат.

Дана матрица вещественных чисел X[1..n,1..2] – координаты n точек на плоскости. Определите, какая из них ближайшая к началу координат. Напечатайте ее индекс

Решение

const n=3;

var x:array [1..n,1..2] of real;

i,j,p:integer;

min,r:real;

begin

for i:=1 to n do

for j:=1 to 2 do

x[i,j]:=StrToInt(InputBox('Ввод','x['+IntToStr(i)+', '+IntToStr(j)+']',''));

r:=sqrt(sqr(x[1,1])+sqr(x[1,2]));

min:=r;

p:=1;

for i:=1 to n do

begin

r:=sqrt(sqr(x[i,1])+sqr(x[i,2]));

if r<min then

begin

min:=r;

p:=i;

end;

end;

showMessage('Ближайшая точка к началу координат: '+IntToStr(p));

end;

end.

Множество n точек на плоскости задается, как массив xy[1..n,1..2]

9. Алгоритм вычисления значения многочлена по схеме Горнера.

В векторе S[0..n] заданы коэффициенты многочлена

Вычислите значение многочлена в точке x.

F = Snxn+Sn-1xn-1+…S1x+S0 (1)

Перепишем (1) следующим образом:

F = S0 +S1*x1+ S2*x2+…..+ Sn-1*xn-1+ Sn*xn (2)

Вынесем x за скобку и получим (3)

F = S0 +x*(S1+ x*( S2+…..+ x*(Sn-1+ Snx)….)))) (3)

f:= s[n];

for i:=n downto 1 do

f:=f*x+ s[i-1];

Пусть дан многочлен второй степени F= 2 +1*x1+ 3*x2

F= 3

i=2 F= 3*x+ 1

i=1 F= 3*x*x+ 1*x+ 2

10. Алгоритмы перевода числа в систему счисления по основанию 10.

10. Алгоритм перевода числа из двоичной, восьмеричной, шестнадцатеричной систем счисления в систему счисления по основанию 10. Представление числа задается в виде строки S. Пусть Х-основание 2 или 8.

l:=length(s);

f:= StrToInt(s[1]);

for i:=1 to l-1 do

f:=f*x+ StrToInt(s[i+1]);

Алгоритм перевода числа из двоичной, восьмеричной, в систему счисления по основанию 10.

Представление числа задается в виде строки S. Пусть Х-основание 16.

l:=length(s);

if (s[1]>='0') and (s[1]<='9') then f:= StrToInt(s[1])

else f:=ord(s[1])-55;//Код A-65, B-66, C-67, D-68,…

for i:=1 to l-1 do

if (s[i+1]>='0') and (s[i+1]<='9') then f:=f*x+ StrToInt(s[i+1])

else f:=f*x+ord(s[i+1])-55;

11. Алгоритм перевода числа из системы счисления по основанию 10 в двоичную, восьмеричную, шестнадцатеричную системы

Алгоритм перевода из 10 системы счисления в 2-ичную осуществляется последовательным нахождением остатков от деления числа на 2 нацело.

Пусть,

k = bn*2n+ bn-1*2n-1+…..+ b2*22+ b1*21+ b0

Будем последовательно находить остатки:

1. b0 = k mod 2

Разделим k нацело на 2: k = k div 2

и станет равным bn*2n-1+ bn-1*2n-2+…..+ b2*21+ b1

2. b1 = b mod 2

Разделим k нацело на 2: k = k div 2

и станет равным bn*2n-2+ bn-1*2n-3+…..+ b3*21+ b2

3. b2 = k mod 2

Разделим k нацело на 2: k = k div 2

n. bn-1 = k mod 2

Разделим k нацело на 2: k = k div 2

После шага n k станет равным bn

n+1. bn = k mod 2

Разделим k нацело на 2: k = k div 2 и станет равным 0

i:=0;

while k>0 do

begin

bi := k mod 2;

k = k div 2;i:=i+1;

end;

Пусть k=10

1. b0 = b mod 2 = 0

k = b div 2 = 5

2. b1 = b mod 2 = 1

k = k div 2 = 2

3. b2 = b mod 2 = 0

Разделим k нацело на 2

k = k div 2 = 1

4. b3= b mod 2 = 1

k = k div 2 = 0

Двоичное представление 10: 1010

Перевести в двоичную систему числа 7, 9, 15, 16.

a – исходное число, s – результат, представление в двоичной системе счисления.

s:='';

WHILE a>0 DO

BEGIN

a2:= a mod 2; a := a div 2;

s:= IntToStr(a2)+s

END

END;

Перевод числа в восьмеричную систему – аналогично.

При переводе числа в шестнадцатеричную систему изменяется оператор формирования строки s:

s:='';

WHILE a>0 DO

BEGIN

a2:= a mod 16; a := a div 16;

if a2<10 then s:= IntToStr(a2)+s

else s:= chr(a2+55)+s

END

END;