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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.02.2017, 14:10   #1
leonid_spartak
Пользователь
 
Регистрация: 18.02.2017
Сообщений: 43
По умолчанию Перевод из Pascal в Си

Помогите пожалуйста перевести код из Pascal в Си:

Код:
function f(x:real):real;
begin
   Result:=0;
   If (x>0) and (x<=1) then
      Result:=1-Sqrt(1-x*x);
   If (x>1) and (x<=2) then
      Result:=Sqrt(1-(x-1)*(x-1));
   Result:=2*Result;
end;

const dx=0.01;
var x,xx,y_razrez,s_left,s_right:real;
begin
   Write('x = '); Readln(x);
   y_razrez:=f(x);
   Writeln('y_razrez = ',y_razrez:5:5);
   s_left:=0;
   xx:=-dx;
   Repeat
      xx:=xx+dx;
      s_left:=s_left+f(xx)*dx;
   Until xx>=x;
   Writeln('s_left = ',s_left:5:5);
   s_right:=0;
   Repeat
      xx:=xx+dx;
      s_right:=s_right+f(xx)*dx;
   Until xx>=2;
   Writeln('s_right = ',s_right:5:5);
   Readln;
end.

Последний раз редактировалось Вадим Мошев; 19.02.2017 в 14:26.
leonid_spartak вне форума Ответить с цитированием
Старый 19.02.2017, 15:36   #2
LexaTaHKuCT
Новичок
Джуниор
 
Регистрация: 19.02.2017
Сообщений: 11
По умолчанию

В
Код:
function f(x:real):real;
begin
   Result:=0;
   If (x>0) and (x<=1) then
      Result:=1-Sqrt(1-x*x);
   If (x>1) and (x<=2) then
      Result:=Sqrt(1-(x-1)*(x-1));
   Result:=2*Result;
end;
Х может быть равен промежутку от 1 до 2 включая концы?
LexaTaHKuCT вне форума Ответить с цитированием
Старый 19.02.2017, 15:41   #3
leonid_spartak
Пользователь
 
Регистрация: 18.02.2017
Сообщений: 43
По умолчанию

Цитата:
Сообщение от LexaTaHKuCT Посмотреть сообщение
В
Код:
function f(x:real):real;
begin
   Result:=0;
   If (x>0) and (x<=1) then
      Result:=1-Sqrt(1-x*x);
   If (x>1) and (x<=2) then
      Result:=Sqrt(1-(x-1)*(x-1));
   Result:=2*Result;
end;
Х может быть равен промежутку от 1 до 2 включая концы?
Да, может
leonid_spartak вне форума Ответить с цитированием
Старый 19.02.2017, 15:42   #4
LexaTaHKuCT
Новичок
Джуниор
 
Регистрация: 19.02.2017
Сообщений: 11
По умолчанию

Код:
#include "stdafx.h"
#include <iostream>

using namespace std;

long float x, xx, y_razrez, s_left, s_right, Result;
float dx = 0.01;

float f(float x)
{
	Result = 0;
	if(x > 0 && x <= 1) { Result = 1 - sqrt(1 - x*x);}	
	if (x > 1 && x <= 2) { Result = sqrt(1 - (x - 1)*(x - 1)); }
	Result = 2 * Result;
	return Result;
}

int main()
{
	cout << "x = ";
	cin >> x;
	y_razrez = f(x);
	cout << "y_razrez = " << y_razrez << "\n";
	s_left = 0;
	xx = -dx;
	while (xx >= x)
	{
		xx = xx + dx;
		s_left = s_left + f(xx)*dx;
	}
	cout << "s_left = " << s_left << "\n";
	s_right = 0;
	while (xx >= 2)
	{
		xx = xx + dx;
		s_right = s_right + f(xx)*dx;
	}
	cout << "s_right = " << s_right << "\n";
	system("pause");
}
Должно работать как нужно

