Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Нужно перевести с pascal на C и добавить циклы к ней (http://forum.oszone.net/showthread.php?t=197634)

Чин Хон 25-01-2011 18:13 1597071

Нужно перевести с pascal на C и добавить циклы к ней
 
Есть прога на паскале. Нужно перевести ее:
Код:

  Program tochka;
    uses crt;
    var
      r,x,y:real;
    begin
    clrscr;
    writeln ('vvedite x,y,z');
    readln (x,y,z);
        if ((sqr(x)+sqr(y)<=sqr(r)) and (sqr(r-x)+sqr(r-y)<=sqr(r))) then
    begin
        if (sqr(x)+sqr(y)=sqr(r)) or (sqr(r-x)+sqr(r-y)=sqr(r)) then
        writeln ('popadaet na granicu') else write ('popadaet');
    end
    else write ('ne popadaet');
    readln;
    end.


Чин Хон 25-01-2011 18:52 1597097

Циклов 3:
1) Проверка R(радиуса). Если R<=0, то R вводим заново. Если обратное - продолжаем; (Потом вводим значения x,y)
2) Далее цикл, спрашивающий: изменить ли значения x,y. Если да, то программа возвращается к моменту после R. Если нет - продолжаем;
3) Далее цикл, спрашивающий: ввести R? Если нет, программа заканчивается, а если да, то программа возвращается к самому началу

Спасибо

Beyound 25-01-2011 22:14 1597225

не на чем скомпилировать, но на память както так
Код:

стандартные библиотеки +
#include <math.h>
#include <iostream.h>

void main()
{
double r;
double x;
double y;

cin << "vvedite x,y,z \n";
cout >> x >> y >> z;
if ( sqrt(x)+sqrt(y) <= sqrt(r) && sqrt(r-x) + sqrt(r-y) <= sqrt(r) )
        if (sqrt(x)+sqrt(y) = sqrt(r) || sqrt(r-x) + sqrt(r-y) = sqrt(r) )
                cin << "popodaet na granizy \n";
        else
                cin << "popadaet";
else
    cin << "ne popadaet";
getch(); //вот эта строка чтото в памяти осталась что будет ждать нажатия кнопки, не уверен что сработает.
}

это для консоли естественно
а что еще за циклы ты написал?? помочь их реализовать тоже?

Чин Хон 25-01-2011 22:57 1597265

Да, было бы не плохо

И прога почему-то не работает

Печальный чайник 26-01-2011 13:18 1597580

"стандартные библиотеки +" в начале листинга проги стёрли, надеюсь?
Во-вторых, Beyound перепутал cin << и cout >>, поменяйте их местами, а внутри условия if замените = на ==, в-третьих, замените все использования функции типа sqrt(x) на x*x, в-четвёртых, добавьте double z;.

No Need In Magic 01-02-2011 12:35 1601969

пардон, а где переменной r присваивается значение?
в паскале, скорее всего, r будет равна нулю
на сях - хз чему

Beyound 01-02-2011 17:46 1602218

да действительно - нет присваивания.. касяк. Но я переводил то что написано, нету присваивания в паскале - нету и в си.
а на тему что будет... ну в visual 2008 - будет ошибка, которая будет говорить что переменная не инициализирована. Нуля не будет точно... в старых компиляторах (если память не изменяет - то и в таких случаях) просто бралось значение из памяти, выделенной под переменную (фактически случайное число)

No Need In Magic 02-02-2011 11:58 1602713

Цитата:

Цитата Beyound
да действительно - нет присваивания.. касяк. Но я переводил то что написано, нету присваивания в паскале - нету и в си. »

ну это был вопрос не к вам, а к автору

Цитата:

Цитата Beyound
Нуля не будет точно... в старых компиляторах (если память не изменяет - то и в таких случаях) просто бралось значение из памяти, выделенной под переменную (фактически случайное число) »

ну на Code:Blocks, который компилит на си, так и есть, да

я про тот же Turbo Pascal 7, там почти всегда переменные обнуляются уже при инициализации

Onyma 03-02-2011 23:54 1603937

переписал исходное на cpp и поправил малец очевидное:
Код:

//      tochka.cpp


// #include <cmath>
#include <iostream>
#include <iomanip>
using namespace std;
#include <conio.h>

int main(int argc, char** argv)
{
        float r, x, y;
        system("cls");
        cout << "Vvedite x, y, r:" << endl;
        cin >> x >> y >> r;
        cout << endl;
        float ry = r - y, rx = r - x;
        if( ( x * x + y * y <= r * r ) && ( rx * rx + ry * ry <= r * r ) )
        {
                if( ( x * x + y * y == r * r ) && ( rx * rx + ry * ry == r * r ) )
                        cout << "Popodaet na granitsy" << endl;
                else
                        cout << "Popodaet" << endl;
        }
        else cout << "Ne popodaet" << endl;
       
        cout << "Dlia vihoda najmite liobyio klavishy...";
        getch();
        return 0;
};

это компилируется и работает. Хм а что оно делает? Вроде проверяет входит ли точка в круг, но проверок имхо больше...
:ok:


Время: 02:21.

Время: 02:21.
© OSzone.net 2001-