Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 12.12.2019, 15:53   #1
RetroRoad
Новичок
Джуниор
 
Регистрация: 12.12.2019
Сообщений: 4
Вопрос Нужна помощь в переводе кода с Pascal на C++

Есть код программы на Pascal про расписание поездов, которая просит пользователя ввести пункт назначения, пометку (СВ, ПВ либо КСВ), часы и минуты отправления.
Собственно, сам код:
Код:
type      dann = record
          pun_nazn: string;
          pometki: string;
          chas: byte;
          min: byte;
          end;
          mas = array [1..10] of dann;
var k,v,i,n,nmenu,nn: byte; elect: mas;
{------------ВВОД--------------}
Procedure readd (var e: mas; t: word);
var n:word;
begin 
writeln('Введите данные о поездах в таком порядке:');
 writeln('Пункт назначения | Пометки (СВ/ПВ/КСВ) | Час отправления (0-23) | Минуты отправления');
 for n:=1 to t do begin
 readln(e[n].pun_nazn); 
 readln(e[n].pometki); 
 readln(e[n].chas); 
 readln(e[n].min);
 end; end;
 
{------------корректировка--------------} 
 
 Procedure korr (var e:mas; t:word); {массив записей и кол-во зап }
 var n, ns,f:word; 
 begin
 for n:=1 to t do
 writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
 f:=1;
 while f=1 do
 begin
 writeln('Введите номер строки, которую хотите отредактировать:');
 readln(ns);
 writeln('Через ENTER напишите заново Пункт назначения | Пометки (СВ/ПВ/КСВ) | Час отправления (0-23) | Минуты отправления для этой записи');
readln(e[ns].pun_nazn); 
 readln(e[ns].pometki); 
 readln(e[ns].chas); 
 readln(e[ns].min);
 writeln('Измененное расписание:');
 for n:=1 to t do
 writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
 writeln('Есть еще строки, подлежащие редактированию? Если да, введите "1", нет - "0"');
 readln(f);
 end;
 end;
{---------дополнение-----------}
Function dopol (var e:mas; t:word):word;
var i, n, k, l: word; f:dann; b: boolean;
begin
writeln('Введите количество поездов:');
readln (k);
writeln('Пункт назначения | Пометки (СВ/ПВ/КСВ) | Час отправления (0-23) | Минуты отправления');
 l:=t+k;
 for n:=t+1 to l do begin
 readln(e[n].pun_nazn); 
 readln(e[n].pometki); 
 readln(e[n].chas); 
 readln(e[n].min);
 end; 
 dopol:=l;
 end;
{---------сортировка по станции---------}
Function match1 (s1, s2 : string) : boolean;
var i, n : integer; {n - длина наименьшей строки}
begin
      s1 := UpperCase(s1);
      s2 := UpperCase(s2);
 if length(s1) > length(s2) then n := length(s2)
          else n := length(s1); {наименьший}
 i := 1;
 while (i <= n) and (s1[i] = s2[i]) do inc(i); {сравниваем пока и если начала одинаковые}
 if i = n + 1 then 
    begin
  if (length(s1) = length(s2)) 
  then match1 := true {Фамилии абсолютно совпадают}
      else if (length(s1) < length(s2)) 
            then match1 := true {"Петров" шёл перед "Петрова"}
  else match1 := false;
 end
 else begin
  if ord(s1[i]) < ord(s2[i]) then match1 := true else match1 := false;
 end;
end;
{---------------}
Procedure sort_s (var e:mas; t:word);
var i, n, j: word; f:dann; b: boolean;
begin
for i:=1 to t-1 do
     for j:=1 to t-i do
     begin
         b := match1 (e[j].pun_nazn, e[j+1].pun_nazn);
         if b = false then
         begin
              f:=e[j];
              e[j]:=e[j+1];
              e[j+1]:=f;
         end;
     end; 
     end;
{-------сортировка по времени-------}
Procedure sort_v (var e:mas; t:word);
var i, min, j, nom: word; f:dann; b: boolean;
begin
for i:=1 to t-1 do
begin
f:=e[i]; nom:=i;
for j:=i+1 to t do
begin
if (e[nom].chas>e[j].chas) then nom:=j;
end;
if (nom<>i) then
begin
e[i]:=e[nom];
e[nom]:=f;
end;
end;
 
for i:=1 to t-1 do
begin
f:=e[i]; nom:=i;
for j:=i+1 to t do
begin
if (e[nom].chas=e[j].chas) and (e[nom].min>e[j].min) then nom:=j;
end;
if (nom<>i) then
begin
e[i]:=e[nom];
e[nom]:=f;
end;
end;
end;
{----------инф о поездах после введенного времени------------}
Procedure inf_v (var e: mas; t:word);
var i, m, h: word;
begin
writeln('Введите час отправления и минуты:');
readln(h, m);
for i:=1 to t do
if (e[i].chas = h) and (e[i].min >m) or (e[i].chas > h) then
writeln(i,'-',e[i].pun_nazn,' ', e[i].pometki,' ', e[i].chas,' ', e[i].min);
end;
{----вывод---}     
Procedure vv (var e: mas; t:word);
var n: word;
begin
for n:=1 to t do
writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
end;
{----запись в файл----}
Procedure wfile (var e: mas; t:word);
var n: word; f1:text;
begin
assign(f1,'d:\trains.txt'); rewrite(f1);
for n:=1 to t do
//writeln(n,'-',e[n].pun_nazn,' ', e[n].pometki,' ', e[n].chas,' ', e[n].min);
writeln(f1,n);
writeln(f1,e[n].pun_nazn);
writeln(f1,e[n].pometki);
writeln(f1,e[n].chas);
writeln(f1,e[n].min);
end;
{------------сама программа--------}
  begin
  n:=1;
     writeln       ('____________________________');
     writeln       ('|           MENU           |');
     writeln       ('| 1) Ввод данных           |');
     writeln       ('| 2) Вывод всего расписания|');
     writeln       ('| 3) Корректировка данных  |');
     writeln       ('| 4) Дополнение расписания |');
     writeln       ('| 5) Сортировка по         |');
     writeln       ('|   станции назначения     |');
     writeln       ('| 6) Сортировка по         |');
     writeln       ('|   времени отправления    |');
     writeln       ('| 7) Вывод информации      |');
     writeln       ('|   о поездах, отходящих   |');
     writeln       ('| после введенного времени |');
     writeln       ('| 8) Добавление в файл     |');
     writeln       ('| 0) Выход                 |');
     writeln       ('____________________________');
     
     while n>0 do
  begin
     writeln ('Выберите пункт меню:');
     
     readln  (nmenu);
     case nmenu of
       1: begin writeln('Введите количество поездов в расписании (от 1 до 10):'); readln(n); readd(elect,n); end;
       2: vv (elect, n);
       3: korr(elect,n);
       4: n:=dopol (elect, n);
       5: sort_s (elect, n);
       6: sort_v (elect, n);
       7: inf_v (elect, n);
       8: wfile (elect, n);
       0: exit;
     end;
end;
 end.
Выводится менюшка, пользователь вводит цифру (выбирает опцию), и выполняется соответствующее действие. Единственное, что не работает, это запись в файл, сам файл создаётся (если его нет), но он пустой. Скорее всего, потому что он текстовый, а данные вбиваются не только символьного типа. Кроме текстовых больше ни с какими файлами не работал, поэтому в таком я вообще чайник. Но это второстепенно, остальное всё работает, надо только перевести на другой язык (с C++ пока малознаком, соответственно, написать программу сразу на нём для меня проблематично).
Заранее спасибо всем, кто отзовётся.
RetroRoad вне форума Ответить с цитированием
Старый 12.12.2019, 16:52   #2
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

А нужен оконный вариант или консольный ?
digitalis вне форума Ответить с цитированием
Старый 12.12.2019, 17:16   #3
RetroRoad
Новичок
Джуниор
 
Регистрация: 12.12.2019
Сообщений: 4
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
А нужен оконный вариант или консольный ?
Вообще писал и запускал на PascalABC.NET и там программа работает в консоли снизу, но нужно, чтобы работала и опция 8 "вывод в файл". Потом перевод на C++ и всё.
RetroRoad вне форума Ответить с цитированием
Старый 12.12.2019, 20:31   #4
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Это не добавило ясности.
Консольный - это как в ДОС, символами по черному экрану.
Оконный - нормальное виндовое окно, ввод в Edit, вывод в Memo, и никаких тебе cin , cout. А в файл по любому вывести можно.
Тогда, глядишь, и откликнутся.
digitalis вне форума Ответить с цитированием
Старый 12.12.2019, 22:14   #5
RetroRoad
Новичок
Джуниор
 
Регистрация: 12.12.2019
Сообщений: 4
По умолчанию

...

Последний раз редактировалось RetroRoad; 13.12.2019 в 15:57. Причина: Забыл процитировать сообщение выше, а удалить нельзя, вариант с цитатой ниже.
RetroRoad вне форума Ответить с цитированием
Старый 12.12.2019, 22:16   #6
RetroRoad
Новичок
Джуниор
 
Регистрация: 12.12.2019
Сообщений: 4
По умолчанию

Цитата:
Сообщение от digitalis Посмотреть сообщение
Это не добавило ясности.
Консольный - это как в ДОС, символами по черному экрану.
Оконный - нормальное виндовое окно, ввод в Edit, вывод в Memo, и никаких тебе cin , cout. А в файл по любому вывести можно.
Тогда, глядишь, и откликнутся.
Извините, не понял сначала. Обычное консольное приложение, ввод-вывод через cin-cout.
RetroRoad вне форума Ответить с цитированием
Старый 13.12.2019, 11:24   #7
digitalis
Старожил
 
Аватар для digitalis
 
Регистрация: 04.02.2011
Сообщений: 4,546
По умолчанию

Одно из сообщений можно убрать, я и с первого раза понял. Тискаем ПРАВКА, убираем текст, вставляем несколько точек ....
Вот теперь - правильно

Последний раз редактировалось digitalis; 13.12.2019 в 18:34.
digitalis вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь в переводе с Паскаля на СИ/C++ USovA Помощь студентам 2 21.10.2018 18:39
Нужна помощь в переводе кода с CИ на C# Uncontrol21 C# (си шарп) 0 20.05.2017 18:50
Нужна помощь в переводе скрипта на C# stationfuk C# (си шарп) 0 09.11.2013 23:06
Ошибка в переводе кода с Turbo Pascal на Fortran abit-2010 Помощь студентам 0 05.07.2011 22:55
Очень нужна помощь в переводе символов в ASCII и обратно !!!~VivO~!!! Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 05.05.2008 10:47