Банк рефератов содержит более 364 тысяч рефератов, курсовых и дипломных работ, шпаргалок и докладов по различным дисциплинам: истории, психологии, экономике, менеджменту, философии, праву, экологии. А также изложения, сочинения по литературе, отчеты по практике, топики по английскому.
Полнотекстовый поиск
Всего работ:
364139
Теги названий
Разделы
Авиация и космонавтика (304)
Административное право (123)
Арбитражный процесс (23)
Архитектура (113)
Астрология (4)
Астрономия (4814)
Банковское дело (5227)
Безопасность жизнедеятельности (2616)
Биографии (3423)
Биология (4214)
Биология и химия (1518)
Биржевое дело (68)
Ботаника и сельское хоз-во (2836)
Бухгалтерский учет и аудит (8269)
Валютные отношения (50)
Ветеринария (50)
Военная кафедра (762)
ГДЗ (2)
География (5275)
Геодезия (30)
Геология (1222)
Геополитика (43)
Государство и право (20403)
Гражданское право и процесс (465)
Делопроизводство (19)
Деньги и кредит (108)
ЕГЭ (173)
Естествознание (96)
Журналистика (899)
ЗНО (54)
Зоология (34)
Издательское дело и полиграфия (476)
Инвестиции (106)
Иностранный язык (62791)
Информатика (3562)
Информатика, программирование (6444)
Исторические личности (2165)
История (21319)
История техники (766)
Кибернетика (64)
Коммуникации и связь (3145)
Компьютерные науки (60)
Косметология (17)
Краеведение и этнография (588)
Краткое содержание произведений (1000)
Криминалистика (106)
Криминология (48)
Криптология (3)
Кулинария (1167)
Культура и искусство (8485)
Культурология (537)
Литература : зарубежная (2044)
Литература и русский язык (11657)
Логика (532)
Логистика (21)
Маркетинг (7985)
Математика (3721)
Медицина, здоровье (10549)
Медицинские науки (88)
Международное публичное право (58)
Международное частное право (36)
Международные отношения (2257)
Менеджмент (12491)
Металлургия (91)
Москвоведение (797)
Музыка (1338)
Муниципальное право (24)
Налоги, налогообложение (214)
Наука и техника (1141)
Начертательная геометрия (3)
Оккультизм и уфология (8)
Остальные рефераты (21692)
Педагогика (7850)
Политология (3801)
Право (682)
Право, юриспруденция (2881)
Предпринимательство (475)
Прикладные науки (1)
Промышленность, производство (7100)
Психология (8692)
психология, педагогика (4121)
Радиоэлектроника (443)
Реклама (952)
Религия и мифология (2967)
Риторика (23)
Сексология (748)
Социология (4876)
Статистика (95)
Страхование (107)
Строительные науки (7)
Строительство (2004)
Схемотехника (15)
Таможенная система (663)
Теория государства и права (240)
Теория организации (39)
Теплотехника (25)
Технология (624)
Товароведение (16)
Транспорт (2652)
Трудовое право (136)
Туризм (90)
Уголовное право и процесс (406)
Управление (95)
Управленческие науки (24)
Физика (3462)
Физкультура и спорт (4482)
Философия (7216)
Финансовые науки (4592)
Финансы (5386)
Фотография (3)
Химия (2244)
Хозяйственное право (23)
Цифровые устройства (29)
Экологическое право (35)
Экология (4517)
Экономика (20644)
Экономико-математическое моделирование (666)
Экономическая география (119)
Экономическая теория (2573)
Этика (889)
Юриспруденция (288)
Языковедение (148)
Языкознание, филология (1140)

Реферат: Некоторые алгоритмы обработки массивов

Название: Некоторые алгоритмы обработки массивов
Раздел: Рефераты по информатике
Тип: реферат Добавлен 21:18:28 16 июня 2011 Похожие работы
Просмотров: 51 Комментариев: 13 Оценило: 1 человек Средний балл: 5 Оценка: неизвестно     Скачать

Некоторые алгоритмы

обработки массивов

1 Суммирование двух массивов одинакового размера

2 Суммирование элементов массива

3 Определение числа элементов массива, удовлетворяющих заданному условию

4 Суммирование элементов массива, удовлетворяющих заданному условию

5 Инвертирование массива

6 Формирование массива из элементов другого массива, удовлетворяющих заданному условию

7 Поиск максимального (минимального) элемента в массиве с запоминанием его положения в массиве

8 Поиск заданного элемента в массиве

9 Циклический сдвиг элементов массива

10 Упорядочение Массива

1 Суммирование двух массивов одинакового размера

Задано : массивы A =(a1,a2,...,an) , B =(b1,b2,...,bn).

Сформировать: массив C =(c1,c2,...,cn) , где Сi = Ai+Bi; i=1,2,...,n.

Задача сводится к организации цикла по i и вычислению Ci=Ai+Bi при каждом значении i от 1 до n.

Исходные данные:

N- размер массива;

A, B - массивы слагаемые размером N;

Результат: массив С - размером N;

Вспомогательные переменные: I - индекс - управляющая переменная цикла.

Procedure SUM_MAS (n : integer; A,B :mas; var C : mas);

{ где mas должен быть описан в главной программе в разделе описания типов , например так :

type mas = array[1..100 ] of real ;

тогда это будет процедура для суммирования двух одномерных массивов размером не более 100 элементов }

begin

for i := 1 to n do C[i] := A[i]+B[i];

end;

2 Суммирование эле ментов массива

Задано: массив P = (P1,P2,...,Pn) .

Определить: сумму элементов массива.

Исходные данные:

N - размер массива;

P - массив размером N;

Результат: S - сумма элементов;

Вспомогательная переменная: I - индекс - управляющая переменная цикла.

Procedure SUMMA (n : integer; A :mas; var S : real );

{ процедура для суммирования элементов одномерного массива }

begin S:=0; { обнуление переменной под сумму }

for i := 1 to n do S := S+P[i]

end;

3 Определ ение числа элементов массива, удовлетворяющих заданному условию

Задано: массив P = (P1,P2,...,Pn); T - заданное число.

Определить: сколько элементов удовлетворяет заданному условию, например Pi > T .

Исходные данные:

N - размер массива;

P - массив размером N;

T - заданное значение, с которым сравниваются элементы массива.

Результат: K - число элементов массива P, удовлетворяющих условию.

Вспомогательная переменная: I- индекс - управляющая переменная цикла.

Procedure USLOVIE ( n : integer; P :mas; T: real; var K : integer);

{процедура определения числа элементов, удовлетворяющих условию}

begin

k := 0; { обнуление переменной под счетчик чисел }

for i := 1 to n do if P[ i ] > T then k := k+1

end;

4 Суммирова ние элементов массива, удовлетворяющих заданному условию

Задано: массив P = (P1,P2,...,Pn); T - заданное число.

Определить: сумму элементов массива P, удовлетворяющих заданному условию, например Pi > T .

Исходные данные:

N - размер массива;

P - массив размером N;

T - заданное значение, с которым сравниваются элементы массива;

Результат: S - сумма элементов массива P, удовлетворяющих условию.

Вспомогательная переменная : I - индекс - управляющая переменная цикла.

Procedure SUM_USLOV ( n : integer; P :mas; T: real; var S : real);

{процедура определения суммы элементов, удовлетворяющих условию}

begin S := 0; {обнуление переменной под сумму элементов}

for i := 1 to n do if P [ i ] > T then S := S+1

end;

5 Инв ертирование массива

Задано: массив C=(c1,c2,...,cn).

Требуется: изменить порядок следования элементов массива C на обратный, используя одну вспомогательную переменную.

Исходные данные:

N - размер массива;

C - массив размером N;

Результат:

C - инвертированный массив;

Вспомогательные переменные:

I -индекс, управляющая переменная цикла;

M=n/2 - вычисляется до входа в цикл для уменьшения объема вычислений; P - используется при перестановке двух элементов массива.

Procedure INVER_MAS ( n : integer; C :mas; var C : mas);

Var m : integer; p : real; { локальные переменные }

begin m := n div 2 ; { целочисленное деление }

for i := 1 to m do

begin p := C[ i ]; C[i] := C[N-i+1]; C[N-i+1] := p end;

end;

6 Формирование массива из элементов другого массива, удовлетворяющих заданному условию

Задано: массив A=(a1,a2,...,an), T - заданное число.

Сформировать: массив B=(b1,b2,...,bn), состоящий из элементов массива, удовлетворяющих условию Ai>T.

Заметим, т .к. индексы элементов массивов A и B не совпадают (не все элементы массива Ai>T), то для обозначения индексов массива B должна быть предусмотрена другая переменная.

Исходные данные:

N - размер массива;

A - массив размером N;

T - заданное значение;

Результат:

B - массив размером не больше N;

Y - число элементов массива B;

Вспомогательная переменная: I - индекс - управляющая переменная цикла.

Procedure MAS_NEW (n:integer;T:real;A:mas;var B: mas; var Y: byte);

{ где mas должен быть описан в главной программе в разделе описания типов , например так :

type mas = array[1..100 ] of real ;

тогда это будет процедура для суммирования двух одномерных массивов размером не более 100 элементов }

{ процедура включения в новый массив элементов, удовлетворяющих условию }

begin Y := 0; { обнуление ячейки под счетчик элементов массива В }

for i := 1 to n do

If A[ i ] > T then begin Y := Y+1; B[ Y ] := A[ i ] end;

end;

7 Поиск максимального (минимального) элемента в массиве с запоминанием его положения в массиве

Задано : массив A=(a1,a2,...,an).

Найти: max (min) элемент массива A и его индекс.

Исходные данные:

N - размер массива;

A - массив размером N;

Результат:

A_max максимальный элемент массива A;

K - его индекс.

Вспомогательная переменная: I - индекс управляющая переменная цикла.

Procedure MAX_MAS1(n:integer; A :mas; var A_max :real; var K byte);

{ процедура поиска максимального элемента массива и его номера }

begin A_max := A[1]; K := 1;

for i := 2 to n do

If A_max<A[i] then begin K := i; A_max := A[i] end;

end;

Примечание: Если в массиве несколько max элементов (имеют одно и то же значение), то в K будет запоминаться первый из них, а чтобы запоминался индекс последнего нужно заменить условие на A_max<=A(I). Поиск минимального элемента аналогичная процедура.

8 Поиск заданного элемента в массиве

Задано: массив P=(p1,p2,...pn); элемент L (массив может быть как числовым так и символьным.

Найти: Есть ли в массиве P, элемент равный L. Результат присвоить символьной переменной.

Исходные данные:

N - размер массива;

P - массив размером N;

L - значение, которое ищется в массиве;

Результат: R - имеет значение "элемент, равный L есть" или "элемента, равного L нет" в зависимости от результата поиска;

Вспомогательная переменная: I - индекс управляющая переменная цикла.

Procedure POISK ( n:integer; P :mas; L :integer; var R :string);

{ процедура поиска заданного значения среди элементов массива }

Label m ;

begin

R :=" элемента равного L в массиве нет " ;

for i := 1 to n do

If P[i] = L then

begin R := " элемент , равный L есть "; Goto m end;

m: end;

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

9 Циклический сдвиг элементов массива

Задано: массив A=(a1,a2,...,an); N - размер массива; m – число позиций, на которые надо сдвинуть массив вправо ( влево ).

Сформировать: сдвинутый массив, например : исходный массив A=(a1,a2,a3,a4,a5,), а сдвинутый вправо на 2 позиции A=(a4,a5,a1,a2,a3).

Исходные данные:

N - размер массива;

A - массив размером N;

M - число позиций сдвига;

Результат: A - массив, циклически сдвинутый на M позиций вправо;

Вспомогательные переменные:

I - индекс - управляющая переменная цикла;

P - массив размером не менее N (вариант 1) для временного хранения "хвоста" массива;

P - переменная (вариант 2) для временного хранения элемента массива A; Y - управляющая переменная внутреннего цикла (вариант 2).

Вариант 1: "хвост" массива пересылается во вспомогательный массив, остальные элементы перемещаются вправо на M позиций. Порядок перемещения обратный, прямой привел бы к искажениям массива. Далее в первые элементы массива A пересылаются элементы вспомогательного массива. Эта процедура повторяется Мраз.

Procedure SDVIG_VAR1( n, m : integer; A : mas; var A : mas ;);

{ процедура сдвига элементов массива на m позиций по первому варианту }

Var P : mas;

begin

for i := 1 to m do

P[ i ] := A [ n - m + i ];

for i := n - m downto 1 do

A [ i+m ] := A[ i ];

for i := 1 to m do A [ i ] := P [ i ] ;

end;

Вариант 2. Во вспомогательную переменную каждый раз пересылается последний элемент массива А, затем все элементы сдвигаются вправо на одну позицию (в обратном порядке) и на место первого элемента помещается содержимое вспомогательной переменной.

Procedure SDVIG_VAR2( n, m : integer; A : mas; var A : mas ;);

{ где mas должен быть описан в главной программе, см 7.1.}

{ сдвиг элементов массива на m позиций по второму варианту}

Var P : real;

begin

for i := 1 to m do

begin P := A [ n ] ;

for y := n downto 2 do A[ y ] := A [ y-1] ;

A [1] := P ;

end

end;

При сравнении двух вариантов сдвига элементов массива на m позиций вправо можно отметить, что в варианте 1 потребуется больше памяти, а в варианте 2 - больше затрат времени.

10 Упорядочение Массива

Задано: массив А=(a1,a2,...an).

Требуется: расположить элементы массива А в порядке возрастания (убывания).

Существует много различных методов. Рассмотрим один из них, основанный на поиске минимального (максимального) элемента массива или его части.

Исходные данные:

N - размер массива;

A - массив размером N;

Результат:

А - массив, упорядоченный по возрастанию;

Вспомогательные переменные:

P - переменная для хранения промежуточного значения минимального элемента;

K - индекс минимального элемента;

I - индекс элемента упорядоченного массива (управляющая переменная внешнего цикла);

J - индекс элемента части массива, в котором ищется минимальный элемент (управляющая переменная внутреннего цикла).

Вначале найдем минимальный элемент массива и поменяем его местами с первым элементом, затем определим минимальный элемент из оставшихся элементов (кроме первого) и поменяем его местами со вторым элементом.

Procedure SORTIROV (n : integer; A :mas; var A : mas; var K : integer);

{ где mas должен быть описан в главной программе, см 7.1.}

{ процедура упорядочивания одномерного массива по возрастанию}

Var p : real ; i, j : integer ; { локальные переменные }

begin

for i := 1 to n - 1 do

begin P := A [ i ] ; k := i ;

for j := i + 1 to n do

If A [ i ] < P then begin P := A [ i ] ; k := j end;

A [ k ] := A [ i ] ; A [ i ] := P

end

end;

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

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

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

Пример 1.

Упорядочить по возрастанию одномерный массив A размером N.

program primer_1;

const N = 5;

var A : array [ 1..N ] of real;

p : real;

i, j, k, g : integer;

begin

writeln('упорядочение массива по возрастанию');

writeln('введите элементы массива через пробел в конце ENTER ');

for i := 1 to N do read (A [ i ] ); writeln;

{ второй вариант ввода одномерного массива }

{ for i := 1 to N do

begin write (' введите A [', i:2 ,' ] =' ) ; readln ( A[i] ); end;}

{ для упорядочивания массива задействуем промежуточные

переменные p - для запоминания минимального значения массива,

k - для запоминания его местонахождения }

for i := 1 to N - 1 do

begin

p := a [ i ] ; k := i ;

for j := i + 1 to N do

if A [ j ] < p then begin p := A[ j ]; k := j ; end;

A [ k ] := A [ i ] ; A [ i ] := p ;

end;

for i := 1 to N do

begin write( ' A [ i ] ='); writeln( A [ i ] : 8 : 5 ); end;

end.

В следующем примере представлен более удобный вариант оформления программ, где самостоятельные части работы вынесены в процедуры. Главная программа ( вызывающая ) получается тогда очень короткой, а отладка таких программ значительно проще.

Пример 2.

Программа для умножения сцепленных матриц A = ?aik? размера m x n и B = ?bik? размера r x s ( матрицы называются сцепленными, если число столбцов первой матрицы равно числу строк второй ). Произведение AB двух сцепленных матриц есть матрица C=?cik? размера m x s, где cik = ? aijbjk.

program primer_2;

uses CRT;

const n = 3; m = 2; r = 3; s = 3;

type massiv = array [1..10,1..10] of real;

var a,b,c : massiv;

sum : real;

i, j, k : integer;

ch : char;

procedure VVOD_2(n,m:integer;ch:char;var a:massiv);

{ процедура ввода двумерной матрицы построчно}

begin

writeln( ' введите элементы массива ');

for i := 1 to n do

begin

for j := 1 to m do read ( A [ i , j ] );

writeln; { для перехода на новую строку}

end;

end;

procedure PRINT_MAS(n,m:integer;ch:char;a:massiv);

{ печать матрицы построчно }

{ n,m - размер матрицы }

{ ch - название матрицы , для обозначения при выводе }

begin

writeln(' Элементы массива ',ch);

for i := 1 to n do

begin

for j := 1 to m do write(a [ i , j ] : 8 : 2);

writeln; { для перехода на новую строку }

end;

end;

begin {---------- main ------------------}

{ В рассматриваемом примере размеры матриц A, B, C заданы с помощью

констант. Заметим, что лучше это сделать вводом с клавиатуры или чтени-

ем данных из файла }

VVOD_2(m,n,'A',a); { вызов процедуры VVOD_2 для ввода матрицы A }

VVOD_2(r,s,'B',b); { вызов процедуры VVOD_2 для ввода матрицы B }

{ формирование матрицы C равной произведению матриц A*B }

for i := 1 to m do

for k := 1 to s do

begin

sum := 0; { обнуление переменной для вычисления суммы }

for j := 1 to N do sum := sum + a[ i , j ] * b [ j , k ] ;

c[ i , k ] := sum;

end;

{ вывод на экран исходных данных и результатов }

PRINT_MAS(m,n,'A',a); { m,n - размерыматрицы A }

PRINT_MAS(r,s,'B',b); { r,s - размерыматрицы B }

PRINT_MAS(m,s,'C',c); { m,s - размерыматрицы C }

end.

Оценить/Добавить комментарий
Имя
Оценка
Комментарии:
Хватит париться. На сайте FAST-REFERAT.RU вам сделают любой реферат, курсовую или дипломную. Сам пользуюсь, и вам советую!
Никита15:17:45 05 ноября 2021
.
.15:17:44 05 ноября 2021
.
.15:17:42 05 ноября 2021
.
.15:17:40 05 ноября 2021
.
.15:17:37 05 ноября 2021

Смотреть все комментарии (13)
Работы, похожие на Реферат: Некоторые алгоритмы обработки массивов

Назад
Меню
Главная
Рефераты
Благодарности
Опрос
Станете ли вы заказывать работу за деньги, если не найдете ее в Интернете?

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



Результаты(288359)
Комментарии (4165)
Copyright © 2005-2021 HEKIMA.RU [email protected] реклама на сайте