Практика №15. Калькулятор
Общее описание
Разработать мобильное приложение «Калькулятор», визуально и функционально соответствующее стандартному калькулятору Apple. Приложение должно быть реализовано на React Native с использованием TypeScript и Expo, без навигации между экранами (одноэкранное). Репозиторий должен быть опубликован в GitHub-организации предмета под именем Group_LastName_task-15.
Ресурсы
- Пример дизайна: калькулятор Apple (iOS)
- Для проверки UI — запуск через Expo Go на устройстве или эмуляторе
Определение задачи
Необходимо создать полностью рабочий калькулятор с корректной логикой вычислений и аккуратным, адаптивным интерфейсом. Все элементы должны быть реализованы вручную (без использования готовых библиотек калькуляторов). Разрешено использовать только стандартные компоненты React Native и базовые стили (StyleSheet, View, Text, Pressable и т.п.).
Функциональность
Приложение должно поддерживать следующие операции:
- Ввод чисел от 0 до 9;
- Ввод десятичной точки (
.) — не более одной в числе; - Смена знака числа (
±); - Очистка всего (
AC) — сброс текущего состояния вычисления; - Четыре арифметические операции:
+,-,×,÷; - Вычисление процента (
%) — например:200 × 5 %→10; - Нажатие
=для получения результата; - Корректное отображение промежуточных и финальных значений на дисплее;
- Обработка ошибок:
- Деление на ноль → отобразить
"Error"и блокировать дальнейший ввод до нажатияAC; - Переполнение (опционально, но желательно).
- Деление на ноль → отобразить
Требования к интерфейсу
- Один экран без навигации;
- Макет должен быть адаптивным под разные размеры экрана;
- Цветовая палитра и пропорции кнопок — как у калькулятора Apple:
- Шрифт — моноширинный или системный, крупный на дисплее;
- Кнопки должны иметь обратную связь при нажатии (например, изменение opacity).
Технические требования
- Использование TypeScript;
- Архитектура: код должен быть читаемым, разбитым на файлы и структурированным;
- Логика вычислений — реализована самостоятельно (без
eval()!); - Хранение состояния — через
useStateи собственные переменные (без Redux/Zustand); - Запрещено использовать сторонние UI-библиотеки (например,
react-native-paper,native-base);
Дополнительная часть
- Поддержка непрерывных вычислений:
5 + 3 = → 8 + 2 = → 10; - Улучшенная обработка длинных чисел (ограничение количества знаков на дисплее).
Время на выполнение
На выполнение выделяется 2 практических пары.
Градация баллов после дедлайна:
- 1 пара: 50%
- 2 пара: 25%
- 3 пара: 10%
Баллы
| Статус выполнения | Количество баллов |
|---|---|
| Не сдано | -8 |
| Сдано | 20 |
| Дополнительное задание | +3 |
