ďťż

Ładny brzuch

Witam wszystkich serdecznie. Piszę program w C++, ale utknąłem w miejscu. Program ten powinien losować 6 liczb, nastepnie je sortowac malejąco i wyświetlać, a przy tym obsługiwać menu (1.losuj, 2.sortuj, 3.wyświetl posortowane, 4.koniec).Chciałbym się dowiedzieć jak w takiej sytuacji posortować wylosowane liczby i utworzyć menu. Jest to program pisany w Dev C++. Na chwilę obecną stworzyłem coś takiego:

#include <iostream> #include <stdlib.h> #include <time.h> #include <conio.h> #include <stdio.h> using namespace std; char decyzja; main() { do { cout<<"\n\n1.Losowanie liczb"; cout<<"\n\n2.Sortowanie malejaco"; cout<<"\n\n3.Wyswietl liczby posortowane"; cout<<"\n\n4.Koniec programu"; cout<<"\n\n.Wybrano numer:"; cin>>decyzja; switch(decyzja) { case '1': cout<<"\nLosowanie liczb"; const int ile=10; long int poczatek=1, koniec=49, liczby[ile]; long int j; srand( (unsigned)time( NULL ) ); cout <<"\nNacisnij ENTER aby losowac\n"; getchar(); for (unsigned int i=0;i<ile;++i) { do { j=i-1; liczby[i]=(rand()%(koniec+1-poczatek))+poczatek; for (;j>=0;--j) if (liczby[i]==liczby[j]) break; } while (j!=-1); } cout <<"Wylosowano nastepujace liczby: "; for (j=0;j<ile;++j) cout <<liczby[j]<<' '; cout <<"\nNacisnij ENTER aby zakonczyc\n"; getch(); }




Chciałbym się dowiedzieć jak w takiej sytuacji posortować wylosowane liczby
Najprościej wrzucić je do listy i użyć metody sort().

A dokładniej? Jak mogłoby to wyglądać w kodzie i być zwarte z menu? Bo szczerze mówiąc przez dłuższy czas gdy były z tego zajęcia miałem żonę w szpitalu i niestety teraz jestem komletnie zielony.

Tutaj czyli w FAQ zamieściłem mały kodzik obrazujący sortowanie metodą bąbelkową.

#include<iostream.h> #include<iomanip.h> #include<stdlib.h> #include<conio.h> int i,pom, wybor,zmiana; int losuj(int tab[]) { randomize(); for (i=0; i<6; i++) tab[i] = random(100); cout << "Wylosowane liczby to " <<endl; for (i=0; i<6; i++) cout << setw(3) <<tab[i]; cout << endl << "Wcisnij jakis klawisz " <<endl; getch(); return 0; } int sortuj(int tab[]) { zmiana = 1; while (zmiana) { zmiana = 0;               for (i=0; i<6; i++) if (tab[i]>tab[i+1]) { pom = tab[i];      //zamiana dwoch elementow miejscami tab[i] = tab[i+1]; tab[i+1] = pom; zmiana = 1; } } cout << "Tablica po uporzadkowaniu " <<endl; for (i=0; i<6; i++) cout << setw(3) << tab[i] << " "; cout << endl; return 0; } main() { int tab[6];                         clrscr(); do {                  cout << "1 - Losowanie liczb " <<endl;  cout << "2 - Sortowannie liczb " <<endl;  cout << "3 - Koniec " <<endl;  cin >> wybor;  switch(wybor) {   case 1: losuj(tab);   break;   case 2: sortuj(tab);   break;   }                        }  while (wybor!=3);    return 0;                }

A tutaj napisałem ten programik, losuje sześć liczb z zakresu 1..100 i porządkuje je rosnąco. Musisz nieznacznie kod zmodyfikować, aby sortowało malejąco.
Użytkownik yattaman edytował ten post 16 grudzień 2005, 13:46


A jakiego używasz kompilatora? Bo w Dev wyskakują błędy.


A jakiego używasz kompilatora? Bo w Dev wyskakują błędy.

Masz rację, pisałem to pod Borland C++ 3.1 ale na Dev-C++ też powinno działać tylko trzeba pomodyfikować to i owo.

Co to za kod który jeden kompilator kompiluje, a inne mają problemy?
Porządny kod jest kompilowany przez wszystkie kompilatory.


Co to za kod który jeden kompilator kompiluje, a inne mają problemy?
Porządny kod jest kompilowany przez wszystkie kompilatory.

Dev-C++ nie jest kompialtorem a środowiskiem graficznym ...
Zresztą Dev sprawdza poprawność kodu pod względem standardów C++ więc coś w kodzie musi być nie tak.

moze sprobuj dopisac do kodu linijke (po derektywach):
using namespace std;

Conio.h to bibloteka Borlanda. Jeśli jest obsługiwana w Dev-C++ to tylko szczątkowo, więc może to być powodem błędów w kompilacji.

Może wystarczy usunąć clrscr() i pozamieniać getch() na getchar()
Użytkownik Catz edytował ten post 16 grudzień 2005, 17:24
Witam. Uporałem sie juz z programem. Z gory dzieki za okazana pomoc. Mam jeszcze pytanie odnosnie jednego elementu. Mianowicie, za kazdym ponownym uruchomieniem program losuje te same liczby, gdyz jest to tzw. program pseudolosowy. Chcialbym aby program losowal calkiem odmienne liczby za kazdym razem. Bede wdzieczny za szybka odpowiedz. Pozdrawiam i z gory dzieki.

#include <iostream.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> class zbior { public: zbior () {}; virtual ~zbior () {}; virtual void Do (); protected: int DisplayMenu (); void InitElem (); void SortElem (); void PrintElem (); private: double _aTab [10]; }; void zbior::Do() { bool end = false; do { int option = DisplayMenu(); switch (option) { case 1: InitElem(); break; case 2: SortElem(); break; case 3: PrintElem(); break; case 4: end = true; break; default: system("cls"); cout << "Prosze wpisac liczbe odpowiadajaca menu." << endl; } } while (!end); } int zbior::DisplayMenu() { cout << endl; cout << "MENU:" << endl; cout << "1: Losuj" << endl; cout << "2: Sortuj" << endl; cout << "3: Pokaz" << endl; cout << "4: Koniec" << endl; cout << "Wybierz liczbe z menu:" << endl; char c[0]; cin >> c; return c[0]-'0'; }; void zbior::InitElem() { rand(); for (int idx = 0; idx < 10; idx++) _aTab[idx] = rand(); cout << endl; system("cls"); cout << "Wylosowano nastepujace liczby:" << endl; for (int idx = 0; idx < 10; idx++) cout << _aTab[idx] << " "; cout << endl; } void zbior::SortElem() { for (int aIdx = 0; aIdx < 10; aIdx++) for (int bIdx = aIdx + 1; bIdx < 10; bIdx++) { if (_aTab[aIdx] < _aTab[bIdx]) { double temp = _aTab[aIdx]; _aTab[aIdx] = _aTab[bIdx]; _aTab[bIdx] = temp; } } system("cls"); cout << "Posortowano liczby malejaco." << endl; } void zbior::PrintElem() { system("cls"); cout << "Liczby posortowane:" << endl; for (int idx = 0; idx < 10; idx++) cout << _aTab[idx] << " "; cout << endl; } int main() { zbior x; x.Do(); return 0; }
Użytkownik maxicom edytował ten post 17 grudzień 2005, 17:28
srand(static_cast<int>(time(NULL)));

pamiętaj o dołączeniu ctime

cały kod:
#include <iostream.h> #include <stdlib.h> #include <conio.h> #include <stdio.h> #include <ctime> class zbior { public: zbior () {}; virtual ~zbior () {}; virtual void Do (); protected: int DisplayMenu (); void InitElem (); void SortElem (); void PrintElem (); private: double _aTab [10]; }; void zbior::Do() { bool end = false; do { int option = DisplayMenu(); switch (option) { case 1: InitElem(); break; case 2: SortElem(); break; case 3: PrintElem(); break; case 4: end = true; break; default: system("cls"); cout << "Prosze wpisac liczbe odpowiadajaca menu." << endl; } } while (!end); } int zbior::DisplayMenu() { cout << endl; cout << "MENU:" << endl; cout << "1: Losuj" << endl; cout << "2: Sortuj" << endl; cout << "3: Pokaz" << endl; cout << "4: Koniec" << endl; cout << "Wybierz liczbe z menu:" << endl; char c[0]; cin >> c; return c[0]-'0'; }; void zbior::InitElem() { srand(static_cast<int>(time(NULL)));  [B]->po co tam było samo rand()???[/B] for (int idx = 0; idx < 10; idx++) _aTab[idx] = rand(); cout << endl; system("cls"); cout << "Wylosowano nastepujace liczby:" << endl; for (int idx = 0; idx < 10; idx++) cout << _aTab[idx] << " "; cout << endl; } void zbior::SortElem() { for (int aIdx = 0; aIdx < 10; aIdx++) for (int bIdx = aIdx + 1; bIdx < 10; bIdx++) { if (_aTab[aIdx] < _aTab[bIdx]) { double temp = _aTab[aIdx]; _aTab[aIdx] = _aTab[bIdx]; _aTab[bIdx] = temp; } } system("cls"); cout << "Posortowano liczby malejaco." << endl; } void zbior::PrintElem() { system("cls"); cout << "Liczby posortowane:" << endl; for (int idx = 0; idx < 10; idx++) cout << _aTab[idx] << " "; cout << endl; } int main() { zbior x; x.Do(); return 0; }
Użytkownik comp123 edytował ten post 17 grudzień 2005, 17:41
  • zanotowane.pl
  • doc.pisz.pl
  • pdf.pisz.pl
  • zsf.htw.pl
  •