Skip to content

Instantly share code, notes, and snippets.

@ipanin
Last active August 27, 2021 20:20
Show Gist options
  • Save ipanin/5741c6ae90e6153da368e029338a5890 to your computer and use it in GitHub Desktop.
Save ipanin/5741c6ae90e6153da368e029338a5890 to your computer and use it in GitHub Desktop.
Решение заданий по Bash из методички "Гаспар Чилингаров. UNIX – учебное пособие"
#! /usr/bin/env bash
# Решение заданий из методички "Гаспар Чилингаров. UNIX – учебное пособие".
# 1. Напишите программу-калькулятор, которая будет иметь один регистр аккумулятор.
# Значение, которым инициализируется аккумулятор, задается пользователем.
# После того, как программа инициализирует аккумулятор, она должна выполнять следующие команды:
# + число – прибавить число к аккумулятору
# - число – вычесть число из аккумулятору
# * число – умножить число и аккумулятору
# / число – разделить аккумулятор на число
# q – выход из программы
# После каждой команды скрипт должен выводить значение регистра-аккумулятора.
# 2. Измените скрипт, что-бы он проверял бы операции деления на ноль, наличие аргумента у операции,
# проверял бы, что введенный аргумент является числом, а не произвольной строкой.
# Для реализации используйте команду case.
re="^[+-]?[0-9]+$" # integers
read -e -p "Input: " val
while true
do
read -e -p "Op: " op arg
#op=${command:0:1}
#arg=${command:1}
if [ "$op" = "q" ] ; then
break
fi
if ! [[ $arg =~ $re ]] ; then
echo "error: arg is not an integer"
continue
fi
case $op in
"+")
let val+=arg ;;
"-")
let val-=arg ;;
"*")
let val*=arg ;;
"/")
if [ $arg -eq 0 ]
then
echo Cannot divide by zero
else
let val/=arg
fi
;;
*)
echo Unknown operation
;;
esac
echo $val
done
#! /usr/bin/env bash
# Решение заданий из методички "Гаспар Чилингаров. UNIX – учебное пособие"
# 1. Напишите скрипт, который выводит в текстовом режиме на экран график параболы (y = x^2) для значений x от -11 до +11.
# Для облегчения задания предлагаю принять следующие условия – ось X расположена по вертикали, а ось Y - по горизонтали
# (меньшие значения находятся слева).
# 2. Измените скрипт так, что бы он выводил бы так же оси координат X, Y.
# 3. А теперь поменяйте функцию на y=(x-2)^2 - 5 и постарайтесь вывести на экран ее.
# 4. И еще раз поменяйте функцию на y=(x-2)^3 - x^2 + 20.
# Последние 2 задания не должны от Вас требовать никаких изменений в скрипте, кроме как изменения функции и масштаба по оси Y.
for x in {-11..11}
do
# let y=x**2
# let y=(x-2)**2-5
let y=(x-2)**3-x**2+20
for c in {-100..100}
do
if [[ $c -eq $y ]]
then
echo -n "o";
elif [[ $c -eq 0 ]]
then
echo -n "|"
elif [[ $x -eq 0 ]]
then
echo -n "-";
else
echo -e -n " "
fi
done
echo
done
# Cравните вывод команд cal и ncal. Надо написать программу-фильтр на awk,
# которая будет принимать на вход результат работы команды cal и выводить результат
# аналогичный выводу команды ncal.
# Вызов:
# cal | awk -f transpose.awk
{
if (NR == 1) {
print
next
}
for (i=1; i<=NF; i++) {
rows[i] = rows[i] sprintf("%2s ", $i)
}
}
END {
for (row in rows) {
print rows[row]
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment