Перевод с Pascal на С

Модераторы: Hawk, Romeo, Absurd, DeeJayC, WinMain

Ответить
aliska
Сообщения: 2
Зарегистрирован: 04 июн 2015, 21:56

Помогите перевести программу с Pascal на С
Вот код программы на языке Pascal:

Код: Выделить всё

program sample;
uses  utils, System;
type
  TDate = record
    day : integer;
    month: integer;
    year : integer;
  end;
  TFIO = record
    Name : string;
    Family : string;
    Additional : string;
  end;
  TATSInfo = record
    ATStype: string;
    ATSphoneNumber: integer;
    ATSfio: TFIO;
    ATSadress: string;
    ATStarif: string;
    ATScost: integer;
    ATSlastPay: TDate;
  end;

var
  i, j, N : integer;
  ATSList : array of TATSInfo;
  Hist : array of integer;
  ATSUniq : array of string;
  Abonent1, Abonent2, tmpAbonent : TATSInfo;
  typeAction : integer;
  phoneNumber, currentNumber : integer;
  ATSName, currentATS : string;
  d : DateTime;
begin
  writeln('Введите количество записей');
  readln(N);
  
  SetLength(ATSList, N);
  for i := 0 to N - 1 do
  begin
    with ATSList[i] do
    begin
      writeln('Введите название АТС');
      readln(ATStype);
      writeln('Введите номер телефона абонента');
      readln(ATSPhoneNumber);
      writeln('Введите фамилию, имя и отчество абонента');
      writeln;
      with ATSfio do
      begin
        writeln('Введите имя');
        readln(name);
        writeln('Введите фамилию');
        readln(Family);
        writeln('Введите отчество');
        readln(Additional);
      end;
      writeln('Введите адрес абонента');
      readln(ATSadress);
      writeln('Введите название тарифа');
      readln(ATStarif);
      writeln('Введите размер абонентской платы');
      readln(ATScost);
      writeln('Введите дату последнего платежа');
      writeln;
      with ATSlastPay do
      begin
        writeln('Введите число');
        readln(day);
        writeln('Введите месяц');
        readln(month);
        writeln('Введите год');
        readln(year);
      end;
    end;
  end;
  
  writeln;
  writeln('Выберите действие');
  writeln('1 - Найти абонента по номеру телефона');
  writeln('2 - Упорядочить информацию по ФИО абонента');
  writeln('3 - Вывод абонентов определенной АТС');
  writeln('4 - Вывод абонентов должников текущего месяца в формате dd:mm:yy');
  writeln('5 - Вывод процентного соотношения абонентов различных АТС');
  writeln('0 - Выход');
  writeln;
  readln(typeAction);
  
  case typeAction of
    1:
      begin
        writeln('Введите номер телефона абонента');
        readln(phoneNumber);
        writeln;
        for i := 0 to N - 1 do
        begin
          with ATSList[i] do
          begin
            currentNumber := ATSPhoneNumber;
            if (currentNumber = phoneNumber) then
            begin
              
              writeln(ATStype, ' ', ATSfio.Name, ' ', ATSfio.Family, ' ', ATSfio.Additional, ' ', ATSadress, ' ', ATStarif, ' ', ATScost, ' / ', ATSlastPay.day, ' ', ATSlastPay.month, ' ', ATSlastPay.year );
              break;
            end;
          end;
        end;
      end;
    2:
      begin
        for i := 0 to N - 2 do
        begin
          for j := 0 to N - i - 1 do
          begin
            Abonent1 := ATSList[i];
            Abonent2 := ATSList[i + 1];          
            if (Abonent1.ATSfio.Family[1] > Abonent2.ATSfio.Family[1]) then
            begin
              tmpAbonent := Abonent1;
              Abonent1 := Abonent2;
              Abonent2 := tmpAbonent;
            end;  
            ATSList[i] := Abonent1;
            ATSList[i + 1] := Abonent2;
          end;
        end;
        
        writeln('Выберите действие');
        writeln('1 - Найти абонента по номеру телефона');
        writeln('2 - Упорядочить информацию по ФИО абонента');
        writeln('3 - Вывод абонентов определенной АТС');
        writeln('4 - Вывод абонентов должников текущего месяца в формате dd:mm:yy');
        writeln('5 - Вывод процентного соотношения абонентов различных АТС');
        writeln('0 - Выход');
        writeln; 
        for i:=0 to N - 1 do 
        begin
          with ATSList[i] do
          begin           
            writeln(ATStype, ' ', ATSPhoneNumber, ' ', ATSfio, ' ', ATSadress, ' ', ATStarif, ' ', ATScost, ' / ', ATSlastPay.day, ' ', ATSlastPay.month, ' ', ATSlastPay.year );
          end;
        end;
      end;
aliska
Сообщения: 2
Зарегистрирован: 04 июн 2015, 21:56

Код: Выделить всё

3:
      begin
        writeln('Введите название АТС');
        readln(ATSName); 
        writeln;
        writeln('Выберите действие');
        writeln('1 - Найти абонента по номеру телефона');
        writeln('2 - Упорядочить информацию по ФИО абонента');
        writeln('3 - Вывод абонентов определенной АТС');
        writeln('4 - Вывод абонентов должников текущего месяца в формате dd:mm:yy');
        writeln('5 - Вывод процентного соотношения абонентов различных АТС');
        writeln('0 - Выход');
        writeln;
        for i := 0 to N - 1 do
        begin
          with ATSList[i] do
          begin
            currentATS := ATSName;
            if (currentATS = ATSName) then
            begin
              writeln(ATSPhoneNumber, ' ',  ATSfio.Name, ' ', ATSfio.Family, ' ', ATSfio.Additional, ' ', ATSadress, ' ', ATStarif, ' ', ATScost, ' / ', ATSlastPay.day, ' ', ATSlastPay.month, ' ', ATSlastPay.year );
              break;
            end;
          end;
        end;     
      end;
    4:
      begin
        writeln('Введите название АТС');
        readln(ATSName); 
        writeln;
        writeln('Выберите действие');
        writeln('1 - Найти абонента по номеру телефона');
        writeln('2 - Упорядочить информацию по ФИО абонента');
        writeln('3 - Вывод абонентов определенной АТС');
        writeln('4 - Вывод абонентов должников текущего месяца в формате dd:mm:yy');
        writeln('5 - Вывод процентного соотношения абонентов различных АТС');
        writeln('0 - Выход');
        writeln;
        d := DateTime.Today;
        for i := 0 to N - 1 do
        begin
          with ATSList[i] do
          begin 
            with ATSlastPay do
            begin              
              if d.Month >= Month then
              begin
                if d.Day > 25 then
                begin
                  writeln(ATStype, ' ', ATSPhoneNumber, ' ',  ATSfio.Name, ' ', ATSfio.Family, ' ', ATSfio.Additional, ' ', ATSadress, ' ', ATStarif, ' ', ATScost, ' / ', ATSlastPay.day, ' ', ATSlastPay.month, ' ', ATSlastPay.year );
                end;
              end;              
            end;
          end;
        end;
      end;
    5:
      begin      
        SetLength(Hist, N);
        SetLength(ATSUniq, N);        
        for i := 0 to N - 1 do
        begin
          with ATSList[i] do
          begin
            currentATS := ATStype;
            for j := 0 to N - 1 do
            begin
              
            end;
          end;
        end;
      end;
    0:
      begin
        halt;
      end;
  else
    begin
      halt;
    end;
  end;
  
  ATSList := nil;
end.
Аватара пользователя
Romeo
Сообщения: 3126
Зарегистрирован: 02 мар 2004, 17:25
Откуда: Крым, Севастополь
Контактная информация:

Помогите или переведите?
Entites should not be multiplied beyond necessity @ William Occam
---
Для выделения С++ кода используйте конструкцию [ code=cpp ] Код [ /code ] (без пробелов)
---
Сообщение "Спасибо" малоинформативно. Благодарность правильнее высказать, воспользовавшись кнопкой "Reputation" в виде звёздочки, расположенной в левом нижнем углу рамки сообщения.
Аватара пользователя
somewhere
Сообщения: 1858
Зарегистрирован: 31 авг 2006, 17:14
Откуда: 71 RUS
Контактная информация:

Вообще подобного рода переводы, синтаксически, на 90% можно выполнить автозаменой. Например:
"begin" - "{"
"end;" - "}"
"writeln" - "printf"
":=" - "="
и так далее... немного посложнее с циклами.
It's a long way to the top if you wanna rock'n'roll
Ответить