Вы находитесь на странице: 1из 11

Ответы к лабе 2

using System;

namespace Cube
{
class Program
{
static void Main()
{
Console.Write("Введите объем куба: ");
double v = double.Parse(Console.ReadLine());

double edgeLength = Math.Pow(v, 1.0 / 3.0);


Console.WriteLine("Длина ребра куба: " + edgeLength);
}
}
}
При запуске программы пользователю будет предложено ввести объем куба (v). Затем
программа использует формулу edgeLength = v^(1/3), где ^ обозначает возведение в
степень, чтобы вычислить длину ребра куба. Результат выводится на экран.

using System;

namespace SumOfDigits
{
class Program
{
static void Main()
{
Console.Write("Введите двузначное число: ");
int number = int.Parse(Console.ReadLine());

int tensDigit = number / 10;


int onesDigit = number % 10;

int sumOfDigits = tensDigit + onesDigit;

bool isSumOdd = sumOfDigits % 2 != 0;

Console.WriteLine("Сумма цифр является нечетной: " + isSumOdd);


}
}
}
При запуске программы пользователю будет предложено ввести двузначное число. Затем
программа разделяет число на десятки и единицы, вычисляет сумму цифр и проверяет,
является ли эта сумма нечетной. Результат (true или false) выводится на экран.
Ответы на 3 лабу
В языке C# составные операторы циклов (циклические конструкции) организуются с
помощью фигурных скобок {}. Они используются для группировки последовательности
операторов, которые должны выполняться многократно внутри цикла.
Пример использования составного оператора в цикле for:
csharp
Copy code
for (int i = 0; i < 5; i++)
{
// Операторы, которые выполняются на каждой итерации цикла
Console.WriteLine("Итерация: " + i);
}
Вложенные циклы в языке C# организуются путем размещения одного цикла внутри
другого цикла. Таким образом, внутренний цикл будет выполнен полное количество
итераций для каждой итерации внешнего цикла.
Пример вложенных циклов:
csharp
Copy code
for (int i = 1; i <= 3; i++)
{
for (int j = 1; j <= 3; j++)
{
Console.WriteLine("Внешний цикл: " + i + ", Внутренний цикл: " + j);
}
}
Зацикливание при использовании оператора цикла с предусловием (while) может
произойти, если условие цикла всегда остается истинным и нет механизма для его
изменения внутри цикла. Например:
csharp
Copy code
while (true)
{
// Бесконечный цикл
}
Зацикливание при использовании оператора цикла с постусловием (do-while) может
произойти, если условие цикла всегда остается истинным, и нет механизма для его
изменения внутри цикла. Например:
csharp
Copy code
do
{
// Бесконечный цикл
} while (true);
Оператор цикла с параметром (цикл for) требует три условия для своей работы:
инициализация, проверка условия и обновление переменной управления циклом.
Например:
csharp
Copy code
for (int i = 0; i < 5; i++)
{
// Операторы, которые выполняются на каждой итерации цикла
}
Префиксное инкрементирование и декрементирование (++i и --i) выполняются
непосредственно перед использованием значения переменной. Постфиксное
инкрементирование и декрементирование (i++ и i--) выполняются после использования
значения переменной.
Различие между префиксным и постфиксным инкрементированием и
декрементированием в операторах цикла заключается в том, когда происходит
обновление значения переменной управления циклом.
Пример:
csharp
Copy code
int i = 0;
Console.WriteLine(++i); // Префиксный инкремент: значение i станет 1, затем будет
выведено на экран
Console.WriteLine(i++); // Постфиксный инкремент: значение i (1) будет выведено на
экран, затем увеличится на 1
В языке C# существует шесть операторов отношения:
== (равно)
!= (не равно)
< (меньше)
> (больше)
<= (меньше или равно)
>= (больше или равно)
Операторы цикла while и for являются взаимозаменяемыми. Любой цикл for может быть
переписан с использованием цикла while и наоборот. Например:
csharp
Copy code
// Цикл for
for (int i = 0; i < 5; i++)
{
// Операторы, которые выполняются на каждой итерации цикла
}

// Эквивалентный цикл while


int i = 0;
while (i < 5)
{
// Операторы, которые выполняются на каждой итерации цикла
i++;
}
Оба цикла с предусловием (например, while) и с постусловием (например, do-while)
выполняются, пока условие истинно. Однако основное различие заключается в том, что
цикл с предусловием проверяет условие перед каждой итерацией и может вообще не
выполнить ни одной итерации, если условие изначально ложно. С другой стороны, цикл с
постусловием проверяет условие после выполнения каждой итерации и гарантирует
выполнение хотя бы одной итерации перед проверкой условия.
using System;

namespace Seasons
{
class Program
{
static void Main()
{
Console.Write("Введите первую букву времени года (Весна - В, Лето - Л, Осень - О,
Зима - З): ");
char season = char.ToUpper(Console.ReadKey().KeyChar);
Console.WriteLine();

switch (season)
{
case 'В':
Console.WriteLine("Месяцы весны: Март, Апрель, Май");
break;
case 'Л':
Console.WriteLine("Месяцы лета: Июнь, Июль, Август");
break;
case 'О':
Console.WriteLine("Месяцы осени: Сентябрь, Октябрь, Ноябрь");
break;
case 'З':
Console.WriteLine("Месяцы зимы: Декабрь, Январь, Февраль");
break;
default:
Console.WriteLine("Введена некорректная буква времени года.");
break;
}
}
}
}
При запуске программы пользователю будет предложено ввести первую букву времени
года (В, Л, О или З). Затем программа с использованием оператора switch проверяет
введенную букву и выводит соответствующие этому времени года месяцы на экран. Если
введена некорректная буква времени года, программа выведет соответствующее
сообщение об ошибке.

Ответы на лабу 4
using System;

namespace AlKhwarizmi
{
class Program
{
static void Main()
{
int targetNumber = 10;
int limit = (int)Math.Sqrt(targetNumber);

bool solutionFound = false;


int firstNumber = 1;

while (firstNumber <= limit)


{
int secondNumber = targetNumber - (firstNumber * firstNumber);

if (Math.Sqrt(secondNumber) % 1 == 0)
{
int squareRoot = (int)Math.Sqrt(secondNumber);
Console.WriteLine("Разложение числа {0} на два слагаемых: {1}^2 + {2}^2",
targetNumber, firstNumber, squareRoot);
solutionFound = true;
break;
}

firstNumber++;
}

if (!solutionFound)
{
Console.WriteLine("Не удалось найти разложение числа {0} на два слагаемых с
суммой квадратов равной {1}", targetNumber, targetNumber);
}
}
}
}
В этой программе мы устанавливаем целевое число targetNumber равным 10 и
инициализируем переменную limit как корень из целевого числа. Затем мы используем
цикл while для перебора возможных значений первого слагаемого от 1 до limit.

Для каждого значения первого слагаемого мы вычисляем второе слагаемое как разность
между целевым числом и квадратом первого слагаемого. Затем мы проверяем, является
ли квадратный корень второго слагаемого целым числом, используя условие
Math.Sqrt(secondNumber) % 1 == 0. Если условие выполняется, мы выводим разложение
числа на экран.

Если в ходе перебора значений первого слагаемого не удалось найти разложение с


заданными условиями, выводится сообщение о том, что разложение не найдено.
Оператор while является одним из операторов цикла в языке программирования C#. Он
позволяет выполнять блок кода повторно до тех пор, пока определенное условие
истинно. Синтаксис оператора while выглядит следующим образом:

csharp
Copy code
while (условие)
{
// Блок кода, который будет выполняться, пока условие истинно
}
Работа оператора while заключается в следующем:

Выполняется проверка условия.


Если условие истинно, блок кода внутри while выполняется.
После выполнения блока кода снова выполняется проверка условия.
Если условие все еще истинно, блок кода выполняется снова.
Этот процесс повторяется до тех пор, пока условие не станет ложным.
Оператор while обычно используется в случаях, когда необходимо повторять выполнение
блока кода до достижения определенного условия. Примеры применения оператора
while в программах включают:

Считывание данных из ввода пользователя до тех пор, пока не будет введен


определенный символ или значение.
Обработка элементов коллекции до тех пор, пока не будут выполнены определенные
условия.
Выполнение итераций по числовому ряду, пока не будет достигнуто определенное
значение.
Пример использования оператора while для вывода чисел от 1 до 5:

csharp
Copy code
int i = 1;
while (i <= 5)
{
Console.WriteLine(i);
i++;
}
В этом примере переменная i инициализируется значением 1. Затем с помощью
оператора while происходит повторение блока кода до тех пор, пока i меньше или равно
5. На каждой итерации число выводится на экран, а затем значение i увеличивается на 1. В
результате на экране появится следующий вывод:

Copy code
1
2
3
4
5
Оператор while предоставляет гибкость и контроль над выполнением цикла на основе
условия. Однако необходимо быть внимательным, чтобы избежать бесконечных циклов,
когда условие никогда не станет ложным. В таких случаях программа будет выполняться
бесконечно и может привести к зависанию или некорректным результатам.

Ответ на лабу 6
int[] numbers = { 10, 25, 30, 40, 50, 15, 35 };

foreach (int number in numbers)


{
if (number > 20 && number < 50)
{
Console.WriteLine(number);
}
}
В этом примере у нас есть массив numbers, содержащий несколько целых чисел. Мы
используем цикл foreach, чтобы перебрать все элементы массива. Внутри цикла мы
проверяем, удовлетворяет ли текущий элемент условию (больше 20 и меньше 50). Если
условие выполняется, мы выводим число на экран с помощью метода Console.WriteLine().

В результате на экране будут выведены все числа из массива numbers, которые больше 20
и меньше 50:

Copy code
25
30
40
35
Обратите внимание, что элементы массива будут выводиться в том порядке, в котором
они следуют в массиве, так как цикл foreach автоматически проходит по всем элементам
массива в порядке их расположения.

Ответ на лабу 7
int[] numbers = { 10, 30, 20, 40, 50, 30 };
int maxIndex = 0;

for (int i = 1; i < numbers.Length; i++)


{
if (numbers[i] > numbers[maxIndex])
{
maxIndex = i;
}
}

Console.WriteLine("Номер первого максимального элемента: " + maxIndex);


В данном примере у нас есть массив numbers, содержащий целые числа. Мы
инициализируем переменную maxIndex значением 0, предполагая, что первый элемент
массива является максимальным.

Затем мы используем цикл for для прохода по остальным элементам массива, начиная со
второго элемента (индекс 1). Внутри цикла мы сравниваем текущий элемент с элементом,
находящимся под индексом maxIndex. Если текущий элемент больше, мы обновляем
значение maxIndex на индекс текущего элемента.

По завершении цикла мы выводим на экран значение maxIndex, которое будет содержать


номер первого максимального элемента в массиве.

В результате выполнения приведенного кода будет выведено:

Copy code
Номер первого максимального элемента: 4
Это означает, что первый максимальный элемент находится под индексом 4 в массиве
numbers. Обратите внимание, что в случае, если в массиве есть несколько одинаковых
максимальных элементов, будет найден только первый из них.
int[,] matrix = { { 1, 2, 3, 4 }, { 5, 6, 7, 8 }, { 9, 10, 11, 12 } };

int rows = matrix.GetLength(0);


int columns = matrix.GetLength(1);

if (columns % 2 == 0)
{
for (int row = 0; row < rows; row++)
{
for (int col = 0; col < columns; col += 2)
{
int temp = matrix[row, col];
matrix[row, col] = matrix[row, col + 1];
matrix[row, col + 1] = temp;
}
}
}

// Вывод измененного массива на экран


for (int row = 0; row < rows; row++)
{
for (int col = 0; col < columns; col++)
{
Console.Write(matrix[row, col] + " ");
}
Console.WriteLine();
}
В этом примере у нас есть двумерный массив matrix, представляющий матрицу чисел. Мы
сначала определяем количество строк и столбцов в матрице с помощью метода
GetLength(). Затем мы проверяем, является ли количество столбцов четным с помощью
оператора %.

Если количество столбцов четное, мы используем два вложенных цикла for, чтобы
перебрать каждую строку и менять местами столбцы по указанному правилу. Мы
временно сохраняем значение текущего столбца в переменной temp, затем меняем
местами значения текущего и следующего столбцов, и, наконец, присваиваем
сохраненное значение temp следующему столбцу.

После завершения цикла мы выводим измененный массив на экран. Если количество


столбцов нечетное, массив выводится без изменений.

Пример вывода для данного кода:

Copy code
2143
6587
10 9 12 11
В этом примере мы поменяли местами столбцы по указанному правилу, так как
количество столбцов в матрице равно 4.

Ответ на лабу 8
using System;

class Program
{
static void Main()
{
int[,] array = new int[6, 6];
Random rnd = new Random();

// Заполнение массива случайными числами от 0 до 9


for (int row = 0; row < 6; row++)
{
for (int col = 0; col < 6; col++)
{
array[row, col] = rnd.Next(0, 10);
}
}

// Определение цветов для заднего фона строк и текста столбцов


ConsoleColor[] backgroundColors = { ConsoleColor.Blue, ConsoleColor.DarkBlue,
ConsoleColor.Cyan, ConsoleColor.DarkCyan, ConsoleColor.Green, ConsoleColor.DarkGreen };
ConsoleColor[] textColors = { ConsoleColor.Red, ConsoleColor.DarkRed,
ConsoleColor.Yellow, ConsoleColor.DarkYellow, ConsoleColor.White, ConsoleColor.Black };
// Вывод исходного массива
Console.WriteLine("Исходный массив:");
PrintArray(array, backgroundColors, textColors);

// Меняем расположение элементов массива


SwapRows(array, 0, 5);
SwapRows(array, 1, 4);
SwapRows(array, 2, 3);
SwapColumns(array, 0, 3);
SwapColumns(array, 1, 4);
SwapColumns(array, 2, 5);

// Вывод результирующего массива


Console.WriteLine("\nРезультирующий массив:");
PrintArray(array, backgroundColors, textColors);
}

// Метод для вывода массива на экран в виде таблицы с указанными цветами


static void PrintArray(int[,] array, ConsoleColor[] backgroundColors, ConsoleColor[]
textColors)
{
int rows = array.GetLength(0);
int columns = array.GetLength(1);

for (int row = 0; row < rows; row++)


{
Console.BackgroundColor = backgroundColors[row];
Console.ForegroundColor = ConsoleColor.White;

for (int col = 0; col < columns; col++)


{
Console.ForegroundColor = textColors[col];
Console.Write(array[row, col] + " ");
}

Console.WriteLine();
}

Console.ResetColor();
}

// Метод для обмена строк местами


static void SwapRows(int[,] array, int row1, int row2)
{
int columns = array.GetLength(1);

for (int col = 0; col < columns; col++)


{
int temp = array[row1, col];
array[row1, col] = array[row2, col];
array[row2, col] = temp;
}
}

// Метод для обмена столбцов местами


static void SwapColumns(int[,] array, int col1, int col2)
{
int rows = array.GetLength(0);

for (int row = 0; row < rows; row++)


{
int temp = array[row, col1];
array[row, col1] = array[row, col2];
array[row, col2] = temp;
}
}
}
В этом примере мы создаем двумерный массив array размером 6 на 6 и используем
объект Random для заполнения массива случайными числами от 0 до 9. Мы также
определяем два массива цветов: backgroundColors для заднего фона строк и textColors для
цвета текста столбцов.

Затем мы выводим исходный массив на экран с помощью метода PrintArray(), который


выводит массив в виде таблицы, используя заданные цвета. После этого мы меняем
расположение элементов массива согласно заданию, вызывая методы SwapRows() и
SwapColumns() для обмена строк и столбцов соответственно.

Наконец, мы выводим результирующий массив на экран снова с помощью метода


PrintArray(). В итоге вы увидите исходный массив и результирующий массив, где элементы
перемещены в соответствии с заданными правилами, сохраняя исходные цвета
элементов.

Примечание: Для работы с цветами в консоли, используется класс ConsoleColor.

Вам также может понравиться