|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
Категории: АстрономияБиология География Другие языки Интернет Информатика История Культура Литература Логика Математика Медицина Механика Охрана труда Педагогика Политика Право Психология Религия Риторика Социология Спорт Строительство Технология Транспорт Физика Философия Финансы Химия Экология Экономика Электроника |
После завершения работы удалить файлы с дискового носителяГосударственное образовательное учреждение высшего профессионального образования «Казанский национальный исследовательский технический университет им. А.Н.Туполева» Кафедра автоматизированных систем обработки информации и управления
Лабораторная работа № 1
НОСИТЕЛИ, ПАПКИ И ФАЙЛЫ. ПОСЛЕДОВАТЕЛЬНАЯ ОБРАБОТКА ФАЙЛОВ Вариант №12
Выполнил: студент группы 4209 Шильников Д. В.
Проверил: Суздальцев В.А.
Казань. 2013 Цель проведения лабораторной работы
Целью проведения лабораторной работы является привитие практических навыков определения объемных и временных характеристик файлов при последовательной обработке. Перед выполнением работы студент должен знать основы программирования на языке С#, методы обработки последовательных файлов и ознакомится с теоретическим материалом лекций соответствующего раздела дисциплины «Информатика».
Порядок выполнения лабораторной работы 1. Определить размер кластера носителя и количество секторов в кластере. Для этого создать файл в текстовом редакторе (Блокнот) небольшого размера (до 512 байтов). Определить свойства файла («Правая клавиша мыши» + «Свойства») и занести их в таблицу. Свойство: «На диске» определить размер кластера. Размер сектора считать равным 512 байт. Результаты прдоставить в форме таблицы (см. таблицу № 1). 2. Написать и отладить программу создания файла на языке С#. Программу подготовить для консольного режима. Использовать фрагменты примера программы из приложения 1. в отчет включить алгоритм программы (схема алгоритмы) и ее текст (C#). 3. Подготовить семь текстовых файлов в соответствии с заданием (см. таблица 2) лабораторной работы (файлы с записями фиксированной длины). Имена файлов должны включать номер файла, размер в кластерах, фамилию студента (например, f1_1000_Иванов.txt). Перед созданием оценить объем файлов и определить объем свободного места на носителе. Сделать вывод о возможности создания файлов. Результаты расчетов занести в таблицу (таблица 3). Перед созданием файлов на носителе предоставить расчеты преподавателю для проверки. Все расчеты оформлять в соответствии с требованиями подготовки научно-технических отчетов. Сделать выводы об объеме незаполненного пространства кластеров и определить процент заполнения дисковой памяти. 4. Определить характеристики полного имени подготовленных файлов: (полное имя, его длина, длина пути, резерв длины пути (максимальная длина пути: 240 символов), резерв длины имени файла). 5. Определить временные характеристики файлов, полученные при их создании (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов). 5.1. Время создания файла, среднее время добавления записи и создания кластера. 5.2. Построить графики изменения среднего времени добавления записи, и кластера от объема файла в записях и кластерах (использовать табличный процессор Excel).
6. Написать и отладить программу на языке С#, выполняющую следующие функции для файла: 6.1. Последовательное чтение записей файла. 6.2. Определение количества записей в файле. 6.3. Определение объема полезной информации в файле. 6.4. Определение длины каждой записи файла. 6.5. Определение смещения каждой записи в файле. 6.6. Определение времени чтения файла, включая время открытия и закрытия файлов. 6.7. Результаты экспериментов отобразить в таблице и на графиках (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов). 6.8. Сделать выводы о видах временных зависимостей. После завершения работы удалить файлы с дискового носителя. 7. Подготовить отчет о выполнении лабораторной работы. 8. Поготовится к теоретическому опросу контролиррующей системой. 9. Защитить отчет лабораторной работы
1. Определить размер кластера носителя и количество секторов в кластере. Результаты предоставить в форме таблицы.
Определим размер кластера носителя и количество секторов в кластере. Для этого создадим файл в текстовом редакторе небольшого размера. Для того чтобы определить размер кластера носителя, нужно нажать правой кнопкой мыши по созданному текстовому документу и нажать на Свойства. В появившемся окне в строке На диске:видно сколько памяти выделяется для хранения данного текстового документа на диске. В нашем случае размер текстового документа - 7 Байт, размер на диске – 4 Кб. Это значит, что размер кластера носителя – 4Кб или 4×1024=4096 Байт. Считая размер сектора равным 512 Байт, можно вычислить количество секторов в кластере. Для этого размер кластера разделим на размер сектора:4096 Байт: 512 Байт=8. Все результаты предоставим в форме таблицы:
2. Написать и отладить программу создания файла на языке С#. Программу подготовить для консольного режима. Использовать фрагменты примера программы из приложения 1. в отчет включить алгоритм программы (схема алгоритмы) и ее текст (C#).
Напишем и отладим программу создания файла на языке С# в консольном режиме, используя фрагменты примера программы из приложения 1. Создадим новый проект в Microsoft Visual Studio C# (MVS C#). Для начала запускаем программу MVS C# следующим образом: ПускВсе программы Microsoft Visual Studio 2008.Чтобы создать проект проделываем следующие операции: на панели быстрого доступа нажимаем на Fileдалее выбираем NewProject.В появившемся окне в левом столбце выбираем Visual С++, появится несколько строчек, выбираем Visual С#.В правом столбце выбираем режим консольного приложения, т.е. выбираем строчку ConsoleApplication.Далее появится новое окно, в котором нажимаем на Finish. Далее, используя навыки программирования, создаем программу, которая будет создавать новый текстовый документ. Текст программы:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
namespace Consol { class Program { static void Main(string[] args) { int i; string str; FileStream f1; const int n = 71040; f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Create); f1.Close();
f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Open, FileAccess.Write); StreamWriter fstr = new StreamWriter(f1); str = "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll"; Console.Write("Nagmite Enter"); Console.ReadLine(); for (i = 0; i < n; i++)
{ fstr.WriteLine(str); }
fstr.Close(); } } }
Данная программа создает в папке, в которой расположен сам проект, пустой текстовый документ «Fl_1110_Shilnikov_D.txt». Блок-схема алгоритма программы будет выглядеть следующим образом:
3. Подготовить семь текстовых файлов в соответствии с заданием (см. таблица 2) лабораторной работы (файлы с записями фиксированной длины). Имена файлов должны включать номер файла, размер в кластерах, фамилию студента (например, f1_1110_Shilnikov.txt). Перед созданием оценить объем файлов и определить объем свободного места на носителе. Сделать вывод о возможности создания файлов. Результаты расчетов занести в таблицу 3. Перед созданием файлов на носителе предоставить расчеты преподавателю для проверки. Все расчеты оформлять в соответствии с требованиями подготовки научно-технических отчетов. Сделать выводы об объеме незаполненного пространства кластеров и определить процент заполнения дисковой памяти. Таблица 2. Вариант задания
Подготовим семь текстовых файлов в соответствии с вариантом №12 лабораторной работы. Перед созданием оценим объем файлов и определим объем свободного места на носителе. Сделаем это следующим образом: Заходим в Мой компьютер, нажимаем правой кнопкой на диск С, в появившемся окне нажимаем на Свойства, находим две строчки – Занятои Свободно, запишем соответствующие значения этим параметрам: Занято:45 368 201 216 байт Свободно:19 644 379 136 байт Оценим объем файлов, которые нам предстоит создать. Зная, что на диске 1 кластер занимает 4096 байт, определим объем всех семи файлов по следующей формуле: V=k*b.
1 файл: 1110 × 4096 = 4546560 байт; 2 файл: 1310 × 4096 = 5365760 байт; 3 файл: 1510 × 4096 = 6184960 байт; 4 файл: 1710 × 4096 = 7004160 байт; 5 файл: 1910 × 4096 = 488960 байт; 6 файл: 2110 × 4096 = 8642560 байт; 7 файл: 2310 × 4096 = 9461760 байт.
Определим объем суммы всех семи файлов: 4546560 + 5365760 + 6184960 + 7004160 + 488960 + 8642560 + 9461760 = 49029120 байт. Т.к. объем свободного места на диске превышает объем суммы наших семи файлов (19 644 379 136 <49 029 120), то возможность создать эти файлы существует. Результаты расчетов занесем в таблицу 3:
Таблица 3. Объемные характеристики файлов
Определение процента заполнения дисковой памяти: Чтобы определить полный объем дисковой памяти необходимо сложить объем свободного места и объем занятого места на диске: Занято:45 368 201 216 байт Свободно:19 644 379 136 байт Полный объем дисковой памяти: 45 368 201 216 + 19 644 379 136 = 65 012 580 352 Байт. Чтобы определить процент заполнения дисковой памяти, необходимо разделить объем свободного места на диске на полный объем дисковой памяти и полученное частное умножить на 100%.
Процент свободного места: (19 644 379 136 / 65 012 580 352) × 100% = 0.302 100% = 30.2% 4. Определить характеристики полного имени подготовленных файлов: (полное имя, его длина, длина пути, резерв длины пути (максимальная длина пути: 240 символов), резерв длины имени файла).
Чтобы определить резерв длины пути файла, необходимо из максимально возможной длины пути файла вычесть длину пути файла. Определим характеристики полного имени подготовленных файлов:
Первый текстовый файл: Полное имя:fl_1110_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_Daniil\ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
Второй текстовый файл: Полное имя:f2_1310_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_Daniil\ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
Третий текстовый файл: Полное имя:f3_1510_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_ Daniil \ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
Четвертый текстовый файл: Полное имя:f4_1710_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_ Daniil \ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
Пятый текстовый файл: Полное имя:f5_1910_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_ Daniil \ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
Шестой текстовый файл: Полное имя:f6_2110_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_Daniil\ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
Седьмой текстовый файл: Полное имя:f7_2310_Shilnikov_D.txt Длина имени:23 символа Путь файла: sys:\work\4209\Shilnikov_ Daniil \ Длина пути файла:55 символов Резерв длины пути:240 – 32 = 208 символов
5. Определить временные характеристики файлов, полученные при их создании (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов). 1. Время создания файла, среднее время добавления записи и создания кластера. 2. Построить графики изменения среднего времени добавления записи, и кластера от объема файла в записях и кластерах (использовать табличный процессор Excel).
5.1 Для того чтобы определить время создания файла, необходимо дополнить текст нашей программы функциями подсчета времени, которые будут располагаться до и после цикла записи строк в файл. Разность этих значений функций и будет значением времени создания файла. Само это значение будет записываться в отдельный файл <show.txt>. Текст программы:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO;
namespace Consol { class Program { static void Main(string[] args) { FileInfo foutshow = new FileInfo("show.txt"); DateTime nowсn = new DateTime(); double tb = 0; double te = 0;
int i; string str; FileStream f1; const int n = 71040; f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Create); f1.Close();
f1 = new FileStream("Fl_1120_Shilnikov_D.txt", FileMode.Open, FileAccess.Write); StreamWriter fstr = new StreamWriter(f1); str = "llllllllllllllllllllllllllllllllllllllllllllllllllllllllllllll"; Console.Write("Nagmite Enter"); Console.ReadLine();
nowсn = DateTime.Now; tb = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.MilliSecond;
for (i = 0; i < n; i++)
{ fstr.WriteLine(str); }
nowсn = DateTime.Now; te = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.MilliSecond;
fstr.Close();
StreamWriter f = foutshow.CreateText(); f.WriteLine (string.Format("\"{0:000}\";\"{1:000}\";\"{2:0000}\"", tb, te, te - tb)); f.Close();
}
}
}
Проделаем данную операцию со всеми семи программами. Среднее время добавления записи можно найти по формуле: t=T/c, где t – это среднее время добавления, T – это время создания файла, с – это количество записей в файле. Проведем вычисления для всех файлов:
Для 1-го файла: 47 / 71040=0.00065 с; Для 2-го файла: 62 / 83840=0.00073 с; Для 3-го файла: 70 / 96640=0.00072 c; Для 4-го файла: 78 / 109440=0.0007 c; Для 5-го файла: 93 / 122240=0.00075 c; Для 6-го файла: 94 / 135040=0.00069 c; Для 7-го файла: 110 / 147840=0.00074 c.
Среднее время создания кластера можно найти по формуле: V=T/k, где V – это среднее время добавления записи, T – это время создания файла, k – это количество занимаемых кластеров файлом. Проведем вычисления для всех файлов:
Для 1-го файла: 47 / 1110=0.0419 с; Для 2-го файла: 62 / 1310=0.0469 с; Для 3-го файла: 70 / 1510=0.0460 c; Для 4-го файла: 78 / 1710=0.0453 c; Для 5-го файла: 93 / 1910=0.0484 c; Для 6-го файла: 94 / 2110=0.0443 c; Для 7-го файла: 110 / 2310=0.047 c.
Занесем все данные в таблицу 4:
Таблица №4. временные характеристики файлов
5.2. Чтобы построить график изменения среднего времени добавления записи, от объема файла в записях, необходимо скопировать значения среднего времени добавления записи и значения количества записей в рабочее поле табличного процессора Excel и по этим значениям построить график. Выполнив данные действия, получим график, изображенный на Рис.1:
Рис. 1. График изменения среднего времени добавления записи от объема файла в записях.
Чтобы построить график изменения среднего времени добавления кластера от объема файла в кластерах, необходимо скопировать значения среднего времени добавления кластера и значения количества кластеров в рабочее поле табличного процессора Excel и по этим значениям построить график. Выполнив данные действия, получим график, изображенный на рис.2:
Рис. 2. График изменения среднего времени добавления кластера от объема файла в кластерах.
6. Написать и отладить программу на языке С#, выполняющую следующие функции для файла: 1. Последовательное чтение записей файла. 2. Определение количества записей в файле. 3. Определение объем полезной информации в файле. 4. Определение длины каждой записи файла. 5. Определение смещения каждой записи в файле. 6. Определение времени чтения файла, включая время открытия и закрытия файлов. 7. Результаты экспериментов отобразить в таблице и на графиках (самостоятельно спроектировать таблицу для размещения результатов и разместить в ней результаты экспериментов). 8. Сделать выводы о видах временных зависимостей. Используя навыки программирования, напишем и отладим программу на языке С#, выполняющую следующие функции для файла: 1. Последовательное чтение записей файла. 2. Определение количества записей в файле. 3. Определение объем полезной информации в файле. 4. Определение длины каждой записи файла. 5. Определение смещения каждой записи в файле. 6. Определение времени чтения файла, включая время открытия и закрытия файлов. Текст программы:
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace Информатика { class Program { static void Main(string[] args) { int i, k = 0; int tb = 0; int te = 0; string s = null; int q = 0; int L = 0; int l = 0; int a = 0; FileStream f1; FileInfo fout = new FileInfo("Результат.txt"); StreamWriter fo = fout.CreateText(); DateTime nowсn = new DateTime(); nowсn = DateTime.Now; tb = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.Second; f1 = new FileStream("Fl_1110_Shilnikov_D.txt", FileMode.Open); do {
i = f1.ReadByte(); if (i != -1)
k++; } while (i != -1); f1.Close(); // Console.ReadLine(); StreamReader fi = new StreamReader("Fl_1110_Shilnikov_D.txt", Encoding.GetEncoding(1251));
while ((s = fi.ReadLine()) != null) { l = s.Length; L = L + l + 2; q++; fo.WriteLine(string.Format("\"{0:000}\";\"{1:0000}\"", a, l)); fo.WriteLine(string.Format("\"{0}", s)); a = L; } fo.WriteLine(string.Format("Количество записей: {0}", q)); fo.WriteLine(string.Format("Объем полезной информации: {0}", k - (q * 2))); fi.Close(); nowсn = DateTime.Now; te = nowсn.Hour * 3600 + nowсn.Minute * 60 + nowсn.Second; fo.WriteLine (string.Format("\"Время открытия:{0:00000}\";\"Время закрытиия:{1:00000}\";\"Время чтения файла:{2:000000}\"", tb, te, te - tb)); fo.Close();
} } }
Данная программа создает текстовый документ в котором записывается количество записей в файле, объем полезной информации в файле, длина каждой записи файла, смещение каждой записи в файле. время чтения файла, включая время открытия и закрытия файла. Применив данную программу ко всем семи нашим текстовым документам, создадим и заполним таблицу 4, отображающую результаты эксперимента:
Таблица №4. Результаты эксперимента.
Определим среднее время чтения записи, для того чтобы сравнить его со средним значением времени создания записи. Среднее время чтения записи можно найти по формуле: t=T/c, где t – это среднее время чтения записи, T – это время чтения файла, с – это количество записей в файле.
Проведем вычисления для всех файлов: Для 1-го файла: 549 / 71040=0.00014 с; Для 2-го файла: 752 / 83840=0.00016 с; Для 3-го файла: 818 / 96640=0.00018 c; Для 4-го файла: 1136 / 109440=0.0002 c; Для 5-го файла: 1065 / 122240=0.0002 c; Для 6-го файла: 1094 / 135040=0.00021 c; Для 7-го файла: 1137 / 147840=0.00021 c.
Построим график изменения среднего времени чтения записи от объема файла в записях, используя табличный процессор Excel, график изображен на рис.3:
Рис. 3. График изменения среднего времени чтения записи от объема файла в записях.
По результатам экспериментов, отображенных в таблицах и на графиках можно сделать вывод: Время записи данных в файл и время чтения данных из файла прямо пропорционально зависят от объема информации, которую требуется записать в файл или же прочитать из файла. |