Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.87/15: Рейтинг темы: голосов - 15, средняя оценка - 4.87
0 / 0 / 0
Регистрация: 30.12.2018
Сообщений: 21
1

Обращение к классу (объясните как это работает )

30.12.2018, 14:43. Показов 2768. Ответов 10

Author24 — интернет-сервис помощи студентам
у меня есть 2 класса как мне из первого класса передать значения во второй класс
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
30.12.2018, 14:43
Ответы с готовыми решениями:

объясните как это работает
#include <iostream> #include <algorithm> using namespace std; long func (long * arr, int...

Объясните, как это работает?
Здравствуйте! Есть код $(document).ready(function() { $("#btnExport").click(function(e) { ...

Объясните как это работает
Разбирал чужие решения задачи на словари и возникли затруднения с пониманием пары строк. Вот...

объясните грамотно как это работает
1)int * arr = NULL; и int * arr = new int;(что означает new) 2)можно менять int * arr = NULL на...

10
228 / 165 / 110
Регистрация: 09.11.2015
Сообщений: 454
30.12.2018, 15:23 2
Andersen99, по-разному можно передать. Неплохо бы на код глянуть
0
Модератор
Эксперт .NET
15880 / 11026 / 2856
Регистрация: 21.04.2018
Сообщений: 32,396
Записей в блоге: 2
30.12.2018, 15:34 3
Цитата Сообщение от Andersen99 Посмотреть сообщение
у меня есть 2 класса как мне из первого класса передать значения во второй класс
Вариантов много.
И из Вашего объяснения, мне кажется, Вы не понимаете разницу между классами и объектами (экземплярами) этого класса.
Класс один, а его экземпляров может быть множество.
Поэтому разъясните.
Если Вы пишите именно о классе, то это значит Вы пишите о статических переменных и их значениях. Обратиться к статической переменной можно из любого места приложения по имени её класса.
Если Вам надо передать значение из экземпляра одного класса в экземпляр другого класса и этих экземпляров только по одному, то это тоже можно сделать через статические поля классов.
Если же экземпляров много, то тогда надо передавать между экземплярами или ссылку друг на друга (это можно сделать, допустим, в конструкторе), или создать, соответствующие, методы в классах (статические или динамические) через которые объекты смогут обращаться к друг другу.
0
0 / 0 / 0
Регистрация: 30.12.2018
Сообщений: 21
30.12.2018, 17:08  [ТС] 4
Цитата Сообщение от Ellizio Посмотреть сообщение
по-разному можно передать. Неплохо бы на код глянуть
там конечно коряво
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
class Program
    {
        public static void Main()
        {
            Console.WriteLine("1.Метод Виженера"+ "\n2.Метод Цезаря" + "\n3.Метод Гронсфельдa"+"\nВыберите метод шифрования:");
            int x = int.Parse(Console.ReadLine());
            //int x = int.Parse(Console.Read());
            switch (x)
            {
                case 1:
                    Console.WriteLine("Введите ключ:");
                    string keky = Console.ReadLine();
                    Console.WriteLine("\nВведите текст для шифрования:");
                    string text = Console.ReadLine();
 
                    break;
                case 2:
                    Console.WriteLine("Методещё не готов");
                    break;
               
            }
            Vigenera V = new Vigenera();
           
        }
    }
    class Vigenera
    {
        static void V(string text, string keky)
        {
            // Cчитываем из файла сообщения
            string m = text;
            string k = keky;
 
            int nomer; // Номер в алфавите
            int d; // Смещение
            string s; //Результат
            int j, f; // Переменная для циклов
            int t = 0; // Переменная для нумерации символов ключа.
 
            char[] massage = m.ToCharArray(); // Превращаем сообщение в массив символов.
            char[] key = k.ToCharArray(); // Превращаем ключ в массив символов.
 
            char[] alfavit = { 'а', 'б', 'в', 'г', 'д', 'е', 'ё', 'ж', 'з', 'и', 'й', 'к', 'л', 'м', 'н', 'о', 'п', 'р', 'с', 'т', 'у', 'ф', 'х', 'ц', 'ч', 'ш', 'щ', 'ъ', 'ы', 'ь', 'э', 'ю', 'я' };
 
            // Перебираем каждый символ сообщения
            for (int i = 0; i < massage.Length; i++)
            {
                // Ищем индекс буквы
                for (j = 0; j < alfavit.Length; j++)
                {
                    if (massage[i] == alfavit[j])
                    {
                        break;
                    }
                }
 
                if (j != 33) // Если j равно 33, значит символ не из алфавита
                {
                    nomer = j; // Индекс буквы
 
                    // Ключ закончился - начинаем сначала.
                    if (t > key.Length - 1) { t = 0; }
 
                    // Ищем индекс буквы ключа
                    for (f = 0; f < alfavit.Length; f++)
                    {
                        if (key[t] == alfavit[f])
                        {
                            break;
                        }
                    }
 
                    t++;
 
                    if (f != 33) // Если f равно 33, значит символ не из алфавита
                    {
                        d = nomer + f;
                    }
                    else
                    {
                        d = nomer;
                    }
 
                    // Проверяем, чтобы не вышли за пределы алфавита
                    if (d > 32)
                    {
                        d = d - 33;
                    }
 
                    massage[i] = alfavit[d]; // Меняем букву
                }
            }
 
            s = new string(massage); // Собираем символы обратно в строку.
                                     //File.WriteAllText("3.txt", s); // Записываем результат в файл.
            Console.WriteLine("текст закодирован:" + s);
 
        }
 
    }
 
}
Добавлено через 4 минуты
про статические переменные
0
1519 / 478 / 126
Регистрация: 09.01.2018
Сообщений: 1,244
30.12.2018, 17:21 5
Лучший ответ Сообщение было отмечено Andersen99 как решение

Решение

Об этом речь видимо?
C#
1
2
3
4
5
6
7
             case 1:
                    Console.WriteLine("Введите ключ:");
                    string keky = Console.ReadLine();
                    Console.WriteLine("\nВведите текст для шифрования:");
                    string text = Console.ReadLine();
                    
                    Vigenera.V(text, keky);
C#
1
2
3
4
5
6
7
    public class Vigenera
    {
        public static void V(string text, string keky) //make it public
        { 
            //....
        }
     }
1
0 / 0 / 0
Регистрация: 30.12.2018
Сообщений: 21
30.12.2018, 17:41  [ТС] 6
глупый конечно вопрос был ,но спасибо что ответили .теперь осталось ошибку найти в коде
0
0 / 0 / 0
Регистрация: 30.12.2018
Сообщений: 21
04.01.2019, 14:12  [ТС] 7
Может кто глянуть код в чём ошибка то ?завершает прогу аварийно[8208] dotnet.exe

Добавлено через 10 минут
Можете код посмотреть ?
0
Модератор
Эксперт .NET
15880 / 11026 / 2856
Регистрация: 21.04.2018
Сообщений: 32,396
Записей в блоге: 2
04.01.2019, 21:23 8
Цитата Сообщение от Andersen99 Посмотреть сообщение
Может кто глянуть код в чём ошибка то ?завершает прогу аварийно[8208] dotnet.exe
Какой код? Из поста #4 ?

Добавлено через 13 секунд
И где, на какой строке ошибка?
0
1519 / 478 / 126
Регистрация: 09.01.2018
Сообщений: 1,244
05.01.2019, 00:03 9
Цитата Сообщение от Andersen99 Посмотреть сообщение
Можете код посмотреть ?
Там миллион циклов. Можно немного попроще.

Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
    public class VigenereCipher
    {
        //russian alphabet
        const int alphabetLowerBound = 1072;
        const int alphabetUpperBound = 1103;
        const int alphabetLength = 32;
 
        public string Encrypt(string text, string key)
        {
            text = text.ToLower();
            key = key.ToLower();
            var res = string.Empty;
 
            for (int i = 0; i < text.Length; i++)
            {
                int encVal = text[i];
 
                //если символ входит в алфавит, иначе не шифруем
                if (encVal >= alphabetLowerBound && encVal <= alphabetUpperBound)
                {
                    int row = key[i % key.Length] - alphabetLowerBound;
 
                    //если символ ключа за пределами алфавита - читаем с последней строки
                    if (row < 0 || row > alphabetLength - 1)
                    {
                        row = alphabetLength - 1;
                    }
 
                    //смещение соответствует номеру строки. добавим смещение - получим нужный результат
                    encVal += row;
 
                    //если он выйдет за границы алфавита - пересчитаем его значение от начального символа алфавита
                    if (encVal > alphabetUpperBound)
                    {
                        encVal -= alphabetLength;
                    }
                }
                res += (char)encVal;
            }
            return res;
        }
 
        public string Decrypt(string text, string key)
        {
            text = text.ToLower();
            key = key.ToLower();
            var res = string.Empty;
 
            for (int i = 0; i < text.Length; i++)
            {
                int decVal = text[i];
 
                //если символ входит в алфавит, иначе не расшифровываем
                if (decVal >= alphabetLowerBound && decVal <= alphabetUpperBound)
                {
                    int row = key[i % key.Length] - alphabetLowerBound;
 
                    //если символ ключа за пределами алфавита - читаем с последней строки
                    if (row < 0 || row > alphabetLength - 1)
                    {
                        row = alphabetLength - 1;
                    }
 
                    //вычитаем смещение из зашифрованного символа - получим расшифрованный символ
                    decVal -= row;
 
                    //если он вышел за границы алфавита - пересчитаем его значение он конечного символа алфавита
                    if (decVal < alphabetLowerBound)
                    {
                        decVal += alphabetLength;
                    }
                }
                res += (char)decVal;
            }
            return res;
        }
    }


Кликните здесь для просмотра всего текста

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("1.Метод Виженера" + "\n2.Метод Цезаря" + "\n3.Метод Гронсфельдa" + "\nВыберите метод шифрования:");
 
            switch (Console.ReadKey(true).KeyChar)
            {
                case '1':
 
                    Console.WriteLine("Шифрование");
                    Console.WriteLine("\nВведите ключ:");
                    string key = Console.ReadLine();
 
                    Console.WriteLine("\nВведите текст для шифрования:");
                    string text = Console.ReadLine();
 
                    VigenereCipher vc = new VigenereCipher();
 
                    var res = vc.Encrypt(text, key);
                    Console.WriteLine(res);
 
                    Console.WriteLine("\nДешифрование");
                    Console.WriteLine("\nВведите ключ:");
                    key = Console.ReadLine();
 
                    Console.WriteLine("\nВведите текст для дешифрования:");
                    text = Console.ReadLine();
 
                    res = vc.Decrypt(text, key);
                    Console.WriteLine(res);
 
                    break;
 
                case '2':
                    Console.WriteLine("Метод ещё не готов");
                    break;
 
            }
 
            Console.ReadKey();
        }
    }


Кликните здесь для просмотра всего текста

Код
1.Метод Виженера
2.Метод Цезаря
3.Метод Гронсфельдa
Выберите метод шифрования:
Шифрование

Введите ключ:
киберфорум

Введите текст для шифрования:
помогите найти ошибку в коде
щцнууьах щксун вжшфцэ г ъвтх

Дешифрование

Введите ключ:
киберфорум

Введите текст для дешифрования:
щцнууьах щксун вжшфцэ г ъвтх
помогите найти ошибку в коде
1
0 / 0 / 0
Регистрация: 30.12.2018
Сообщений: 21
05.01.2019, 11:50  [ТС] 10
боюсь такой код я не объясню преподавателю ,ошибка где то в классе виженера он вроде до конца проходит всё но результат не выводит
0
1519 / 478 / 126
Регистрация: 09.01.2018
Сообщений: 1,244
05.01.2019, 17:32 11
Цитата Сообщение от Andersen99 Посмотреть сообщение
боюсь такой код я не объясню преподавателю
Честно, мне проще обяснить вам как работает код в моем примере, чем попытаться разобраться в вашем алгоритме для той же цели.

В основе лежит все та же таблица Вижинера (с нулевым смещением). Только составлять ее нет необходимости. По сути по таблице определяется смещение. Это самое смещение можно вычислить по номеру строки. Например, буква 't' и символ ключа 'd'. Если пройти по таблице к пересечению столбца 't' и строки 'd', то станет ясно, что там находится символ, отличающийся от 't' на смещение +3 (a-[0], b-[1], c-[2], d-[3]). И также в любой другой ячейке таблицы.

