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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Meirzhan
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 13
#1

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

22.11.2013, 20:56. Просмотров 271. Ответов 4
Метки нет (Все метки)

исходник :
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;
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2013, 20:56
Здравствуйте! Я подобрал для вас темы с ответами на вопрос true кодеры в чем ошибка, хотел перевести паскаль на с++ (C++):

перевести с Паскаль - C++
123

Перевести с Паскаль на С++ - C++
я не знал извините то поможете

перевести с С на паскаль - C++
Переведете пожалуйста код с С++ на паскаль. Очень нужно! Программа должна удалять лишние элементы в последовательности, так, чтобы после...

Перевести с Паскаль на С++ - C++
uses crt; var s:string; i:integer; a: set of char; begin clrscr; a:=; writeln('vvedite stroku'); readln(s);

Перевести с Паскаль на С++ - C++
Само задание: вводить массив малых латинских букв, и отсортировать в алфавитном порядке program sort; var s:string; i,j:integer; ...

Перевести с паскаль на С++ - C++
uses crt; var m,k, a, b, c, d,v: integer; n,p,z, i,q: real; s:string; function NOD(x,y:integer):integer; Begin If x&lt;&gt;0 then...

4
LuxArt
34 / 21 / 2
Регистрация: 14.11.2013
Сообщений: 85
22.11.2013, 20:58 #2
Нет ошибок
0
Meirzhan
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 13
22.11.2013, 21:03  [ТС] #3
Цитата Сообщение от LuxArt Посмотреть сообщение
Нет ошибок
я запустил на паскале и на с++ ввел одинаковые данные но на выходе они отличаются (
0
Max Dark
шКодер самоучка
1840 / 1640 / 597
Регистрация: 09.10.2013
Сообщений: 3,650
Записей в блоге: 6
Завершенные тесты: 2
22.11.2013, 22:20 #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;
    }
}
Вот что у меня вышло, не проверял
1
Meirzhan
0 / 0 / 0
Регистрация: 03.04.2013
Сообщений: 13
22.11.2013, 23:46  [ТС] #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;
    }
}
Вот что у меня вышло, не проверял
проверил ) спасибо) еще у себя пару ошибок нашел) теперь все работает)
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2013, 23:46
Привет! Вот еще темы с ответами:

Перевести код Паскаль на С++ - C++
uses crt,dos; type te=record kal,ves,dl,vis:string; med:string; pr_nom:string; end; var f:file of...

Паскаль В чем ошибка - Free Pascal
Подскажите пожалуйста, в чем ошибка? Нужно вычислить изображение на картинке! g:=0; writeln('Vvedite X: '); read(x); ...

Паскаль.массивы. посмотрите в чем ошибка - Pascal
Посмотрите, пожалуйста, в чем ошибка(не делает инверсию почему-то). условие задачи: Заполнить массив из 12 элементов случайными числами в...

Хотел бы перевести эту программу с С++ на маткад - MathCAD
привет всем! кто поможет, хотел бы перевести эту программу С++ на маткад что то не получается спасибо за ранее) #include &lt;iostream&gt; ...


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

Или воспользуйтесь поиском по форуму:
5
Yandex
Объявления
22.11.2013, 23:46
Ответ Создать тему
Опции темы

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