Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 05.03.2009, 09:22   #1
stranger_508
 
Регистрация: 05.03.2009
Сообщений: 4
По умолчанию Помогите с переводом Pascal на С++

Нужно написать программу
В одномерном массиве с четным количеством элементов (2N) находятся координаты N точек плоскости. Они располагают*ся в следующем порядке: x1, y1, x2, y2, x3, y3 и т.д. Опреде*лить номера точек, которые могут являться вершинами рав*нобедренного треугольника.

есть исходник в Pascal'е. Но нужно еще на С++. Помогите с переводом пожалуйста

Цитата:
1. program Massiv;
2. uses crt;
3. const N=100;
4. type
5. TVector = array [1..N] of integer;
6. var
7. A: TVector;
8. //Массив заполняется случайными числами от 0 до 99
9. procedure VvodMas;
10. var
11. i: integer;
12. begin
13. for i:=1 to N do A[i] := random(100);
14. end;
15. //длинна вектора
16. function LongVector(x1,y1,x2,y2: integer): real;
17. begin
18. LongVector := sqrt(sqr(x2-x1)+sqr(y2-y1));
19. end;
20. //уравнение прямой проходящей через две точки
21. function UravPrjam(x,x1,y1,x2,y2: integer): real;
22. begin
23. if x2<>x1
24. then UravPrjam := (((x-x1)*(y2-y1))/(x2-x1))+y1
25. else UravPrjam := x;
26. end;
27. //Проверяет равнобедренный ли треугольник
28. function RavnobedTreug(x1,y1,x2,y2,x3,y3: integer): boolean;
29. var
30. d1,d2,d3: real;
31. begin
32. RavnobedTreug := false;
33. d1 := LongVector(x1,y1,x2,y2);
34. d2 := LongVector(x1,y1,x3,y3);
35. d3 := LongVector(x2,y2,x3,y3);
36. if (d1=d2)or(d1=d3)or(d2=d3)
37. then RavnobedTreug := true;
38. end;
39. //Проверяет Лежат ли три точки на одной прямой
40. function Treug(x1,y1,x2,y2,x3,y3: integer): boolean;
41. var
42. py1,py2: real;
43. x: integer;
44. begin
45. Treug := true;
46. x := random(100);
47. py1 := UravPrjam(x,x1,y1,x2,y2);
48. py2 := UravPrjam(x,x2,y2,x3,y3);
49. if py1=py2 then Treug := False;
50. end;
51. procedure ProvAr;
52. var
53. i,j,m: integer;
54. begin
55. for i:= 1 to N do
56. for j:= 3 to N do
57. for m:= 5 to N do
58. if odd(i)and odd(j)and odd(m) then
59. if (i<j)and(j<m) then
60. if Treug(A[i],A[i+1],A[j],A[j+1],A[m],A[m+1]) then
61. if RavnobedTreug(A[i],A[i+1],A[j],A[j+1],A[m],A[m+1]) then
62. writeln('(',A[i],'-',A[i+1],',',A[j],'-',A[j+1],',',A[m],'-',A[m+1],')');
63. end;
64. begin
65. randomize;
66. clrscr;
67. VvodMas;
68. ProvAr;
69. readln;
70. end.
stranger_508 вне форума
Старый 05.03.2009, 13:42   #2
Sweta
Форумчанин
 
Регистрация: 22.11.2007
Сообщений: 664
По умолчанию

Перевести то перевела, но работоспособность не гарантирую, там еще нужно включить соответствующие библиотеки, и возможно где-то есть ошибки, проверить в данный момент не могу
Модератор: код выкладывайте прямо сюда, с тегом CODE. Аттачи с кодом запрещены
Неприятности приходят и уходят, а жизнь продолжается!

Последний раз редактировалось MaTBeu; 05.03.2009 в 16:01.
Sweta вне форума
Старый 05.03.2009, 15:16   #3
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Может пригодится.

Модератор: аттач убрал. Аналогично с предыдущим постом.

Последний раз редактировалось MaTBeu; 05.03.2009 в 16:02.
Svetlag вне форума
Старый 05.03.2009, 16:32   #4
Svetlag
Пользователь
 
Аватар для Svetlag
 
Регистрация: 24.02.2009
Сообщений: 85
По умолчанию

Код:
#include <iostream>
#include <stdlib.h>
#include <math.h>
#define SQR(X) (X)*(X)
const int N=100;
typedef int TVector[N];
TVector A; 
using namespace std ;
inline int random(const int left, const int right)
{
	return (left + rand() % (right - left) );
}
void VvodMas()
{
	for(int i=0; i<N; i++)	
		A[i] = random(0, N);
}
double LongVector(const int x1,const int y1,
		const int x2,const int y2)
{
      return sqrt(SQR(double(x2-x1))+SQR(double(y2-y1)) ); 
}
double UravPrjam(const int x,
	const int x1,const int y1,
	const int x2,const int y2)
{
	if(x2!=x1)
		return double((x-x1)*(y2-y1))/double(x2-x1)+double(y1);
	else return double(x);
}
bool RavnobedTreug(const int x1,const int y1,
		   const int x2,const int y2, 
		   const int x3,const int y3)
{
	double d1 = LongVector(x1, y1, x2, y2);
	double d2 = LongVector(x1, y1, x3, y3);
	double d3 = LongVector(x2, y2, x3, y3);
	if( d1==d2 || d1==d3 || d2==d3 )	return true;
	else	return false;
}
bool Treug(const int x1,const int y1,
	const int x2,const int y2, 
	const int x3,const int y3)
{
	int x = random(0, N);
	double py1 = UravPrjam(x, x1, y1, x2, y2);
	double py2 = UravPrjam(x, x2, y2, x3, y3);
	if(py1==py2) return false;
	else return true;
}
void ProvAr()
{
	for(int i=0; i<N; i++)
	for(int j=2; j<N; j++)
	for(int m=4; m<N; m++)
	{
	    if( (i%2) && (j%2) && (m%2))
	    if( i<j && j<m )
	    if(Treug(A[i],A[i+1],A[j],A[j+1],A[m],A[m+1]) )
	    if(RavnobedTreug(A[i],A[i+1],A[j],A[j+1],A[m],A[m+1]) )
	   {
		cout<<'('<<A[i]<<'-'<<A[i+1]<<',';
		cout<<A[j]<<'-'<<A[j+1]<<',';
		cout<<A[m]<<'-'<<A[m+1]<<")\n";
	   }
	}
}
int main()
{
   VvodMas();
   ProvAr();
   return 0;
}
Svetlag вне форума
Старый 06.03.2009, 06:42   #5
stranger_508
 
Регистрация: 05.03.2009
Сообщений: 4
По умолчанию

Спасибо, всё работает
stranger_508 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с переводом формулы SYL@R Помощь студентам 1 25.11.2008 08:44
Помогите с переводом формулы SYL@R Помощь студентам 1 25.11.2008 08:37