CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - Aplikacja C++ sortowanie kubełkowe.

Aplikacja C++ sortowanie kubełkowe.

dział ogólny

Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Discoband » wtorek, 26 kwietnia 2011, 18:31

Witam, dostałem temat projektu "Aplikacja wykorzystująca algorytm porządkowania kubełkowego. Liczby do posortowania znajdują się we wskazanym przez użytkownika pliku. Użytkownik podaje nazwę pliku." Potrzebuję pomocy powiem szczerze gdyż nasza wspaniała pani od programowania nie umiejąca uczyć nie przygotowała nas na tyle by to zrobić bez problemu, a ja mam wielki problem z tym. Może mi ktoś pomoc? Aplikacja ma być okienkowa. Dziękuje
Avatar użytkownika
Discoband
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): wtorek, 26 kwietnia 2011, 18:25
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7
Kompilator: Borland C++ 6,0 Personal
Gadu Gadu: 6639431
    Windows 7Chrome

Re: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez polymorphism » wtorek, 26 kwietnia 2011, 18:53

Ale tak konkretnie, czego potrzebujesz? Bo odnoszę wrażenie, że czekasz na gotowca, a z tym może być problem ;)

Tu masz w miarę obrazowo opisany algorytm -> http://www.dyniax.republika.pl/sort/bucket.htm
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Discoband » wtorek, 26 kwietnia 2011, 19:04

Potrzebuje rozmowy z kimś na gg np żeby mógł mi odpowiadać na moje pytania xD
Avatar użytkownika
Discoband
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): wtorek, 26 kwietnia 2011, 18:25
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7
Kompilator: Borland C++ 6,0 Personal
Gadu Gadu: 6639431
    Windows 7Chrome

Re: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez polymorphism » wtorek, 26 kwietnia 2011, 19:32

Z tym też mogą być problemy. Od tego są fora internetowe.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Cyfrowy Baron » wtorek, 26 kwietnia 2011, 19:38

polymorphism napisał(a):Potrzebuje rozmowy z kimś na gg np żeby mógł mi odpowiadać na moje pytania xD


Ja korzystam ze SKYPE od czasu do czasu, ale nie chce mi się odpowiadać na pytania w czasie rzeczywistym. Skoro nie potrafisz zadać pytania na forum, to i w komunikatorze to się nie uda.

Należałoby postawić pytanie, czy potrafisz programować cokolwiek?!
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: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Cyfrowy Baron » wtorek, 26 kwietnia 2011, 19:42

Tutaj masz gotowy algorytm sortujący w C++: http://www.zgapa.pl/zgapedia/Sortowanie_kube%C5%82kowe.html
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: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez polymorphism » wtorek, 26 kwietnia 2011, 19:55

Gotowy to może był kiedyś, teraz to poszatkowany jest i niekompletny jakiś ;)

p.s. popraw cytowanie.
C++ Reference - opis wszystkich klas STL-a i funkcji C.
Avatar użytkownika
polymorphism
Doświadczony Programista ● Moderator
Doświadczony Programista ● Moderator
 
Posty: 2156
Dołączył(a): piątek, 19 grudnia 2008, 13:04
Podziękował : 0
Otrzymał podziękowań: 200
System operacyjny: Windows 8.1
Windows 10
Linux Mint 21.1
Kompilator: Visual Studio
Visual Studio Code
MSYS2 (MinGW, clang)
g++
clang
Gadu Gadu: 0
    Windows XPFirefox

Re: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Cyfrowy Baron » środa, 27 kwietnia 2011, 13:04

Z tym sortowaniem kubełkowym to chyba będzie tak:

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <time.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
void __fastcall TForm1::BucketSort(void)
{
 const int WMIN = -99;
 const int WMAX = 99;
 const int N = 15;
 int d[N], lw[WMAX - WMIN + 1], i, j;


 /* losowanie liczb do sortowania */
  srand((unsigned)time(NULL));

  for(i = 0; i < N; i++) d[i] = WMIN + rand() % (WMAX - WMIN + 1);

 /* przepisanie liczb do ListBox1 - przed sortowaniem */

  for(i = 0; i < N; i++) ListBox1->Items->Add( (String)d[i] );


 /* wyzerowanie tablicy */

 for(i = WMIN; i <= WMAX; i++) lw[i - WMIN] = 0;

 /* zliczanie wystąpień wartości elementów sortowanego zbioru */

 for(i = 0; i < N; i++) lw[d[i] - WMIN]++;

 /* zapisanie do zbioru wynikowego numerów niezerowych liczników
        tyle razy, ile wynosi ich zawartość  */


 j = 0;
 for(i = WMIN; i <= WMAX; i++) while(lw[i - WMIN]--) d[j++] = i;

 /* przepisanie liczb do ListBox2 - po sortowaniem */

 for(i = 0; i < N; i++) ListBox2->Items->Add( (String)d[i] );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ListBox1->Items->Clear();
 ListBox2->Items->Clear();

 BucketSort();
}
//---------------------------------------------------------------------------


Nie daję głowy, że to dokładnie to. W przykładzie liczby do sortowania są losowane, no i całość jest mocno uproszczona. Gdyby chodziło o liczby wczytane z pliku, to trzeba by znaleźć wśród nich liczbę najmniejszą i największą by ustalić wartość WMIN i WMAX. To komplikuje sprawę, gdyż potrzebne są kolejne funkcje sprawdzające, która liczba jest najmniejsza, a która największa:

KOD cpp:     UKRYJ  
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Unit1.h"
#include <time.h>
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{

}
//---------------------------------------------------------------------------
int TForm1::MIN(TStrings *Lista)
{
 int y;

 for(int i = 0; i < Lista->Count; i++)
 {
  int x = Lista->Strings[i].ToInt();
  if(y > x)
   y = x;
 }

 return y;
}
//---------------------------------------------------------------------------
int TForm1::MAX(TStrings *Lista)
{
 int y;

 for(int i = 0; i < Lista->Count; i++)
 {
  int x = Lista->Strings[i].ToInt();

  if(y < x)
   y = x;
 }

 return y;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::BucketSort(void)
{
 const int WMIN = MIN(ListBox1->Items);
 const int WMAX = MAX(ListBox1->Items);

 const int N = ListBox1->Items->Count;
 int *lw = new int[WMAX - WMIN + 1];
 int *d = new int[N];
 int i, j;

 for(i = 0; i < N; i++) d[i] = ListBox1->Items->Strings[i].ToInt();

 /* wyzerowanie tablicy */

 for(i = WMIN; i <= WMAX; i++) lw[i - WMIN] = 0;

 /* zliczanie wystąpień wartości elementów sortowanego zbioru */

 for(i = 0; i < N; i++) lw[d[i] - WMIN]++;

 /* zapisanie do zbioru wynikowego numerów niezerowych liczników
        tyle razy, ile wynosi ich zawartość  */


 j = 0;
 for(i = WMIN; i <= WMAX; i++) while(lw[i - WMIN]--) d[j++] = i;

 /* przepisanie liczb do ListBox2 - po sortowaniem */

 for(i = 0; i < N; i++) ListBox2->Items->Add( (String)d[i] );

 delete [] d;
 delete [] lw;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ListBox1->Items->Clear();
 ListBox2->Items->Clear();

 String sFile = ExtractFilePath( ParamStr(0) ) + "liczby.txt";
 ListBox1->Items->LoadFromFile(sFile);

 BucketSort();
}
//---------------------------------------------------------------------------


Konstrukcja pliku tekstowego z liczbami:

KOD text:     UKRYJ  
-17
20
-25
18
1
30
-123
1009
72
95
-58
-46
50
1
2
-2


Liczby oczywiście dowolne, w dowolnej ilości.
Nie masz wystarczających uprawnień, aby zobaczyć pliki załączone do tego postu.
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: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Cyfrowy Baron » czwartek, 28 kwietnia 2011, 11:21

Mam dziś trochę więcej czasu, więc postanowiłem poprawić ten algorytm. Są w nim co najmniej dwie pętle za dużo. Sprawdzanie które liczby są największe i najmniejsze można zrobić podczas przepisywania zawartości listy do tablicy, czyli funkcje MIN i MAX są zbędne, a kod działa szybciej:

KOD cpp:     UKRYJ  
void __fastcall TForm1::BucketSort(void)
{
 const int N = ListBox1->Items->Count;

 int *d = new int[N];
 int i, j = 0, min = 0, max = 0;

 for(i = 0; i < N; i++)
 {
  d[i] = ListBox1->Items->Strings[i].ToInt();

  if(max < d[i]) max = d[i];
  if(min > d[i]) min = d[i];
 }

 const int WMIN = min;
 const int WMAX = max;
 int *lw = new int[WMAX - WMIN + 1];

 for(i = WMIN; i <= WMAX; i++) lw[i - WMIN] = 0;

 for(i = 0; i < N; i++) lw[d[i] - WMIN]++;

 for(i = WMIN; i <= WMAX; i++) while(lw[i - WMIN]--) d[j++] = i;

 for(i = 0; i < N; i++) ListBox2->Items->Add( (String)d[i] );

 delete [] d;
 delete [] lw;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 ListBox1->Items->Clear();
 ListBox2->Items->Clear();

 String sFile = ExtractFilePath( ParamStr(0) ) + "liczby.txt";
 ListBox1->Items->LoadFromFile(sFile);

 BucketSort();
}


Tylko wciąż nie mam pewności, czy to na pewno sortowanie kubełkowe, nie ulega jednak wątpliwości, że to sortowanie.
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: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Discoband » czwartek, 28 kwietnia 2011, 20:02

Nie no wszystko pięknie ładnie dziękuje ślicznie : ) A jeszcze się zapytam jak utworzyć funkcję która pobierze znaki z pola edit i użyje ich jako nazwy pliku do otwarcia?
Avatar użytkownika
Discoband
Bladawiec
Bladawiec
 
Posty: 3
Dołączył(a): wtorek, 26 kwietnia 2011, 18:25
Podziękował : 0
Otrzymał podziękowań: 0
System operacyjny: Win 7
Kompilator: Borland C++ 6,0 Personal
Gadu Gadu: 6639431
    Windows 7Chrome

Re: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez Cyfrowy Baron » czwartek, 28 kwietnia 2011, 21:17

Nie no, większość wstydziłaby się zadać takie pytanie. :lol: :x

KOD cpp:     UKRYJ  
String sFileName = Edit1->Text;
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: Aplikacja C++ sortowanie kubełkowe.

Nowy postprzez usermaw » poniedziałek, 2 maja 2011, 20:32

A tu z implementacją, algorytmem blokowym
http://edu.i-Io.tarnow.pl/inf/aIg/003_sort/00020.php
Avatar użytkownika
usermaw
Homos antropiczny
Homos antropiczny
 
Posty: 55
Dołączył(a): piątek, 2 stycznia 2009, 20:43
Podziękował : 2
Otrzymał podziękowań: 0
    Windows XPFirefox


  • 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 15 gości

cron