Алгоритмическое мышление при решении задач (на примере языка C#). Шамшев А.Б - 50 стр.

UptoLike

Составители: 

50
Задача 12 (1 способ решения): Из файла удалить слова-полиндромы.
Размышления о ходе решения задачи.
1. Для того, что бы можно было обрабатывать файл, необходимо знать его
имя. Пусть в этой задаче пользователь вводит имя файла с клавиатуры.
2. Логично предположить, что результат обработки файла надо записать в
другой файл, имя которого так
же неизвестно. Поэтому попросим
пользователя ввести и имя выходного файла.
3. Для обработки файла входной файл необходимо открыть на чтение, а
выходной файлна запись. При этом каждая из этих операций может
дать ошибку (например, пользователь ввел неверное имя файла).
Следовательно, надо предусмотреть такую возможность.
4. С файлами можно работать 2
способамичерез функции
File.ReadAllLines, File.WriteAllLines и через потоки.
5. В этом способе решения мы воспользуемся методами ReadAllLines и
WriteAllLines. Они возвращают (записывают) все содержимое файла.
Как следствие, возникает ограничение по использованиюими можно
пользоваться, если файл может целиком уместиться в оперативной
памяти компьютера. Будем считать, что это условие выполняется. Так
же следует отметить, что
для использования этих методов надо
подключить using File.IO в программе.
6. Текстовый файлмножество строк. Значит задача обработки файла
сводится к задаче обработки каждой строки в нем. Т. е. в псевдокоде
алгоритм обработки будет выглядеть следующим образом:
Получить все строки входного файла в массив
Создать массив для обработанных строк, размер которого равен изначальному
Для каждой строки файла
НачалоЦикла
Обработать текущую строку и результат записать в результирующий массив.
ОкончаниеЦикла
7. Задача обработки одной строки рассматривалась в предыдущих задачах.
Единственное отличиеусловие удаления слова. Сказать, что слово
является полиндромом, мы можем только после просмотра всего слова.
Если во время просмотра слова буквы не совпадут, то это слово не
является полиндромом. В начале мы должны сравнить первую и
последнюю букву, потом вторую
и предпоследнюю и т. д. Приведем
код класса для обработки одной строки.
class StringWorker {
public string str;
public bool needDelWord(string word) {
//убираем чувствительность к регистру
for (int i = 0; i < word.Length;i++ ) {
if (word[i] != word[word.Length - 1 - i]) {
return false;
}