Скачиваний:
0
Добавлен:
31.05.2025
Размер:
1.37 Mб
Скачать

Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

Кафедра ИИСТ

отчет

по лабораторной работе №8

по дисциплине «Информатика»

Тема: «Функции»

Студент

Преподаватель

Беляев Ф.Я.

Санкт-Петербург

2019

Цель работы: написать три функции и понять их работу.

Задания:

1. Написать программу в которой реализовать следующие функции:

1.1. Написать функцию которая возвращает массив 10x10 символов состоящего из символов '0' и '1'. Для заполнения массива использовать генератор случайных чисел.

1.2. Функция записи в текстовый файл массива символов 10x10.

1.3. Функцию чтения из текстового файла массива символов 10x10.

2. В функции main() обеспечить проверку функций 1.1.-1.3.

Решение

Написать функцию которая возвращает массив 10x10 символов состоящего из символов '0' и '1'. Для заполнения массива использовать генератор случайных чисел.

Сначала я подключаю необходимые мне библиотеки: <conio.h>, <string.h> и <ctime>. Первая – для работы с записью/чтением файла, вторая – для работы со строками, третья – позволяет работать с системным временем, а это необходимо для генерации новых случайных значений без повторений при каждом запуске программы, что в будущем нам понадобится:

Далее я создал массив и функцию по заданию, используя rand() от 0 до 1, а также обнуление по времени:

Произошел вызов функции, а, значит, произошла запись; проверим через вывод:

Запись произошла. Всё работает по заданию.

Написать функцию записи в текстовый файл массива символов 10x10.

Для записи буду использовать функцию fopen(*имя файла*, mode), которая открывает файл, имя которого указано первым аргументом, и возвращает свя­занный с ним указатель. (!) Не забуду и про fclose() в конце, которая закрывает файл после того, как мы поработали с ним, чтобы он не висел в буфере. Тип операций, разрешенных над файлом, определяется аргументом mode. В нашем случае это “wt”, открывающий файл для записи:

Видно, что вторым параметром моя функция просит массив. Занесу сгенерированный ранее массив в качестве аргумента и проверю соответствие:

Соответствие имеется, значит запись проходит успешно и без ошибок.

Написать функцию чтения из текстового файла массива символов 10x10.

Для чтения воспользуюсь теми же функциями fopen(*имя файла*, mode) и fclose(), которые использовал и для записи с той лишь разницей, что аргумент mode будет “r”, для чтения файла. Использую для приема файла функцию fgets(), которая считывает символы из потока и сохраняет их в виде строки в параметр string  до тех пор, пока не наступит конец строки или пока не будет достигнут конец файла. Символ новой строки прекращает работу функции, но он считается допустимым символом, и поэтому он копируется в строку. Нулевой символ автоматически добавляется в строку после прочитанных символов, чтобы сигнализировать о конце строки. Именно поэтому цикл ниже работает 20 раз (за логичные, казалось бы, 10 раз цикл читает лишь половину файла, так как при добавлении символа новой строки цикл обрабатывает эту «псевдостроку» и не добегает до конца):

Проверка:

Код работает верно, без ошибок, с правильным чтением и записью, что показало совпадение данных при тесте.

В функции main() обеспечить проверку функций 1.1.-1.3.

Организую данную проверку через циклический интерфейс:

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

Вывод:

1. Написал программу в которой реализовал следующие функции:

1.1. Написал функцию которая возвращает массив 10x10 символов состоящего из символов '0' и '1'. Для заполнения массива использовал генератор случайных чисел. Сначала я подключаю необходимые мне библиотеки: <conio.h>, <string.h> и <ctime>. Далее я создал массив и функцию по заданию, используя rand() от 0 до 1, а также обнуление по времени. Прописав код, на скриншоте выше, выполнил задание по условию.

1.2. Написал функцию записи в текстовый файл массива символов 10x10. Для записи использовал функцию fopen(*имя файла*, mode), которая открывает файл, имя которого указано первым аргументом, и возвращает свя­занный с ним указатель. (!) Не забыл и про fclose() в конце, которая закрывает файл после того, как мы поработали с ним, чтобы он не висел в буфере. Тип операций, разрешенных над файлом, определяется аргументом mode. В нашем случае это “wt”, открывающий файл для записи.

1.3. Написал функцию чтения из текстового файла массива символов 10x10. Для чтения вопспользовался теми же функциями fopen(*имя файла*, mode) и fclose(), которые использовал и для записи с той лишь разницей, что аргумент mode будет “r”, для чтения файла. Использовал для приема файла функцию fgets(), которая считывает символы из потока и сохраняет их в виде строки в параметр string  до тех пор, пока не наступит конец строки или пока не будет достигнут конец файла. Символ новой строки прекращает работу функции, но он считается допустимым символом, и поэтому он копируется в строку. Нулевой символ автоматически добавляется в строку после прочитанных символов, чтобы сигнализировать о конце строки. Именно поэтому цикл ниже работает 20 раз (за логичные, казалось бы, 10 раз цикл читает лишь половину файла, так как при добавлении символа новой строки цикл обрабатывает эту «псевдостроку» и не добегает до конца).

2. В функции main() обеспечил проверку функций 1.1.-1.3 с помощью циклического интерфейса.

Соседние файлы в папке Лабы Беляев