Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Duża liczba - nie powinno jej być
artgrus
post
Post #1





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 27.03.2008

Ostrzeżenie: (10%)
X----


Witam. Jako że mamy niedzielę, to nudziło mi się. Proszę o napisanie w czym jest błąd. Jest to program w C++ (wiadomo, wiadomo - większość z was lovit ten język, mi on wydaje się jednym z trudniejszych do nauczenia, lecz nie taki diabeł straszny, kiedy się pracuje nad mniejszymi programami).

Napisałem sortowanie przez wstawianie (plus porównywanie ze sobą elementów z tablicy), Niema tu main() ani nagłówków. Oto kod:
  1. int l; // male L: licznik wstawiajacy liczby do tablicy
  2. int j; // licznik petli sortujacej
  3. int n; // ilosc elementow
  4. int p; // element sortowanego ciagu
  5. int i; // zapomnialem (IMG:style_emoticons/default/biggrin.gif)
  6. int lp; // liczenie porownan
  7.  
  8. cout << "Ile elementow do posortowania? ";
  9. cin >> n;
  10.  
  11. int a['n']; // tablica n-elementowa
  12.  
  13. cout << "\n";
  14.  
  15. for (l=0; l<n; l++)
  16. {
  17. cout << (l+1) << "z" << n << ": ";
  18. cin >> a[l];
  19. }
  20.  
  21. cout << "\nPorownania:\n";
  22.  
  23. // Zamiast j=2 ustawilem na j=0.
  24. // Gdyby j=2, to dla dwoch elementow nie posortuje
  25. for (j=1; j<n; j++)
  26. {
  27. p = a[j];
  28. i = j-1;
  29. // Zamiast i>0 ustawilem na j>=0
  30. while ((i>=0) && (a[i]>p))
  31. {
  32. a[i+1]=a[i];
  33. i=i-1;
  34. }
  35. a[i+1]=p;
  36.  
  37. // Pierwsze porownanie
  38. if (a[i] < a[j])
  39. {
  40. lp++;
  41. cout << a[i] << " < " << a[j] << endl;
  42. }
  43. else if (a[i] > a[j])
  44. {
  45. lp++;
  46. cout << a[i] << " > " << a[j] << endl;
  47. }
  48. else
  49. {
  50. lp++;
  51. cout << a[i] << " = " << a[j] << endl;
  52. }
  53. // Drugie porownanie
  54. if (a[j] < p)
  55. {
  56. lp++;
  57. cout << a[j] << " < " << p << endl;
  58. }
  59. else if (a[j] > p)
  60. {
  61. lp++;
  62. cout << a[j] << " > " << p << endl;
  63. }
  64. else
  65. {
  66. lp++;
  67. cout << a[j] << " = " << p << endl;
  68. }
  69. }
  70.  
  71. cout << "---------------------" << endl;
  72.  
  73. cout << "\nPo sortowaniu:" << endl;
  74. for (int x=0; x<n; x++)
  75. {
  76. cout << a[x];
  77. cout << endl;
  78. }
  79. getch();
  80. return 0;


Program działa. Teraz napiszę poniżej co robię a co mi pokazuje - od razu dodam że pokazuje mi baaardzo duże liczby których teoretycznie (niewiem jak to praktycznie) - nie powinno być. Dobra.

Przykład 1:
Uruchamiam program. Pokazuje mi się: Ile elementow do posortowania? Wpisuję 3. Enter. Kolejno podaję 3 elementy aby je zapisać do tablicy a tablicę potem posortować:
1z3: 9
2z3: 5
3z3: -1

Enter.
Pojawia się taki tekścik:
Porownania:
1306224 > 9
9 > 5
1306224 > 9
9 > -1



Przykład 2:
Uruchamiam program. Pokazuje mi się: Ile elementow do posortowania? Wpisuję 3. Enter. Kolejno podaję 3 elementy aby je zapisać do tablicy a tablicę potem posortować:
1z3: 9
2z3: 4
3z3: 8

Enter.
Pojawia się taki tekścik:
Porownania:
1306224 > 9
9 > 4
4 < 9
9 > 8



Przykład 3:
Uruchamiam program. Pokazuje mi się: Ile elementow do posortowania? Wpisuję 3. Enter. Kolejno podaję 3 elementy aby je zapisać do tablicy a tablicę potem posortować:
1z3: 9
2z3: 15
3z3: 7

Enter.
Pojawia się taki tekścik:
Porownania:
9 < 15
15 = 15
1306224 > 15
15 > 7




Pytanie:

Dlaczego w porównaniach pokazuje mi te duże liczby, kiedy to ja ich nie wpisywałem?

Czy jest jakiś sposób na wykluczenie takich problemów?

Ten post edytował Spawnm 10.10.2010, 18:40:49
Powód edycji: [Spawnm]:BBcode
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
yevaud
post
Post #2





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


int a['n']; // tablica n-elementowa

'' na pewno jest tutaj nie na miejscu
Go to the top of the page
+Quote Post
flashdev
post
Post #3





Grupa: Zarejestrowani
Postów: 812
Pomógł: 117
Dołączył: 2.12.2008

Ostrzeżenie: (10%)
X----


Tak jak pisze @yevaud. Musisz utworzyć tablicę dynamicznie, bo w tej chwili deklarujesz tablicę 110-cio elementową (kod ascii znaku 'n' to 110).
Możesz też dla uproszczenia zadeklarować statyczną tablicę np 1e3 elementową pod warunkiem, że specyfikacja programu nie zezwala na utworzenie większej.
Go to the top of the page
+Quote Post
yevaud
post
Post #4





Grupa: Zarejestrowani
Postów: 471
Pomógł: 89
Dołączył: 29.07.2008
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


while ((i>=0) && (a[i]>p))
{
a[i+1]=a[i];
i=i-1;
}

z jaka wartoscia konczy zmienna i po wyjsciu z tej petli i jak to sie ma do pozniejszych porownan a[i]
Go to the top of the page
+Quote Post
artgrus
post
Post #5





Grupa: Zarejestrowani
Postów: 73
Pomógł: 0
Dołączył: 27.03.2008

Ostrzeżenie: (10%)
X----


ok, dzięki za posty. Będę się musiał zaopatrzyć w jakaś Biblię do C++. (IMG:style_emoticons/default/laugh.gif) (IMG:style_emoticons/default/biggrin.gif) (IMG:style_emoticons/default/tongue.gif) (IMG:style_emoticons/default/happy.gif)

Co do programu to poprawiłem błędy. (IMG:style_emoticons/default/rolleyes.gif)
Tablica dynamiczna:
Kod
...
int *a;
a = new int[n];
...


i te duże liczby
Kod
...
a[i+1] = p;
if (i < '0') i = '0';
...


Teraz śmiga jak należy. (IMG:style_emoticons/default/rolleyes.gif)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 14:27