N
Nikols
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">текст программы</div></div><div class="sp-body"><div class="sp-content">#include "stdafx.h"
#include <iostream>
#include <math.h>
#include <windows.h>
#include <conio.h>
using namespace std;
#define cyrOut(_string_) CharToOem(_string_,szStr);cout << szStr // макро для вывода русских букв
char szStr[512];
struct point {
double x, y;
};
struct line {
double a, b, c;
};
void AddLine(double a, double b, double c, line & aline)
{ aline.a = a; aline.b = b; aline.c = c; }
const double EPS = 1e-9;
double det (double a, double b, double c, double d) {
return a * d - b * c;
}
bool intersect (line m, line n, point & res) {
double zn = det (m.a, m.b, n.a, n.B);
if (fabs (zn) < EPS)
return false;
res.x = - det (m.c, m.b, n.c, n.B) / zn;
res.y = - det (m.a, m.c, n.a, n.c) / zn;
return true;
}
/*
bool parallel (line m, line n) {
return fabs (det (m.a, m.b, n.a, n.B)) < EPS;
}
bool equivalent (line m, line n) {
return fabs (det (m.a, m.b, n.a, n.B)) < EPS
&& fabs (det (m.a, m.c, n.a, n.c)) < EPS
&& fabs (det (m.b, m.c, n.b, n.c)) < EPS;
}
*/
int main(int argc, char* argv[])
{
int i,j,k,N,Count[10];
double A,B,C;
int Intersection[10][10];
struct line ArrayLine[10];
struct point aPoint;
cyrOut("Введите количество прямых: ");cout<<endl;
cin>>N;
for (i=0;i<N;i++)
{
cyrOut("Прямая ");cout<<i+1<<" A,B,C"<<endl;
cin>>A>>B>>C;
AddLine(A,B,C,ArrayLine);
}
/* Это в качетве примера
N = 5;
AddLine (10,10,10,ArrayLine[0]);
AddLine (20,10,10,ArrayLine[1]);
AddLine (10,20,10,ArrayLine[2]);
AddLine (10,10,20,ArrayLine[3]);
AddLine (20,10,20,ArrayLine[4]);
*/
for (i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if (intersect(ArrayLine,ArrayLine[j],aPoint))
{
Intersection[j] = 1;
}
else
{
Intersection[j] = 0;
}
}
}
for(k=0;k<N;k++)
{
Count[k] = 0;
for(i=k+1;i<N;i++) { Count[k] += Intersection[k]; }
for(i=0;i<k;i++) { Count[k] += Intersection[k]; }
}
cout<<endl;
// Найдем максимум
int max = Count[0];
for(k=1;k<N;k++)
{ if (Count[k] > max){max=Count[k];} }
cyrOut("Введены прямые");cout<<endl;
for (i=0;i<N;i++)
{
cout<<ArrayLine.a<<"*X+"<<ArrayLine.b<<"*Y+"<<ArrayLine.c<<"=0 ";
cyrOut("Количество пересечений: ");
cout<<Count<<endl;
}
// Найти все максимумы , если их несколько
for(k=0;k<N;k++)
{
if (Count[k] == max)
{
cyrOut("Прямая ");cout<<k+1; cyrOut(" имеет максимальное количество пересечений ");cout<<Count[k]<<endl;
}
}
getch();
return 0;
}
#include <iostream>
#include <math.h>
#include <windows.h>
#include <conio.h>
using namespace std;
#define cyrOut(_string_) CharToOem(_string_,szStr);cout << szStr // макро для вывода русских букв
char szStr[512];
struct point {
double x, y;
};
struct line {
double a, b, c;
};
void AddLine(double a, double b, double c, line & aline)
{ aline.a = a; aline.b = b; aline.c = c; }
const double EPS = 1e-9;
double det (double a, double b, double c, double d) {
return a * d - b * c;
}
bool intersect (line m, line n, point & res) {
double zn = det (m.a, m.b, n.a, n.B);
if (fabs (zn) < EPS)
return false;
res.x = - det (m.c, m.b, n.c, n.B) / zn;
res.y = - det (m.a, m.c, n.a, n.c) / zn;
return true;
}
/*
bool parallel (line m, line n) {
return fabs (det (m.a, m.b, n.a, n.B)) < EPS;
}
bool equivalent (line m, line n) {
return fabs (det (m.a, m.b, n.a, n.B)) < EPS
&& fabs (det (m.a, m.c, n.a, n.c)) < EPS
&& fabs (det (m.b, m.c, n.b, n.c)) < EPS;
}
*/
int main(int argc, char* argv[])
{
int i,j,k,N,Count[10];
double A,B,C;
int Intersection[10][10];
struct line ArrayLine[10];
struct point aPoint;
cyrOut("Введите количество прямых: ");cout<<endl;
cin>>N;
for (i=0;i<N;i++)
{
cyrOut("Прямая ");cout<<i+1<<" A,B,C"<<endl;
cin>>A>>B>>C;
AddLine(A,B,C,ArrayLine);
}
/* Это в качетве примера
N = 5;
AddLine (10,10,10,ArrayLine[0]);
AddLine (20,10,10,ArrayLine[1]);
AddLine (10,20,10,ArrayLine[2]);
AddLine (10,10,20,ArrayLine[3]);
AddLine (20,10,20,ArrayLine[4]);
*/
for (i=0;i<N;i++)
{
for(j=i+1;j<N;j++)
{
if (intersect(ArrayLine,ArrayLine[j],aPoint))
{
Intersection[j] = 1;
}
else
{
Intersection[j] = 0;
}
}
}
for(k=0;k<N;k++)
{
Count[k] = 0;
for(i=k+1;i<N;i++) { Count[k] += Intersection[k]; }
for(i=0;i<k;i++) { Count[k] += Intersection[k]; }
}
cout<<endl;
// Найдем максимум
int max = Count[0];
for(k=1;k<N;k++)
{ if (Count[k] > max){max=Count[k];} }
cyrOut("Введены прямые");cout<<endl;
for (i=0;i<N;i++)
{
cout<<ArrayLine.a<<"*X+"<<ArrayLine.b<<"*Y+"<<ArrayLine.c<<"=0 ";
cyrOut("Количество пересечений: ");
cout<<Count<<endl;
}
// Найти все максимумы , если их несколько
for(k=0;k<N;k++)
{
if (Count[k] == max)
{
cyrOut("Прямая ");cout<<k+1; cyrOut(" имеет максимальное количество пересечений ");cout<<Count[k]<<endl;
}
}
getch();
return 0;
}