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

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

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

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

10.03.2012, 14:24. Просмотров 356. Ответов 0
Метки нет (Все метки)

Внутри пирамиды Хеопса есть N комнат, в которых установлены 2M модулей, составляющих M устройств. Каждое устройство состоит из двух модулей, которые располагаются в разных комнатах, и предназначено для перемещения между парой комнат, в которых установлены эти модули. Перемещение происходит за 0.5 условных единиц времени. В начальный момент времени модули всех устройств переходят в подготовительный режим. Каждый из модулей имеет некоторый свой целочисленный период времени, в течение которого он находится в подготовительном режиме. По истечении этого времени модуль мгновенно включается, после чего опять переходит в подготовительный режим. Устройством можно воспользоваться только в тот момент, когда одновременно включаются оба его модуля. Индиана Джонс сумел проникнуть в гробницу фараона. Обследовав ее, он включил устройства и собрался уходить, но в этот момент проснулся хранитель гробницы. Теперь Джонсу необходимо как можно быстрее попасть в комнату с номером N, в которой находится выход из пирамиды. При этом из комнаты в комнату он может попадать только при помощи устройств, так как проснувшийся хранитель закрыл все двери в комнатах пирамиды.
Необходимо написать программу, которая получает на входе описание расположения устройств и их характеристик, а выдает значение оптимального времени и последовательность устройств, которыми надо воспользоваться, чтобы попасть из комнаты номер 1 в комнату номер N за это время.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
{$R+,E+,N+} 
 program by96d1s2; 
 const 
 FREE=1; 
 DONE=2; 
 var 
 G : array[1..100,1..100] of byte; 
 P : array[1..100,1..100] of longint; 
 D : array[1..100] of single; 
 Labl,divd,kG : array[1..100] of byte; 
 path : array[1..100] of byte; 
 is,t1,t2,nok,Tres,NewTime : longint; 
 i,j,x,y,A,B,C,N,M,tg,Bliz : byte; 
 r1,r2 : byte; 
 Yes : boolean; 
 MinD : single; 
 function Nod (a,b:longint):longint; 
 begin 
 while (a<>b) do 
 if a>b then a:=a-b else b:=b-a; 
 Nod:=a; 
 end; 
 function Calculat (T:single; Tnok:longint):longint; 
 var i : longint; 
 begin 
 TRes:=0; 
 while (T>TRes) do inc(Tres,Tnok); 
 Calculat:=TRes ; 
 end; 
 begin 
 assign(input,'input2.txt'); reset(input); 
 assign(output,'output2.txt'); rewrite(output); 
 read(N,M); 
 for I:=1 to N do kG[i]:=0; 
 for i:=1 to M do 
 begin 
 read(r1,t1,r2,t2); nok:= (t1*t2) div Nod(t1,t2); 
 inc(kG[r1]); G[r1,kg[r1]]:=r2; P[r1,kg[r1]]:=nok; 
 inc(kG[r2]); G[r2,kg[r2]]:=r1; P[r2,kg[r2]]:=nok; 
 end; 
 for i:=1 to N do 
 begin 
 Labl[i]:=FREE; divd[i]:=1; d[i]:=maxlongint; 
 end; 
 Labl[1]:=DONE; divd[1]:=0; d[1]:=0; 
 for j:=1 to kG[1] do d[G[1,j]]:=P[1,j]+0.5; 
 for i:=1 to N-1 do 
 begin 
 MinD:=maxlongint; 
 for j:=1 to N do 
 if (Labl[j]=FREE) and (d[j]<MinD) 
 then begin MinD:=d[j]; Bliz:=j end; 
 Labl[Bliz]:=DONE; 
 for j:=1 to kG[Bliz] do 
 if (Labl[G[Bliz,j]]=FREE) 
 then begin 
 NewTime:=Calculat(d[bliz],P[bliz,j]); 
 if d[G[Bliz,j]]> NewTime +0.5 
 then 
 begin 
 d[G[Bliz,j]]:= NewTime+0.5; 
 divd[G[Bliz,j]]:=Bliz; 
 end; 
 end; 
 end; 
 tg:=N; i:=0; 
 while tg<>0 do 
 begin 
 inc(i); path[i]:=tg; tg:=divd[tg]; 
 end; 
 writeln('Оптимальное время: ',D[N]:0:1); 
 write('искомая последовательность:'); 
 for j:=i-1 downto 1 do write(' ',path[j]); 
 close(input); close(output); 
 end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
10.03.2012, 14:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перевести с Паскаля на С++ (C++):

Перевести из паскаля в c++ - C++
собственно вот паскалевский код, тут через файлы. На с++ надо через ввод/вывод. var N:integer; E:integer; En1,En2:integer; ...

Перевести с Паскаля на Си - C++
Структура элемента массива работник: фамилия, число, месяц и год рождения, пол. определить: ─ фамилия самого старшего мужчины; ─...

перевести в си++ из паскаля - C++
var n:longint; i,c:integer; s:string; A:array of boolean; begin write('Введите N: '); readln(n); str(n,s); ...

перевести на c++ с паскаля - C++
переведите пожалуйста как написать эти строчки на с++ for i:=1 to Length(s) do for j:=length(sl) downto 1 do Добавлено...

Перевести из Паскаля в с++ - C++
Народ помогите код переделать в с++ пожалуууууууууйста var i, j, k: integer; p: boolean; s1, s2: string; begin ...

Перевести с Паскаля на С++ - C++
uses crt; var n,k:byte; p,s:longint; begin clrscr; write('Введите произведение нескольких первых нечетных натуральных чисел...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.03.2012, 14:24
Привет! Вот еще темы с ответами:

Перевести с паскаля на С++ - C++
Program p1; Var x,i,n:integer; Begin Write ('n= '); Read (n); x:=10; i:=0; repeat if (n div x) &lt;&gt; 0 then...

Перевести с Паскаля на С++ - C++
Здравствуйте! Можете помочь, мне надо перевести код с Паскаля на С++ (код паскаля на фото). Вот что получилось у меня. Но код не...

Перевести из паскаля в с++ - C++
var a, i, b: integer; begin read(a); b := 0; for i := 1 to a do if a mod i = 0 then b := b + 1; ...

C Паскаля перевести в С++ - C++
Дана матрица размера M x N. Удалить столбец, содержащий максимальный элемент матрицы. program Matrix64; var ...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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