- •Курсовая работа по технологии программирования
- •Постановка задачи
- •1.2 Программа решения задачи 1.1
- •1.3 Результат работы программы
- •1.4 Объяснение результатов
- •1.5 Программа решения задачи 1.2
- •1.6 Результат работы программы
- •Лабораторная работа №2 «Использование основных операторов языка Си»
- •2.1 Постановка задачи
- •2.2 Программа решения задачи
- •2.3 Результат работы программы
- •Лабораторная работа №3 «Вычисление функций с использованием их разложения в степенной ряд»
- •3.1 Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №4 «Работа с одномерными массивами»
- •4.1 Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №5 «Функции и массивы»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №6 «Строки»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №7.2 «Функции с переменным числом параметров»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №8 «Блоковый ввод-вывод»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •Лабораторная работа №9 «Строковый ввод-вывод»
- •Постановка задачи
- •Программа решения задачи
- •Результат работы программы
- •11. Лабораторная работа №10 «Динамические массивы»
- •11. 1 Постановка задачи
- •2 Программа решения задачи
- •11.3 Результат работы программы
- •Лабораторная работа №11 «Информационные динамические структуры»
- •Постановка задачи
- •Программа решения задачи
- •12.3 Результат работы программы
Программа решения задачи
#include <vcl.h>
#pragma hdrstop
#include <conio.h>
#include <iostream.h>
#include <iomanip.h>
#include <math.h>
#include <windows.h>
#pragma argsused
char* Rus(const char* text);
struct Drob //структура дробь
{ int a,b; //поля структуры - числ. и зн.
};
double sum(double, double);//прототип функции, считающей разницу десят. дробей
Drob sum(Drob, Drob); //прототип ф-и, считающей разницу обычных дробей
int lendr(Drob); //ф-я, считающая размер дроби
void output (Drob, Drob, Drob); //ф-я, осуществляющая вывод об. дробей с учетом их размерности
int main(int argc, char* argv[])
{
int ch;
double d,c;
Drob dr1;
Drob dr2;
cout << Rus ("Для вычитания десятичных дробей введите 1, обычных дробей введите 2: ");
cin >> ch;
if (ch==1)
{
cout << Rus("Введите две десятичные дроби: ");
cin >> d >> c; //вводим исх. числа
cout << endl << d << " - " << c << " = " << sum(d,c); //выводим сумму, вызываем ф-ю
}
if (ch==2)
{
cout << endl << Rus("Введите числитель первой дроби: ");
cin >> dr1.a;
cout << endl << Rus("Введите знаменатель первой дроби: ");
cin >> dr1.b;
cout << endl << Rus("Введите числитель второй дроби: ");
cin >> dr2.a;
cout << endl << Rus("Введите знаменатель второй дроби: ");
cin >> dr2.b;
Drob dr; //создаем дробь, явл-ся разницей
dr=sum(dr1,dr2); //считаем разницу дробей
output (dr1,dr2,dr); //осуществляем вывод дробей
}
getch();
return 0;
}
//функция, вычитающая десятичные дроби
double sum(double d1, double c1)
{
return d1-c1;
}
//функция, вычитающая обычные дроби
Drob sum(Drob dr1, Drob dr2)
{
Drob dr3; //создаем дробь, в которую запишем разницу
if (dr1.b==dr2.b) //если знаменатели равны
{
dr3.a=dr1.a-dr2.a; //вычитаем числители
dr3.b=dr1.b;
}
if (dr1.b!=dr2.b) //если знаменатели не равны
{
dr3.b=dr1.b*dr2.b; //перемножаем знаменатели
dr3.a=dr1.a*dr2.b-dr2.a*dr1.b; //вычитаем числители, приведенные к общ.зн
}
//циклы для сокращения дроби
for (int i=1;i<=dr3.b;i++)
{
if ((dr3.a%i==0)&&(dr3.b%i==0)) //если делится без остатка - делим
{
dr3.a/=i;
dr3.b/=i;
i=1; //возвращаем счетчик, чтобы не пропустить делители
}
}
return dr3;
}
//функция, считающая размер дроби (используется в выводе)
int lendr(Drob dr)
{
int a1=dr.a; //копируем переменные, чтобы не потерять зн-я
int b1=dr.b;
int k=1; //счетчик размерности
if(dr.a>dr.b)
{
for (int i=1;a1/10>0;i++) //если есть остаток от деления на 10
{
k++;
a1/=10; //убираем один разряд
}
}
else
{
for (int i=1;b1/10>0;i++)
{
k++;
b1/=10;
}
}
if (dr.a<0 || dr.b<0) k++; //учитываем знакоместо под минус
return k;
}
//Функция, осуществляюшая вывод обычных дробей с учетом их размерности
void output (Drob d1, Drob d2, Drob d3)
{
cout<<setw(lendr(d1))<<d1.a<<" "<<setw(lendr(d2))<<d2.a<<" "<<setw(lendr(d3))<<d3.a<<endl; //первая строка - числители
for (int i=1;i<=lendr(d1);i++)//рисуем дробную черту размером с количеством знаков в дроби
cout<<"-";
cout<<" + "; //в этой же строке - знак +
for (int i=1;i<=lendr(d2);i++)
cout<<"-";
cout<<" = "; //в этой же строке - знак -
for(int i=1;i<=lendr(d3);i++)
cout<<"-";
cout<<endl;
cout<<setw(lendr(d1))<<d1.b<<" "<<setw(lendr(d2))<<d2.b<<" "<<setw(lendr(d3))<<d3.b<<endl; //последняя строка - знаменатели
}
//---------------------------------------------------------------------------
char bufRus[256];
char* Rus(const char* text)
{
CharToOem(text, bufRus);
return bufRus;
}