Как составить программу расчетов

Как написать программу расчета

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

Как написать программу расчета

Вам понадобится

  • — среда разработки Borland C++ Builder или Borland Delphi;

Инструкция

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

Для написания программы вам потребуется среда разработки. Выберите Borland C++ Builder или Borland Delphi. Обе программы созданы компанией Borland, практически полностью идентичны по интерфейсу и отличаются только используемым языком программирования – в первом случае это C++, во втором Delphi.

Какой язык выбрать? У каждого из них есть свои достоинства, однако C++ можно назвать более профессиональным, так как именно на нем пишутся многие приложения под Windows. С другой стороны, Delphi более прост, его код зрительно более понятен. Поэтому просто сравните примеры кода этих языков и выберите тот, что вам больше понравится.

Скачайте и установите выбранную среду программирования, именно в ней вы будете создавать код своей программы. О том, как пользоваться продуктами от компании Borland, почитайте в учебной литературе. Сначала изучите интерфейс программы, повторите несколько учебных примеров – например, создание простого текстового редактора и медиаплеера. И только после этого, овладев азами программирования, переходите к созданию собственной программы.

Создание программы начните с определения алгоритма ее работы. Вы должны подробно и пошагово расписать, что должно делать ваше приложение. То есть – взять оттуда-то такие-то данные и сделать с ними то-то и то-то. Учтите, что от правильности алгоритма будет зависеть правильность работы программы. Алгоритм следует оформить в виде блок-схемы.

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

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

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

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

Видео по теме

Источники:

  • Borland C++ Builder 6 для начинающих

Время на прочтение
5 мин

Количество просмотров 1.1K

Доводилось ли тебе, дорогой читатель, когда-нибудь писать рассказы? Может быть это было сочинение в школе или эссе на тему «Как я провел Лето» «Смысл жизни» на факультете психологии в университете. Всегда от пишущего требовали одного, донести свои мысли четко и, по возможности, интересно. Мне хотелось бы поделиться с тобой историей о том, как я писал рассказ, в котором объяснял почему $2+2=4$ и почему $2+2*2=6$. Статья несет в себе цель не сколько описать техническую сторону программирования, сколько ее эстетическую часть и, что главное, описать психологию программирования. Сопровождаться сия статья будет ссылками на коммиты в GitHub.

Немного о себе

К моменту начала истории с калькулятором я уже 2 месяца работал web-разработчиком в одном интернет-магазине (название пожалуй не буду упоминать) и проблем с работой не было, так как я обладал достаточными знаниями C# и сопутствующими технологиями для участия в полном цикле разработки и поддержки сайта. К тому же, так как проект уже был запущен к моменту моего прихода и функционировал более 4 лет, в мои задачи входило в основном расширение кода по «аналогии«. Однако существовала проблема, внимания которой я не уделял в должной мере, и имя этой проблеме «Стиль кода».

Осознание проблемы

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

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

Становление на путь исправления

Возврат в начало пути программиста и первый урок.

«Слушай дядю, дядя Senior, дядя плохого не скажет.»

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

Первым заданием, которое я получил, оказался типичный для любого начинающего программиста консольный калькулятор. «Что может быть проще» — подумал я, и, опять таки довольно быстро, написал сие творение. Это было несколько лучше парсера (за который мне, видимо, будет стыдно до конца времен), но все еще было очень далеко от того кода за который могло бы быть не стыдно. После первого же ревью на написанный мной код, я осознал с чем мне прийдется столкнуться. Ревью вроде даже был больше чем сам код (вместе с кодом стандартных библиотек .Net). Прочтя все замечания я внес изменения и попутно внес правки, которых, IMHO, не хватало данной великой программе. Я никогда так не лажал, друг мой. Код стал хуже, а я, впервые за сознательную жизнь программиста, столкнулся с яростью тим лида. Естественно я всячески оправдывал свои действия, но нет ничего более свирепого, чем ментор, чьи указы не выполняются или перекаверкиваются.

Первый урок, который я выделил для себя на пути выявления во мне сущности программиста можно сформулировать так — «Если ты не уверен что у тебя достаточно мозгов, лучше послушай более опытного программиста, если же ты уверен, что готов, перепроверь данные, кажется ты ошибся.»

Теория или практика? Вот в чем вопрос. Второй урок

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

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

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

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

Код как искусство или последние уроки

Я думаю многие уже поняли о какой книге пойдет речь. «Чистый код» дядюшки Боба навел меня на мысль, которая, по моим ощущениям, засела глубоко и надолго в моем мозгу. Написать просто хороший алгоритм это 50% работы — написать же сложный алгоритм так, что бы человек, не особо разбирающийся в тонких материях, но хотя бы чуть-чуть знающий английский язык мог понять о чем ты написал — вот истинное искусство. И с этого момента обучение пошло легче, и конечно не без огрехов, не без огромных ревью и ударов по голове за глупейшие ошибки, но я таки привел код к тому виду, за который может быть не стыдно. Посмотреть его можно тут.

Какие же уроки я вынес к концу первого задания моего наставника?! Их не так много, но каждый из них стоит своего:

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

Вишенка на торте

Что же я получил в итоге. Как изменилось мое понимание программирования после месяца,
потраченного на калькулятор?! Все очень просто, изменилось моё отношение к коду. Буквально месяц назад тяжело было найти более несерьезного программиста, для которого любой код был лишь очередной шуткой, которую ты рассказал и забыл и неважно, понял ее кто-нибудь или нет. И вот я, стою перед исполинских размеров горой под названием «программирование», готовый карабкаться вверх и понимающий, что с каждым метром, с каждым шагом и с каждым вогнаным между камней скальным крюком будет все тяжелее и тяжелее. Но разве не за этим мы сюда пришли?! Разве не потому инженер-конструктор собирает новую модель свехбыстрого самолета или химик производит новые лекарства?! Ведь все это кому то нужно. И программирование, как явление, так же необходимо людям. И в такой ситуации относится к коду несерьезно было бы простым кощуством.

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

«Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.»

Спасибо за внимание

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

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

Ключевые цели

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

Такие приложения пригодятся студентам и ученикам ВУЗов/школ на первых порах. Он не будет обладать многочисленными «инженерными» button.

Начнем с языка C. Писать простой calculator будем при помощи оператора switch. Это – элементарная задача, но сначала необходимо запомнить некоторые термины и определения.

О понятиях

Любой исходный программный код – это использование определенных компонентов выбранного ЯП. Button – лишь визуальные элементы, приводящие к выполнению тех или иных действий при клике по ним. Поэтому сначала разработчик должен запомнить определенную терминологию.

Типы данных

Указывают на виды данных, которые хранят в себе имеющиеся в коде переменные. Это – способ классификации информации. В используемом приложении будут использоваться int и char:

  1. Int – целочисленный тип данных. Предназначается для хранения целых чисел. Имеет форму представления: int: int_variable_name = integer;. Без таких компонентов сделать собственный калькулятор не получится.
  2. Char – в C является одним из самых распространенных типов данных. Он занимает 1 байт памяти. Этот принцип действует почти во всех компиляторах. Указывает на хранение символов. Пример – тех, которые изображены на button калькулятора.

Это – ключевые переменные для будущего программного обеспечения. Но только ими и разнообразными button на экране не обойтись.

Оператор Switch

Чтобы запрограммировать простой калькулятор на C, нужно воспользоваться операторами Switch. Это – переключатель. Он позволяет сделать button функциональным компонентом. Проверяет переменные на соответствие списку значений.

Каждое значение – это case (или случай). Переменные, для которых используется switch, будет проверяться для каждой ситуации непосредственно в операторе.

Выше – пример синтаксиса соответствующего элемента.

Алгоритм

Чтобы написать программу или сделать сложное ПО, нужно представить алгоритм действий. Он пишется в виде пошаговых инструкций, изображается блок-схемами. В случае с калькуляторами предстоит придерживаться такого «плана»:

  1. Софт запускается.
  2. Объявляются три переменные целочисленного характера – a, n, b.
  3. Пользователь видит интерфейс (меню). Там нет button для управления утилитой. Все вводится с клавиатуры.
  4. Считывается пользовательское n-значение.
  5. Когда клиент вводит любое число от 1 до 5, происходит выполнение той или иной операции. Все зависит от того, какое простое число указано.
  6. Выполняются необходимые операции.

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

  1. Происходит считывание a и b. Выполняется сложение. Результат будет отображаться при помощи break.
  2. Осуществляется вычитание.
  3. На экране появляется частное от деления a на b.
  4. Производится возведение a в степень b.

Последний вариант – это отображение «ошибки». На экране это выглядит как Invalid.

Выше представлена блок-схема.

Что еще нужно помнить

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

  1. Include<stdio.h> – это не button. Так описывается заголовочный файл. Содержит сведения, связанные с вводом/выводом.
  2. Include<conio.h> – еще один заголовочный документ. Располагает в себе встроенные функции. Пример – clrcr() и getch().Требуется для функционирования консоли.
  3. Main() – точка входа любого софта на C. Указывает на начало работы написанного. Контроль выполнения переходит непосредственно в main(). Данный компонент есть во всех утилитах.
  4. Prinf и scanf. Первый вариант помогает отображать вывод. Второй нужен для принятия того, что пользователь ввел с клавиатуры. Это – замены button в ООП.
  5. Break – ключевое слово, которое помогает управлять циклами. Оператор используется тогда, когда нужно прервать «петлю».
  6. Default. Операторы, выполняемые тогда, когда в switch задействованы выражения, отсутствующие в case.

Программируя простой калькулятор на C, стоит обратить внимание на return 0. Когда запись есть в main(), она указывает на успешную обработку сведений. Происходит возврат false. При return 1 в «главной» функции ПО целесообразно говорить об успешном выполнении поставленной задачи, но с какой-то ошибкой. Определяемая функция вернет true.

Пример

А вот – то, как просто будет выглядеть желаемое ПО.


Это – элементарный вариант. Его при желании можно доработать и вводить новый функционал. Но для обучения хватит и этого.

На C++

Си-семейство пользуется огромным спросом при разработке софта. Особенно C++. Это – ЯП, который отличается своей функциональностью и скоростью. На нем можно запрограммировать все, что угодно – от элементарной мелкой утилиты до сложной игры. Именно поэтому C++ востребован на рынке. Он рекомендован всем, кто планирует плотно заниматься вопросами разработки контента.

Чтобы справиться с изначально поставленной задачей, рекомендуется изучить логику функционирования в C++. Если ошибаться – контент работать не будет. Или вследствие расчетов на дисплей будет выводиться неточное «суждение».

Выше – еще один пример рассматриваемой утилиты. Но уже на C++. Простейший «шаблон», на который можно опираться при обучении. Если человек уже знаком с СИ и представленным первым образцом, разобраться в особенностях функционирования этого «метода» будет легче легкого.

На Java

Огромным спросом на современном рынке товаров и услуг, а также IT пользуется Java. На нем спроектированы и реализованы самые разные проекты. Один из наиболее известных – Minecraft.

Java в консоли при решении вопросов о том, как выглядит код калькулятора, не требует существенных работ. Здесь алгоритм будет достаточно емким. Но самое ПО выглядит длинным. Его можно быстро набрать, если ознакомиться с базовыми знаниями ЯП.

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

Тут все базируется на классах. Пользователи при наличии достаточной внимательности разберутся без существенных навыков, знаний и умений в разработке, как действует софт.

Это – идеальный шаблон для детального изучения тем, кто хочет плотно заниматься Java. Помогает создать «базу» для большинства сложных будущих проектов.

На Python

Стоит обратить внимание на еще один ЯП. А именно – на Python. Он является достаточно легким и функциональным. Пользуется неплохим спросом у современных разработчиков, но найти того, кто пишет «только на Питоне», проблематично. Обычно соответствующий язык – это дополнение к уже имеющимся навыкам, знаниям и умениям в разработке.

Предложенный далее шаблон – это аналог софта на Java, но более усовершенствованный. Здесь:

  1. Функционирование разбивается на этапы.
  2. Сначала происходит создание рамки, после – кнопок.
  3. Логика – это последнее, что будет проходить стадию реализации.


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

Как быстро вникнуть в разработку

