Создать конечный элемент MDF me sh, содержащий элементы LINK1 - PullRequest
3 голосов
/ 17 апреля 2020

Я получил следующую домашнюю работу в университете:

Напишите программу AWK, которая может генерировать конечно-элементную сетку MDF, содержащую элементы LINK1. Геометрия me sh содержит n частей вертикальных линий и m частей горизонтальных линий. Значения n и m являются параметрами для программы AWK. Вертикальное и горизонтальное расстояние между линиями также являются параметрами. Форма меня sh можно увидеть на следующем рисунке:

форма меня sh

Пример выполнения:

awk –v n=3 –v m=2 –v dn=2 –v dm=1 –f gen.awk > output.mdf

Входные данные:

n - количество вертикальных линий

m - количество горизонтальных линий

dn - количество символов между вертикальными линиями

dm - количество символов между горизонтальными линиями

Вывод:

* output.mdf - это файл формата данных измерений, в котором мне нужно нарисовать эти линии.

Как показано здесь:

__|__|__|__
__|__|__|__
  |  |  |

А также:

Пожалуйста, убедитесь, что файл output.mdf действителен. Можно использовать программу chkmdf.exe или e_plot32.exe, чтобы проверить правильность файла MDF.

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

1 Ответ

5 голосов
/ 17 апреля 2020

Вы сказали, что вам нужны только советы и подсказки, но жизнь слишком коротка, чтобы предоставить здесь учебник по awk, поэтому вот как это сделать, если вы использовали - вместо _ в качестве символа разделителя строк без объяснения:

$ cat gen.awk
BEGIN {
    numCols = n + 1
    colWidth = dn
    numRows = m + 1
    rowHeight = dm

    colSep = "|"
    rowSep = sprintf("%*s",colWidth,"")
    gsub(/ /,"-",rowSep)

    for (rowNr=1; rowNr<=numRows; rowNr++) {
        for (subRowNr=1; subRowNr<=rowHeight; subRowNr++) {
            for (colNr=1; colNr<=numCols; colNr++) {
                printf "%*s%s", colWidth, "", (colNr<numCols ? colSep : ORS)
            }
        }
        if ( rowNr < numRows ) {
            for (colNr=1; colNr<=numCols; colNr++) {
                printf "%s%s", rowSep, (colNr<numCols ? colSep : ORS)
            }
        }
    }
}

.

$ awk -v n=3 -v m=2 -v dn=2 -v dm=1 -f gen.awk
  |  |  |
--|--|--|--
  |  |  |
--|--|--|--
  |  |  |

.

$ awk -v n=5 -v m=4 -v dn=6 -v dm=3 -f gen.awk
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |
------|------|------|------|------|------
      |      |      |      |      |
      |      |      |      |      |
      |      |      |      |      |

, и вы можете гуглить конструкции, добавив print s, et c. чтобы понять, что он делает, извлеките уроки и исправьте его, чтобы вывести точный формат, который вы хотите. Я также настоятельно рекомендую вам приобрести книгу Арнольда Роббинса «Эффективное программирование на Awk», 4-е издание, - все остальные книги о awk неполны и / или устарели и / или имеют другие проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...