Конструирование программ

Сегодня, в начале 21 века, компьютеры можно найти практически во всех сферах бизнеса. Они достаточно прочно укрепились в нашей жизни и сознании. Все большему числу специалистов в самых разных областях требуется доступ к информационным технологиям для решения стоящих перед ними проблем. Хотя компьютеры были созданы для числовых вычислений, вскоре было обнаружено, что они могут обрабатывать и другие типы информации — в конце концов, почти все они могут быть представлены в числовой форме. Компьютеры стали универсальным средством обработки всех видов информации, используемой людьми. С помощью компьютеров не только проводятся числовые расчеты, но и подготавливаются к печати книги, создаются рисунки, кинофильмы, музыка, осуществляется управление заводами и космическими кораблями, проводятся всевозможные тестирования, проверяющие знания людей в той или иной области и так далее.

Из этого следует, что компьютеры в той или иной форме будут существовать всегда. Поэтому можно смело говорить об их актуальности и актуальности данной работы.

Целью данной работы является формирование представления о языках программирования для их дальнейшего использования и разработка компьютерной программы — компьютерной игры «Крестики-нолики».

Чтобы достичь цели, были поставлены следующие задачи:

1. Дать определения компьютерной программе и языку программирования.

2. Рассмотреть существующие языки программирования, сделать выбор конкретного языка программирования и обосновать его.

3. Написать компьютерную программу на данном языке программирования и провести её тестирование

Эта работа состоит из введения, трех глав, заключения, библиографии и приложения, которое содержит часть исходного кода продукта, так как весь исходный код очень велик.

1. Языки программирования

1.1 Основные определения и терминология

Язык программирования — это система обозначений, служащая для точного описания программ или алгоритмов для ЭВМ. Языки программирования являются искусственными языками. От естественных языков они отличаются ограниченным числом “слов” и очень строгими правилами записи команд (операторов).

Следовательно, при использовании по прямому назначению они не позволяют свободно интерпретировать характерные выражения естественного языка.

можно сформулировать набор требований к языкам программирования и классифицировать языки по их характеристикам.

10 стр., 4664 слов

Языки программирования

... и модернизация языков программирования и решаются вопросы о расширении или поддержке уже существующих и новых языковых конструкций. Типы данных Современные цифровые компьютеры обычно являются ... знакомиться с принципами построения современных компьютерных систем. Неужели действительно не так важно, какая среда и какой конкретный язык программирования будет использован для практических занятий? ...

Основные требования, предъявляемые к языкам программирования:

  • наглядность — использование в языке по возможности уже существующих символов, хорошо известных и понятных как программистам, так и пользователям ЭВМ;
  • единство — использование одних и тех же символов для обозначения одних и тех же или родственных понятий в разных частях алгоритма. Количество этих символов должно быть по возможности минимальным;
  • гибкость — возможность относительно удобного, несложного описания распространенных приемов математических вычислений с помощью имеющегося в языке ограниченного набора изобразительных средств;
  • модульность — возможность описания сложных алгоритмов в виде совокупности простых модулей, которые могут быть составлены отдельно и использованы в различных сложных алгоритмах;
  • однозначность — недвусмысленность записи любого алгоритма. Его отсутствие могло привести к неправильным ответам при поиске и устранении неисправностей.

В настоящее время в мире реально используется несколько сотен языков программирования. Для каждого есть своя область применения.

1.2 Уровни языков программирования

Любой алгоритм — это последовательность предписаний, следуя которой можно за конечное число шагов перейти от исходных данных к результату. В зависимости от уровня детализации предписаний обычно определяется уровень языка программирования: чем ниже детализация, тем выше уровень языка.

По этому критерию можно выделить следующие уровни языков программирования:

  • машинные;
  • машинно-оpиентиpованные (ассемблеры);
  • машинно-независимые (языки высокого уровня).

Машинные языки и машинно-ориентированные языки — это языки низкого уровня, которые требуют от вас указания небольших деталей об обработке данных. С другой стороны, языки более высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка и общие математические символы. Эти языки более удобны для человека.

Разные типы процессоров имеют разные наборы команд. Если язык программирования ориентирован на конкретный тип процессора и учитывает его особенности, то он называется языком программирования низкого уровня. В данном случае “низкий уровень” не значит “плохой”. Это означает, что операторы языка близки к машинному коду и ориентированы на инструкции, специфичные для процессора.

При программировании на машинном языке программист может держать под своим контролем каждую команду и ячейку памяти, использовать все возможности доступных машинных операций. Но процесс написания программы на машинном языке очень долгий и утомительный. Программа громоздкая, ее трудно визуализировать, ее сложно отлаживать, изменять и развивать.

Поэтому в случае, когда нужно иметь эффективную программу, в максимальной степени учитывающую специфику конкретного компьютера, вместо машинных языков используют близкие к ним машинно-ориентированные языки (ассемблеры).

Ассемблер — это машинно-зависимый язык низкого уровня, в котором короткие мнемонические имена соответствуют отдельным машинным инструкциям. Используется для представления программ, написанных машинным кодом, в удобочитаемой форме.

5 стр., 2257 слов

Основные алгоритмические конструкции и соответствующие им конструкции ...

... погода" 'Конец программы Основные алгоритмические конструкции: Линейный алгоритм. В алгоритмическом языке линейным является алгоритм, ... языки высокого уровня). Машинные языки и машинно-ориентированные языки — это языки низкого уровня, требующие указания мелких деталей процесса обработки данных. Языки же высокого уровня имитируют естественные языки, используя некоторые слова разговорного языка ...

Язык ассемблера позволяет программисту пользоваться текстовыми мнемоническими (то есть легко запоминаемыми человеком) кодами, по своему усмотрению присваивать символические имена регистрам компьютера и памяти, а также задавать удобные для себя способы адресации. Кроме того, он позволяет использовать различные системы счисления (например, десятичную или шестнадцатеричную) для представления числовых констант, использовать в программе комментарии и др.

С помощью низкоуровневых языков создаются очень эффективные и компактные программы, так как разработчику доступны все возможности процессора. С другой стороны, это требует очень хорошего понимания структуры компьютера, затрудняет отладку больших приложений, а окончательная программа не может быть перенесена на компьютер с другим типом процессора. Такие языки обычно используются для написания небольших системных приложений, драйверов устройств, модулей для подключения к нестандартному оборудованию, когда компактность, скорость и возможность прямого доступа к аппаратным ресурсам становятся наиболее важными требованиями. В некоторых областях, таких как компьютерная графика, библиотеки написаны на языке ассемблера, которые эффективно реализуют ресурсоемкие алгоритмы обработки изображений.

Следовательно, программы, написанные на языке ассемблера, требуют гораздо меньше памяти и времени выполнения. Знание программистом языка ассемблера и машинного кода дает ему представление об архитектуре машины. Хотя большинство профессионалов в области программного обеспечения разрабатывают программы на языках высокого уровня, наиболее мощное и эффективное программное обеспечение написано полностью или частично на языке ассемблера.

Языки высокого уровня — они были разработаны, чтобы освободить программиста от учета технических характеристик конкретных компьютеров, их архитектуры. Уровень языка характеризуется степенью его близости к естественному, человеческому языку. Машинный язык не похож на человеческий, он крайне беден изобразительными средствами. Средства записи программ на языках высокого уровня более выразительны и знакомы людям. Например, алгоритм вычисления сложной формулы не разбивается на отдельные операции, а компактно записывается в виде одного выражения с использованием знакомых математических символов. Составить свою или понять чужую программу на таком языке гораздо проще.

Важным преимуществом языков высокого уровня является их универсальность, независимость от ЭВМ. Программа, написанная на этом языке, может работать на разных машинах. Компилятору программы не нужно знать набор команд компьютера, на котором он намеревается выполнять вычисления. При переходе на другую ЭВМ программа не требует переделки. Такие языки являются средством общения не только между человеком и машиной, но и между людьми. Программа, написанная на языке высокого уровня, может быть легко понятна любому специалисту, который знает язык и суть проблемы.

Таким образом, можно сформулировать основные преимущества языков высокого уровня перед машинными:

  • алфавит языка высокого уровня значительно шире алфавита машинного языка, что существенно повышает наглядность текста программы;
  • набор операций, допустимых для использования, не зависит от набора машинных операций, а выбирается из соображений удобства формулирования алгоритмов, решения задач определенного класса;
  • формат предложений достаточно гибок и удобен для использования, что позволяет с помощью одного предложения задать достаточно содержательный этап обработки данных;
  • требуемые операции задаются с помощью общепринятых математических обозначений;
  • данным в языках высокого уровня присваиваются индивидуальные имена, выбираемые программистом;
  • в языке может быть предусмотрен значительно более широкий набор типов данных по сравнению с набором машинных типов данных.

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

15 стр., 7311 слов

Инфинитивные конструкции в английском языке

... исследования в данной курсовой работе являются инфинитив и инфинитивные конструкции в английском новостном сообщении. Предмет данного исследования составили особенности передачи инфинитива и инфинитивных конструкций при переводе новостного текста на русский язык. Цель данной работы – выявить ...

Основные компоненты алгоритмического языка:

алфавит,

синтаксис,

семантика.

Алфавит — это фиксированный для данного языка набор основных символов, т.е. «букв алфавита», из которых должен состоять любой текст на этом языке — никакие другие символы в тексте не допускаются.

Синтаксис — это правила построения предложений, которые позволяют определить, правильно или неправильно написано конкретное предложение. Точнее, синтаксис языка — это набор правил, которые диктуют, какие комбинации символов являются значимыми предложениями на этом языке.

Семантика определяет смысловое значение предложений языка. Являясь системой правил истолкования отдельных языковых конструкций, семантика устанавливает, какие последовательности действий описываются теми или иными фразами языка и, в конечном итоге, какой алгоритм определен данным текстом на алгоритмическом языке.

1.3 Виды языков программирования

Языки высокого уровня делятся на:

  • процедурные;
  • логические;
  • объектно-ориентированные.

Процедурные языки предназначены для однозначного описания алгоритмов. При решении проблемы процедурные языки в той или иной форме требуют явного написания процедуры ее решения.

Первым шагом в развитии процедурных языков программирования стало появление проблемно-ориентированных языков. Это название отражает тот факт, что при их разработке они исходят не от «машины», а «от задачи»: язык стремится в полной мере учитывать специфику класса проблем, для которых предполагается использовать решение использоваться. Например, многие научные и технические задачи характеризуются большими вычислениями с использованием сложных формул, поэтому вводятся удобные средства их записи на языках, ориентированных на такие задачи. Использование знакомых специалистам в соответствующей области знаний понятий, терминов, символов облегчает им изучение языка, упрощает процесс компиляции и отладки программы.

Разнообразие классов активов привело к тому, что сегодня разработано несколько сотен алгоритмических языков. правда, широкое и международное признание получили лишь 10-15 языков. Среди них, в первую очередь, следует отметить: Fortran и Algol — языки, предназначенные для решения научно-технических задач, Cobol — для решения экономических задач, Basic — для решения небольших вычислительных задач в интерактивном режиме. В принципе, каждый из этих языков может использоваться для решения задач не своего класса. Однако, как правило, применение оказывается не удобным.

8 стр., 3642 слов

Проектирование информационной системы на основе объектно-ориентированного ...

... должно осуществляться на основе языка визуального проектирования UML, с помощью средства объектно-ориентированного проектирования информационных систем. В данной курсовой работе используется CASE-инструмент Model Maker. 1. Описание предметной области информационной системы оптовая база В качестве ...

В то же время, в середине 1960-х, они начали разрабатывать обширные алгоритмические языки: универсальные языки. Обычно они строились по принципу объединения возможностей тесно ориентированных языков. Среди них наиболее известны PL/1, Pascal, C, C+ , Modula, Ada. Однако, как и любой универсальный инструмент, такие целевые языки оказываются менее эффективными во многих конкретных случаях.

Логические языки- (Prolog, Lisp, Mercury, KLO и др.) ориентированы не на запись алгоритма решения задачи, а на систематическое и формализованное описание задачи с тем, чтобы решение следовало из составленного описания. В этих языках указывается что дано и что требуется получить. При этом поиск решения задачи возлагается непосредственно на ЭВМ.

Объектно-ориентированные языки (Object Pascal, Delphi, C++, Java, Objective Caml. и др.).

Руководящей идеей объектно-ориентированных языков является желание связать данные с процедурами, которые обрабатывают эти данные в единое целое: объект.

Объектно-ориентированный подход использует следующие базовые понятия:

  • объект;
  • свойство объекта;
  • метод обработки;
  • событие;
  • класс объектов.

Объект — совокупность свойств (параметров) определенных сущностей и методов их обработки (программных средств).

Свойство — это характеристика объекта и его параметров. Все объекты наделены определенными свойствами, совокупность которых выделяют (определяют) объект.

Метод — это набор действий над объектом или его свойствами.

Событие — это характеристика изменения состояния объекта.

Класс — это набор объектов, характеризующийся общностью методов обработки или применяемых к ним свойств.

Существуют различные объектно-ориентированные технологии, которые обеспечивают выполнение важнейших принципов объектного подхода:

  • инкапсуляция;
  • наследование.

Под инкапсуляцией понимается скрытие полей объекта с целью обеспечения доступа к ним только посредством методов класса (т. е. скрытие деталей, несущественных для использования объекта).

Инкапсуляция (объединение) означает сочетание данных и алгоритмов их обработки, в результате чего и данные, и процедуры во многом теряют самостоятельное значение.

Класс может иметь образованные от него подклассы. При создании подклассов наследуются методы обработки данных и объектов исходного класса.

Действительно, объектно-ориентированное программирование можно рассматривать как модульное программирование нового уровня, когда вместо в значительной степени случайной механической комбинации процедур и данных упор делается на их семантическую связь.

Программа на объектно-ориентированном языке, решая какую-то проблему, по сути, описывает часть мира, связанную с этой проблемой. Описание реальности в виде системы взаимодействующих объектов более естественно, чем в виде взаимодействующих процедур.

2. Выбор языка программирования

При решении задачи я использовал интегрированную среду разработки Borland Delphi. Она позволяет легко писать программы под ОС Windows. Разработанная программа нетребовательна к ресурсам компьютера и позволяет работать даже при отсутствии современного оборудования.

Delphi — это язык программирования общего назначения, хорошо известный своей эффективностью, экономичностью и простотой обучения.

15 стр., 7500 слов

Автоматизация работы кинотеатра

