Как сделать треугольник в паскале
Первым делом отправим число — количество строк треугольника (оно должно задаваться в командной строке) — в переменную $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. Как это задать? (A[1,j]:=1; A[I,1]:=1;)
- задать все остальные элементы A[i,j]:=A[i,j-1] + A[i-1,j];
- вывести треугольный вид таблицы
2) Вписать в карточку недостающие операторы (такое задание тоже есть в ЕГЭ)
Пользовательская функция
- Для чего служит пользовательская функция? Ее общий вид.
- Давайте создадим функцию, задающую сумму 2-х элементов (РАБОТА В ГРУППАХ за ПК, изменение готовой программы) Приложение2
Рекурсивная процедура
- Что такое рекурсия? Для чего она нужна (объект является рекурсивным, если он содержит сам себя или определен с помощью себя).
- Для чего служит процедура? Ее общий вид.
- Отличие процедуры от функции.
- РАССМОТРЕТЬ И ПРОАНАЛИЗИРОВАТЬ ГОТОВУЮ ПРОГРАММУ С РЕКУРСИВНОЙ ПРОЦЕДУРОЙ (в эл. пособии) Приложение3
Проблема
Треугольник Паскаля симметричен относительно главной диагонали. Как использовать этот факт? (подумать дома)
V. Постановка д.з
Паскаль подробно исследовал свойства и применения своего "треугольника"
Рассмотрим несколько удивительных свойств (см. в пособии):
- Каждое число x в таблице равно сумме чисел предшествующего горизонтального ряда, начиная с самого первого вплоть до стоящего непосредственно над числом x
- Каждое число x в таблице равно сумме чисел предшествующего вертикального ряда, начиная с самого верхнего вплоть до стоящего непосредственно левее числа x.
- Каждое число в таблице, будучи уменьшенным на единицу, равно сумме всех чисел, заполняющих прямоугольник, ограниченный теми вертикальными и горизонтальными рядами, на пересечении которых стоит число x (сами эти ряды в рассматриваемый прямоугольник не включаются).
Д/З:
Проверить любое 1 свойство (Как? Например, с помощью метода флажков)
Дополнительное задание:
Оказывается помимо треугольника Паскаля, существует треугольник Лейбница (см. рисунок).
Найти закономерности (числа на границе треугольника обратны последовательным натуральным числам. Каждое число внутри равно сумме двух чисел, стоящих под ним)
Доп. Д/З: Составить программу, выводящую элементы треугольника Лейбница
Творческое задание:
Написать программу вывода элементов треугольника Лейбница, используя рекурсивную функцию или процедуру.
VI. Итоги и рефлексия
Тестирование (тестовая программа в пособии) Приложение3
- Двумерный симплекс – это:
- Двумерный массив (матрица);
- Треугольник;
- Одномерный массив.
- произвольный треугольник, полученный с помощью языка Pascal
- части квадратной матрицы, образованные ее диагоналями;
- арифметический треугольник, элементы которого задаются формулой a[i,j]:=a[i,j-1] + a[i-1,j]
- A [i ,i ]
- A [n + 1 -j , j ]
- A [1 , n ]
- содержит сам себя или определен с помощью себя
- любая процедура (функция) является рекурсивной
- процедура, задающая элементы двумерного массива
Результаты:
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 возвращает ложь, то остальные логические выражения вообще не проверяются. В первой программе могут и проверяться (это зависит от особенностей языка программирования).
Читайте также: