Форум программистов, компьютерный форум, киберфорум
Наши страницы
Haskell
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
Rylai_Crestfall
0 / 0 / 0
Регистрация: 12.04.2019
Сообщений: 3
1

Реализация модуля который содержит абстрактный тип данных и функции

12.04.2019, 13:21. Просмотров 540. Ответов 7

Добрый день!

Задание звучит так

Реализовать два модуля.
Первый - содержит абстрактный тип данных и функции, обеспечивающие его интерфейс.
Второй – модуль главной программы, использующий первый модуль.
Требования к заданию:
- абстрактный тип данных должен описывать узлы локальных сетей в следующем виде:
Наименование узла - String
Адрес узла – (Int, Int, Int, Int)
Имя сети – String
Продолжительность последнего сеанса подключения (часы, минуты)
- функции интерфейса должны выполнять: добавление нового узла в сеть, редактирование и удаление узлов, вывод узлов заданной сети;
- модули должны реализовывать частичный экспорт-импорт;
- модуль абстрактного типа данных должен быть квалифицирован в модуле главной программы.

Я написала следующий код для первого модуля

Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
data Session = Session {
host :: String,
address :: Int,
network :: String,
time :: Int
} deriving (Show)
 
getHost :: IO String
getHost = putStr "enter a name Host: " >> getLine
 
getAddress :: IO Int
getAddress = do
  putStr "enter Address: "
  str <- getLine
  case reads str of
    [] -> putStrLn "not a number, try again" >> getAddress
    ((a, _) : _) -> return a
 
getNetwork :: IO String
getNetwork = putStr "enter a name Network: " >> getLine
 
getTime :: IO Int
getTime = do
  putStr "enter Time: "
  str <- getLine
  case reads str of
    [] -> putStrLn "not a number, try again" >> getTime
    ((t, _) : _) -> return t
 
getSession :: IO Session
getSession = do
  putStrLn "Answer the following questions to create an session"
  h <- getHost
  a <- getAddress
  n <- getNetwork
  t <- getTime
  return (Session h a n t)
 
main :: IO ()
main = do
  putStrLn "First Session"
  p1 <- getSession
  putStrLn ("First Session: " ++ show p1)
У меня такой вопрос. Как организовать редактирование и удаление узла, а так же их вывод? И что должен содержать второй модуль?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.04.2019, 13:21
Ответы с готовыми решениями:

Создать абстрактный тип данных (структура) — вектор, который имеет указатель на int и число элементов
Создать абстрактный тип данных (структура) - вектор, который имеет указатель на int и число...

Создать абстрактный тип данных (структура) - вектор, который имеет указатель на short и число элементов
Создать абстрактный тип данных (структура) - вектор, который имеет указатель на short и число...

Создать абстрактный тип данных - класс вектор, который имеет указатель на long, число элементов и переменную состояния
Помогите пожалуйста, нужно написать код на с++ Создать абстрактный тип данных - класс вектор,...

Абстрактный класс. Виртуальный метод, который возвращает T- тип
Привет! Допустим, есть абстрактный класс, и метод, который возвращает T-тип. class A {...

Написать базовый абстрактный класс который содержит универсальные поля для банковского счета и конструктор
Научиться использовать наследование и организацию структур . 1. Написать базовый абстрактный класс...

7
Catstail
Модератор
24603 / 12511 / 2284
Регистрация: 12.02.2012
Сообщений: 20,328
12.04.2019, 13:55 2
Думаю, что редактирование можно реализовать так: задается хост и новые характеристики. Удаление - просто по имени хоста. Вывод - каждый хост новой строки с перечислением его характеристик
0
Curry
2952 / 2021 / 252
Регистрация: 01.06.2013
Сообщений: 4,409
Записей в блоге: 8
12.04.2019, 15:56 3
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
Первый - содержит абстрактный тип данных
абстрактный ? И в чём заключается его абстрактность?
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
Адрес узла – (Int, Int, Int, Int)
А у вас
Haskell
1
address :: Int,
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
Как организовать редактирование и удаление узла, а так же их вывод?
Узлы в списке будут? Тогда удаление - фильтрация списка так что бы фильтр не проходил только удаляемый элемент.
Редактирование - удаление и добавление нового варианта узла.
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
И что должен содержать второй модуль?
В первом модуле, вначале
Haskell
1
module MyFirstModule ( MyType1, MyType2, myFunction1,  myFunction2 ) where
Во втором
Haskell
1
2
3
module Main (main) where
 
import MyFirstModule ( MyType1, MyType2, myFunction1,  myFunction2 )
Имена файлов MyFirstModule.hs и Main.hs.

В первом всё кроме main.
1
Rylai_Crestfall
0 / 0 / 0
Регистрация: 12.04.2019
Сообщений: 3
12.04.2019, 18:01  [ТС] 4
Curry,

спасибо, немного разобралась)

MyFirstModule.hs
Haskell
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
module MyFirstModule (Session, getSession) where
 
data Session = Session {
host :: String,
address :: Int,
network :: String,
time :: Int
} deriving (Show)
 
getHost :: IO String
getHost = putStr "enter a name Host: " >> getLine
 
getAddress :: IO Int
getAddress = do
  putStr "enter Address: "
  str <- getLine
  case reads str of
    [] -> putStrLn "not a number, try again" >> getAddress
    ((a, _) : _) -> return a
 
getNetwork :: IO String
getNetwork = putStr "enter a name Network: " >> getLine
 
getTime :: IO Int
getTime = do
  putStr "enter Time: "
  str <- getLine
  case reads str of
    [] -> putStrLn "not a number, try again" >> getTime
    ((t, _) : _) -> return t
 
getSession :: IO Session
getSession = do
  putStrLn "Answer the following questions to create an session"
  h <- getHost
  a <- getAddress
  n <- getNetwork
  t <- getTime
  return (Session h a n t)
Main.hs
Haskell
1
2
3
4
5
6
7
8
9
module Main (main) where
 
import MyFirstModule (Session, getSession)
 
main :: IO ()
main = do
  putStrLn "First Session"
  p1 <- getSession
  putStrLn ("Session: " ++ show p1)
А не подскажете как можно организовать ввод адреса узла в формате (Int, Int, Int, Int)?
И как поместить p1 в список?
0
12.04.2019, 18:01
Curry
2952 / 2021 / 252
Регистрация: 01.06.2013
Сообщений: 4,409
Записей в блоге: 8
12.04.2019, 18:45 5
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
А не подскажете как можно организовать ввод адреса узла в формате (Int, Int, Int, Int)?
У вас много раз повторяется запрос на ввод числа с проверкой и повторным вводом в случае ошибки. Это стоит выделить в отдельную функцию. Назовём её ask, тогда
Haskell
1
2
3
4
5
6
7
getAddress :: IO (Int, Int, Int, Int)
getAddress = do
   a1 <- ask "Enter first number of address: "
   a2 <- ask "Enter  second number of address: "
   a3 <- ask "Enter third number of address: "
   a4 <- ask "Enter  fourth number of address: "
   return (a1,a2,a3,a4)
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
И как поместить p1 в список?
Например, ввести 5 сессий и сделать из них список
Haskell
1
2
3
4
5
6
import Control.Monad
 
-- ........
   lst <- forM [1..5] $ \n -> do
         putStrLn $ concat ["Enter session number ", show n]
         getSession
А вообще у вас вопросы уровня "который газ, который тормоз, и как мне выполнять разворот на нерегулируемом
перекрёстке". Прямо даже не знаю что отвечать. Если хотите сами что то делать, то, может, учебник почитать?
0
Rylai_Crestfall
0 / 0 / 0
Регистрация: 12.04.2019
Сообщений: 3
12.04.2019, 19:52  [ТС] 6
Curry,

Прошу прощения за то, что изначально ввела Вас в заблуждение. Я тупая как пенек с глазами, я вообще не знаю, что тут и как делать.
Мне нужно сдать эту лабораторную, чтобы получить зачет и забыть про этот, определенно, замечательный язык как про страшный сон.
Я вообще не вижу не единой ситуации в своей жизни, где я смогу даже хоть краем уха услышать название этого языка.
Но, поскольку я студент, моя жизненная позиция - если я сегодня кушала больше двух раз, то, возможно, меня приняли за бомжа и угостили едой. Поэтому у меня нет возможности оплатить решение задачи.
Не могли бы вы мне написать решение к этой, несомненно, простой задаче (в мире умных людей). Обещаю поставить свечку за Ваше здоровье. Спасибо.
0
korvin_
2707 / 1986 / 354
Регистрация: 28.04.2012
Сообщений: 6,778
12.04.2019, 19:54 7
Цитата Сообщение от Curry Посмотреть сообщение
абстрактный? И в чём заключается его абстрактность?
В том, что структура его значений не прозрачна и работать со значениями этого типа можно только посредством функций, определённых в его модуле?
0
Curry
2952 / 2021 / 252
Регистрация: 01.06.2013
Сообщений: 4,409
Записей в блоге: 8
12.04.2019, 20:30 8
Цитата Сообщение от korvin_ Посмотреть сообщение
В том, что структура его значений не прозрачна и работать со значениями этого типа можно только посредством функций, определённых в его модуле?
а ... ну да ... И правда, есть такое. Забыл что так называется.

Добавлено через 2 минуты
Цитата Сообщение от Rylai_Crestfall Посмотреть сообщение
Обещаю поставить свечку за Ваше здоровье.
Свечки тоже денег стоят. Нет, извините, я не возьмусь.
0
12.04.2019, 20:30
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.04.2019, 20:30

Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов?
Как сделать тип данных или уже есть такой тип данных который состоит из всех печатыемых символов?...

Абстрактный тип данных
Доброго времени суток! Помогите, пожалуйста, с заданием: Создать список произвольной организации....

абстрактный тип данных
надо написать на С++... разработать абстрактный тип данных :двусвязный циклический список. атд...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru