Форум русскоязычного сообщества Ubuntu


Автор Тема: Shell. Решение уравнений  (Прочитано 785 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Shell. Решение уравнений
« : 14 Апрель 2011, 17:23:22 »
Очень нужна помощь новичку в вопросах программирования на Shell. Понимаю что задачи лёгкие, но как их решить - не представляю ..

1) Составить программу нахождения корня уравнения "А*х+В=0". Программа принимает аргументы вида "а=х, b=y".

может
read a b
echo "$b/$a" | bc -l
но как быть с минусом :(

2) Из множества уравнений вида "А*х+В=0" shell-программа выбирает те, у которых корень соответствует указанному.
а как быть с множеством уравнений.. может в файл записать какой-нибудь?

Подскажите, пожалуйста, в каком направлении двигаться ...
Заранее спасибо :)
« Последнее редактирование: 14 Апрель 2011, 18:14:21 от Studentka »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Shell. Решение линейных уравнений
« Ответ #1 : 14 Апрель 2011, 18:22:40 »
Сессийа скоро...
1)
yurik@yurik-book:~$ a=10
yurik@yurik-book:~$ b=20
yurik@yurik-book:~$ echo $(( 0 - $b / $a))
-2
Со вторым заданием как-то не понятен формат входных и выходных данных. сильно расплывчато
это может быть набор коэффициэнтов, строковые выражения разной сложности из которых эти коэффициенты еще выдрать надо

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Shell. Решение линейных уравнений
« Ответ #2 : 14 Апрель 2011, 18:45:10 »

yurik@yurik-book:~$ a=10
yurik@yurik-book:~$ b=20
а можно узнать " read " почему в данном случае нельзя использовать?

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #3 : 14 Апрель 2011, 18:54:46 »
Я не говорил что нельзя. Хочешь используй

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #4 : 14 Апрель 2011, 18:55:58 »
Спасибки! :)
Буду над второй задачей думать ..

Оффлайн [DarkNet]Alpha

  • Активист
  • *
  • Сообщений: 987
  • Эмоциональный эльдар
    • Просмотр профиля
    • EBM-радио
Re: Shell. Решение уравнений
« Ответ #5 : 14 Апрель 2011, 19:07:22 »
О черт...
Наносите мне тонну воды решетом.

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Shell. Решение линейных уравнений
« Ответ #6 : 14 Апрель 2011, 19:13:53 »
Цитировать
Со вторым заданием как-то не понятен формат входных и выходных данных. сильно расплывчато
это может быть набор коэффициэнтов, строковые выражения разной сложности из которых эти коэффициенты еще выдрать надо

а можно чтоб "выдрать" коэффициенты использовать "AWK "?

например,
awk -F 'x' 
хотя... вряд ли :(
« Последнее редактирование: 14 Апрель 2011, 19:16:44 от Studentka »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #7 : 14 Апрель 2011, 19:40:44 »
Можно. Разрешаю.
yurik@yurik-book:~$ cat exp.list
1*x+1=0
1000*x-900=6
3.14*x+11=2.69
yurik@yurik-book:~$ cat exp.list | sed -e 's/[\+\-\*x\=]/ /g' | awk '{ print ($3-$2)/$1; }'
-1
0.906
-2.6465
yurik@yurik-book:~$

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #8 : 14 Апрель 2011, 19:43:00 »
Yurror, Вы мой спаситель!!! :) благодарю :)

вот только ... можно попросить вас прокомментировать " sed -e 's/[\+\-\*x\=]/ /g' "
здесь из файла достаются коэффициенты и вновь записываются в файле?
« Последнее редактирование: 14 Апрель 2011, 19:53:23 от Studentka »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #9 : 14 Апрель 2011, 19:56:22 »
Да не за что
Это самое простое регулярное выражение
sed программа которая его применяет man sed интересное чтиво
дальше
s/<regexp>/<subst>/g
s-замена найденого
g-заменять глобально, а не ограничиваться 1й строчкой (или первым вхождением я уже не помню)
<regexp> - само регулярное выражение, в нашем случае там указан набор символов +-*=x большинство из них являются спецсимволами поэтому заэкранированы \
<subst> - подстановка, в нашем случае заменяем на пробелы чтобы awk смог разпарсить входные данные ну и посчитать их

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #10 : 14 Апрель 2011, 19:59:01 »
Yurror, ещё раз спасибо за подробное и понятное объяснение!  :)

Оффлайн Studentka

  • Автор темы
  • Новичок
  • *
  • Сообщений: 9
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #11 : 23 Апрель 2011, 17:03:11 »
так... он выводит все корни уравнений.. однако, необходимо чтоб программа выбирала те, у которых корень соответствует указанному ... как бы эти получившиеся ответы присвоить каким-нить переменным и связать их с изначальными уравнениями

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Shell. Решение уравнений
« Ответ #12 : 23 Апрель 2011, 18:52:38 »
сравнивай результаты и печатай нужные строки
строки есть результаты тоже
что-то типа этого
for equation in `cat exp.list`
do
    res=`echo $equation | sed -e 's/[\+\-\*x\=]/ /g' | awk '{ print ($3-$2)/$1; }'`
    if [ $res -eq -1 ]; then
        echo -e "$equation $res"
    fi
done
работать будет только с целыми числами.
скажи преподам что они извращенцы, пусть сами такой фигней страдают.
все нормальные люди выберут другой инструмент для решения данной задачи

Оффлайн smart__

  • Любитель
  • *
  • Сообщений: 77
    • Просмотр профиля
    • ООО "ИнфоЦентр"
Re: Shell. Решение уравнений
« Ответ #13 : 23 Апрель 2011, 21:15:26 »
Мне кажется это затянувшаяся первоапрельская шутка.

 

Страница сгенерирована за 0.064 секунд. Запросов: 24.