Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
2 / 2 / 1
Регистрация: 06.10.2012
Сообщений: 16
1

Пузырьковая сортировка комплексных чисел

06.10.2012, 19:42. Показов 1793. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Мучаюсь пол дня. Опустила руки. Помогите, пожалуйста. задание стоит так: сгенерировать рандомный массив комплексных чисел, далее отсортировать пузырьком и выбором. Выводить в ListBox. Для рандома, для пузырька и для выборки по отдельной кнопке и по отдельному ListBox(у). Каждое число в новой строчке.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.10.2012, 19:42
Ответы с готовыми решениями:

Пузырьковая Сортировка
Доброго времени суток всем. Существует проблема. Некие точки на кривой создаются рекурсивно. Данные...

Пузырьковая сортировка
Дали задачу: "С клавиатуры вводят 10 названий фруктов. Расположите их в алфавитном порядке,...

Пузырьковая сортировка
Дан массив 10*10. Необходимо отсортировать массив по столбцам.

Пузырьковая сортировка массива
Здравствуйте.Подскажите пожалуйста как сортировать числа ввиденные в поле Memo?Например ввели...

7
6045 / 2160 / 753
Регистрация: 10.12.2010
Сообщений: 6,005
Записей в блоге: 3
06.10.2012, 20:18 2
Что именно у вас не выходит?
1
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
06.10.2012, 20:36 3
Сортировку комплексных чисел можно выполнять по их модулям. Например, пузырьковая сортировка комплексных чисел по возрастанию их модулей:
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
procedure TForm1.Button1Click(Sender: TObject);
type
  //Тип комплексного числа. Для наглядности при распечатке вещественная и мнимая
  //части принадлежат целому типу.
  TIm = record
    Re, Im : Integer; //Re - настоящая часть, Im - мнимая часть.
    A : Extended; //Модуль.
  end;
const
  M = 7;
var
  Arr : array[1..M] of TIm;
  Num : TIm;
  i, j : Integer;
  F : Boolean;
  S : String;
begin
  Memo1.Lines.Add('Исходный массив:');
  Randomize;
  S := '';
  for i := 1 to M do begin
    Arr[i].Re := Random(10); //0..10.
    Arr[i].Im := Random(10);
    Arr[i].A := Sqrt(Sqr(Arr[i].Re) + Sqr(Arr[i].Im));
    S := '(' + IntToStr(Arr[i].Re) + ' : ' + IntToStr(Arr[i].Im)
      + ' : ' + FormatFloat('0.00', Arr[i].A) + ')';
    Memo1.Lines.Add(S);
  end;
 
  //Сортировка массива методом пузырька по возрастанию модулей чисел.
  j := M;
  repeat
    F := True;
    Dec(j);
    for i := 1 to j do begin
      if Arr[i].A > Arr[i + 1].A then begin
        Num := Arr[i];
        Arr[i] := Arr[i + 1];
        Arr[i + 1] := Num;
        F := False;
      end;
    end;
  until F;
 
  Memo1.Lines.Add('Массив после сортировки по возрастанию:');
  S := '';
  for i := 1 to M do begin
    S := '(' + IntToStr(Arr[i].Re) + ' : ' + IntToStr(Arr[i].Im)
      + ' : ' + FormatFloat('0.00', Arr[i].A) + ')';
    Memo1.Lines.Add(S);
  end;
end;
1
2 / 2 / 1
Регистрация: 06.10.2012
Сообщений: 16
06.10.2012, 22:02  [ТС] 4
не выходит в принципе работать с комплексными числами. только с целочисленными. не могу вывести результат в листбокс построчно. не понимаю, почему процедура обработки пузырьковой сортировки в моей программе выдает ошибку: For loop control variable must be simple local variable, хотя все переменные я указала. спасибо за пример.
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
06.10.2012, 22:11 5
Цитата Сообщение от SonyaBers Посмотреть сообщение
For loop control variable must be simple local variable
Здесь написано: переменная управления в цикле FOR должна быть простой локальной переменной. Т. е. эта переменная должна быть описана в той же функции, где используется цикл.
Цитата Сообщение от SonyaBers Посмотреть сообщение
не могу вывести результат в листбокс построчно.
Делается также, как и в случае с TMemo:
Delphi
1
2
3
4
5
6
7
8
9
var
  S : String;
...
begin
...
  S := ...;
  ListBox1.Items.Add(S);
...
end;
TMemo.Lines, TListBox.Items - это потомки одного и того же класса - TStrings.
1
2 / 2 / 1
Регистрация: 06.10.2012
Сообщений: 16
06.10.2012, 22:18  [ТС] 6
вот то, что делала я. строчку a[j]:= tmp; подчеркивает красным и выдает следуещее:
For loop control variable must be simple local variable
For loop control variable must be simple local variable
Incompatible types: 'Integer' and 'Double'

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
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    ListBox1: TListBox;
    ListBox2: TListBox;
    Button2: TButton;
    ListBox3: TListBox;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
   a : array [1..50] of Integer;
   i, j : integer;
   tmp : double;
 
 
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
 
begin
  ListBox1.Clear;
  for i := 1 to 50 do ListBox1.Items.Add(IntToStr(Random(100) + 1));
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
For i := 1 to 50 do begin
    For j := 1 to i do
    begin
      if a[j] < a[j - 1] then
      begin
       tmp:=a[j - 1] ;
       a[j - 1]:= a[j];
       a[j]:= tmp;
      end;
    end;
 end;
 
    ListBox2.Items.Add(IntToStr((j) + 1));
end;
 
end.
Добавлено через 3 минуты
Это я знаю) но мне нужно, что бы мой отсортированный массив в листбоксе был в таком виде, например:
2
16
19
30
58
70
90
а как указать это, я не знаю. ListBox2.Items.Add(IntToStr(?));
0
13104 / 5885 / 1706
Регистрация: 19.09.2009
Сообщений: 8,808
06.10.2012, 22:50 7
Цитата Сообщение от SonyaBers Посмотреть сообщение
ListBox2.Items.Add(IntToStr(?));
Распечатку в ListBox надо сделать также как, например, у меня в постах выше было написано.
Delphi
1
2
3
4
5
6
7
8
9
10
11
var
  i : Integer;
  S : String;
begin
  ListBox2.Clear;
  for i := 1 to M do begin
    S := '(' + IntToStr(Arr[i].Re) + ' : ' + IntToStr(Arr[i].Im)
      + ' : ' + FormatFloat('0.00', Arr[i].A) + ')';
    ListBox2.Items.Add(S);
  end;
end;
Или, если только модули распечатывать, то так:
Delphi
1
2
3
4
5
6
7
var
  i : Integer;
begin
  ListBox2.Clear;
  for i := 1 to M do
    ListBox2.Items.Add(FloatToStr(Arr[i].A));
end;
Ещё раз напомню - описание переменных, которые используются, как счётчики циклах, следует перенести прямо в те процедуры, в которых имеются эти циклы.
---
Надо стремиться к тому, чтобы глобальных переменных было как можно меньше.
---
И пузырьковая сортировка неверно написана. - Надо написать так, как в моём сообщении сделано.

Добавлено через 18 минут
Вот так надо сделать:
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
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
type
  //Тип комплексного числа. Для наглядности при распечатке вещественная и мнимая
  //части принадлежат целому типу.
  TIm = record
    Re, Im : Integer; //Re - настоящая часть, Im - мнимая часть.
    A : Extended; //Модуль.
  end;
 
const
  M = 7;
 
var
  Arr : array[1..M] of TIm;
 
//Заполнение массива и распечатка в ListBox1.
procedure TForm1.Button1Click(Sender: TObject);
var
  i : Integer;
  S : String;
begin
  ListBox1.Clear;
  Randomize;
  for i := 1 to M do begin
    Arr[i].Re := Random(10); //0..10.
    Arr[i].Im := Random(10);
    Arr[i].A := Sqrt(Sqr(Arr[i].Re) + Sqr(Arr[i].Im));
    S := '(' + IntToStr(Arr[i].Re) + ' : ' + IntToStr(Arr[i].Im)
      + ' : ' + FormatFloat('0.00', Arr[i].A) + ')';
    ListBox1.Items.Add(S);
  end;
end; 
 
//Сортировка и распечатка в ListBox2.
procedure TForm1.Button2Click(Sender: TObject);
var
  Num : TIm;
  i, j : Integer;
  F : Boolean;
  S : String;
begin
  //Сортировка массива методом пузырька по возрастанию модулей чисел.
  j := M;
  repeat
    F := True;
    Dec(j);
    for i := 1 to j do begin
      if Arr[i].A > Arr[i + 1].A then begin
        Num := Arr[i];
        Arr[i] := Arr[i + 1];
        Arr[i + 1] := Num;
        F := False;
      end;
    end;
  until F;
  
  //Распечатка в ListBox2.
  ListBox2.Clear;
  for i := 1 to M do begin
    S := '(' + IntToStr(Arr[i].Re) + ' : ' + IntToStr(Arr[i].Im)
      + ' : ' + FormatFloat('0.00', Arr[i].A) + ')';
    ListBox2.Items.Add(S);
  end;
end;
 
end.
1
2 / 2 / 1
Регистрация: 06.10.2012
Сообщений: 16
06.10.2012, 23:37  [ТС] 8
большое спасибо) очень выручили.
0
06.10.2012, 23:37
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.10.2012, 23:37
Помогаю со студенческими работами здесь

Пузырьковая сортировка в Memo
Допустим в компонент Memo записываются от 10 до 50 случайных чисел в диапазоне от 0 до 255, при...

Пузырьковая сортировка с тремя переменными
Привет, есть программа. Вводя в неё несколько цифр, я получаю три числа и их нужно упорядочить по...

Задание комплексных чисел
Добрый день! Есть задача, реализовать метод Гаусса для комплексных чисел. Собственно вопрос: как...

Использование комплексных чисел
Делается программа для тестирования. т.е. есть edit, в который учеником вводится число, после чего...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru