Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

OS_LR2 (Go. Сортировка пузырьком и регулярка с тегами html)

.docx
Скачиваний:
3
Добавлен:
07.06.2021
Размер:
73.62 Кб
Скачать

Министерство науки и высшего образования Российской Федерации

Калужский филиал федерального государственного бюджетного образовательного учреждения высшего образования

«Московский государственный технический университет имени Н.Э. Баумана (национальный исследовательский университет)»

(КФ МГТУ им. Н.Э. Баумана)

ФАКУЛЬТЕТ _ИУК «Информатика и управление»

КАФЕДРА ИУК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, изучены регулярные выражения.