При этом, увеличивая символ на заданное смещение, имеется риск получить символ, находящийся за верхней границей алфавита. Например, в результате смещения получен символ 1104, но последний символ - это 1103 (буква 'я'). В таком случае, чтобы ряд продолжился от начального символа, 1104 должен стать символом 1072 (буква 'а'). Вычитаем из полученного символа длину алфавита (32) и получим нужный результат (1104 - 32 = 1072).

Итак, смещение мы теперь можем вычислить по ключу, не составляя таблицы. Для этого понадобится только номер строки. Номер строки можно вычислить из символа ключа, вычитая из него код первого символа алфавита. Например, символ ключа - 1074 ('в'). Первый символ алфавита это 1072. 1074 - 1072 = 2. Т.е. это строка № 2 (а-[0], б-[1], в-[2]). И смещение, следовательно тоже составляет 2.

Осталось определить символ ключа, соответствующий символу исходного текста. В оригинале для этого требуется записывать ключ до тех пор, пока его длина не станет равной длине исходного текста. В этом тоже нет необходимости. Символы ключа известны и все они циклически повторяются. Т.е. можно просто взять остаток от деления на длину ключа и таким образом вычислить какой символ ключа будет соответствовать индексу символа исходного текста. Например, индекс символа исходного текста - 10. Длина ключа - 6. Остаток от деления 10 на 6 составит 4. Значит это 4-й символ ключа.

0 1 2 3 4 5 6 7 8 9 10
0 1 2 3 4 5 0 1 2 3 4

