Форум программистов, компьютерный форум CyberForum.ru

true кодеры в чем ошибка, хотел перевести паскаль на с++ - C++

Войти
Регистрация
Восстановить пароль
 
Meirzhan
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 13
22.11.2013, 20:56     true кодеры в чем ошибка, хотел перевести паскаль на с++ #1
исходник :
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
type vv = record
x, y: longint;
end;
var a, b: array[1..100] of vv;
min, m, i, j, k, n: integer;
function vect(a1,a2,b1,b2: vv): longint;
begin
vect := (a2.x - a1.x)*(b2.y - b1.y)(b2.x - b1.x)*(a2.y - a1.y)
end;
function dist2(a1,a2: vv): longint;
begin
dist2 := sqr(a2.x - a1.x) + sqr(a2.y - a1.y)
end;
begin {Main}
readln(n);{êîëè÷åñòâî òî÷åê}
for i := 1 to n do
read(a[i].x, a[i].y);
{ГЁГ№ГҐГ¬ ГЇГ°Г*ГўГіГѕ Г*ГЁГ¦Г*ГѕГѕ òî÷êó}
m := 1;
for i := 2 to n do
if a[i].y < a[m].y then m := i else
if (a[i].y = a[m].y) and
(a[i].x > a[m].x) then m := i;
b[1] := a[m];
a[m] := a[1];
a[1] := b[1];
k := 1;
min := 2;
repeat
for j := 2 to n do
if (vect(b[k],a[min],b[k],a[j]) < 0) or
((vect(b[k],a[min],b[k],a[j]) = 0) and
(dist2(b[k],a[min]) < dist2(b[k],a[j])))
then min := j;
k := k + 1;
 
b[k] := a[min];
min := 1;
until (b[k].x = b[1].x) and (b[k].y = b[1].y);
{ïîêГ* ëîìГ*Г*Г*Гї Г*ГҐ Г§Г*ìêГ*ГҐГІГ±Гї}
for j := 1 to k – 1 do {ГЇГҐГ·Г*ГІГј ðåçóëüòГ*ГІГ*}
writeln(b[j].x,' ',b[j].y)
end.
вот что я накодил:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <cmath>
using namespace std;
 
