CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - [BCB C++] Różne metody sortowania

[BCB C++] Różne metody sortowania

dział ogólny

[BCB C++] Różne metody sortowania

Nowy postprzez ziomek87 » sobota, 29 grudnia 2012, 17:33

Witam! Mam do napisania (nie ma co się oszukiwać prosty program) którego zadaniem jest przy użyciu rożnych metod sortować tablice (np. bąbelkowo i quick sort) oraz określić czas sortowania (z czasem nie mam problemu) . Moim problem, jest to że nie umiem przypisać do funkcji sortującej tablicy utworzonej dynamicznie. Na lisningu, kory wkleilem wszystkie akcje są pod jednym przyciskiem oprócz Close. Co oznacza, ze wykorzystując inne sortowanie w ten sposób musiałbym utworzyć nowa tablice i sortować znów z jednego przycisku :/ ( a chce sortować rożnymi metodami ta sama tablice). Czy ktoś mógłby mi podpowiedzieć jak np. z przycisku "sortuj" który sortowałby tablice dynamiczna przechwycić tablice z przycisku "generuj" ktoryby ta tablice wcześniej generował? ( nie wiem jak "przechwytywał" ta tablice do przycisku "sortuj" który by tablice dynamiczna sortował i wypisywał do listbox?

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------
#include <iostream>
#include <time.h>
#include <cstdlib>
#include <vcl.h>
#pragma hdrstop

#include "Unit2.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
int i, size;
int *pointer = new int[size] ;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{


}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)
{
 time_t start,end;
 AnsiString str1;
 ListBox2->Items->Clear();
 ListBox1->Items->Clear();

 str1 = InputBox("", "Podaj ilosc liczb w tablicy", "");
 size = StrToInt(str1);
 for (i=1; i<=size; i++)
  {
   pointer[i] = rand() % 100 + 1;
   ListBox1->Items->Add(pointer[i]);
   };
       time(&start);
       for(int b=0; b<size; b++)
        for(int j=0; j<size; j++)
            if(pointer[j+1] < pointer[j])
            swap(pointer[j+1], pointer[j]);
           time(&end);

           Edit2->Text =difftime (end,start);
       for (i =1 ; i <=size; i++)
        ListBox2->Items->Add(pointer[i]);
} ;

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Close();
}
//---------------------------------------------------------------------------
Ostatnio edytowano sobota, 29 grudnia 2012, 17:42 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Używaj tagów CPP
Avatar użytkownika
ziomek87
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): sobota, 29 grudnia 2012, 16:52
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Firefox

Re: [BCB C++] Różne metody sortowania

Nowy postprzez Cyfrowy Baron » sobota, 29 grudnia 2012, 17:45

Zamiast umieszczać kod z zdarzeniu stwórz funkcję, która będzie realizowała sortowanie. Przekazuj funkcji argumenty itd. Nie rozumiem z czym właściwie masz problem.
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Różne metody sortowania

Nowy postprzez ziomek87 » sobota, 29 grudnia 2012, 17:52

Tak bym zrobił, ale nie umiem dostać się do tej tablicy i to jest mój problem. Jak zrobię przycisk "generuj" (który tylko generuje tablice) to nie umiem zrobić przycisku "sortuj" który uzyska dostęp to wygenerowanej tablicy z przycisku "generuj" i zacznie sortować :/
Avatar użytkownika
ziomek87
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): sobota, 29 grudnia 2012, 16:52
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Firefox

Re: [BCB C++] Różne metody sortowania

Nowy postprzez Cyfrowy Baron » sobota, 29 grudnia 2012, 17:55

Pokaż kod generujący tablicę!
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Różne metody sortowania

Nowy postprzez ziomek87 » sobota, 29 grudnia 2012, 17:58

to jest generowanie tablicy:

KOD cpp:     UKRYJ  
int i, size;
AnsiString str1;
int *pointer = new int[size] ;

str1 = InputBox("", "Podaj ilosc liczb w tablicy", "");
size = StrToInt(str1);
 for (i=1; i<=size; i++)
  {
   pointer[i] = rand() % 100 + 1;
  }
Ostatnio edytowano sobota, 29 grudnia 2012, 18:00 przez Cyfrowy Baron, łącznie edytowano 1 raz
Powód: Używaj tagów CPP
Avatar użytkownika
ziomek87
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): sobota, 29 grudnia 2012, 16:52
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Firefox

Re: [BCB C++] Różne metody sortowania

Nowy postprzez Cyfrowy Baron » sobota, 29 grudnia 2012, 18:16

Kilka uwag. tablica ma rozmiar od 0 do size - 1, czyli pętla jest źle skonstruowana. Tablicę tworzysz dopiero gdy znasz jej rozmiar, czyli gdy size ma jakąś wartość. Przed utworzeniem tablicy musisz sprawdzić i zniszczyć poprzednią tablicę. By mieć dostęp do tablicy w obrębie całego formularza deklarujesz ją w pliku nagłówkowym w sekcji private lub public, a tworzysz dopiero przed wypełnieniem danymi w pliku źródłowym:

Plik nagłówkowy np. Unit1.h
KOD cpp:     UKRYJ  
private:
                int size;
                int *pointer;
                void GenerateArray(int *iPointer, int s);


Plik źródłowy np. Unit1.cpp
KOD cpp:     UKRYJ  
void TForm1::GenerateArray(int *iPointer, int s)
{
 for (int i = 0; i < s; i++)
 {
   iPointer[i] = rand() % 100 + 1;
 }
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  AnsiString str1 = InputBox("", "Podaj ilosc liczb w tablicy", "");

  if( str1.IsEmpty() ) return;

  size = StrToInt(str1);

  if (pointer != NULL)
  {
    delete pointer;
    pointer = 0;
  }

  pointer = new int[size];

  GenerateArray( pointer, size );

 /* sprawdzanie zawartosći tablicy */
 ListBox1->Items->Clear();

 for(int i = 0; i < size; i++) ListBox1->Items->Add(pointer[i]);

}


Co dalej?

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
ziomek87
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox

Re: [BCB C++] Różne metody sortowania

Nowy postprzez ziomek87 » sobota, 29 grudnia 2012, 18:38

Dziękuje Panu bardzo za pomoc, resztę spróbuje zrobić sam, żeby się nauczyć.
Avatar użytkownika
ziomek87
Bladawiec
Bladawiec
 
Posty: 4
Dołączył(a): sobota, 29 grudnia 2012, 16:52
Podziękował : 1
Otrzymał podziękowań: 0
System operacyjny: brak systemu
Kompilator: brak kompilatora
Gadu Gadu: 0
    Windows 7Firefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 5 gości

cron