[pascal] двумерный символьный массив

Ответить
AsteroTh
Сообщения: 3
Зарегистрирован: 04 май 2007, 08:38

здравствуйте. не могли бы вы помочь мне со следующим заданием.

надо ввести слово или несколько слов без пробелов (например - "сотовыйтелефон") в массив, состоящий из 4х стобцов и N строк (в зависимости от длины вводимого слова). после чего поочередно переставляются столбцы, а затем сроки. при недостаточной длине ключевого слова его повторяют. в итоге должна получится шифровка.

помогите если возможно. :d
AsteroTh
Сообщения: 3
Зарегистрирован: 04 май 2007, 08:38

Вроде написал правильный текст для создания самого массива, но не получается поменять местами строки. в чем ошибка?

код:
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.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

Как минимум в том, что ты меняешь все значения местами по два раза (например, 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
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
AsteroTh
Сообщения: 3
Зарегистрирован: 04 май 2007, 08:38

вот что у меня получилось:

код:
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. и я не знаю что делать :(

если не трудно могли бы вы написать весь код программы. а то работу надо завтра сдавать, а как написать я все еще не могу понять.
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

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