Писать калькулятор: Пишем собственный калькулятор на Си OTUS

Пишем собственный калькулятор на Си OTUS

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

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

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

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

Такие приложения пригодятся студентам и ученикам ВУЗов/школ на первых порах. Он не будет обладать многочисленными «инженерными» 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 доступно множество других современных курсов.

Калькулятор на python / Хабр

Начало

Здравствуйте, в предыдущей статье я показывал как сделать игру на python, а сейчас мы посмотри как сделать простой калькулятор на python tkinter.


Создаём окно 485 на 550. 2″ ]

Он отвечает за все кнопки, отображающиеся у нас в окне.

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

x = 10
        y = 140
        for bt in btns:
            com = lambda x=bt: self.logicalc(x)
            Button(text=bt, bg="#FFF",
                   font=("Times New Roman", 15),
                   command=com).place(x=x, y=y,
                                      width=115,
                                      height=79)
            x += 117
            if x > 400:
                x = 10
                y += 81

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

self.formula = "0"
self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"),
                 bg="#000", foreground="#FFF")
self.lbl.place(x=11, y=50)

Пишем логику

def logicalc(self, operation):
    if operation == "C":
        self. 2":
        self.formula = str((eval(self.formula))**2)
    elif operation == "=":
        self.formula = str(eval(self.formula))
    else:
        if self.formula == "0":
            self.formula = ""
        self.formula += operation
    self.update()
def update(self):
    if self.formula == "":
        self.formula = "0"
    self.lbl.configure(text=self.formula)

Так, как у нас нет ввода с клавиатуры, мы можем позволить себе сделать так, просто проверить на спец. кнопки (C, DEL, =) и в остальных случаях просто добавить это к формуле.

У этого калькулятора множество недочетов, но мы и не стремились сделать его идеальным.

Прошу прощения за ошибки в статье. Пишите, я исправлюсь.
from tkinter import *
class Main(Frame):
    def __init__(self, root):
        super(Main, self).__init__(root)
        self.build()
    def build(self):
        self.formula = "0"
        self.lbl = Label(text=self.formula, font=("Times New Roman", 21, "bold"), bg="#000", foreground="#FFF")
        self. 2":
            self.formula = str((eval(self.formula))**2)
        elif operation == "=":
            self.formula = str(eval(self.formula))
        else:
            if self.formula == "0":
                self.formula = ""
            self.formula += operation
        self.update()
    def update(self):
        if self.formula == "":
            self.formula = "0"
        self.lbl.configure(text=self.formula)
if __name__ == '__main__':
    root = Tk()
    root["bg"] = "#000"
    root.geometry("485x550+200+200")
    root.title("Калькулятор")
    root.resizable(False, False)
    app = Main(root)
    app.pack()
    root.mainloop()

Калькулятор стиля письма

«Абстракция требует определенного основания. Попытка достичь абстрактного принципа без конкретного фундамента подобна попытке начать дом, построив крышу в воздухе».

— Хит и Хит, с. 106

Абстракция относится к связыванию материальных объектов (например, продуктов, розничных продавцов) или действий (например, покупка продукта, использование услуги) с более широкими нематериальными категориями (например, потребление, экономика; Rosch 1999; Спиггл 1994; Тропе и Либерман, 2010). Ученые пишут об абстрактных понятиях, таких как восприятие бренда, удовлетворенность и потребление. Конкретные понятия, напротив, — это вещи, которые мы можем видеть, чувствовать, ощущать на вкус, обонять и слышать, например кирпичное здание, жирный огонь или лужа растаявшего мороженого. В ресторане посетители могут почувствовать запах карамелизированного лука, попробовать стейк из пашины и почувствовать, как сломанная пружина продевает ногу через подушку сиденья. Они могут почувствовать влажное жжение, если официант прольет кофе им на колени, и услышать его нерешительные извинения, когда они начнут набирать отзыв с одной звездой в приложении Yelp на своем телефоне. Этот негативный опыт обеда, возможно, оставил у клиентов чувство неудовлетворенности, но они не могут удержать «негативное впечатление» в своих руках, а также не могут уловить «неудовлетворенность» и съесть его, потому что эти понятия абстрактны.

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

Некоторый абстрактный язык необходим, потому что исследователям нужно писать об обобщенных конструкциях и отношениях между ними (т. е. теория; Trope 2004). Точно так же, как вы не хотели бы начинать дом, построив крышу в воздухе, вы также не хотите оставлять дом без крыши. Но ключ к хорошему письму, как и к плотницкому делу, заключается в том, чтобы начать с создания прочного фундамента. Однако хорошее письмо зависит от инструментов, отличных от столярных: вместо штукатурки и кирпича вам нужно будет использовать примеры и аналогии.

Примеры в гораздо большей степени, чем определения, служат основой для поддержки абстрактной идеи. Обратите внимание на то, как Kirmani et al. (2017) вводят черты, связанные с компетентностью и моралью:

«Потребители часто идут на подобные компромиссы между качествами, связанными с компетентностью и моралью, когда выбирают поставщиков услуг, таких как политики, агенты по недвижимости, автомеханики и бухгалтеры. Вечерние новости могут показать, что высокоэффективный политик совершил прелюбодеяние; знакомая может сообщить, что отмеченный наградами агент по недвижимости мошенничал с ее налогами; а онлайн-обзоры могут свидетельствовать о том, что опытный автомеханик унижает своих коллег» (Kirmani et al.

2017, 103).

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

Конкретные примеры — особенно эффективный инструмент, помогающий читателям понять абстрактные теории. Например, Хоффман и Новак (2018, 1179) знакомят читателей с теорией сборки, описывая, как Лайла, Коллин и Ноа, три воображаемых члена семьи, взаимодействуют с изменяющими цвет светодиодными лампочками Philips Hue, Amazon Echo, LG Rolling Bot. и приложения для смартфонов, такие как IFTTT и Spotify. Иллюстрируя то, как продукты, программное обеспечение и люди связаны друг с другом и изменяют поведение друг друга, Хоффман и Новак помогают читателям понять основные идеи теории сборки, не полагаясь на абстрактные технические термины. Сравните их описание с описанием в Википедии: «Теория сборки обеспечивает восходящую структуру для анализа социальной сложности, подчеркивая текучесть, взаимозаменяемость и многофункциональность сущностей и их связность.

Теория сборки утверждает, что внутри тела отношения составных частей не являются стабильными и фиксированными; скорее, они могут перемещаться и заменяться внутри и среди других тел, таким образом приближаясь к системам через отношения внешности» («Теория сборки», 2018).

Как и столбы, примеры более эффективны, если они сделаны из бетона, а не из зыбучего песка. Рассмотрим следующие примеры транзитивности. Quicksand: «Например, если потребителю А нравится продукт X больше, чем продукт Y, и продукт Y нравится больше, чем продукт Z, то ему также должен нравиться продукт X больше, чем продукт Z». Конкретный: «Например, если Джеку нравится пить виски больше, чем вино, и вино нравится пить больше, чем пахту, то ему также должно нравиться пить виски больше, чем пахту». Поскольку исследователи думают о своих исследованиях абстрактно, они слишком часто приводят примеры из зыбучих песков (например, «вариант, который хорошо работает с атрибутом A, но плохо с атрибутом B»), а не из конкретных (например, «автомобиль, который выглядит хорошо но стоит слишком дорого»).

Приложив дополнительные усилия, читатели могли бы расшифровать примеры из зыбучих песков, включающие продукты X, Y и Z с атрибутами A и B. Но им легче представить себе виски, вино, пахту и автомобили, которые дороги, но красивы. Таким образом, один из способов помочь читателям понять ваше исследование — использовать примеры из бетона, а не из зыбучих песков. Конкретность важна, потому что, если пример переносит идею только от звезд к облакам, для читателей на земле он все равно будет казаться туманом.

Аналогии — например, наша метафора о звездах, облаках и тумане — предлагают дополнительный инструмент, помогающий писателям облегчить понимание абстрактных идей (Лакофф и Джонсон, 1980). Аналогии объясняют то, что вы хотите, чтобы читатели поняли (целевая область), связывая это с чем-то, что они уже знают (базовая область; Даль и Моро, 2002; Греган-Пакстон и Джон, 1997). В этом руководстве мы использовали аналогии: добавление технического языка в статью похоже на добавление соли в тесто для печенья, написание академической статьи похоже на строительство дома, использование абстрактного примера для объяснения идеи похоже на использование зыбучих песков для поддержки вашего дома.

Аналогии могут помочь вашим читателям перенести то, что они узнали из знакомых действий, образов, звуков, запахов, вкусов и ощущений, в незнакомую область (Gregan-Paxton and John 1997). Фурнье (1998) помог читателям понять антропоморфизацию, лояльность к бренду и динамическое поведение после покупки, используя простую, но убедительную аналогию: отношения с брендом. Cotte, Ratneshwar и Mick (2004) аналогичным образом использовали аналогии для описания того, как потребители думают о времени: «время — это скороварка», «время — это карта», «время — это зеркало», «время — это праздник.» Читатели вряд ли бы поняли, если бы Cotte et al. вместо этого полагались на абстрактные ярлыки, такие как «ограниченная временная перспектива», «навигационная временная перспектива», «рефлексивная временная перспектива» и «прожорливая временная перспектива».

Дополнительные показания

Made to Stick (Хит и Хит, 2007): гл. 3: «Бетон»

Чувство стиля (Пинкер 2014a): гл. 3, «Проклятие знаний»

Письменные принадлежности (Кларк, 2008 г.)

—-Инструмент 22, «Восхождение вверх и вниз по лестнице абстракции»

—-Инструмент 14, «Узнайте имя собаки»

Язык в действии (Хаякава, 1939): гл. 8: «Откуда мы знаем то, что знаем»

Метафоры, которыми мы живем (Лакофф и Джонсон 1980): гл. 1: «Концепции, которыми мы живем»

 

 

 

 

Калькулятор стиля письма

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

— Пинкер 2014, с. 51

Как отмечает Пинкер, технический язык может помочь экспертам более эффективно общаться с инсайдерами. Технический язык, в просторечии известный как «жаргон», относится к словам, фразам или аббревиатурам, которые используются определенной профессией или группой, но не всеми остальными. Исследователи разрабатывают технические термины, чтобы им не приходилось повторять длинную фразу каждый раз, когда они ссылаются на что-то (Пинкер, 2014а). Несоответствие быстрее, чем написать «вещи, которые не сочетаются друг с другом», точно так же, как маркетизация использует меньше слов, чем написать «страна, переходящая от плановой экономики к рыночной экономике». Технический язык позволяет экспериментаторам обсуждать p-hacking или результаты своего ANOVA, не объясняя друг другу значение этих терминов. Эконометрист может просто кричать «эндогенность!» в то время как другие количественные исследователи либо сознательно кивают, либо нервно пытаются защитить свою модель, в зависимости от того, находятся ли они в аудитории или на трибуне.

Технический язык может быть хорошим способом поговорить с другими исследователями на специализированной конференции, но это затруднит понимание вашего письма остальными. Если вам нужно использовать технический язык, начните с объяснения слова (или фразы) на конкретных примерах. Мюллер-Стьюенс и его коллеги (2017) делают это, чтобы ввести фразу «геймифицированное представление информации»:

.

«… фирмы начали использовать игры для представления информации об инновационных продуктах. Например, Nike использовала баскетбольную видеоигру под названием Nike Shox, чтобы передать информацию о своей новой линии спортивной обуви Shox (Богост, 2007). В этом приложении геймифицированного представления информации потребители имели возможность настроить пару обуви для себя, а затем испытать характеристики продукта в видеоигре». (Мюллер-Стьюенс и др. 2017, стр. 8)

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

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

Мы рекомендуем проявлять особую бдительность в отношении технического языка в заголовке и аннотации. Это первое, что увидят читатели, и у вас не будет времени объяснять им свой технический язык. Такой заголовок, как «Интерактивное влияние трансгрессии бренда и личности на цифровое взаимодействие», менее привлекателен, чем «Когда хорошие бренды поступают плохо» (Aaker, Fournier, and Brasel, 2004). Точно так же «Влияние равенства ресурсов и простоты сопоставления предпочтений на восприятие справедливости» понравится меньшей аудитории, чем «Решение о том, кто что получает по справедливости» (Шадди и Шах, 2018).

Мы составили технически написанные версии этих названий, но легко найти реальные примеры хороших исследований с непонятными названиями. Рассмотрим две предстоящие статьи в Management Science: «Влияние патентной защиты на мобильность запасов» (Melero, Palomeras, and Wehrheim 2020) и «Нормализация потребительских оценок: контекстно-зависимые предпочтения от нейробиологических ограничений» (Webb, Glimcher, and Wehrheim, 2020). Луи 2020). Вы понимаете, о чем эти документы? Мы не знали, пока не прочитали статьи. Эти заголовки было бы легче понять и они могли бы привлечь больше читателей, если бы авторы использовали более знакомый язык. Возможно, «Изобретатели, получившие больше патентов, с меньшей вероятностью уйдут с работы» и «Лучший способ смоделировать зависимость предпочтений людей от имеющихся у них вариантов» соответственно.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *