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 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
Jahnerus
сообщение 23.01.2005 18:35
Сообщение #2


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

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


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

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


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

 



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