Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C# Задачи 1 сем 20110808.doc
Скачиваний:
35
Добавлен:
05.11.2018
Размер:
505.34 Кб
Скачать
    1. Решение Рекурсивные функции. Работа со строками.

Функция Ф преобразования вектора целых k определяется следующим образом:

Ф(α) =

Отметим, что функция Ф может удлинять вектор. Реализовать функцию Ф с помощью рекурсивной процедуры.

Примеры: Ф(1, 2, 3, 4, 5, 6, 7, 8, 9) = 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9;

Ф(1, 2, 3, 4, 5, 6, 7, 8) = 1, 2, 3, 4, 5, 6, 7, 8.

Математическая модель не приводится

//Программа преобразования вектора

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

namespace Program8._2

{

class Program

{

static void Main(string[] args)

{

try

{

string StrRes;

System.IO.StreamReader file = new System.IO.StreamReader(@"infile.txt");

StrRes = file.ReadLine(); // Чтение строки из файла

Console.WriteLine("The start vector is: " + StrRes);

StrRes = F(StrRes);

Console.WriteLine("The result is: " + StrRes);

Console.ReadKey();

}

catch (Exception e)

{

Console.WriteLine("The file could not be read:");

Console.WriteLine(e.Message);

Console.ReadKey();

}

}

static string F(string InStr) // Тело функции преобразования строки

{

string S, S1;

int mLength = InStr.Length; // Длина входной строки

int mHalf = mLength/2;

if (mLength <= 2)

return InStr;

if ((mLength % 2)!=0) // Нечетная длина строки

{

S = InStr.Substring(0, mHalf + 1); // Половина строки + средний элемент

S = F(S);

S1 = InStr.Substring(mHalf, mHalf + 1); // Средний элемент + вторая половина строки

S += F(S1); //суммирование строк

return S;

}

else // Четная длина строки

{

S = InStr.Substring(0, mHalf);

S = F(S);

S1 = InStr.Substring(mHalf, mHalf);

S += F(S1); //суммирование строк

return S;

}

}

}

}

Замечания по отладке программы

Первый прогон нужно выполнить с файлом 123. Для входа в функцию применить клавишу F11.

Если явно не прописывать путь доступа к файлу, то его необходимо поместить папку bin/Debug.

  1. Построить синтаксический анализатор для понятия «предложение»:

предложение ::=

слово ::=

разделитель ::=

Математическая модель

Предложение является строкой состоящей из слов. Слова разделены одним или несколькими пробелами.

Нужно построить рекурсивные функции: Предложение, Слово и Разделитель. Для простоты примем, что буквы могут принадлежать только английскому алфавиту.

  1. Построить синтаксический анализатор для понятия простое - выражение:

простое-выражение ::=

простой-идентефикатор ::= буква

знак-операции ::=

  1. Построить синтаксический анализатор для понятия идентификатор:

идентификатор ::=

  1. Построить синтаксический анализатор для понятия вещественное-число:

вещественное-число ::=

целое-без-знака ::= цифра{цифра}*

целое-число ::=

  1. Построить синтаксический анализатор для понятия простое-логическое:

простое-логическое ::=

простой идентификатор ::= буква

знак-операции ::=

  1. Написать программу, которая по заданному простому-логическому выражению (определение понятия содержится в формулировке предыдущей задачи), не содержащему вхождений простых идентификаторов, вычисляет и печатает значение этого выражения.

  2. Построить синтаксический анализатор для понятия константное-выражение:

константное-выражение ::=

  1. Написать программу, которая по заданному константному-выражению (определение понятия содержится в формулировке предыдущей задачи) вычисляет и печатает либо значение этого выражения, либо сообщение «при вычислении константного выражения получен промежуточный результат, превосходящий по модулю миллион».

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]