Загрузка...

Pascal code in C++

Thread in C/C++ created by goodid Mar 9, 2022. 268 views

  1. goodid
    goodid Topic starter Mar 9, 2022 0 Mar 15, 2019
    Ниже приведён код на паскале, который я хочу переписать под C++.
    На паскале в writeln(code); выводится:
    1 3 7 23
    Но на C++ получается это:
    1 3 7 15 31 63
    Не могу понять в чём проблема и как это исправить.
    Буду признателен если поможете разобраться в проблеме.

    Паскаль:
    ===============================
    [/B]program zadanie;
    const
    magic: array [1..3, 1..3] of byte =
    ((1, 2, 4),
    (2, 8, 16),
    (4, 16, 32));
    var
    n, code: longint;
    can: array [1..3, 1..3] of boolean;
    total: array [0..1, 1..3, 0..63] of real;
    answer: real;
    filein,fileout:string;
    procedure readdata;
    var
    s: string;
    begin
    readln(n);
    for var u := 1 to 3 do
    begin
    readln(s);
    for var p := 1 to 3 do
    if upcase(s[p]) = 'Y' then
    begin
    can[u, p] := true;
    can[u, p] := true;
    end
    end
    end;
    procedure findcode;
    begin
    code := 0;
    for var u := 1 to 3 do
    for var p := u to 3 do
    if can[u, p] then
    begin
    code := code + magic[u, p];
    writeln(code);
    end
    end;
    begin
    writeln('Введите путь, откуда будут браться данные:');
    readln(filein);
    writeln('Введите путь, куда будут сохраняться данные:');
    readln(fileout);
    writeln('Данные записаны в ведённый Вами файл!');
    assign(input,filein);
    assign(output,fileout);
    readdata;
    findcode;
    end.[B]

    ===============================


    C++:

    ===============================
    [/B]using namespace std;[/B]

    int main()
    {
    setlocale(LC_ALL, "Russian");
    string filein, fileout;
    unsigned char magic[3][3] = {
    {1, 2, 4},
    {2, 8, 16},
    {4, 16, 32}};
    string num[100];
    int n;
    int u;
    int p;
    //float answer;
    //float total[2][3][64];
    int can[3][3];
    string a[3][3];

    cout << "Введите путь, откуда будут браться данные" << endl;
    cin >> filein;
    cout << "Введите путь, куда будут сохраняться данные" << endl;
    cin >> fileout;
    string s;
    ifstream input(filein, ios::in);
    string firstline;
    getline(input, firstline);
    n = stoi(firstline);
    while (!input.eof()) {
    string temp;
    getline(input, temp);
    s += temp;
    };
    input.close();

    int l = 0;
    for (u = 0; u < 3; u++) {
    for (p = 0; p < 3; p++) {
    a[u][p] = s[l];
    if (a[u][p] == "Y") {
    can[u][p] = true;

    }
    s[l++];
    }
    }
    long code = 0;
    for (int u = 0; u < 3; u++) {
    for (int p = u; p < 3; p++) {
    if (can[u][p]) {
    code += magic[u][p];
    cout << code << "\n";
    }
    }
    }
    system("pause");

    return 0;
    }
    [B]

    [B]===============================[/B]

     
  2. vtlstolyarov
    vtlstolyarov Mar 9, 2022 468 Jan 8, 2022
    Покажи какие данные вводишь с клавиатуры
     
  3. goodid
    goodid Topic starter Mar 9, 2022 0 Mar 15, 2019
    Забыл про данные)[IMG]
     
  4. vtlstolyarov
    Ну в общем твой C++ не совсем идентичный порт того что написано на паскале, но думаю что основной проёб это то что ты забыл что в плюсах массивы надо забивать начальными значаниями перед использованием, потому что там не будет как в паскале значение по умолчанию, а будет мусор который был в этом участке памяти (это я про массив "can").

    C
    using namespace std;
    #include <iostream>
    #include <string>

    int main()
    {
    unsigned char magic[3][3] = {
    {1, 2, 4},
    {2, 8, 16},
    {4, 16, 32}
    };

    bool can[3][3];
    for (int u = 0; u < 3; u++) {
    string s;
    getline(cin, s);
    for (int p = 0; p < 3; p++) {
    can[u][p] = (s[p] == 'Y');
    }
    }

    long code = 0;
    for (int u = 0; u < 3; u++) {
    for (int p = u; p < 3; p++) {
    if (can[u][p]) {
    code += magic[u][p];
    cout << code << "\n";
    }
    }
    }

    return 0;
    }
     
    1. goodid Topic starter
      vtlstolyarov, Действительно, всё работает) Спасибо тебе большое!
Top
Loading...