МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ Федеральное государственное образовательное учреждение высшего образования «Уфимский государственный нефтяной технический университет» Институт нефтепереработки и нефтехимии ФГБОУ ВО УГНТУ в г. Салавате Кафедра «Информационных технологий» “Создание приложения на WPF” Отчёт по лабораторной работе № 1 Ин.Тех-21.05.06-02.01.12 ЛР Исполнитель: студент гр. СГГз-23-21 А.З. Хайдаров Руководитель: Ассистент Э.И. Ахметшина Салават 2024 Цель работы: закрепить навыки работы с контейнерами и обработчиками событий. Задача 1 Написать приложение на WPF, выполняющее следующие действия: 1) Найти сумму n элементов следующего ряда чисел: 1 -0.5 0.25 -0.125 ... Количество элементов (n) вводится с клавиатуры. 2) Вывести на экран столько элементов ряда Фибоначчи, сколько указал пользователь. Например, если на ввод поступило число 6, то вывод должен содержать шесть первых чисел ряда Фибоначчи: 1 2 3 5 8 13. 3) Посчитать четные и нечетные цифры введенного натурального числа. Например, если введено число 34560, то у него 3 четные цифры (4, 6 и 0) и 2 нечетные (3 и 5). 4) Найти сумму и произведение цифр, введенного натурального числа. Например, если введено число 325, то сумма его цифр равна 10 (3+2+5), а произведение 30 (3*2*5). Решение: 1) Создаем WPF-приложение, которое будет выполнять первое задание — находить сумму n элементов ряда чисел: 1, -0.5, 0.25, -0.125 и так далее. Шаг 1: Создание WPF-приложения 1. Нужно открыть программуVisual Studio. 2. Далее создаем новый проект WPF App (.NET). 3. В проекте будет файл MainWindow.xaml, который будет использоваться для создания интерфейса. Шаг 2: Добавление элементов управления в XAML Изменяем содержимое MainWindow.xaml, чтобы добавить элементы для ввода значения n, кнопку для выполнения расчета и текстовое поле для вывода результата: <Window x:Class="Task1_1.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Главная" Height="600" Width="800" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"> <Grid> <!-- Подзадача 1.1: Сумма элементов ряда чисел --> <GroupBox Header="Подзадача 1.1: Сумма ряда чисел" HorizontalAlignment="Left" VerticalAlignment="Top" Margin="10,10,0,0" Width="360"> <StackPanel> <TextBlock Text="Введите количество элементов (n):" Margin="10"/> <TextBox x:Name="InputNSeries" Width="100" Margin="10"/> <Button Content="Рассчитать сумму" Width="150" Margin="10" Click="CalculateSeriesSum_Click"/> <TextBlock x:Name="SeriesSumResult" Margin="10" FontWeight="Bold"/> </StackPanel> </GroupBox> Шаг 3: Реализация логики в C# Теперь нужно открыть файл MainWindow.xaml.cs и добавьте обработчик события нажатия на кнопку. Этот код будет вычислять сумму n элементов ряда и выводить результат: using System; using System.Windows; namespace Task1_1 { public partial class MainWindow : Window { public MainWindow() { InitializeComponent(); } // Подзадача 1.1: Сумма элементов ряда чисел private void CalculateSeriesSum_Click(object sender, RoutedEventArgs e) { if (int.TryParse(InputNSeries.Text, out int n) && n > 0) { double sum = 0; double term = 1; for (int i = 0; i < n; i++) { sum += term; term *= -0.5; // Следующий элемент } SeriesSumResult.Text = $"Сумма первых {n} элементов: {sum:F4}"; // Изменено на F4 } else { SeriesSumResult.Text = "Введите корректное положительное число."; } } Шаг 4: Запуск приложения Теперь запускаем приложение (нажмите F5 или выберите "Start" в Visual Studio). Введите количество элементов, для которых хотите вычислить сумму, и нажимаем кнопку "Рассчитать сумму". Результат будет отображаться на экране. Задача 2 Создадим WPF-приложение, которое будет выполнять вторую задачу: выводить на экран столько элементов ряда Фибоначчи, сколько указал пользователь. <GroupBox Header="Подзадача 1.2: Ряд Фибоначчи" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0" Width="360"> <StackPanel> <TextBlock Text="Введите количество элементов:" Margin="10"/> <TextBox x:Name="InputNFibonacci" Width="100" Margin="10"/> <Button Content="Показать ряд" Width="150" Margin="10" Click="GenerateFibonacci_Click"/> <TextBlock x:Name="FibonacciResult" Margin="10" TextWrapping="Wrap" FontWeight="Bold"/> </StackPanel> </GroupBox> Реализация логики в C# Теперь нужно открыть файл MainWindow.xaml.cs и добавьте обработчик события нажатия на кнопку. Этот код будет вычислять сумму n элементов ряда и выводить результат: private void GenerateFibonacci_Click(object sender, RoutedEventArgs e) { if (int.TryParse(InputNFibonacci.Text, out int n) && n > 0) { int a = 1, b = 2; string result = $"{a} {b}"; for (int i = 2; i < n; i++) { int temp = a + b; result += $" {temp}"; a = b; b = temp; } FibonacciResult.Text = $"Первые {n} чисел: {result}"; } else { FibonacciResult.Text = "Введите корректное положительное число."; } } Запуск приложения Теперь запускаем приложение (нажмите F5 или выберите "Start" в Visual Studio). Введите количество элементов Фибоначчи, которые хотите вывести, и нажмите кнопку "Показать Фибоначчи". Результат будет отображаться на экране. Задача 3 Создаем WPF-приложение, которое будет выполнять третью задачу: подсчет четных и нечетных цифр введенного натурального числа. <GroupBox Header="Подзадача 1.3: Четные и нечетные цифры" HorizontalAlignment="Left" VerticalAlignment="Bottom" Margin="10,0,0,10" Width="360"> <StackPanel> <TextBlock Text="Введите число:" Margin="10"/> <TextBox x:Name="InputNumberEvenOdd" Width="100" Margin="10"/> <Button Content="Показать результат" Width="150" Margin="10" Click="CountEvenOddDigits_Click"/> <TextBlock x:Name="EvenOddResult" Margin="10" FontWeight="Bold"/> </StackPanel> </GroupBox> Реализация логики в C# Теперь откроем файл MainWindow.xaml.cs и добавляем обработчик события нажатия на кнопку. Этот код будет подсчитывать четные и нечетные цифры и выводить результат: private void CountEvenOddDigits_Click(object sender, RoutedEventArgs e) { if (long.TryParse(InputNumberEvenOdd.Text, out long number) && number >= 0) { int evenCount = 0, oddCount = 0; foreach (char c in number.ToString()) { int digit = c - '0'; if (digit % 2 == 0) evenCount++; else oddCount++; } EvenOddResult.Text = $"Четные: {evenCount}, Нечетные: {oddCount}"; } else { EvenOddResult.Text = "Введите корректное положительное число."; } } Запуск приложения Запускаем приложение (нажмите F5 или выберите "Start" в Visual Studio). Вводим натуральное число, и нажмите кнопку "Подсчитать". Результат, показывающий количество четных и нечетных цифр, будет отображен на экране. Задача 4 Создаем WPF-приложение, которое будет находить сумму и произведение цифр введенного натурального числа. Мы создадим простой интерфейс, который позволит пользователю ввести число и получить результаты по нажатию кнопки. <GroupBox Header="Подзадача 1.4: Сумма и произведение цифр" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,10,10" Width="360"> <StackPanel> <TextBlock Text="Введите число:" Margin="10"/> <TextBox x:Name="InputNumberSumProd" Width="100" Margin="10"/> <Button Content="Показать результат" Width="150" Margin="10" Click="CalculateSumAndProduct_Click"/> <TextBlock x:Name="SumProdResult" Margin="10" FontWeight="Bold"/> </StackPanel> </GroupBox> </Grid> </Window> Реализация логики в C# Теперь откройте файл MainWindow.xaml.cs и добавьте обработчик события нажатия на кнопку. Этот код будет вычислять сумму и произведение цифр введенного числа и выводить результат: private void CalculateSumAndProduct_Click(object sender, RoutedEventArgs e) { if (long.TryParse(InputNumberSumProd.Text, out long number) && number >= 0) { int sum = 0; long product = 1; foreach (char c in number.ToString()) { int digit = c - '0'; sum += digit; product *= digit; } SumProdResult.Text = $"Сумма: {sum}, Произведение: {product}"; } else { SumProdResult.Text = "Введите корректное положительное число."; } } } } Запуск приложения Запускаем приложение (нажмите F5 или выберите "Start" в Visual Studio). Вводим натуральное число, нажимаем кнопку "Рассчитать", и видим сумму и произведение его цифр на экране. Задание 2 Написать программу, используя WPF, предоставляющую следующие возможности: в программе генерируется случайное целое число от 0 до 100. Пользователь должен его отгадать не более чем за 10 попыток. После каждой неудачной попытки должно выводиться сообщение о том, больше или меньше введенное пользователем число, чем то, что загадано. Если за 10 попыток число не отгадано, то вывести загаданное число. Решение: Создаем WPF-приложение, которое позволит угадать случайное число от 0 до 100 за 10 попыток. Программа будет сообщать, больше или меньше введенное число по сравнению с загаданным, и предоставить сообщение, если число не угадано за 10 попыток. Шаг 1: Создание WPF-приложения 1. Откроем Visual Studio. 2. Создадим новый проект WPF App (.NET). 3. В проекте будет файл MainWindow.xaml, который можно использовать для создания интерфейса. Шаг 2: Добавление элементов управления в XAML Изменим файл MainWindow.xaml, чтобы добавить элементы для ввода числа, кнопку для проверки попытки и текстовое поле для вывода результата: <Window x:Class="Task1_2.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" Title="Угадай число" Height="300" Width="400" WindowStartupLocation="CenterScreen" ResizeMode="NoResize"> <Grid> <!-- Текст для подсказки --> <TextBlock Text="Угадайте число от 0 до 100" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,20,0,0" FontSize="16" /> <!-- Поле ввода для числа --> <TextBox x:Name="InputTextBox" Width="100" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,60,0,0" FontSize="16" TextAlignment="Center" Text="2" /> <!-- Кнопка для проверки числа --> <Button Content="Проверить" HorizontalAlignment="Center" VerticalAlignment="Top" Width="100" Margin="0,110,0,0" FontSize="14" Click="CheckNumber_Click" /> <!-- Поле для отображения сообщений --> <TextBlock x:Name="MessageTextBlock" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,160,0,0" FontSize="14" TextAlignment="Center" TextWrapping="Wrap" /> <!-- Поле для отображения оставшихся попыток --> <TextBlock x:Name="AttemptsTextBlock" HorizontalAlignment="Center" VerticalAlignment="Top" Margin="0,200,0,0" FontSize="14" TextAlignment="Center" TextWrapping="Wrap" /> </Grid> </Window> Шаг 3: Реализация логики в C# Теперь откроем файл MainWindow.xaml.cs и добавим логику для игры в угадывание: using System; using System.Windows; namespace Task1_2 { public partial class MainWindow : Window { private int targetNumber; // Загаданное число private int attempts; // Количество попыток public MainWindow() { InitializeComponent(); StartNewGame(); // Начало игры при запуске программы } // Метод для инициализации новой игры private void StartNewGame() { Random random = new Random(); targetNumber = random.Next(0, 101); // Случайное число от 0 до 100 attempts = 0; MessageTextBlock.Text = "Угадайте число от 0 до 100."; UpdateAttemptsText(); // Обновляем отображение оставшихся попыток } // Метод для обновления текста с количеством оставшихся попыток private void UpdateAttemptsText() { AttemptsTextBlock.Text = $"Оставшиеся попытки: {10 - attempts}"; } // Обработчик события нажатия кнопки "Проверить" private void CheckNumber_Click(object sender, RoutedEventArgs e) { if (int.TryParse(InputTextBox.Text, out int userGuess)) { attempts++; // Увеличение счетчика попыток UpdateAttemptsText(); // Обновляем отображение оставшихся попыток // Проверка введенного числа с загаданным if (userGuess == targetNumber) { MessageTextBlock.Text = $"Поздравляем! Вы угадали число {targetNumber} за {attempts} попыток!"; StartNewGame(); // Начало новой игры после отгадывания } else if (attempts >= 10) { MessageTextBlock.Text = $"Вы проиграли! Загаданное число было: {targetNumber}. Начинаем новую игру..."; StartNewGame(); // Начало новой игры после истечения попыток } else if (userGuess < targetNumber) { MessageTextBlock.Text = "Ваше число меньше загаданного. Попробуйте еще раз."; } else { MessageTextBlock.Text = "Ваше число больше загаданного. Попробуйте еще раз."; } } else { MessageTextBlock.Text = "Введите допустимое целое число."; } InputTextBox.Clear(); // Очистка поля ввода InputTextBox.Focus(); // Фокус на поле ввода } } } Пояснение кода 1. Инициализация: В методе StartNewGame() происходит генерация случайного числа от 0 до 100 и инициализация количества попыток. 2. Обработка ввода: В обработчике CheckNumber_Click проверяется, ввел ли пользователь корректное число. Если ввел: Увеличивается счетчик попыток. Проверяется, меньше ли загаданное число, больше или равно. Если число угадано, пользователь получает сообщение об успехе и игра начинается заново. Если попыток больше 10, программа сообщает пользователю загаданное число и также начинает новую игру. 3. Сообщения: Каждое сообщение о результате отображается в TextBlock. Шаг 4: Запуск приложения Запускаем приложение (нажмите F5 или выберите "Start" в Visual Studio). Введем число от 0 до 100 и нажмите "Угадать". Получим общение о том, больше или меньше загаданное число, пока не угадаете его или не исчерпаете попытки.