Ну и все, остальное все в коде.
Определяем границы алфавита (1072 - 1103). Это десятичные коды символов русского алфавита а - я (UTF-8). В дальнейшем работаем с этими кодами, при необходимости преобразуем их в символы.
Определяем длину алфавита - это 32 (без буквы ё).
Приводим исходный текст и ключ к нижнему регистру.
Идем циклом по исходному тексту.
Выполняем проверку, на то что символ входит в заданный алфавит. Если не входит - не шифруем его, передаем как есть (если в тексте встретятся пробелы, запятые, двоеточия, цифры, в общем любые другие символы - оставляем их как есть).
Вычисляем индекс ключа, по индексу забираем символ ключа, вычисляем по нему номер строки (а по сути само смещение) и вычисляем итоговый символ.
Результат добавляем в строку res.
Возвращаем результат.

Добавлено через 25 минут
Да, может оказаться так, что символ ключа не входит в алфавит и соответственно нельзя определить номер строки (такой строки в таблице просто нет). На этот случай можно проверять ключ и отвергать в случае несоответствия. В примере я поступил проще - беру последнюю строку таблицы.
0
05.01.2019, 17:32
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
05.01.2019, 17:32
Помогаю со студенческими работами здесь

Объясните не понимаю как это работает
Мне нужно написать программу на турбо паскале\фри паскале, но это программа должна быть в...

Объясните пожалуйста, как работает это приложение
Когда я писал свой шифратор, мне предложили взять за основу этот шифратор с паролем, ничего не...

Уважаемые гуру! Объясните плиз как это работает?
Собственно говоря есть вот такая схема, как я понимаю из разряда стабилизаторов . На входе меняется...

Объясните как работает это программа, по строчно! Пожалуйста C++
Объясните пожалуйста программу построчно. Заранее спасибо


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Как работать с Kafka в Go (Golang)
bytestream 22.01.2025
Apache Kafka представляет собой распределенную платформу потоковой передачи данных, которая произвела революцию в области обработки событий и интеграции микросервисов. Эта система, изначально. . .
Как использовать RabbitMQ в Go (Golang)
bytestream 22.01.2025
RabbitMQ представляет собой надежный и широко используемый брокер сообщений, который играет ключевую роль в построении современных распределенных систем и микросервисной архитектуры. В основе работы. . .
Как преобразовать список списков в простой список в Python
bytestream 22.01.2025
При работе с Python разработчики часто сталкиваются с необходимостью обработки сложных структур данных, среди которых особое место занимают вложенные списки. Эти структуры представляют собой списки,. . .
Что такое GUID / UUID и как их создать
bytestream 22.01.2025
В мире разработки программного обеспечения существует постоянная потребность в уникальной идентификации объектов, записей и ресурсов. Эта задача становится особенно актуальной в распределенных. . .
Как добавить пустую директорию в репозиторий Git
bytestream 22.01.2025
При работе с системой контроля версий Git разработчики часто сталкиваются с ситуацией, когда необходимо сохранить пустую директорию в репозитории. Данная задача может показаться простой на первый. . .
Как валидировать адрес email в JavaScript
bytestream 22.01.2025
JavaScript, как основной язык веб-разработки, предоставляет разработчикам множество инструментов для реализации эффективной валидации email-адресов. От простых встроенных решений до сложных. . .
Как заменить все вхождения подстроки в JavaScript
bytestream 22.01.2025
Строки в JavaScript представляют собой неизменяемые последовательности символов, что делает их обработку особенно интересной с точки зрения оптимизации и выбора правильного подхода к решению задач. . . .
Управление версиями пакетов в Node.js. В чем разница между тильдой (~) и кареткой (^) в package.json
bytestream 22.01.2025
В современной разработке программного обеспечения управление версиями пакетов играет ключевую роль в обеспечении стабильности и надежности проектов. Node. js, как одна из самых популярных платформ для. . .
Аутентификация на сайте с помощью формы
bytestream 21.01.2025
В современном цифровом мире безопасная аутентификация становится краеугольным камнем защиты веб-приложений и пользовательских данных. Каждый день миллионы людей используют различные онлайн-сервисы,. . .
Как получить индекс в цикле for в Python
bytestream 21.01.2025
При работе с коллекциями данных в Python часто возникает необходимость не только получить доступ к элементам последовательности, но и знать их позицию в процессе итерации. Индексация в циклах. . .
Как определить адрес, из которого локальный репозиторий Git был клонирован
bytestream 21.01.2025
В современной разработке программного обеспечения система контроля версий Git стала неотъемлемой частью рабочего процесса. При работе с Git разработчики часто сталкиваются с необходимостью. . .
Какая разница между операторами == и === в сравнениях в JavaScript
bytestream 21.01.2025
В мире веб-разработки JavaScript занимает особое место как динамический язык программирования, предоставляющий разработчикам широкий набор инструментов для создания интерактивных веб-приложений. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru