Переписать класс одномерных массивов строк из 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д