Треугольник Паскаля — это числовая пирамида, в которой каждое число (кроме первых и последних в строке) является суммой двух чисел, расположенных над ним. может быть полезна для понимания принципов работы с массивами и циклами в языке программирования Object Pascal.
В данной статье мы рассмотрим два подхода к реализации треугольника Паскаля в Delphi: первый — с использованием двумерного массива, а второй — с помощью одномерного массива и дополнительной переменной для хранения предыдущего ряда.
Подход 1: Двумерный массив
Для реализации треугольника Паскаля с помощью двумерного массива можно использовать следующий алгоритм:
Создать двумерный массив размером (n+1) x (n+1), где n — количество строк в треугольнике Паскаля.
Заполнить первую строку массива единицами.
Для каждой строки, начиная со второй, заполнить массив следующим образом: каждая ячейка равна сумме двух ячеек над ней в предыдущей строке, а первые и последние ячейки равны единице.
Ниже представлен пример кода на Object Pascal, реализующий данный алгоритм:
program PascalTriangle2D;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
MAX_ROWS = 10;
var
triangle: array[0..MAX_ROWS, 0..MAX_ROWS] of Integer;
procedure PrintTriangle(n: Integer);
var
i, j: Integer;
begin
for i := 0 to n do
begin
for j := 0 to i do
Write(triangle[i, j]:4);
Writeln;
end;
end;
procedure GenerateTriangle(n: Integer);
var
i, j: Integer;
begin
for i := 0 to n do
begin
triangle[i, 0] := 1;
for j := 1 to i do
triangle[i, j] := triangle[i - 1, j - 1] + triangle[i - 1, j];
triangle[i, i + 1] := 1;
end;
end;
begin
GenerateTriangle(MAX_ROWS);
PrintTriangle(MAX_ROWS);
Readln;
end.
В данном примере мы создаем двумерный массив triangle размером (MAX_ROWS+1) x (MAX_ROWS+1), где MAX_ROWS — константа, определяющая количество строк в треугольнике Паскаля. Функция PrintTriangle выводит на экран треугольник Паскаля, а функция GenerateTriangle заполняет массив согласно описанному выше алгоритму.
Подход 2: Одномерный массив и дополнительная переменная
Для реализации треугольника Паскаля с помощью одномерного массива и дополнительной переменной для хранения предыдущего ряда можно использовать следующий алгоритм:
Создать одномерный массив размером n x (n+1)/2, где n — количество строк в треугольнике Паскаля.
Создать дополнительный массив или переменную для хранения предыдущего ряда.
Заполнить первую строку массива единицами.
Для каждой строки, начиная со второй, заполнить массив следующим образом: каждая ячейка равна сумме двух ячеек над ней в предыдущей строке, а первые и последние ячейки равны единице. При этом предыдущий ряд нужно обновить перед заполнением текущего.
Ниже представлен пример кода на Object Pascal, реализующий данный алгоритм:
program PascalTriangle1D;
{$APPTYPE CONSOLE}
uses
SysUtils;
const
MAX_ROWS = 10;
var
triangle: array[0..MAX_ROWS * (MAX_ROWS + 1) div 2 - 1] of Integer;
prevRow: array[0..MAX_ROWS] of Integer;
procedure PrintTriangle(n: Integer);
var
i, j: Integer;
begin
for i := 0 to n - 1 do
begin
for j := 0 to i div 2 do
Write(triangle[i * (i + 1) div 2 + j]:4);
Writeln;
end;
end;
procedure GenerateTriangle(n: Integer);
var
i, j: Integer;
begin
for i := 0 to n - 1 do
begin
triangle[i * (i + 1) div 2] := 1;
for j := 1 to i div 2 do
triangle[i * (i + 1) div 2 + j] := prevRow[j - 1] + prevRow[j];
if i mod 2 = 1 then
triangle[i * (i + 1) div 2 + i div 2 + 1] := 1;
CopyMemory(@prevRow, @triangle[i * (i + 1) div 2], (i + 1) * SizeOf(Integer));
end;
end;
begin
GenerateTriangle(MAX_ROWS);
PrintTriangle(MAX_ROWS);
Readln;
end.
В данном примере мы создаем одномерный массив triangle размером n x (n+1)/2 и дополнительный массив prevRow для хранения предыдущего ряда. Функция PrintTriangle выводит на экран треугольник Паскаля, а функция GenerateTriangle заполняет массив согласно описанному выше алгоритму.
Оба подхода позволяют реализовать треугольник Паскаля с помощью цикла в Delphi. Первый подход использует двумерный массив и подходит для случаев, когда важно иметь быстрый доступ к элементам массива по индексам. Второй подход использует одномерный массив и дополнительную переменную для хранения предыдущего ряда, что может быть полезно при ограниченных ресурсах памяти.
В статье рассматриваются два способа реализации треугольника Паскаля в Delphi: с помощью двумерного массива и с помощью одномерного массива и дополнительной переменной для хранения предыдущего ряда.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.