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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 20.12.2011, 05:22   #1
VKorablev
Форумчанин
 
Аватар для VKorablev
 
Регистрация: 14.04.2011
Сообщений: 126
Восклицание Проблемы с переводом с Паскаля на С++

Доброго времени суток, при переводе программы с паскального кода на си возникли ошибки. Самому исправить не получается. Помогите пожалуйста.
Вот паскальный код :
Код:
uses crt;
const nmax=50;
type perem=record
         a,b,c:integer;                                                                         //переменные: a,b,c - коэффиценты прямых
         r:real;                                                                                //            r - расстояние до прямой
         end;                                                                                   //            n - кол-во прямых
     mas=array[1..nmax] of perem;                                                               //            i,j,k - счетчики элементов векторов
function Rasstoyanie(x0,y0:integer; p:perem):real;          //вводим функцию и ее параметры                   ax,ay - координаты точки А
begin                                                                                           //            i1,i2 - начало и конец интервала
Rasstoyanie:=abs(p.a*x0+p.b*y0+p.c)/sqrt(sqr(p.a)+sqr(p.b));                                    //            x - буфер для сортировки
end;                                                                                            //            proverka - проверка правильности введения коэффицентов
procedure Print(var m:mas;n:byte);                          //подпрограмма вывода на экран коэффицентов прямых и расстояний до точки А
var i:byte;
begin
writeln('Коэффициенты прямых:');
write('A:');
for i:=1 to n do
write(m[i].a:5);
writeln;
write('B:');
for i:=1 to n do
write(m[i].b:5);
writeln;
write('C:');
for i:=1 to n do
write(m[i].c:5);
writeln;
writeln('Расстояния до точки А:');
write('  ');
for i:=1 to n do
write(m[i].r:5:1);
writeln;
writeln;
end;

var m,p:mas;
    n,k,i,j:byte;
    ax,ay:integer;
    x:perem;
    i1,i2:real;
    proverka:real;
begin
clrscr;

repeat
write('Введите кол-во прямых. n=');     //задаем кол-во прямых
readln(n);
until n in [1..nmax];

writeln('Введите коэффициенты прямых:');
for i:=1 to n do
 begin
  writeln('Прямая ',i);
  repeat
  proverka:=0;
  with m[i] do
   begin
    write('A=');readln(a);              //вводим коэффиценты a,b,c
    write('B=');readln(b);
    write('C=');readln(c);
   end;
   proverka:=sqrt(sqr(m[i].a)+sqr(m[i].b)+sqr(m[i].c));  //проверяем на правильность ввода коэффицентов прямых
   if proverka=0 then writeln('Все коэффиценты не могут быть равны 0')
   until proverka<>0;
 end;

writeln;
writeln('Введите абсциссу точки A (x):');
readln(ax);
writeln('Введите ординату точки A (y):');
readln(ay);                                   //вводим координаты точки А
writeln;

write('Пункт А');
writeln;
for i:=1 to n do
m[i].r:=Rasstoyanie(ax,ay,m[i]);         //рассчитываем расстояния от прямых до точки через вызов функции Rasstoyanie
writeln('Исходное множество:');
Print(m,n);                              //выводим на экран результат с помощью подпрограммы Print
writeln;

writeln('Для продолжения, нажмите Enter...');
readln;

write('Пункт Б');
writeln;
repeat
writeln('Введите интервал i1<i2:');
readln(i1,i2);                          // задаем интервал
until i1<i2 ;
k:=0;
for i:=1 to n do
if (m[i].r>=i1)and(m[i].r<=i2) then    // проверяем расстояния на попадание в интервал
 begin
  k:=k+1;
  p[k]:=m[i];
 end;
if k=0 then write('Прямых с расстоянием до точки А от ',i1:0:1,' до ',i2:0:1,' нет')
else
 begin
  writeln('Прямые с расстоянием до точки А от ',i1:0:1,' до ',i2:0:1);
  Print(p,k);                          // выводим на экран прямые, попавшие в интервал с помощью подпрограммы Print
  writeln;
  
  writeln('Для продолжения, нажмите Enter...');
  readln;

  write('Пункт В');
  writeln;
  for i:=1 to k-1 do
  for j:=i+1 to k do
  if p[i].r>p[j].r then                // сортируем их в порядке возрастания расстояний
   begin
    x:=p[i];
    p[i]:=p[j];
    p[j]:=x;
   end;

  writeln('В порядке возрастания расстояний:');
  Print(p,k);                          //выводим на экран прямые, попавшие в интервал в порядке возрастания расстояний с помощью подпрограммы Print
 end;
end.
Нам больше не нужно смотреть на мир сквозь замочную скважину 64Кб сегмента (с) ВалИк
VKorablev вне форума Ответить с цитированием
Старый 20.12.2011, 05:23   #2
VKorablev
Форумчанин
 
Аватар для VKorablev
 
Регистрация: 14.04.2011
Сообщений: 126
По умолчанию

Вот что получилось у меня :
Код:
# include "stdafx.h"
# include <stdio.h>
# include <Windows.h>
# include <math.h>
# include <stdlib.h>

const int nmax = 50;

struct perem
{
		int a, b, c;
		float r;
}

typedef perem [nmax], *mas;

float Rasstoyanie(int x0, int y0, perem p)
{
	return abs(p.a * x0 + p.b * y0 + p.c)/sqrt(pow((double)p.a, 2) + pow((double)p.b, 2));
}

void Print(mas m, short n)
{
	short i;

	printf("Коэффициенты прямых:\nA: ");
	for(i = 0;i < n;i++)
		printf("%5d", m [i].a);
	printf("\nB: ");
	for(i = 0;i < n;i++)
		printf("%5d", m [i].b);
	printf("\nC: ");
	for(i = 0;i < n;i++)
		printf("%5d", m [i].c);
	printf("\nРасстояния до точки А:\n  ");
	for(i = 0;i < n;i++)
		printf("%5.1f", m [i].r);
	printf("\n\n");
}

void main ()
{
	SetConsoleOutputCP(1251);
	mas m, p;
	short n, k, i, j;
	int ax, ay;
	perem x;
	float i1, i2;
	float proverka;

	system("cls");
	do
	{
		printf("Введите кол-во прямых. n=");
		scanf("%d", &n);
	}
	while ((n < 0) || (n > nmax));
	printf("\nВведите коэффициенты прямых:\n");
	for(i = 0;i < n;i++)
	{
		printf("Прямая %d", i);
		do
		{
			proverka = 0;
			printf("\nA=");
			scanf("%d", &m [i].a);
			printf("B=");
			scanf("%d", &m [i].b);
			printf("C=");
			scanf("%d", &m [i].c);
			proverka = sqrt(pow((double)m [i].a, 2) + pow((double)m [i].b, 2) + pow((double)m [i].c, 2));
			if (proverka == 0)
				printf("\nВсе коэффициенты не могут быть равны 0\n");
		}
		while (proverka == 0);
	}
	printf("\nВведите абциссу точки А (х):\n");
	scanf("%d", &ax);
	printf("\nВведите ординату точки А (у):\n");
	scanf("%d", &ax);
	printf("\nПункт А\n");
	for(i = 0;i < n;i++)
		m[i].r = Rasstoyanie(ax, ay, m[i]);
	printf("Исходное множество:\n");
	Print(m, n);
	printf("\n");
	system("pause");
	printf("Пункт Б\n");
	do
	{
		printf("Введите интервал i1<i2:\n");
		scanf("%f %f", &i1, &i2);
	}
	while (i1 > i2);
	k = 0;
	for(i = 0;i < n;i++)
		if ((m[i].r >= i1) && (m[i].r <= i2))
		{
			k++;
			p [k] = m [i];
		}
	if (k = 0)
		printf("Прямых с расстоянием до точки А от %0.1f", i1, " до %0.1f", i2, "нет");
	else
	{
		printf("Прямые с расстоянием до точки А от %0.1f", i1, " до %0.1f", i2);
		Print(p, k);
		printf("\n");
		system("pause");
		printf("Пункт В\n");
		for(i = 0; i < (k-1);i++)
			for(j = (i + 1);j < k;j++)
				if (p [i].r > p [j].r)
				{
					*x = p [i];
					p [i] = p [j];
					p [j] = *x;
				}
		printf("В порядке возрастания расстояний:\n");
		Print(p, k);
	}
}
Нам больше не нужно смотреть на мир сквозь замочную скважину 64Кб сегмента (с) ВалИк
VKorablev вне форума Ответить с цитированием
Старый 22.12.2011, 06:33   #3
Mahin
Пользователь
 
Регистрация: 18.11.2009
Сообщений: 39
По умолчанию

а в чём собственно проблема?
Mahin вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите с переводом HexToBin fedrom Общие вопросы C/C++ 7 24.01.2015 17:21
Прблема с переводом. VKorablev Паскаль, Turbo Pascal, PascalABC.NET 0 18.12.2011 21:42
Проблема с переводом Zalex Microsoft Office Word 1 14.07.2011 18:23
Помогите с переводом! Nattallia Свободное общение 1 20.09.2009 18:24
Помогите с переводом формулы SYL@R Помощь студентам 1 25.11.2008 08:44