![]() |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
![]() ![]() |
![]() |
LLIRIKS |
![]() ![]()
Сообщение
#1
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
Люди, кто сможет, помогите, пожалуйста! Завтра экзамен - нужно срочно решить 2 задачи...
![]() обе задачи похожи - отличие лишь в том, что в 1-й задаче записи помещаются в массив, а во 2-й в файл... в обеих задачах нужно организовать ввод информации об авторах (ФИО, гонорар за книгу) и их книгах (название книги, количество страниц, тираж). причем ввод организовать таким образом, чтобы программа запрашивала сначала ФИО автора, потом информацию о каждой его книге и гонорар за нее. Эту информацию вывести на печать - получится что-то типа этого: ФИО 1-го автора - ... название 1-й книги - ... количество страниц - ... тираж - ... гонорар автора за книгу - ... название 2-й книги - ... количество страниц - ... тираж - ... гонорар автора за книгу - ... ФИО 2-го автора - ... название 1-й книги - ... количество страниц - ... тираж - ... гонорар автора за книгу - ... название 2-й книги - ... количество страниц - ... тираж - ... гонорар автора за книгу - ... причем организовать в 2 записи: авторов (ФИО и гонорар) и книг (название книги, количество страниц, тираж). потом всю эту информацию отсортировать по общему гонорару автора и вывести результат на печать. во 2-й задаче все то же самое, только через файлы... если можете, помогите :p2: - очень нужно... сам я уже, наверно, не успею... ![]() вот что я пока что осилил по 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. но где-то, как всегда, ошибки - никак не могу найти где именно... ![]() -------------------- Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют... |
LLIRIKS |
![]()
Сообщение
#2
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
в общем, организовал я ввод информации...
но дальше - опять запарка... на данный момент алгоритм таков: Код 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. -------------------- Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют... |
Altair |
![]()
Сообщение
#3
|
![]() Ищущий истину ![]() ![]() ![]() ![]() ![]() ![]() Группа: Модераторы Сообщений: 4 824 Пол: Мужской Реальное имя: Олег Репутация: ![]() ![]() ![]() |
Цитата отсортировать по общему гонорару автора В faq'e есть инфа как сортировать данные... в чем проблемма конкретно? -------------------- Помогая друг другу, мы справимся с любыми трудностями!
"Не опускать крылья!" (С) |
Jahnerus |
![]()
Сообщение
#4
|
![]() Уникальный ![]() ![]() Группа: Пользователи Сообщений: 64 Пол: Мужской Репутация: ![]() ![]() ![]() |
Первая часть программы!
... работает с массивами ... выдаёт сведения по убыванию гонораров авторов ... тоесть начиная с самого главного буржуя и т. д. Код 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
|
LLIRIKS |
![]()
Сообщение
#5
|
Новичок ![]() Группа: Пользователи Сообщений: 24 Пол: Мужской Репутация: ![]() ![]() ![]() |
все рано не все понятно...
![]() вот немного дальше продвинулся - организовал ввод и вывод информации в обеих задачах: 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 по общему гонорару автора и вывести полученный результат на печать (аналогично первоначальному выводу на печать - по такому же принципу). если кто может, помогите, плиз, дописать мои исходники... ![]() ![]() буду очень признателен ![]() Сообщение отредактировано: LLIRIKS - 24.01.2005 0:40 -------------------- Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют... |
![]() ![]() |
![]() |
Текстовая версия | 19.07.2025 18:13 |