Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34

Загрузить массив чисел из файла, и отсортировать его пузырьком

15.11.2017, 16:22. Показов 1253. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте уважаемые! "Пишу" программу, суть такая: есть файл, в нем массив чисел (ниже приведу), его надо загрузить и отсортировать пузырьком. Нет ни каких ограничений и других условий. Пока я дошел до того, что загружаю массив в memo1 а в memo2 вывожу цифры из массива без запятых. Как я понимаю, мне нужно в программе объявить массив и набить его цифрами. Пока не получается сделать это. Ниже привожу код того что у меня получилось, и цифры из файла.

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
procedure TForm1.Button1Click(Sender: TObject);
const DelSym = '.,!?';
var
a: array of integer;
s: string;
sl: TStringList;
i: Integer;
begin
  if OpenDialog1.Execute then
    begin
    sl:=TStringList.Create;
    sl.LoadFromFile(OpenDialog1.FileName);
    s:=sl.Text;
    sl.Destroy;
    memo1.Lines.text:=s;
    Memo2.Clear;
    s:=Memo1.Lines.Text;
 
      for i := 1 to Length(s) do
      if s[i] = ',' then
      Delete(s,i,1);
      For i:= 1 to Length(s) do
      if s[i] = '0..9' then
      a[i]:=StrToInt(s) else
      Delete(s,i,1);
    end;
    Memo2.Lines.text:=IntToStr(a[1]);
end;
end.
Кликните здесь для просмотра всего текста
73, 327, 360, 469, 517, 522, 813, 128, 792, 856, 664, 93, 337, 977, 106, 917, 565, 883, 627, 209, 148, 834, 715, 122, 148, 399, 297, 473, 321, 466, 889, 431, 230, 128, 688, 932, 10, 146, 104, 247, 900, 857, 448, 379, 903, 995, 772, 199, 177, 87


На данный момент в мемо2 вывожу любой индекс массива, просто что-бы убедиться что массив заполняется верно. Но программа крашится.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.11.2017, 16:22
Ответы с готовыми решениями:

Считать массив из файла и отсортировать его. Отсортированный массив сохранить в файл
Создать одномерный массив. Сохранить его в файл. Считать массив из файла и отсортировать его. Отсортированный массив сохранить в файл.

Отсортировать массив по возрастанию пузырьком
отсортировать массив по возрастанию пузырьком,и если будет время то как отсортировать каждую строку массива по возрастанию. тут что-то...

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

13
Модератор
 Аватар для D1973
9903 / 6441 / 2454
Регистрация: 21.01.2014
Сообщений: 27,341
Записей в блоге: 3
15.11.2017, 17:42
Ebrilo, а вот прямо обязательно массив и сортировку пузырем? Я к тому, что:
1. Массив Вы нигде не создаете (не выделяете память под динамический массив, если точнее), но пытаетесь с ним оперировать, вот Вам и AV
2. Сортировку полученных чисел гораздо быстрее и эффективнее провести с помощью метода CustomSort самого СтрингЛиста.
1
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
15.11.2017, 17:46  [ТС]
D1973, Большое спасибо за ответ, сортировать пузырьком обязательно, это часть задания.

Собственно вот само задание:
Кликните здесь для просмотра всего текста
Написать программу для сортировки массива из 50 элементов методом “пузырьковой” сортировки (Bubble Sort) или прямого выбора (Select Sort) (по вариантам). Массив считать из файла. Вывести на экран трудоемкость метода (количество сравнений).


Я не прошу готовый код, хочу сделать сам. Просто прошу направить меня на верный путь))).

1. Понял, сейчас этим займусь.
2. Быстрее и эффективнее провести чем что?
0
Модератор
 Аватар для D1973
9903 / 6441 / 2454
Регистрация: 21.01.2014
Сообщений: 27,341
Записей в блоге: 3
15.11.2017, 17:59
Цитата Сообщение от Ebrilo Посмотреть сообщение
Быстрее и эффективнее провести чем что?
Сортировку провести методом CustomSort быстрее и эффективнее, чем пузырем... Вот пример
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
uses ..., Math;
...
 
function Sorter(SL : TStringList; Index1, Index2 : integer) : integer;
begin
 result := CompareValue(StrToInt(SL.Strings[Index1]), StrToInt(SL.Strings[Index2]));
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var s: String;
    L: TStringList;
begin
 if not OpenDialog1.Execute then Exit;
 L := TStringList.Create;
 L.LoadFromFile(OpenDialog1.FileName);
 s := L.Text;
 L.CommaText := s;
 Memo1.Text := L.Text;
 L.CustomSort(Sorter);
 Memo2.Text := L.Text;
 L.Free;
end;
Миниатюры
Загрузить массив чисел из файла, и отсортировать его пузырьком  
1
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
15.11.2017, 18:12  [ТС]
Хм, не компилируется...
[Error] Unit1.pas(45): Incompatible types: 'regular procedure and method pointer'
0
Модератор
 Аватар для D1973
9903 / 6441 / 2454
Регистрация: 21.01.2014
Сообщений: 27,341
Записей в блоге: 3
15.11.2017, 18:17
Цитата Сообщение от Ebrilo Посмотреть сообщение
Хм, не компилируется...
Вы что, функцию Sorter методом класса формы сделали, что ли? Где Вы в моем примере такое увидели?
0
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
15.11.2017, 18:23  [ТС]
D1973, Ого, оказывается так тоже можно...Даже и не знал. Я думал что все функции и процедуры сначала нужно объявить, а потом нажать ctrl+shift+c и уже там делать всякие штуки. Спасибо большое, от компилировалось.
0
 Аватар для Qwetyui
30 / 31 / 20
Регистрация: 30.12.2015
Сообщений: 340
15.11.2017, 18:25
Лучший ответ Сообщение было отмечено Ebrilo как решение

Решение

Delphi
1
2
3
4
5
6
7
8
for i := 0 to memo1.lines.count - 1 do
  for j := i + 1 to memo1.lines.count - 1 do
    if compare(memo1.lines[i], [memo1.lines[j]]) then
    begin
      tmp := memo1.lines[i];
      memo1.lines[i] := memo1.lines[j];
      memo1.lines[j] := tmp;
    end;
Добавлено через 35 секунд
Упс, извинияюсь за готовый код

Добавлено через 23 секунды
Догадайтесь хоть, как его доделать до продакшна
1
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
15.11.2017, 18:50  [ТС]
Qwetyui, очень интересно, но компилятор не знает что такое Compare
0
 Аватар для Qwetyui
30 / 31 / 20
Регистрация: 30.12.2015
Сообщений: 340
15.11.2017, 18:56
Ebrilo, вот вам задачка) Но вообще это должна быть ваша ф-ия, принимающая две строки, а возвращающая boolean (true - если первая должна быть выше, false - если ниже)

Вот решение (но прежде чем открыть, лучше подумайте сами)
Кликните здесь для просмотра всего текста

Delphi
1
2
3
4
function compare(a, b: string): boolean;
begin
  result := strtoint(a) > strtoint(b);
end;


Добавлено через 1 минуту
И третью строку
вместо
Delphi
1
if compare(memo1.lines[i], [memo1.lines[j]]) then
заменить на
Delphi
1
if compare(memo1.lines[i], memo1.lines[j]) then
(моя очепятка)
1
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
15.11.2017, 19:09  [ТС]
Qwetyui, Программа компилируется, но крашится))). Сложна....

Кликните здесь для просмотра всего текста
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
function compare(a, b: string): boolean;
begin
  result := strtoint(a) > strtoint(b);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
 
var
  i, j: integer;
  sl: TStringList;
  s: string;
  tmp: string;
begin
  if OpenDialog1.Execute then
  sl:=TStringList.Create;
  sl.LoadFromFile(OpenDialog1.FileName);
  s:=sl.Text;
  sl.CommaText:=s;
  memo1.Text:=s;
    for i := 0 to memo1.lines.count - 1 do
      for j := i + 1 to memo1.lines.count - 1 do
        if compare(memo1.lines[i], (memo1.lines[j])) then
        begin
          tmp := memo1.lines[i];
          memo1.lines[i] := memo1.lines[j];
          memo1.lines[j] := tmp;
        end;
end;
Миниатюры
Загрузить массив чисел из файла, и отсортировать его пузырьком  
0
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
15.11.2017, 21:21  [ТС]
Вот это да, сейчас до полнил код, понял где затупил (надеюсь), и когда увидел как заполняются мемо аж дух захватило))))

И еще по заданию было сказано вывести количество сравнений, я просто в цикл добавил Inc(k) и после цикла ShowMessage(IntToStr(k))

Вот готовый код, надеюсь я все правильно сделал:

Кликните здесь для просмотра всего текста
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
function compare(a, b: string): boolean;
begin
  result := strtoint(a) > strtoint(b);
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var s,tmp: String;
    L: TStringList;
    i,j,k: integer;
begin
 if not OpenDialog1.Execute then Exit;
 L := TStringList.Create;
 L.LoadFromFile(OpenDialog1.FileName);
 s := L.Text;
 L.CommaText := s;
  Memo1.Text := L.Text;
 for i := 0 to memo1.lines.count - 1 do
  for j := i + 1 to memo1.lines.count - 1 do
    if compare(memo1.lines[i], (memo1.lines[j])) then
    begin
      inc(k);
      tmp := memo1.lines[i];
      memo1.lines[i] := memo1.lines[j];
      memo1.lines[j] := tmp;
    end;
 
 Memo2.Text := L.Text;
 L.Free;
 ShowMessage(IntToStr(k));
end;
0
 Аватар для Qwetyui
30 / 31 / 20
Регистрация: 30.12.2015
Сообщений: 340
16.11.2017, 07:27
Ebrilo, Срочно напишите в начале события k := 0; Иначе вам препод поставит незач за 4 млрд сравнений)
1
0 / 0 / 0
Регистрация: 01.04.2016
Сообщений: 34
16.11.2017, 10:23  [ТС]
Qwetyui, Сравнений всего 600 с чем то) Но большое спасибо)))
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.11.2017, 10:23
Помогаю со студенческими работами здесь

прочитать массив из файла и отсортировать его по возрастанию
Доброго времени суток! у меня такая задача... прочитать массив из файла и отсортировать его по возрастанию. Все значения целые и по модулю...

Одномерный массив с клавиатуры, отсортировать пузырьком
Здравствуйте, помогите написать вот такую программу. Заполнить одномерный массив с клавиатуры. Отсортировать одномерный массив в порядке...

Отсортировать массив по убыванию (вставками, пузырьком, выбором)
Создайте массив из 10 случайных чисел (числа должны быть в диапазоне от 0 до 1000) и отсортируйте массив по убыванию при помощи...

Отсортировать пузырьком вставками и своей сортировкой массив
Разработать приложение демонстрирующее работу с одномерный массивом, заполнение массива на форме DateGridView. Отсортировать пузырьком...

Cгенерировать одномерный массив из 10 чисел,отсортировать его по возрастанию или убыванию
Суть собственно в чем, я полный чайник и задача мне нужна написанная самым простым языком, помогите кто-нибудь если сможете, а то я совсем...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 05.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 17.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru