Форум программистов, компьютерный форум, киберфорум
Наши страницы
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
 
cappucci_no
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 2
1

Нужно сортировать записи по фамилиям в 1 столбце, которые должны быть расположены в алфавитном порядке

Сегодня, 00:43. Просмотров 79. Ответов 3

Полное условие задачи:
Разработайте программу ввода исходных данных из текстового файла в массив записей. Исходные данные и необходимые результаты представьте на форме с помощью подходящих компонентов и запишите в текстовый файл. Требуемые функции выбирается с помощью меню.

Сведения о книгах в библиотеке:
- фамилия автора;
- название книги;
- издательство;
- год издания;
- цена.
Выведите сведения о книгах в библиотеке данного года издания с ценой не более 10 руб. в алфавитном порядке фамилий авторов.
На данный момент я застрял на том, что надо расположить фамилии авторов в алфавитном порядке.
Я смог расположить сами фамилии в нужном порядке, но не получилось вместе с ними переместить другие строки на нужные места.

Архив с моими "успехами" прикреплен ниже.

Полный код:
Delphi
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
unit Unit1;
{Сведения о книгах в библиотеке}
interface
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, Menus, StdCtrls;
const
  n = 6;
type
  TForm1 = class(TForm)
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N2: TMenuItem;
    N3: TMenuItem;
    N4: TMenuItem;
    N5: TMenuItem;
    N6: TMenuItem;
    N7: TMenuItem;
    OpenDialog1: TOpenDialog;
    SaveDialog1: TSaveDialog;
    StringGrid1: TStringGrid;
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    procedure N3Click(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N7Click(Sender: TObject);
  end;
  books = record
    fam: string[30]; //фамилия автора
    name: string[30]; //название книги
    izd: string[30]; // издательство
    year, cost: string[4]; //год издания
  end;
var
  Form1: TForm1;
  bks: array[1..n] of books; //массив книг
  a: array[1..n] of string;
  k: integer; //кол-во авторов
implementation
{$R *.dfm}
 
procedure TForm1.N4Click(Sender: TObject);
//Чтение информации о книгах
var
  i: integer;
  fl: textfile;
begin
  if opendialog1.Execute then
  begin
    assignfile(fl, opendialog1.FileName);
    reset(fl);
    readln(fl, k);
    with stringgrid1 do
    begin
      ColCount := k;
      width := k * 110;
      rowcount := k + 1;
      if k < 16 then
        height := 27 * (k + 1)
      else
        height := 27 * 15;
      ColWidths[1] := 100;
      ColWidths[2] := 150;
      ColWidths[3] := 100;
      ColWidths[4] := 100;
      ColWidths[5] := 100;
      cells[0, 0] := 'Номер';
      cells[1, 0] := 'Фамилия';
      cells[2, 0] := 'Название книги';
      cells[3, 0] := 'Издательство';
      cells[4, 0] := 'Год издания';
      cells[5, 0] := 'Цена';
    end;
    for i := 1 to n do
      with stringgrid1, bks[i] do
      begin
        readln(fl, fam);
        readln(fl, name);
        readln(fl, izd);
        readln(fl, year);
        readln(fl, cost);
        a[i] := fam;
        cells[0, i] :=IntToStr(i);
        cells[1, i] := trimleft(fam);
        cells[2, i] := trimleft(name);
        cells[3, i] := trimleft(izd);
        cells[4, i] := trimleft(year);
        cells[5, i] := trimleft(cost);
      end;
  end;
  closefile(fl);
end;
 
procedure TForm1.N3Click(Sender: TObject);
//Выход
begin
  close;
end;
 
procedure TForm1.N5Click(Sender: TObject);
//Запись в файл результатов обработки
var
  fl: textfile;
  i, j: integer;
begin
  if savedialog1.Execute then
  begin
    assignfile(fl, savedialog1.FileName);
    rewrite(fl);
    for i := 1 to stringgrid1.RowCount do
    begin
      for j := 1 to stringgrid1.ColCount do
        case j of
          1: write(fl, stringgrid1.Cells[j - 1, i - 1]: 6);
          2..4: write(fl, stringgrid1.Cells[j - 1, i - 1]: 16)
        else
          write(fl, stringgrid1.Cells[j - 1, i - 1]: 6);
        end;
      writeln(fl);
    end
  end;
  closefile(fl);
end;
//Сортировка авторов в нужном порядке
procedure TForm1.N7Click(Sender: TObject);
var
  x: string;
  i, j: Integer;
begin
  for i := 1 to n - 1 do
    for j := i + 1 to n do
      if a[j] < a[i] then
      begin
        x := a[i];
        a[i] := a[j];
        a[j] := x;
      end;
    for j := 1 to n do
    begin
      StringGrid1.Cells[1, j] := a[j];
    end;
end;
 
end.
0
Вложения
Тип файла: rar archive.rar (187.3 Кб, 6 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
Сегодня, 00:43
Ответы с готовыми решениями:

Не могу найти компоненты, которые должны быть в Indy
Здравствуйте. Подскажите новичку, установил Делфи Берлин. Версия полная, но почему то не могу найти...

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

Напечатать в алфавитном порядке все согласные, которые не входят ни в одно из слов
Ребят, ну помогите... Мне не нужен совершенно другой вариант решения этой задачи. Просто...

Напечатать в алфавитном порядке все гласные буквы, которые входят в каждое слово
Дан текст, состоящий из слов, содержащих только строчные русские буквы; между соседними словами –...

Напечатать в алфавитном порядке все согласные буквы, которые не входят в каждое слово
Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая,...

3
Verevkin
Нарушитель
1119 / 622 / 159
Регистрация: 12.03.2015
Сообщений: 4,100
Сегодня, 00:52 2
Цитата Сообщение от cappucci_no Посмотреть сообщение
Разработайте программу ввода исходных данных из текстового файла в массив записей. Исходные данные и необходимые результаты представьте на форме с помощью подходящих компонентов и запишите в текстовый файл.
Ну тут прям точно напрашивается TVirtualStringTree. Этот компонент для данной задачи подходит просто идеально. Фтопку StringGrid!
1
D1973
Модератор
3647 / 2627 / 1282
Регистрация: 21.01.2014
Сообщений: 11,108
Записей в блоге: 3
Завершенные тесты: 1
Сегодня, 08:28 3
Цитата Сообщение от cappucci_no Посмотреть сообщение
На данный момент я застрял на том, что надо расположить фамилии авторов...
Нет, Вы застряли где-то в самом начале...
1.
У Вас задание дословно именно такое, как Вы написали в стартовом топике?
Цитата Сообщение от cappucci_no Посмотреть сообщение
из текстового файла в массив записей
Что за чушь!? Если Вы используете массив записей - то и файл должен быть не текстовый, а типизированный. А если же файл текстовый - нахрена вообще какие-то записи и, тем более, их массивы?
2. Ладно, предположим, скрестим ежа и ужа... А что, в Вашей библиотеке только 6 книг? Больше нельзя? А если 7-я придет, то программу переписывать? Я это к тому, что массив динамический должен быть!
3. Ну, тоже ладно, пусть у нас будет библиотека современного тинейджера... Но вот Вы открыли файл, считали одну строку и вот тут вопрос:
Цитата Сообщение от cappucci_no Посмотреть сообщение
if k < 16 then height := 27 * (k + 1) else height := 27 * 15;
Вот что это за магические числа: 16, 27, 15?
4. А потом? Что это вообще за массив a[], на кой ляд он нужен? Вы зачем-то заносите туда только поле fam каждой записи и потом его сортируете... Зачем? У Вас задача отсортировать массив записей по определенному полю, вот и сортируйте свой массив bks[] по полю fam, при чем тут какой-то a[]???
5. А что там за чепуха в сохранении? Вы понимаете, что тот файл, который Вы читали изначально и тот файл, который Вы получаете на выходе - они должны различаться только порядком следования записей, чтобы в дальнейшем Вы могли взять получившийся выходной файл и снова открыть его в своей программе. А у Вас что? Полнейшее пренебрежение форматом файла, в результате чего Ваш файл программно открыть более не получится...

Не по теме:

Вообще такая задача решается, при нормально созданном текстовом файле, безо всяких массивов записей в 15 строк.
Если использовать обычные типизированные файлы и массив записей - строк в 20...

1
cappucci_no
0 / 0 / 0
Регистрация: 28.11.2018
Сообщений: 2
Сегодня, 12:12  [ТС] 4
Цитата Сообщение от D1973 Посмотреть сообщение
5. А что там за чепуха в сохранении? Вы понимаете, что тот файл, который Вы читали изначально и тот файл, который Вы получаете на выходе - они должны различаться только порядком следования записей, чтобы в дальнейшем Вы могли взять получившийся выходной файл и снова открыть его в своей программе. А у Вас что? Полнейшее пренебрежение форматом файла, в результате чего Ваш файл программно открыть более не получится...
Да, да знаю. С сохранением еще не работал.
Цитата Сообщение от D1973 Посмотреть сообщение
4. А потом? Что это вообще за массив a[], на кой ляд он нужен? Вы зачем-то заносите туда только поле fam каждой записи и потом его сортируете... Зачем? У Вас задача отсортировать массив записей по определенному полю, вот и сортируйте свой массив bks[] по полю fam, при чем тут какой-то a[]???
Дело было поздно) Видимо я уже поплыл. И вправду зачем мне этот массив. Пойду гуглить как сортировать массив записей по определенному полю. Спасибо за помощь!
Цитата Сообщение от D1973 Посмотреть сообщение
Вообще такая задача решается, при нормально созданном текстовом файле, безо всяких массивов записей в 15 строк.
Если использовать обычные типизированные файлы и массив записей - строк в 20...
Да, я решал это с ini файлами, но сказали, что так нельзя и иди мол мучайся с текстовыми.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
Сегодня, 12:12

Напечатать в алфавитном порядке все гласные буквы, которые входят в последнее слово
помогите написать код,текст задан строкой, напечатать в алфавитном порядке Все гласные буквы,...

Напечатать в алфавитном порядке все гласные буквы которые входят в нечетные слова
Дана непустая последовательность слов из строчных русских букв; между соседними словами - запятая,...

Напечатать в алфавитном порядке все гласные буквы, которые входят в четные слова.
Пожалуйста,помогите( Дана непустая последовательность слов из строчных русских букв; между...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru