Witam przedstawiam moje rozwiązanie zadania 6.1 z matury 2016, może przydać się komuś, kto przygotowuje się do matury, przepraszam za błędy w nazewnictwie poszczególnych rzeczy w komentarzach.
Zadanie 6.2 : https://forum.pasja-informatyki.pl/343366/matura-maj-2016-zadanie-6-2-rozwiazanie-c-11
Link do arkusza:
https://cke.gov.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2016/formula_od_2015/MIN-R2_1P-162.pdf
Link do plików:
https://www.cke.edu.pl/images/_EGZAMIN_MATURALNY_OD_2015/Arkusze_egzaminacyjne/2016/formula_od_2015/Dane_PR2.zip
Treść zadania:
Zadanie 6.1. (0–3)
W pliku dane_6_1.txt znajduje się 100 słów. Słowa umieszczono w osobnych wierszach.
Fragment pliku dane_6_1.txt:
INTERPRETOWANIE
ROZWESELANIE
KONSERWOWANIE
Napisz program, który zaszyfruje słowa z pliku dane_6_1.txt z użyciem klucza
k = 107. Wynik zapisz do pliku wyniki_6_1.txt, każde słowo w osobnym wierszu,
w porządku odpowiadającym kolejności słów z pliku z danymi.
Uwaga:
Dla pierwszego słowa z pliku dane_6_1.txt (INTERPRETOWANIE) wynikiem jest
słowo LQWHUSUHWRZDQLH.
Rozwiązanie:
#include <iostream>
#include <fstream> // biblioteka operacji na plikach
using namespace std;
char alfabet[] = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'}; // tablica znaków alfabetu
ifstream plik; //klasa pliku
int k = 107; //przesunięcie
string cezar(string in, int offset) // fukcja szyfrująca
{
string hashedString;
for(int i = 0; in.length() >= i; i++) // pętla pobierająca każdą literke tringa
{
int j = -1; // inicjazliacja zmiennej, aby na początku nie wykonuwała sie fukcja dodająca literke
while(alfabet[j] != in[i]) // sprawdza czy literka w alfabecie jest równa literce w słowie jeśli tak, to kończy pętle
{
j++; //ilość powtórzeń pętli, oraz zmienna oznaczająca kolejność literki względem tablicy "alfabet"
}
if(j != -1) // sprawdza czy liczba nie jest -1, aby przypadkiem nie dodać litery "a" do naszego ciągu znaków
{
hashedString += alfabet[(j+offset)%sizeof(alfabet)]; // (j+offset)%sizeof(alfabet) sprawdza czy liczba nie wychodzi poza szerokość tablicy
}
}
return hashedString; // zwraca stringa z poprzestawianymi liczbami
}
int main()
{
plik.open("dane_6_1.txt"); // wczytywanie pliku do zmiennej "plik", aby działo poprawnie plik musi być w folderze z plikiem źródłowym
if(plik.good()) // sprawdza czy plik jest wczytany jeśli tak kontynuuje program
{
string line; // zmienna pomocnicza
while(std::getline(plik,line)) // petla, która pobiera linie z pliku "plik" i wpisuje ją do zmiennej "line"
{
string newLine = cezar(line, k); // zmienna "newLine", która przyjmuje wartość zwrotu z funkcji szyfrującej "cezar"
cout << newLine << endl; // wyświetla zaszyfrowane słowo
}
}
return 0; // zakończenie programu
}