Тут
Код:
xx:=-dx;//xx = -0.01
   Repeat
      xx:=xx+dx;//xx = -0.01 + 0.01 = 0
Зачем. Ты уверен что паскалевский код правилен?

Последний раз редактировалось LexaTaHKuCT; 19.02.2017 в 15:56.
LexaTaHKuCT вне форума Ответить с цитированием
Старый 19.02.2017, 15:57   #5
leonid_spartak
Пользователь
 
Регистрация: 18.02.2017
Сообщений: 43
По умолчанию

Цитата:
Сообщение от LexaTaHKuCT Посмотреть сообщение
Код:
#include "stdafx.h"
#include <iostream>

using namespace std;

long float x, xx, y_razrez, s_left, s_right, Result;
float dx = 0.01;

float f(float x)
{
	Result = 0;
	if(x > 0 && x <= 1) { Result = 1 - sqrt(1 - x*x);}	
	if (x > 1 && x <= 2) { Result = sqrt(1 - (x - 1)*(x - 1)); }
	Result = 2 * Result;
	return Result;
}

int main()
{
	cout << "x = ";
	cin >> x;
	y_razrez = f(x);
	cout << "y_razrez = " << y_razrez << "\n";
	s_left = 0;
	xx = -dx;
	while (xx >= x)
	{
		xx = xx + dx;
		s_left = s_left + f(xx)*dx;
	}
	cout << "s_left = " << s_left << "\n";
	s_right = 0;
	while (xx >= 2)
	{
		xx = xx + dx;
		s_right = s_right + f(xx)*dx;
	}
	cout << "s_right = " << s_right << "\n";
	system("pause");
}
Должно работать как нужно

Тут
Код:
xx:=-dx;//xx = -0.01
   Repeat
      xx:=xx+dx;//xx = -0.01 + 0.01 = 0
Зачем, ты уверен что паскалевский код правилен?
Не уверен, что он весь правильный, мне нужно, чтобы можно было работать с данным рисункомСнимок 2.JPG
leonid_spartak вне форума Ответить с цитированием
Старый 19.02.2017, 15:59   #6
LexaTaHKuCT
Новичок
Джуниор
 
Регистрация: 19.02.2017
Сообщений: 11
По умолчанию

Цитата:
Сообщение от leonid_spartak Посмотреть сообщение
Не уверен, что он весь правильный, мне нужно, чтобы можно было работать с данным рисункомВложение 86377
Ок, что я должен ввести и что я должен получить?
LexaTaHKuCT вне форума Ответить с цитированием
Старый 19.02.2017, 16:00   #7
leonid_spartak
Пользователь
 
Регистрация: 18.02.2017
Сообщений: 43
По умолчанию

Цитата:
Сообщение от LexaTaHKuCT Посмотреть сообщение
Ок, что я должен ввести и что я должен получить?
Составить алгоритм и написать код программы, вычисляющей длину линии вертикального разреза фигуры y_razrez, значения площадей фигуры слева и справа от линии разреза s_left, s_right, по значениям аргумента x, введенным с консоли:
leonid_spartak вне форума Ответить с цитированием
Старый 19.02.2017, 16:02   #8
LexaTaHKuCT
Новичок
Джуниор
 
Регистрация: 19.02.2017
Сообщений: 11
По умолчанию

Цитата:
Сообщение от leonid_spartak Посмотреть сообщение
Составить алгоритм и написать код программы, вычисляющей длину линии вертикального разреза фигуры y_razrez, значения площадей фигуры слева и справа от линии разреза s_left, s_right, по значениям аргумента x, введенным с консоли:
Это я уже видел тут http://www.programmersforum.ru/showthread.php?t=304307, а что конкретно по числам?
LexaTaHKuCT вне форума Ответить с цитированием
Старый 19.02.2017, 16:03   #9
leonid_spartak
Пользователь
 
Регистрация: 18.02.2017
Сообщений: 43
По умолчанию

У меня есть код для вот этого рисунка:
Снимок.JPG
#include <stdio.h>
#include <math.h>

int main (int argc, char **argv)
{
double x, y1, y2;
double S1, S2, sLeft, sRight, phi;

printf ("Enter x: ");
scanf ("%lf", &x);

S1 = M_PI / 2;
S2 = 2 - M_PI / 2;

if ((x < 0) || (x > 2))
{
printf ("X out of range\n");
return -1;
}


if (x == 1)
{
y1 = 1;
y2 = -1;
phi = M_PI;
sLeft = S1;
sRight = S2;
}
else if (x < 1)
{
y1 = sqrt(1 - (x - 1) * (x - 1));
y2 = -y1;
phi = 2 * atan (fabs (y2 - y1) / 2 / (1 - x));
sLeft = (float) 1 / 2 * (phi - sin (phi));
sRight = S1 + S2 - sLeft;
}
else
{
y1 = sqrt(1 - (x - 2) * (x - 2)) - 1;
y2 = -sqrt(1 - (x - 2) * (x - 2)) + 1;
phi = 2 * atan (fabs (y2 - y1) / 2 / x);
sRight = (float) 1 / 2 * (phi - sin (phi));
sLeft = S1 + S2 - sRight;
}

printf ("Length: %lf\n", fabs (y2 - y1));
printf ("S : %lf\n", S1 + S2);
printf ("sLeft : %lf\n", sLeft);
printf ("sRight : %lf\n", sRight);

getch();
return 0;
}
А нужен для показанного выше
leonid_spartak вне форума Ответить с цитированием
Старый 19.02.2017, 16:08   #10
LexaTaHKuCT
Новичок
Джуниор
 
Регистрация: 19.02.2017
Сообщений: 11
По умолчанию

Цитата:
Сообщение от leonid_spartak Посмотреть сообщение
У меня есть код для вот этого рисунка:
Вложение 86378
#include <stdio.h>
#include <math.h>

int main (int argc, char **argv)
{
double x, y1, y2;
double S1, S2, sLeft, sRight, phi;

printf ("Enter x: ");
scanf ("%lf", &x);

S1 = M_PI / 2;
S2 = 2 - M_PI / 2;

if ((x < 0) || (x > 2))
{
printf ("X out of range\n");
return -1;
}


if (x == 1)
{
y1 = 1;
y2 = -1;
phi = M_PI;
sLeft = S1;
sRight = S2;
}
else if (x < 1)
{
y1 = sqrt(1 - (x - 1) * (x - 1));
y2 = -y1;
phi = 2 * atan (fabs (y2 - y1) / 2 / (1 - x));
sLeft = (float) 1 / 2 * (phi - sin (phi));
sRight = S1 + S2 - sLeft;
}
else
{
y1 = sqrt(1 - (x - 2) * (x - 2)) - 1;
y2 = -sqrt(1 - (x - 2) * (x - 2)) + 1;
phi = 2 * atan (fabs (y2 - y1) / 2 / x);
sRight = (float) 1 / 2 * (phi - sin (phi));
sLeft = S1 + S2 - sRight;
}

printf ("Length: %lf\n", fabs (y2 - y1));
printf ("S : %lf\n", S1 + S2);
printf ("sLeft : %lf\n", sLeft);
printf ("sRight : %lf\n", sRight);

getch();
return 0;
}
А нужен для показанного выше
А тут чему равен Х?
LexaTaHKuCT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перевод в C++ из Pascal =IS= Помощь студентам 1 24.05.2012 00:37
Перевод с PasCal на Си bodya00728 Помощь студентам 0 16.05.2012 15:03
перевод из Pascal в С++ edise Помощь студентам 0 13.11.2010 16:01
Перевод из Pascal в С Foxtrot_1 Помощь студентам 7 20.06.2009 19:00
Перевод кода из Pascal в Object Pascal zemskov77 Общие вопросы Delphi 1 03.01.2009 09:37