- •Практикум на эвм Задачи для с#
- •Часть 1
- •Введение
- •Первая программа
- •Справка по c#
- •Основные типы данных
- •Простые типы данных
- •Модельная задача Операторы ввода, цикла. Вложение структур
- •Структура псевдокода
- •Реализация управляющих структур
- •Модельная задача Целые числа. Операторы for, while, if
- •Массивы
- •Модельная задача Задание массивов. Машинный ноль
- •Модельная задача Вложение управляющих структур
- •Процедуры и функции
- •Модельная задача Пример функции
- •Перегрузка функции
- •Передача массива в функцию
- •Векторы и матрицы
- •Модельная задача многомерные массивы, ввод из файла
- •Обработка символьной информации
- •Решение Найти самое длинное симметричное слово заданного предложения
- •Рекурсия
- •Решение Вычисление факториала целого положительного числа
- •Решение Рекурсивные функции. Работа со строками.
- •Решение Построить синтаксический анализатор для понятия скобки.
- •Форма отчета по лабораторной работе
- •Варианты для лабораторных работ
-
Решение Рекурсивные функции. Работа со строками.
Функция Ф преобразования вектора целых 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.
-
Построить синтаксический анализатор для понятия «предложение»:
предложение ::=
слово ::=
разделитель ::=
Математическая модель
Предложение является строкой состоящей из слов. Слова разделены одним или несколькими пробелами.
Нужно построить рекурсивные функции: Предложение, Слово и Разделитель. Для простоты примем, что буквы могут принадлежать только английскому алфавиту.
-
Построить синтаксический анализатор для понятия простое - выражение:
простое-выражение ::=
простой-идентефикатор ::= буква
знак-операции ::=
-
Построить синтаксический анализатор для понятия идентификатор:
идентификатор ::=
-
Построить синтаксический анализатор для понятия вещественное-число:
вещественное-число ::=
целое-без-знака ::= цифра{цифра}*
целое-число ::=
-
Построить синтаксический анализатор для понятия простое-логическое:
простое-логическое ::=
простой идентификатор ::= буква
знак-операции ::=
-
Написать программу, которая по заданному простому-логическому выражению (определение понятия содержится в формулировке предыдущей задачи), не содержащему вхождений простых идентификаторов, вычисляет и печатает значение этого выражения.
-
Построить синтаксический анализатор для понятия константное-выражение:
константное-выражение ::=
-
Написать программу, которая по заданному константному-выражению (определение понятия содержится в формулировке предыдущей задачи) вычисляет и печатает либо значение этого выражения, либо сообщение «при вычислении константного выражения получен промежуточный результат, превосходящий по модулю миллион».