Форум программистов, компьютерный форум, киберфорум
PascalABC.NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/9: Рейтинг темы: голосов - 9, средняя оценка - 5.00
 Аватар для mintcat
0 / 0 / 0
Регистрация: 31.07.2020
Сообщений: 6

Ошибка в сортировке массива по алфавиту

11.09.2020, 10:51. Показов 1865. Ответов 2
Метки нет (Все метки)

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


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
Program books;
type note = record //Набор сведений о книгах
     author, title: string[20];  //фамилия автора, название книги
     year, price: integer; //год издания, цена
end;
const n=5;
var F: file of note;
    note0, note1, note2, note3, note4: note;
    notes: array[0..n] of note;
    i: integer;
    year1:1000..2050;
    min:string;
procedure sort(F:file of note);
var i, j, ind: integer;
    k: string;
begin
  for i:=0 to n-1 do begin // i указывает на 1 позицию
    for j:=i+1 to n do begin // j указывает на 2 позицию
     if notes[j].author<min then  // если j меньше минимума
        begin
        min:=notes[j].author; // присваиваем минимум
        ind:=j;      // запоминаем позицию
        end;
     end;
    if notes[i].author>min then begin // если i больше мин то мы меняем местами
       k:=notes[i].author;
       notes[i].author:=notes[ind].author; // возвращаем на позицию arr ind
       notes[ind].author:=k;
    end;
  end;
end;
begin
//Создание типизированного файла kat.dat
   Assign(F,'kat.dat'); //установка связи между переменной F и файлом kat.dat
   Rewrite(F); //создание и открытие файла F для записи
   //создание переменных
   note0.Author:='Чехов';  //заполнение поля "автор"
   note0.Year:=2018;   //заполнение поля "год"
   note0.Price:=900;   //заполнение поля "цена"
   note0.Title:='Вишнёвый сад'; //заполнение поля "название"
   note1.Author:='Пушкин';
   note1.Year:=2018;
   note1.Price:=850;
   note1.Title:='Борис Годунов';
   note2.Author:='Островский';
   note2.Year:=2016;
   note2.Price:=570;
   note2.Title:='Бесприданница';
   note3.Author:='Тургенев';
   note3.Year:=2016;
   note3.Price:=180;
   note3.Title:='Отцы и дети';
   note4.Author:='Гончаров';
   note4.Year:=2018;
   note4.Price:=800;
   note4.Title:='Обломов';
   //запись созданных переменных в компоненты файла
   Write(F, note0);
   Write(F, note1);
   Write(F, note2);
   Write(F, note3);
   Write(F, note4);
   Close(F); //закрытие файла
//конец создания типизированного файла kat.dat
begin
   assign(F, 'kat.dat'); //установка связи между переменной F и файлом kat.dat
   reset(F); //открытие файла
   writeln('Введите запрашиваемый год издания ');
   readln(year1);
   //вывод исходных данных в виде таблицы
   writeln('Список книг ',year1,' года издания'); //вывод на экран поясняющей надписи
   writeln('---------------------------------------------------');
   writeln('|    АВТОР   |      НАЗВАНИЕ     |   ГОД   |  ЦЕНА |'); //вывод заголовка таблицы
   writeln('---------------------------------------------------');
   for i:=1 to n do begin //начало цикла для вывода файла
    Read(F, notes[i]); //считывание компоненты файла
    //вывод на экран
    begin
      if (notes[i].Year=year1) then begin
        sort(F);
        write('|',notes[i].Author:10,'  | ',notes[i].Title:17,' |  ',notes[i].Year:3,'   |',notes[i].Price:7,'|');
        writeln();
        writeln('---------------------------------------------------');
      end; //конец цикла для вывода файла
      {else begin
        writeln('Книги за ',year1, ' год не найдены');
        readln;
      end;}
    end;
   end;
   Close(F);
end;
end.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
11.09.2020, 10:51
Ответы с готовыми решениями:

ошибка в сортировке массива
Здравствуйте, помогите пожалуйста исправить ошибку Жалуется на скобку Задание: Нужен код сортировки массива методом...

Ошибка в сортировке массива
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;time.h&gt; using namespace std; const int nmax = 100; //Функция создает...

Ошибка в сортировке массива
Нужно разделить данные массива А. В массив В перенести все элементы массива А, которые &gt;0, в масив С - те, которые &lt;0. Это я сделал. ...

2
Почетный модератор
 Аватар для Puporev
64315 / 47611 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
11.09.2020, 13:16
Лучший ответ Сообщение было отмечено mintcat как решение

Решение

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
const n=5;
type note = record //Набор сведений о книгах
            author, title: string[20];  //фамилия автора, название книги
            year, price: integer; //год издания, цена
            end;
mas=array[1..n] of note;
 
procedure sort(var notes:mas;m:integer);
var x:note;
begin
for var i:=1 to m-1 do
for var j:=i+1 to m do 
if notes[i].author>notes[j].author then  // если j меньше минимума
 begin
  x:=notes[i];
  notes[i]:=notes[j];
  notes[j]:=x;
 end;
end;
var F: file of note;
    x:note;
    notes:mas;
    year:1900..2020;
    m:integer;
