Sprawdź się
Przedstawiony program powinien być implementacją algorytmu sortowania pozycyjnego dat z wykorzystaniem algorytmu sortowania bąbelkowego. Uzupełnij kod w odpowiednich miejscach, tak aby algorytm sortowania działał poprawnie. Algorytm powinien sortować daty chronologicznie.
Specyfikacja problemu:
Dane:
wielkoscZbioru- liczba całkowita przechowująca informację dotyczącą liczby sortowanych datdaty[0..wielkoscZbioru - 1]- tablica jednowymiarowa przechowująca sortowane daty w formie napisu; daty w tablicy przechowywane są jako napisy w formacie RRRR‑MM‑DD
Wynik:
daty[0..wielkoscZbioru - 1]– zawiera daty posortowane chronologicznie (od najwcześniejszej do najpóźniejszej)
Przykładowe rozwiązanie zadania:
#include <iostream>
using namespace std;
string daty[] = {
"1410-07-15",
"1453-05-29",
"2020-03-05",
"2020-04-20",
"1342-12-03"
};
int wielkoscZbioru = 5;
void sortowanieBabelkowe(int index) {
string temp;
bool czyZmiana = false;
for(int i = 0; i < wielkoscZbioru; i++) {
for (int j = 0; j < wielkoscZbioru - 1; j++) {
if ((daty[j][index]) < (daty[j+1][index])) {
temp = daty[j];
daty[j] = daty[j+1];
daty[j+1] = temp;
czyZmiana = true;
}
}
if (czyZmiana == false) {
break;
}
}
}
void sortowaniePozycyjne() {
for (int i = 9; i >= 0; i--) {
if (i == 4 || i == 7) {
continue;
}
sortowanieBabelkowe(i);
}
}
int main() {
sortowaniePozycyjne();
for (int i = 0; i < wielkoscZbioru; i++) {
cout << daty[i] << endl;
}
return 0;
}Użyj algorytmu sortowania pozycyjnego dat z algorytmem sortowania przez zliczanie, aby odpowiedzieć na pytanie, ile dat w tablicy dane jest ułożonych chronologicznie, po dacie upadku Konstantynopola (1453‑05‑29). Przetestuj swój program dla następujących danych:
liczbaElementow = 6dane = {
"1569‑07‑01",
"1410‑07‑15",
"1453‑05‑29",
"1453‑07‑17",
"1452‑09‑30",
"1386‑03‑04"
}
Specyfikacja problemu:
Dane:
liczbaElementow- liczba całkowita przechowująca informację dotyczącą liczby sortowanych datdane[0..liczbaElementow - 1]- tablica jednowymiarowa przechowująca sortowane daty w formie napisu; daty w tablicy przechowywane są jako napisy w formacie RRRR‑MM‑DD
Wynik:
x- liczba całkowita; liczba dat w zbiorze ułożonych chronologicznie, po dacie upadku Konstantynopola
Przykładowe rozwiązanie zadania:
#include <iostream>
using namespace std;
string dane[] = {
"1569-07-01",
"1410-07-15",
"1453-05-29",
"1453-07-17",
"1452-09-30",
"1386-03-04"
};
int liczbaElementow = 6;
void sortowaniePrzezZliczanie(int indeksZnaku){
string temp[liczbaElementow] = {};
int tablicaZliczenCyfr[10] = {};
for(int i = 0; i < liczbaElementow; i++){
int odczytanaCyfra = dane[i][indeksZnaku] - '0';
tablicaZliczenCyfr[odczytanaCyfra]++;
}
for(int i = 1; i < 10; i++){
tablicaZliczenCyfr[i] = tablicaZliczenCyfr[i] + tablicaZliczenCyfr[i-1];
}
for(int i = liczbaElementow-1; i >= 0; i--){
int odczytanaCyfra = dane[i][indeksZnaku] - '0';
int indeksWTablicyWynikowej = tablicaZliczenCyfr[odczytanaCyfra] - 1;
temp[indeksWTablicyWynikowej] = dane[i];
tablicaZliczenCyfr[odczytanaCyfra]--;
}
for(int i = 0; i < liczbaElementow; i++){
dane[i] = temp[i];
}
}
int policzWydarzeniaPoDacie(string data) {
int indeks = liczbaElementow;
for (int i = 0; i < liczbaElementow; i++) {
if (dane[i] == data) {
indeks = i;
break;
}
}
return liczbaElementow - indeks - 1;
}
int main()
{
for(int i = 9; i >= 0; i--){
if(i == 7 || i == 4){
continue;
}
sortowaniePrzezZliczanie(i);
}
cout << policzWydarzeniaPoDacie("1453-05-29") << endl;
return 0;
}Organizatorzy rajdu rowerowego zastanawiają się, jaka jest mediana wieku zawodników. Dysponują listą dat urodzin zawodników. Napisz program, który wyznaczy medianę spośród dat urodzin i wydrukuje ją na standardowe wyjście. Przetestuj swój program dla następujących danych:
liczbaElementow = 11dane = {
"1999‑02‑14",
"1984‑02‑09",
"1987‑12‑31",
"1993‑03‑24",
"2001‑07‑01",
"1996‑02‑26",
"1982‑11‑21",
"1990‑05‑27",
"1992‑09‑10",
"1996‑09‑26",
"1998‑12‑11"
}
Mediana, zwana inaczej wartością środkową, zajmuje środkową pozycję w uporządkowanym szeregu statystycznym. Więcej informacji na jej temat znajdziesz w e‑materiale MedianaD141WaQJ8Mediana.
Specyfikacja problemu:
Dane:
liczbaElementow- liczba całkowita przechowująca informację dotyczącą liczby sortowanych datdane[0..liczbaElementow - 1]- tablica jednowymiarowa przechowująca sortowane daty w formie napisu; daty w tablicy przechowywane są jako napisy w formacie RRRR‑MM‑DD
Wynik:
mediana- ciąg znaków; mediana dat tablicydane
Przykładowe rozwiązanie zadania:
#include <iostream>
using namespace std;
string dane[] = {
"1999-02-14",
"1984-02-09",
"1987-12-31",
"1993-03-24",
"2001-07-01",
"1996-02-26",
"1982-11-21",
"1990-05-27",
"1992-09-10",
"1996-09-26",
"1998-12-11"
};
int liczbaElementow = 11;
void sortowaniePrzezZliczanie(int indeksZnaku){
string temp[liczbaElementow] = {};
int tablicaZliczenCyfr[10] = {};
for(int i = 0; i < liczbaElementow; i++){
int odczytanaCyfra = dane[i][indeksZnaku] - '0';
tablicaZliczenCyfr[odczytanaCyfra]++;
}
for(int i = 1; i < 10; i++){
tablicaZliczenCyfr[i] = tablicaZliczenCyfr[i] + tablicaZliczenCyfr[i-1];
}
for(int i = liczbaElementow-1; i >= 0; i--){
int odczytanaCyfra = dane[i][indeksZnaku] - '0';
int indeksWTablicyWynikowej = tablicaZliczenCyfr[odczytanaCyfra] - 1;
temp[indeksWTablicyWynikowej] = dane[i];
tablicaZliczenCyfr[odczytanaCyfra]--;
}
for(int i = 0; i < liczbaElementow; i++){
dane[i] = temp[i];
}
}
int main()
{
for(int i = 9; i >= 0; i--){
if(i == 7 || i == 4){
continue;
}
sortowaniePrzezZliczanie(i);
}
cout << dane[6];
return 0;
}