Как сделать треугольник в паскале

Обновлено: 05.07.2024

Первым делом отправим число — количество строк треугольника (оно должно задаваться в командной строке) — в переменную $n :

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

Мы же предпочитаем более лаконичный код, делающий то же самое:

Переменная $0 , напоминаем, содержит имя файла с программой:

Очередная строка треугольника формируется в массиве @a . Построение треугольника Паскаля начинается с массива, состоящего из одной единицы:

В цикле, который прокрутится $n раз, числа из массива @a выводятся, разделённые символами табуляции. Затем массив @a меняется.

Как мы выяснили, следующая строка в треугольнике Паскаля получается поэлементным сложением массива @a с точно таким же, но в котором все числа сдвинуты вправо на одну позицию. Можно сделать копию массива @a в массиве @b , а затем сдвинуть его элементы вправо, вставив в его начало ноль:

Но того же результата можно добиться и короче:

Прибавление к элементам массива @a элементов массива @b (с теми же индексами) производим в цикле:

Итак, приводим код цикла, в котором выводятся и строятся строки треугольника:

Это решение работает, но оно малодушное. Зачем-то мы завели массив @b , содержащий те же числа, что и @a , и ещё добавочный и нигде не используемый ноль в начале. Но ведь вся необходимая для получения следующей строки треугольника информация содержится в предыдущей. Нельзя ли обойтись без копирования строки?

Массив @b стал не нужен.

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

Тип урока: обобщение и систематизация.

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

Ход урока

I. Орг.момент.

Проверить готовность учащихся к уроку, правильную организацию рабочего места. Отметить отсутствующих в журнале.

II. Формулировка темы урока.

Хочешь научиться плавать, – смело входи в воду!

Хочешь научиться программировать, – пиши программы.

Simplex

0-симплекс – 1 вершина (точка);

1-симплекс (одномерный) – 2 вершины (отрезок);

2-симплекс (двумерный) – 3 вершины (треугольник);

3-симплекс (трехмерный) – 4 вершины (тетраэдр).

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

Pascal


Чей портрет Вы видите на экране? (Блез Паскаль)

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

Какой вклад он внес в информатику? (он создал арифмометр, в честь его назван один из языков программирования)

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


Сегодня наш урок мы посвятим такому треугольнику.

III. Постановка целей урока

В ходе подготовки к ЕГЭ по информатике из курса программирования наибольшее затруднение вызывают:

Цели:

  • повторить, отработать задание и вывод элементов двумерного массива, заданных формулой;
  • применение пользовательских функций и рекурсивных подпрограмм для задания элементов матрицы.

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

IV. Обобщение и систематизация

Треугольник Паскаля

1 1 1 1 1
1 2 3 4 5
1 3 6 10 15
1 4 10 20
1 5 15
1 6
1

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

1) Рассмотрим закономерности в такой матрице:

  1. первая строка и первый столбец состоят из 1. Как это задать? (A[1,j]:=1; A[I,1]:=1;)
  2. задать все остальные элементы A[i,j]:=A[i,j-1] + A[i-1,j];
  3. вывести треугольный вид таблицы

2) Вписать в карточку недостающие операторы (такое задание тоже есть в ЕГЭ)

Пользовательская функция

  1. Для чего служит пользовательская функция? Ее общий вид.
  2. Давайте создадим функцию, задающую сумму 2-х элементов (РАБОТА В ГРУППАХ за ПК, изменение готовой программы) Приложение2

Рекурсивная процедура

  1. Что такое рекурсия? Для чего она нужна (объект является рекурсивным, если он содержит сам себя или определен с помощью себя).
  2. Для чего служит процедура? Ее общий вид.
  3. Отличие процедуры от функции.
  4. РАССМОТРЕТЬ И ПРОАНАЛИЗИРОВАТЬ ГОТОВУЮ ПРОГРАММУ С РЕКУРСИВНОЙ ПРОЦЕДУРОЙ (в эл. пособии) Приложение3

Проблема

Треугольник Паскаля симметричен относительно главной диагонали. Как использовать этот факт? (подумать дома)

V. Постановка д.з

Паскаль подробно исследовал свойства и применения своего "треугольника"

Рассмотрим несколько удивительных свойств (см. в пособии):

  1. Каждое число x в таблице равно сумме чисел предшествующего горизонтального ряда, начиная с самого первого вплоть до стоящего непосредственно над числом x
  2. Каждое число x в таблице равно сумме чисел предшествующего вертикального ряда, начиная с самого верхнего вплоть до стоящего непосредственно левее числа x.
  3. Каждое число в таблице, будучи уменьшенным на единицу, равно сумме всех чисел, заполняющих прямоугольник, ограниченный теми вертикальными и горизонтальными рядами, на пересечении которых стоит число x (сами эти ряды в рассматриваемый прямоугольник не включаются).

Д/З:


Проверить любое 1 свойство (Как? Например, с помощью метода флажков)

Дополнительное задание:

Оказывается помимо треугольника Паскаля, существует треугольник Лейбница (см. рисунок).

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

Доп. Д/З: Составить программу, выводящую элементы треугольника Лейбница

Творческое задание:

Написать программу вывода элементов треугольника Лейбница, используя рекурсивную функцию или процедуру.

VI. Итоги и рефлексия

Тестирование (тестовая программа в пособии) Приложение3

  1. Двумерный симплекс – это:
    1. Двумерный массив (матрица);
    2. Треугольник;
    3. Одномерный массив.
    1. произвольный треугольник, полученный с помощью языка Pascal
    2. части квадратной матрицы, образованные ее диагоналями;
    3. арифметический треугольник, элементы которого задаются формулой a[i,j]:=a[i,j-1] + a[i-1,j]
    1. A [i ,i ]
    2. A [n + 1 -j , j ]
    3. A [1 , n ]
    1. содержит сам себя или определен с помощью себя
    2. любая процедура (функция) является рекурсивной
    3. процедура, задающая элементы двумерного массива

    Результаты:

    4 правильных ответа – материал урока усвоен;

    Рефлексия

    Какие разделы программирования мы сегодня рассмотрели на уроке?

    • Двумерный массив
    • Квадратная матрица
    • Главная, побочная диагональ
    • Пользовательская функция
    • Процедура
    • Рекурсивная процедура

    Какие разделы в программировании, на ваш взгляд, нуждаются в дополнительной проработке?

    ← →
    Khabibulin ( 2006-11-06 14:15 ) [0]

    как математически нарисовать треугольник в Паскале? Например, есть сторона А=9,5 см., Б=4 см. и Г=4,8 см. Как это сделать? Помогите пожалуйста.

    ← →
    Array ( 2006-11-06 14:23 ) [1]

    LineTo + F1

    ← →
    Percent ( 2006-11-06 14:25 ) [2]

    Паскаль не предназначен для рисования треугольников.

    Это Паскаль?

    ← →
    Khabibulin ( 2006-11-06 14:27 ) [3]

    но мне надо нарисовать его там. варианты то должны быть. верно?

    ← →
    Khabibulin ( 2006-11-06 14:31 ) [4]

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

    ← →
    Array ( 2006-11-06 14:32 ) [5]

    сори, не глянул
    line(x1, y1, x2, y2 :integer);

    ← →
    DiamondShark © ( 2006-11-06 14:32 ) [6]


    > Например, есть сторона А=9,5 см., Б=4 см. и Г=4,8 см.
    > Как это сделать?

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

    ← →
    Khabibulin ( 2006-11-06 14:37 ) [7]

    I\
    I \
    I \
    A-> I \
    I \

    ← →
    Percent ( 2006-11-06 14:39 ) [8]

    таких треугольников не бывает.]

    Но в военное время, говорят.

    :-)

    ← →
    Percent ( 2006-11-06 14:40 ) [9]

    И что, такого нарисовать вообще не реально.

    Да ты ж уже нарисовал. Зачем тебе Паскаль?

    ← →
    Khabibulin ( 2006-11-06 14:41 ) [10]

    блин, я серьезно, а вы. :(((((

    ← →
    Anatoly Podgoretsky © ( 2006-11-06 14:42 ) [11]

    Вообще то LineTo, а остальное не относится к Дельфи, это в школу, предмет называется геометрия.

    ← →
    Anatoly Podgoretsky © ( 2006-11-06 14:46 ) [12]

    > Khabibulin (06.11.2006 14:41:10) [10]
    > блин, я серьезно, а вы. :(((((

    Вполне серьезно, таких небывает, а не евклидовское пространство видимо рано для тебя.

    ← →
    DiamondShark © ( 2006-11-06 14:53 ) [13]

    И мы серьёзно.

    Введём систему координат, такую, что одна из вершин лежит в начале СК, а одна из сторон лежит на оси Ox:

    тогда координаты вершин будут (0,0), (A,0), (x,y)

    Задача: найти x, y.
    Чётвёртый класс, если не ошибаюсь.

    ← →
    Khabibulin ( 2006-11-06 15:06 ) [14]

    да я в курсе. :)))) но геометрия мне не дана. а ж самому стыдно.

    ← →
    KilkennyCat © ( 2006-11-06 15:14 ) [15]

    Предлагаю сначала найти площадь треугольника.

    ← →
    DiamondShark © ( 2006-11-06 15:29 ) [16]


    > но геометрия мне не дана

    даже в объёме теоремы Пифагора?!

    Треугольник существует только тогда, когда сумма любых двух его сторон больше третьей.

    Дано: a , b , c – стороны предполагаемого треугольника.

    Требуется сравнить длину каждого отрезка-стороны с суммой двух других. Если хотя бы в одном случае отрезок окажется больше суммы двух других, то треугольника с такими сторонами не существует.

    Решение

    Ниже приведены решения задачи на языке программирования Паскаль двумя способами. В первом случае все стороны проверяются в одном операторе if; во втором случае каждое условие проверяется отдельно, а программа содержит вложенные операторы if-else.

    Программа 1 (предпочтительный способ решения):

    В языке Паскаль логический оператор and имеет приоритет над операторам >, if проверяется, что каждая из сторон меньше суммы других. Если хотя бы одна будет больше, то все логическое выражение вернет ложь ( false ). В таком случае сработает ветка else .

    В данном случае существование треугольника проверяется по-этапно. Если первое условие возвращает ложь, то программа переходит к последнему else. Если же первое условие соблюдено, то поток выполнения программы оказывается у вложенного if. Здесь проверяется уже второе условие. Если оно возвращает ложь, то программа переходит к предпоследнему else. Если и второе логическое выражение возвращает истину (true), то программа идет к третьему условию. При его соблюдении выполняется тело самого вложенного оператора if. При его несоблюдении сработает самое вложенное else.

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

    Читайте также: