Разработка и реализация на языках высокого уровня алгоритмов решения задачи
Язык как средство обучения программированию. Разработка и реализация на языках высокого уровня алгоритмов решения задачи. Развитые средства диагностики и редактирования кода. Описание алгоритмов и приёмов разработки программ обработки двумерных массивов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 07.02.2024 |
Размер файла | 2,1 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Размещено на http://www.allbest.ru/
СОДЕРЖАНИЕ
ВВЕДЕНИЕ
1. ИНСТРУМЕНТЫ СРЕДЫ РАЗРАБОТКИ
2. СНИППЕТЫ
3. ОПИСАНИЕ КОДА
ЗАКЛЮЧЕНИЕ
СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ
ВВЕДЕНИЕ
Главной целью прохождения практики является углубление теоретических знаний, полученных в учебном заведении, и приобретение практических навыков в области программирования.
Задачами данной курсовой работы являются:
-выделение классов, необходимых для решения задачи;
- выделение основного действия в задаче и построение алгоритма его реализации;
- определение математического аппарата, применение которого необходимо в задаче;
- программная реализация задачи средствами Visual C#.
Язык С# как средство обучения программированию обладает рядом несомненных достоинств. Он хорошо организован, строг, большинство его конструкций логичны и удобны. Развитые средства диагностики и редактирования кода делают процесс программирования приятным и эффективным. обучение программирование редактирование код
Немаловажно, что С# является не учебным, а профессиональным языком, предназначенным для решения широкого спектра задач, и в первую очередь - в быстро развивающейся области создания распределенных приложений. Поэтому базовый курс программирования, построенный на основе языка С#, позволит студентам быстрее стать востребованными специалистами-профессионалами.
Целью исследования, проводимого в рамках настоящей курсовой работы, является разработка и реализация на языках высокого уровня алгоритмов решения задачи, представленной в задании курсовой работы.
Объектами исследования настоящей курсовой работы являются методы и технологии разработки программных продуктов.
Предметами исследования настоящей курсовой работы являются методы, алгоритмы и приёмы разработки программ обработки двумерных массивов. программирование массив текстовый файл
Информационной базой исследования является учебная литература по информатике и программированию, техническая документация по языку С# инструментальной среды MS Visual Studio 2010.
1. ИНСТРУМЕНТЫ СРЕДЫ РАЗРАБОТКИ
При разработке консольного приложения я использовал следующие сочетания клавиш:
F5 - начать отладку;
SHIFT+F5 - остановить отладку;
CTRL+SHIFT+F5 - перезапуск отладки;
CTRL+F10 - выполнить до текущей позиции;
CTRL+F5 - запуск без отладки;
CTRL+C - копировать;
CTRL+V - вставить;
CTRL+F - поиск;
CTRL+L - вырезать строку;
CTRL+H - заменить;
CTRL+A - выбрать всё;
CTRL+W - выбрать текущее слово;
CTRL+Z - отменить;
CTRL+S - сохранить выбранные элементы;
CTRL+SHIFT+S - сохранить всё;
SHIFT+ALT+A - добавить существующий элемент;
CTRL+SHIFT+A - добавление нового элемента;
CTRL+R - извлечение метода;
CTRL+SHIFT+C - окно классов;
CTRL+E - список ошибок;
CTRL+- - перейти назад;
CTRL+SHIFT+- - перейти вперёд;
CTRL+ALT+J - обозреватель объектов;
CTRL+X - вырезать;
CTRL+D - дублирование;
CTRL+Y - повторить;
Также, я использовал окна:
окно “Обозреватель решений”. Здесь мы можем увидеть, какие проекты входят в то или иное решение, посмотреть свойства проекта, модули, входящие в состав проекта и т.д.;
окно “Свойства”. Окно расположено в нижней левой части экрана и, как и следует из названия, предназначено для отображения свойств элементов. Ну а, так как свойства имеют не только компоненты, но и файлы, то выбрав, например, файл в “Обозревателе решений”, можно увидеть его свойства;
окно “Список ошибок”. Тут показаны все ошибки;
окно “Team Explorer”. Здесь мы можем создать подключение, например, к репозиторию Git или GitHub.
окно “Представление классов”. В этом окне вы можете просмотреть содержимое файла с исходным кодом в виде дерева, но, в отличие от “Обозревателя решений”, в этом окне можно также увидеть и типы данных, которые используются в том или ином файле;
окно “Средство диагностики”. Окно расположено в правой части экрана и предоставляет нам различные средства для профилирования нашего приложения. Так, например, можно отследить загрузку ЦП, использование памяти и т.д.;
окно “Панель элементов”. Окно панели элементов отображает элементы управления, которые вы можете добавлять в проекты Visual Studio;
2. Сниппеты
Сниппеты - это шаблоны кода, которые позволяют нам вместо ручного ввода команд использовать короткие сочетания для того, чтобы сразу получить большой объём кода.
Также, можно создавать свои собственные сниппеты. Это позволяет экономить время и вместо того, чтобы набирать всё вручную можно заранее подготовить шаблон кода и копировать и вставлять их в нужное место.
Сниппеты находятся в меню Tools, находим строчку Code Snippets Manager. Стоит отметить, что сниппеты доступны в разных языках программирования. Здесь можно выбрать нужный язык.
Для того, чтобы создать сниппет можно использовать готовый шаблон и доработать его, либо создать с нуля. Чтобы создать сниппет нужно создать файл Add, New Item и выбрать XML File.
Вот несколько примеров сниппетов:
ѕ #if - создаёт директивы #if и #endif;
ѕ #region - создаёт директивы #region и #endregion;
ѕ attribute - создаёт объявление класса, производного от Attribute;
ѕ checked - создаёт блок checked;
ѕ class - создаёт объявление класса;
ѕ ctor - создаёт конструктор для включающего класса;
ѕ cw - создаёт вызов WriteLine;
ѕ do - создаёт цикл dowhile;
ѕ else - создаёт else блок;
ѕ enum - создаёт объявление типа enum;
ѕ equals - создаёт объявление метода, которое переопределяет метод Equals, определённый в классе Object;
ѕ for - создаёт цикл for;
ѕ foreach - создаёт цикл foreach;
ѕ namespace - создаёт объявление namespace;
ѕ prop - создаёт объявление автоматически реализуемого свойства;
ѕ switch - создаёт блок switch;
ѕ using - создаёт директиву using;
ѕ while - создаёт цикл while;
ѕ swm - создаёт объявление метода staticint Main;
ѕ struct - создаёт объявление struct.
3. ОПИСАНИЕ КОДА
Моя работа состоит без классов и сделал ее на основе игры Snake Объяснение кода игры Snake.
Код представляет собой консольное приложение, Игрок управляет длинным, тонким существом, напоминающим змею, реализующее классическую игру «Змейка». Он использует двумерную сетку для представления игрового поля, причем каждая ячейка сетки содержит символ, представляющий ее состояние. Игрок управляет змеей, которая перемещается по доске и ест пищу, чтобы расти дольше. Игра заканчивается, если змея сталкивается со стеной или с самой собой.
Для реализации данной игры я создал игровой движок. Во - первых я создал поле и ввел размеры поля
static readonly int gridW = 120;
static readonly int gridH = 45;
Создаем двумерный массив ячеек для представления статической сетки Cell [,] grid = new Cell[gridH, gridW];
Инициализируем текущую ячейку, ячейку с едой и другие игровые переменные
static Cell currentCell;
static Cell food;
static int FoodCount;
static int direction; //0=Up 1=Right 2=Down 3=Left
static readonly int speed = 1;
static bool Populated = false;
static bool Lost = false;
static int snakeLength;
static void Main(string[] args)
{
Задаем цвет фона консоли
Console.BackgroundColor = ConsoleColor.DarkGreen;
Заполняем сетку ячейками и инициализируем игровые переменные
if (!Populated)
{
FoodCount = 0;
snakeLength = 3;
populateGrid();
currentCell = grid[(int)Math.Ceiling((double)gridH / 2), (int)Math.Ceiling((double)gridW / 2)];
updatePos();
addFood();
Populated = true;
}
Запускаем игровой цикл
while (!Lost)
{
Restart();
}
}
Перезапускаем игру
static void Restart()
{
Console.SetCursorPosition(0, 0);
printGrid();
Console.WriteLine("Length: {0}", snakeLength);
getInput();
}
Обновляем экран текущим состоянием игры
static void updateScreen()
{
Console.SetCursorPosition(0, 0);
printGrid();
Console.WriteLine("Length: {0}", snakeLength);
}
Получаем ввод от пользователя
static void getInput()
{
//Console.Write(движение [WASD] ");
ConsoleKeyInfo input;
Проверяем, была ли нажата клавиша
while (!Console.KeyAvailable)
{
Move();
updateScreen();
}
Получаем нажатую клавишу
input = Console.ReadKey();
doInput(input.KeyChar);
}
Проверяем, есть ли в текущей ячейке еда или она уже была посещена
static void checkCell(Cell cell)
{
if (cell.val == "&")
{
eatFood();
}
if (cell.visited)
{
Lose();
}
}
Заканчиваем игру, если игрок проигрывает
static void Lose()
{
Console.WriteLine("\n You lose!");
Thread.Sleep(1000);
Process.Start(System.Reflection.Assembly.GetExecutingAssembly().Location);
Environment.Exit(-1);
}
Обработка пользовательского ввода
static void doInput(char inp)
{
switch (inp)
{
case 'w':
goUp();
break;
case 's':
goDown();
break;
case 'a':
goRight();
break;
case 'd':
goLeft();
break;
}
}
Добавляем еду в поле
static void addFood()
{
Random r = new Random();
Cell cell;
Находим случайную ячейку для размещения еды
while (true)
{
cell = grid[r.Next(grid.GetLength(0)), r.Next(grid.GetLength(1))];
if (cell.val == " ")
cell.val = "&";
break;
}
}
Увеличиваем длину змейки и добавляем больше еды в поле
static void eatFood()
{
snakeLength += 1;
addFood();
}
Изменяем направление змеи на вверх
static void goUp()
{
if (direction == 2)
return;
direction = 0;
}
Изменяем направление змеи направо
static void goRight()
{
if (direction == 3)
return;
direction = 1;
}
Изменяем направление змейки вниз
static void goDown()
{
if (direction == 0)
return;
direction = 2;
}
Изменяем направление змейки налево
static void goLeft()
{
if (direction == 1)
return;
direction = 3;
}
Двигаем змейку в текущем направлении
static void Move()
{
if (direction == 0)
{
//up
if (grid[currentCell.y - 1, currentCell.x].val == "-")
{
Lose();
return;
}
visitCell(grid[currentCell.y - 1, currentCell.x]);
}
else if (direction == 1)
{
//right
if (grid[currentCell.y, currentCell.x - 1].val == "-")
{
Lose();
return;
}
visitCell(grid[currentCell.y, currentCell.x - 1]);
}
else if (direction == 2)
{
//down
if (grid[currentCell.y + 1, currentCell.x].val == "-")
{
Lose();
return;
}
visitCell(grid[currentCell.y + 1, currentCell.x]);
}
else if (direction == 3)
{
//left
if (grid[currentCell.y, currentCell.x + 1].val == "-")
{
Lose();
return;
}
visitCell(grid[currentCell.y, currentCell.x + 1]);
}
Приостановить игру на некоторое время, чтобы контролировать скорость змейки
Thread.Sleep(speed * 135);
}
Посетить ячейку и обновить текущую ячейку
static void visitCell(Cell cell)
{
currentCell.val = "0";
currentCell.visited = true;
currentCell.decay = snakeLength;
checkCell(cell);
currentCell = cell;
updatePos();
//checkCell(currentCell);
}
Обновляем положение змейки на сетке
static void updatePos()
{
currentCell.Set("@");
Изменяем внешний вид змеи в зависимости от ее направления
if (direction == 0)
{
currentCell.val = "O";
}
else if (direction == 1)
{
currentCell.val = "<";
}
else if (direction == 2)
{
currentCell.val = "O";
}
else if (direction == 3)
{
currentCell.val = ">";
}
currentCell.visited = false;
return;
}
Рисунок 1 - схема класса движения змейки
Также мы заполняем сетку ячейками
static void populateGrid()
{
Random random = new Random();
for (int col = 0; col < gridH; col++)
{
for (int row = 0; row < gridW; row++)
{
Cell cell = new Cell();
cell.x = row;
cell.y = col;
cell.visited = false;
Установить границы ячеек как стены, а остальные сделать пустыми
if (cell.x == 0 || cell.x > gridW - 2 || cell.y == 0 || cell.y > gridH - 2)
cell.Set("-");
else
cell.Clear();
grid[col, row] = cell;
}
}
}
Определяем высоту и ширину сетки, также эта функция выводит сетку на консоль, перебирая каждую ячейку сетки, вызов функции распада змеи для каждой ячейки и добавление значения ячейки к строке. Затем строка выводится на консоль.
static void printGrid()
{
string toPrint = "";
for (int col = 0; col < gridH; col++)
{
for (int row = 0; row < gridW; row++)
{
grid[col, row].decaySnake();
toPrint += grid[col, row].val;
}
toPrint += "\n";
}
Console.WriteLine(toPrint);
}
public class Cell
{
public string val
{
get;
set;
}
public int x
{
get;
set;
}
public int y
{
get;
set;
}
public bool visited
{
get;
set;
}
public int decay
{
get;
set;
}
publc void decaySnake()
{
decay -= 1;
if (decay == 0)
{
visited = false;
val = " ";
}
}
public void Clear()
{
val = " ";
}
public void Set(string newVal)
{
val = newVal;
}
}
}
}
Функция populateGrid инициализирует сетку ячейками, которые либо пусты, либо содержат символ стены. Класс Cell представляет одну ячейку в сетке и содержит свойства для ее значения, положения и того, была ли она посещена змеей. Функция print Grid выводит текущее состояние сетки на консоль.
Метод Main инициализирует игру, заполняя сетку, добавляя еду и устанавливая начальное направление змеи. Затем он входит в цикл, который неоднократно вызывает Restart функцию, пока игра не закончится. Функция Restart очищает консоль, печатает текущее состояние сетки и ждет, пока игрок введет направление движения змеи. Функция getInput обрабатывает ввод игрока и соответствующим образом обновляет направление змеи.
Функция Move обновляет положение змеи на сетке в зависимости от ее текущего направления. Если змея сталкивается со стеной или с самой собой, игра заканчивается. Функция visitCell обновляет состояние текущей ячейки, чтобы указать, что ее посетила змея, и проверяет, съела ли змея пищу. Если змея съела пищу, ее длина увеличивается и в сетку добавляется новая еда.
Функция Lose вызывается, когда игра заканчивается, и отображает сообщение игроку перед перезапуском игры.
Рисунок 2 - меняет змейку при ее движении в зависимости от ее направления
Заключение
Современная операционная система - сложный комплекс программных средств, предоставляющих пользователю не только стандартизированный ввод-вывод информации и управление программами, но и упрощающий работу с компьютером. Программный интерфейс операционных систем позволяет уменьшить размер конкретной программы, упростить ее работу со всеми компонентами вычислительной системы.
В данной работе удалось разработать программу с использованием компонентов среды визуального проектирования Visual C#.
Во время прохождения практики было разделено на два этапа:
- теоретический анализ поставленной задачи, включающий в себя постановку задачи, выделение основных классов, выделение основных действия и алгоритмов их реализации, определение математического аппарата, необходимого при решении задачи;
- программная реализация задачи средствами Visual C#, включающая в себя реализацию основных классов, реализацию основных действий, реализацию классов диалоговых форм, инструкцию по использовании программы.
Итогом данной работы можно считать закрепление знаний в области создания алгоритмов, навыков программирования на языке C# и создании приложений для операционных системы компании Microsoft, полученных в ходе курса «объектно-ориентированное программирование».
Список использованных источников
1. Босова, Л.Л. Информатика. 10 класс. Базовый уровень / Л.Л. Босова, А.Ю. Босова. - 2-е изд., степеотип. - М.: БИНОМ. Лаборатория знаний, 2018. - 288 с.
2. Босова, Л.Л. Информатика. 11 класс. Базовый уровень: учебник / Л.Л. Босова, А.Ю. Босова. - М.: БИНОМ. Лаборатория знаний, 2019. - 256 с.
3. Семакин, И.Г. Информатика. Базовый уровень: учебник для 10 класса / И.Г. Семакин, Е.К. Ханнер, Т.Ю. Шеина. - 8-е изд., стереотип. - М.: БИНОМ. Лаборатория знаний, 2018. - 264 с.
4. Семакин, И.Г. Информатика. Базовый уровень: учебник для 11 класса / И.Г. Семакин, Е.К. Ханнер, Т.Ю. Шеина. - 8-е изд., стереотип. - М.: БИНОМ. Лаборатория знаний, 2018. - 224 с.
5. Прикладные алгоритмы на языке ООП C#. С.Е. Иванов
6. Pro C# 10 with .NET 6. 11 ed. Troelsen A., Japikse Ph. (2022)
7. C# Programming for Absolute Beginners. 2 Ed. Radek Vystavмl (2021)
8. Problem Solving in Data Structures and Algorithms Using C#. 2 ed. Hemant Jain (2018)
1. Интернет ресурс «Wikipedia» - свободная энциклопедия C_Sharp.
Форма доступа: https://ru.wikipedia.org/wiki/C_Sharp
2. Интернет ресурс «Wikipedia» - свободная энциклопедия Microsoft Visual_Studio.Форма доступа: https://ru.wikipedia.org/wiki/Microsoft_Visual_Studio
3. Интернет ресурс «Wikipedia» - информационный портал по Модульному_программированию.Форма доступа: https://ru.wikipedia.org/wiki/Модульное_программирование
Размещено на Allbest.ru
...Подобные документы
Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".
курсовая работа [329,8 K], добавлен 22.06.2014Описание предметной области решаемой задачи. Входные документы, необходимые для решения задачи, ее функции. Разработка информационного обеспечения задачи и реквизиты входной информации. Технология и алгоритмов решения задачи и их машинная реализация.
контрольная работа [15,1 K], добавлен 21.10.2010Разработка комплекса алгоритмов. Кодирование и компиляция. Тестирование, отладка, испытание и сдача программы. Минимальные системные требования для использования Delphi 7. Написание программы с использованием инструментального языка высокого уровня.
курсовая работа [2,7 M], добавлен 21.02.2011Понятие массива и правила описания массивов в программах на языке С. Рассмотрение основных алгоритмов обработки одномерных массивов. Примеры программ на языке С для всех рассмотренных алгоритмов. Примеры решения задач по обработке одномерных массивов.
учебное пособие [1,1 M], добавлен 22.02.2011Разработка алгоритмов методом пошаговой детализации. Типы данных и операции в Turbo-Pascal. Организация работы с подпрограммами. Составление алгоритмов и программ задач с использованием конечных сумм. Организация работы с динамическими переменными.
учебное пособие [1,4 M], добавлен 26.03.2014Реализация выбора в языках высокого уровня, использование сложных типов. Формат оператора выбора в языке Pascal. Изображение оператора варианта на блок-схеме. Понятие массива и способы их вводов. Описание компонентов приложения и программного кода.
курсовая работа [585,6 K], добавлен 17.08.2013Методы численного интегрирования. Характеристика основных составляющих структурного программирования. Решение задания на языке высокого уровня Паскаль. Построение графического решения задачи в пакете Matlab. Решение задания на языке высокого уровня C.
курсовая работа [381,7 K], добавлен 10.05.2018Язык Паскаль - процедурно-ориентированный язык высокого уровня, его основные достоинства. Разработка программ для решения задач. Выбор метода обработки информации. Форма представления исходных данных. Разработка алгоритма, его описание, листинг программы.
курсовая работа [3,6 M], добавлен 17.02.2013Создание схем алгоритмов и составление программы на языке Pascal для вычисления значений заданных функций. Сущность и порядок нахождения значения определенного интеграла. Анализ работы подпрограмм. Разработка тестов для проверки правильности алгоритмов.
контрольная работа [831,0 K], добавлен 24.11.2013Составление и программная реализация в среде Borland Delphi 7.0 алгоритмов итерационного и рекурсивного вариантов решения задачи поиска с возвращением. Исследование асимптотической временной сложности решения в зависимости от количества ячеек на плате.
курсовая работа [57,5 K], добавлен 25.06.2013Изучение некоторых аспектов языка Ассемблера и ЭВМ в целом. Построение алгоритмов решения поставленной задачи на языках программирования Си, Ассемблер УМ и IBM PC. Составление блок-схем решений и написание программ на каждом из перечисленных языков.
курсовая работа [691,5 K], добавлен 20.10.2014Алгоритмы обработки данных на языке программирования СИ. Приемы работы с интегрированной средой разработки, Использование разнообразных трансляторов и интерпретаторов, обеспечивающих связь программ с различными операционными системами и оборудованием.
учебное пособие [1,3 M], добавлен 02.12.2011Исследование асимптотической временной сложности решения шахматной задачи; разработка наиболее эффективных алгоритмов и структуры данных; аналитическая и экспериментальная оценка методов сокращения перебора в комбинаторных задачах; программная реализация.
курсовая работа [36,6 K], добавлен 25.06.2013Изучение особенностей создания алгоритмов вычислительных задач. Визуальное программирование стандартных компонентов среды программирования Delphi. Технология создания компонента Delphi для решения производственной задачи. Выполнение блок-схемы алгоритма.
курсовая работа [638,0 K], добавлен 30.01.2015Реализация комплекса программ поиска подстроки в тексте алгоритмом прямого поиска и алгоритмом Кнута-Морриса-Пратта. Сравнительный анализ теоретических и экспериментальных оценок эффективности алгоритмов. Разработка структуры программы, ее листинг.
курсовая работа [2,8 M], добавлен 22.01.2015Принципы разработки алгоритмов и программ на основе процедурного подхода и на основе объектно-ориентированного подхода. Реализация программы Borland Pascal 7.0, ее интерфейс. Разработка простой программы в среде визуального программирования Delphi.
отчет по практике [934,7 K], добавлен 25.03.2012Описание языков программирования высокого уровня. Стандартные структуры данных, обзор принципов структурного программирования. Построение математической модели и выбор структуры данных для решения задачи. Тестирование и отладка программного кода.
курсовая работа [1,3 M], добавлен 05.12.2020Анализ входной информации необходимой для решения задачи. Разработка исходных данных контрольного примера создания базы данных. Описание технологии и алгоритмов решения задачи и их математических реализаций. Разработка диалогов приложения пользователя.
курсовая работа [1,3 M], добавлен 26.04.2015Использование бинарных деревьев для поиска данных. Схемы алгоритмов работы с бинарным деревом. Проектирование алгоритмов и программ. Структура программного комплекса. Язык С# как средство для разработки автоматизированной информационной системы "Адрес".
курсовая работа [914,9 K], добавлен 14.11.2013