Поясните пожалуйста код работы с массивом - 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);
}
}