Любое программирование – это не так легко, как кажется. Особенно если пользователь хочет составлять сложные проекты. Быстро вникнуть в выбранный ЯП и его функции помогут следующие варианты:

  1. Поступление в техникум. Подход, который сгодится для получения «базы». Эдакий «легкий старт», формирующий общее понимание разработки. Поступить в техникум можно после 9 или 11 классов в школе. Углубленно здесь ни один ЯП не изучается. В конце выдается диплом о среднем специальном образовании.
  2. Поступление в ВУЗ. Самый лучший подход, но он долгий. На разработчиков и других работников IT обычно учатся в университетах. Срок обучения – 4-6 лет. В процессе предстоит изучить много теории и закрепить ее практикой. Некоторые ВУЗы предлагают углубленное изучение тех или иных языков программирования. СИ-семейство рассматривается всегда. Дорогой вариант, но в конце будет выдан диплом о высшем образовании. Он поможет при трудоустройстве. Если человек ранее учился в техникуме, его могут зачислить сразу на 2-3 курс.
  3. Самообразование. Быть самоучкой – не всегда плохо. Иногда именно такие специалисты добиваются успеха. Придется искать материалы самостоятельно. Пример – обучающие видео и специализированная литература. Можно сконцентрироваться на практике, а вот документально подтвердить знания не получится.

Но в 21 веке при расцвете IT-технологий стоит присмотреться к еще одному подходу. Речь идет об обучении на дистанционных компьютерных онлайн курсах. Существуют программы, рассчитанные на срок до года. В сжатые временные рамки даже из чайника сделают настоящего разработчика на C, C++, Java, Kotlin, Python и не только. Процесс сопровождается кураторством, интересными домашними заданиями, практикой и сбором портфолио. В конце выдается электронный сертификат, указывающий на полученный багаж знаний, навыков, умений.

P. S. Интересует разработка? Обратите внимание на курс «Программист C». Также в Otus доступно множество других современных курсов.

Blog

В последние годы цифровой мир всё больше использует облачные системы. Сервисы вроде timeweb.cloud доказали своё удобство и надёжность, мгновенно обрабатывая гигантские объёмы информации. Но сегодня мы вспомним основы современных технологий и расскажем вам, как написать программу-калькулятор своими руками.

Простой Калькулятор На Python (1)

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

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

У настольного калькулятора есть:

  •     Кнопки с цифрами
  •     Кнопки с математическими операциями
  •     Дисплей
  •     Микросхемки внутри

В функции настольного калькулятора входит:

  •     Сложение
  •     Вычитание
  •     Деление 
  •     Умножение
  •     Сброс операции
  •     Сохранение результата
  •     Вычисление процента
  •     Взятие корня числа

Для понимания принципа написания калькулятора возьмем из этого списка минимальный набор функций:

  •     Ввод чисел
  •     Вывод результата
  •     Сложение
  •     Вычитание
  •     Деление
  •     Умножение

Код можно писать прямо в онлайн-редакторе.

Например:

  •   https://www.online-python.com/
  •   https://replit.com/languages/python3

Примеры кода математических операций

Математические операции, которые будем использовать:

2+2
4

10-5
5

3*3
9

12/4
3.0

Вывод значения

Чтобы видеть результат, его нужно вывести на экран. Для этого существует функция print(), которая выводит аргументы в скобках в консоль.

print(4 * 4)
16

Эта функция будет аналогом дисплея нашего калькулятора.

Сохранение результата в переменную

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

result = 16 / 8

Далее мы сможем вывести в консоль значение переменной.

print(result)
2.0

Чтение строк

С дисплеем разобрались, теперь используем Python 3 для создания ввода с клавиатуры. У нас есть кнопки с цифрами на клавиатуре, чтобы передать их программе, существует функция input(). При вызове она считывает любые символы с клавиатуры до тех пор, пока не будет нажата клавиша Enter. После этого она возвращает результат в виде строки из введённых символов. Давайте посмотрим, как это работает:

text = input() # Hi
Hi

Выведем результат на экран.

print(text)
Hi

Если передать внутрь функции input() текст, то он выводится на экран перед тем, как начнётся считывание строки.

username = input('Enter your name: ') # Иван
print(username)
Enter your name: Иван
Иван

Объединение и форматирование строк

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

print('Hello, ' + username + '!')
Hello, Иван!

Ещё один способ объединения текста с данными — использование форматированных строк. Для этого перед кавычками необходимо поставить символ f, а данные записывать прямо внутри строки в фигурных скобках. Такой функционал появился с версии Python 3.6.0.

print(f'Hello, {username}!')
Hello, Иван!

Перевод строк в число

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

# Считываем данныеa = input('Введите первое число: ')
b = input('Введите второе число: ')​

# Производим вычисления
result = a + b

# Выводим результат в консоль
print(f'Сумма чисел {a} и {b} равняется: {result}')

Введите первое число: 12
Введите второе число: 55
Сумма чисел 12 и 55 равняется: 1255

Что-то пошло не так. Числа не сложились, а объединились как текст. Дело в том, что input() в Python возвращает ввод строки с клавиатуры, даже если вы вводили только числа. Такое поведение более явное, что соответствует философии Python: «Явное лучше, чем неявное». Для того чтобы исправить возникшую ошибку, используем функцию перевода строки в число: int(). Посмотрим на примере, как работает num int input:

num = int(input())
print(num + 10)
32
42

Отредактируем нашу программу.

# Считываем данныеa = int(input('Введите первое число: '))
b = int(input('Введите второе число: '))

# Производим вычисления
result = a + b

# Выводим результат в консоль
print(f'Сумма чисел {a} и {b} равняется: {result}')

Введите первое число: 12
Введите второе число: 55
Сумма чисел 12 и 55 равняется: 67

Обработка некорректных данных

Но что если пользователь введёт не числа, а буквы или другие символы? При попытке перевести такую строку в число Python выдаст ошибку и остановит выполнение программы.

int(input('Введите первое число: '))
Введите первое число: abc
------------------------------------------------------------------------

ValueError  Traceback (most recent call last)
C:Tempipykernel_5404317567321.py in <module>
----> 1 int(input('Введите первое число: '))

ValueError: invalid literal for int() with base 10: 'abc'

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

