Определить способы возможной связи между двумя заданными спутниками - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Кто сможет перевести из pascal в c. Или предложить вариант получше в c.
Листинг программы
  1. { В космическом центре проектируется систем организции связи
  2. между спутникми, действующейя в реальном масштабе времени. Каждый
  3. спутник может иметь либо не иметь как радиостанцию, так и приемник
  4. радиосигналов. Сигналы с одного спутника могут передаваться на другие
  5. через произвольное число промежуточных спутников. Заранее известно,
  6. когда два спутника появляются в зоне радиовидимости и в течение какого
  7. времени спутники будут находиться в этой зоне. Требуется определить
  8. способы возможной связи между двумя заданными спутниками в указанный
  9. момент времени с минимальным числом промежуточных звеньев.}
  10. Program Cosmos;
  11. Uses crt;
  12. Const
  13. max=10;
  14. Type
  15. bukvs= set of 0..255;
  16. mat=array[1..max,1..max] of integer; { матрица смежности }
  17. put=1..max; { номер вершины в пути }
  18. sputik= record
  19. name:string;
  20. r:byte;
  21. p:byte;
  22. end;
  23. Vrem= record
  24. time1:integer;
  25. time2:integer;
  26. end;
  27. Tim= array[1..max,1..max] of vrem; { матрица сеансов связи}
  28. sput= array[1..max] of sputik;
  29. const Cif: bukvs=[48..57];
  30. Var
  31. matr : mat;
  32. Ti:tim;
  33. sp:sput;
  34. m: set of put; { множество вершин, входящих в путь }
  35. rev: array [1..max] of integer;
  36. gr: array [1..max] of integer; { текущий путь }
  37. a,b,ver,j,i,vr1,vr2,error,times,t: integer;
  38. k,kk,flag,maxi,maxj,ff,fl,min,lag:byte;
  39. l: boolean;
  40. ch,c: char;
  41. t1, t2:text;
  42. s1,s2,name1,name2:string;
  43. Procedure Sozd;
  44. Begin
  45. k:=1;
  46. While not EOF(t1) do
  47. Begin
  48. inc(kk);
  49. Begin
  50. k:=1;
  51. s1[0]:=#0;
  52. s1[0]:=#255;
  53. delete(s1,0,200);
  54. s1[0]:=#255;
  55. While ord(ch)<>32 do
  56. Begin
  57. Read(t1,ch);
  58. if ord(ch)<>32 then
  59. s1[k]:=ch;
  60. inc(k);
  61. End;
  62. delete(s1,(k-1),255);
  63. sp[kk].name:=s1;
  64. k:=1;
  65. read(t1,ch);
  66. If ch='+' then
  67. sp[kk].r:=1
  68. Else
  69. If ch='-' then
  70. sp[kk].r:=0
  71. Else
  72. Begin
  73. clrscr;
  74. ff:=1;
  75. textcolor(4);
  76. Writeln('Вы неправильно ввели информацию в 1 исходном файле. ');
  77. textcolor(4+128);
  78. Write('НАЖМИТЕ Enter');
  79. readln;
  80. Close(t1);
  81. Close(t2);
  82. exit;
  83. End;
  84. read(t1,ch);
  85. read(t1,ch);
  86. If ch='+' then
  87. sp[kk].p:=1
  88. Else
  89. If ch='-' then
  90. sp[kk].p:=0
  91. Else
  92. Begin
  93. clrscr;
  94. ff:=1;
  95. textcolor(4);
  96. Writeln('Вы неправильно ввели информацию в 1 исходном файле. ');
  97. textcolor(4+128);
  98. Write('НАЖМИТЕ Enter');
  99. readln;
  100. Close(t1);
  101. Close(t2);
  102. exit;
  103. End;
  104. readln(t1,s1);
  105. End;
  106. End;
  107. ver:=kk;
  108. ff:=0;
  109. End;
  110. Procedure Sozd2;
  111. Begin
  112. While not EOF(t2) do
  113. Begin
  114. {While not (Eof(t2)) or (eoln) do}
  115. Begin
  116. k:=1;
  117. flag:=0;
  118. k:=0;
  119. s1[k]:='0';
  120. s1[k]:=#255;
  121. delete(s1,0,40);
  122. delete(s1,1,254);
  123. s1[k]:=#255;
  124. k:=1;
  125. s1[k]:=#0;
  126. While ord(ch)<>32 do
  127. Begin
  128. Read(t2,ch);
  129. if ord(ch)<>32 then
  130. s1[k]:=ch;
  131. inc(k);
  132. End;
  133. delete(s1,(k-1),255);
  134. For i:=1 to ver do
  135. If sp[i].name=s1 then
  136. begin
  137. inc(flag);
  138. maxi:=i;
  139. end;
  140. If flag<>1 then
  141. Begin
  142. clrscr;
  143. ff:=1;
  144. textcolor(4);
  145. ff:=1;
  146. Writeln('Вы неправильно ввели информацию в 1 или 2 исходном файле. ');
  147. textcolor(4+128);
  148. Write('НАЖМИТЕ Enter');
  149. readln;
  150. Close(t1);
  151. Close(t2);
  152. exit;
  153. End;
  154. k:=1;
  155. flag:=0;
  156. s2[0]:=#255;
  157. ch:='0';
  158. While ord(ch)<>32 do
  159. Begin
  160. Read(t2,ch);
  161. if ord(ch)<>32 then
  162. s2[k]:=ch;
  163. inc(k);
  164. End;
  165. delete(s2,(k-1),255);
  166. For i:=1 to ver do
  167. If sp[i].name=s2 then
  168. begin
  169. inc(flag);
  170. maxj:=i;
  171. end;
  172. If flag<>1 then
  173. Begin
  174. clrscr;
  175. ff:=1;
  176. textcolor(4);
  177. Writeln('Вы неправильно ввели информацию в 1 или 2 исходном файле. ');
  178. textcolor(4+128);
  179. Write('НАЖМИТЕ Enter');
  180. readln;
  181. Close(t1);
  182. Close(t2);
  183. exit;
  184. End;
  185. If S1=s2 then
  186. Begin
  187. clrscr;
  188. textcolor(4);
  189. ff:=1;
  190. Writeln('Вы неправильно ввели информацию во 2 исходном файле. ');
  191. Writeln('Программа будет закрыта после нажатия клавищи Enter.');
  192. textcolor(4+128);
  193. Write('НАЖМИТЕ Enter');
  194. readln;
  195. Close(t1);
  196. Close(t2);
  197. exit;
  198. End;
  199. k:=1;
  200. For kk:=1 to 5 do
  201. begin
  202. Read(t2,ch);
  203. If ord(ch) in cif then
  204. begin
  205. s1[k]:=ch;
  206. inc(k);
  207. end;
  208. if kk=3 then
  209. begin
  210. delete(s1,3,253);
  211. val(s1,vr1,error);
  212. delete(s1,0,256);
  213. s1[0]:=#255;
  214. k:=1;
  215. end;
  216. if kk=5 then
  217. begin
  218. vr1:=vr1*60;
  219. delete(s1,3,253);
  220. val(s1,vr2,error);
  221. ti[maxi,maxj].time1:=vr1+vr2;
  222. ti[maxj,maxi].time1:=vr1+vr2;
  223. end;
  224. if (kk=5) and (k<3) then
  225. Begin
  226. clrscr;
  227. textcolor(4);
  228. ff:=1;
  229. Writeln('Вы неправильно ввели информацию во 2 исходном файле. ');
  230. textcolor(4+128);
  231. Write('НАЖМИТЕ Enter');
  232. readln;
  233. Close(t1);
  234. Close(t2);
  235. exit;
  236. End;
  237. end;
  238. k:=1;
  239. read(t2,ch);
  240. For kk:=1 to 5 do
  241. begin
  242. Read(t2,ch);
  243. If ord(ch) in cif then
  244. begin
  245. s1[k]:=ch;
  246. inc(k);
  247. end;
  248. if kk=3 then
  249. begin
  250. delete(s1,3,253);
  251. val(s1,vr1,error);
  252. delete(s1,0,256);
  253. s1[0]:=#255;
  254. k:=1;
  255. end;
  256. if kk=5 then
  257. begin
  258. vr1:=vr1*60;
  259. delete(s1,3,253);
  260. val(s1,vr2,error);
  261. ti[maxi,maxj].time2:=vr1+vr2;
  262. ti[maxj,maxi].time2:=vr1+vr2;
  263. end;
  264. if (kk=5) and (k<3) then
  265. Begin
  266. clrscr;
  267. textcolor(4);
  268. ff:=1;
  269. Writeln('Вы неправильно ввели информацию во 2 исходном файле. ');
  270. textcolor(4+128);
  271. Write('НАЖМИТЕ Enter');
  272. readln;
  273. Close(t1);
  274. Close(t2);
  275. exit;
  276. End;
  277. End;
  278. {while not(eof(t2)) or (eoln) do}
  279. readln(t2,s2);
  280. End;
  281. End;
  282. End;
  283. Procedure PoiskPut(t: integer);
  284. { поиск всех путей на графе }
  285. Var i: integer;
  286. Begin
  287. gr[j]:=t; { добавление в путь текущей вершины }
  288. m:=m+[t]; { коррекция множества вершин пути }
  289. j:=j+1;
  290. if t=maxj then { maxj-конечная вершина }
  291. begin
  292. {Writeln('Найден путь: ');}
  293. if min>j then
  294. begin
  295. min:=j;
  296. lag:=1;
  297. For i:=1 to max do
  298. rev[i]:=0;
  299. For i:=1 to j-1 do { вывод пути }
  300. rev[i]:=gr[i];
  301. end;
  302. end
  303. else
  304. For i:=1 to ver do
  305. if not (i in m) and (ti[t,i].time1<>9999) and (ti[t,i].time2<>9999) then
  306. if (ti[t,i].time1<times) and (ti[t,i].time2>times) then
  307. { поиск в глубину: выбор продолжения пути без цикла }
  308. {if (sp[i].p=1) and (sp[t].r=1 ) then}
  309. PoiskPut(i);
  310. { здесь оказываемся после нахождения очередного пути }
  311. { или в случае попадания в тупик }
  312. m:=m-[t];
  313. { исключение из множества вершин пути последней вершины }
  314. j:=j-1 { возврат в предыдущую вершину }
  315. End;
  316. BEGIN
  317. clrscr;
  318. ff:=2;
  319. For i:=1 to max do
  320. For j:=1 to max do
  321. begin
  322. ti[i,j].time1:=9999;
  323. ti[i,j].time2:=9999;
  324. end;
  325. While ff<>0 do Begin
  326. While fl<>2 do
  327. Begin
  328. textcolor(15);
  329. Writeln('Укажите адреса двух исходных файлов. В первом - имена спутников и их');
  330. Writeln('характеристики(наличие или отсутствие приемника и радиостанции), а во');
  331. Writeln('втором приведено расписание сеансов связи спутников.');
  332. Write('Введите путь к первому файлу: ');
  333. Readln(s1);
  334. if ord(s1[1])<>0 then
  335. begin
  336. Assign(t1,s1);
  337. {$I-}
  338. RESEt (t1);
  339. {$I+}
  340. If IOResult=0 then
  341. begin
  342. Write('Введите путь ко второму файлу: ');
  343. Readln(s1);
  344. if ord(s1[1])<>0 then
  345. begin
  346. Assign(t2,s1);
  347. {$I-}
  348. RESEt (t2);
  349. {$I+}
  350. If IOResult=0 then
  351. fl:=2
  352. else
  353. Begin
  354. clrscr;
  355. textcolor(4);
  356. Writeln('Вы неправильно ввели адрес 2 исходного файла. ');
  357. textcolor(4+128);
  358. Write('НАЖМИТЕ Enter');
  359. readln;
  360. Close(t1);
  361. flag:=0;
  362. End;
  363. End
  364. Else
  365. begin
  366. Textcolor(4);
  367. Writeln('Вы не указали адрес 2 исходника программы.');
  368. Writeln('Нажмите Enter.');
  369. Readln;
  370. Close(t1);
  371. end;
  372. End
  373. Else
  374. Begin
  375. clrscr;
  376. textcolor(4);
  377. Writeln('Вы неправильно ввели адрес 1 исходного файла. ');
  378. textcolor(4+128);
  379. Write('НАЖМИТЕ Enter');
  380. readln;
  381. End;
  382. End
  383. Else
  384. begin
  385. Textcolor(4);
  386. Writeln('Вы не указали адрес 1 исходника программы.');
  387. Writeln('Нажмите Enter.');
  388. Readln;
  389. end;
  390. End;
  391. Writeln('');
  392. Sozd;
  393. if ff=0 then
  394. Sozd2;
  395. if ff=1 then
  396. halt;
  397. End;
  398.  
  399. Writeln('Все данные введены правильно!');
  400. While c<>'2' do
  401. Begin
  402. clrscr;
  403. textcolor(15);
  404. lag:=0;
  405. min:=max;
  406. Writeln('МЕНЮ:');
  407. Writeln('1-поиск наименьшего пути между двумя спутниками');
  408. Writeln('2-выход из программы');
  409. Readln(c);
  410. case (c) of '1' :
  411. Begin
  412. clrscr;
  413. name1[0]:=#255;
  414. name2[0]:=#255;
  415. flag:=0;
  416. Write('Введите название источника сигнала(имя спутника): ');
  417. Readln(name1);
  418. For i:=1 to ver do
  419. If sp[i].name=name1 then
  420. begin
  421. inc(flag);
  422. maxi:=i;
  423. end;
  424. If flag=1 then
  425. Begin
  426. Write('Введите название приемника сигнала(имя спутника): ');
  427. Readln(name2);
  428. For i:=1 to ver do
  429. If sp[i].name=name2 then
  430. begin
  431. inc(flag);
  432. maxj:=i;
  433. end;
  434. If flag=2 then
  435. Begin
  436. Write('Введите время связи: ');
  437. Readln(s2);
  438. k:=1;
  439. For kk:=1 to 5 do
  440. Begin
  441. ch:=s2[kk];
  442. If ord(ch) in cif then
  443. begin
  444. s1[k]:=ch;
  445. inc(k);
  446. end;
  447. If kk=3 then
  448. begin
  449. delete(s1,3,253);
  450. val(s1,vr1,error);
  451. delete(s1,0,256);
  452. s1[0]:=#255;
  453. k:=1;
  454. end;
  455. If kk=5 then
  456. begin
  457. vr1:=vr1*60;
  458. delete(s1,3,253);
  459. val(s1,vr2,error);
  460. times:=vr1+vr2;
  461. end;
  462. End;
  463. If (kk=5) and (k>=3) then
  464. Begin
  465. { End;}
  466. If sp[maxi].r=1 then
  467. Begin
  468. If sp[maxj].p=1 then
  469. begin
  470. t:=0;
  471. j:=1;
  472. i:=0;
  473. m:=[];
  474. PoiskPut(maxi);
  475. end
  476. Else
  477. Begin
  478. clrscr;
  479. textcolor(4);
  480. Writeln('Передача невозможна так как на 2 спутнике нет приемника.');
  481. textcolor(4+128);
  482. Write('НАЖМИТЕ Enter');
  483. readln;
  484. End;
  485. End
  486. Else
  487. Begin
  488. clrscr;
  489. textcolor(4);
  490. Writeln('Передача невозможна так как на 1 спутнике нет передатчика.');
  491. textcolor(4+128);
  492. Write('НАЖМИТЕ Enter');
  493. readln;
  494. End;
  495. End
  496. Else
  497. Begin
  498. clrscr;
  499. textcolor(4);
  500. Writeln('Вы неправильно ввели время связи. ');
  501. Writeln('Программа будет закрыта после нажатия клавищи Enter.');
  502. textcolor(4+128);
  503. Write('НАЖМИТЕ Enter');
  504. readln;
  505. End;
  506. end
  507. Else
  508. Begin
  509. clrscr;
  510. textcolor(4);
  511. Writeln('Вы неправильно ввели имя второго спутника. ');
  512. Writeln('Программа будет закрыта после нажатия клавищи Enter.');
  513. textcolor(4+128);
  514. Write('НАЖМИТЕ Enter');
  515. readln;
  516. End;
  517. end
  518. Else
  519. Begin
  520. clrscr;
  521. textcolor(4);
  522. Writeln('Вы неправильно ввели имя первого спутника. ');
  523. Writeln('Программа будет закрыта после нажатия клавищи Enter.');
  524. textcolor(4+128);
  525. Write('НАЖМИТЕ Enter');
  526. readln;
  527. End;
  528. textcolor(15);
  529. If lag=1 then
  530. Begin
  531. Writeln('Найден минимальный путь.');
  532. For i:=1 to min-1 do
  533. writeln(sp[rev[i]].name);
  534. end
  535. else
  536. Writeln('При заданных вами условиях, связь установить невозможно.');
  537. readln;
  538. end;
  539. '2':
  540. begin
  541. Close(t1);
  542. Close(t2);
  543. end;
  544. End;
  545. end;
  546. END.

Решение задачи: «Определить способы возможной связи между двумя заданными спутниками»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4. #include <conio.h>
  5.  
  6. #define MAX 10
  7.  
  8. // информация о спутнике
  9. struct sputnik
  10. {
  11.  char name[32];  //название спутника
  12.  int r;  // наличие передатчика на спутнике
  13.  int p;  // наличие приемника на спутнике
  14. };
  15.  
  16. struct vrem
  17. {
  18.  int time1;
  19.  int time2;
  20. };
  21.  
  22.  
  23. struct vrem** ti;
  24. struct sputnik* sp;
  25. int **matr;
  26. int *put;
  27. int *rev;
  28. int *gr;
  29. int a,b,ver,j,i,vr1,vr2,error, times,t;
  30. int k, kk, flag, maxi, maxj, ff, fl, min, lag;
  31. int l;
  32. char ch, c;
  33. int cnt;
  34. char b1[20], b2[20], b3[20], b4[20], b5[20], b6[20], s1[20], s2[20], name1[20], name2[20], t1[20], t2[20];
  35. char tine[20];
  36.  
  37. void sozd();
  38. void sozd2();
  39. void PoiskPut(int times, int t1, int t2);
  40. void create_arrays();
  41. void free_arrays();
  42.  
  43. int main()
  44. {
  45.  int f;
  46.  int times;
  47.  int state;
  48.  int i, j;
  49.  int i1, i2;
  50.  char c;
  51.  
  52.  f = 0;
  53.  create_arrays();
  54.  for(i = 0; i < MAX; i++)
  55.   for(j = 0; j < MAX; j++)
  56.   {
  57.     ti[i][j].time1 = -1;
  58.     ti[i][j].time2 = -1;
  59.   }
  60.  
  61.  printf("Укажите адреса двух исходных файлов. В первом - имена спутников и их характеристики(наличие или отсутствие приемника и радиостанции), а во втором приведено расписание сеансов связи спутников. Введите путь к первому файлу: ");
  62.  scanf("%s", &s1);
  63.  printf("Введите путь ко второму файлу: ");
  64.  scanf("%s", &s2);
  65.  sozd(); //чтение из первого файла
  66.  sozd2();  //чтение из второго файла
  67.  do
  68.  {
  69.   printf("МЕНЮ:\n1-поиск наименьшего пути между двумя спутниками\n2-выход из программы\n");
  70.   scanf("%c", &c);
  71.   switch(c)
  72.   {
  73.    case '1':
  74.     printf("Введите название источника сигнала(имя спутника): ");
  75.     scanf("%s", &name1);
  76.     for(j=0;j< ver;j++)
  77.      if ( !strcmp( name1, sp[j].name))
  78.        f = 1, i1 = j;
  79.     if (f == 0) printf("Вы неправильно ввели имя первого спутника.\n"); else f = 0;
  80.  
  81.     printf("Введите название приемника сигнала(имя спутника): ");
  82.     scanf("%s", &name2);
  83.     for(j=0;j< ver;j++)
  84.      if ( !strcmp( name2, sp[j].name))
  85.        f = 1, i2 = j;
  86.     if (f == 0) printf("Вы неправильно ввели имя второго спутника.\n"); else f = 0;
  87.  
  88.     printf("Введите время связи: ");
  89.     scanf("%s", &tine);
  90.     {
  91.       state = 0; i = 0;
  92.       for(j = 0; state != 2 && j < 20; j++)
  93.       {
  94.        switch(state)
  95.        {
  96.         case 0:
  97.          switch(tine[j])
  98.          {
  99.           case ':':  b3[i] = '\0'; i++; i = 0; state = 1; break;
  100.           default: b3[i] = tine[j]; i++; break;
  101.          }
  102.          break;
  103.         case 1:
  104.          switch(tine[j])
  105.          {
  106.           case '\0':
  107.            b4[i] = '\0';
  108.            state = 2;
  109.            times = 60 * atoi(b3) + atoi(b4);
  110.            if (sp[i1].r == 1)
  111.            {
  112.             if (sp[i2].p == 1)
  113.               cnt = 0, PoiskPut(times, i1, i2);
  114.             else printf("Передача невозможна так как на 2 спутнике нет приемника.\n");
  115.            }
  116.            else  printf("Передача невозможна так как на 1 спутнике нет передатчика.\n");
  117.           break;
  118.           default: b4[i] = tine[j]; i++; break;
  119.          }
  120.          break;
  121.        }
  122.      }
  123.     }
  124.     break;
  125.    case '2':
  126.     exit(0);
  127.     break;
  128.   }
  129.  } while (c != '2');
  130.  free_arrays();
  131.  return 0;
  132. }
  133.  
  134.  
  135. /*
  136. считывание файла с данными о спутниках:
  137. (название спутника) (наличие передатчика на спутнике) (наличие приемника на спутнике)
  138. */
  139. void sozd()
  140. {
  141. FILE *f;
  142. char ch;
  143. int state;
  144. int i;
  145.  
  146. i = 0;
  147. state = 0;
  148. printf("%s", s1);
  149. f = fopen(s1, "r"); printf("\n");
  150.  
  151. while((ch = fgetc(f)) != EOF )
  152. {
  153.   //printf("%d %c\n", state, ch);
  154.   switch (state)
  155.   {
  156.     case 0:
  157.      switch(ch)
  158.      {
  159.        case '\xd': case '\xa': break;
  160.        case '\x20': sp[kk].name[i] = '\0'; state = 1;  break;
  161.        default: sp[kk].name[i] = ch; i++;  break;
  162.      }
  163.      break;
  164.     case 1:
  165.      switch(ch)
  166.      {
  167.        case '\x20': break;
  168.        case '+': sp[kk].r = 1; state = 2; break;
  169.        case '-': sp[kk].r = 0; state = 2; break;
  170.        default: printf("Вы неправильно ввели информацию в 1 исходном файле.\n"); exit(0); break;
  171.      }
  172.      break;
  173.     case 2:
  174.      {
  175.       switch(ch)
  176.       {
  177.        case '\x20': break;
  178.        case '+': sp[kk].p = 1; state = 0; i = 0; kk++; break;
  179.        case '-': sp[kk].p = 0; state = 0; i = 0; kk++; break;
  180.        default: printf("Вы неправильно ввели информацию в 1 исходном файле.\n"); exit(0); break;
  181.       }
  182.      }
  183.      break;
  184.   }
  185. }
  186.  
  187. fclose(f);
  188.  
  189. for(i=0;i<kk;i++)
  190.   printf("name: %s r:%d p:%d\n", sp[i].name, sp[i].r, sp[i].p);
  191.  
  192. ver = kk;
  193.  
  194. }
  195.  
  196. /*
  197. считывание файла с данными о времени связи:
  198. (название 1 спутника) (название 2 спутника) (час начала связи):(минута)  (час окончания связи):(минута)
  199. */
  200. void sozd2()
  201. {
  202. int i1, i2;
  203. FILE *f;
  204. char ch;
  205. int state;
  206. int i;
  207. int j;
  208. int times;
  209.  
  210. i = 0;
  211. state = 0;
  212. printf("%s", s2);
  213. f = fopen(s2, "r"); printf("\n");
  214.  
  215. while((ch = fgetc(f)) != EOF )
  216. {
  217.   //printf("%d %c\n", state, ch);
  218.   switch (state)
  219.   {
  220.     case 0:
  221.      switch(ch)
  222.      {
  223.        case '\xd': case '\xa': break;
  224.        case '\x20':
  225.         b1[i] = '\0'; i = 0; state = 1;
  226.           for(j=0;j< ver;j++)
  227.             if ( !strcmp( b1, sp[j].name))
  228.               i1 = j;
  229.         break;
  230.        default: b1[i] = ch; i++;  break;
  231.      }
  232.      break;
  233.     case 1:
  234.      switch(ch)
  235.      {
  236.        case '\xd': case '\xa': break;
  237.        case '\x20': break;
  238.        default: b2[i] = ch; i++; state = 2;   break;
  239.      }
  240.      break;
  241.     case 2:
  242.      switch(ch)
  243.      {
  244.        case '\xd': case '\xa': break;
  245.        case '\x20':
  246.         b2[i] = '\0'; i = 0; state = 3;
  247.           for(j=0;j< ver;j++)
  248.             if ( !strcmp( b2, sp[j].name))
  249.               i2 = j;
  250.         break;
  251.        default: b2[i] = ch; i++;   break;
  252.      }
  253.      break;
  254.     case 3:
  255.      switch(ch)
  256.      {
  257.        case '\xd': case '\xa':  case '\x20': break;
  258.        default: b3[i] = ch; i++; state = 4;    break;
  259.      }
  260.      break;
  261.     case 4:
  262.      switch(ch)
  263.      {
  264.        case ':': b3[i] = '\0'; i = 0; state = 5; break;
  265.        case '\x20': break;
  266.        default: b3[i] = ch; i++;   break;
  267.      }
  268.      break;
  269.     case 5:
  270.      switch(ch)
  271.      {
  272.        case '\xd': case '\xa': case '\x20': break;
  273.        default: b4[i] = ch; i++; state = 6;    break;
  274.      }
  275.      break;
  276.     case 6:
  277.      switch(ch)
  278.      {
  279.        case '\xd': case '\xa': break;
  280.        case '\x20': b4[i] = '\0'; i = 0; state = 7; break;
  281.        default: b4[i] = ch; i++; break;
  282.      }
  283.      break;
  284.     case 7:
  285.      switch(ch)
  286.      {
  287.        case '\xd': case '\xa':  case '\x20': break;
  288.        default: b5[i] = ch; i++; state = 8;    break;
  289.      }
  290.      break;
  291.     case 8:
  292.      switch(ch)
  293.      {
  294.        case ':': b5[i] = '\0'; i = 0; state = 9; break;
  295.        case '\x20': break;
  296.        default: b5[i] = ch; i++;   break;
  297.      }
  298.      break;
  299.     case 9:
  300.      switch(ch)
  301.      {
  302.        case '\xd': case '\xa': case '\x20': break;
  303.        default: b6[i] = ch; i++; state = 10;    break;
  304.      }
  305.      break;
  306.     case 10:
  307.      switch(ch)
  308.      {
  309.        case '\xd': case '\xa':
  310.         b6[i] = '\0'; i = 0; state = 0;
  311.         times = 60 * atoi(b3) + atoi(b4); ti[i1][i2].time1 = times;
  312.         times = 60 * atoi(b5) + atoi(b6); ti[i1][i2].time2 = times;
  313.         //printf("%d %d %d %d \n" , atoi(b3),atoi(b4),atoi(b5),atoi(b6));
  314.         break;
  315.        case '\x20': break;
  316.        default: b6[i] = ch; i++; break;
  317.      }
  318.      break;
  319.   }
  320. }
  321.  
  322. fclose(f);
  323. }
  324.  
  325.  
  326.  
  327.  
  328.  
  329. // поиск всех путей на графе
  330. void PoiskPut(int times, int t1, int t2)
  331. {
  332.  int f;
  333.  
  334.  printf("PoiskPut: \n");
  335.  
  336.  f = 0;
  337.  gr[cnt] = t1;
  338.  cnt++;
  339.  if (t1 == t2)
  340.  {
  341.    printf("Найден путь: \n");
  342.    for(k=0;k<cnt;k++)
  343.      printf("%d ", k);
  344.    printf("\n");
  345.  }
  346.  else
  347.   for(j=0;j<ver;j++)
  348.   {
  349.     for(f=0, k=0;k<cnt;k++)
  350.     {
  351.       if (j == gr[k])
  352.        f = 1;
  353.     }
  354.     if (f == 0 && ti[t1][j].time1 != -1 && ti[t1][j].time2 != -1)
  355.       if ( ti[t1][j].time1 < times && ti[t1][j].time2 > times )
  356.        PoiskPut(times, j, t2);
  357.   }
  358.  cnt--;
  359. }
  360.  
  361. void create_arrays()
  362. {
  363.  int i;
  364.  
  365.  sp = (struct sputnik*) malloc(MAX * sizeof(struct sputnik));
  366.  rev = (int*) malloc(MAX * sizeof(int));
  367.  gr = (int*) malloc(MAX * sizeof(int));
  368.  ti = (struct vrem** ) malloc(MAX * sizeof(struct vrem*));
  369.  matr = (int**) malloc(MAX * sizeof(int*));
  370.  for(i = 0; i < MAX; i++)
  371.  {
  372.   ti[i] = (struct vrem*) malloc(MAX * sizeof(struct vrem));
  373.   matr[i] = (int*) malloc(MAX * sizeof(int));
  374.  }
  375. }
  376.  
  377. void free_arrays()
  378. {
  379.  int i;
  380.  for(i = 0; i < MAX; i++)
  381.  {
  382.   free(ti[i]);
  383.   free(matr[i]);
  384.  }
  385.  free(rev);
  386.  free(gr);
  387.  free(ti);
  388.  free(matr);
  389.  free(sp);
  390. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

8   голосов , оценка 4.375 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы