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

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

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

 
 Ответить  Открыть новую тему 
> Работа с записями, массивы и файлы
сообщение
Сообщение #1


Новичок
*

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

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


Люди, кто сможет, помогите, пожалуйста! Завтра экзамен - нужно срочно решить 2 задачи... blink.gif
обе задачи похожи - отличие лишь в том, что в 1-й задаче записи помещаются в массив, а во 2-й в файл...
в обеих задачах нужно организовать ввод информации об авторах (ФИО, гонорар за книгу) и их книгах (название книги, количество страниц, тираж).
причем ввод организовать таким образом, чтобы программа запрашивала сначала ФИО автора, потом информацию о каждой его книге и гонорар за нее.
Эту информацию вывести на печать - получится что-то типа этого:

ФИО 1-го автора - ...
название 1-й книги - ...
количество страниц - ...
тираж - ...
гонорар автора за книгу - ...
название 2-й книги - ...
количество страниц - ...
тираж - ...
гонорар автора за книгу - ...
ФИО 2-го автора - ...
название 1-й книги - ...
количество страниц - ...
тираж - ...
гонорар автора за книгу - ...
название 2-й книги - ...
количество страниц - ...
тираж - ...
гонорар автора за книгу - ...

причем организовать в 2 записи: авторов (ФИО и гонорар) и книг (название книги, количество страниц, тираж).
потом всю эту информацию отсортировать по общему гонорару автора и вывести результат на печать.
во 2-й задаче все то же самое, только через файлы...

если можете, помогите :p2: - очень нужно...
сам я уже, наверно, не успею... unsure.gif

вот что я пока что осилил по 1-й задаче:
Код

uses  crt;
type  BOOK=record
      ID_B:integer;
      NAZ:string;
      KOL:integer;
      TIR:integer;
      ZAP_B:integer;
     end;
     AVTOR=record
      ID_A:integer;
      FIO:string;
      GON:integer;
      ZAP_A:integer;
     end;
     ZAD=record
      ID_Z:integer;
      FIO:string;
      NAZ:string;
      KOL:integer;
      TIR:integer;
      GON:integer;
     end;
var   B:BOOK;
     A:AVTOR;
     MAS_B:array[1..64] of BOOK;
     MAS_A:array[1..64] of AVTOR;
     key1,key1_1,key2,key2_2:boolean;
     ch,anykey:char;
     I,K,J,L:integer;
     F,F1:string;
begin
clrscr;
I:=1;
 with A,B do
  begin
   repeat
    key2:=false;key2_2:=false;
    clrscr;
    A.ID_A:=I;
    writeln('Vvedite FIO avtora:');
    readln(A.FIO);
    A.ZAP_A:=I;
    repeat
     key1:=false;key1_1:=false;
     B.ID_B:=I;
     writeln('Vvedite nazvanie knigi:');
     readln(B.NAZ);
     writeln('Vvedite kolichestvo straniz:');
     readln(B.KOL);
     writeln('Vvedite tiraj knigi:');
     readln(B.TIR);
     writeln('Vvedite gonorar avtora za etu knigu:');
     readln(A.GON);
     B.ZAP_B:=I;
     repeat
      writeln('Budete vvodit eshe knigu?[Y,N]');
      readln(ch);
      If (ch in ['Y','y','N','n']) then key1_1:=true;
     until key1_1;
     If (ch in ['N','n']) then key1:=true;
     clrscr;
     MAS_A[I]:=A;
     MAS_B[I]:=B;
     Inc(I);
    until key1;
    repeat
     writeln('Budete vvodit eshe avtora?[Y,N]');
     readln(ch);
     If (ch in ['Y','y','N','n']) then key2_2:=true;
    until key2_2;
    If (ch in ['N','n']) then key2:=true;
    clrscr;
   until key2;
  end;
writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
anykey:=readkey;
clrscr;
J:=1;L:=1;F:='';
for K:=1 to I do
 with A,B do
  begin
   A:=MAS_A[I];
   B:=MAS_B[I];
   F1:=F;
   F:=A.FIO;
   if (K>1) and (F<>F1) then
    begin
     Inc(J);
     L:=1;
    end;
   if ((L=1) or ((L>1) and (F<>F1))) then
    begin
     writeln('-------------------------------------------------------');
     writeln('----------------- Zapis ',J,'-go avtora -------------------');
     writeln('-------------------------------------------------------');
     writeln('Number ',J);
     writeln('FIO    ',A.FIO);
     writeln;
    end;
   if ((L=1) or ((L>1) and (F=F1))) then
    begin
     writeln('------------------ Zapis ',L,'-i knigi --------------------');
     writeln('Number              ',L);
     writeln('Nazvanie            ',B.NAZ);
     writeln('Kolichestvo straniz ',B.KOL);
     writeln('Tiraj               ',B.TIR);
     writeln('Gonorar avtora      ',A.GON);
     writeln;
     Inc(L);
    end;
  end;
writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
anykey:=readkey;
end.

но где-то, как всегда, ошибки - никак не могу найти где именно... unsure.gif


--------------------
Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Новичок
*

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

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


в общем, организовал я ввод информации...
но дальше - опять запарка...
на данный момент алгоритм таков:
Код

uses  crt;
type  BOOK=record
      ID_B:integer;
      NAZ:string;
      KOL:integer;
      TIR:integer;
      ZAP_B:integer;
     end;
     AVTOR=record
      ID_A:integer;
      FIO:string;
      GON:integer;
      ZAP_A:integer;
     end;
var   B:BOOK;
     A:AVTOR;
     MAS_B:array[1..64] of BOOK;
     MAS_A:array[1..64] of AVTOR;
     key1,key1_1,key2,key2_2:boolean;
     ch,anykey:char;
     I,K,M:integer;
begin
clrscr;
I:=1;M:=1;
 with A,B do
  begin
   repeat
    key2:=false;key2_2:=false;
    clrscr;
    A.ID_A:=M;
    writeln('Vvedite FIO avtora:');
    readln(A.FIO);
    repeat
     key1:=false;key1_1:=false;
     B.ID_B:=I;
     writeln('Vvedite nazvanie knigi:');
     readln(B.NAZ);
     writeln('Vvedite kolichestvo straniz:');
     readln(B.KOL);
     writeln('Vvedite tiraj knigi:');
     readln(B.TIR);
     writeln('Vvedite gonorar avtora za etu knigu:');
     readln(A.GON);
     B.ZAP_B:=M;
     A.ZAP_A:=I;
     MAS_A[I]:=A;
     MAS_B[I]:=B;
     repeat
      writeln('Budete vvodit eshe knigu?[Y,N]');
      readln(ch);
      If (ch in ['Y','y','N','n']) then key1_1:=true;
     until key1_1;
     If (ch in ['N','n']) then key1:=true;
     clrscr;
     Inc(I);
    until key1;
    repeat
     writeln('Budete vvodit eshe avtora?[Y,N]');
     readln(ch);
     If (ch in ['Y','y','N','n']) then key2_2:=true;
    until key2_2;
    If (ch in ['N','n']) then key2:=true;
    clrscr;
    Inc(M);
   until key2;
  end;
writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
anykey:=readkey;
end.


--------------------
Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Ищущий истину
******

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

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


Цитата
отсортировать по общему гонорару автора

В faq'e есть инфа как сортировать данные...

в чем проблемма конкретно?


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


Уникальный
**

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

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


Первая часть программы!
... работает с массивами ... выдаёт сведения по убыванию гонораров авторов ... тоесть начиная с самого главного буржуя и т. д.
Код
uses
 crt;

const
 max_avt=10;
 max_book=20;

type
 book=record
   naz:string[40];
   kol:integer;
   tir:integer;
   book_gon:longint;
 end;
 avtor=record
   fio:string[40];
   gon:longint;
   kol_book:byte;
   mas_book:array [1..max_book] of book;
 end;
var
 tmp:avtor;
 mas_avt:array[1..max_avt] of avtor;
 kol_avt:integer;
 i,j:integer;
 ch:char;

begin
 clrscr;
 kol_avt:=0;
 repeat
   inc(kol_avt);
   with mas_avt[kol_avt] do begin
     kol_book:=0;
     write('Vvedite FIO avtora: ');
     readln(FIO);
     repeat
       inc(kol_book);
       with mas_book[kol_book] do begin
         writeln('-------- Kniga No ',kol_book,' --------');
         write('Vvedite nazvanie knigi: ');
         readln(naz);
         write('Vvedite kolichestvo straniz: ');
         readln(kol);
         write('Vvedite tiraj knigi: ');
         readln(tir);
         write('Vvedite gonorar avtora za etu knigu: ');
         readln(book_gon);
       end;
       gon:=gon + mas_book[kol_book].book_gon;
       writeln('Budete vvodit eshe knigu? [Y,N]');
       repeat
       until keypressed;
       ch:=readkey;
     until not((ch='y') or (ch='Y'));
   end;
   writeln('Budete vvodit eshe avtora? [Y,N]');
   repeat
   until keypressed;
   ch:=readkey;
 until not((ch='y') or (ch='Y'));
 for i:=1 to kol_avt do begin
   for j:=1 to kol_avt-1 do begin
     if mas_avt[j].gon < mas_avt[j+1].gon then begin
       tmp:=mas_avt[j];
       mas_avt[j]:=mas_avt[j+1];
       mas_avt[j+1]:=tmp;
     end;
   end;
 end;
 writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
 readkey;
 clrscr;
 for i:=1 to kol_avt do begin
   with mas_avt[i] do begin
     writeln('-------------------------------------------------------');
     writeln('----------------- Zapis ',i,'-go avtora -------------------');
     writeln('-------------------------------------------------------');
     writeln('FIO:                   ',fio);
     writeln('Gonorar za vse knigi:  ',gon);
     for j:=1 to kol_book do begin
       with mas_book[j] do begin
         writeln('------------------ Zapis ',j,'-i knigi --------------------');
         writeln('Nazvanie            ',naz);
         writeln('Kolichestvo straniz ',kol);
         writeln('Tiraj               ',tir);
         writeln('Gonorar za knigu    ',book_gon);
       end;
     end;
   end;
 end;
 writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
 readkey;
end.


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


--------------------
Век живи, век учи С © by Jahnerus
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5


Новичок
*

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

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


все рано не все понятно... unsure.gif
вот немного дальше продвинулся - организовал ввод и вывод информации в обеих задачах:

1-я задача
Код

uses  crt;
type  BOOK=record
      ID_B:integer;
      NAZ:string;
      KOL:integer;
      TIR:integer;
      ZAP_B:integer;
     end;
     AVTOR=record
      ID_A:integer;
      FIO:string;
      GON:integer;
      ZAP_A:integer;
     end;
var   B:BOOK;
     A:AVTOR;
     MAS_B:array[1..64] of BOOK;
     MAS_A:array[1..64] of AVTOR;
     key1,key1_1,key2,key2_2:boolean;
     ch,anykey:char;
     I,K,J,L,M:integer;
     F,F1:string;
begin
{-------------------------------VVOD_INFORMAZII----------------------------}
 clrscr;
 I:=1;M:=1;
 with A,B do
   begin
     repeat
       key2:=false;key2_2:=false;
       clrscr;
       A.ID_A:=M;
       writeln('Vvedite FIO avtora:');
       readln(A.FIO);
       repeat
         key1:=false;key1_1:=false;
         B.ID_B:=I;
         writeln('Vvedite nazvanie knigi:');
         readln(B.NAZ);
         writeln('Vvedite kolichestvo straniz:');
         readln(B.KOL);
         writeln('Vvedite tiraj knigi:');
         readln(B.TIR);
         writeln('Vvedite gonorar avtora za etu knigu:');
         readln(A.GON);
         B.ZAP_B:=M;
         A.ZAP_A:=I;
         MAS_A[I]:=A;
         MAS_B[I]:=B;
         repeat
           writeln('Budete vvodit eshe knigu?[Y,N]');
           readln(ch);
           If (ch in ['Y','y','N','n']) then key1_1:=true;
         until key1_1;
         If (ch in ['N','n']) then key1:=true;
         clrscr;
         Inc(I);
       until key1;
       repeat
         writeln('Budete vvodit eshe avtora?[Y,N]');
         readln(ch);
         If (ch in ['Y','y','N','n']) then key2_2:=true;
       until key2_2;
       If (ch in ['N','n']) then key2:=true;
       clrscr;
       Inc(M);
     until key2;
   end;
{-----------------------------VIVOD_INFORMAZII-----------------------------}
 A:=MAS_A[1];
 with A do
   F:=A.FIO;
 M:=1;
 for K:=1 to I-1 do
   begin
     A:=MAS_A[K];
     F1:=A.FIO;
     if ((K=1) or ((K>1) and (F<>F1))) then
       begin
         clrscr;
         writeln('Zapis ',M,'-go avtora');
         writeln('FIO ',A.FIO);
         Inc(M);
       end;
     B:=MAS_B[K];
     with A,B do
       begin
         writeln;
         writeln('Nazvanie knigi ',B.NAZ);
         writeln('Kolichestvo straniz ',B.KOL);
         writeln('Tiraj ',B.TIR);
         writeln('Gonorar za knigu ',A.GON);
       end;
     F:=F1;
   end;
 writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
 anykey:=readkey;
end.


2-я задача
Код

uses  crt;
type  BOOK=record
      ID_B:integer;
      NAZ:string;
      KOL:integer;
      TIR:integer;
      ZAP_B:integer;
     end;
     AVTOR=record
      ID_A:integer;
      FIO:string;
      GON:integer;
      ZAP_A:integer;
     end;
var   FILE_A : file of AVTOR;
     FILE_B: file of BOOK;
     A:AVTOR;
     B:BOOK;
     key1,key1_1,key2,key2_2:boolean;
     ch,anykey:char;
     I,M,K:integer;
     F,F1:string;
begin
 assign(FILE_A ,'FILE_A.dat');
 rewrite(FILE_A);
 assign(FILE_B ,'FILE_B.dat');
 rewrite(FILE_B);
 clrscr;
 I:=1;M:=1;
 with A,B do
   begin
     repeat
       key2:=false;key2_2:=false;
       clrscr;
       A.ID_A:=M;
       writeln('Vvedite FIO avtora:');
       readln(A.FIO);
       repeat
         key1:=false;key1_1:=false;
         B.ID_B:=I;
         writeln('Vvedite nazvanie knigi:');
         readln(B.NAZ);
         writeln('Vvedite kolichestvo straniz:');
         readln(B.KOL);
         writeln('Vvedite tiraj knigi:');
         readln(B.TIR);
         writeln('Vvedite gonorar avtora za etu knigu:');
         readln(A.GON);
         B.ZAP_B:=M;
         A.ZAP_A:=I;
         write(FILE_A,A);
         write(FILE_B,B);
         repeat
           writeln('Budete vvodit eshe knigu?[Y,N]');
           readln(ch);
           If (ch in ['Y','y','N','n']) then key1_1:=true;
         until key1_1;
         If (ch in ['N','n']) then key1:=true;
         clrscr;
         Inc(I);
       until key1;
       repeat
         writeln('Budete vvodit eshe avtora?[Y,N]');
         readln(ch);
         If (ch in ['Y','y','N','n']) then key2_2:=true;
       until key2_2;
       If (ch in ['N','n']) then key2:=true;
       clrscr;
       Inc(M);
     until key2;
   end;
 close(FILE_A);
 close(FILE_B);
 clrscr;
 reset(FILE_A);
 reset(FILE_B);
 M:=1;K:=1;
 read(FILE_A,A);
 with A do
   F:=A.FIO;
 seek(FILE_A,0);
 while (not(eof(FILE_A)) and not(eof(FILE_B))) do
   begin
     read(FILE_A,A);
     with A do
       begin
         F1:=A.FIO;
         if ((K=1) or ((K>1) and (F<>F1))) then
           begin
             clrscr;
             writeln('Zapis ',M,'-go avtora');
             writeln('FIO ',A.FIO);
             Inc(M);
           end;
       end;
     read(FILE_B,B);
     with A,B do
       begin
         writeln;
         writeln('Nazvanie knigi ',B.NAZ);
         writeln('Kolichestvo straniz ',B.KOL);
         writeln('Tiraj ',B.TIR);
         writeln('Gonorar za knigu ',A.GON);
       end;
     F:=F1;
     Inc(K);
     writeln('Dlya prodolgeniya nagmite lyubuyu klavishu...');
     anykey:=readkey;
   end;
end.


в обеих задачах осталось отсортировать запись AVTOR по общему гонорару автора и вывести полученный результат на печать (аналогично первоначальному выводу на печать - по такому же принципу).

если кто может, помогите, плиз, дописать мои исходники... unsure.gif желательно с комментариями и пояснениями... unsure.gif
буду очень признателен rolleyes.gif

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


--------------------
Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

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

 





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