Помощь - Поиск - Пользователи - Календарь
Полная версия: Перевести с Pascal на С++
Форум «Всё о Паскале» > Современный Паскаль и другие языки > Ада и другие языки
loki
Дана такая задача
Необходимо зашифровать текст из 121 буквы, его необходимо записать в квадратную матрицу порядка 11 по стокам, начиная с центра (т. е. с элемента, имеющего индексы 6, 6), а затем по часовой стрелке все остальные символы.
на паскале наваял, а на с++ перевести не могу помодите если не сложно

uses crt;
function incr(var X: integer): integer;
begin
incr := X; inc(X);
end;

const
n = 11;
var
n2,i,j,k,w : integer;
a: array[1 .. n, 1 .. n] of char;
text,vihod:string[n*n];
begin
clrscr;
writeln('Vvedite text');
readln(Text);
if length(text)<n*n then
for i:=length(text) to n*n do text[i]:='0';
for i:=1 to n do
for j:=1 to n do
a[i,j]:=Text[(i-1)*n+j];
w := 1; n2 := n div 2;

if n mod 2 = 1 then vihod[incr(w)]:=a[n2 + 1, n2 + 1];

for k := 0 to n2 - 1 do begin

for j := n2-k+1 to n-n2+k+1 do vihod[incr(w)]:=a[n2-k,j]{ := incr(w)};
for i := n2-k+1 to n-n2+k+1 do vihod[incr(w)]:=a[i,n-n2+k+1]{ := incr(w)};
for j := n-n2+k downto n2-k do vihod[incr(w)]:=a[n-n2+k+1,j]{ := incr(w)};
for i := n-n2+k downto n2-k do vihod[incr(w)]:=a[i,n2-k]{ := incr(w)};

end;

for i := 1 to n do begin
for j := 1 to n do write(a[i,j]:4);
writeln;
end;
vihod[0]:=chr(n*n);
writeln(vihod);
readkey;
end.

volvo
Цитата
на паскале наваял
Долго ваял? Вот отсюда взять не было проще: Работа с матрицами ? Тем более, что та же ошибка, которая присутствовала там, присутствует и у тебя: последний символ строки заменяется на '0', чтобы убрать ошибку, надо
  for i:=length(text) + 1 to n*n do text[i]:='0'; { <- добавить +1 }


А на Сях это выглядит так:
#include <iostream>
#include <iomanip>
using namespace std;

int main() {
const int n = 11;

char a[n][n];
for(int i = 0; i < n; i++)
for(int j = 0; j < n; j++) a[i][j] = '0';
char text[n*n + 1], vihod[n*n + 1];

cout << "Vvedite text: ";
cin.getline(text, n * n);

char *pa = (char *)a;
for(char *ptext = text; *ptext; ) {
*pa++ = *ptext++;
}

int w = 0, n2 = n / 2;
if(n % 2) vihod[w++] = a[n2][n2];
for(int k = 0; k < n2; k++) {
for(int j = n2-k+1; j <= n-n2+k+1; j++) vihod[w++]=a[n2-k-1][j - 1];
for(int i = n2-k+1; i <= n-n2+k+1; i++) vihod[w++]=a[i - 1][n-n2+k];
for(int j = n-n2+k; j >= n2-k; j--) vihod[w++]=a[n-n2+k][j - 1];
for(int i = n-n2+k; i >= n2-k; i--) vihod[w++]=a[i - 1][n2-k-1];
}
for(int i = 0; i < n; i++) {
for(int j = 0; j < n; j++) cout << setw(4) << a[i][j];
cout << endl;
}
vihod[n*n] = '\0';
cout << vihod << endl;
return 0;
}
loki
благодарю! smile.gif smile.gif smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.