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

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

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

 
 Ответить  Открыть новую тему 
> Опять записи и сортировка
Гость
сообщение 14.05.2007 22:54
Сообщение #1


Гость






Вот такая задача: В библиотеке содержатся следующие сведения о книгах: фамилия автора, название и год издания.
 Упорядочить сведения по фамилиям авторов.
 Определить, сколько в библиотеке книг, изданных в указанном году.
 Определить, имеется ли книга с указанным названием. Если да, то сообщить фамилию автора и год издания. Если таких книг несколько, то сообщить имеющиеся сведения обо всех этих книгах.

Надо сделать ее на Бейсике и Паскале
Пытаюсь сортировку сделать хотя бы на Паскале. Все просмортел на форума, вроде все понятно. Попробовал в кучу использовать для своей задачи ничего не выходит. Подскажите нубу че здесь не так.
program idz1_vivod;
uses crt;
function Compare(a, b: String): Integer;
function Min(a, b: Integer): Integer;
begin
if a < b then
Min := a
else
Min := b;
end;
var
i, n, lA, lB: Integer;
begin
lA := Length(a);
lB := Length(b);
n := Min(lA, lB);
i := 1;
while (i <= n) and (a[i] = b[i]) do inc(i);
if (i > n) then begin
if (lA = lB) then Compare := 0
else
if lA > lB then Compare := - 1
else Compare := 1;
end
else
if ord(a[i]) < ord(b[i]) then
Compare := 1
else
Compare := -1
end;
type book=record
aut:string[20];
name:string[15];
year:integer;
end;
var lib:file of book;
arrtype:array[1..5] of book;
ar:array[1..5] of book;
i,j:Integer;
t:book;
begin
For i:=1 to 5 do
for j:=5 downto i+1 do
if compare(ar[pred(j)],ar[j])=-1 then begin <---- Вот здесь постоянно пишет Type mismatch.
T:=pred(j); pred(j):=ar[j]; ar[j]:=T
end
assign(lib,'idz.dat');
reset(lib);
i:=0;
while not EOF(lib) do
begin
i:=i+1;
read(lib,q[i]);
writeln(q[i].aut,' ',q[i].name,' ',q[i].year);
end;
readln;
close(lib);
sort;
end.


 К началу страницы 
+ Ответить 
volvo
сообщение 15.05.2007 0:10
Сообщение #2


Гость






Может, лучше:
if compare(ar[pred(j)].aut,ar[j].aut)=-1 then begin
, если по фамилиям?
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 15.05.2007 0:15
Сообщение #3


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

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

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


ох...
что-то ты с Compare намудрил.
почему бы не сравнивать строки просто через ">" и "<"?

дальше.
ты забываешь открыть файл и считать из него в массив данные о книгах ДО сортировки массива. что ты, собственно, сортируешь-то?

теперь об ошибке, которую выдает компилятор: типы.
смотри:
function Compare(a, b: String): Integer;
ar:array[1..5] of book;
compare(ar[pred(j)],ar[j])=-1

то есть надо писать
compare(ar[pred(j)].aut,ar[j].aut)=-1

это что в глаза бросилось...


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


Гость






Хм..ну и на том спасибо. Я вот этот вариант делал часа в три ночи smile.gif Поэтому мог и ступить совсем... Седня опять весь день буду делать
 К началу страницы 
+ Ответить 
Гость
сообщение 15.05.2007 4:45
Сообщение #5


Гость






Ну поправил, теперь выглядит вот так
program idz1_vivod;
uses crt;
function Compare(a, b: String): Integer;
function Min(a, b: Integer): Integer;
begin
if a < b then
Min := a
else
Min := b;
end;
var
i, n, lA, lB: Integer;
begin
lA := Length(a);
lB := Length(b);
n := Min(lA, lB);
i := 1;
while (i <= n) and (a[i] = b[i]) do inc(i);
if (i > n) then begin
if (lA = lB) then Compare := 0
else
if lA > lB then Compare := - 1
else Compare := 1;
end
else
if ord(a[i]) < ord(b[i]) then
Compare := 1
else
Compare := -1
end;
type book=record
aut:string[20];
name:string[15];
year:integer;
end;
var lib:file of book;
arrtype:array[1..5] of book;
ar:array[1..5] of book;
i,j:Integer;
t:book;
begin
For i:=1 to 5 do
for j:=5 downto i+1 do
if compare(ar[pred(j)],ar[j])=-1 then begin
T:=pred(j); pred(j):=ar[j]; ar[j]:=T
end
assign(lib,'idz.dat');
reset(lib);
i:=0;
while not EOF(lib) do
begin
i:=i+1;
read(lib,q[i]);
writeln(q[i].aut,' ',q[i].name,' ',q[i].year);
end;
readln;
close(lib);
sort;
end.


Но выводит все в том же порядке как и было введено до этого. Не сортирует.
 К началу страницы 
+ Ответить 
Гость
сообщение 15.05.2007 4:49
Сообщение #6


Гость






Блин... Забыл файл то сохранить перед тем как копировать... то же самое написал... Вот так переделал
program idz1_vivod;
uses crt;
type book=record
aut:string[20];
name:string[15];
year:integer;
end;
var lib:file of book;
ar:array[1..5] of book;
i,j:Integer;
t:book;
begin
assign(lib,'idz.dat');
reset(lib);
For i:=1 to 5 do
for j:=5 downto i+1 do
if ar[pred(j)].aut>ar[j].aut then
begin
T:=ar[pred(j)];
ar[pred(j)]:=ar[j];
ar[j]:=T;
end;
i:=0;
while not EOF(lib) do
begin
i:=i+1;
read(lib,ar[i]);
writeln(ar[i].aut,' ',ar[i].name,' ',ar[i].year);
end;
readln;
close(lib);
end.


Ну вот он просто мен выводит массив. Все
 К началу страницы 
+ Ответить 
мисс_граффити
сообщение 15.05.2007 15:49
Сообщение #7


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

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

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


смотри, что ты делаешь:
1. открыл файл
2. отсортировал массив (заполненный неизвестно каким мусором)
3. заполнил массив информацией из файл
4. вывел массив.


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

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

 



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