Программирование на C / C++ / Лабораторные работы2 / УГАТУ АСОИ-136 пр-ние на ЯВУ лаб.№1 вар.__Юлия
.docУфимский государственный авиационный технический университет
Кафедра АСУ
Отчёт
по лабораторной работе №1
по дисциплине ”Программирование на ЯВУ”.
вариант №16.
Выполнил: студент группы АСОИ-136
Татаринцева Ю. Проверил: доцент кафедры АПРиС
Фёдорова Н.И.
Уфа 2007.
Тема: Простейшие программы на языке С++.
Цель работы: получение навыков составления и отладки простейших программ на языке С++.
Вариант №16.
Задание:
а) Треугольник задан своими вершинами (x1,y1),(x2,y2),(x3,y3). Найти высоты треугольника.
Решение:
, где S – площадь тр-ка; a,b,c – стороны тр-ка;
ha, hb, hc – высоты тр-ка.
Блок-схема
Текст программы на С++
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{double x1,y1,x2,y2,x3,y3,a,b,c,S,ha,hb,hc,p;
clrscr();
cout<<"введите координаты 1-й точки\n";
cout<<"x1=";
cin>>x1;
cout<<"y1=";
cin>>y1;
cout<<"введите координаты 2-й точки\n";
cout<<"x2=";
cin>>x2;
cout<<"y2=";
cin>>y2;
cout<<"введите координаты 3-й точки\n";
cout<<"x3=";
cin>>x3;
cout<<"y3=";
cin>>y3;
a=sqrt(pow((x2-x1),2)+pow((y2-y1),2));
b=sqrt(pow((x3-x2),2)+pow((y3-y2),2));
c=sqrt(pow((x1-x3),2)+pow((y1-y3),2));
p=(a+b+c)/2;
S=sqrt(p*(p-a)*(p-b)*(p-c));
ha=2*S/a; hb=2*S/b; hc=2*S/c;
cout<<"ha="<<ha<<" hb="<<hb<<" hc="<<hc;
getch();
}
Проверка:
При x1=0,y1=0,x2=3,y2=0,x3=0,y3=3;
ha=3, hb= 2,12, hc=3;
б) Заданы прямая ax+by+c=0 и отрезок своими концами (x1,y1) и (x2,y2) Определить, как расположены они друг относительно друга: отрезок пересекает прямую, отрезок лежит на прямой, отрезок лежит полностью по одну сторону от прямой.
Решение:
Рассмотрим первый случай: Рассмотрим второй случай:
b=0 => ax+c=0; x=-c/a; b<>0=> y=-(ax+c)/b;
dif1=±(X1- X главное) dif1=(y1-y1 прямой)
dif2=±(X2- X главное) dif1=(y1-y1 прямой)
1) dif1=0 и dif2=0 – совпадают
2) (dif1<0 и dif2>0) или (dif1>0 и dif2<0)
– пересекаются
3)(dif1<0 и dif2<0) или (dif1>0 и dif2>0)
– по одну сторону
4) (dif1=0 и dif2<>0) или (dif1<>0 и dif2=0)
– имеют одну общую точку
1) dif1=0 и dif2=0 – совпадают
2) (dif1<0 и dif2>0) или (dif1>0 и dif2<0)
– пересекаются
3)(dif1<0 и dif2<0) или (dif1>0 и dif2>0)
– по одну сторону
4) (dif1=0 и dif2<>0) или (dif1<>0 и dif2=0)
– имеют одну общую точку
Блок-схема
Текст программы на С++
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{float a,b,c,x1,y1,x2,y2,y_line1,y_line2,x_line,dif1,dif2;
clrscr();
cout<<"vvedite znachenhia a,b,c,x1,y1,x2,y2\n";
cout<<"a=";
cin>>a;
cout<<"b=";
cin>>b;
cout<<"c=";
cin>>c;
cout<<"x1=";
cin>>x1;
cout<<"y1=";
cin>>y1;
cout<<"x2=";
cin>>x2;
cout<<"y2=";
cin>>y2;
if(b==0)
{
x_line=(-c/a);
dif1=x_line-x1;
dif2=x_line-x2;
if(dif1==0&dif2==0)
cout<<"otrezok lejit na priavoy";
if((dif1==0)&(dif2!=0))
cout<<"priamaya i otrezok imeut odny obschyu tochky";
else
if((dif1!=0)&(dif2==0))
cout<<"priamaya i otrezok imeut odny obschyu tochky";
if((dif1<0)&(dif2>0))
cout<<"priamaya i otrezok imeut odny obschyu tochky";
else
if((dif1>0)&(dif2<0))
cout<<"priamaya i otrezok peresekautsia";
if((dif1<0)&(dif2<0))
cout<<"priamaya i otrezok ne peresekautsia";
else
if((dif1>0)&(dif2>0))
cout<<"priamaya i otrezok ne peresekautsia";
}
if(b!=0)
{
y_line1=-(a*x1+c)/b;
y_line2=-(a*x2+c)/b;
dif1=y_line1-y1;
dif2=y_line2-y2;
if(dif1==0&dif2==0)
cout<<"otrezok lejit na priavoy";
if((dif1==0)&(dif2!=0))
cout<<"priamaya i otrezok imeut odny obschyu tochky";
else
if((dif1!=0)&(dif2==0))
cout<<"priamaya i otrezok imeut odny obschyu tochky";
if((dif1<0)&(dif2>0))
cout<<"priamaya i otrezok imeut odny obschyu tochky";
else
if((dif1>0)&(dif2<0))
cout<<"priamaya i otrezok peresekautsia";
if((dif1<0)&(dif2<0))
cout<<"priamaya i otrezok ne peresekautsia";
else
if((dif1>0)&(dif2>0))
cout<<"priamaya i otrezok ne peresekautsia";
}
getch();
}Проверка:
a=-2, b=0, c=8; x1=2, y1=5, x2=6, y2=0 результат: прямая и отрезок пересекаются.
а=2, b=2, с=2; x1=0, y1=-4, x2=6, y2=0 результат: прямая и отрезок имеют одну общую точку.
а=2, b=2, с=2; x1=0, y1=-1, x2=3, y2=-4 результат: отрезок лежит на прямой.