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

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

13.11.2020, 18:09. Показов 2049. Ответов 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
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
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
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,168
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
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и напряжениями. Надо найти токи в ветвях. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и решает её. Последовательность действий:. . .
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru