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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.05.2013, 09:05   #1
pikemes
Новичок
Джуниор
 
Регистрация: 29.05.2013
Сообщений: 4
По умолчанию Перевод программы из Pascal в C++

Всем привет. Помогите, пожалуйста, перевести код программы из Pascal в C++. В Pascalе не смыслю, поэтому прошу вашей помощи. Буду очень благодарен. Спасибо)

uses crt;
const nmax=10;
var
x,y:array [1..nmax] of longint;
s : array [1..nmax] of real;
n,i,a,j : integer;
min : real;
q : boolean;
function rast(n1,n2:integer):real;
begin
rast:=sqrt(sqr(x[n1]-x[n2])
+sqr(y[n1]-y[n2]));
end;
begin
clrscr;
repeat;
q:=true;
write('кол-во углов n=');
readln(n);
if n>nmax then
begin
writeln('слишком большое
n (n<=',nmax,').');
q:=false;
end;
if n<4 then
begin
if n<3 then
writeln('Такой фигуры не
существует (n>3).')
else
writeln('В треугольнике
нет диагоналей!!');
q:=false;
end;
until q;
for i:=1 to n do
begin
write('x[',i,']=');
readln(x[i]);
write('y[',i,']=');
readln(y[i]);
writeln;
end;
for i:=1 to nmax
do s[i]:=0;
for i:=1 to n do
begin
for j:=1 to n-3 do
begin
a:=i+j+1;
if a>n then a:=a-n;
s[i]:=s[i]+rast(i,a);
end;
end;
min:=s[1];
a:=1;
for i:=1 to n do
begin
if min>s[i] then
begin
a:=i;
min:=s[i];
end;
end;
writeln('Ответ: из точки
№ ',a);
readln;
end.

Вот условие: Выпуклый n-угольник (n>2) задается координатами своих вершин в порядке обхода по контуру. Необходимо разбить n-угольник на треугольники (n-3)-мя диагоналями, не пересекающимися кроме как в вершинах многоугольника, таким образом, чтобы сумма их
длин была минимальной.
pikemes вне форума Ответить с цитированием
Старый 29.05.2013, 11:34   #2
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

Код:
#include <iostream>
#include <cmath>
#include <windows.h>

const int nmax=10;
long int x[nmax], y[nmax];
float s[nmax];
float min;
bool q;
int a, n;
int i, j;

float rast(int n1, int n2)
{
	return sqrt(pow(x[n1]-x[n2],2) + pow(y[n1]-y[n2],2));
}

int main()
{
	setlocale(LC_ALL, "Russian");

	do
	{
		q=true;
		std::cout << "кол-во углов n=";
		std::cin >> n;

		if (n>nmax)
		{
			std::cout << "слишком большое n (n<=nmax)" << std::endl;
			q=false;
		}

		if (n<4)
		{
			if (n<3) std::cout << "такой фигуры не существует (n>3)." << std::endl;
			else std::cout << "в треугольнике нет диагоналей!!" << std::endl;

			q=false;
		}
	} while (q);

	for (i=0; i<n; i++)
	{
		std::cout << "x[" << i << "]="; std::cin >> x[i];
		std::cout << "y[" << i << "]="; std::cin >> y[i];
		std::cout << std::endl;
	}

	for (i=0; i<nmax; i++)
		s[i]=0;

	for (i=0; i<n; i++)
	{
		for (j=0; j<n-3; j++)
		{
			a=i+j+1;
			if (a>n) a=a-n;
			s[i]=s[i]+rast(i,a);
		}
	}

	min=s[0];
	a=0;
	for (i=0; i<n; i++)
	{
		if (min>s[i])
		{
			a=i;
			min=s[i];
		}
	}

	std::cout << "Ответ: из точки № " << a << std::endl;

        system("pause");
        return 0;
}
revizor вне форума Ответить с цитированием
Старый 29.05.2013, 11:47   #3
pikemes
Новичок
Джуниор
 
Регистрация: 29.05.2013
Сообщений: 4
По умолчанию

если ввожу n>3, то зацикливается: опять просит ввести n)
pikemes вне форума Ответить с цитированием
Старый 29.05.2013, 13:33   #4
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

Немного ошибся. Вместо этой строчки
Цитата:
} while (q);
вот так надо сделать:
Код:
} while (q==false);
revizor вне форума Ответить с цитированием
Старый 29.05.2013, 16:17   #5
pikemes
Новичок
Джуниор
 
Регистрация: 29.05.2013
Сообщений: 4
По умолчанию

Если ввожу нормальное n>2, то ничего не выводит)
pikemes вне форума Ответить с цитированием
Старый 29.05.2013, 18:10   #6
revizor
Форумчанин
 
Аватар для revizor
 
Регистрация: 20.01.2013
Сообщений: 146
По умолчанию

я не знаю как решить. мозг отказывается думать
revizor вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перевод программы с Pascal на C++ devildriver696 Помощь студентам 1 14.12.2012 04:01
Перевод программы с Pascal на С++ vova287 Помощь студентам 0 05.02.2012 22:06
Перевод программы с Pascal в C++ !!! !! ProgFrog Помощь студентам 0 09.04.2011 14:21
Перевод программы с Pascal в C++ GoodSpirit Помощь студентам 4 19.05.2010 18:04