• Добро пожаловать на компьютерный форум Tehnari.ru. Здесь разбираемся с проблемами ПК и ноутбуков: Windows, драйверы, «железо», сборка и апгрейд, софт и безопасность. Форум работает много лет, сейчас он переехал на новый движок, но старые темы и аккаунты мы постарались сохранить максимально аккуратно.

    Форум не связан с магазинами и сервисами – мы ничего не продаём и не даём «рекламу под видом совета». Отвечают обычные участники и модераторы, которые следят за порядком и качеством подсказок.

    Если вы у нас впервые, загляните на страницу о форуме и правила – там коротко описано, как задать вопрос так, чтобы быстро получить ответ. Чтобы создавать темы и писать сообщения, сначала зарегистрируйтесь, а затем войдите под своим логином.

    Не знаете, с чего начать? Создайте тему с описанием проблемы – подскажем и при необходимости перенесём её в подходящий раздел.
    Задать вопрос Новые сообщения Как правильно спросить
    Если пришли по старой ссылке со старого Tehnari.ru – вы на нужном месте, просто продолжайте обсуждение.

Перевести с Паскаля на Си

steamangarsk

Новые
Регистрация
28 Дек 2012
Сообщения
20
Реакции
0
Баллы
0
Перевести с Паскаля на Си

помогите пожалуйста перевести код с Паскаля на Си

var x, y, a, b, s_left, s_right:real;
begin
WriteLn('laboratornya rabota №2');
WriteLn('variant №8');
WriteLn;
Write('x=');
ReadLn(x);

if (x>0) and (x<2)
then begin
if(x<1.0)
then begin
a:=sqrt(1.0-x*x);
b:=2*arctan(a/x);
s_right:=2.0*(1.0-x)-(1.0/2.0)*(b-sin(b))+pi/2.0;
s_left:=2.0-s_right;
y:=2.0*(1.0-a);
end else
if x=1
then begin
y:=2;
s_right:=(1.0/2.0)*pi;
s_left:=2.0-s_right;
end else
begin
y:=2.0*sqrt(1.0-(1.0-x)*(1.0-x));
B:=2*arctan(sqrt((1.0-(1.0-x)*(1.0-x))/(x-1.0)));
s_right:=(1.0/2.0)*(B-sin(B));
s_left:=2.0-s_right;
end;
writeln('s_right=', s_right:0:2);
writeln('s_left=', s_left:0:2);
writeln('y=', y:0:2);
end
else
writeln('x vne vichisleniy');
readln;
end.

[mod2]Для начала рекомендую освоить Правила нашего форума, в частности п. 3.3 (кросспостинг) и п. 2.1 (требования к названиям тем).
Тема-дубликат удалена.
Название отредактировано.

Модератор[/mod2]
 
ну помогите кто нибудь... срочно нужно...
 
ну помогите кто нибудь... срочно нужно...
Если "срочно нужно", то набейте в Google
Pascal to C converter
таких программок навалом, выберите, установите да запустите. На свой страх и риск (программки такого рода - самодельные).
 
прога то нулевая. можно было бы и самому сделать.
 
прога то нулевая. можно было бы и самому сделать.
Ну так покажите класс, сударь! А отпускать подобные реплики мы все мастера...
P.S. Сам я, к сожалению, на Си не пишу. Вот если бы наоборот - из Си в Паскаль...
 
Конвертеры много ошибок допускают, а препод строгий, заставит переделывать...
 
Вот честно скажу - ни в С ни в С++ не шарю. И в паскале тоже. Знаю Бэйсик, на уровне бэйсик. Но например вижу, что код вставлен косячный. Видимо пропущен if x>1 then. Условие задачи какое? Мне Сишку ставить даже лень, что бы попробовать написать, на столько это просто. А что значит вот это "s_left:0:2"? s_left переменная которую мы ввели, в вот это :0:2 это зачем? округление?
 
да, это число знаков после запятой... и там ничего не пропущено, потому что в Паскале код нормально работает...
 
условие такое
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    13.5 KB · Просмотры: 186
Видимо пропущен if x>1 then.
Нет, всё правильно. Структура:
Код:
if x=1 then
 begin
  ...
 end
else
 begin
  ...
 end;
вот это :0:2 это зачем? округление?
Нет. Это разновидность формата вывода вещественных чисел. Означает "вывести с двумя разрядами после десятичного разделителя", т.е., иначе говоря, до сотых включительно. Первый "0" означает, что количество значащих цифр целой части не определено: как получится, так и вывести.
 
Хм. А что будет если мы введем допустим 1.5 или этот вариант описывать не надо и последний begin как раз за это и отвечает?
 
Хм. А что будет если мы введем допустим 1.5 или этот вариант описывать не надо и последний begin как раз за это и отвечает?
Ветвление if <условие> then <оператор1> else <оператор2> означает "если условие истинно, то выполнить оператор1, в противном случае (если условие ложно) выполнить оператор2".
 
int main() {

float x, y, a, b, s_left, s_right;
printf("laboratornya rabota №2" \n);
printf("variant 8" \n);
printf("vvedite x");
scanf("%f,&x");
if (x>0) && (x<2) {
if(x<1.0) {
a=sqrt(1.0-x*x);
b=2*arctan(a/x);
s_right=2.0*(1.0-x)-(1.0/2.0)*(b-sin(b))+pi/2.0;
s_left=2.0-s_right;
y:=2.0*(1.0-a);
}
else if (x==2) {
y=2;
s_right=(1.0/2.0)*pi;
s_left=2.0-s_right;
}
else {
y=2.0*sqrt(1.0-(1.0-x)*(1.0-x));
B=2*arctan(sqrt((1.0-(1.0-x)*(1.0-x))/(x-1.0)));
s_right=(1.0/2.0)*(B-sin(B));
s_left=2.0-s_right;
}
printf("s_right=", s_right);
printf("s_left=", s_left);
printf("y=", y);
else {
printf("x vne vichisleniy");
{
return 0;
}

короче это дело должно выглядеть вот так. файлы библиотек сам добавишь #include перед ф-цией main. и найди, как выводить 2 знака после зарятой в ф-ции printf. 20 минут заняло. ессесно не проверял.
 
через какую программу компилировали? у меня в codelite такую ошибку выдает
 

Вложения

  • Безымянный.webp
    Безымянный.webp
    9.8 KB · Просмотры: 176
я же написал, что не компилировал. по идее это должно работать в visual studio, в netbeans. Разберитесь с этим сами, а то на программиста ведь не я учусь, ага :)
 
Назад
Сверху