struct vv {
    long int x, y;
};
long int vect(vv a1, vv a2, vv b1, vv b2) {
    long int result = (a2.x - a1.x)*(b2.y - b1.y) +
        (b2.x - b1.x)*(a2.y - a1.y);
    return result;
}
long int dist2(vv a1, vv a2) {
    long int result = (a2.x-a1.x)*(a2.x-a1.x) + (a2.y-a1.y)*(a2.y-a1.y);
    return result;
}
int main() {
    vv a[100], b[100];
    int n;
    cin >> n;
    for (int i=1; i <= n; i++) {
        cin >> a[i].x >> a[i].y;
    }
    int m = 1;
    for (int i=2; i <= n; i++) {
        if (a[i].y < a[m].y)
            m=i;
        else if (a[i].y == a[m].y && a[i].x > a[m].x) 
            m=i;
    }   
    b[1] = a[m];
    a[m] = a[1];
    a[1] = b[1];
    
    int k=1;
    int min = 2;
    do {
        for (int j=2; j <= n; j++) {
            if ((vect(b[k],a[min],b[k],a[j]) < 0) ||
                ((vect(b[k],a[min],b[k],a[j]) == 0) &&
                (dist2(b[k],a[min]) < dist2(b[k],a[j]))))
            min = j;
        k++;
        }
            
        b[k] = a[min];
        min=1;
    } while ((b[k].x == b[1].x) && (b[k].y == b[1].y));
    for (int j = 1; j < k; j++) {
        cout << k << " "<< b[j].x << " " << b[j].y << endl;
    }
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 20:56     true кодеры в чем ошибка, хотел перевести паскаль на с++
Посмотрите здесь:

C++ Перевести программу с языка Паскаль на С++
C++ Перевести программу с языка Паскаль в язык С++
C++ перевести с С на паскаль
C++ Алгоритм на С/С++ не могу перевести в Паскаль!
C++ перевести с Паскаль
C++ Перевести с паскаль на с++ (Найти количество четных цифр)
C++ Перевести с Паскаль на С++
Перевести с паскаль на С++ C++
C++ Перевести с Паскаль на С++
C++ Перевести код Паскаль на С++
Перевести с Паскаль на С++ C++
Подскажите как перевести из с++ в паскаль C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
LuxArt
33 / 20 / 2
Регистрация: 14.11.2013
Сообщений: 85
22.11.2013, 20:58     true кодеры в чем ошибка, хотел перевести паскаль на с++ #2
Нет ошибок
Meirzhan
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 13
22.11.2013, 21:03  [ТС]     true кодеры в чем ошибка, хотел перевести паскаль на с++ #3
Цитата Сообщение от LuxArt Посмотреть сообщение
Нет ошибок
я запустил на паскале и на с++ ввел одинаковые данные но на выходе они отличаются (
Max Dark
В поиске работы
 Аватар для Max Dark
1548 / 1401 / 501
Регистрация: 09.10.2013
Сообщений: 3,185
Записей в блоге: 8
Завершенные тесты: 2
22.11.2013, 22:20     true кодеры в чем ошибка, хотел перевести паскаль на с++ #4
в паскале блок repeat until означает "делать , пока ложь" http://ideone.com/eKrH6G
в с/с++ блок do while означает "делать, пока истина" http://ideone.com/syDXjg

Те эти блоки не идентичны
+ вам нужно учитывать, что в паскале индексы массивов начинаются с 1, а в С/С++ - с 0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <cmath>
using namespace std;
 
struct vv {
    long int x, y;
};
long int vect(vv a1, vv a2, vv b1, vv b2) {
    long int result = (a2.x - a1.x)*(b2.y - b1.y) +
        (b2.x - b1.x)*(a2.y - a1.y);
    return result;
}
long int dist2(vv a1, vv a2) {
    long int result = (a2.x-a1.x)*(a2.x-a1.x) + (a2.y-a1.y)*(a2.y-a1.y);
    return result;
}
int main() {
    vv a[100], b[100];
    int n;
    cin >> n;
    for (int i=0; i < n; i++) {
        cin >> a[i].x >> a[i].y;
    }
    int m = 0;
    for (int i=1; i < n; i++) {
        if (a[i].y < a[m].y)
            m=i;
        else if (a[i].y == a[m].y && a[i].x > a[m].x) 
            m=i;
    }   
    b[0] = a[m];
    a[m] = a[0];
    a[0] = b[0];
    
    int k=0;
    int min = 2;
    do {
        for (int j=1; j < n; j++) {
            if ((vect(b[k],a[min],b[k],a[j]) < 0) ||
                ((vect(b[k],a[min],b[k],a[j]) == 0) &&
                (dist2(b[k],a[min]) < dist2(b[k],a[j]))))
            min = j;
        k++;
        }
            
        b[k] = a[min];
        min=0;
    } while (!((b[k].x == b[0].x) && (b[k].y == b[0].y)));
    for (int j = 0; j < k; j++) {
        cout << k << " "<< b[j].x << " " << b[j].y << endl;
    }
}
Вот что у меня вышло, не проверял
Meirzhan
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 13
22.11.2013, 23:46  [ТС]     true кодеры в чем ошибка, хотел перевести паскаль на с++ #5
Цитата Сообщение от Cra3y Посмотреть сообщение
в паскале блок repeat until означает "делать , пока ложь" http://ideone.com/eKrH6G
в с/с++ блок do while означает "делать, пока истина" http://ideone.com/syDXjg

Те эти блоки не идентичны
+ вам нужно учитывать, что в паскале индексы массивов начинаются с 1, а в С/С++ - с 0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <cmath>
using namespace std;
 
struct vv {
    long int x, y;
};
long int vect(vv a1, vv a2, vv b1, vv b2) {
    long int result = (a2.x - a1.x)*(b2.y - b1.y) +
        (b2.x - b1.x)*(a2.y - a1.y);
    return result;
}
long int dist2(vv a1, vv a2) {
    long int result = (a2.x-a1.x)*(a2.x-a1.x) + (a2.y-a1.y)*(a2.y-a1.y);
    return result;
}
int main() {
    vv a[100], b[100];
    int n;
    cin >> n;
    for (int i=0; i < n; i++) {
        cin >> a[i].x >> a[i].y;
    }
    int m = 0;
    for (int i=1; i < n; i++) {
        if (a[i].y < a[m].y)
            m=i;
        else if (a[i].y == a[m].y && a[i].x > a[m].x) 
            m=i;
    }   
    b[0] = a[m];
    a[m] = a[0];
    a[0] = b[0];
    
    int k=0;
    int min = 2;
    do {
        for (int j=1; j < n; j++) {
            if ((vect(b[k],a[min],b[k],a[j]) < 0) ||
                ((vect(b[k],a[min],b[k],a[j]) == 0) &&
                (dist2(b[k],a[min]) < dist2(b[k],a[j]))))
            min = j;
        k++;
        }
            
        b[k] = a[min];
        min=0;
    } while (!((b[k].x == b[0].x) && (b[k].y == b[0].y)));
    for (int j = 0; j < k; j++) {
        cout << k << " "<< b[j].x << " " << b[j].y << endl;
    }
}
Вот что у меня вышло, не проверял
спасибо) сейчас проверю )

Добавлено через 1 час 12 минут
Цитата Сообщение от Cra3y Посмотреть сообщение
в паскале блок repeat until означает "делать , пока ложь" http://ideone.com/eKrH6G
в с/с++ блок do while означает "делать, пока истина" http://ideone.com/syDXjg

Те эти блоки не идентичны
+ вам нужно учитывать, что в паскале индексы массивов начинаются с 1, а в С/С++ - с 0
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#include <iostream>
#include <cmath>
using namespace std;
 
struct vv {
    long int x, y;
};
long int vect(vv a1, vv a2, vv b1, vv b2) {
    long int result = (a2.x - a1.x)*(b2.y - b1.y) +
        (b2.x - b1.x)*(a2.y - a1.y);
    return result;
}
long int dist2(vv a1, vv a2) {
    long int result = (a2.x-a1.x)*(a2.x-a1.x) + (a2.y-a1.y)*(a2.y-a1.y);
    return result;
}
int main() {
    vv a[100], b[100];
    int n;
    cin >> n;
    for (int i=0; i < n; i++) {
        cin >> a[i].x >> a[i].y;
    }
    int m = 0;
    for (int i=1; i < n; i++) {
        if (a[i].y < a[m].y)
            m=i;
        else if (a[i].y == a[m].y && a[i].x > a[m].x) 
            m=i;
    }   
    b[0] = a[m];
    a[m] = a[0];
    a[0] = b[0];
    
    int k=0;
    int min = 2;
    do {
        for (int j=1; j < n; j++) {
            if ((vect(b[k],a[min],b[k],a[j]) < 0) ||
                ((vect(b[k],a[min],b[k],a[j]) == 0) &&
                (dist2(b[k],a[min]) < dist2(b[k],a[j]))))
            min = j;
        k++;
        }
            
        b[k] = a[min];
        min=0;
    } while (!((b[k].x == b[0].x) && (b[k].y == b[0].y)));
    for (int j = 0; j < k; j++) {
        cout << k << " "<< b[j].x << " " << b[j].y << endl;
    }
}
Вот что у меня вышло, не проверял
проверил ) спасибо) еще у себя пару ошибок нашел) теперь все работает)
Yandex
Объявления
22.11.2013, 23:46     true кодеры в чем ошибка, хотел перевести паскаль на с++
Ответ Создать тему
Опции темы

Текущее время: 06:09. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru