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