немогу понять где у меня ошибки в проге

Тема в разделе "Общие вопросы по С и С++", создана пользователем Nikols, 28 дек 2010.

  1. Nikols

    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;
    }
    Еще возможно у меня не правильно настроен VS, потому что иногда бывает запускаются проги, а иногда нет.
     
  2. Myc0n

    Myc0n Гость

    <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); //Fixed
    if (fabs (zn) < EPS)
    return false;
    res.x = - det (m.c, m.b, n.c, n.b) / zn; //Fixed
    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.) < EPS;
    }

    bool equivalent (line m, line n) {
    return fabs (det (m.a, m.b, n.a, n.) < 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;
    }
     
Загрузка...

Поделиться этой страницей