
OS_LR2 (Go. Сортировка пузырьком и регулярка с тегами html)
.docx
|
Министерство науки и высшего образования Российской Федерации Калужский филиал федерального государственного бюджетного образовательного учреждения высшего образования «Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)» (КФ МГТУ им. Н.Э. Баумана) |
ФАКУЛЬТЕТ _ИУК «Информатика и управление»
КАФЕДРА ИУК6 «Защита информации»
ЛАБОРАТОРНАЯ РАБОТА № 2
«Введение в программирование на языке Go»
ДИСЦИПЛИНА: «Операционные системы»
Выполнил: студент гр. ИУК6-__ |
_________________ (_______________) (Подпись) (Ф.И.О.)
|
|
Проверил: |
_________________ (____________) (Подпись) (Ф.И.О.)
|
|
Дата сдачи (защиты): Результаты сдачи (защиты): |
||
|
- Балльная оценка: - Оценка:
|
Калуга, 2021
Цель работы: сформировать практические навыки написания программы на языке Go.
Задачи: разработать программу на языке Go в соответствии с вариантом и рекомендациями, выполняющую 2 задания. Первое задание подразумевает написание функции, реализующей описанный функционал. Во втором задании – обязательно применение регулярных выражений.
Теоретические сведения
Go представляет компилируемый статически типизированный язык программирования от компании Google. Язык Go предназначен для создания различного рода приложений, но прежде всего это веб-сервисы и клиент-серверные приложения. Хотя также язык обладает возможностями по работе с графикой, низкоуровневыми возможностями и т.д.
Работа над языком Go началась в 2007 в недрах компании Google. Одним из авторов является Кен Томпсон, который, к слову, является и одним из авторов языка Си (наряду с Денисом Ритчи). 10 ноября 2009 года язык был анонсирован, а в марте 2012 года вышла версия 1.0. При этом язык продолжает развиваться. Текущей версией на момент написания данной статьи является версия 1.12, которая вышла в феврале 2019 года.
Язык Go развивается как open source, то есть представляет поект с открытым исходным кодом, и все его коды и компилятор можно найти и использовать бесплатно.
Go является кроссплатформенным, он позволяет создавать программы под различные операционные системы - Windows, Mac OS, Linux, FreeBSD. Код обладает переносимостью: программы, написанные для одной из этих операционных систем, могут быть легко с перекомпиляцией перенесены на другую ОС.
Основные особенности языка Go:
компилируемый;
статически типизированный;
присутствует сборщик мусора;
поддержка работы с сетевыми протоколами;
поддержка многопоточности и параллельного программирования.
В настоящее время Go находит широкое применение в различных сферах. В частности, среди известных проектов, которые применяют Go, можно найти следующие: Google, Dropbox, Netflix, Kubernetes, Docker, Twitch, Uber, CloudFlare и ряд других.
Что нужно для работы с Go? Прежде всего необходим текстовый редактор для набора кода и компилятор для преобразования кода в исполняемый файл. Также можно использовать специальные интегрированные среды разработки (IDE), которые поддерживают Go, например, GoLand от компании JetBrains. Существуют плагины для Go для других IDE, в частности, IntelliJ IDEA и Netbeans.
Выполнение работы
Задание 1: напишите функцию сортировки списка вещественных чисел методом «пузырька».
Краткое описание работы программы: внутри программы задается массив вещественных чисел. Массив направляют в функцию BubbleSort, необходимую для сортировки пузырьком (пошагово перебираются все элементы массива, и, если как-то меньше предыдущего, он помещается раньше большего). Результат сортировки выводится на экран.
Листинг программы для задания 1:
package main
import (
"fmt"
)
func main() {
ar := []float64{3.1, 4.8, 1.1, 2.9, 5.5, 7, -1, 0}
fmt.Println(ar)
BubbleSort(ar)
fmt.Println(ar)
}
func BubbleSort(ar []float64) {
for i := 0; i < len(ar); i++ {
for j := i; j < len(ar); j++ {
if ar[i] > ar[j] {
swap(ar, i, j)
}
}
}
}
func swap(ar []float64, i, j int) {
tmp := ar[i]
ar[i] = ar[j]
ar[j] = tmp
}
Результат работы:
Рисунок 1 – Результат выполнения программы
Задание 2: в языке разметки HTML есть понятие тэг и атрибут. В строке: Example Link a это имя тега, href это имя атрибута, http://www.quackit.com/html/tutorial/html_links.cfm - значение атрибута. Составьте регулярное выражение, принимающее на вход строку с html-рамзеткой (набором тегов), а на выходе генерирующее список имён тегов, список имён атрибутов, список значений атрибутов.
Листинг программы для задания 2:
package main
import (
"fmt"
"regexp"
)
func match(pattern string, text string) {
matched, _ := regexp.Match(pattern, []byte(text))
if matched {
fmt.Println("MATCH - YES v")
} else {
fmt.Println("MATCH - NO X")
}
}
func main() {
var text string = "<a href=\"http://www.quackit.com/html/tutorial/html_links.cfm\">Example Link</a>"
fmt.Println("EXPRESSION: ", text)
pattern := `http://\w+\.\S+\.+\w+`
fmt.Println("--------------")
match(pattern, text)
fmt.Println("ATTRIBUTE'S MEANING: ")
re := regexp.MustCompile(pattern)
fmt.Printf("%q\n", re.FindAllString(text, -1))
fmt.Println("--------------")
pattern2 := `\s\w+="`
match(pattern2, text)
re2 := regexp.MustCompile(pattern2)
fmt.Println("ATTRIBUTE'S NAME: ")
fmt.Printf("%q\n", re2.FindAllString(text, -1))
fmt.Println("--------------")
pattern3 := `<\w+\s`
match(pattern3, text)
re3 := regexp.MustCompile(pattern3)
fmt.Println("TAG'S NAME: ")
fmt.Printf("%q\n", re3.FindAllString(text, -1))
}
Результат работы:
Рисунок 2 – Результат выполнения программы
Вывод: в ходе выполнения лабораторной работы были сформированы практические навыки написания программы на языке Go, изучены регулярные выражения.