Создание функций

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

  • Сложение
  • Вычитание
  • Деление
  • Умножение

Чтобы улучшить читаемость кода, разделим эти операции на отдельные функции. Смотрите, как это делается на примере суммы.

# Сложение
def sum(a, b):
   result = a + b
   return result

Определяем функцию с помощью ключевого слова def, пишем её название и в скобках указываем, какие параметры она принимает. Далее в теле функции пишем то, что она должна выполнять и возвращаем результат с помощью ключевого слова return .

Обратите внимание, что тело функции записывается с отступами строки — таковы правила создания функции. В противном случае будет ошибка.

def test():
print(123)
 File "C:Tempipykernel_5404353670293.py", line 2
    print(123)
    ^
IndentationError: expected an indented block

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

x = sum(10, 15)
print(x)
25

Аналогичным образом создадим остальные функции вычисления.

# Вычитаниеdef subtract(a, b):
   result = a - b
   return result

# Умножение
def multiply(a, b):
   result = a * b
   return result

# Деление
def divide(a, b):
   result = a / b
   return result

Условные операторы

Функции операций готовы. Осталось написать простой код на питоне, который предоставит пользователю возможность выбора этих операций. Будем использовать уже знакомый нам ввод с клавиатуры и условные операторы. Условные операторы работают очень просто. Их название говорит само за себя.

Если условие истинно, например 2 == 2,
то выполняем один блок кода ,
иначе
выполняем другой блок кода

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

# спрашиваем у пользователя пароль
password = input('Введите пароль: ')

# Проверяем, соответствует ли он задуманному нами
if password == 'qwerty':
   print('Верно!')
else:
   print('Неправильный пароль')
Введите пароль: йцукен
Неправильный пароль

# спрашиваем у пользователя пароль
password = input('Введите пароль: ')

# Проверяем, соответствует ли он задуманному нами
if password == 'qwerty':
   print('Верно!')
else:
   print('Неправильный пароль')
Введите пароль: qwerty
Верно!

Обратите внимание, что блоки кода также пишутся с отступами, как и в функциях. Двоеточие также обязательно.

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

# Подготовим сообщение для пользователя о доступных математических операциях.
# В тройных кавычках можно хранить многострочный текст.
message = '''
Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:​

+ : Сложение
- : Вычитание
/ : Деление
* : Умножение

Ваш выбор:
'''​

# Запрашиваем у пользователя желаемое действие
operation = input(message)​

# Выводим сообщение о выбранной операции или что она отсутствует
if operation == '+':
   print('Сложение')
elif operation == '-':
   print('Вычитание')
elif operation == '/':
   print('Деление')
elif operation == '*':
   print('Умножение')
else:
   print('Неизвестная операция') 

Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter: 

+ : Сложение
- : Вычитание
/ : Деление
* : Умножение 

Ваш выбор:
+

Сложение

 

Собираем всё в единое целое

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

def calculate(a, b, operation):
   result = None 

   if operation == '+':
       result = sum(a, b)
   elif operation == '-':
       result = subtract(a, b)
   elif operation == '/':
       result = divide(a, b)
   elif operation == '*':
       result = multiply(a, b)
   else:
       print('Неизвестная операция')  

     return result

Также добавим функцию для запроса операции.

def ask_operation():
   message = '''
Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:

+ : Сложение
- : Вычитание
/ : Деление
* : Умножение

Ваш выбор:
   '''

   # Запрашиваем у пользователя желаемое действие
   operation = input(message) 

   return operation

Теперь оборачиваем все этапы взаимодействия с калькулятором в условный корпус функции calculate.

def run_calculator():
   # Запрашиваем данные
   a = int(input('Введите первое число: '))
   b = int(input('Введите второе число: '))

   # Запрашиваем тип операции
   operation = ask_operation()

   # Производим вычисления
   result = calculate(a, b, operation)

   # Выводим результат в консоль
   print(f'Результат вычислений: {result}')

Проверяем!

run_calculator()
Введите первое число: 15
Введите второе число: 15

Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:

+ : Сложение
- : Вычитание
/ : Деление
* : Умножение

Ваш выбор:
    *
Результат вычислений: 225

Работает! Поздравляем, только что вы написали свой калькулятор.

Расширение функционала и улучшение кода

Добавление операций

Благодаря тому, что функции вычисления вынесены в отдельные модули calculate python, мы можем с лёгкостью расширять функционал калькулятора.

Давайте добавим операцию возведения в степень.

def pow(a, b):
   result = a ** b
   return result

Добавляем операцию в функцию вычисления.

def calculate(a, b, operation):
   result = None

   if operation == '+':
       result = sum(a, b)

   elif operation == '-':
       result = subtract(a, b)

   elif operation == '/':
       result = divide(a, b)

   elif operation == '*':
       result = multiply(a, b)

​   # Возведение в степень
   elif operation == '^' or operation == '**':
       result = pow(a, b)

   else:
       print('Неизвестная операция')

   return result

Также добавим пояснения в функцию запроса действия.

def ask_operation():
   message = '''
Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:
+ : Сложение
- : Вычитание
/ : Деление
* : Умножение
^ или ** : Возведение в степень
Ваш выбор: '''

   # Запрашиваем у пользователя желаемое действие
   operation = input(message)

   return operation

Проверяем, запустив функцию run_calculator().

run_calculator()
Введите первое число: 2
Введите второе число: 8

Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:
+ : Сложение
- : Вычитание
/ : Деление
* : Умножение
^ или ** : Возведение в степень

Ваш выбор: **
Результат вычислений: 256

Тестирование и обработка ошибок

Сейчас, если мы введём неизвестную операцию, калькулятор выдаст сообщение, что такой операции нет, и оставит всё, как есть. Более того, он выведет сообщения о полученном результате, которого по определению быть не должно. Давайте посмотрим:

run_calculator()
Введите первое число: 3
Введите второе число: 5

Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:
+ : Сложение
- : Вычитание
/ : Деление
* : Умножение
^ или ** : Возведение в степень

Ваш выбор: &
Неизвестная операция
Результат вычислений: None

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

Циклы

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

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

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

text = None

while text != '':
   text = input('Напишите что-нибудь или оставьте строку пустой, чтобы закончить:n')
   print(f'Вы ввели: {text}n')

print('Завершение программы')
Напишите что-нибудь или оставьте строку пустой, чтобы закончить:
123
Вы ввели: 123

Напишите что-нибудь или оставьте строку пустой, чтобы закончить:
test
Вы ввели: test

Напишите что-нибудь или оставьте строку пустой, чтобы закончить:
Вы ввели:

Завершение программы

Теперь применим это к калькулятору.

Для этого изменим функцию запроса операции ask_operation

def ask_operation():
   message = '''
Пожалуйста, введите символ операции, которую вы хотите совершить и нажмите Enter:
+ : Сложение
- : Вычитание
/ : Деление
* : Умножение
^ или ** : Возведение в степень

Ваш выбор: '''

   # Создадим список с возможными операциями
   correct_operations = ['+', '-', '/', '*', '^', '**']

   # Первый раз запрашиваем у пользователя желаемое действие
   operation = input(message)

   # Запускаем цикл, если операции нет в списке
   while operation not in correct_operations:
       print('Такая операция недоступна. Повторите попытку.')
       operation = input(message)

   return operation

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

Заключение

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

Программирование на C, C# и Java

Уроки программирования, алгоритмы, статьи, исходники, примеры программ и полезные советы

ОСТОРОЖНО МОШЕННИКИ! В последнее время в социальных сетях участились случаи предложения помощи в написании программ от лиц, прикрывающихся сайтом vscode.ru. Мы никогда не пишем первыми и не размещаем никакие материалы в посторонних группах ВК. Для связи с нами используйте исключительно эти контакты: vscoderu@yandex.ru, https://vk.com/vscode

Калькулятор на C#

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

Создание пользовательского интерфейса калькулятора

Создадим в Visual Studio проект на Visual C# Windows Forms. Добавим на форму элемент GroupBox, в который поместим Label. В свойстве Dock, элемента Label, необходимо указать Right, чтобы Label был привязан к правому краю. Связка данных элементов управления будет реализовывать дисплей калькулятора.

Калькулятор также содержит кнопки. Всего их 28 штук. Пользовательский интерфейс представлен на рисунке 1.

Калькулятор на C#

Рисунок 1. Интерфейс калькулятора

Кнопка «+/-» меняет знак операнда на противоположный.

Кнопка MRC, а также кнопки M+, M-, M×, M÷, реализуют отдельный регистр памяти калькулятора и команды для управления им. Что такое MRC можно прочитать — здесь.

Программирование калькулятора на C#

Реализация интерфейса класса

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

Добавим в проект класс InterfaceCalc.cs и определим в созданном файле интерфейс InterfaceCalc.

Для выполнения математических операций понадобится два операнда: a и b (например, a + b). Операнд a придется хранить в памяти калькулятора, пока пользователь будет вводить второй аргумент операции. Для сохранения числа a объявим прототип метода void Put_A(double a), для очистки — void Clear_A(). Для умножения, деления, сложения и вычитания чисел a и b соответственно понадобятся методы: double Multiplication(double b), double Division(double b), double Sum(double b), double Subtraction(double b). Вычисление корня степени b из a: double SqrtX(double b). Возведение числа a в степень b: double DegreeY(double b). Вычисление квадратного корня: double Sqrt(). Возведение числа a в квадрат: double Square(). Вычисление факториала a!: double Factorial(). Теперь объявления методов для работы с регистром памяти (MRC) калькулятора. Показать содержимое памяти и очистить его: double MemoryShow(), void Memory_Clear(). M×, M÷, M+ и M- к регистру соответственно: void M_Multiplication(double b), void M_Division(double b), void M_Sum(double b), void M_Subtraction(double b).

Создание класса, реализующего интерфейс InterfaceCalc

Теперь добавим в калькулятор класс, который будет реализовывать написанный ранее интерфейс. Для этого в проекте создадим класс Calc : InterfaceCalc. Как вы видите, здесь используется наследование (оператор «двоеточие»). В данном классе напишем реализацию всех методов, требуемых спецификацией нашего интерфейса.

VIII Международная студенческая научная конференция Студенческий научный форум — 2016

ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ЧИСЛЕННОГО РЕШЕНИЯ СИСТЕМЫ ЛИНЕЙНЫХ АЛГЕБРАИЧЕСКИХ УРАВНЕНИЙ С ТРЕХДИАГОНАЛЬНОЙ МАТРИЦЕЙ КОЭФФИЦИЕНТОВ

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

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

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

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

Для достижения данной цели необходимо выполнить следующие задачи:

— изучить основные понятия и способы нахождения решения,

— выбрать средства для реализации программы,

Для решения задачи будет использоваться язык программирования C++.

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

1. ТЕОРЕТИЧЕСКАЯ ЧАСТЬ

Метод прогонки для решения СЛАУ

Трехдиагональной матрицей или матрицей Якоби называют матрицу следующего вида:

где во всех остальных местах, кроме главной диагонали и двух соседних с ней, стоят нули.

Для решения СЛАУ с трёхдиагональной матрицей используется метод прогонки.[1]

Метод прогонки (англ. tridiagonal matrix algorithm) или алгоритм Томаса (англ. Thomas algorithm) используется для решения систем линейных уравнений вида , где A —трёхдиагональная матрица. Представляет собой вариант метода последовательного исключения неизвестных. Метод прогонки был предложен И. М. Гельфандом и О. В. Локуциевским (в 1952 году; опубликовано в 1960 и 1962 годах), а также независимо другими авторами.[3]

Метод применяется в случае, когда матрица A — трехдиагональная. Сформулируем общую постановку задачи.

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

которому соответствует расширенная матрица:

Здесь первое и последнее уравнения, содержащие по два слагаемых, знак минус (–) при коэффициенте βi взят для более удобного представления расчетных формул метода.

Требуется найти решение системы (1) методом исключения Гаусса.

Если к (1) применить алгоритм прямого хода метода Гаусса, то вместо исходной расширенной матрицы получится трапециевидная:

Учитывая, что последний столбец в этой матрице соответствует правой части, и переходя к системе, включающей неизвестные, получаем рекуррентную формулу:

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

Приводя эту формулу к виду (2) и сравнивая, получаем рекуррентные соотношения для

