Last active
August 27, 2021 20:20
-
-
Save ipanin/5741c6ae90e6153da368e029338a5890 to your computer and use it in GitHub Desktop.
Решение заданий по Bash из методички "Гаспар Чилингаров. UNIX – учебное пособие"
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Cравните вывод команд cal и ncal. Надо написать программу-фильтр на awk, | |
# которая будет принимать на вход результат работы команды cal и выводить результат | |
# аналогичный выводу команды ncal. | |
# Вызов: | |
# cal | awk -f transpose.awk | |
{ | |
if (NR == 1) { | |
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