1. Заголовок темы должен быть информативным. В противном случае тема удаляется ... 2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения. 3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали! 4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора). 5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM! 6. Одна тема - один вопрос (задача) 7.Проверяйте программы перед тем, как разместить их на форуме!!! 8.Спрашивайте и отвечайте четко и по существу!!!
type
DataArray=array[1..5000] ofstring;
DataK=array[1..5000] of integer;
var
item: DataArray;{массив для сортировки}
k: DataK;
s:string; {временная переменная, предназначена для передачи в массив, или ссчитывания из него}
ch,ch2:char;
count,i,j,m:integer;
fout:text;{файл для вывода объявляем текстовым, так как заносим в него строки}
fin:fileof char;{файл для ввода с типом char, чтобы процедура чтения read() получала по одному символу}procedure Inser(var item: DataArray; var k: DataK; count:integer); {сортировка}var
i, j, h: integer;
x: string;
beginfor i := 2to count dobegin
x := item[i];
h := k[i];
j := i-1;
while (x<item[j]) and (j>0) dobegin
item[j+1] := item[j];
k[j+1] := k[j];
j := j-1;
end;
item[j+1] := x;
k[j+1]:= h;
end;
end;
procedure Convert(var s:string); {ANSI -> ASCII}var i:integer;
beginfor i:=1to length(s) doif ord(s[i]) in [192..207] then s[i]:=chr(ord(s[i])-32) {Буквы: А..П переводим в ASCII-код меняя на: а..п}elseif ord(s[i]) in [208..223] then s[i]:=chr(ord(s[i])+16) {Буквы: Р..Я переводим в ASCII-код меняя на: р..я}elseif ord(s[i]) in [224..239] then s[i]:=chr(ord(s[i])-64) {Буквы: а..п переводим в ASCII-код }elseif ord(s[i]) in [240..255] then s[i]:=chr(ord(s[i])-16) {Буквы: р..я переводим в ASCII-код }elseif ord(s[i])=168then s[i]:=chr(ord(241)) {Букву Ё переводим в ASCII-код и меняем на: ё}elseif ord(s[i])=184then s[i]:=chr(ord(241)); {Букву ё переводим в ASCII-код}end;
procedure UnConvert(var a:string);{ASCII->ANSI}var i:integer;
beginfor i:=1to length(a) doif ord(a[i]) in [128..175] then a[i]:=chr(ord(a[i])+64)
elseif ord(a[i]) in [224..239] then a[i]:=chr(ord(a[i])+16)
elseif ord(a[i])=240then a[i]:=chr(ord(168))
elseif ord(a[i])=241then a[i]:=chr(ord(184));
end;
{начало основной программы}begin
Assign(fin,'1.txt'); {ставим в соответствие файловым переменным имена файлов}
Assign(fout,'2.txt');
Reset(fin); {открываем fin для чтения, а fout для записи}
Rewrite(fout);
i:=1;
repeat{общий цикл, работает пока не дойдем до конца файла}
s:='';{очищаем переменную строки, для записи нового слова}repeat
read(fin,ch);{cчитываем символ из файла}if ord(ch)=45thenbeginif s<>''then
s:=s+ch;
end;
if (ch<>'.') and (ord(ch)<>32) and (ch<>',') and (ch<>'"') and (ord(ch)<>45)
and (ch<>'?') and (ch<>'!') and (ch<>':') and (ord(ch)<>10) and (ord(ch)<>13) then s:=s+ch;
until (ord(ch)=32) or (ord(ch)=10) or (EOF(fin));
if s<>''thenbegin
Convert(s);
item[i]:=s;
k[i]:=i;
count:=i;
i:=i+1;
end;
until EOF(fin);{если достигнут конец файла - выходим}
Inser(item,k,count);
for i:=1to count dobegin
s:=item[i];
m:=k[i];
UnConvert(s);
write(fout, m,' '+s+chr(10));
end;
Close(fout);{закрываем оба файла}
Close(fin);
end.
Каким компилятором пользуешься ты, и каким - твой друг? 5000 строк по 256 символов = 1250 Кбайт, больше мегабайта, кто ж тебе на 16-битном компиляторе (если уж пришел в этот раздел - значит, у тебя Турбо-Паскаль, правда?) даст выделить под массив столько места? У тебя на ВСЕ данные (и массив строк, и массив целых, и все вспомогательные переменные) только 64 Кбайт. Либо уменьшай размер строки, либо уменьшай количество строк. Ну, третий вариант - переходить на более современный компилятор.
А вообще выделять память под 5000 строк - это не хорошо. Все равно вряд ли ты столько прочитаешь из файла. Лучше сделать массив указателей на строки - прочел строку, выделил для нее место (через New) и храни в "куче" данные. А "куча" в 10 раз больше по объему, 640К. Чувствуешь разницу?