Определение прогоночных коэффициентов по формулам (3) соответствует прямому ходу метода прогонки.

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

Остальные значения неизвестных находятся по рекуррентной формуле (2).[5]

Алгоритм решения систем уравнений методом прогонки

Прямой ход.1. Вычислить (в (3) подставить ).

2. Вычислить прогоночные коэффициенты: по формулам (3).

2. Значения определить по формуле (2):

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

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

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

и в (5) имеет место строгое неравенство хотя бы при одном .

4. Алгоритм метода прогонки является экономичным и требует для своей реализации количество операций, пропорциональное .[5]

2. ВЫБОР ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Среда разработки Embarcadero C++ Builder XE

Embarcadero C++Builder XE — это на сегодняшний день последняя современная технология и среда для программирования на языке C++, пришедшая на смену многострадальному средству визуальной разработки на языке C++ Builder, которая первоначально разрабатывалась компанией Borland Software, а затем её отдельным подразделением CodeGear, которое сейчас принадлежит компании Embarcadero Technologies, занимающаяся разработкой программного обеспечения для создания средств управления различными базами данных.

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

При этом сохраняются бесплатные лицензии на прежние старые версии: C++Builder 2010, 2009, 2007 и C++Builder 6, что очень важно для многих программистов использующих язык С++.

По этому, сразу можно сказать, что все старые программы, написанные на Borland C++ Builder 6.0, были легко откомпилированы с помощью Embarcadero C++Builder XE. Сама оболочка стала более понятной и удобной и не вызывала раздражение, как это было в версиях после Borland C++ Builder 6.0.(Рисунок 1).[4]

Рисунок 1 — Среда разработки C++ Builder XE

Средаразработки Microsoft Visual Studio 2012

Microsoft Visual Studio — линейка продуктов компании Microsoft, включающих интегрированную среду разработки программного обеспечения и ряд других инструментальных средств. Данные продукты позволяют разрабатывать как консольные приложения, так и приложения с графическим интерфейсом, в том числе с поддержкой технологии Windows Forms, а также веб-сайты, веб-приложения, веб-службы как в родном, так и в управляемом кодах для всех платформ, поддерживаемых Windows, Windows Mobile, Windows CE, .NET Framework, Xbox, Windows Phone .NET Compact Framework и Silverlight.[2]

Рисунок 2 — Среда разработки Microsoft VS 2012

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

Среда разработки QtCreator

Qt Creator (ранее известная под кодовым названием Greenhouse) — кроссплатформенная свободная IDE для разработки на С, С++ и QML. Разработана Trolltech (Digia) для работы с фреймворком Qt. Включает в себя графический интерфейс отладчика и визуальные средства разработки интерфейса как с использованием QtWidgets, так и QML. Поддерживаемые компиляторы: GCC, Clang, MinGW, MSVC, Linux ICC, GCCE, RVCT,WINSCW.[2]

Рисунок 3 — Среда разработки Qt Creator

Основная задача Qt Creator — упростить разработку приложения с помощью фреймворка Qt на разных платформах. Поэтому среди возможностей, присущих любой среде разработки, есть и специфичные, такие как отладка приложений на QML и отображение в отладчике данных из контейнеров Qt, встроенный дизайнер интерфейсов как на QML, так и на QtWidgets.

Обоснование выбора среды разработки

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

Почему выбор пал именно на данный вид компилятора? Это связано с тем, что программирование в C++ Builder значительно эффективнее, чем в других средах и платформах C/C++, таких как GCC, Visual C++ и MFC. Библиотека визуальных компонентов (VCL) C++Builder инкапсулирует сложные, трудоемкие интерфейсы Windows API в удобные, расширяемые компоненты многократного применения. Она полностью интегрирована в среду разработки и двусторонние визуальные конструкторы. Это облегчает управление свойствами и методами компонентов через программный код и в визуальном режиме. В результате при разработке приложений с помощью библиотеки VCL приходится писать, отлаживать и тестировать до 5 раз меньше программных строк без ухудшения производительности и функциональных возможностей. Приложения, созданные с использованием компонентов, отличаются более высоким качеством, они удобнее в обслуживании и легче поддаются изменению.[4]

3. ОПИСАНИЕ РЕАЛИЗАЦИИ ПРОГРАММЫ

После анализа предметной области можно переходить к программной реализации.

В качестве языка программирования для реализации алгоритма был выбран язык С++. Это очень мощный язык, позволяющий создавать программы любого назначения и любой сложности. Поддерживаются множество стилей программирования, включая ООП. Имеется возможность прямой работы с памятью.

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

Реализация алгоритма решения СЛАУ

Рассмотрим основное тело программы, написанное в файле Unit1.cpp.

Первым делом, мы видим заголовочные файлы форм Unit1.h и Unit2.h Листинг 1.1.

Листинг 1.1. Заголовочные файлы форм

Дальше идёт объявление переменной (AnsiString num), а которой хранится вся информация о размере таблицы.

В следующей части находится событие, которое выполняется при нажатии на кнопку Button. Листинг 1.2.

Листинг 1.2. Событие Button1Click

void __fastcall TForm1::Button1Click(TObject *Sender)

Далее рассмотрим основное тело программы, написанное в файле Unit2.cpp.

Здесь мы видим событие после показа формы. Как только в первой форме выполняется команда Form2->Show(), сразу выполняется код в этом событии. Листинг 1.3.

Листинг 1.3. Событие FormShow

void __fastcall TForm2::FormShow(TObject *Sender)

int n = StrToInt(n1);

Далее выделяется память под массив типа float размером NxN и предоставляются следующие переменные для наглядного вывода. Листинг 1.4.

Листинг 1.4. Выделение памяти под массив

float *base = (float*)calloc(n*(n + 1), sizeof(float));

Следующая часть служит для ввода данных. В данном цикле создаются окна для ввода Input — это и есть вызов окна с параметрами. После ввода строки матрицы она добавляется в ListBox для наглядного отображения. Листинг 1.5.

Листинг 1.5. Ввод данных

for (int i = 0; iItems->Add(st1);

Далее идёт выделение массивов для вспомогательных коэффициентов, расчёт и вывод первых и всех остальных коэффициентов по формулам. Также происходит выделение памяти под массив ответов. Листинг 1.6.

Листинг 1.6. Выделение массивов, расчёт и вывод коэффициентов

//Выделение массивов для вспомогательных коэффициентов

float *alpha; float *betta;

alpha = (float*)calloc(n, sizeof(float));

betta = (float*)calloc(n, sizeof(float));

//Расчет и вывод первых коэффициентов

*alpha = -*(base + 1) / *base;

*betta = *(base + n) / *base;

//В этом цикле производится расчет всех остальных коэффициентов.

for (int i = 1; i= 0; i—)

*(ans + i) = *(alpha + i)**(ans + i + 1) + *(betta + i);

В следующей части, в элемент ListBox добавляются по очереди корни, которые выводятся на форму, каждый с новой строки. А далее находится событие, которое выполняется при нажатии на кнопку FormClose. И, в заключении, программа закрывается. Листинг 1.8.

Листинг 1.8.Вывод корней на экран

for (int i = 0; iItems->Add(st);

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)

4. ТЕСТИРОВАНИЕ РАБОТЫ ПРОГРАММЫ

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

Решение контрольного примера

Дана система линейных алгебраических уравнеий с трёхдиагональной матрицей:

Решим эту систему методом прогонки.

Данная система удовлетворяет условию преобладания диагональных элементов (10.3): в первом уравнении , во втором уравнении ; в третьем уравнении , в четвертом уравнении . Далее выполняем прямой и обратный ход, учитывая, что расширенная матрица имеет вид:

1. Прямой ход. Вычислим прогоночные коэффициенты:

Подчеркнем, что , так как в (10.2) во втором слагаемом взят знак «минус»:

Подстановкой решения в исходную систему убеждаемся, что задача решена верно. Для данного примера , т.е. метод прогонки оказался корректным и устойчивым (см. пункт 3 замечаний 10.3).

Для наглядности представления информации исходные данные и результаты расчетов поместим в табл. 10.1, где в первых четырех колонках содержатся исходные данные, а в последних трех — полученные результаты. Таблица 1.1.

Исходные данные и результаты расчётов

Результат работы созданного программного обеспечения

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

Рисунок 4 — Ввод данных о размерности матрицы.

Далее по очереди вводим элементы 1 строки нашей матрицы и элемент столбца правой части системы, как указано на рисунках 5 и 6 соответственно:

Рисунок 5 — Ввод элементов первой строки

Рисунок 6 — Ввод элемента столбца правой части системы.

То же самое проделываем с остальными строками, в зависимости от размера матрицы. Закончив с вводом данных, мы получаем итоговое окно, где можем наблюдать окна с выводом нашей системы линейных алгебраических уравнений и её корнями. (Рисунок 7).

Рисунок 7 — Вывод СЛАУ и её корней.

При выполнении работы вручную и с помощью программы, мы можем сделать вывод, что вычисление происходит с небольшой погрешностью в 0,0001, что с правильным округлением значения приводит к верному ответу. Следовательно, можно сделать вывод, что программа работает правильно. Результаты можно увидеть в приведенной ниже таблице 2.

ЗАКЛЮЧЕНИЕ

Численные методы являются одним из мощных математических средств решения задачи. Простейшие численные методы мы используем всюду, например, извлекая квадратный корень на листке бумаги. Есть задачи, где без достаточно сложных численных методов не удалось бы получить ответа; классический пример – открытие Нептуна по аномалиям движения Урана.

Одним из самых распространенных методов решения систем линейных уравнений является метод прогонки. Условие преобладания диагональных элементов обеспечивает также устойчивость метода прогонки относительно погрешностей округлений. Последнее обстоятельство позволяет использовать метод прогонки для решения больших систем уравнений. Метод прогонки оказывается устойчивым даже при нарушении условия преобладания диагональных элементов.

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

Мы так же достигли поставленные цели и задачи: изучили решение СЛАУ с трёхдиагональной матрицей коэффициентов (метод прогонки) и, используя полученные знания, создали программу для решения СЛАУ данным методом.

СПИСОК ИСПОЛЬЗУЕМОЙ ЛИТЕРАТУРЫ 1. Каханер Дэвид. Численные методы и программное обеспечение учебник для ВУЗов М., Мир, 1998 2.М. Шлее. Qt 4.8. Профессиональное программирование на C++. – СПб.: БХВ-Петербург, 2012 3. https://ru.wikipedia.org 4. http://www.interface.ru/ 5. http://mathhelpplanet.com/

Студенческий научный форум — 2016
VIII Международная студенческая научная конференция

В рамках реализации «Государственной молодежной политики Российской Федерации на период до 2025 года» и направления «Вовлечение молодежи в инновационную деятельность и научно-техническое творчество» коллективами преподавателей различных вузов России в 2009 году было предложено совместное проведение электронной научной конференции «Международный студенческий научный форум».

Создание калькулятора на C++

Конструктор копирования в C++

Программирование и разработка

С самого начала истории техники нам было известно множество машин, изобретенных учеными. Одной из первых вычислительных машин был калькулятор, который был изобретен для простых вычислений суммы, сложения, умножения и деления. Это была огромная машина по сравнению с нынешним гаджетом-калькулятором, который довольно маленький и портативный. Но разные языки программирования дают нам возможность выполнять больше математических вычислений, таких как калькуляторы, в программах без калькулятора. Итак, в этом руководстве мы покажем вам программы для создания калькулятора на платформе C++ системы Ubuntu 20.04.

Пример 1

Итак, начнем первый пример с открытия оболочки терминала с помощью сочетания клавиш, т.е. «Ctrl+Alt+T». Вам нужен файл С++, в котором вы будете кодировать С++. Мы создаем его в консоли оболочки, используя «сенсорный» запрос системы Ubuntu 20.04. Имя файла «calculator.cc». Доступ к этому файлу можно получить из «домашнего» каталога, и его можно открыть в любом из редакторов, предоставляемых Ubuntu 20.04. Поэтому мы использовали встроенный в Ubuntu 20.04 редактор «GNU Nano». Обе команды показаны на прилагаемом изображении.

Программа запускается из включения заголовочного файла

Программа запускается из включения заголовочного файла «iostream» и стандартного пространства имен «std». Эта программа будет выполнять только 4 основные операции калькулятора, т. е. суммировать, вычитать, умножать и делить. Функция main() запускается с объявления двух переменных с плавающей запятой v1 и v2 и одной переменной символьного типа, «знак». Первое предложение «cout» просит пользователя добавить знак оператора в терминале и сохранить его в переменная «знак», используя предложение «cin». Другой оператор cout просит пользователя добавить два значения с плавающей запятой и последовательно сохранить их в переменные v1 и v2 с помощью оператора «cin». Мы использовали оператор «switch» для выполнения операций калькулятора.

Оператор «switch» использует переменную «sign» в качестве значения переключателя. В соответствии с этим значением переменной «знак» будут выполняться случаи переключения. Если пользователь нажал «+» при запросе оператора, он выполнит случай «+» и добавит значения переменных v1 и v2 и отобразит их в оболочке. Если пользователь добавит знак «-» по запросу, он выполнит случай «-» и вычтет значение v2 из значения v1. Также если пользователь добавит знак «*„, он выполнит случай “*» и умножит v1 на v2. Случай «/» будет выполнен, если пользователь добавит знак «/» при запросе, а значение переменной v1 будет разделено на значение v2. Случай по умолчанию будет выполнен, если пользователь добавил что-либо кроме знака «+,-,/,*» после запроса оператора «знак». Это было все о создании калькулятора в программе C++.

Пришло время скомпилировать наш недавно созданный код

Пришло время скомпилировать наш недавно созданный код калькулятора с помощью компилятора C++. Вы должны убедиться, что в вашей системе Ubuntu 20.04 должен быть настроен g++ с помощью пакета «apt». Таким образом, мы использовали здесь команду компилятора «g++» для компиляции файла «calculator.cc». Это было успешно, и мы выполнили файл с запросом «./a.out». Пользователь ввел знак «/» по запросу оператора. Затем пользователя попросили добавить два значения с плавающей запятой, и пользователь добавил «7,6» и «4». Программа-калькулятор вычислила результат деления и отобразила его в следующей строке, как показано на изображении ниже.

Программа-калькулятор вычислила результат деления

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

файла мы добавили оператор «+» и два значения с плавающей запятой

Снова запустив файл, мы добавили знак «-» и добавили две цифры. Первое число — 3, а второе — 9. После того, как программа выполнила вычитание «3-9», получается «-6».

Снова запустив файл, мы добавили знак «-» и добавили две

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

После повторного запуска файла пользователь добавил «»

В последнем исполнении мы добавили знак «%», который не упоминается ни в одном случае оператора switch, и добавили две цифры. Таким образом, случай оператора switch по умолчанию был выполнен и показывает, что пользователь добавил неправильный оператор.

Таким образом, случай оператора switch по умолчанию был выполнен и показывает

Пример 2

Давайте рассмотрим еще один пример создания калькулятора с использованием пользовательских функций. Мы запустили эту программу с некоторыми основными заголовочными файлами, необходимыми для выполнения этого файла, т. е. iostream, math.h, stdio.h, stdlib.h. После использования стандартного пространства имен в программе мы объявили прототипы функций, которые мы будем использовать в нашем приложении-калькуляторе, т. е. суммирование, минус, умножение, деление, возведение в квадрат и квадратный корень.

Давайте рассмотрим еще один пример создания калькулятора

Функция main() была запущена с объявления переменной символьного типа «знак». Оператор cout реализован здесь, чтобы попросить пользователя добавить оператор по своему выбору. Этот оператор будет собран через предложение «cin» и сохранен в переменной «sign». Оператор switch использует этот оператор, введенный пользователем в переменной «знак», для выполнения конкретной функции в соответствии с конкретным случаем, то есть «+,-,/,*,s,q». Случай по умолчанию будет выполнен, если используется любой другой оператор. Здесь метод main() закрыт.

Функция main() была запущена с объявления переменной

Самый первый метод — это функция «Sum()», которая добавляет более 1 числа. После инициализации некоторых переменных он запрашивает общее количество значений, которые пользователь хочет сложить вместе, и сохраняет их в переменной «t». Пользователя просят вводить значения одно за другим в «val» и суммировать их вместе в переменной «sum» до полного «t» цикла. Сумма будет отображаться.

Пользователь введет два числа в v1 и v2

Пользователь введет два числа в v1 и v2. Значение v1 будет вычтено из v2 и сохранено в третьей переменной «sub». Отобразится значение вычитания «sub».

начение v1 будет вычтено из v2 и сохранено в третьей перемен

Функция Multiply() похожа на функцию Sum(), но с одним отличием: вместо знака «+» используется знак «*». Обязательно инициализируйте переменную «mul» как 1 в начале.

похожа на функцию Sum() но с одним вместо знака

Функция Разделить() аналогична функции «Минус()» с единственной сменой знака «/».

Функция Разделить() аналогична функции «Минус

Функция «Квадрат()» предназначена для умножения значения на себя, чтобы получить квадрат, как показано на рисунке.

Функция «Квадрат()» предназначена для умножения значения

Для нахождения квадратного корня значения здесь используется встроенный метод sqrt().

Для нахождения квадратного корня значения здесь

Мы добавили знак «*», 7 чисел и получили результат умножения при первом запуске.

7 чисел и получили результат умножения при первом

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

Во втором прогоне мы вычислили сумму 9 целых чисел

Результат «вычитания» двух целых чисел показан ниже.

Результат «вычитания» двух целых чисел показан

Вот расчет деления 2 целых чисел.

Вот расчет деления 2 целых чис

Последнее выполнение показывает результат функций квадратного корня и квадратного корня.

Последнее выполнение показывает результат функций квадратного

Вывод

Эта статья содержит очень простые, подробные и простые примеры создания простого калькулятора на языке C++ при работе на терминале Ubuntu 20.04. Мы использовали операторы switch для достижения цели создания калькулятора. Я надеюсь, что это будет очень полезно.

Понравилась статья? Поделить с друзьями:
  • Как найти стажировку для опыта
  • Как составить газету по обществознанию
  • Броня валькирии god of war как найти
  • Как найти сайт электронная библиотека
  • Как найти настоящий яблочный уксус