Программирование на языках высокого уровня
Разработка класса "Калькулятор", выполняющего ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок. Нахождение тригонометрических и обратных тригонометрических функций, изменение знака угла.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | контрольная работа |
Язык | русский |
Дата добавления | 27.05.2013 |
Размер файла | 19,9 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Программирование на языках высокого уровня
Задание
1) Разработать класс «Калькулятор», выполняющий указанные в варианте операции для заданных исходных данных. Программа должна выполнять ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок.
2) Протокол работы калькулятора записать в файл. Протокол должен включать исходные данные, введенные пользователем, выполняемые операции и результаты их выполнения. В случае возникновения ошибки в файл записывается соответствующее сообщение.
3) Предусмотреть возможность просмотра этого файла из программы калькулятора.
В варианте указаны вид данных, обрабатываемых калькулятором, и операции, выполняемые калькулятором.
Вид данных:
Углы, измеряемые в градусной системе мер (1 градус=60 минут, 1 минута=60 секунд).
Операции:
Сложение, вычитание, умножение, деление, нахождение тригонометрических и обратных тригонометрических функций, изменение знака угла.
Описание классов
Класс Gradus - главный пользовательский класс программы. Представляет собой 3 значения типа integer. Соответственно градусы, минуты и секунды. В классе есть перегруженные операции присваивания, арифметических действий, операции ввода / вывода, деструктор и конструкторы. В конце каждой операции происходит занесение операндов и результата в файл log.txt.
Класс Error - класс, позволяющий выводить на экран сведения об ошибках с помощью throw. В программе реализован вывод ошибки в двух случаях:
- Если пользователь вводит отличные от integer значения градусов, минут, секунд
- Если пользователь, при выполнении операции деления, делит на 0
Класс Dialog - класс, состоящий из одной функции menu, осуществляющей диалог с пользователем посредством конструкции case. Также внутри этой функции происходит вычисление тригонометрических операций и смена знака угла. Здесь же вывод информации из файла log.txt на экран и операция для его очистки.
Листинг программы
Gradus.h:
#pragma once
#include <iostream>
#include «Math.h»
#include <cmath>
#include <fstream>
#include <string>
using namespace std;
class Gradus
{
public:
int grad;
int min;
int sec;
Gradus() {grad=0; min=0; sec=0;};
Gradus (int g, int m, int s) {grad=g; min=m; sec=s;};
Gradus (const Gradus&g) {grad=g.grad; min=g.min; sec=g.sec;};
~Gradus(){};
int get_grad() {return grad;}
int get_min() {return min;}
int get_sec() {return sec;}
void set_grad (int g) {grad=g;}
void set_min (int m) {min=m;}
void set_sec (int s) {sec=s;}
// перегруженные операции
Gradus&operator=(const Gradus&);
Gradus& Gradus:operator+(const Gradus&l);
Gradus& Gradus:operator - (const Gradus&l);
Gradus& Gradus:operator/(const Gradus&l);
Gradus& Gradus:operator*(const Gradus&l);
// глобальные функции ввода-вывода
friend std:istream& operator >> (std:istream &in, Gradus &g);
friend std:ostream& operator << (std:ostream &out, const Gradus &g);
};
Gradus.cpp:
#include «Gradus.h»
#include <iostream>
#include «Math.h»
#include <cmath>
#include <fstream>
#include <string>
#include «Error.h»
using namespace std;
// -
// перегрузка операции присваивания
Gradus&Gradus:operator=(const Gradus&g)
{
// проверка на самоприсваивание
if (&g==this) return *this;
grad=g.grad;
min=g.min;
sec=g.sec;
return *this;
}
// -
// перегрузка глобальной функции-операции ввода
std:istream& operator >> (std:istream &in, Gradus &g)
{
cout<< «Vvedite gradusi:»; in>>g.grad;
if (! cin)
{throw error (» ERROR! Vvodite znacheniya integer!»);};
cout<< «Vvedite minuti:»; in>>g.min;
cout<< «Vvedite secundi:»; in>>g.sec;
while (g.sec>=60)
{g.min=g.min+1;
g.sec=g.sec-60;
}
while (g.min>=60)
{g.grad=g.grad+1;
g.min=g.min-60;
}
while (g.grad>=360)
{g.grad = g.grad-360;
}
return in;
}
// -
// перегрузка глобальной функции-операции вывода
std:ostream& operator << (std:ostream &out, const Gradus &g)
{
return (out<<g.grad<<»\xF8 «<<g.min<<«' «<<g.sec<<» ''»);
}
// -
// перегрузка операции сложения
Gradus& Gradus:operator+(const Gradus&l)
{
Gradus a, b;
cout<< «SLOZHENIE GRADUSOV: «<<endl;
cout<<«Vvedite 1 Slagaemoe': «<<endl;
cin >> a;
cout<<«Vvedite 2 Slagaemoe': «<<endl;
cin >> b;
Gradus result;
result.grad = (a.grad+b.grad);
result.min = (a.min+b.min);
result.sec = (a.sec+b.sec);
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
cout <<endl<<«OTVET: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl;
// запись в лог
ofstream f;
f.open («log.txt», ios:app);
f<< «Operacia slozhenia \n»;
f<<«Slagaemoe 1: «<<a<<endl;
f<<«Slagaemoe 2: «<<b<<endl;
f<<«Resultat: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl<<endl;
f.close();
return result;
}
// -
// перегрузка операции вычитания
Gradus& Gradus:operator - (const Gradus&l)
{
Gradus a, b;
cout<< «VICHITANIE GRADUSOV: «<<endl;
cout<<«Vvedite UMENSHAEMOE': «<<endl;
cin >> a;
cout<<«Vvedite VICHITAEMOE': «<<endl;
cin >> b;
Gradus result;
result.grad = (a.grad-b.grad);
result.min = (a.min-b.min);
result.sec = (a.sec-b.sec);
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.sec<0)
{result.min = result.min-1;
result.sec = result.sec+60;
}
while (result.min<0)
{result.grad=result.grad-1;
result.min=result.min+60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
while (result.grad<0)
{result.grad = result.grad+360;
}
cout <<endl<<«OTVET: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl;
// запись в лог
ofstream f;
f.open («log.txt», ios:app);
f<< «Operacia vichitaniya \n»;
f<<«Umenshaemoe: «<<a<<endl;
f<<«Vichitaemoe: «<<b<<endl;
f<<«Resultat: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl<<endl;
f.close();
return result;
}
// -
// перегрузка операции деления
Gradus& Gradus:operator/(const Gradus&l)
{
Gradus a, b;
cout<< «DELENIE GRADUSOV: «<<endl;
cout<<«Vvedite DELIMOE': «<<endl;
cin >> a;
cout<<«Vvedite DELITEL': «<<endl;
cin >> b;
if (b.grad==0)
{throw error (» ERROR! Delitel.gradusi == 0!»);};
if (b.min==0)
{throw error (» ERROR! Delitel.minuti == 0!»);};
if (b.sec==0)
{throw error (» ERROR! Delitel.secundi == 0!»);};
{throw error (» ERROR! Delitel == 0!»);};
Gradus result;
result.grad = (a.grad/b.grad);
result.min = (a.min/b.min);
result.sec = (a.sec/b.sec);
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.sec<0)
{result.min = result.min-1;
result.sec = result.sec+60;
}
while (result.min<0)
{result.grad=result.grad-1;
result.min=result.min+60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
cout <<endl<<«OTVET: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl;
// запись в лог
ofstream f;
f.open («log.txt», ios:app);
f<< «Operacia deleniya \n»;
f<<«Delimoe: «<<a<<endl;
f<<«Delitel: «<<b<<endl;
f<<«Resultat: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl<<endl;
f.close();
return result;
}
// -
// перегрузка операции умножения
Gradus& Gradus:operator*(const Gradus&l)
{
Gradus a, b;
cout<< «UMNOZHENIE GRADUSOV: «<<endl;
cout<<«Vvedite 1 MNOZHITEL': «<<endl;
cin >> a;
cout<<«Vvedite 2 MNOZHITEL': «<<endl;
cin >> b;
Gradus result;
result.grad = (a.grad*b.grad);
result.min = (a.min*b.min);
result.sec = (a.sec*b.sec);
while (result.grad>360)
{result.grad = result.grad-360;
}
while (result.sec>60)
{result.min=result.min+1;
result.sec=result.sec-60;
}
while (result.min>60)
{result.grad=result.grad+1;
result.min=result.min-60;
}
while (result.sec<0)
{result.min = result.min-1;
result.sec = result.sec+60;
}
while (result.min<0)
{result.grad=result.grad-1;
result.min=result.min+60;
}
while (result.grad>360)
{result.grad = result.grad-360;
}
cout <<endl<<«OTVET: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl;
// запись в лог
ofstream f;
f.open («log.txt», ios:app);
f<< «Operacia umnozheniya \n»;
f<<«1 mnozhitel: «<<a<<endl;
f<<«2 mnozhitel: «<<b<<endl;
f<<«Resultat: «<< result.grad<<»\xF8 «<<result.min<<» ' «<<result.sec<<» '' «<<endl<<endl;
f.close();
return result;
}
Error.h:
#pragma once
#include <string>
#include <iostream>
using namespace std;
class error // класс ошибка
{
public:
string str;
// конструктор, инициирует атрибут str с сообщением об ошибке
error (string s) {str=s;}
void what() {cout<<str<<endl;} // выводит значение атрибута str
};
Dialog.h:
#include «Gradus.h»
#include «Error.h»
#include <iostream>
#include «Math.h»
#include <cmath>
#include <fstream>
#include <string>
class Dialog
{
public:
int menu();
};
Dialog.cpp:
#include «Gradus.h»
#include «Error.h»
#include <iostream>
#include «Math.h»
#include <cmath>
#include <fstream>
#include <string>
#include «Dialog.h»
int Dialog:menu()
{
try {
Gradus a, b, d, res2;
double sinus, cosinus, tangens, arcsinus, arccosinus, arctangens, result;
int c;
ofstream f;
const N=256;
do
{
// Меню
cout<<»\n1. Slozhenie uglov»;
cout<<»\n2. Vichitanie uglov»;
cout<<»\n3. Umnozhenie uglov»;
cout<<»\n4. Delenie uglov»;
cout<<»\n5. Sinus ugla»;
cout<<»\n6. Cosinus ugla»;
cout<<»\n7. Tangens ugla»;
cout<<»\n8. ArcSinus ugla»;
cout<<»\n9. ArcCos ugla»;
cout<<»\n10. ArcTan ugla»;
cout<<»\n11. Izmenenie znaka ugla»;
cout<<»\n12. Prochitat' log operaciy»;
cout<<»\n13. Ochistit' log operaciy»;
cout<<»\n0. Exit\n»;
cin>>c;
switch(c)
{
case 1: d = a+b;
break;
case 2: d = a-b;
break;
case 3: d = a*b;
break;
case 4: d = a/b;
break;
case 5:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
sinus = a.grad;
result=sin(sinus);
cout<< «sin=»<<result<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<< «Operacia sinus \n»;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< result<<endl<<endl;
f.close();
break;
case 6:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
cosinus = a.grad;
result=cos(cosinus);
cout<< «cos=»<<result<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<< «Operacia cosinus \n»;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< result<<endl<<endl;
f.close();
break;
case 7:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
tangens = a.grad;
result=tan(tangens);
cout<< «tan=»<<result<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<< «Operacia tangens \n»;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< result<<endl<<endl;
f.close();
break;
case 8:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
arcsinus = a.grad;
result=asin(arcsinus);
cout<< «arcsin=»<<result<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<< «Operacia arcsinus \n»;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< result<<endl<<endl;
f.close();
break;
case 9:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
arccosinus = a.grad;
result=acos(arccosinus);
cout<< «arccos=»<<result<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<< «Operacia arccos \n»;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< result<<endl<<endl;
f.close();
break;
case 10:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
arctangens = a.grad;
result=atan(arctangens);
cout<< «arctan=»<<result<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<< «Operacia arctan \n»;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< result<<endl<<endl;
f.close();
break;
case 11:
cin>>a;
cout<<«a = «<<a<<endl; // вывод переменной
res2.grad=(360 - (a.grad));
if (a.min!= 0)
{res2.grad = (res2.grad-1);}
res2.min=(60 - (a.min));
if (a.sec!= 0)
{res2.min = (res2.min-1);}
res2.sec=(60 - (a.sec));
cout<< «OTVET=»<<res2<<endl;
// запись в лог
f.open («log.txt», ios:app);
f<<«Operacia smena znaka v date «<<endl;
f<<«Ugol: «<<a<<endl;
f<<«Resultat: «<< res2.grad<<»\xF8 «<<res2.min<<» ' «<<res2.sec<<» '' «<<endl<<endl;
f.close();
break;
case 12:
{cout<<endl<<«Logfile: «<<endl; // Для красоты
char S[N]={«»}; // В S будут считываться строки
ifstream in1 («log.txt»); // Открыли файл для чтения
while (! in1.eof()) // Будем читать информацию пока не дойдем до конца файла
{
in1.getline (S, N); // Построчное считывание информации в S
cout<<S<<endl; // Вывод очередной строки на экран
}
in1.close(); // Закрыли открытый файл
break;}
case 13:
f.open («log.txt», ios:out);
f.close();
}
} while (c!=0);
}
catch (error e)
{e.what();}
return 0;
}
Kurs_main.cpp:
#include «Gradus.h»
#include «Dialog.h»
#include «Error.h»
#include <iostream>
#include «Math.h»
#include <cmath>
#include <fstream>
#include <string>
void main()
{Dialog d;
d.menu();
int f;
cin>>f;
}
Руководство пользователя:
Программа предназначена для произведения следующих операций над углами в градусной мере:
Сложение, вычитание, умножение, деление, нахождение тригонометрических и обратных тригонометрических функций, изменение знака угла.
Для запуска программы необходимо запустить файл Kursovoi.exe. После его запуска появится меню пользователя, взаимодействие с меню выполняется посредством клавиатуры. Введите номер пункта и нажмите Enter чтобы выполнить соответствующее действие. Все действия записываются в файл log.txt. Содержимое файла можно прочесть как отдельно, используя notepad или любой другой текстовый редактор, так и из интерфейса программы. В случае возникновения ошибки, данные о ней будут отображены на экране, для продолжения работы с программой после ошибки - закройте приложение и откройте заново.
калькулятор тригонометрический угол программирование
Размещено на Allbest.ru
...Подобные документы
Разработка класса "Калькулятор" выполняющего ввод данных, проверку правильности введенных данных, выдачу соответствующих сообщений в случае возникновения ошибок. Листинг и скриншоты выполнения программы, порядок ее запуска. Руководство пользователя.
курсовая работа [394,2 K], добавлен 18.05.2013Особенности написания базы данных на языках программирования C++, применимой для расписания занятий в университете. Этапы работы: ввод новой записи, изменение, просмотр базы данных, поиск данных. Алгоритмы, используемые в процессе выполнения проекта.
практическая работа [16,6 K], добавлен 12.06.2010Линейный односвязный список (ЛОС) из введенных данных с клавиатуры с заданным указателем sag, работающий с типом данных Integer. Вывод информационных сообщений. Подсчет количества идентичных по содержанию элементов. Ввод данных в диалоговом режиме.
лабораторная работа [36,3 K], добавлен 03.03.2009Алгоритмы обработки данных на языке программирования СИ. Приемы работы с интегрированной средой разработки, Использование разнообразных трансляторов и интерпретаторов, обеспечивающих связь программ с различными операционными системами и оборудованием.
учебное пособие [1,3 M], добавлен 02.12.2011Что такое класс в объектно-ориентированном программировании. Какую структуру имеет модуль в С++. Какими средствами осуществляется консольный ввод данных в языке Си, С++. Инкапсуляция, полиморфизм, наследование. Использование библиотеки "
".
контрольная работа [1,9 M], добавлен 13.11.2016Разработка программы на языке Visual Basic. Спецификация на программный модуль. Ввод, изменение и удаление данных по определенным требованиям. Руководство системного программиста, программиста и оператора. Ведение базы данных в виде таблицы Excel.
курсовая работа [272,5 K], добавлен 21.04.2014Разработка программы обработки изображений, позволяющей прорисовывать типовые геометрические фигуры. Выбор аппаратных и технических средств для реализации программного продукта. Организация входных и выходных данных. Блок-схема и листинг программы.
курсовая работа [2,4 M], добавлен 18.06.2014Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Методы хеширования данных и реализация хеш-таблиц. Разработка на языке программирования высокого уровня программы с функциями создания хеш-таблицы, добавления в нее элементов, их просмотра, поиска и удаления. Экспериментальный анализ хеш-функции.
лабораторная работа [231,9 K], добавлен 18.06.2011Сравнительный анализ наиболее распространенных языков, их классификация, описание достоинств и недостатков. Использование процедур, функции и подпрограмм в языках программирования высокого уровня. Разработка и реализация программы "Бортовой компьютер".
курсовая работа [329,8 K], добавлен 22.06.2014Разработка ввода с клавиатуры и вывода на экран монитора данных с помощью стандартных функций printf и scanf. Ввод количества материальных точек. Работа с линейным списком. Хранение содержимого списка в блоке ячеек памяти с последовательными адресами.
курсовая работа [176,8 K], добавлен 18.01.2016Разработка программного приложения WindowsForms для работы с базой данных на языке высокого уровня C# в автономном режиме с использованием ADO.NET. Проектирование реляционной модели базы данных, интерфейса приложения, основных функций и возможностей.
курсовая работа [4,3 M], добавлен 30.06.2015Этапы проектирования приложения (в данном случае - телефонного справочника), позволяющего создать базу данных, делать ее сортировку, производить новые записи или удаление полей. Листинг программы, которая производит индексацию и проверку базы данных.
реферат [368,9 K], добавлен 31.05.2012Описание языков программирования высокого уровня. Стандартные структуры данных, обзор принципов структурного программирования. Построение математической модели и выбор структуры данных для решения задачи. Тестирование и отладка программного кода.
курсовая работа [1,3 M], добавлен 05.12.2020Информационные технологии и защиты данных. Методы защиты информации. Виды информационной безопасности и умышленные угрозы. Программирование на языке Turbo Pascal. Типы числовых данных. Функции ввода и вывода. Логические операторы, символьные переменные.
курсовая работа [1,7 M], добавлен 16.05.2016Основные понятия математического сопроцессора. Изучение принципа работы и функций устройства: точное деление, вычисление тригонометрических функций, извлечение квадратного корня и нахождение логарифма. Расчет себестоимости и экономической эффективности.
дипломная работа [2,2 M], добавлен 15.05.2014Особенности вывода на экран содержимого файла BAZA.txt. Анализ функций вывода информации о количестве каждой марки машин. Рассмотрение способов проектирования тестов программы методами черного ящика. Проблемы программирования на языке высокого уровня.
контрольная работа [1,6 M], добавлен 04.01.2015Классификация языков программирования. Использование циклических конструкций и выполнение итерационных процессов. Алгоритмические структуры циклов языков C, C++, Java, C#. Особенности современных языков программирования высокого уровня и их применение.
курсовая работа [345,6 K], добавлен 13.11.2009Проектирование структуры базы данных. Технология обработки данных. Порядок установки и запуска программы. Описание объектов приложения и структура данных. Ввод и изменение исходных данных. Получение выходных документов и тестирование программы.
отчет по практике [2,3 M], добавлен 22.07.2012Ознакомление со структурой, комментариями, переменными и типами данных, константами, перечислениями, преобразованием типов языка программирования высокого уровня С++. Ключевые понятия языка, идентификаторы, ключевые слова, функции, операторы, выражения.
контрольная работа [31,2 K], добавлен 12.12.2009