Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.12.2008, 23:08   #1
#Nii
Пользователь
 
Аватар для #Nii
 
Регистрация: 16.10.2008
Сообщений: 11
По умолчанию Помогите - Сортировка методом пузырька Delphi

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

вот исходник читания из файла

Код:
// просмотр-редактирование текстового файла
unit rd1_;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Buttons;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

// щелчок на кнопке Открыть
procedure TForm1.Button1Click(Sender: TObject);
var
   f: TextFile;       // файл
   fName: String[80]; // имя файла
   buf: String[80];   // буфер для чтения строк

begin
   if not OpenDialog1.Execute
    then { пользователь закрыл диалог
           щелчком на кнопе Отмена }
         exit;

   // пользователь выбрал файл
   fName := OpenDialog1.FileName;
   Form1.Caption := fName;
   AssignFile(f, fName);

   try
       Reset(f);  // открыть для чтения
   except
        on EInOutError do
        begin
            ShowMessage('Ошибка доступа к файлу '+
                            fName);
            exit;
        end;
   end;

   // чтение из файла
   while not EOF(f) do
     begin
        readln(f, buf);       // прочитать строку из файла
        Memo1.Lines.Add(buf); // добавить строку в поле Memo1
     end;

   CloseFile(f); // закрыть файл
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
    // Определим фильтр
    OpenDialog1.Filter := 'Текст|*.txt';
end;

end.


А вот исходник программы пузырька

Код:
type
 TIntVec = array of Integer; 
...
procedure BubbleSort(var a: TIntVec);
 var i,p,n: Integer; b: boolean;
begin
 n:= Length(a)-1;
 if n < 1 then exit;
 repeat
  b:= true;
  Dec(n);
  for i:= 0 to n do
   if a[i] > a[i+1] then
    begin
     p:= a[i];
     a[i]:= a[i+1];
     a[i+1]:= p;
     b:= false;
    end;
 until b;
end;
Только вот незнаю как соединить их, чтоб работало

Помогите пожалуйста!
#Nii вне форума Ответить с цитированием
Старый 19.12.2008, 02:07   #2
dante
Новичок
Джуниор
 
Регистрация: 18.12.2008
Сообщений: 2
По умолчанию

есть на паскале,делфи нету(
dante вне форума Ответить с цитированием
Старый 20.12.2008, 00:06   #3
#Nii
Пользователь
 
Аватар для #Nii
 
Регистрация: 16.10.2008
Сообщений: 11
По умолчанию

dante
Ну дай на паскале, мне главное что было на Visual, сойдет даже Visual C и Visual Basic
#Nii вне форума Ответить с цитированием
Старый 20.12.2008, 23:40   #4
#Nii
Пользователь
 
Аватар для #Nii
 
Регистрация: 16.10.2008
Сообщений: 11
По умолчанию

Есть на VBasic
Код:
'На форме одна кнопка. Подключаем в референсах библиотеку Microsoft Scripting Runtime 
'Допустим что входной файл престаляет собой строку вида 3,22,66,44,88,,23,97,345,321 
Private Sub Command1_Click() 
  Dim MyArrStr() As String 
  Dim MyArr() As Long 
  Dim sStr As String 
  Dim i As Long 
   
  'Читаем из файла 
  sStr = MyRead("in.txt") 
  'Получаем массив строк 
  MyArrStr = Split(sStr, ",") 
  i = 0 
  ReDim MyArr(i) 
  'Преобразуем в массив Long 
  For i = LBound(MyArrStr) To UBound(MyArrStr) 
    ReDim Preserve MyArr(i) 
    MyArr(i) = CLng(MyArrStr(i)) 
  Next i 
  'Сортируем 
  Call Sort(MyArr) 
  'Собираем строку (чтоб вид бил как у входного файла) 
  sStr = "" 
  For i = LBound(MyArr) To UBound(MyArr) 
    MyArrStr(i) = CStr(MyArr(i)) 
    sStr = sStr & MyArrStr(i) 
    If i <> UBound(MyArr) Then sStr = sStr & "," 
  Next i 
  'Записываем файл 
  Call MyWrite(sStr, "out.txt") 
End Sub 

Private Sub Sort(Mus() As Long) 
  Dim n As Long, i As Long, j As Long, tmp  As Long 
  i = 0 'немного подправил, чтоб начинало с 0 
  Do While i < UBound(Mus) 
    If Mus(i) > Mus(i + 1) Then 
      tmp = Mus(i) 
      Mus(i) = Mus(i + 1) 
      Mus(i + 1) = tmp 
      If i > 1 Then 
        i = i - 1 
      Else 
        i = i + 1 
      End If 
    Else 
      i = i + 1 
    End If 
  Loop 
End Sub 

'Процедура записи, используется FSO 
Private Sub MyWrite(MyStr As String, outFile As String) 
Dim fsoSave As New FileSystemObject 
Dim filSave As TextStream 
Set filSave = fsoSave.CreateTextFile(App.Path & "\" & outFile, True) 
filSave.WriteLine (MyStr) 
filSave.Close 
End Sub 

'Процедура чтения, используется FSO 
Private Function MyRead(inFile As String) As String 
Dim fsoSave As New FileSystemObject 
Dim filSave As TextStream 
Set filSave = fsoSave.OpenTextFile(App.Path & "\" & inFile) 
MyRead = filSave.ReadLine 
filSave.Close 
End Function

только он у меня не запускается, как образом не пойму

И еще незнаю как сделать загрузить исходные данные из файла в окно (text или label)в программе чтоб значения показывались сначала в окне, потом нажимаешь на кнопку полученные данные переходят в другое окно, а потом нажав кнопку сохранить все в файл?
#Nii вне форума Ответить с цитированием
Старый 21.12.2008, 14:35   #5
#Nii
Пользователь
 
Аватар для #Nii
 
Регистрация: 16.10.2008
Сообщений: 11
По умолчанию

Все подключил в референсах Microsoft Scripting Runtime все идет теперь. Только вот терь надо чтоб выводилось в Textbox значение из in.txt а во второй textbox уже значения после сортировки. Как это сделать?

И можно ли еще сделать кнопку чтобы можно было вписать имя файла, и чтоб сохранились значения пузырька?
#Nii вне форума Ответить с цитированием
Старый 21.12.2008, 14:53   #6
#Nii
Пользователь
 
Аватар для #Nii
 
Регистрация: 16.10.2008
Сообщений: 11
По умолчанию

Все подключил в референсах Microsoft Scripting Runtime все идет теперь.
Есть способ без подключения FSO

Код:
'На форме одна кнопка, Текстбоксы text1 и text2. 
 'БИБЛИОТЕКА Microsoft Scripting Runtime НЕ НУЖНА!!! 
'Допустим что входной файл престаляет собой строку вида 3,22,66,44,88,,23,97,345,321 
Private Sub Command1_Click() 
  Dim MyArrStr() As String 
  Dim MyArr() As Long 
  Dim sStr As String 
  Dim i As Long 
    
  'Читаем из файла 
  sStr = MyRead("in.txt") 
  Text1 = sStr 'отображаем в текстбокс 
  'Получаем массив строк 
  MyArrStr = Split(sStr, ",") 
  i = 0 
  ReDim MyArr(i) 
  'Преобразуем в массив 
  For i = 0 To UBound(MyArrStr) 
    ReDim Preserve MyArr(i) 
    MyArr(i) = Val(MyArrStr(i)) 
  Next i 
  'Сортируем 
  Sort MyArr 
  'Собираем строку 
  sStr = "" 
  For i = LBound(MyArr) To UBound(MyArr) 
    MyArrStr(i) = CStr(MyArr(i)) 
    sStr = sStr & MyArrStr(i) 
    If i <> UBound(MyArr) Then sStr = sStr & "," 
  Next i 
  Text2 = sStr 'отображаем в текстбокс 
  'Записываем файл 
  MyWrite sStr, "out.txt" 
End Sub 
 
'по-моему то что было у тебя написано в процедуре сортировки не было методом пузыря 
'вот это по сути тоже самое, но несколько более близкое к истине :) 
Private Sub Sort(Mus() As Long) 
  Dim n As Long, i As Long, j As Long, tmp  As Long, f As Boolean 
  Do While Not f 
  f = True 
  For i = 0 To UBound(Mus) - 1 
    If Mus(i) > Mus(i + 1) Then 
      tmp = Mus(i) 
      Mus(i) = Mus(i + 1) 
      Mus(i + 1) = tmp 
      f = False 
    End If 
    Next i 
  Loop 
End Sub 
 
'Процедура записи (ну зачем тебе этот FSO???) 
Private Sub MyWrite(MyStr As String, outFile As String) 
Open app.Path + "\" + outFile For Output As #1 
Print #1, MyStr 
Close #1 
End Sub 
 
'Процедура чтения 
Private Function MyRead(inFile As String) As String 
Open app.Path + "\" + inFile For Input As #1 
Line Input #1, MyRead 
Close #1 
End Function
Только вот терь надо чтоб выводилось в Textbox значение из in.txt а во второй textbox уже значения после сортировки. Как это сделать?
И можно ли еще сделать кнопку чтобы можно было вписать имя файла, и чтоб сохранились значения пузырька?
#Nii вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите решить задачу в C++ на массивы + сортировка методом Шелла Exact Помощь студентам 2 18.06.2009 14:44
Решение уравнения методом деления отрезка пополам. Методом секущей. Panda196 Паскаль, Turbo Pascal, PascalABC.NET 3 25.11.2008 09:06
сортировка методом двухпроходного пузырька. Net* Общие вопросы C/C++ 3 26.05.2008 07:17