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

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

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

> Работа с записями, массивы и файлы
LLIRIKS
сообщение 23.01.2005 13:39
Сообщение #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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
LLIRIKS
сообщение 23.01.2005 23:30
Сообщение #2


Новичок
*

Группа: Пользователи
Сообщений: 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 - 24.01.2005 0:40


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

Сообщений в этой теме


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

 



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