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

  • Теоретическая часть. Одними из основополагающих элементов структурного программирования являются массивы и циклы. Массив

  • Двумерные массивы. Вложенные циклы.

  • Нумерация элементов массива в компоненте начинается с нуля.

  • Практическая часть. Ход работы. 1-е задание.

  • Информатика21-22. Методические указания по курсу Информатика Пятигорск 2020 Лабораторная работа 1


    Скачать 4.27 Mb.
    НазваниеМетодические указания по курсу Информатика Пятигорск 2020 Лабораторная работа 1
    Дата31.03.2022
    Размер4.27 Mb.
    Формат файлаdocx
    Имя файлаИнформатика21-22.docx
    ТипМетодические указания
    #431282
    страница6 из 12
    1   2   3   4   5   6   7   8   9   ...   12

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


    Тема. Массивы. Циклы.
    Основные вопросы:

    • Циклы. Виды циклов.

    • Массивы.

    • Оператор генерации случайного числа. Теоретическая часть.

    Одними из основополагающих элементов структурного программирования являются массивы и циклы.

    Массив - это упорядоченный (индексированный) набор данных одного типа. Элементами массива могут быть данные числовых типов, символьных, логических. Размерность массива в Delphi может быть произвольной. Т.е. можно использовать одно-, двух-, трёхмерные массивы и т.д. Одномерному массиву соответствует набор данных в виде строки, каждый элемент которого имеет один индекс -порядковый номер в массиве. Двумерному массиву соответствует математическая структура -матрица. Каждый элемент двумерного массива имеет два индекса: первый индекс - это номер строки, в которой он находится, второй индекс - номер столбца. Трёхмерный массив можно представить как набор двумерных массивов одинакового размера, каждый из которых расположен на определённом слое в пространстве.

    Как и любая переменная, массив должен быть вначале объявлен в блоке объявления переменных. Например, необходимо объявить в процедуре массив с именем а из 10-ти целых чисел:

    var a: array [1..10] of integer; a - имя массива;

    array - служебное слово (array - массив), указывающее, что a - это массив.

    [1..10] - диапазон индексов элемента массива. Индексами элементов массива являются их

    порядковые номера.

    integer - тип данных, к которым относятся все элементы массива.

    В процедуре, где используется массив, обращение к элементам массива выполняется как к обычной переменной, но с указанием индекса. Например, для присвоения элементу массива с номером 3 значения равного 100:

    a[3] := 100;

    Цикл - это набор повторяющихся действий. Любой цикл должен иметь тело цикла - набор операторов, выполняемых повторно определённое число раз. Сколько раз в цикле повторяется выполнение этих действий - это количество шагов цикла. Перед тем как цикл должен очередной раз повторить тело цикла в нём должна происходить проверка условия окончания цикла. Условием окончания цикла может быть специальный счётчик, задающий число шагов этого цикла и изменяющийся в теле цикла по определённому закону или некоторое событие, которое может наступить на определённом и заранее неизвестном шаге цикла.

    Любой цикл имеет тело цикла - набор команд, выполняемых многократно, условие окончания цикла (или продолжения). Условие - это простое или составное логическое условие, которое обязательно указывается в цикле. Важно, чтобы условие окончания цикла было достижимо. Если в цикле логическое условие будет задано неверно с точки зрения логики, то цикл может выполняться не так как было задумано, либо выполняться бесконечно - программа «зацикливается». Так как ничего в природе не может быть бесконечным, то при «зацикливании» программы она зависает в памяти компьютера и пользователю приходится аварийно завершать работу всей программы. «Зацикливание» программы относится к логическим ошибкам при выполнении программы. При компиляции такие ошибки не будут обнаружены компилятором.

    В любой системе программирования, как правило, используются циклы трёх видов:

    • Цикл-ДО (с предусловием) - цикл, условие окончания которого проверяется до выполнения тела цикла. Если условие выполнения цикла не выполняется, то в данном виде цикла тело цикла может ни разу не выполниться. Число шагов в данном виде цикла может быть не всегда известно.

    • Цикл-ПОСЛЕ (с постусловием) - цикл, условие окончания которого проверяется после выполнения тела цикла. Если условие выполнения цикла не выполняется, то в данном виде цикла тело цикла выполниться хотя бы раз. Число шагов в данном виде цикла может быть не всегда известно.

    • Цикл с параметром - цикл, количество шагов которого всегда заранее известно. Параметром цикла является счётчик цикла, который изменяется автоматически.

    В Delphi циклу-DO соответствует оператор вида:

    while (<условие>)

    do <оператор>;

    Если в теле цикла необходимо выполнить несколько операторов, то в качестве оператора должен быть использован составной оператор вида begin ... end;

    Если в цикле используется составной оператор, то общий вид цикла будет иметь вид:

    while (<условие>) do

    begin

    Циклу-ПОСЛЕ соответствует оператор вида:

    repeat

    <оператор> until (<условие>);

    Оператор цикла данного вида сам по себе является составным. Логика его работы такова, что тело цикла выполняется до тех пор, пока условие остаётся ложным. Как только условие окончания цикла становится истинным, то цикл прекращает свою работу.

    Фрагмент процедуры, в которой выполняется вычисление суммы всех натуральных чисел от 1 до 10, может иметь следующий вид:
    Двумерные массивы. Вложенные циклы.

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

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

    d: Array [1..3, 1..3] Of Real;

    Объявленный массив является двумерным, состоящим из 3-х столбцов и 3-х строк.

    Для обращения к элементам массива (операции присвоения, действия со значением элемента массива) указывается его имя и два индекса:

    d[2, 3]:= 5.2;

    Элементу массива d, стоящему во 2-й строке и 3-м столбце присвоено значение 5.2.

    Для обращения к элементам двумерного массива используется двойной цикл или вложенные циклы: Общий вид вложенных циклов следующий

    for i:=1 to n do {начало внешнего цикла по i}

    Для представления данных из двумерных массивов в Delphi предусмотрены два компонента из вкладки Additional:

    • StringGrid - текстовая таблица;

    • DrawGrid - произвольная таблица;

    Компонент StringGrid предназначен для создания таблиц, в ячейках которых располагаются произвольные текстовые строки. Таблица делится на две части - фиксированную и рабочую. Фиксированная часть служит для показа заголовков колонок и рядов, а также для ручного управления их размерами. Рабочая часть - это остальная часть таблицы. Она может содержать произвольное число строк и столбцов, кроме того эти величины могут меняться программно. Центральным свойством компонента является свойство Cells - двумерный массив ячеек, каждая из которых может содержать произвольный текст. Координаты каждой ячейки - это пара чисел (индексов), первое из которых - номер столбца, второе - номер строки. Нумерация элементов массива в компоненте начинается с нуля.

    Свойство

    Назначение

    BorderStyle

    Определяет рамку компонента:

    • bsNone - нет рамки;

    • bsSingle - рамка толщиной 1 пиксел.

    Cells[ACol, ARow]

    Определяет содержимое ячейки с координатами (ACol, ARow)

    ColCount

    Содержит количество колонок таблицы

    ColWidth[Index]

    Содержит ширину колонки с индексом Index

    EditorMode

    Разрешает/запрещает редактирование ячеек. Игнорируется, если свойство Options включает значение goAlwayseShowEditor или не включает значение goEditing

    FixedColors

    Определяет цвет фиксированной зоны

    FixedCols

    Определяет количество колонок фиксированной зоны

    FixedRows

    Определяет количество рядов фиксированной зоны

    RowCount

    Содержит количество рядов таблицы


    Компонент DrawGrid в иерархии объектов Delphi является непосредственным родителем объекта StringGrid, поэтому многие его свойства повторяются, кроме специфичных для строк свойств Cells, Cols, Object и Rows.

    Для использования таблиц в вычислительных целях используется компонент StringGrid.

    Практическая часть. Ход работы. 1-е задание.

    1. Создать новый проект.

    2. Для окна проекта задать следующие свойства:

    • Размер формы: ширина - 800 пикселей, высота - 600 пикселей.

    • Заголовок формы - Лабораторная работа № 5.

    • Для предотвращения изменения размера окна указанные размеры задать в свойстве Constraints формы.





    1. В форму добавить счётчик. Для этого добавить два компонента: TEdit (из Палитры компонентов Standard) и TUpDown (из Палитры компонентов Win32). Счётчик будет использован для задания

      С использованием компонентов сконструировать интерфейс программы

    числового значения, для которого необходимо будет найти сумму всех натуральных чисел от 1 до заданного.

    Необходимо будет добавить кнопку (TButton) и поле TEdit. Кроме того, необходимо добавить необходимое количество однострочных текстовых надписей TLabel.

    4. Логика работы.

    При загрузке программы пользователь задает произвольное числовое значение с помощью счётчика. По щелчку по кнопке [Суммировать] программа должна найти сумму всех натуральных чисел от 1 до заданного в счётчике.

    Для выполнения вычисления необходимо создать процедуру для кнопки (объект Button1). Событие кнопки для создания процедуры - onClick.

    В начале работы с созданной процедурой она будет иметь следующий вид:

    procedure TForm1.Button1Click(Sender: TObject); begin

    end;

    В созданной процедуре для вычисления суммы всех натуральных чисел понадобится использовать целочисленные (integer) переменные: i- счётчик цикла, n- число, заданное в счётчике, s -сумма всех чисел. Все переменные должны быть объявлены в процедуре после её заголовка перед основной частью (телом процедуры). Объявление выполняется в разделе, который начинается со служебного слова var

    После добавления в процедуру блока объявления переменных, процедура примет следующий вид:

    procedure TForm1.Button1Click(Sender: TObject);

    var i, n, s: integer; //Блок объявления переменных

    begin end;

    В теле процедуры необходимо последовательно выполнить следующие действия:

    • Из поля Edit1 считать введённое с помощью счётчика значение (программой это значение рассматривается как текстовое) и преобразовать его в числовое.

    • С использованием цикла с параметром выполнить суммирование всех чисел. Сумму всех чисел присвоить переменной s.

    • Числовое значение переменной s преобразовать в текстовое и вывести его в поле Edit2.

    Введённое в поле Edit1 числовое значение преобразуется из символьного в целочисленное с использованием команды:

    n := StrToInt(EditLText);

    Перед суммированием в цикле необходимо переменной s задать начальное значение, равное 0. s := 0;

    Цикл с параметром i от 1 до n для суммирования натуральных чисел будет иметь вид:

    for i := 1 to n do s := s + i;

    Логика работы цикла такова, что при первом повторении команды из тела цикла (это единственная команда) переменной i задаётся значение, равное 1. Затем к предыдущему значению суммы (в начале работы цикла начальное значение переменной s = 0) прибавляется очередное значение переменной i и полученное числовое значение присваивается переменной s. Таким образом, на каждом шаге цикла переменная i (счётчик цикла) увеличивается на 1, а сумма увеличивается на очередное натуральное число.

    Для вывода в текстовое поле Edit2 числового значения переменной s это число вначале необходимо преобразовать в символьное. Это можно выполнить с использованием команды:



    2-е задание.

    1. В интерфейс созданного проекта добавить многострочное текстовое поле TMemo, кнопку для выполнения вычислений щелчком по кнопке и текстовое поле TEdit.
    Edit2.Text := IntToStr(s);




    const n = 10; //Блок объявления констант

    //Блок объявления переменных var i, s: integer;

    a: array [1..n] of integer; //Объявлен массив

    Процедура должна выполнить следующие команды:

    • Создать с использованием генератора случайных чисел очередной элемент массива.

    • Созданный элемент вывести в очередную строку многострочного текстового поля Memol, предварительно преобразовав это число в символьное значение.

    • К предыдущей сумме элементов прибавить значение полученного элемента массива.

    • Перед завершением работы процедуры вывести в текстовое поле Edit3 значение полученной суммы.

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

    begin

    s := 0;//Задаём начальное значение суммы randomize; //Включаем генератор случайных чисел for i := 1 to n do // Заголовок тела цикла begin //начало тела цикла

    a[i] := random(100); //присвоение элементу массива значения //Для поля Мемо1 и его атрибута Lines метод Add выводит символьное

    //значение в следующую строку поля

    //Предварительно значение элемента массива преобразуется в строку

    Memo1.Lines.Add(IntToStr(a[i]));

    s := s + a[i]; //суммирование элементов массива
    end; //конец тела цикла

    Edit3.Text := IntToStr(s); //в поле Edit выводим значение суммы.

    end;

    3-е задание.

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

    2. В свойствах компонента задать следующие параметры:




    • ColCount - 10 (количество столбцов);

    • RowCount - 10 (количество строк);

    • FixedCols - 0 (количество закреплённых столбцов);

    • FixedRows - 0 (количество закреплённых строк);



    3. Логика работы.

    Щелчок по кнопке Генерация должен выполнить процедуру заполнения табличного компонента случайными целыми числами в диапазоне от 0 до 200.

    Процедура для выполнения данного алгоритма может иметь следующий вид:

    randomize;

    for i := 0 to n - 1 do for j := 0 to n - 1 do begin

    StringGrid1.Cells[i,j] := IntToStr(random(200)); end;

    1   2   3   4   5   6   7   8   9   ...   12


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