... тип поля; длина поля; задаются идентификаторы полей; описание полей. Для автоматизации работы кинотеатра необходимы следующие таблицы: films (афиша); pay (оплата); places ( ... данных. 1.2 Постановка задачи Поставленная задача курсовой работы: работа кинотеатров. Целью курсовой работы является реализация автоматизированной системы управления работой кинотеатра. Требуется создать в среде Delphi ...

Эти преимущества Delphi обеспечивают хорошее качество разработки почти для всех типов программных продуктов. Использование delphi в качестве языка программирования позволяет создавать быстрые, компактные и удобные для чтения программы. При этом они имеют хорошую наглядность и их более просто сопровождать.

Delphi сочетает эффективность и мощность в относительно малом по размеру языке. Хотя Паскаль не содержит встроенных компонент языка, выполняющих ввод — вывод, распределение памяти, манипуляций с экраном или управление процессами, тем не менее, системное окружение DELPHI располагает очень большой библиотекой модулей, в которой реализованы все подобные функции. Библиотека поддерживает многие, если не все, функции, необходимые для работы.

Это решение позволяет программам, написанным на этом языке, быть независимыми от конфигурации конкретного компьютера, а строгое определение языка делает его независимым от каких-либо деталей операционной системы или машины. В то же время программисты могут добавлять в библиотеку определенные системные программы, чтобы более эффективно использовать специфические для машины функции.

Перечислим некоторые существенные особенности языка delphi:

DELPHI обеспечивает полный набор операторов структурного программирования.

DELPHI поддерживает указатели на переменные и функции. Указатель на программный объект соответствует машинному адресу этого объекта. Благодаря разумному использованию указателей можно эффективно создавать исполняемые программы, поскольку указатели позволяют ссылаться на объекты так же, как и на машину. DELPHI поддерживает указатели, и тем самым позволяет осуществлять непосредственный доступ и манипуляции с адресами памяти.

DELPHI содержит препроцессор, который обрабатывает текстовые файлы перед компиляцией. Среди его наиболее полезных приложений при написании программ DELPHI: определение программных констант, замена вызовов функций похожими, но более быстрыми макросами, условная компиляция.

DELPHI — гибкий язык, позволяющий принимать в конкретных ситуациях самые разные решения. Однако DELPHI налагает незначительные ограничения на такие вещи, как преобразование типов. Во многих случаях это преимущество, однако программисты должны хорошо знать язык, чтобы понимать, как их программы будут работать.

За исключением мелких деталей, DELPHI — это надмножество языка программирования Pascal. Помимо возможностей, которые дает Паскаль, DELPHI предоставляет гибкие и эффективные средства определения новых типов. Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем. Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.

12 стр., 5929 слов

Настройка пользовательского интерфейса

... that implements that interface. Источник [Электронный ресурс]//URL: https://drprom.ru/kursovaya/nastroyki-interfeysa/ Настройка пользовательского интерфейса реферат Работа в среде Windows Не менее важным элементом является – ... see Custom task panes, Ribbon designer, and Create Outlook form regions. Интерфейсы расширяемости, которые можно реализовать в надстройке VSTO Extensibility interfaces ...

3. Проектирование программы

3.1 Требования к составу и параметрам технических средств

Для функционирования игры «Крестики-нолики» необходим компьютер IBM PC совместимый и следующие технические средства:

  • процессор Intel Pentium III;
  • объем свободной оперативной памяти 700 Кб;
  • объем необходимой памяти на жестком диске 600 Кб;
  • стандартный VGA-монитор или совместимый;
  • стандартная клавиатура;
  • манипулятор «мышь»;
  • операционная система «Windows», версии не ниже XP.

3.2 Общая схема программы

Программа состоит из следующих файлов:

  • Project1.exe — исполняемый файл
  • Project1.dpr — файл проекта
  • Unit1.pas — исходный код проекта

3.3 Руководство по использованию

Чтобы запустить программу, необходимо нажать Project1.exe из соответствующей директории.

При запуске программы сначала появляется главное меню. В главном меню есть три возможности: войти в игру против компьютера, войти в игру один на один (человек против человека), либо выйти из игры. Управлять игрой осуществляется мышкой, если нет сообщений на экране о нажатии на кнопку.

Заключение

В ходе написания программы были использованы элементы объектно-ориентированного программирования. Основу программы составили классы. Было использовано переопределение стандартных операций для переменных абстрактных типов, а так же работа с графикой, строками и т.д.

При выполнении курсовой была проработана литература по языкам Паскаль, DELPHI, объектно-ориентированному программированию. Работать с объектами класса при помощи функций членов намного удобнее, нежели не использовать классы, а применять только стандартный набор типов данных.

Пользователю не придется тратить много времени на освоение правил игры «Крестики-нолики». Простота и наглядность интерфейса делают игру удобной в использовании.

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

Используемая литература и источники

[Электронный ресурс]//URL: https://drprom.ru/kursovaya/konstruirovanie-programm/

1. Мирошниченко Е.А. и др. Программирование на языке DELPHI. Часть II. Учебное пособие/ Н.В. Триханова, Е.А. Мирошниченко. — Томск: Изд. ТПУ, 2001. — 118с.

2. Костюк Ю.Л. Основы алгоритмизации: Учебное пособие. / Ю.Л.Костюк. — Томск: Изд. ТГУ, 1996. — 124с.

3. Бондарев В.М. и др. Основы программирования. / В.М.Бондарев, В.И.Рублинецкий, Е.Г.Качко. / Худож.-оформитель С.А.Пяткова. — Харьков: Фолио; Ростов н/Д: Феникс, 1997. — 368с.

4. Вирт Н. Алгоритмы и структуры данных. / Н.Вирт. — М.: Мир, 1989. — 310с.:ил.

Приложение

Исходный код программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, ExtCtrls, StdCtrls, Math, jpeg;

43 стр., 21183 слов

Автоматизация учебного процесса в высших учебных заведениях

... и автоматизация процессов высших учебных учреждений. Главной задачей, стоящей перед высшими учебными заведениями, является формирование качественного учебного процесса. Рассмотрим образование как технологический процесс, в ... достоинства и недостатки, а также собственные разработки для автоматизации некоторых компонентов учебного процесса. Надо заметить, что в ходе внедрения и использования ...

type

TForm1 = class(TForm)

Reload: TButton;

  • Image1: TImage;
  • Exit: TButton;
  • GroupBox1: TGroupBox;
  • winXw: TLabel;
  • winOw: TLabel;
  • qwer: TLabel;
  • qwert: TLabel;
  • qwerty: TLabel;
  • qwertyu: TLabel;
  • a22: TLabel;
  • a11: TLabel;
  • a00: TLabel;
  • a10: TLabel;
  • a01: TLabel;
  • a02: TLabel;
  • a12: TLabel;
  • a21: TLabel;
  • a20: TLabel;
  • Label4: TLabel;
  • Label5: TLabel;
  • Label6: TLabel;
  • winTw: TLabel;
  • Info: TButton;
  • winTw1: TLabel;
  • winOw1: TLabel;
  • winXw1: TLabel;
  • GroupBox2: TGroupBox;
  • RadioButton1: TRadioButton;
  • RadioButton3: TRadioButton;
  • RadioButton4: TRadioButton;
  • RadioButton5: TRadioButton;
  • Label1: TLabel;
  • Diff: TLabel;
  • Bevel2: TBevel;
  • Bevel9: TBevel;
  • Bevel8: TBevel;
  • Bevel3: TBevel;
  • Bevel6: TBevel;
  • Bevel5: TBevel;
  • Bevel4: TBevel;
  • Bevel7: TBevel;
  • Bevel1: TBevel;
  • procedure FormCreate(Sender: TObject);
  • procedure Image1Click(Sender: TObject);
  • procedure ReloadClick(Sender: TObject);
  • procedure ExitClick(Sender: TObject);
  • procedure InfoClick(Sender: TObject);
  • procedure RadioButton5Click(Sender: TObject);
  • procedure RadioButton4Click(Sender: TObject);
  • procedure RadioButton3Click(Sender: TObject);
  • procedure RadioButton1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

  • Pole: array[0..2,0..2] of integer;
  • whole,infovar,position: integer;
  • win:string;
  • difficult:integer;

implementation

{$R *.dfm}

procedure updatetextXO();

var

i,q:integer;

  • textpole:array[0..2,0..2] of string;

begin

for i:=0 to 2 do

for q:=0 to 2 do

if (pole[i,q]=5) then textpole[i,q]:=’ ‘ else

if (pole[i,q]=1) then textpole[i,q]:=’x’ else

if (pole[i,q]=0) then textpole[i,q]:=’o’;

  • form1.a00.Caption:=textpole[0,0];
  • form1.a01.Caption:=textpole[0,1];
  • form1.a02.Caption:=textpole[0,2];
  • form1.a10.Caption:=textpole[1,0];
  • form1.a11.Caption:=textpole[1,1];
  • form1.a12.Caption:=textpole[1,2];
  • form1.a20.Caption:=textpole[2,0];
  • form1.a21.Caption:=textpole[2,1];
  • form1.a22.Caption:=textpole[2,2];
  • end;
  • procedure reloadcell();

begin

form1.Image1.Canvas.Rectangle(0,0,300,300);

  • form1.Image1.Canvas.Refresh;
  • form1.Image1.Canvas.Pen.Color:=clBlack;
  • form1.Image1.Canvas.Pen.Width:=3;
  • form1.Image1.Canvas.MoveTo(0,100);
  • form1.Image1.Canvas.LineTo(300,100);
  • form1.Image1.Canvas.MoveTo(0,200);
  • form1.Image1.Canvas.LineTo(300,200);
  • form1.Image1.Canvas.MoveTo(100,0);
  • form1.Image1.Canvas.LineTo(100,300);
  • form1.Image1.Canvas.MoveTo(200,0);
  • form1.Image1.Canvas.LineTo(200,300);
  • end;
  • procedure putX(a:integer;b:integer);

begin

30 стр., 14972 слов

Разработка лабораторного стенда для исследования фотоэффекта

... необходимых для эффективного функционирования программы. Реализовать описанные требования и было целью дипломной работы. Данные средства реализации программы являются перспективными и позволили решить поставленную ... Расчёт экономической эффективности данного проекта; Также в работе подробно описаны этапы разработки дипломного проекта. Представлено приложение, содержащее формы, отчёты проекта. ...

form1.Image1.Canvas.Pen.Color:=clRed;

  • form1.Image1.Canvas.Pen.Width:=5;
  • form1.Image1.Canvas.MoveTo(a+5,b+5);
  • form1.Image1.Canvas.LineTo(a+95,b+95);
  • form1.Image1.Canvas.MoveTo(a+5,b+95);
  • form1.Image1.Canvas.LineTo(a+95,b+5);
  • whole:=whole+1;
  • end;
  • procedure DrawCircle(X, Y, R: Integer;
  • Can:TCanvas;
  • Col: TColor);

begin

Can.Pen.Width:=1;

  • Can.Pen.Color:=Col;
  • Can.Ellipse(X-R , Y-R , X+R , Y+R);
  • end;
  • procedure TheEnd(pos: integer);
  • var x:integer;

begin

x:=0;

  • form1.Image1.Canvas.Pen.Color:=clFuchsia;
  • form1.Image1.Canvas.Pen.Width:=7;

if (pos=1) then

begin

form1.Image1.Canvas.MoveTo(25,50);

  • form1.Image1.Canvas.LineTo(275,50);

end else

if (pos=2) then

begin

form1.Image1.Canvas.MoveTo(25,150);

  • form1.Image1.Canvas.LineTo(275,150);

end else

if (pos=3) then

begin

form1.Image1.Canvas.MoveTo(25,250);

  • form1.Image1.Canvas.LineTo(275,250);

end else

if (pos=4) then

begin

form1.Image1.Canvas.MoveTo(50,25);

  • form1.Image1.Canvas.LineTo(50,275);

end else

if (pos=5) then

begin

form1.Image1.Canvas.MoveTo(150,25);

  • form1.Image1.Canvas.LineTo(150,275);

end else

if (pos=6) then

begin

form1.Image1.Canvas.MoveTo(250,25);

  • form1.Image1.Canvas.LineTo(250,275);

end else

if (pos=7) then

begin

form1.Image1.Canvas.MoveTo(25,25);

  • form1.Image1.Canvas.LineTo(275,275);

end else

if (pos=8) then

begin

form1.Image1.Canvas.MoveTo(25,275);

  • form1.Image1.Canvas.LineTo(275,25);

end else

if (pos=9) then

begin

if (pole[0,0]=0) then

begin

form1.image1.Canvas.MoveTo(50,50); x:=1; end;

if (pole[0,1]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(50,150); x:=1 end else

form1.Image1.Canvas.LineTo(50,150);

if (pole[0,2]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(50,250); x:=1 end else

form1.Image1.Canvas.LineTo(50,250);

if (pole[1,0]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(150,50); x:=1 end else

form1.Image1.Canvas.LineTo(150,50);

if (pole[1,1]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(150,150); x:=1 end else

form1.Image1.Canvas.LineTo(150,150);

if (pole[1,2]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(150,250); x:=1 end else

form1.Image1.Canvas.LineTo(150,250);

if (pole[2,0]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(250,50); x:=1 end else

form1.Image1.Canvas.LineTo(250,50);

if (pole[2,1]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(250,150); x:=1 end else

form1.Image1.Canvas.LineTo(250,150);

if (pole[2,2]=0) then if (x=0) then

begin form1.image1.Canvas.MoveTo(250,250) end else

form1.Image1.Canvas.LineTo(250,250);

  • end;
  • end;
  • procedure putO();
  • var q,i,w,z,a:integer;

begin

w:=27;

  • if (difficult>0) then begin

if (difficult>1) then begin

if (whole=1) and (pole[1,1]=5) then

begin

pole[1,1]:=0;

  • DrawCircle(1*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;
  • end;

if (whole=1) and (pole[1,1]=1) then

begin

randomize;

  • z:=random(4);

case z of

0: begin q:=0; i:=0; end;

1: begin q:=0; i:=2; end;

2: begin q:=2; i:=0; end;

3: begin q:=2; i:=2; end;

  • end;
  • pole[i,q]:=0;
  • DrawCircle(i*100+50,q*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;
  • end;
  • end;

if (difficult=3) then begin

if ((whole=3) and (pole[1,1]=1)) and (((pole[0,0]=1) and (pole[2,2]=0)) or

((pole[2,2]=1) and (pole[0,0]=0))or((pole[0,2]=1) and (pole[2,0]=0)) or

((pole[2,0]=1) and (pole[0,2]=0))) then

begin

randomize;

  • a:=3;

while a=3 do

begin

z:=random(4);

case z of

0: begin q:=0; i:=0; end;

1: begin q:=0; i:=2; end;

2: begin q:=2; i:=0; end;

3: begin q:=2; i:=2; end;

  • end;

if pole[i,q]=5 then

begin

pole[i,q]:=0;

  • DrawCircle(i*100+50,q*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;
  • a:=5;
  • end;
  • end;
  • end;
  • end;

if (w=27) then begin

i:=0;

//////////////////////////

if ((pole[0,0]=pole[1,0]) and (pole[0,0]=i) and (pole[2,0]=5)) or

((pole[2,1]=pole[2,2]) and (pole[2,1]=i) and (pole[2,0]=5)) or

((pole[0,2]=pole[1,1]) and (pole[0,2]=i) and (pole[2,0]=5)) then

begin

pole[2,0]:=0;

  • DrawCircle(2*100+50,0*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,0]=pole[2,0]) and (pole[0,0]=i) and (pole[1,0]=5)) or

((pole[1,1]=pole[1,2]) and (pole[1,1]=i) and (pole[1,0]=5)) then

begin

pole[1,0]:=0;

  • DrawCircle(1*100+50,0*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[1,0]=pole[2,0]) and (pole[1,0]=i) and (pole[0,0]=5)) or

((pole[0,1]=pole[0,2]) and (pole[0,1]=i) and (pole[0,0]=5)) or

((pole[1,1]=pole[2,2]) and (pole[1,1]=i) and (pole[0,0]=5)) then

begin

pole[0,0]:=0;

  • DrawCircle(0*100+50,0*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,1]=pole[1,1]) and (pole[0,1]=i) and (pole[2,1]=5)) or

((pole[2,0]=pole[2,2]) and (pole[2,0]=i) and (pole[2,1]=5)) then

begin

pole[2,1]:=0;

  • DrawCircle(2*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,1]=pole[2,1]) and (pole[0,1]=i) and (pole[1,1]=5)) or

((pole[1,0]=pole[1,2]) and (pole[1,0]=i) and (pole[1,1]=5)) or

((pole[0,0]=pole[2,2]) and (pole[0,0]=i) and (pole[1,1]=5)) or

((pole[0,2]=pole[2,0]) and (pole[0,2]=i) and (pole[1,1]=5)) then

begin

pole[1,1]:=0;

  • DrawCircle(1*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[1,1]=pole[2,1]) and (pole[1,1]=i) and (pole[0,1]=5)) or

((pole[0,0]=pole[0,2]) and (pole[0,0]=i) and (pole[0,1]=5)) then

begin

pole[0,1]:=0;

  • DrawCircle(0*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,2]=pole[1,2]) and (pole[0,2]=i) and (pole[2,2]=5)) or

((pole[2,0]=pole[2,1]) and (pole[2,0]=i) and (pole[2,2]=5)) or

((pole[0,0]=pole[1,1]) and (pole[0,0]=i) and (pole[2,2]=5)) then

begin

pole[2,2]:=0;

  • DrawCircle(2*100+50,2*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,2]=pole[2,2]) and (pole[0,2]=i) and (pole[1,2]=5)) or

