Page 5 - Informatyka na czasie. Wiesz, umiesz, zdasz. Podręcznik klasa 2 i 3
P. 5

Sposób na zadania

               Zadanie 1.3 (0–6)
               Posortuj wszystkie liczby z drugiej kolumny od najmniejszej do największej, zachowując zapis każdej
               liczby razem z podstawą systemu, w którym została ona zapisana.
               Oto pięć pierwszych liczb po uporządkowaniu:
               4 3333
               5 2341
               9 3333
               6 550012
               2 1111111100000000


                 Rozwiązanie
                 Tagi: systemy liczbowe, zamiana reprezentacji liczb między systemami liczbowymi, algorytmy
                 sortowania, zapis do pliku
                 Sposób I. Implementacja własnej funkcji sortującej
                 Krok 1
                 Ponieważ sortujemy niewiele liczb, możemy zastosować jedną z metod sortowania prostego,
                 np. przez wybieranie (patrz s. 174). Program powinien wczytać i zapamiętać wszystkie liczby wraz
                 z podstawami systemów, w których zostały zapisane. Wykorzystamy w tym celu tablicę p
                 (do przechowania podstaw kolejnych liczb) oraz tablicę s elementów typu string
                 (do przechowania kolejnych liczb zapisanych w różnych systemach).
                 Krok 2
                 Liczby należy porównywać w tym samym systemie. Wygodnie będzie zastosować funkcję ToDec,
                 która zapisze liczby w postaci dziesiętnej. Liczby te zapamiętamy w tablicy d, aby uniknąć ich
                 wielokrotnego przeliczania przy każdym porównaniu podczas sortowania.

                 Krok 3
                 W czasie sortowania, podczas zamiany dwóch liczb dziesiętnych, trzeba pamiętać również
                 o zamianie elementów o tych samych indeksach w tablicach p i s. Wyniki wygodnie będzie
                 zapisać do pliku z wykorzystaniem zmiennej plikowej wy typu ofstream.

                 Odpowiedź: Kod źródłowy programu realizującego opisany algorytm wygląda następująco:
                  1.  #include <iostream>
                  2.  #include <fstream>
                  3.  #include <string>
                  4.
                  5.  using namespace std;
                  6.
                  7.  int ToDec(int p, string s)
                  8.  // wartość dziesiętna liczby s, zapisanej w systemie o podstawie p
                  9.  {
                  10.     int w=0;
                  11.     for (int i=0;i<s.size();i++) w=w*p+s[i]-48;
                  12.     return w;
                  13. }
                  14.



                                                                                             229
   1   2   3   4   5   6   7   8   9   10