close

Вход

Забыли?

вход по аккаунту

?

8

код для вставкиСкачать
Министерство образования и науки РФ
Тверской государственный технический университет
Кафедра электронных вычислительных машин
Отчет к лабораторной работе № 8
Обработка двоичных файлов Выполнил: студент группы
ВМКСС 1003
Зуев Д.В.
Принял: доцент кафедры ЭВМ
Борисов Н.А.
Тверь, 2010
Цель работы
Освоить работу с двоичными файлами. Создавать и использовать собственные структуры данных. В данной работе программа должна состоять из функций, выполняющих основные действия по обработке двоичного файла:
* Сознание файла путем добавления в него записей, структура которых определяется вариантом задания
* Вывод содержимого файла на экран
* Выполнение индивидуального задания на обработку файла согласно выданному преподавателем варианту задания
Главная функция программы должна выполнять вызов описанных выше функций в последовательности, определяемой пользователем, для чего организует цикл с запросом нужного действия.
Вариант задания на выполнение
Сложность №7. Вариант 65. Создать двоичный файл, содержащий информацию в виде прямоугольных матриц, содержащих целые числа в следующем порядке:
* Имя матрицы (текстовая строка) * Количество строк (М)
* Количество столбцов (N)
* Элементы матрицы (M*N чисел)
Для заданного имени матрицы найти ее в файле, удалить столбцы с нечетными номерами и записать ее в файл с другим именем
Алгоритм программы в виде псевдокода
Переменные всего класса: строка file; строка file_new
Начало структуры файл
строка название
число M
число N
двумерный массив A
fs1 = открыть файл с именем file
br1 = чтение из файла fs1
начало подпрограммы Заполнение()
Если символ есть
название = читать строку из файла
M = читать число из файл
N = читать число из файл
A = размерность M*N
Для i = 0; i < M; i++
Для j = 0; j < N; j++
A[i, j] = читать число из файл
Всё для j
Всё для i
Всё если
Иначе
название = ""
Всё иначе
Конец подпрограммы Заполнение()
Конец структуры файл
Начало программы
Вывод Если файл существует введите ДА иначе ничего: s = читать строку
если s ≠"ДА"
вызов подпрограммы Название_Файлов()
вызов подпрограммы Создание()
Всё если
иначе
вызов подпрограммы Название_Файлов()
Всё иначе
fs = открыть файл с именем file с доступом для чтения
br = чтение из файла fs
если результат подпрограммы Проверка(br) = false
Вывод Файл пуст!!!
Прервать программу
Всё если
Вызов подпрограммы Печать_Файла(br)
Закрыть br; закрыть fs
Вызов подпрограммы Поиск_Матрицы()
fs1 = открыть файл с именем file с доступом для чтения
br1 = чтение из файла fs1
если результат подпрограммы Проверка(br1) = false
Вывод Ничего не найдено
Прервать программу
Всё если
Вывод Файл записан
Вызов подпрограммы Печать_Файла(br1)
Закрыть br1; закрыть fs1
Конец программы
Начало подпрограммы Название_Файлов()
Вывод Введите название и расшерение файла для чтения: file = читать строку
Вывод Введите название и расшерение файла для записи: file_new = читать строку
конец подпрограммы Название_Файлов()
Начало подпрограммы Поиск_Матрицы()
Вывод Введите название матрицы для поиска: s = читать строку
fs1 = создать файл с именем file_new
bw = запись в файл fs1
Файл матрица = новая структура Файл()
пока матрица.название != ""
матрица.Заполнение()
если s = матрица.название
запись в bw матрица.название
запись в bw матрица.M
запись в bw матрица.N / 2
Для i = 0; i < матрица.M; i++
Для j = 1; j < матрица.N; j = j + 2
запись в bw матрица.A[i, j]
Всё для j
Всё для i
Всё если
Всё пока
Закрыть bw
Закрыть fs1
Конец подпрограммы Поиск_Матрицы()
Начало подпрограммы Проверка(br - чтение из файла)
Если символ есть
вернуть true
вернуть false
Конец подпрограммы Проверка(br - чтение из файла)
Начало подпрограммы Печать_Файла(br - чтение из файла)
Пока есть символ
Вывод Mатрица: + строка из файла
M = число из файла
N = число из файла
A = матрица размерностью M*N
для i = 0; i < M; i++
для j = 0; j < N; j++
A[i, j] = читать число из файла
Вывод A[i, j] + Tab
Всё для j
Перейти на следующую строку
Всё для i
Всё пока
Конец подпрограммы Печать_Файла(br - чтение из файла)
Начало подпрограммы Создание()
Генератор случайных чисел rnd
fs = создать файл с именем file
bw = запись в файл fs
s = null
пока правда
вывод Введите название матрицы(или нажмите ввод если введено всё): s = читать строку
если s ≠ ""
запись в bw s
вывод Введите количество строк:
M = чтение числа со строки
запись в bw M
вывод Введите количество столбцов: N = чтение числа со строки
запись в bw N
A = массив размерностью M*N
Для i = 0; i < M; i++
Для j = 0; j < N; j++
A[i, j] = rnd
запись в bw A[i, j]
Всё для j
Всё для i
Всё если
иначе
выход из цикла
всё иначе
всё пока
закрыть bw; закрыть fs
конец подпрограммы Создание()
Текст программы с комментариями
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace Двоичный_файл
{
class Program
{
static string file;
static string file_new;
struct Файл
{
public string название;
public int M;
public int N;
public int[,] A;
static FileStream fs1 = new FileStream(file, FileMode.Open, FileAccess.Read);
static BinaryReader br1 = new BinaryReader(fs1);
public void Заполнение()
{
if (br1.PeekChar() > -1)
{
название = br1.ReadString();
M = br1.ReadInt32();
N = br1.ReadInt32();
A = new int[M, N];
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
A[i, j] = br1.ReadInt32();
}
}
}
else
название = "";
}
}
static void Main(string[] args)
{
Console.Write("Если файл существует введите ДА иначе ничего: ");
string s = Console.ReadLine();
if (s != "ДА")
{
Название_Файлов();
Создание();
}
else
Название_Файлов();
FileStream fs = new FileStream(file, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fs);
if (Проверка(br) == false)
{
Console.WriteLine("Файл пуст!!!");
return;
}
Печать_Файла(br);
br.Close(); fs.Close();
Поиск_Матрицы();
FileStream fs1 = new FileStream(file_new, FileMode.Open, FileAccess.Read);
BinaryReader br1 = new BinaryReader(fs1);
if (Проверка(br1) == false)
{
Console.WriteLine("Ничего не найдено");
return;
}
Console.WriteLine("Файл записан");
Печать_Файла(br1);
br1.Close();
fs1.Close();
}
static void Название_Файлов()
{
Console.Write("Введите название и расшерение файла для чтения: ");
file = Console.ReadLine();
Console.Write("Введите название и расшерение файла для записи: ");
file_new = Console.ReadLine();
}
private static void Поиск_Матрицы()
{
Console.Write("Введите название матрицы для поиска: ");
string s = Console.ReadLine();
FileStream fs1 = new FileStream(file_new, FileMode.Create, FileAccess.Write);
BinaryWriter bw = new BinaryWriter(fs1);
Файл матрица = new Файл();
while (матрица.название != "")
{
матрица.Заполнение();
if (s == матрица.название)
{
bw.Write(матрица.название);
bw.Write(матрица.M);
bw.Write(матрица.N / 2);
for (int i = 0; i < матрица.M; i++)
{
for (int j = 1; j < матрица.N; j = j + 2)
{
bw.Write(матрица.A[i, j]);
}
}
}
}
bw.Close();
fs1.Close();
}
private static bool Проверка(BinaryReader br)
{
if (br.PeekChar() > -1)
return true;
return false;
}
static void Печать_Файла(BinaryReader br)
{
while (br.PeekChar() > -1)
{
Console.WriteLine("Mатрица: " + br.ReadString());
int M = br.ReadInt32();
int N = br.ReadInt32();
int[,] A = new int[M, N];
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
A[i, j] = br.ReadInt32();
Console.Write(A[i, j] + "\t");
}
Console.WriteLine();
}
}
}
static void Создание()
{
Random rnd = new Random();
FileStream fs = new FileStream(file, FileMode.Create);
BinaryWriter bw = new BinaryWriter(fs);
string s = null;
while (true)
{
Console.Write("Введите название матрицы(или нажмите ввод если введено всё): ");
s = Console.ReadLine();
if (s != "")
{
bw.Write(s);
Console.Write("Введите количество строк: ");
int M = Convert.ToInt32(Console.ReadLine());
bw.Write(M);
Console.Write("Введите количество столбцов: ");
int N = Convert.ToInt32(Console.ReadLine());
bw.Write(N);
int[,] A = new int[M, N];
for (int i = 0; i < M; i++)
{
for (int j = 0; j < N; j++)
{
A[i, j] = rnd.Next(-12, 23);
bw.Write(A[i, j]);
}
}
}
else
break;
}
bw.Close();
fs.Close();
}
}
}
Результаты выполнения программы
ФИО: Зуев Дмитрий Валерьевич Группа: ВМКСС 1003
Номер попытки:Дата сдачи:Дней от срока сдачи:Уровень сложности:
КритерийЗамечания1Соответствие заданию2Оформление отчета3Описание алгоритма4Качество алгоритма5Качество исходного текста6Надежность программы7Стилистика кода
Подпись: __________________
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Линия отрыва - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ФИО: Зуев Дмитрий Валерьевич Группа: ВМКСС 1003
Номер попытки:Дата сдачи:Дней от срока сдачи:Уровень сложности:
КритерийЗамечания1Соответствие заданию2Оформление отчета3Описание алгоритма4Качество алгоритма5Качество исходного текста6Надежность программы7Стилистика кода
Подпись: __________________
Документ
Категория
Рефераты
Просмотров
17
Размер файла
179 Кб
Теги
1/--страниц
Пожаловаться на содержимое документа