Ниже приведён код на паскале, который я хочу переписать под 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]
Ну в общем твой C++ не совсем идентичный порт того что написано на паскале, но думаю что основной проёб это то что ты забыл что в плюсах массивы надо забивать начальными значаниями перед использованием, потому что там не будет как в паскале значение по умолчанию, а будет мусор который был в этом участке памяти (это я про массив "can"). 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; } 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; }