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

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

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

 
 Ответить  Открыть новую тему 
> Проблема с Сортировкой в программе "База Данных", прошу помощи
Callipso
сообщение 28.05.2007 12:33
Сообщение #1





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

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


При запуске сортировки (сортировка выполняется по 2му полю программы, т.е. по годам) выскакивает ошибка процессора и паскаль вырубается. Помогите пожалуйста найти ошибку.

Заранее большое спасибо.


procedure sort;
var
f,f1: file of Lekarstva;
s,t,p: Lekarstva;
log: boolean;
k,i,j,n: integer;
a: array [1..10] of Lekarstva ;
z: string;
b: integer;
begin
clrscr;
assign (f,'c:\Lekarstva.dat');
reset (f);
n:=filesize(f);
i:=0;
while not eof(f) do
begin
read (f,s);
a[i]:=s;
i:=i+1;
end;
repeat
log:=true;
for i:=0 to n-2 do
if (a[i].year)>(a[i+1].year) then
begin
b:=a[i].year;
a[i].year:=a[i+1].year;
a[i+1].year:=b;
z:=a[i].name;
a[i].name:=a[i+1].name;
a[i+1].name:=z;
z:=a[i].vipusk;
a[i].vipusk:=a[i+1].vipusk;
a[i+1].vipusk:=z;
z:=a[i].bolesn;
a[i].bolesn:=a[i+1].bolesn;
a[i+1].bolesn:=z;
log:=false
end;
until log;
clrscr;
writeln (Shapka);
for i:=0 to n-1 do
begin
for j:=length(a[i].name) to 20 do
a[i].name:=a[i].name + ' ';

writeln (':',a[i].name,':',a[i].year,':',a[i].vipusk,' :',a[i].bolesn);
end;
close (f);
repeat until keypressed;
end;




Ниже прикрепляю всю программу


Прикрепленные файлы
Прикрепленный файл  2MY.PAS ( 6.29 килобайт ) Кол-во скачиваний: 235
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 28.05.2007 16:42
Сообщение #2


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Прикрепи, плз, Lekarstva.dat (запакуй в рар-архив, например).

Вот это страшное место:
    b:=a[i].year;
a[i].year:=a[i+1].year;
a[i+1].year:=b;
z:=a[i].name;
a[i].name:=a[i+1].name;
a[i+1].name:=z;
z:=a[i].vipusk;
a[i].vipusk:=a[i+1].vipusk;
a[i+1].vipusk:=z;
z:=a[i].bolesn;
a[i].bolesn:=a[i+1].bolesn;
a[i+1].bolesn:=z;
log:=false

мне абсолютно не понятно, но хотелось бы потестировать на живом примере.


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2007 16:48
Сообщение #3


Гость






Вот это "страшное место" меняется на 3 строки, потому как для того чтобы поменять местами значения записей совсем не обязательно менять местами все ее поля по отдельности... С записью оператор присваивания сработает абсолютно аналогично.
 К началу страницы 
+ Ответить 
Callipso
сообщение 28.05.2007 17:00
Сообщение #4





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

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


Вот архив с кодом программы и файлом Lekarstva.dat (там всего три записи,но я думаю,для примера работы сойдёт).
Большое спасибо за помощь!

Сообщение отредактировано: Callipso - 28.05.2007 17:01


Прикрепленные файлы
Прикрепленный файл  pascal_lek.rar ( 2.35 килобайт ) Кол-во скачиваний: 137
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 28.05.2007 17:21
Сообщение #5


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


По-моему, проблема в самом файле.
Запустила примитивный кусочек на этом файле:
uses crt;
type
Lekarstva=record
name: string [20];
year: integer;
vipusk: string;
bolesn: string;
end;
var curr: lekarstva;
f: file of Lekarstva;

begin
clrscr;
assign(f,'c:\1.dat');
reset(f);
while not(eof (f)) do
begin
read(f,curr);
writeln(curr.name);
end;
readln;
end.

результат превзошел ожидания smile.gif нечто жуткое.

покажешь, как ты заполняешь файл?


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2007 17:41
Сообщение #6


Гость






Что-то на самом деле непонятное с файлом... Размер записи (судя по исходнику) = 535 байт, размер файла должен быть ему кратен, однако на самом деле этого не наблюдается.
 К началу страницы 
+ Ответить 
Callipso
сообщение 28.05.2007 18:06
Сообщение #7





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

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


Так я же код программы приложил к предыдущим постам) Там есть процедура создания самой базы...

procedure create;

var
f: file of Lekarstva;
s: Lekarstva;
b: integer;

begin
clrscr;
assign (f,'c:\lekarstva.dat');
rewrite (f);
repeat
write ('Enter title of medicine ');
readln (s.name);
write ('Enter year of release ');
readln (s.year);
write ('Enter form of release ');
readln (s.vipusk);
write ('Enter sickness ');
readln (s.bolesn);
write (f,s);
write ('Continue? (1-yes, 2-no) ');
readln (b);
until b=2;
close (f);
end;



Сообщение отредактировано: Callipso - 28.05.2007 18:08
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 28.05.2007 18:37
Сообщение #8


Гость






А теперь внимательно перечитай пост №6... Почему у тебя этого не происходит? А когда я создал новый файл - все прекрасно читается...

Меня терзают смутные сомнения, что я догадался о причине... Ты каким компилятором пользуешься, расскажи?
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 28.05.2007 18:47
Сообщение #9


просто человек
******

Группа: Модераторы
Сообщений: 3 641
Пол: Женский
Реальное имя: Юлия

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


Создала новый файл.
Стало несколько лучше.
Только в процедуре сортировки не i:=0, а i:=1 нужно. ну и дальше границы циклов переставь...


--------------------
Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Callipso
сообщение 28.05.2007 19:37
Сообщение #10





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

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


Всё заработало.
Большое прибольшое спасибо за помощь!!!!!))
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 



- Текстовая версия 12.08.2025 6:17
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"