Поясните пожалуйста код работы с массивом - C#
Формулировка задачи:
Доброго времени суток.
Объясните пожалуйста как работает код и зачем мы то или иное действие делаем.
Вот сама задача:
Найти количество элементов массива A={a[i]}, являющихся сте-пенями двойки (1, 2, 4…). Утроить все элементы, являющиеся степенями двойки.
Вот код:
static void quadrat(ref double[] vec, ref int size, ref int a, ref int k) { double step; for (int i = 0; i < size; i++) { step = vec[i]; while (step > 1) { step /= 2; } if (step == 1) { k++; size += 2; Array.Resize(ref vec, size); for (int j = (size - 1); j > i + 2; j--) { vec[j] = vec[j - 2]; } vec[i + 1] = vec[i]; vec[i + 2] = vec[i]; i += 2; } } } static void randa(ref double[] vec, int size) { Array.Resize(ref vec, size); Random m = new Random(); for (int j = 0; j < size; j++) vec[j] = m.Next(-size, size); } static void output_vector(double[] vec, ListBox lstbxMy) { lstbxMy.Items.Clear(); foreach (int el in vec) lstbxMy.Items.Add(el); } private void button1_Click(object sender, EventArgs e) { try { int a = 0; int k = 0; Random m = new Random(); int size = int.Parse(textBox1.Text); if (size <= 0) throw new Exception("Введите положительные числа"); randa(ref A, size); output_vector(A, listBox1); quadrat(ref A, ref size, ref a, ref k); textBox2.Text = k.ToString(); label7.Visible = true; textBox2.Visible = true; button3.Visible = true; } catch (FormatException) { MessageBox.Show("Введите числа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Stop); } catch (Exception exc) { MessageBox.Show(exc.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
Решение задачи: «Поясните пожалуйста код работы с массивом»
textual
Листинг программы
static void quadrat(ref double[] vec, ref int size, ref int a, ref int k) // Метод quadrat принимает ссылки(а не значения) аргументов - массив с элементами типа double(Числа с запятой) и ссылки на 3 аргумента типа int { double step; for (int i = 0; i < size; i++) // начинаем цикл - инициализируем i =0 и до тех пор пока i<size Выполняем код { step = vec[i]; // переменной step присваиваем значение элемента массива vec под номером i(т.е. сначала 0, потом 1, потом 2 и тд) while (step > 1) // до тех пор пока step>1 выполняем ... { step /= 2; // эту строчку, а именно делим step на 2 и присваиваем новое значение } if (step == 1) // если step равен 1 то ... { k++; //Приращение k = k+1 size += 2; // Array.Resize(ref vec, size); // Изменяем количество элементов массива до указанной величины, те до size for (int j = (size - 1); j > i + 2; j--) { vec[j] = vec[j - 2]; } vec[i + 1] = vec[i]; vec[i + 2] = vec[i]; i += 2; } } } static void randa(ref double[] vec, int size) // метод для генерации случайных чисел. принимает 2 аргумента { Array.Resize(ref vec, size); Random m = new Random(); // Создаем экземпляр класса Random (класс случайных чисел) for (int j = 0; j < size; j++) vec[j] = m.Next(-size, size); // Заполнение элемента массива vec случайным числом в интервале от -size до +size } static void output_vector(double[] vec, ListBox lstbxMy) { lstbxMy.Items.Clear(); foreach (int el in vec) lstbxMy.Items.Add(el); } private void button1_Click(object sender, EventArgs e) // клик по кнопке, запускающей программу { try // если все верно то делаем это ... { int a = 0; // присваиваем а значение 0 int k = 0; // и к значение 0 Random m = new Random(); // Создаем экземпляр класса Random int size = int.Parse(textBox1.Text); // Из текстового поля textBox1 берем написанное там значение, переводим из строки в число и присваиваем его size if (size <= 0) throw new Exception("Введите положительные числа"); // если size меньше или равен 0 то сработает исключение и вам выведется сообщение с текстом "Введите положительные числа" randa(ref A, size); // передача в метод randa аргументов output_vector(A, listBox1); // передача аргументов в метод output_vector quadrat(ref A, ref size, ref a, ref k); // и тут мы тоже передаем аргументы в метод :-) textBox2.Text = k.ToString(); // выводим в textBox2 значения к label7.Visible = true; // делаем метку видимой... textBox2.Visible = true; // и textBox тоже button3.Visible = true; // и кнопка теперь тоже видна } catch (FormatException) // Инициализирует новый экземпляр класса FormatException { MessageBox.Show("Введите числа", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Stop); // выводим сообщение об ошибке } catch (Exception exc) { MessageBox.Show(exc.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Stop); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д