2016-04-19 2 views
0

Я НЕ, ищущий ответы на эту проблему. Мне трудно понять, что я должен делать в этом задании. Я приветствую псевдо-код или подсказки, если вы хотите. но то, что мне действительно нужно, является объяснением того, что мне нужно делать, и каким должен быть результат. пожалуйста, не пишите много кода, хотя я бы хотел попробовать это самостоятельно.Пояснение к заданию

(()) = ноты от меня

присваивание:

программа (prog.exe) ((мы дали эту программу)), которая читает 2 целых числа (т, п) и 1 double (a) из файла входных данных с именем input.in. Например, образец input.in данного файла содержит значение

5 7 1.23456789

при запуске ./prog.exe выхода длинного столбца чисел с плавающей точкой

в добавление к программе, есть файл под названием ain.in, который содержит длинный столбец значений двойной точности.

копия prog.exe и ain.in в рабочем каталоге

Написать Баш скрипт, который делает это следующим образом:

-Запускает ./prog.exe для всех combonations из

--m = 0,1, ..., 10

-N = 0,1, ..., 5

--a = каждое значение в файле ain.in

-это, по существу, тройной вложенный цикл по м, н и ain.in значения

-для каждой комбинации м , п и значение ain.in выше:

- генерировать соответствующий входной файл input.in

- запустить программу и перенаправить вывод в сом e временный выходной файл.

--extract на 37-м и 51-м значения из этого временного выходного файла и сохранить их в файле с именем average.in

-Когда 3 вложенных циклов прекратить действие average.in файл должен содержать длинный список значений с плавающей запятой.

-Ваш сценарий должен возвращать среднее значение, содержащееся в среднем.в

СОВЕТОВ: сло, AWK, выход направление, будет полезно здесь


спасибо тому, кто нашел время, чтобы даже прочитать это. Это мое второе назначение кодирования bash, и я все еще пытаюсь понять его, и лучшее объяснение будет очень полезно. еще раз спасибо!

ответ

0

Идея состоит в том, чтобы написать скрипт bash, который будет протестировать prog.exe с различными условиями ввода. Это означает повторное создание input.in и запуск prog.exe много раз. Каждый раз, когда вы запускаете prog.exe, input.in должны содержать различные три номера, например,

Первый запуск:

0 0 <first line of ain.in> 

Второй пробег:

0 0 <second line of ain.in> 

. , , последний пробег:

10 5 <last line of ain.in> 

Для этого вы можете использовать seq and for loops.

Затем вам необходимо систематически сохранить результаты каждого прогона, например,

./prog.exe > tmp.out 
# extract line 37 and 51 and append to average.ln 
sed -n '37p; 51p; 51q' tmp.out >> average.ln 

Наконец, после тестирования всех комбинаций, use awk to compute the average of all the lines в average.in.

+1

Использование 'sed' или' awk' для выбора конкретной линии вероятно, лучше, чем 'хвост ' head'. –

+0

Правда; заменить 'tail | head' с 'sed'. – webb

2

это один из способов генерации всех комбинаций входных без явных петель

join -j9 <(join -j9 <(seq 0 10) <(seq 0 5)) ain.in | cut -d' ' -f2- 
+0

сладкий! не знал, что соединение существует. – webb

0

Однострочник вдохновлен @karakfa:

join -j9 <(join -j9 <(seq 0 10) <(seq 0 5)) ain.in | cut -d' ' -f2- | 
    sed "s/.*/echo & >input.in;./prog.exe>tmp.out; sed -n '37p;51p;51q' tmp.out/" | 
    sh | awk '{sum+=$1; n++} END {print sum/n}' 
Смежные вопросы