Переписать класс одномерных массивов строк из C++ в C#

Узнай цену своей работы

Формулировка задачи:

Всем доброго времени суток, поступило задание переделать готовый код на с++ в код на с#, изучение данного языка началось на этой неделе и мягкого говоря я нулёвый, буду очень признателен помощи Условие: Составить описание класса одномерных массивов строк, каждая строка задается длиной и указателем на выделенную для нее память. Предусмотреть возмож* ность обращения к отдельным строкам массива по индексам, контроль выхода за пределы массивов, выполнения операций поэлементного сцепления двух массивов с образованием нового массива, слияния двух массивов с исключением повторяющихся элементов, вывод на экран элемента массива и всего массива. Написать программу, демонстрирующую работу с этим классом. Программа должна содержать меню, позволяющее осуществить проверку всех методов класса. вот код на с++
#include <iostream>
#include <conio.h>
#include <cstdio>
#include <iomanip>
#include <math.h>
#include <locale>
using namespace std;

class Massiv
{
    int *a, *d, n, min;
public:
    void Sozd();
    void Vvod_Sl();
    void Form(int n1, int n2);
    void Form_2(int n3, int n4);
    void Print();
    void Print_2(int number);
    void Print_3(int rec, int field);
};

void Massiv::Sozd() //Создание массива строк
{
    int m;
    cout << " Количество строк = "; cin >> n;
    int min = 0;
 
    for (int i = 0; i < n; i++)
 
    {
        d = (int* ) malloc (sizeof(int) *n *min);
        cout << " Количество элементов " << i + 1 << " в строке= ";
        cin >> m;
        *(d + i) = m;
 
        if (min < m) min = m;
 
    }
        a = (int*) malloc (sizeof(int) *n *min);    
}

void Massiv::Vvod_Sl()  // Ввод случайных чисел в массив строк
{
    Sozd();
 
    for (int i = 0; i < n; i++)
 
        for (int j = 0; j < *(d + i); j++)
 
        {
            *(a + i + j) = rand() % 100;
        }
}

void Massiv::Print()  //Вывод всех строк
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < *(d + i); j++)
        {
            cout << setw(6) << *(a + i + j);
        }
        cout << endl;
    }
}

void Massiv::Print_2(int number) //Вывод строк по индексу
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < *(d + i); j++)
        {
            if (i == number) cout << setw(6) << *(a + i + j);
        }
        cout << endl;
    }
}

void Massiv::Print_3(int rec, int field) //Ввывод конкретного елемента конкретной строки
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < *(d + i); j++)
        {
            if ((i == rec) && (j == field)) cout << "Даный элемент= " << setw(6) << *(a + i + j);
 
            else "Массив с такими даннымы не найден!";
 
        }
        cout << endl;
    }
}

void Massiv::Form(int n1, int n2) //Сцепление двух массивов
{
    int m1, m2, k, j, l, p;
    int c [20];
    m1 = *(d + n1);
    m2 = *(d + n2);
    int m3 = m1 + m2;
    k = 0;
 
    for (l = 0; l < m3; l++)
 
        if (l < m1)
 
        {
            c[l] = *(a + n1 + l);
            cout << setw(6) << c[l];
        }
 
        else if ((l >= m1) && (l < m3))
 
        {
            c[l] = *(a + n2 + k);
            cout << setw(6) << c[l];
            k++;
        }
}

void Massiv::Form_2(int n3, int n4)  //Слияние двух массивов
{
    int m1, m2, k, j, l, p, l1;
    int c[20], f[20];
    m1 = *(d + n3);
    m2 = *(d + n4);
    int m3 = m1 + m2;
    k = 0;
 
    for (l = 0; l < m3; l++)
 
    {
 
        if (l < m1)
 
        {
            c[l] = *(a + n3 + l);
        }
 
        else if ((l >= m1) && (l < m3))
 
        {
            c[l] = *(a + n4 + k);
            k++;
        }
    }
 
    l1 = 0;
    f[l1] = c[l1];
    cout << setw(6) << f[l1];
 
    for (p = 1; p < m3; p++)
 
        if (f[l1] != c[p])
 
        {
            l++;
            f[l1] = c[p];
            cout << setw(6) << f[l1];
        }
}

