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