((pole[1,0]=pole[1,1]) and (pole[1,0]=i) and (pole[1,2]=5)) then

begin

pole[1,2]:=0;

  • DrawCircle(1*100+50,2*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[1,2]=pole[2,2]) and (pole[1,2]=i) and (pole[0,2]=5)) or

((pole[0,0]=pole[0,1]) and (pole[0,0]=i) and (pole[0,2]=5)) or

((pole[1,1]=pole[2,0]) and (pole[1,1]=i) and (pole[0,2]=5)) then

begin

pole[0,2]:=0;

  • DrawCircle(0*100+50,2*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

i:=1;

//////////////////////////

if ((pole[0,0]=pole[1,0]) and (pole[0,0]=i) and (pole[2,0]=5)) or

((pole[2,1]=pole[2,2]) and (pole[2,1]=i) and (pole[2,0]=5)) or

((pole[0,2]=pole[1,1]) and (pole[0,2]=i) and (pole[2,0]=5)) then

begin

pole[2,0]:=0;

  • DrawCircle(2*100+50,0*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,0]=pole[2,0]) and (pole[0,0]=i) and (pole[1,0]=5)) or

((pole[1,1]=pole[1,2]) and (pole[1,1]=i) and (pole[1,0]=5)) then

begin

pole[1,0]:=0;

  • DrawCircle(1*100+50,0*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[1,0]=pole[2,0]) and (pole[1,0]=i) and (pole[0,0]=5)) or

