Форум программистов, компьютерный форум, киберфорум
Shell, Bash
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57

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

26.03.2022, 01:22. Показов 964. Ответов 3

Студворк — интернет-сервис помощи студентам
Приветствую всех. Необходимо написать скрипт для вывода треугольника Паскаля заданной высоты. Написал сценарий, но после запуска скрипта комп намертво зависает, потом перезаходит в Ubuntu. В bash я новичок, многого не понимаю, поэтому наблюдаемый эффект от скрипта является следствием моей ошибки. При этом сам ее определить не могу, так как каждый раз после исправления и проверки зависает система. Вот код:
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#Скрипт для вывода треугольника Паскаля заданной высоты                                                                                                                                                                          
                                                                                                    
#!/bin/bash                                                                                         
                                                                                                    
#Функция для расчета факториала числа                                                               
factorial()                                                                                         
{                                                                                                   
    if [ "$1" -eq 1 ]                                                                               
    then                                                                                            
    ¦   echo 1                                                                                      
    else                                                                                            
    ¦   echo $(( $(factorial $(($1 - 1)))*$1))                                                      
    fi                                                                                              
}                                                                                                   
                                                                                                    
read -p "Введите число: "                                                                           
echo                                                                                                
                                                                                                    
#Отдельно выводим единицу с табуляцией в зависимости от вводимого значения                          
for (( n=0; n <= $REPLY; $((++n)) ))                                                                
do                                                                                                  
    echo -e "\t 1"                                                                                  
done                                                                                                
                                                                                                    
#Внешний цикл проходит все значения числа n в биномиальном коэффициенте                             
for (( n=1; n <= $REPLY; $((++n)) ))                                                                
do                                                                                                  
    factNum=$(factorial $n)                                                                         
                                                                                                    
    #Первый внутренний цикл выводит необходимое количество знаков табуляции
    #для построения треугольника
    for (( tab=$REPLY; $((tab - n)) >= 0; $((--tab)) ))                                             
    do                                                                                              
    ¦   echo -e "\t"                                                                                
    done                                                                                            
                                                                                                    
    #Второй внутренний цикл проходит все значения числа k в биномиальном
    #коэффициенте для каждого числа n
    for (( k=0; k <= $n; $((++k)) ))                                                                
    do                                                                                              
    ¦   temp=$(($n - $k))                                                                           
    ¦   factDenom=$(( $(factorial $k) * $(factorial $temp) ))                                       
    ¦   C=$(( $factNum / $factDenom ))                                                              
    ¦   echo -e "$C\t"                                                                              
    done                                                                                            
    echo                                                                                            
done                                                                                                                                                                                                
exit 0
Не могли бы подсказать, где я ошибся?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.03.2022, 01:22
Ответы с готовыми решениями:

Написать прогу для вывода треугольника Паскаля в консоль
Прошу помочь написать прогу на c# для вывода в консоль треугольника Паскаля с количеством строк вводимым с...

Скрипт, формирующий для вывода определённого сообщения через заданный промежуток времени другой скрипт
Приветствую сообщество CyberForum. Подскажите как реализовать такую задачу. Задача: При запуске скрипта должен формироваться другой...

код для (перевёрнутого) треугольника Паскаля с использованием for
срочно! Помогите составить программу на си - треугольник паскаля (из цифр)...обычный и перевернутый тоже с использованием for...очееень...

3
 Аватар для peter_irich
367 / 223 / 53
Регистрация: 18.10.2017
Сообщений: 2,387
26.03.2022, 15:06
Вот этот вариант хоть что-то выводит, дальше поправьте сами, как вам надо.
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#!/bin/bash                                                                                         
 
#Функция для расчета факториала числа                                                               
factorial(){
if [ "$1" -eq 1 ] || [ "$1" -eq 0 ] ; then
  echo 1
else
 echo $(($(factorial $(($1 - 1)))*$1))
fi
}
 
str="  "
read -p "Введите число: "
echo "number="$REPLY
#Отдельно выводим единицу с табуляцией в зависимости от вводимого значения                          
for (( n=0; n<=$REPLY; n++))
  do
  echo -e -n "\t1"
  str=${str}" "
done
str0=$str
l0=${#str0}
echo
echo
#Внешний цикл проходит все значения числа n в биномиальном коэффициенте                             
for ((n=0; n<=$REPLY; n++))
  do
factNum=`factorial $n`
#echo $factNum
 
#Первый внутренний цикл выводит необходимое количество знаков табуляции
#для построения треугольника
 
#  for ((tab=0; tab<=REPLY-n; tab++))
#    do
#   echo -e -n "\t"
#  done
 
#Второй внутренний цикл проходит все значения числа k в биномиальном
#коэффициенте для каждого числа n
  echo -n "$str"
  for ((k=0; k<=$n; k++))
    do
    let temp=n-k
    n1=`factorial $k`
    n2=`factorial $temp`
    let factDenom=n1*n2
    let C=factNum/factDenom
    echo -e -n "$C"
  done
    let n3=l0-n
    str=${str0:0:$n3}
    echo
done
exit 0
1
Покинул форум
3701 / 1484 / 355
Регистрация: 07.05.2015
Сообщений: 2,903
26.03.2022, 18:28
Bash
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/env bash
read -p 'Enter number of rows: ' row
k=$row
for ((i=0;i<row;i++)); do
  c=1
  printf -v spaces '%*.s' $k ''
  k=$((k-1))
  l=$c
  for ((j=0;j<i;j++)); do
    c=$((c*(i-j)/(j+1)))
    l="${l} ${c}"
  done
  echo "${spaces}${l}"
done
Пример работы:
Bash
1
2
3
4
5
6
7
$ source pascal_triangle.sh
Enter number of rows: 5
     1
    1 1
   1 2 1
  1 3 3 1
 1 4 6 4 1
Выравнивание доработаете самостоятельно.
1
0 / 0 / 0
Регистрация: 19.03.2022
Сообщений: 57
26.03.2022, 21:47  [ТС]
Спасибо всем за помощь, буду пробовать и разбираться.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.03.2022, 21:47
Помогаю со студенческими работами здесь

Необходимо процедуры вывода из Паскаля переделать для StringGrid
procedure rezout(var mx: tmx; var ma: tmx; var my: tmy; k, n: integer); var i, j: integer; begin for j := 1 to k do begin ...

Для введенного числа n выведите на печать n строк треугольника Паскаля
1Треугольник Паскаля. Для введенного числа n выведите на печать n строк треугольника Паскаля. Модифицируйте программу так, чтобы...

Задачка для вывода треугольника
Всем привет. Дали самую первую лабораторную работу помогите пожалуйста. С клавиатуры вводится строка, содержащая три цифры. Определите,...

Создать модуль, дополняющий математические возможности Паскаля функциями для нахождения площади треугольника
Создать модуль, дополняющий математические возможности Паскаля функциями для нахождения площади треугольника: «sGeron» - по известным трем...

Методы класса для вывода треугольника на экран
Добрый день! Помогите пожалуйста с заданием. Напишите методы класса для: - ввода треугольника с клавиатуры в диалоговом режиме; -...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru