Sem1_13_files_arrays

Содержание

Слайд 2

Задача 2

Разработать консольное приложение для управления файловой системой компьютера
Изучите работу предложенного кода

Задача 2 Разработать консольное приложение для управления файловой системой компьютера Изучите работу
и использованные методы
Проверьте работоспособность кода по всем, предложенным в меню командам
По необходимости доработайте программу (необходимо декомпозировать)
Код (https://repl.it/@Maksimenkova/ArrayFiles02)

Слайд 3

Задача 2

В предложенной далее программе разработан:
метод преобразования целых чисел в строку чисел,

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

Слайд 4

Задача 2

static Random rnd = new Random();
static char[] invalidPathChars = Path.GetInvalidPathChars();

Задача 2 static Random rnd = new Random(); static char[] invalidPathChars =
static string path = @"output.txt";
public static string TestDataToString(int nmbOfValues)
{
string dataToFile = string.Empty;
if (nmbOfValues < 0)
{
throw new ArgumentOutOfRangeException();
}
for (int i = 0; i < nmbOfValues; i++) // create data
{
dataToFile += rnd.Next(10).ToString() + " ";
}
return dataToFile;
}

Слайд 5

Задача 2

public static void PrintIntArrToConsole(int[] arr)
{
foreach (int i in arr)

Задача 2 public static void PrintIntArrToConsole(int[] arr) { foreach (int i in
Console.Write(i + " ");
}
//reading file with data
public static int[] GetDataFromFile(string path)
{
int[] data = null;
if (path.IndexOfAny(invalidPathChars) != -1 || File.Exists(path))
{
throw new FileNotFoundException();
}
string dataFromFile = File.ReadAllText(path);
string[] dataFromString = dataFromFile.Split(" ", StringSplitOptions.RemoveEmptyEntries);
data = new int[dataFromString.Length];
for (int i = 0; i < dataFromString.Length; i++)
{
data[i] = int.Parse(dataFromString[i]);
}
return data;
}

Слайд 6

Задача 2

public static void Main()
{
// TODO: Extract writting to a

Задача 2 public static void Main() { // TODO: Extract writting to
method
// writting file with data
if (path.IndexOfAny(invalidPathChars) == -1)
{
File.WriteAllText(path, TestDataToString(10));
}
int[] arr = GetDataFromFile(path);
PrintIntArrToConsole(arr);
}

Слайд 7

Задача 3

В проекте консольного приложения создать файл Data.txt и заполнить его случайными

Задача 3 В проекте консольного приложения создать файл Data.txt и заполнить его
целыми значениями из диапазона [10;100)
Записать данные в файл через один пробел, по пять в строку
Прочитать данные из этого файла и поместить их в целочисленный массив
По массиву создать два индексных массива, содержащих индексы элементов с чётными и нечётными значениями
После чего в основном массиве заменить нечётные числа нулями
Дополнительно декомпозировать предложенный код заготовки программы
Здесь и далее: не забудьте про обработку исключений, воспользуйтесь дополнительными проверками из кода задачи 2

Код заготовки (https://repl.it/@Maksimenkova/ArrayFiles01)

Слайд 8

Задача 3

static void Main(string[] args) {
string path = @"Data.txt";
// Создаем

Задача 3 static void Main(string[] args) { string path = @"Data.txt"; //
файл с данными
// Сейчас данные для записи вбиты в коде
// TODO1: сохранить в файл целые случайные значения из диапазона [10;100)
string createText = "10 20 30 40 50" + Environment.NewLine +
"60 70 80 90";
File.WriteAllText(path, createText, Encoding.UTF8);
// Open the file to read from
if (File.Exists(path)) {
string readText = File.ReadAllText(path);
string[] stringValues = readText.Split(' ');
int[] arr = StringArrayToIntArray(stringValues);
foreach(int i in arr) { Console.Write(i + " "); }
}
} // end of Main()

Слайд 9

Задача 3

// преобразование массива строк в массив целых чисел
public static int[]

Задача 3 // преобразование массива строк в массив целых чисел public static
StringArrayToIntArray(string[] str) {
int[] arr = null;
if (str.Length != 0) {
arr = new int[0];
foreach (string s in str) {
int tmp;
if (int.TryParse(s, out tmp)) {
Array.Resize(ref arr, arr.Length + 1);
arr[arr.Length - 1] = tmp;
}
} // end of foreach (string s in str)
}
return arr;
} // end of StringToIntArray()

// Красивая альтернатива
public static int[] StringArrayToIntArray(string[] str)
=> Array.ConvertAll(str, s => {
int.TryParse(s, out int tmp); return tmp; });

Слайд 10

Задача 4

У многих людей развился необычный страх - пунктумофобия - боязнь точек

Задача 4 У многих людей развился необычный страх - пунктумофобия - боязнь
в конце предложения.
Ваша задача не показывать точки в конце предложений при выводе на экран.
Написать программу, которая:
Генерирует случайным образом 6 предложений длиной от 20 до 50 символов (алфавит – все строчные символы кириллицы), заканчивающихся точкой.
Записывает предложения построчно (каждое предложение на отдельной строке файла) в текстовый файл dialog.txt в кодировке UTF-8, расположенный в папке с исполняемым файлом.
Выводит на экран то, что было записано в файл изначально.
Открывает полученный файл и выводит на экран построчно все предложения из него, удаляя точки в конце предложения.
Заготовка кода (https://repl.it/@Maksimenkova/ArrayFiles03)

Слайд 11

Задача 4

class Program {
static Random rand = new Random();
static void

Задача 4 class Program { static Random rand = new Random(); static
Main() {
// основные настройки
const string fileName = "dialog.txt";
Encoding enc = Encoding.Unicode;
const int linesCount = 6; // кол-во предложений
// Создаем файл на диске
File.WriteAllText(fileName, string.Empty, enc); // Создаём пустой файл.
Console.WriteLine("Переписка до форматирования:");
for (int i = 0; i < linesCount; i++) {
string message = string.Empty; // предложение
int length = rand.Next(20, 51); // Длина сообщения
for (int j = 0; j < length; j++) {

Слайд 12

Задача 4

message += (char)rand.Next('А', 'Я' + 1); // Посимвольное добавление букв

Задача 4 message += (char)rand.Next('А', 'Я' + 1); // Посимвольное добавление букв
в сообщение. "Ё" нет в диапазоне от А до Я!
}
message += "." + Environment.NewLine; // Добавляем в сообщение точку и перенос на следующую строку.
File.AppendAllText(fileName, message, enc); // Добавляем строку в файл.
Console.Write(message);
}
// читаем сформированный файл и обрабатываем предложения
string[] messages = File.ReadAllLines(fileName, enc); // Массив сообщений из переписки.
Console.WriteLine(Environment.NewLine + "Переписка после форматирования:");
foreach (string item in messages)
Console.WriteLine(item.Substring(0, item.Length - 1)); // Выводим сообщения из переписки без точек на экран.
}
}

Слайд 13

Задача 5: разделение строки по символам

string[] TestStrings = { "", "a b

Задача 5: разделение строки по символам string[] TestStrings = { "", "a
c", "Let it be", "All You Need Is Love" };
foreach (string str in TestStrings)
{
Console.WriteLine("Исходная строка: '" + str + "'");
string[] tmp = str.Split(' ');
// результат выведен без лишних пробелов
foreach (string s in tmp)
{
Console.Write(s);
}
Console.WriteLine();
// добавим индексы, чтобы "увидеть" элементы с пустыми строками
for (int i = 0; i < tmp.Length; i++)
{
Console.WriteLine(i + ": " + tmp[i]);
}
}

Слайд 14

Задача 6

На основе предложенного кода предыдущей задачи самостоятельно выполните чтение из файла

Задача 6 На основе предложенного кода предыдущей задачи самостоятельно выполните чтение из
строки, содержащей значения, разделённые точкой с запятой и выделите оттуда целые числа, разместив их в массиве.
Массив целых чисел вывести на экран;
Для массива целых чисел вычислить и вывести на экран среднее значение элементов (с точностью до трех знаков после десятичного разделителя).
Полученное среднее значение записать в два файла:
текстовый (в любой кодировке),
двоичный (в типе float).

Слайд 15

Задачи для самостоятельного решения

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

Задачи для самостоятельного решения Разработать методы чтения и записи в текстовый файл
кватратных матриц NxN (матрица сохраняется строкой, в которой значения разделены пробелами, а строки точкой с запятой). Метод чтения возвращает тип данных – двумерный массив (прямоугольный)
Разработать методы заполнения матриц по следующим правилам:
Предполагается, что ваш код обрабатывает исключения, некорректные входные данные и позволяет повторно перезапускать программу.
* Добавьте проверку существования файла на диске при повтороной работе с программой и для каждых новых данных созадавайте новый файл с другим именем, например, file1.txt, file2.txt
Имя файла: Sem1_13_files_arrays.pptx
Количество просмотров: 37
Количество скачиваний: 0