здравствуйте. не могли бы вы помочь мне со следующим заданием.
надо ввести слово или несколько слов без пробелов (например - "сотовыйтелефон") в массив, состоящий из 4х стобцов и N строк (в зависимости от длины вводимого слова). после чего поочередно переставляются столбцы, а затем сроки. при недостаточной длине ключевого слова его повторяют. в итоге должна получится шифровка.
помогите если возможно. :d
[pascal] двумерный символьный массив
Вроде написал правильный текст для создания самого массива, но не получается поменять местами строки. в чем ошибка?
код:
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
tab: matrix = (
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx'
);
st: string =
'vveditenujnoeslovo';
procedure EncodeText(const s: string;
const tab: matrix; var mx: matrix);
var
i, j, buf: integer;
begin
for i:=1 to n do
for j:=1 to n do
buf:=mx[i,j]; mx[i,j]:=mx[j,i]; mx[j,i]:=buf;
end.
код:
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
tab: matrix = (
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx'
);
st: string =
'vveditenujnoeslovo';
procedure EncodeText(const s: string;
const tab: matrix; var mx: matrix);
var
i, j, buf: integer;
begin
for i:=1 to n do
for j:=1 to n do
buf:=mx[i,j]; mx[i,j]:=mx[j,i]; mx[j,i]:=buf;
end.
Как минимум в том, что ты меняешь все значения местами по два раза (например, m[2,5] и m[5,2] меняются местами при i=5, j=2 и при i=2, j=5).
Цикл должен выглядеть примерно так:
for i:=1 to n-1 do
for j:=i+1 to n do
Цикл должен выглядеть примерно так:
for i:=1 to n-1 do
for j:=i+1 to n do
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
вот что у меня получилось:
код:
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
tab: matrix = (
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx'
);
st:string = 'vvediteslovo';
procedure EncodeText(const tab: matrix; var buf,mx: matrix);
var
i, j, : integer;
begin
for i:=1 to n+1 do
for j:=1+i to n do
buf:=mx[i,j]; mx[i,j]:=mx[j,i]; mx[j,i]:=buf;
end;
procedure print;
begin
for i:=1 to n do begin
for j:=1 to n do write(tab[i,j]:4);
writeln;
end;
end;
begin
writeln('ishodnaya'); print;
st;
writeln('rezultat'); print;
readln;
end readln (tab);
writeln(tab);
;
end.
но перед началом процедуры Print выдает ошибку Error in statement. и я не знаю что делать
если не трудно могли бы вы написать весь код программы. а то работу надо завтра сдавать, а как написать я все еще не могу понять.
код:
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
tab: matrix = (
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx',
'xxxx'
);
st:string = 'vvediteslovo';
procedure EncodeText(const tab: matrix; var buf,mx: matrix);
var
i, j, : integer;
begin
for i:=1 to n+1 do
for j:=1+i to n do
buf:=mx[i,j]; mx[i,j]:=mx[j,i]; mx[j,i]:=buf;
end;
procedure print;
begin
for i:=1 to n do begin
for j:=1 to n do write(tab[i,j]:4);
writeln;
end;
end;
begin
writeln('ishodnaya'); print;
st;
writeln('rezultat'); print;
readln;
end readln (tab);
writeln(tab);
;
end.
но перед началом процедуры Print выдает ошибку Error in statement. и я не знаю что делать

если не трудно могли бы вы написать весь код программы. а то работу надо завтра сдавать, а как написать я все еще не могу понять.
Вот это
buf:=mx[i,j]; mx[i,j]:=mx[j,i]; mx[j,i]:=buf;
обрамить бегином и эндом. Это все целиком в цикле выполняется
Во-вторых, зачем в процедуру передавать константу и переменную buf, если она вполне может быть внутренней переменной? Достаточно procedure EncodeText(var mx: matrix);
более того, процедура EncodeText у тебя нигде не используется.
А ошибка возникает в строке st; - я вообще не понимаю, что тут имелось в виду
buf:=mx[i,j]; mx[i,j]:=mx[j,i]; mx[j,i]:=buf;
обрамить бегином и эндом. Это все целиком в цикле выполняется
Во-вторых, зачем в процедуру передавать константу и переменную buf, если она вполне может быть внутренней переменной? Достаточно procedure EncodeText(var mx: matrix);
более того, процедура EncodeText у тебя нигде не используется.
А ошибка возникает в строке st; - я вообще не понимаю, что тут имелось в виду
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.