Главная страница
Навигация по странице:

  • Массив характеризуется именем, размерностью и размером

  • Описание статического массива

  • Программа на языке

  • Тестирование

  • Программа

  • ЛАБОРАТОРНАЯ МОЯ!4. Массивы. Одномерные массивы


    Скачать 305 Kb.
    НазваниеМассивы. Одномерные массивы
    Дата27.12.2022
    Размер305 Kb.
    Формат файлаdoc
    Имя файлаЛАБОРАТОРНАЯ МОЯ!4.doc
    ТипЛабораторная работа
    #867013

    Дата 14.05.2007г.

    Лабораторная работа №4

    Тема: Массивы. Одномерные массивы.

    Цель: Изучить массивы. Одномерные массивы.

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

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

    В высшей математике табличные величины называют соответственно векторами и матрицами.

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

    Имя массива образуется по общему правилу образования имен, т. е. представляет собой идентификатор, например A, Bl, C8 и т. д. Однако оно не должно совпадать с именем ни одной простой переменной, используемой в той же программе.

    Работа с массивом сводится к действиям над его элементами. Для того чтобы указать, какой элемент в данный момент используется, достаточно задать его порядковый номер, который приписывается к имени соответствующего массива. Таким образом, элементы массива обозначаются переменной с индексами. Запись переменной с индексами состоит из имени массива и следующего за ним в квадратных скобках списка индексов, например А[1], A[I], B1[K], C8[I, J], С8[2, 1]

    Индексы определяют положение элемента в массиве. Число индексов определяет размерность массива, т.е. форму его компоновки: одномерный, двумерный и т. д. Одномерный массив соответствует линейной таблице. Его элемент обозначается переменной с одним индексом: A[l], A[I] —соответственно первый и i-й элементы одномерного массива А;

    Двумерный массив описывает в программе прямоугольную таблицу. Его элементы обозначаются переменной с двумя индексами: C8[I, J], С8[2, 1], где первый индекс обозначает номер строки, а второй — номер столбца.

    Таким образом, для обращения к конкретному элементу массива необходимо указать имя массива и значения индексов.

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

    По умолчанию применяется так называемая нумерация с нулевой базой, т.е. элементы массива нумеруются, начиная с 0.

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

    Описание статического массива определяет имя, размер массива и тип данных, которые в нем хранятся. Формат описания в разделе переменных:

    Var

    <имя_массива>: array <[тип_индекса]> of <тип_данных>;

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

    Например

    Var
    A : array [1..10] of real;

    Описывается одномерный массив вещественных чисел A, который максимально может состоять из 10 элементов. Нижняя граница индекса равна 1, верхняя – 10.

    Начиная с версии Delphi 4 можно использовать также и динамические массивы, когда количество элементов может меняться по ходу выполнения программы.

    Динамические массивы отличаются от обычных статических тем, что для них не объявляется заранее длина – число элементов. Объявление такого массива содержит только имя и тип элементов.

    Var <имя_массива>: array of <тип_данных>.

    При объявлении динамического массива место под него не отводится. Прежде чем использовать такой массив, надо задать в программе его размер процедурой SetLength. Параметры данной процедуры - количество элементов по каждой размерности. Например, SetLength(10,20) - для двумерного массива.

    Линейный (одномерный) массив – это просто список элементов данных.

    Примеры описания одномерных массивов:

    var B : array [0..5] of real
    R : array [1..34] of char;
    N : array [’A’..’Z’] of integer;
    M : array of integer; {динамический массив}

    Для доступа к элементу массива следует указать имя массива с последующим числом (индексом), заключенном в квадратные скобки.

    Элементы массива можно использовать в любом выражении точно также как и значение константы или переменной. Сортировка выбором


    Суть этого метода очень проста и может быть описана так:

    1.        В последовательности из n элементов выбирается наименьший (наибольший) элемент;

    2.        Меняется местом с первым;

    3.        Далее процесс повторяется с оставшимися n-1 элементами, затем с оставшимися n-2 элементами и т.д., до тех пор пока не останется один самый большой (маленький) элемент.

    Задание №1.

    Заполните массив случайными числами. Отсортируйте массив по возрастанию методом пузырька.

    Программа на языке Delphi

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, Buttons, ExtCtrls;

    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Label1: TLabel;

    Button1: TButton;

    Button2: TButton;

    Edit3: TEdit;

    Label2: TLabel;

    Image1: TImage;

    Label3: TLabel;

    BitBtn1: TBitBtn;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form1: TForm1;

    n:integer;

    M:array of integer;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i:integer;

    begin

    Randomize;

    N:=strtoint(edit2.Text);

    setlength(M,N);

    edit1.Text:='';

    for i:=0 to N-1 do

    begin

    M[i]:=Round(sin(random(10))*10);

    edit1.Text:=edit1.text+' '+inttostr(M[i]);

    end;

    end;

    procedure TForm1.Button2Click(Sender: TObject);

    var

    i,j,k_m:integer;

    t,p:integer;

    begin

    edit3.Text:='';

    for i:=0 to n-2 do

    for j:=n-1 downto i+1 do

    if M[j-1]>M[j] then

    begin

    p:=M[j-1];

    M[j-1]:=M[j];

    M[j]:=p

    end;

    for i:=0 to n-1 do

    edit3.Text:=edit3.text+' '+inttostr(M[i]);

    end;

    end.
    Тестирование


    Индивидуальное задание №1

    1.    Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-10,20]. Найти сумму элементов, имеющих нечетные индексы.

    2.    Подсчитать количество элементов массива, значения которых больше заданного числа А и кратных 5.

    3.    Найти номер первого отрицательного элемента, делящегося на 5 с остатком 2.



    Программа на языке Delphi

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls;

    type

    TForm1 = class(TForm)

    Image1: TImage;

    Edit1: TEdit;

    Edit2: TEdit;

    Button1: TButton;

    Button2: TButton;

    Edit3: TEdit;

    Edit4: TEdit;

    Edit5: TEdit;

    Edit6: TEdit;

    GroupBox1: TGroupBox;

    CheckBox2: TCheckBox;

    CheckBox3: TCheckBox;

    CheckBox1: TCheckBox;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form1: TForm1;

    n:integer;

    M: array of integer;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i:integer;

    begin

    Randomize;

    N:=strtoint(edit2.Text);

    setlength(M,N);

    edit1.Text:='';

    for i:=0 to N-1 do

    begin

    M[i]:=Random(31)-10;

    edit1.Text:=edit1.text+' '+inttostr(M[i]);

    end;

    end;
    procedure TForm1.Button2Click(Sender: TObject);

    var

    i:integer;

    a,sum,k,countp,per,chislo,j:integer;

    begin a:=strtoint(edit6.text);

    edit3.Text:='';

    edit4.Text:='';

    edit5.Text:='';

    sum:=0;

    countp:=0;

    chislo:=m[0];

    per:=0;

    k:=0 ;

    for i:=0 to n-1 do

    begin

    if checkbox1.Checked then

    if i mod 2<>0 then sum:=sum+m[i];

    if checkbox2.Checked then

    if (m[i]>a) and (m[i] mod 5=0) then countp:=countp+1;

    if checkbox3.Checked then

    for j:=0 to n-1 do

    if (m[i]<0) and (m[i] mod 5 =2) then

    begin

    chislo:=m[i+1];

    per:=i+1;

    break;

    end;

    end;

    if checkbox1.checked then edit3.text:=inttostr(sum);

    if checkbox2.checked then edit4.text:=inttostr(countp);

    if checkbox3.checked then edit5.text:=inttostr(per);

    end;

    end.
    Тестирование



    Индивидуальное задание №2

    1.      Заменить последний положительный элемент массива на второй элемент массива.

    2.      Разделить все элементы массива с четными номерами на первый элемент (первый элемент отличен от 0).

    3.      Из элементов массива D сформировать массив A той же размерности по правилу: если номер четный, то значение элемента находится по формуле Ai = Di2, если нечетный, то по форму ле Ai = 2Di. Программа на языке Delphi

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls;

    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Edit4: TEdit;

    Button1: TButton;

    Button2: TButton;

    Image1: TImage;

    GroupBox1: TGroupBox;

    CheckBox1: TCheckBox;

    Label1: TLabel;

    CheckBox2: TCheckBox;

    Edit5: TEdit;

    CheckBox3: TCheckBox;

    Label2: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;

    var

    Form1: TForm1;

    n:integer;

    M: array of integer ;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i:integer;

    begin

    Randomize;

    N:=strtoint(edit2.Text);

    setlength(M,N);

    edit1.Text:='';

    for i:=0 to N-1 do

    begin

    M[i]:=Random(31)-10;

    edit1.Text:=edit1.text+' '+inttostr(M[i]);

    end;

    end;

    procedure TForm1.Button2Click(Sender: TObject);

    var

    i:integer; vivod,mass:real;

    a,s,k,pol,nomer,j:integer;

    begin

    edit3.Text:=' ';

    pol:=m[0];

    nomer:=0 ;

    for i:=n-1 downto 0 do begin

    if (m[i]>0) and (i>nomer) then

    begin

    pol:=m[i];

    nomer:=i;

    m[i]:=m[1];

    break;

    end;

    end;

    for i:=0 to n-1 do

    if checkBox1.Checked then edit3.text:=edit3.text+' '+inttostr(m[i]);

    begin

    edit4.Text:=' ';

    for i:=0 to n-1 do

    begin

    if (i mod 2=0) and (m[i]<>0) then vivod:=m[i]/m[0];

    if i mod 2<>0 then vivod:=m[i];

    if checkbox2.Checked then edit4.text:=edit4.text+' '+floattostr(vivod);

    end;

    end;

    begin

    edit5.Text:=' ';

    for i:=0 to n-1 do

    begin

    if i mod 2=0 then mass:=sqr(m[i]);

    if i mod 2<>0 then mass:=2*m[i];

    if checkbox3.Checked then edit5.Text:=edit5.text+' '+floattostr(mass);

    end;

    end;

    end;

    end.

    Тестирование



    1. Дан массив целых чисел из n элементов, заполненный случайным образом числами из промежутка [-35,75]. Удалить из него все элементы, первая цифра которых четная.

    Программанаязыке Delphi

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls;

    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Edit3: TEdit;

    Button1: TButton;

    Button2: TButton;

    Label1: TLabel;

    Image1: TImage;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private { Private declarations }

    public { Public declarations }

    end;

    var

    Form1: TForm1;

    n:integer;

    M : array of integer;

    B : array of integer;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i:integer;

    begin

    Randomize;

    N:=strtoint(edit1.Text);

    setlength(M,N);

    edit2.Text:='';

    for i:=0 to N-1 do

    begin

    M[i]:=Random(111)-35;

    edit2.Text:=edit2.text+' '+inttostr(M[i]);

    end; end;

    procedure TForm1.Button2Click(Sender: TObject);

    var

    i,k,ib,j,sdvig,pos,tmp:integer;

    begin

    edit3.Text:=' ';

    i:=0;

    while i<=N-1 do

    if (m[i] div 10 mod 2<>0) or (m[i]=0)

    or (m[i] div 10 =0) and (m[i] mod 2<>0)

    then i:=i+1

    else

    begin

    for j:=i to n-1 do

    m[j]:=m[j+1];

    n:=n-1;

    end;

    for i:=0 to n-1 do

    edit3.Text:=edit3.text+' '+inttostr(M[i]);

    end;

    end.

    Тестирование

    1. Вставить число К1 после всех элементов, больших заданного числа

    Программанаязыке Delphi

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls;

    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Button1: TButton;

    Button2: TButton;

    Edit3: TEdit;

    Edit4: TEdit;

    Image1: TImage;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private { Private declarations }

    publiс { Public declarations }

    end;

    var

    Form1: TForm1;

    n:integer;

    M: array of integer ;

    b: array of integer ;

    implementation {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i:integer;

    begin

    Randomize;

    N:=strtoint(edit1.Text);

    setlength(M,n);

    edit2.Text:='';

    for i:=0 to N-1 do

    begin

    M[i]:=Random(31)-10;

    edit2.Text:=edit2.text+' '+inttostr(M[i]);

    end;

    end;

    procedure TForm1.Button2Click(Sender: TObject);

    var k,i,ib:integer;

    begin

    setlength(b,2*n);

    k:=strtoint(edit4.Text);

    edit3.text:='';

    ib:=1;

    for i:=0 to n do

    begin

    b[ib]:=m[i];

    if m[i]>k then

    begin

    ib:=ib+1;

    b[ib]:=k;

    end;

    ib:=ib+1;

    end;

    k:=ib-1;

    for i:=1 to k do

    edit3.text:=edit3.text+' '+inttostr(b[i]);

    end;

    end.

    Тестирование

    1. Перенести первые k элементов в конец: a[k+1], a[k+2], .. ,a[n], a[2], .., a[k].



    Программанаязыке Delphi

    unit Unit1;

    interface

    uses

    Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

    Dialogs, StdCtrls, ExtCtrls;

    type

    TForm1 = class(TForm)

    Edit1: TEdit;

    Edit2: TEdit;

    Button1: TButton;

    Edit3: TEdit;

    Button2: TButton;

    Edit4: TEdit;

    Image1: TImage;

    Label1: TLabel;

    Label2: TLabel;

    Label3: TLabel;

    procedure Button1Click(Sender: TObject);

    procedure Button2Click(Sender: TObject);

    private

    { Private declarations }

    public

    { Public declarations }

    end;
    var

    Form1: TForm1;

    M:array of integer;

    n:integer;

    implementation

    {$R *.dfm}

    procedure TForm1.Button1Click(Sender: TObject);

    var

    i:integer;

    begin

    Randomize;

    N:=strtoint(edit1.Text);

    setlength(M,N);

    edit2.Text:='';

    for i:=0 to N-1 do

    begin

    M[i]:=Random(31)-10;

    edit2.Text:=edit2.text+' '+inttostr(M[i]);

    end;

    end;
    procedure TForm1.Button2Click(Sender: TObject);

    var k,i,tmp,j,sdvig:integer;

    begin

    edit3.Text:='';

    k:=strtoint(edit4.Text);

    if k<>0 then

    begin

    if k>0 then sdvig:=k

    else sdvig:=n+k;

    for i:=0 to sdvig do

    begin

    tmp:=m[n-1];

    for j:=n-2 downto 0 do

    m[j+1]:=m[j];

    m[0]:=tmp;

    end;

    end;

    for i:=0 to n-1 do

    edit3.Text:=edit3.Text+' '+inttostr(m[i]);

    end;

    end.

    Тестирование
    Вывод: Я изучила массивы, одномерные массивы.


    написать администратору сайта