Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.12.2007, 17:11   #1
Newnata
 
Регистрация: 20.11.2007
Сообщений: 4
По умолчанию Работа с массивом объектов

Сведения о книге состоят из фамилии автора, названия книги, наименования издательства и года издания. Упорядочить данные по фамилии автора. Вывести данные о книгах, изданных заданным автором в 1998 г.
У меня никак не получается написать процедуру упорядочивание данных по фамилии автора. Помогите, кто знает.
Newnata вне форума Ответить с цитированием
Старый 05.12.2007, 18:31   #2
Newnata
 
Регистрация: 20.11.2007
Сообщений: 4
По умолчанию Где ошибка?

Код:
procedure kniga.alfavit;
var s: string;
k,i,j: integer;
begin
clrscr;
writeln('Yporydochivanie');
writeln('-----------------------------------------------------');
writeln('| Familiy | Nazvanie | naimenovaniy| God |');
writeln('| avtora | knigi | izdatelstva | izdaniy|');
writeln('-----------------------------------------------------');
Assign (KnigaFile, 'Knigas.dat');
Reset (KnigaFile);
i:=1;
while not eof (KnigaFile) do
begin
read(KnigaFile, r[i]);
i:=i+1;
writeln(r[i].familiur);
end;

for k:=20 downto 1 do
begin
for i:=2 to n do
begin
for j:=n downto i do
if r[j-1].familiur[k]>r[j].familiur[k] then begin
s:=r[j-1].familiur;
r[j-1].familiur:=r[j].familiur;
r[j].familiur:=s;

end;
end;
end;
for i:=1 to n do
writeln(r[i].familiur);
begin
writeln('|',r[i].familiur:20,'|',r[i].nazvanier:20,'|',r[i].naimenovanier:13,'|',r[i].godr:7,'|');
end;
writeln('---------------------------------------------------');
close(KnigaFile);
readkey;
end;

Последний раз редактировалось merax; 05.12.2007 в 19:20.
Newnata вне форума Ответить с цитированием
Старый 06.12.2007, 07:13   #3
puporev
Старожил
 
Регистрация: 13.10.2007
Сообщений: 2,740
По умолчанию

Для таких задач, как эта, предусмотрены записи, т.е. тип Record.
Например
type
kniga=record
avtor,name,izd:string; (это поля записи)
god:word;
Потом создаем массив bib[1..20]of kniga;
Заполняем его например вручную:
bib[1].avtor:='Пушкин';bib[1].name:='Евгений Онегин';
bib[1].izd:='SctPtb';bib[1].god:=1998;
Аналогично все двадцать книг.
Затем работаем с массивом как обычно, только сравниваем или выбираем его поля. Например
for i:=1 to 20 do begin
if bib[i].god=1998 then write(bib[i].avtor,' ',bib[i].name,' ',bib[i].izd);
Поскольку строки можно сравнивать, то сортировка по алфавиту примерно так:
Код:
for i:=1 to 19 do begin
    for j:=1 to 19 do
    if bib[j].avtor>bib[j+1].avtor
    then begin
    x:=bib[j]; bib[j]:=bib[j+1];bib[j+1]:=x;
    end;end;
    for i:=1 to 20 do
    Writeln(bib[i].avtor,' ',bib[i].name,' ',bib[i].izd),' ',bib[i].god);
    readln;end.
Посмотрите на форуме в разделе "Помощь студентам". Там не очень давно разбирались подобные задачи и даже выкладывали готовые исходники.
Если что не так написал, извините, писал по памяти. Но направление верное.
puporev вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с динамическим массивом sand Общие вопросы C/C++ 3 22.08.2008 12:48
работа с массивом begemotikdin Паскаль, Turbo Pascal, PascalABC.NET 2 21.06.2008 21:40
Работа с массивом: n на n ! Angst Помощь студентам 1 24.01.2008 22:14
работа с массивом на ассемблере dmk Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 0 12.12.2007 19:50