Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/11: Рейтинг темы: голосов - 11, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 13.11.2020
Сообщений: 7

Удалить дубликаты книг авторов и сложить количество выпущенных книг

13.11.2020, 18:09. Показов 2066. Ответов 3

Студворк — интернет-сервис помощи студентам
Никак не могу сделать эту задачу, учитель сказал чтоб я все копии которые будут во 2ой таблице удалил, а кол-во книг с удаленных я должен перенести на 1 ого допустим пушкина (того у кого удалил копии).



Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
uses crt;
type biblia = record
     autor_fio:string[30];
     name_book:string[20];
     count_book:integer;
     creator_book:string[20];
     year_creation:integer;
     end;
var arraybib:array[1..255] of biblia; 
    ec5:array[1..255] of integer; 
    ec6:array[1..255] of integer; 
    ec8:array[1..255] of integer; 
    p_creator_book,str,f1:string[20];
    i,j,n,ecall,ecall1,i1,jj,jj1,p:integer;
    c,c1:char;
    
begin
  writeln('Введите сколько записей будет в таблице от 10 до 255.');
  repeat
    readln(n);
    if (n<1) or (n>255) then
      begin
        clrscr;
        writeln('Попробуйте еще раз. От 10 до 255.');
      end;
  until (n>=1) and (n<=255);
  
  for i:=1 to n do
    with arraybib[i] do
    begin
      writeln('Сейчас вы будете устанавливать запись №',i);
      writeln('Введите ФИО автора книги, максимум 30 символов.');
      readln(autor_fio);
      writeln('Введите название книги, максимум 20 символов.');
      readln(name_book);
      writeln('Укажите кол-во книг.');
      readln(count_book);
      if count_book < 0 then
        count_book:=0;
      writeln('Введите имя издателя, максимум 20 символов.');
      readln(creator_book);
      writeln('Введите год издания. Форма 1995.');
      readln(year_creation);
      clrscr;
    end;
  
  writeln(' ╔═══╦════════════════════════════════╦══════════════════════╦═════════════╦══════════════════════╦═════════════╗ ');
  writeln(' ║ № ║ ФИО автора                     ║ Название книги       ║ Кол-во книг ║ Издательство         ║ Год издания ║ ');
  writeln(' ╠═══╬════════════════════════════════╬══════════════════════╬═════════════╬══════════════════════╬═════════════╣ ');
  for i:=1 to n do
    with arraybib[i] do
    begin
      writeln(' ║ ',i,' ║ ',autor_fio:30,' ║ ',name_book:20,' ║ ',count_book:11,' ║ ',creator_book:20,' ║ ',year_creation:10,'  ║ '); 
    end;
  writeln(' ╚═══╩════════════════════════════════╩══════════════════════╩═════════════╩══════════════════════╩═════════════╝ '); 
  writeln('Нажмите любую клавишу, что бы продолжить...');
  readkey;
  clrscr;
  writeln('Введите имя издатиля, что бы мы опридилили кол-во книг выпущенных данным издатилем.');
  readln(p_creator_book);
  clrscr;
 
  
  
  for i:=1 to n do
    for j:=1 to n do
      if arraybib[i].autor_fio < arraybib[j].autor_fio then
      begin
        f1 := arraybib[i].autor_fio;
        arraybib[i].autor_fio := arraybib[j].autor_fio;
        arraybib[j].autor_fio := f1;
        
        f1 := arraybib[i].name_book;
        arraybib[i].name_book := arraybib[j].name_book;
        arraybib[j].name_book := f1;
        
        p := arraybib[i].count_book;
        arraybib[i].count_book := arraybib[j].count_book;
        arraybib[j].count_book := p;
        
        f1 := arraybib[i].creator_book;
        arraybib[i].creator_book := arraybib[j].creator_book;
        arraybib[j].creator_book := f1;
        
        p := arraybib[i].year_creation;
        arraybib[i].year_creation := arraybib[j].year_creation;
        arraybib[j].year_creation := p;
      end;
      
  
    
    writeln();
  for i:=1 to n do
    if arraybib[i].autor_fio = arraybib[i+1].autor_fio then
      begin
        i1:=i;
        break;
      end;
    
  for i:=1 to n do
    begin
      if arraybib[i].year_creation <= 2005 then
      begin
        if arraybib[i].autor_fio = arraybib[i+1].autor_fio then
          begin
            ec5[i1]+=arraybib[i].count_book;
          end
        else
        ec5[i]+=arraybib[i].count_book;
      end;
      if arraybib[i].year_creation >= 2006 then
      begin
        if arraybib[i].autor_fio = arraybib[i+1].autor_fio then
          begin
            ec6[i1]+=arraybib[i].count_book;
          end
        else
        ec6[i]+=arraybib[i].count_book;
      end;
    end;  
    
  for i:=1 to n do
    if arraybib[i].autor_fio = arraybib[i+1].autor_fio then
      begin
        arraybib[i].autor_fio:=arraybib[i+1].autor_fio;
        n:=n-1;
      end;
 
 
 
  writeln('                       Издательство ',p_creator_book:20);
  writeln('                                    ————————————————————');
  writeln(' ╔═══╦════════════════════════════════╦════════════════════════════╗ ');
  writeln(' ║   ║                                ║ Кол-во изданных книг       ║ ');
  writeln(' ║ № ║ ФИО автора                     ╠════════════╦═══════════════╣ ');
  writeln(' ║   ║                                ║ до 2005 г. ║ после 2005 г. ║ ');
  writeln(' ╠═══╬════════════════════════════════╬════════════╬═══════════════╣');
  for i:=1 to n do
    with arraybib[i] do
    begin
      writeln(' ║ ',i,' ║ ',autor_fio:30,' ║ ',ec5[i]:10,' ║ ',ec6[i]:13,' ║ '); 
    end;
  for i:=1 to n do
  begin
    ecall:=ecall+ec5[i];
    ecall1:=ecall1+ec6[i];
  end;
  writeln(' ╠═══╬════════════════════════════════╬════════════╬═══════════════╣');
  str:='Итого:';
  writeln(' ║ # ║ ',str:30,' ║ ',ecall:10,' ║ ',ecall1:13,' ║ '); 
  writeln(' ╚═══╩════════════════════════════════╩════════════╩═══════════════╝ ');
end.
Миниатюры
Удалить дубликаты книг авторов и сложить количество выпущенных книг  
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
13.11.2020, 18:09
Ответы с готовыми решениями:

Реализовать ввод названий книг и имён авторов неограниченное количество раз
необходимо вводить названия книг и авторов неограниченное количество раз, но после того как введешь первый раз, возникает ошибка, так как...

Вывод категорий и авторов книг
Привет, не могу понять, как правильно написать запрос для вывода категорий и авторов книг (связи везде М:М), вот что я сделал: $book =...

База данных авторов и книг
Добрый день, товарищи программисты! Создал таблицы авторов: id, name, surname, middlename и книг: id, name, author_id. Связь author_id с...

3
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
13.11.2020, 18:28
Цитата Сообщение от pavel1337228 Посмотреть сообщение
сколько записей будет в таблице от 10 до 255
И вам не лень вбивать 255 записей?
Для решения поставленной Вами задачи я бы завел еще один массив типа записи, автор и количество.
При просмотре основного массива смотрим фамилию автора и ищем ее в о втором массиве. Если нет, добавляем автора, кол-во=1, если есть, кол-во=колво+1.
0
1 / 1 / 0
Регистрация: 13.11.2020
Сообщений: 7
18.11.2020, 22:05  [ТС]
Я так и не смог это реализовать, сижу и не понимаю как это сделать.
0
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
19.11.2020, 12:54
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
uses crt;
type biblia = record
              autor_fio:string[30];
              name_book:string[20];
              count_book:integer;
              creator_book:string[20];
              year_creation:integer;
              end;
     creator = record
               autor_fio:string[30];
               d2005:integer;
               p2005:integer;
               end;         
var arraybib:array[1..20] of biblia;
    arraycrt:array[1..20] of creator; 
    p_creator_book:string[20];
    n,m,i,j,k,ecall:integer;
   
begin
writeln('Введите сколько записей будет в таблице от 2 до 20');
repeat
readln(n);
if (n<2) or (n>20) then
 begin
  clrscr;
  writeln('Попробуйте еще раз. От 10 до 255.');
 end;
until (n>=1) and (n<=20);
for i:=1 to n do
with arraybib[i] do
 begin
  writeln('Сейчас вы будете устанавливать запись №',i);
  writeln('Введите ФИО автора книги, максимум 30 символов.');
  readln(autor_fio);
  writeln('Введите название книги, максимум 20 символов.');
  readln(name_book);
  writeln('Укажите кол-во книг.');
  readln(count_book);
  if count_book < 0 then
  count_book:=0;
  writeln('Введите название издательства, максимум 20 символов.');
  readln(creator_book);
  writeln('Введите год издания. Форма 1995.');
  readln(year_creation);
  clrscr;
 end;
writeln(' ╔═══╦════════════════════════════════╦══════════════════════╦═════════════╦══════════════════════╦═════════════╗ ');
writeln(' ║ № ║ ФИО автора                     ║ Название книги       ║ Кол-во книг ║ Издательство         ║ Год издания ║ ');
writeln(' ╠═══╬════════════════════════════════╬══════════════════════╬═════════════╬══════════════════════╬═════════════╣ ');
for i:=1 to n do
with arraybib[i] do
writeln(' ║ ',i,' ║ ',autor_fio:30,' ║ ',name_book:20,' ║ ',count_book:11,' ║ ',creator_book:20,' ║ ',year_creation:10,'  ║ '); 
writeln(' ╚═══╩════════════════════════════════╩══════════════════════╩═════════════╩══════════════════════╩═════════════╝ '); 
writeln('Нажмите любую клавишу, что бы продолжить...');
readkey;
clrscr;
writeln('Введите название издательства, что бы мы определили кол-во книг выпущенных данным издательством.');
readln(p_creator_book);
clrscr;
//проверим есть ли такое издательство
i:=1;
while(i<=n)and(arraybib[i].creator_book<>p_creator_book)do inc(i);
if i>n then writeln('Такого издательства нет')
else
 begin
  //составим массив авторов этого издательства
  m:=1;
  arraycrt[m].autor_fio:=arraybib[i].autor_fio;//первый элемент заносим в него данные из arraybib[i]
  if arraybib[i].year_creation<2005 then 
   begin 
    arraycrt[m].d2005:=arraybib[i].count_book;
    arraycrt[m].p2005:=0;
   end 
  else 
   begin 
    arraycrt[m].d2005:=0;
    arraycrt[m].p2005:=arraybib[i].count_book;
   end; 
  for j:=i+1 to n do //смотрим дальше 
  if arraybib[j].creator_book=p_creator_book then//если такое же издательство
   begin
    k:=1;//проверим есть уже такой автор в массиве
    while(k<=m)and(arraycrt[k].autor_fio<>arraybib[j].autor_fio) do inc(k);
    if k>m then//нет этого автора
     begin
      inc(m);//добавим
      arraycrt[m].autor_fio:=arraybib[j].autor_fio;//очередной элемент
      if arraybib[j].year_creation<2005 then 
       begin 
        arraycrt[m].d2005:=arraybib[j].count_book;;
        arraycrt[m].p2005:=0;
       end 
      else 
       begin 
        arraycrt[m].d2005:=0;
        arraycrt[m].p2005:=arraybib[j].count_book;;
       end
     end  
    else//если есть уже такой, увеличим поля d2005, p2005
     begin
      if arraybib[j].year_creation<2005 then inc(arraycrt[k].d2005,arraybib[j].count_book)
      else inc(arraycrt[k].p2005,arraybib[j].count_book);
     end; 
   end;   
   writeln('                       Издательство ',p_creator_book:20);
   writeln('                                    ————————————————————');
   writeln(' ╔═══╦════════════════════════════════╦════════════════════════════╗ ');
   writeln(' ║   ║                                ║ Кол-во изданных книг       ║ ');  
   writeln(' ║ № ║ ФИО автора                     ╠════════════╦═══════════════╣ ');
   writeln(' ║   ║                                ║ до 2005 г. ║ после 2005 г. ║ ');
   writeln(' ╠═══╬════════════════════════════════╬════════════╬═══════════════╣');
   ecall:=0;
   for i:=1 to m do
   with arraycrt[i] do
    begin 
     writeln(' ║ ',i,' ║ ',autor_fio:30,' ║ ',d2005:10,' ║ ',p2005:13,' ║ '); 
     ecall:=ecall+d2005+p2005;
    end;
  writeln(' ╚═══╩════════════════════════════════╩════════════╩═══════════════╝ ');     
  writeln('Количество книг выпущенных издательством=',ecall);
 end;
readkey
end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
19.11.2020, 12:54
Помогаю со студенческими работами здесь

По списку товаров возвратить список авторов книг
Здравствуйте Допустим у нас есть бд для магазина, который продает: - книги (Book): название(Title) и автор (Author); - компакт-диски...

Вывести имеющуюся информацию о книгах в АЛФАВИТНОМ порядке авторов книг
В библиотеке хранится информация о наличии книг. Имеются следующие данные о каждой книге: инвентарный номер, фамилии авторов, название...

Определите функцию bookAuthors , которая по списку товаров возвращает список авторов книг
Реализуйте с помощью функций высшего порядка. В современных web-магазинах часто продают книги, видеокассеты и компакт-диски. База данных...

Выведите сумму страниц всех книг, фамилии авторов которых начинаются с буквы 'А'
Приведено целое число n и масса, содержащая n-элемент. Элементы массы-это записи, для которых являются компонентами․ книги на книжной...

Вывести список книг с фамилиями авторов в алфавитном порядке, изданных после заданного года
В общем, программка, в которую можно будет заносить книги, потом их сортировать. Суть сортировки:вывести список книг с фамилиями авторов...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru