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

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

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

 
 Ответить  Открыть новую тему 
> Проблема с Сортировкой в программе "База Данных", прошу помощи
сообщение
Сообщение #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 килобайт ) Кол-во скачиваний: 297
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






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





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

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


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

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


Прикрепленные файлы
Прикрепленный файл  pascal_lek.rar ( 2.35 килобайт ) Кол-во скачиваний: 154
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Что-то на самом деле непонятное с файлом... Размер записи (судя по исходнику) = 535 байт, размер файла должен быть ему кратен, однако на самом деле этого не наблюдается.
 К началу страницы 
+ Ответить 
сообщение
Сообщение #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 -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #8


Гость






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

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


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

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

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


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


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





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

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


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

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

 





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