begin
//Создание типизированного файла kat.dat
assign(F,'kat.dat'); //установка связи между переменной F и файлом kat.dat
rewrite(F); //создание и открытие файла F для записи
//создание переменных
x.Author:='Чехов';  //заполнение поля "автор"
x.Year:=2018;   //заполнение поля "год"
x.Price:=900;   //заполнение поля "цена"
x.Title:='Вишнёвый сад'; //заполнение поля "название"
write(F,x);
x.Author:='Пушкин';
x.Year:=2018;
x.Price:=850;
x.Title:='Борис Годунов';
write(F,x);
x.Author:='Островский';
x.Year:=2016;
x.Price:=570;
x.Title:='Бесприданница';
write(F,x);
x.Author:='Тургенев';
x.Year:=2016;
x.Price:=180;
x.Title:='Отцы и дети';
write(F,x);
x.Author:='Гончаров';
x.Year:=2018;
x.Price:=800;
x.Title:='Обломов';
write(F,x);
//конец создания типизированного файла kat.dat
reset(F); //открытие файла
repeat
writeln('Введите запрашиваемый год издания от 1000 до 2050');
readln(year);
until(year>=1000)and(year<=2020);
//поиск данных по запросу
m:=0;
while not eof(F)do
 begin
  read(F,x);
  if x.year=year then
   begin
    inc(m);
    notes[m]:=x;
   end;
 end;
close(F);
if m=0 then writeln('Книги за ',year, ' год не найдены')
else
 begin
  if m>1 then sort(notes,m);  
 //вывод найденных книг в виде таблицы
  writeln('Список книг ',year,' года издания'); //вывод на экран поясняющей надписи
  writeln('----------------------------------------------------');
  writeln('|    АВТОР   |      НАЗВАНИЕ     |   ГОД   |  ЦЕНА |'); //вывод заголовка таблицы
  writeln('----------------------------------------------------');
  for var i:=1 to m do  //начало цикла для вывода файла
   begin
    write('|',notes[i].Author:12,'|',notes[i].Title:19,'|',notes[i].Year:9,'|',notes[i].Price:7,'|');
    writeln;
    writeln('---------------------------------------------------');
   end; 
 end; //конец цикла для вывода файла
  
end.
1
 Аватар для JuriiMW
5095 / 2661 / 2355
Регистрация: 10.12.2014
Сообщений: 10,060
11.09.2020, 13:26
Лучший ответ Сообщение было отмечено mintcat как решение

Решение

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
const
  fname = 'kat.dat';
  
type
  note = record //Набор сведений о книгах
    author, title: string[20];  //фамилия автора, название книги
    year, price: integer; //год издания, цена
  end;
 
procedure CreateFile;
begin
   var F : file of note;
   Rewrite(F, fname);
   
   var n : note;
   n.Author := 'Чехов'     ; n.Year := 2018; n.Price := 900; n.Title := 'Вишнёвый сад' ; f.Write(n);
   n.Author := 'Пушкин'    ; n.Year := 2018; n.Price := 850; n.Title := 'Борис Годунов'; f.Write(n);
   n.Author := 'Островский'; n.Year := 2016; n.Price := 570; n.Title := 'Бесприданница'; f.Write(n);
   n.Author := 'Тургенев'  ; n.Year := 2016; n.Price := 180; n.Title := 'Отцы и дети'  ; f.Write(n);
   n.Author := 'Гончаров'  ; n.Year := 2018; n.Price := 800; n.Title := 'Обломов'      ; f.Write(n);
   
   f.Close;
end;
 
function ReadFile : array of note;
begin
  var f : file of note;
  Reset(f, fname);
  SetLength(Result, f.Size);
  for var i := 0 to f.Size-1 do
    Result[i] := f.Read;
  f.close;
end;
  
begin
  CreateFile;
  
  var a := ReadFile;
  
  var year := ReadLnInteger('Введите запрашиваемый год издания:');
  var t := a.where(x->x.year = year);
  if t.count = 0 then
    $'Нет книг издания {year} года.'.Println
  else
    begin
      var u := t.OrderBy(x->string(x.author));
      $'Список книг {year} года издания'.Println;
      ('-'*50).Println;
      '|    АВТОР   |      НАЗВАНИЕ     |  ГОД  |  ЦЕНА |'.Println;
      ('-'*50).Println;
      foreach var x in u do
        $'| {x.author,-10} | {x.title,-17} | {x.year,4}  | {x.price,5} |'.Println;
    end;
end.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
11.09.2020, 13:26
Помогаю со студенческими работами здесь

Ошибка в сортировке массива
#include &lt;cmath&gt; #include &lt;iostream&gt; using namespace std; void sort(int n); void swap(int *p1,int *p2); int a; int main(){ ...

Ошибка в сортировке массива (Векторного)
Не могу понять в чем я ошибся, он сортирует все элементы, но первый элемент остается не на своем месте: если не трудно, скажите где...

Ошибка в задаче по сортировке массива в C++
Здравствуйте, помогите, пожалуйста, разобраться в чем ошибка? По заданию необходимо &quot;найти последний положительный элемент массива,...

Ошибка в сортировке\выводе массива
Помогите исправить ошибку в программе. Задание: В квадратной матрице 3х3 поменять местами столбец, имеющий наибольший элемент со...

Ошибка в сортировке массива по убыванию
Подскажите в чем ошибка, сортирую массив по убыванию #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; ...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла: Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Данные берутся из. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru