IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code], либо быть опубликованы на нашем PasteBin в режиме вечного хранения.
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

 
 Ответить  Открыть новую тему 
> Нужна помощь!, Помогите пожалуйста...
сообщение
Сообщение #1


Новичок
*

Группа: Пользователи
Сообщений: 15
Пол: Мужской

Репутация: -  0  +


Почему не работает в данной программе строка
DataArray=array[1..5000] of string;
У моего друга работает а у меня нет???Почему?

type
DataArray=array[1..5000] of string;
DataK=array[1..5000] of integer;
var
item: DataArray;{массив для сортировки}
k: DataK;
s:string; {временная переменная, предназначена для передачи в массив, или ссчитывания из него}
ch,ch2:char;
count,i,j,m:integer;
fout:text;{файл для вывода объявляем текстовым, так как заносим в него строки}
fin:file of char;{файл для ввода с типом char, чтобы процедура чтения read() получала по одному символу}

procedure Inser(var item: DataArray; var k: DataK; count:integer); {сортировка}
var
i, j, h: integer;
x: string;
begin
for i := 2 to count do
begin
x := item[i];
h := k[i];
j := i-1;
while (x<item[j]) and (j>0) do
begin
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;
begin
for i:=1 to length(s) do
if ord(s[i]) in [192..207] then s[i]:=chr(ord(s[i])-32) {Буквы: А..П переводим в ASCII-код меняя на: а..п}
else if ord(s[i]) in [208..223] then s[i]:=chr(ord(s[i])+16) {Буквы: Р..Я переводим в ASCII-код меняя на: р..я}
else if ord(s[i]) in [224..239] then s[i]:=chr(ord(s[i])-64) {Буквы: а..п переводим в ASCII-код }
else if ord(s[i]) in [240..255] then s[i]:=chr(ord(s[i])-16) {Буквы: р..я переводим в ASCII-код }
else if ord(s[i])=168 then s[i]:=chr(ord(241)) {Букву Ё переводим в ASCII-код и меняем на: ё}
else if ord(s[i])=184 then s[i]:=chr(ord(241)); {Букву ё переводим в ASCII-код}
end;

procedure UnConvert(var a:string);{ASCII->ANSI}
var i:integer;
begin
for i:=1 to length(a) do
if ord(a[i]) in [128..175] then a[i]:=chr(ord(a[i])+64)
else if ord(a[i]) in [224..239] then a[i]:=chr(ord(a[i])+16)
else if ord(a[i])=240 then a[i]:=chr(ord(168))
else if ord(a[i])=241 then 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)=45 then
begin
if 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<>'' then
begin
Convert(s);
item[i]:=s;
k[i]:=i;
count:=i;
i:=i+1;
end;
until EOF(fin);{если достигнут конец файла - выходим}

Inser(item,k,count);
for i:=1 to count do
begin
s:=item[i];
m:=k[i];
UnConvert(s);
write(fout, m,' '+s+chr(10));
end;

Close(fout);{закрываем оба файла}
Close(fin);
end.

 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
У моего друга работает а у меня нет???Почему?
Каким компилятором пользуешься ты, и каким - твой друг? 5000 строк по 256 символов = 1250 Кбайт, больше мегабайта, кто ж тебе на 16-битном компиляторе (если уж пришел в этот раздел - значит, у тебя Турбо-Паскаль, правда?) даст выделить под массив столько места? У тебя на ВСЕ данные (и массив строк, и массив целых, и все вспомогательные переменные) только 64 Кбайт. Либо уменьшай размер строки, либо уменьшай количество строк. Ну, третий вариант - переходить на более современный компилятор.

А вообще выделять память под 5000 строк - это не хорошо. Все равно вряд ли ты столько прочитаешь из файла. Лучше сделать массив указателей на строки - прочел строку, выделил для нее место (через New) и храни в "куче" данные. А "куча" в 10 раз больше по объему, 640К. Чувствуешь разницу?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Уникум
*******

Группа: Пользователи
Сообщений: 6 823
Пол: Мужской
Реальное имя: Лопáрь (Андрей)

Репутация: -  159  +


Nelson1992, ты не первый день на Форуме! Просьба выполнять Правила, как это делают другие!! Исправь название.

М
В следующий раз твоя тема с подобным названием будет закрыта сразу после обнаружения



--------------------
я - ветер, я северный холодный ветер
я час расставанья, я год возвращенья домой
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 20.04.2024 0:12
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name