void main()
{
    setlocale(LC_ALL, "Russian");
    Massiv a, b;
    int number, punkt, rec, field, kol, n1, n2, n, n3, n4;
    cout << "1 - Создание массива "; cout << endl;
    cout << "2 - Вывод всех строк"; cout << endl;
    cout << "3 - Вывод строки по индексу"; cout << endl;
    cout << "4 - Сцепление двух массивов"; cout << endl;
    cout << "5 - Слияние двух массивов"; cout << endl;
    cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
    cout << "7 - Выход"; cout << endl;
    cout << "Выберете пункт в меню: "; cin >> punkt;

    while (punkt != 7) //Меню
    {
        switch (punkt)
        {
        case 1: {
            a.Vvod_Sl();
            cout << endl;
            a.Print();
            cout << endl;
            cout << "1 - Создание массива"; cout << endl;
            cout << "2 - Вывод всех строк"; cout << endl;
            cout << "3 - Вывод строки по индексу"; cout << endl;
            cout << "4 - Сцепление двух массивов"; cout << endl;
            cout << "5 - Слияние двух массивов"; cout << endl;
            cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
            cout << "7 - Выход"; cout << endl;
            cout << "Выберете пункт в меню: "; cin >> punkt;
        }
                break;

        case 2: {
            a.Print();
            cout << endl;
            cout << "1 - Создание массива"; cout << endl;
            cout << "2 - Вывод всех строк"; cout << endl;
            cout << "3 - Вывод строки по индексу"; cout << endl;
            cout << "4 - Сцепление двух массивов"; cout << endl;
            cout << "5 - Слияние двух массивов"; cout << endl;
            cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
            cout << "7 - Выход"; cout << endl;
            cout << "Выберете пункт в меню: "; cin >> punkt; }
                break;

        case 3: {
            cout << "Введите номер массива (нумерация начинается с 0!): "; cin >> number;
            cout << endl;
            a.Print_2(number);
            cout << "1 - Создание массива"; cout << endl;
            cout << "2 - Вывод всех строк"; cout << endl;
            cout << "3 - Вывод строки по индексу"; cout << endl;
            cout << "4 - Сцепление двух массивов"; cout << endl;
            cout << "5 - Слияние двух массивов"; cout << endl;
            cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
            cout << "7 - Выход"; cout << endl;
            cout << "Выберете пункт в меню: "; cin >> punkt;
        }
                break;

        case 4: {
            cout << "Введите номер 1-го массива (нумерация начинается с 0!!!): "; cin >> n1; cout << endl;
            cout << "Введите номер 2-го массива (нумерация начинается с 0!!!): "; cin >> n2; cout << endl;
            a.Form(n1, n2);
            cout << endl;
            cout << "1 - Создание массива"; cout << endl;
            cout << "2 - Вывод всех строк"; cout << endl;
            cout << "3 - Вывод строки по индексу"; cout << endl;
            cout << "4 - Сцепление двух массивов"; cout << endl;
            cout << "5 - Слияние двух массивов"; cout << endl;
            cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
            cout << "7 - Выход"; cout << endl;
            cout << "Выберете пункт в меню: "; cin >> punkt; }
                break;

        case 5: {
            cout << "Введите номер 1-го массива (нумерация начинаеться с 0!!!): "; cin >> n3; cout << endl;
            cout << "Введите номер 1-го массива (нумерация начинаеться с 0!!!): "; cin >> n4; cout << endl;
            a.Form_2(n3, n4);
            cout << endl;
            cout << "1 - Создание массива"; cout << endl;
            cout << "2 - Вывод всех строк"; cout << endl;
            cout << "3 - Вывод строки по индексу"; cout << endl;
            cout << "4 - Сцепление двух массивов"; cout << endl;
            cout << "5 - Слияние двух масивов"; cout << endl;
            cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
            cout << "7 - Выход"; cout << endl;
            cout << "Выберете пункт в меню: "; cin >> punkt; }
                break;

        case 6: {
            cout << "Введите номер строки массива(нумерацыия начинаеться с 0!): "; cin >> rec;
            cout << endl;
            cout << "Введите номер столбца: "; cin >> field;
            cout << endl;
            a.Print_3(rec, field);
            cout << "1 - Создание массива"; cout << endl;
            cout << "2 - Вывод всех строк"; cout << endl;
            cout << "3 - Вывод строки по индексу"; cout << endl;
            cout << "4 - Сцепление двух массивов"; cout << endl;
            cout << "5 - Слияние двух массивов"; cout << endl;
            cout << "6 - Вывод конкретного элемента конкретной строки"; cout << endl;
            cout << "7 - Выход"; cout << endl;
            cout << "Выберете пункт в меню: "; cin >> punkt; }
                break;
        case 7:
            break;
            system("pause");
        }
    }
}

Решение задачи: «Переписать класс одномерных массивов строк из C++ в C#»

textual
Листинг программы
class StringArray
{
    private string[] strings;
 
    public StringArray()
    { }
 
    public StringArray(int count)
    {
        strings = new string[count];
    }
 
    public string this[int index]
    {
        get { return strings[index]; }
        set { strings[index] = value; }
    }
 
    public char this[int stringIndex, int charIndex]
    {
        get { return strings[stringIndex][charIndex]; }
    }
 
    public static StringArray operator+(StringArray a, StringArray b)
    {
        StringArray newStrings = new StringArray();
        newStrings.strings = a.strings.Concat(b.strings).ToArray();
        return newStrings;
    }
 
    public StringArray Union(StringArray b)
    {
        StringArray newStrings = new StringArray();
        newStrings.strings = strings.Union(b.strings).ToArray();
        return newStrings;
    }
 
    public override string ToString()
    {
        return String.Join(", ", strings);
    }
}
 
class Program
{
    static void Main(string[] args)
    {
        StringArray a = new StringArray(3);
        a[0] = "one";
        a[1] = "two";
        a[2] = "three";
        StringArray b = new StringArray(4);
        b[0] = "two";
        b[1] = "three";
        b[2] = "four";
        b[3] = "five";
 
        Console.WriteLine("A: {0}", a);
        Console.WriteLine("B: {0}", b);
        Console.WriteLine("Concat: {0}", a+b);
        Console.WriteLine("Union: {0}", a.Union(b));
        Console.WriteLine("B[2]: {0}", b[2]);
        Console.WriteLine("B[2][2]: {0}", b[2, 2]);
 
        Console.ReadKey();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4 из 5
Похожие ответы