![]() |
Внимание, важное сообщение: Дорогие Друзья!
В ноябре далекого 2001 года мы решили создать сайт и форум, которые смогут помочь как начинающим, так и продвинутым пользователям разобраться в операционных системах. В 2004-2006г наш проект был одним из самых крупных ИТ ресурсов в рунете, на пике нас посещало более 300 000 человек в день! Наша документация по службам Windows и автоматической установке помогла огромному количеству пользователей и сисадминов. Мы с уверенностью можем сказать, что внесли большой вклад в развитие ИТ сообщества рунета. Но... время меняются, приоритеты тоже. И, к сожалению, пришло время сказать До встречи! После долгих дискуссий было принято решение закрыть наш проект. 1 августа форум переводится в режим Только чтение, а в начале сентября мы переведем рубильник в положение Выключен Огромное спасибо за эти 24 года, это было незабываемое приключение. Сказать спасибо и поделиться своей историей можно в данной теме. С уважением, ваш призрачный админ, BigMac... |
|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - [решено] Перевод с Паскаль в си ++ |
|
C/C++ - [решено] Перевод с Паскаль в си ++
|
Новый участник Сообщения: 2 |
Помогите, пожалуйста, перевести программу на СИ++ : На плоскости заданы множество точек А и множество окружностей В. Найти две различные точки из А такие, чтобы проходящая через них прямая пересекалась с максимальным количеством окружностей В
. uses crt; type point=record x,y:real; end; okr=record x,y,r:real; end; const nmax=20; {функция определяет пересекается прямая с окружностью или нет} function Peres(a,b:point;c:okr):boolean; var s,ab,h:real; begin {строим треугольник на точках прямой о центре окружности определяем его площадь, длину стороны на прямой и высоту на нее} s:=abs(a.x*(b.y-c.y)+b.x*(c.y-a.y)+c.x*(a.y-b.y)); ab:=sqrt(sqr(a.x-b.x)+sqr(a.y-b.y)); h:=s/ab; Peres:=h<c.r;{если высота меньше радиуса, перемекаются} end; var a:array[1..nmax] of point;{множество точек} b:array[1..nmax] of okr;{множество окружностей} n,m,i,j,k,p,mx,imx,jmx:integer; begin clrscr; randomize; repeat write('Количество точек до ',nmax,' n='); readln(n); until n in [1..nmax]; repeat write('Количество окружностей до ',nmax,' m='); readln(m); until m in [1..nmax]; for i:=1 to n do begin a[i].x:=-10+random*21; a[i].y:=-10+random*21; end; for i:=1 to m do begin b[i].x:=-5+11*random; b[i].y:=-5+11*random; b[i].r:=5*random; end; writeln('Координаты точек:'); write('X:'); for i:=1 to n do write(a[i].x:6:2); writeln; write('Y:'); for i:=1 to n do write(a[i].y:6:2); writeln; writeln; writeln('Параметры окружностей:'); write('X:'); for i:=1 to m do write(b[i].x:6:2); writeln; write('Y:'); for i:=1 to m do write(b[i].y:6:2); writeln; write('R:'); for i:=1 to m do write(b[i].r:6:2); writeln; writeln; {ищем прямую с максимальными пересечениями} mx:=0; imx:=0; jmx:=0; for i:=1 to n-1 do for j:=i+1 to n do begin k:=0; for p:=1 to m do if Peres(a[i],a[j],b[p]) then k:=k+1; if k>mx then begin mx:=k; imx:=i; jmx:=j; end; end; if mx=0 then write('Нет пересекающихся прямых и окружностей') else begin writeln('Максимальное число пересечений прямой с окружностями=',mx); write('Эта прямая проходит через точки (',a[imx].x:0:2,';',a[imx].y:0:2,') и (',a[jmx].x:0:2,';',a[jmx].y:0:2,')'); end; readln end. |
|
Отправлено: 15:35, 11-03-2012 |
Новый участник Сообщения: 28
|
Профиль | Отправить PM | Цитировать Компилировал в Visual Studio 2010, если нужны будут поправки, пишите...
#include <iostream> #include <cstdlib> #include <clocale> #include <ctime> #include <cmath> using namespace std; struct point { double x,y; }; struct okr { double x,y,r; }; const int nmax=20; /* функция определяет пересекается прямая с окржуностью или нет */ bool Peres(point a, point b, okr c); int main() { setlocale(0,""); point a[nmax]; okr b[nmax]; int n,m,i,j,k,p,mx,imx,jmx; srand(time(0)); do { cout << "Количество точек до " << nmax << " n="; cin >> n; }while(n<1 || n>20); do { cout << "Количество окружностей до " << nmax << " m="; cin >> m; }while(m<1 || m>20); for(i=0; i<n; ++i) { a[i].x=rand()%30-10; a[i].y=rand()%30-10; } for(i=0; i<m; ++i) { b[i].x=rand()%30-10; b[i].y=rand()%30-10; b[i].r=5*rand(); } cout << "Координаты точек:\nX:"; for(i=0;i<n;++i) cout << a[i].x << " "; cout << "\nY:"; for(i=0;i<n;++i) cout << a[i].y << " "; cout << "\n\nПараметры окружностей:\nX:"; for(i=0;i<m;++i) cout << b[i].x << " "; cout << "\nY:"; for(i=0;i<m;++i) cout << b[i].y << " "; cout << "\nR:"; for(i=0;i<m;++i) cout << b[i].r << " "; cout << "\n\n"; /* ищем прямую с максимальными пересечениями */ mx=0; imx=0; jmx=0; for(i=0;i<n-1;++i) for(j=i+1;j<n;++j) { k=0; for(p=1;p<m;++p) if(Peres(a[i],a[j],b[p])) ++k; if(k>mx) { mx=k; imx=i; jmx=j; } } if(mx==0) cout << "Нет пересекающихся прямых и окружностей\n"; else cout << "Максимальное число пересечений прямой с окружностями=" << mx << "\nЭта прямая проходит через точки ("<<a[imx].x<<';'<<a[imx].y<<") и ("<<a[jmx].x<<';'<<a[jmx].y<<")\n"; cout << "\n"; system("pause"); } bool Peres(point a, point b, okr c) { double s, ab, h; /* строим треугольник на точках прямой о центре окружности определяем его площадь, длину стороны на прямой и высоту на нее */ s = abs(a.x*(b.y-c.y)+b.x*(c.y-a.y)+c.x*(a.y-b.y)); ab = sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y)); h = s/ab; return (h<c.r); // если высота больше радиуса, пересекаются } |
------- Отправлено: 21:17, 12-03-2012 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 2
|
Профиль | Сайт | Отправить PM | Цитировать Скажите пожалуйста, а тесты к данной задаче можете составить?? верные и неверные
|
Отправлено: 16:31, 22-03-2012 | #3 |
Misanthrope Сообщения: 474
|
Профиль | Отправить PM | Цитировать Юлианна_Спивак@fb, а может уже не стоит так наглеть?
|
------- Отправлено: 17:12, 22-03-2012 | #4 |
Будем жить, Маэстро... Сообщения: 6694
|
Профиль | Сайт | Отправить PM | Цитировать Юлианна_Спивак@fb, Если по теме остались вопросы пишите в личку, открою тему. А сейчас закрываю. Одна тема - одна проблема.
|
|
------- Отправлено: 17:35, 22-03-2012 | #5 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Паскаль | kakmandu | Программирование в *nix | 2 | 28-08-2011 22:01 | |
Теория - паскаль | Дашка | Программирование и базы данных | 1 | 07-01-2011 17:44 | |
C/C++ - Паскаль-си | Drago56 | Программирование и базы данных | 3 | 24-12-2010 19:09 | |
Теория - Паскаль и NaN | ManHack | Программирование и базы данных | 9 | 20-01-2009 15:57 | |
С++ и Паскаль | Casper | Программирование и базы данных | 5 | 18-04-2003 19:35 |
|