Действия с одномерными массивами 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Действия с одномерными массивами



условимся, что в векторе а содержится n элементов.

· Вычисление суммы элементов:

s:=0;

for i:=l to n do s:=s+a[i]; { обычное накопление суммы в s }

· Вычисление произведения элементов:

S:=1;

For i:=l to n do s:=s*a[i]; { накопление произведения в s }

· Подсчет количества элементов, удовлетворяющих какому-либо условию. Например, подсчет количества четных чисел в целочисленном массиве:

K:=0;

for i:=l to n do

if a[i] mod 2=0 then k:=k+l; { увеличиваем на 1 счетчик четных }

{ чисел, если число делится на 2 }

· Поиск элемента с заданным значением. Найти элемент — это значит вы­яснить его номер в массиве.

Например, найдем номер первого из элементов массива а, имеющего ну­левое значение. Если таких элементов нет, выведем соответствующее со­общение.

i:=0; { номер элементов массива }

 repeat

i:=i+l;

until(a[i]=0) { нашли } or (i=n) { массив кончился };

if a[i]=0 then writeln ('Номер первого нулевого элемента = ‘,i)

 else writeln ('Таких элементов нет’);

· Поиск максимального элемента и его номера (см. листинг 4.2).

Переменная max хранит значение максимума, k — его номер в массиве:

max:=a[l]; к:=1; { поиск начинаем с первого элемента }

for i:=2 to n do { перебираем элементы, начиная со второго } if a[i]>max then

begin

max:=a[i]; k:=i; { запоминаем значение и номер элемента, }

            { который больше всех предыдущих}

end;

Аналогично, при смене знака a[i]<min находится минимальный элемент min.

Действия с двумерными массивами

Условимся, что массив а состоит из n строк и m столбцов.

· Суммирование элементов каждой строки.

Результатом является массив с именем d, состоящий из n сумм элемент строк:

for i:=l to n do begin

s:=0;

for j:=l to m do s:=s+a[i,j];

d[i]:=s;

end;

· Поиск минимального элемента всей матрицы.

Переменная min используется для хранения значения минимального эле­мента, к — номер строки, 1 — номер столбца, где он находится:

min:=a[l,l]; k:=l; 1:=1; for i:=l to n do

for j:=1 to m do

if a[i,j]<min then begin

min:=a[i,j]; k:=i; l:=j; end;

· Умножение матрицы а на вектор х, в результате получается новый век­тор y:

for i:=l to n do

begin

s:=0;

for j:=1 to m do

s:=s+a[i,j]*x[j];

 y[i]:=s;

end;

 

 

Пример решения задачи

Задача Сформировать массив (одномерный) из 5 - ти чисел от 17 до 21. И вывести его на экран. Затем найти сумму всех его чисел и вывести это значение

 на экран с пояснением.

1.. Математическое обоснование

А - Имя массива

A[i] - любой элемент массива

i - Счетчик

n - Конечное значение счетчика

n =5

S - Сумма всех элементов массива А

S=S+A[i] - формула для накапливания суммы всех

элементов массива.

Вид алгоритма: линейно - циклический

2. Блок – схема

 

 

     
 

 


3. Исполнение алгоритма с помощью таблицы

 

i A[i] A[i] экран S  
1 17      
2 18      
3 19      
4 20      
5 21      
6       -
1   А[i]=17    
2   A[i]=18    
3   A[i]=19    
4   A[i]=20    
5   А[i]=21    
6        
1     17  
2     35  
3     54  
4     74  
5     95  
6        

4. Программирование

Program zadacha;

Const n=5;

Type mas=Array [1..5] of integer;

Var A: mas;

i, s: integer;

Begin

Writeln ('введите массив из пяти элементов');

For i:=1 to 5 do

Begin

Read (A[i]);

End;

Writeln ('вывод пяти элементов массива на экран');

Fori: =1 to 5 do

Write (A[i]);

S: =0;

Fori: =1 to 5 do

S:=S+A[i];

Writeln;

Write('S=', S:4);

Readln;

Readln;

End;

End.

5. Запуск на выполнение

Меню ðRunðRun

6.Результат работы

Введите массив из пяти элементов 17 18 19 20 21 S=95.0

Задача. Ввести в ОП элементы целочисленного массива М[3,4], затем вывести их на экран в виде строк и столбцов.

 
5 6 7 8
9 10 11 12
13 14 15 16

 

 


1. Математическое обоснование:

М – имя массива

n - количество строк

b – количество столбцов

I – счетчик строк

j- счетчик столбцов

M[i,j]- любой элемент массива

Вид алгоритма: линейно – циклический.

 

 

2. Блок-схема

 

 

3. Исполнение алгоритма

i

j

m[I,j]

m[I,j] на экран

1

1

5

 

1

2

6

 

1

3

7

 

1

4

8

 

1

5

 

 

2

1

9

 

2

2

10

 

2

3

11

 

2

4

12

 

2

5

 

 

3

1

13

 

3

2

14

 

3

3

15

 

3

4

16

 

3

5

 

 

4

 

 

 

1

1

 

m[1,1]=5

1

2

 

m[1,2]=6

1

3

 

m[1,3]=7

1

4

 

m[1,4]=8

1

5

 

 

2

1

 

m[2,1]=9

2

2

 

m[2,2]=10

2

3

 

m[2,3]=11

2

4

 

m[2,4]=12

2

5

 

 

3

1

 

m[3,1]=13

3

2

 

m[3,2]=14

3

3

 

m[4,3]=15

3

4

 

m[5,4]=16

3

5

 

 

4

 

 

 

 

4. Программирование

Program Matrica;

Uses CRT;

Const n=3;b=4;

Type mas=array[1..n,1..b]of integer;

Var I,j:integer;

M:mas;

Writeln(‘введите матрицу из’, n, ‘строк и’, b, ‘столбцов’);

For i:=1 to n do

Begin

For j:=1 to b do

Read (m[I,j]);

End;

Writeln (‘вывод матрицы:’);

For i:=1 to n do

Begin

For j:=1 to b do

Write (m[I,j]:4);

Writeln;

End;

End.

 

5.Запуск на выполнение:

Меню ðRun ðRun

 

6. Результат работы

Введите матрицу из 3 строк и 4 столбцов

5

6

7

8

9

10

11

12

13

14

15

16

Вывод матрицы:

5 6 7
8 9 10
11 12 13
14 15 16

 

 

 

Процедуры и функции

Процедуры

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

Структура процедуры повторяет структуру программы, это "программа в миниатюре" — она также представлена заголовком и телом. В отличие от программы для процедур и функций наличие заголовка обязательно.

procedure ИмяПроцедуры(ФормальныеПараметры);

{ Описательная часть процедуры }

Begin

{ Инструкции исполнительной части процедуры }

еnd;

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

Имя Процедуры (ФактическиеПараметры);

 

Пример решения задачи

 

Задача: Написать программу с процедурой, которая выводит на экран 3 горизонтальные линии из следующих символов '-', '*', '#'.

1. Математическое обоснование.

Len- размер линии в символах,

S – символ, которым реализуется линия

Вид алгоритма – алгоритм циклом

2. исполнение алгоритма

i 1стр i 2стр i
3. программирование program linii; uses crt; procedure horline (len:integer; s:char); var i:integer; begin for i:=1 to len do write (s); writeln; end; begin horline(10,'-'); horline(20,'*'); horline (30,'#'); readln end. 4. Запуск на выполнение Меню ðRunðRun
  1. Результат работы
----------- ********************* ############################    

 

3стр

1 - 1 * 1 #
2 - 2 * 2 #
3 - 3 * 3 #
4 - 4 * 4 #
5 - 5 * 5 #
6 - 6 * 6 #
7 - 7 * 7 #
8 - 8 * 8 #
9 - 9 * 9 #
10 - 10 * 10 #
    11 * 11 #
    12 * 12 #
    13 * 13 #
    14 * 14 #
    15 * 15 #
    16 * 16 #
    17 * 17 #
    18 * 18 #
    19 * 19 #
    20 * 20 #
        21 #
        22 #
        23 #
        24 #
        25 #
        26 #
        27 #
        28 #
        29 #
        30 #

Функции.

Если результатом подпрограммы является только одно значение, то имеет смысл оформить такую подпрограмму не в виде процедуры, а в виде функ­ции. Функция пользователя аналогична процедуре, но имеются два отличия.

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

Имя функции может входить в выражение как операнд. Функция воз­вращает результат в точку своего вызова.

Функция, определенная пользователем, состоит из заголовка и тела функ­ции. Заголовок содержит зарезервированное слово function, имя функции, заключенный в круглые скобки необязательный список формальных парамет­ров и, обратите внимание — в отличие от процедуры, тип возвращаемого функцией значения:

function ИмяФункции(ФормальныеПараметры): ТипРезультата;

Имя функции уникально в пределах программы.

Тело функции по своей структуре аналогично обычной программе:

function ИмяФункции(ФормальныеПараметры): ТипРезультата;

(Описательная часть функции)

begin

{ Инструкции исполнительной части функции)

ИмяФункции:= Результат;

end;

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

Пример решения задачи

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

1. Математическое обоснование.

M,N- два натуральных числа

Rez – наибольший общий делитель.

Вид алгоритма – алгоритм ветвление;

2. Исполнение алгоритма

m n rez
6 3 3
5 2 1

3. программирование

program NOD3;

var a,b,rez:integer;

function nod(m,n:integer):integer;

begin

while m<>n do

if m>n

then m:=m-n

else n:=n-m;

nod:=m

end;

begin

write ('a=');

readln (a);

write ('b=');

readln(b);

rez:=nod(nod(a+b,abs(a-b)),a*b);

writeln ('nod=', rez);

readln

end.

4. Запуск на выполнение

Меню ðRunðRun

5. Результат работы

А=6 В=3 Nod=3

 

Задания для контрольной работы

 

Задание №1



Поделиться:


Последнее изменение этой страницы: 2021-06-14; просмотров: 30; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.129.247.196 (0.113 с.)