Презентация Вывод строки символов на экран монитора. Ввод строки символов с клавиатуры. Создание и удаление файлов онлайн
На нашем сайте вы можете скачать и просмотреть онлайн доклад-презентацию на тему Вывод строки символов на экран монитора. Ввод строки символов с клавиатуры. Создание и удаление файлов абсолютно бесплатно. Урок-презентация на эту тему содержит всего 41 слайд. Все материалы созданы в программе PowerPoint и имеют формат ppt или же pptx. Материалы и темы для презентаций взяты из открытых источников и загружены их авторами, за качество и достоверность информации в них администрация сайта не отвечает, все права принадлежат их создателям. Если вы нашли то, что искали, отблагодарите авторов - поделитесь ссылкой в социальных сетях, а наш сайт добавьте в закладки.
Презентации » Устройства и комплектующие » Вывод строки символов на экран монитора. Ввод строки символов с клавиатуры. Создание и удаление файлов
Оцените!
Оцените презентацию от 1 до 5 баллов!
- Тип файла:ppt / pptx (powerpoint)
- Всего слайдов:41 слайд
- Для класса:1,2,3,4,5,6,7,8,9,10,11
- Размер файла:137.09 kB
- Просмотров:104
- Скачиваний:0
- Автор:неизвестен
Слайды и текст к этой презентации:
№3 слайд
![монады Монада ввода - вывода](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img2.jpg)
Содержание слайда: монады
Монада ввода - вывода используется в Haskell как связующее звено между значениями, присущими функциональному языку, и действиями, характеризующими операции ввода - вывода и императивное программирование в общем.
Порядок вычисления выражений в Haskell ограничен только зависимостями данных; реализация обладает значительной свободой в выборе этого порядка. Действия, тем не менее, должны быть упорядочены определенным образом для выполнения программы и, в частности, ввода - вывода, для того чтобы быть правильно интерпретированы.
В Haskell монада ввода - вывода предоставляет пользователю способ указать последовательное связывание действий, и реализация обязана соблюдать этот порядок.
№4 слайд
![монады Термин монада](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img3.jpg)
Содержание слайда: монады
Термин монада происходит из отрасли математики, известной как теория категорий. Однако, с точки зрения программиста Haskell , лучше думать о монаде как об абстрактном типе данных. В случае монады ввода - вывода абстрактными значениями являются упомянутые выше действия. Некоторые операции являются примитивными действиями, соответствующими обычным операциям ввода - вывода.
Специальные операции последовательно связывают действия, соответствующие последовательным операторам (таким как точка с запятой) в императивных языках.
№6 слайд
![Компоновка gt gt Метод gt gt](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img5.jpg)
Содержание слайда: Компоновка >>=
Метод (>>=) - это оператор последовательной компоновки (sequentially composition). Иногда его ещё называют оператором связывания (bind):
он связывает два IO-действия воедино, извлекая результат, возвращённый левым действием, и передавая его в качестве аргумента правому действию
(>>=) :: IO a -> (a -> IO b) -> IO b
Первый аргумент - это IO-действие, которое, выполнив свою работу, вернёт значение некоторого типа a. Второй аргумент - это функция, принимающая значение типа a в качестве аргумента и возвращающая IO-действие, которое, выполнив свою работу, вернёт значение некоторого типа b.
№9 слайд
![return obtainTextFromUser IO](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img8.jpg)
Содержание слайда: return
obtainTextFromUser :: IO String
obtainTextFromUser = do
putStrLn "Enter your text, please: "
firstText <- getLine
return $ "'" ++ firstText ++ "'
Функция getLine вернёт нам монаду, из которой оператор компоновки вытащит введённую пользователем строку. Эта строка поступит на вход λ-функции, которая в свою очередь создаст новую строку на основе строки, введённой пользователем, после чего - !!! - функция return вернёт эту новоиспечённую строку обратно в IO-монаду. Вытащили значение из монады, что-то с ним сделали, а потом вернули в монаду.
№10 слайд
![Пример IO в do нотации Пример](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img9.jpg)
Содержание слайда: Пример IO в do нотации:
Пример IO в do нотации:
main = do
putStrLn "Hello, what is your name?"
name <- getLine
putStrLn ("Hello " ++ name ++ "!")
или, в терминах bind, использование специальной формы:
main = putStrLn "Hello, what is your name?" >>
getLine >>= \name ->
putStrLn ("Hello " ++ name ++ "!")
или, очень примитивно, без специальной формы для bind:
main = putStrLn "Hello, what is your name?" >>= \x ->
getLine >>= \name ->
putStrLn ("Hello " ++ name ++ "!")
№15 слайд
![getLine import Data.Char main](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img14.jpg)
Содержание слайда: getLine
import Data.Char
main = do
putStrLn "What's your first name?"
firstName <- getLine
putStrLn "What's your last name?"
lastName <- getLine
let bigFirstName = map toUpper firstName
bigLastName = map toUpper lastName
putStrLn $ "hey " ++ bigFirstName ++ " " ++ bigLastName ++ ", how are you?"
№16 слайд
![программа считывает и](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img15.jpg)
Содержание слайда: программа считывает и
суммирует два числа типа Integer
import System.IO
main = do
hSetBuffering stdout NoBuffering
putStr "Введите новое целое число: "
x1 <- readNum
putStr "Введите другое целое число: "
x2 <- readNum
putStr ("Их сумма равна " ++ show (x1+x2) ++ "\n")
where readNum :: IO Integer
-- Указание сигнатуры типа позволяет избежать
-- исправления типов x1,x2 правилом по умолчанию
readNum = readLn
№29 слайд
![Копирование файлов import](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img28.jpg)
Содержание слайда: Копирование файлов
import System.IO
import Data.Char ( toUpper )
import System.Environment
main = do
[f1,f2] <- getArgs
h1 <- openFile f1 ReadMode
h2 <- openFile f2 WriteMode
copyFile h1 h2
hClose h1
hClose h2
copyFile h1 h2 = do
eof <- hIsEOF h1
if eof then return () else
do
c <- hGetChar h1
hPutChar h2 (toUpper c)
copyFile h1 h2
№30 слайд
![import System.IO import](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img29.jpg)
Содержание слайда: import System.IO
import System.IO
import System.Directory
import Data.List
main = do
handle <- openFile "todo.txt" ReadMode
(tempName, tempHandle) <- openTempFile "." "temp"
contents <- hGetContents handle
let todoTasks = lines contents
numberedTasks = zipWith (\n line -> show n ++ " - " ++ line) [0..] todoTasks
putStrLn "These are your TO-DO items:"
putStr $ unlines numberedTasks
putStrLn "Which one do you want to delete?"
numberString <- getLine
let number = read numberString
newTodoItems = delete (todoTasks !! number) todoTasks
hPutStr tempHandle $ unlines newTodoItems
hClose handle
hClose tempHandle
removeFile "todo.txt"
renameFile tempName "todo.txt"
№31 слайд
![View , Add , Remove import](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img30.jpg)
Содержание слайда: View , Add , Remove
import System.Environment
import System.Directory
import System.IO
import Data.List
dispatch :: [(String, [String] -> IO ())]
dispatch = [ ("add", add)
, ("view", view)
, ("remove", remove)
]
main = do (command:args) < getArgs
let (Just action) = lookup command dispatch
action args
№32 слайд
![View , Add , Remove add](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img31.jpg)
Содержание слайда: View , Add , Remove
add :: [String] -> IO ()
add [fileName, todoItem] = appendFile fileName (todoItem ++ "\n")
view :: [String] -> IO ()
view [fileName] = do
contents <- readFile fileName
let todoTasks = lines contents
numberedTasks = zipWith (\n line -> show n ++ " - " ++ line) [0..] todoTasks
putStr $ unlines numberedTasks
№33 слайд
![View , Add , Remove remove](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img32.jpg)
Содержание слайда: View , Add , Remove
remove :: [String] -> IO ()
remove [fileName, numberString] = do
handle <- openFile fileName ReadMode
(tempName, tempHandle) <- openTempFile "." "temp"
contents <- hGetContents handle
let number = read numberString
todoTasks = lines contents
newTodoItems = delete (todoTasks !! number) todoTasks
hPutStr tempHandle $ unlines newTodoItems
hClose handle
hClose tempHandle
removeFile fileName
renameFile tempName fileName
№34 слайд
![import System.Environment](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img33.jpg)
Содержание слайда: import System.Environment
import System.Environment
import System.Directory
import System.IO
import Data.List
dispatch :: [(String, [String] -> IO ())]
dispatch = [ ("add", add)
, ("view", view)
, ("remove", remove)
]
main = do
(command:args) <- getArgs
let (Just action) = lookup command dispatch
action args
add :: [String] -> IO ()
add [fileName, todoItem] = appendFile fileName (todoItem ++ "\n")
№35 слайд
![. todo view todo.txt . todo](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img34.jpg)
Содержание слайда: $ ./todo view todo.txt
$ ./todo view todo.txt
0 - Iron the dishes
1 - Dust the dog
2 - Take salad out of the oven
$ ./todo add todo.txt "Pick up children from drycleaners"
$ ./todo view todo.txt
0 - Iron the dishes
1 - Dust the dog
2 - Take salad out of the oven
3 - Pick up children from drycleaners
$ ./todo remove todo.txt 2
$ ./todo view todo.txt
0 - Iron the dishes
1 - Dust the dog
2 - Pick up children from drycleaners
№36 слайд
![Обработка исключений в монаде](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img35.jpg)
Содержание слайда: Обработка исключений в монаде
ввода - вывода
Монада ввода - вывода включает простую систему обработки исключений. Любая операция ввода - вывода может вызвать исключение вместо возвращения результата.
Исключения в монаде ввода - вывода представлены значениями типа IOError. Это абстрактный тип: его конструкторы скрыты от пользователя. Библиотека IO определяет функции, которые конструируют и изучают значения IOError . Единственной функцией Prelude, которая создает значение IOError, является userError. Пользовательские значения ошибок включают строку с описанием ошибки.
userError :: String -> IOError
Исключения вызываются и отлавливаются с помощью следующих функций:
ioError :: IOError -> IO a
catch :: IO a -> (IOError -> IO a) -> IO a
Функция ioError вызывает исключение; функция catch устанавливает обработчик, который получает любое исключение, вызванное действием, защищенным catch. Исключение отлавливается самым последним обработчиком, установленным catch. Эти обработчики не действуют выборочно: они отлавливают все исключения. Распространение исключения нужно явно обеспечить в обработчике путем повторного вызова любого нежелательного исключения. Например, в
f = catch g (\e -> if IO.isEOFError e then return [] else ioError e)
функция f возвращает [], когда в g возникает исключение конца файла, иначе исключение передается следующему внешнему обработчику. Функция isEOFError является частью библиотеки IO.
Когда исключение передается за пределы главной программы, система Haskell выводит связанное с ним значение IOError и выходит из программы.
Метод fail экземпляра IO класса Monad вызывает userError так:
instance Monad IO where
...bindings for return, (>>=), (>>)
fail s = ioError (userError s)
№37 слайд
![Ошибки ввода - вывода Ошибки](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img36.jpg)
Содержание слайда: Ошибки ввода - вывода
Ошибки типа IOError используются монадой ввода - вывода. Это абстрактный тип; библиотека обеспечивает функции для опроса и конструирования значений в IOError:
isAlreadyExistsError --- операция завершилась неуспешно, потому что один из ее аргументов уже существует.
isDoesNotExistError --- операция завершилась неуспешно, потому что один из ее аргументов не существует.
isAlreadyInUseError --- операция завершилась неуспешно, потому что один из ее аргументов является однопользовательским ресурсом, который уже используется (например, открытие одного и того же файла дважды для записи может вызвать эту ошибку).
isFullError --- операция завершилась неуспешно, потому что устройство заполнено.
isEOFError --- операция завершилась неуспешно, потому что был достигнут конец файла.
isIllegalOperation --- операция невозможна.
isPermissionError --- операция завершилась неуспешно, потому что пользователь не имеет достаточно привилегий операционной системы на выполнение этой операции.
isUserError --- определенное программистом значение ошибки вызвано использованием fail.
№38 слайд
![Ошибки ввода - вывода Все эти](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img37.jpg)
Содержание слайда: Ошибки ввода - вывода
Все эти функции возвращают значение типа Bool, которое равно True, если ее аргументом является соответствующий вид ошибки, и False иначе.
Любая функция, которая возвращает результат IO, может завершиться с ошибкой isIllegalOperation. Дополнительные ошибки, которые могут быть вызваны реализацией, перечислены после соответствующей операции. В некоторых случаях реализация не способна различить возможные причины ошибки. В этом случае она должна вернуть isIllegalOperation.
Имеются три дополнительные функции для того, чтобы получить информацию о значении ошибки, --- это ioeGetHandle, которая возвращает Just hdl, если значение ошибки относится к дескриптору hdl, и Nothing иначе; ioeGetFileName, которая возвращает Just имя, если значение ошибки относится к файлу имя, и Nothing иначе; и ioeGetErrorString, которая возвращает строку. Для "пользовательских" ошибок (которые вызваны использованием fail), строка, возвращенная ioeGetErrorString, является аргументом, который был передан в fail; для всех остальных ошибок строка зависит от реализации.
Функция try возвращает ошибку в вычислении, явно использующем тип Either .
Функция bracket охватывает обычный способ выделения памяти, вычисления и освобождения памяти, в котором шаг освобождения должен произойти даже в случае ошибки во время вычисления. Это аналогично try-catch-finally в Java.
№39 слайд
![Обработка ошибок import](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img38.jpg)
Содержание слайда: Обработка ошибок
import System.Environment
import System.IO
import System.Directory
main = do (fileName:_) <- getArgs
fileExists <- doesFileExist fileName
if fileExists
then do contents <- readFile fileName
putStrLn $ "The file has " ++ show (length (lines contents)) ++ " lines!"
else do putStrLn "The file doesn't exist!"
№40 слайд
![import System.Random import](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img39.jpg)
Содержание слайда: import System.Random
import System.Random
import Control.Monad(when)
main = do
gen <- getStdGen
askForNumber gen
askForNumber :: StdGen -> IO ()
askForNumber gen = do
let (randNumber, newGen) = randomR (1,10) gen :: (Int, StdGen)
putStr "Which number in the range from 1 to 10 am I thinking of? "
numberString <- getLine
when (not $ null numberString) $ do
let number = read numberString
if randNumber == number
then putStrLn "You are correct!"
else putStrLn $ "Sorry, it was " ++ show randNumber
askForNumber newGen
№41 слайд
![Дополнительная литература](/documents_6/1c6d8d44ff56e731b4f457219e5af131/img40.jpg)
Содержание слайда: Дополнительная литература
http://eax.me/monads/ О монадах
http://habrahabr.ru/post/80396/ Объяснение ввода-вывода в Haskell без монад
http://ru-lambda.livejournal.com/12467.html
http://channel9.msdn.com/Series/C9-Lectures-Erik-Meijer-Functional-Programming-Fundamentals/C9-Lectures-Dr-Erik-Meijer-Functional-Programming-Fundamentals-Chapter-7-of-13
http://haskell.ru/io.html
https://wiki.haskell.org/Ru/IO_Inside Система ввода/вывода
Скачать все slide презентации Вывод строки символов на экран монитора. Ввод строки символов с клавиатуры. Создание и удаление файлов одним архивом:
Похожие презентации
-
Символьные и строковые величины. Команды ввода и вывода
-
Файловый ввод/вывод в С
-
Организация файлового ввода/вывода. Лекция 23
-
Ввод-вывод - файлы. Программа: логические файлы. Операционная и файловая системы: физические файлы
-
Ввод - вывод. Символьные потоки
-
Строковый ввод-вывод. Работа с текстовыми файлами
-
Файловый ввод / вывод. Файловые системы языков С и С
-
Файловый ввод-вывод данных в Pascalе
-
Консольный ввод-вывод. Байтовые и символьные потоки (Java)
-
Язык программирования Паскаль. Организация ввода и вывода данных