((pole[0,1]=pole[0,2]) and (pole[0,1]=i) and (pole[0,0]=5)) or

((pole[1,1]=pole[2,2]) and (pole[1,1]=i) and (pole[0,0]=5)) then

begin

pole[0,0]:=0;

  • DrawCircle(0*100+50,0*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,1]=pole[1,1]) and (pole[0,1]=i) and (pole[2,1]=5)) or

((pole[2,0]=pole[2,2]) and (pole[2,0]=i) and (pole[2,1]=5)) then

begin

pole[2,1]:=0;

  • DrawCircle(2*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,1]=pole[2,1]) and (pole[0,1]=i) and (pole[1,1]=5)) or

((pole[1,0]=pole[1,2]) and (pole[1,0]=i) and (pole[1,1]=5)) or

((pole[0,0]=pole[2,2]) and (pole[0,0]=i) and (pole[1,1]=5)) or

((pole[0,2]=pole[2,0]) and (pole[0,2]=i) and (pole[1,1]=5)) then

begin

pole[1,1]:=0;

  • DrawCircle(1*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[1,1]=pole[2,1]) and (pole[1,1]=i) and (pole[0,1]=5)) or

((pole[0,0]=pole[0,2]) and (pole[0,0]=i) and (pole[0,1]=5)) then

begin

pole[0,1]:=0;

  • DrawCircle(0*100+50,1*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,2]=pole[1,2]) and (pole[0,2]=i) and (pole[2,2]=5)) or

((pole[2,0]=pole[2,1]) and (pole[2,0]=i) and (pole[2,2]=5)) or

((pole[0,0]=pole[1,1]) and (pole[0,0]=i) and (pole[2,2]=5)) then

begin

pole[2,2]:=0;

  • DrawCircle(2*100+50,2*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[0,2]=pole[2,2]) and (pole[0,2]=i) and (pole[1,2]=5)) or

((pole[1,0]=pole[1,1]) and (pole[1,0]=i) and (pole[1,2]=5)) then

begin

pole[1,2]:=0;

  • DrawCircle(1*100+50,2*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

if ((pole[1,2]=pole[2,2]) and (pole[1,2]=i) and (pole[0,2]=5)) or

((pole[0,0]=pole[0,1]) and (pole[0,0]=i) and (pole[0,2]=5)) or

((pole[1,1]=pole[2,0]) and (pole[1,1]=i) and (pole[0,2]=5)) then

begin

pole[0,2]:=0;

  • DrawCircle(0*100+50,2*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;

end else

end;

  • end;
  • randomize;
  • if (whole<9) then

while w=27 do

begin

q:=random(3);

  • i:=random(3);

if (pole[i,q]=5) then

begin

pole[i,q]:=0;

  • DrawCircle(i*100+50,q*100+50,45,form1.image1.Canvas,clBlue);
  • w:=3;
  • end;
  • end;
  • whole:=whole+1;
  • end;
  • function ifwins():string;

begin

if (pole[0,0]=0) and (pole[0,1]=0) and (pole[0,2]=0) then result:=’no’ else

if (pole[1,0]=0) and (pole[1,1]=0) and (pole[1,2]=0) then result:=’no’ else

if (pole[2,0]=0) and (pole[2,1]=0) and (pole[2,2]=0) then result:=’no’ else

if (pole[0,0]=0) and (pole[1,0]=0) and (pole[2,0]=0) then result:=’no’ else

if (pole[0,1]=0) and (pole[1,1]=0) and (pole[2,1]=0) then result:=’no’ else

if (pole[0,2]=0) and (pole[1,2]=0) and (pole[2,2]=0) then result:=’no’ else

if (pole[0,0]=0) and (pole[1,1]=0) and (pole[2,2]=0) then result:=’no’ else

if (pole[0,2]=0) and (pole[1,1]=0) and (pole[2,0]=0) then result:=’no’;

if (pole[0,0]=1) and (pole[0,1]=1) and (pole[0,2]=1) then result:=’yes’ else

if (pole[1,0]=1) and (pole[1,1]=1) and (pole[1,2]=1) then result:=’yes’ else

if (pole[2,0]=1) and (pole[2,1]=1) and (pole[2,2]=1) then result:=’yes’ else

if (pole[0,0]=1) and (pole[1,0]=1) and (pole[2,0]=1) then result:=’yes’ else

if (pole[0,1]=1) and (pole[1,1]=1) and (pole[2,1]=1) then result:=’yes’ else

if (pole[0,2]=1) and (pole[1,2]=1) and (pole[2,2]=1) then result:=’yes’ else

if (pole[0,0]=1) and (pole[1,1]=1) and (pole[2,2]=1) then result:=’yes’ else

if (pole[0,2]=1) and (pole[1,1]=1) and (pole[2,0]=1) then result:=’yes’;

  • if (result<>’no’)and(result<>’yes’)and(whole>8) then result:=’tie’;
  • end;
  • function ifwinspos(x,y,winner :integer):integer;

begin

result:=9;

if (pole[0,0]=pole[0,1]) and (pole[0,2]=pole[0,1]) and (pole[0,1]=winner) then result:=4 else

if (pole[1,0]=pole[1,1]) and (pole[1,2]=pole[1,1]) and (pole[1,1]=winner) then result:=5 else

if (pole[2,0]=pole[2,1]) and (pole[2,2]=pole[2,1]) and (pole[2,1]=winner) then result:=6 else

if (pole[0,0]=pole[1,0]) and (pole[2,0]=pole[1,0]) and (pole[1,0]=winner) then result:=1 else

if (pole[0,1]=pole[1,1]) and (pole[2,1]=pole[1,1]) and (pole[1,1]=winner) then result:=2 else

if (pole[0,2]=pole[1,2]) and (pole[2,2]=pole[1,2]) and (pole[1,2]=winner) then result:=3 else

if (pole[0,0]=pole[1,1]) and (pole[2,2]=pole[1,1]) and (pole[1,1]=winner) then result:=7 else

if (pole[0,2]=pole[1,1]) and (pole[2,0]=pole[1,1]) and (pole[1,1]=winner) then result:=8;

  • end;
  • procedure TForm1.Image1Click(Sender: TObject);
  • var x,y:integer;

begin

{if (whole>0) then }GroupBox2.Enabled:=false;

  • x:=mouse.CursorPos.x-image1.left-form1.Left-4;
  • y:=mouse.CursorPos.y-image1.top-form1.top-30;
  • x:=x div 100;
  • y:=y div 100;

if (pole[x,y]=5) then

begin

putX(x*100,y*100);

  • pole[x,y]:=1;
  • putO();
  • updatetextXO();
  • win:=ifwins();

if (win=’yes’) then

begin

winXw.Caption:=inttostr(strtoint(winXw.Caption)+1);

  • winXw1.Caption:=winXw.Caption;
  • Theend(ifwinspos(x,y,1));
  • if (messagebox(0,’You win! Would you like to play once again?’,’Win!’,mb_YESNO)=7) then close;
  • ReloadClick(Sender);
  • end;

if (win=’no’) then

begin

winOw.Caption:=inttostr(strtoint(winOw.Caption)+1);

  • winOw1.Caption:=winOw.Caption;
  • Theend(ifwinspos(x,y,0));
  • if (messagebox(0,’Have Lost? We shall be won back?’,’Defeat!’,mb_YESNO)=7) then close;
  • ReloadClick(Sender);
  • end;

if (win=’tie’) then

begin

winTw.Caption:=inttostr(strtoint(winTw.Caption)+1);

  • winTw1.Caption:=winTw.Caption;
  • Theend(9);

if (messagebox(0,’Tie up, but zero»s find true way :

  • ‘,’Tie up!’,mb_YESNO)=7) then close;
  • ReloadClick(Sender);
  • end;
  • end;
  • end;
  • procedure TForm1.ReloadClick(Sender: TObject);

var

i,q:integer;

begin

reloadcell();

  • reloadcell();

for i:=0 to 2 do

for q:=0 to 2 do

pole[i,q]:=5;

  • updatetextXO();
  • whole:=0;
  • groupbox2.Enabled:=true;
  • end;
  • procedure TForm1.ExitClick(Sender: TObject);

begin

close;

  • end;
  • procedure TForm1.FormCreate(Sender: TObject);

var

i,q:integer;

begin

difficult:=2;

  • form1.left:=(screen.Width-form1.Width) div 2;
  • form1.top:=(screen.Height-form1.Height) div 2;
  • infovar:=0;
  • whole:=0;
  • reloadcell();
  • reloadcell();

for i:=0 to 2 do

for q:=0 to 2 do

pole[i,q]:=5;

  • updatetextXO();
  • end;
  • procedure TForm1.InfoClick(Sender: TObject);

begin

if (infovar=0)

then

begin

form1.Height:=form1.Height+GroupBox1.Height+10;

  • Groupbox1.Visible:=true;
  • info.Caption:=’More info <<‘;
  • infovar:=1;

end

else

if (infovar=1)

then

begin

form1.Height:=484;

  • Groupbox1.Visible:=false;
  • info.Caption:=’More info >>’;
  • infovar:=0;
  • end;
  • form1.left:=(screen.Width-form1.Width) div 2;
  • form1.top:=(screen.Height-form1.Height) div 2;
  • end;
  • procedure TForm1.RadioButton5Click(Sender: TObject);

begin

difficult:=0;

  • diff.Caption:=’Very easy’;
  • end;
  • procedure TForm1.RadioButton4Click(Sender: TObject);

begin

difficult:=1;

  • diff.Caption:=’Easy’;
  • end;
  • procedure TForm1.RadioButton3Click(Sender: TObject);

begin

difficult:=2;

  • diff.Caption:=’Normal’;
  • end;
  • procedure TForm1.RadioButton1Click(Sender: TObject);

begin

difficult:=3;

  • diff.Caption:=’Hard’;
  • end;
  • end.