Jeśli jeszcze sami nie opracowaliście sobie maturalnych zadań na program z ostatnich lat to zapraszam do zapoznania się z moimi propozycjami. Na końcu wpisu znajdziecie link do pobrania paczki z poleceniami do zadań, danymi i oczywiście programami. Przepraszam za to, że niektóre są trochę nieczytelna i być może nieoptymalne, ale robiłem je jakiś czas temu i pewnie miałem wtedy clean code w poważaniu ;). Na egzamin możemy wybrać C++, Javę lub Pythona, w związku z czym przygotowałem implementację w każdym z tych języków.
Matura z informatyki – programy z 2014
Zadania na program z tego roku nie było szczególnie trudne. Jedynie teoretycznie najtrudniejsze zadanie trzecie sprawiło mi pewną trudność. Przydał się algorytm sprawdzający, czy liczba należy do liczb pierwszych, którego implementację wstawiałem na samym poczatku istnienia bloga.

Podpunkt a)
W podpunkcie tym wystarczyło przeiterować poprzez znaki słowa. Wykorzystamy fakt, że każdy znak można reprezentować jako liczbę. Zsumujemy potem znaki i sprawdzimy, czy suma jest liczba pierwszą.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#include <iostream> #include <fstream> using namespace std; bool czy_pierwsza(int a) { if(a<2)return false; for(int i=2; i*i<=a; i++) { if(a%i==0)return false; } return true; } int main() { int suma=0; int licznik=0; string napis; fstream plik; plik.open("NAPIS.txt", ios::in); if(!plik) { cout << "No nie"; return 1; }else { while(plik>>napis) { for(int i=0; i<napis.length(); i++) { suma+=napis[i]; } if(czy_pierwsza(suma)==true) licznik++; suma=0; } } cout << licznik; plik.close(); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { static boolean czyPierwsza(int a) { if(a<2) { return false; } for(int i=2; i*i<=a; i++) { if(a%i==0) { return false; } } return true; } public static void main(String[] args) throws IOException { File f = new File("NAPIS.txt"); if(!f.exists()) { System.out.println("Plik " + f.getName() + " nie został odnaleziony."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; int suma = 0; int licznik = 0; while((line = br.readLine()) != null) { for(char c : line.toCharArray()) { suma += c; } if(czyPierwsza(suma)) licznik++; suma = 0; } System.out.println("Znaleziono " + licznik + " słów, których suma ASCII jest liczbą pierwszą"); br.close(); } else { System.out.println("Oj nie nie, -1 byczq."); br.close(); return; } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
def czyPierwsza(x): for i in range(2, int(x/2) + 1): if x % i == 0: return False return True file = open("NAPIS.TXT", "r") pierwsze = 0 for line in file: suma = 0 for char in line: if char == "\n": continue suma += ord(char) if czyPierwsza(suma): pierwsze += 1 print(pierwsze) file.close() |
Podpunkt b)
Tutaj, podobnie jak w poprzednim podpunkcie, wykorzystamy liczbową reprezentację znaku. Wystarczy więc sprawdzać kolejne znaki i porównywać z poprzednim.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
#include <iostream> #include <fstream> using namespace std; int main() { fstream plik; plik.open("NAPIS.txt", ios::in); if(!plik) { cout << "No nie"; return 1; }else { int aktualny; int poprzedni; bool jest=true; string napis; while(plik>>napis) { poprzedni=napis[0]; for(int i=1; i<napis.length(); i++) { aktualny=napis[i]; if(aktualny<=poprzedni) { jest=false; }else { poprzedni=aktualny; } } if(jest==true) cout << napis << endl; jest=true; } } plik.close(); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { File f = new File("NAPIS.txt"); if(!f.exists()) { System.out.println("Plik " + f.getName() + " nie został odnaleziony."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; int aktualny; int poprzedni; boolean jest = true; while((line = br.readLine()) != null) { poprzedni = line.charAt(0); for(int i=1; i < line.length(); i++) { aktualny = line.charAt(i); if(aktualny<=poprzedni) { jest = false; } else { poprzedni = aktualny; } } if(jest) System.out.println(line); jest = true; } br.close(); } else { System.out.println("Oj nie nie, -1 byczq."); br.close(); return; } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
file = open("NAPIS.TXT", "r") for line in file: poprzednia = line[0] nastepna = 0 pom = True for char in line[1:]: if char == "\n": continue nastepna = char if nastepna <= poprzednia: pom = False break poprzednia = nastepna if pom: print(line) file.close() |
Podpunkt c)
W tym podpunkcie zapiszemy słowa do tablicy, a następnie będziemy sprawdzać, czy już się w niej pojawił. Jeżeli tak, to pomijamy jego ponowne wstawianie.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
#include <iostream> #include <fstream> using namespace std; int main() { fstream plik; plik.open("NAPIS.txt", ios:: in ); if (!plik) { cout << "No nie"; return 1; } else { string napis[1000]; int byl[1000]; for (int j = 0; j < 1000; j++) byl[j] == 0; int i = 0; while (plik >> napis[i]) { for (int j = i - 1; j >= 0; j--) { if (napis[i] == napis[j]) { byl[j]++; break; } } i++; } for (int j = 0; j < 1000; j++) { if (byl[j] != 0) cout << napis[j] << endl; } } plik.close(); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.HashMap; public class Main { public static void main(String[] args) throws IOException { File f = new File("NAPIS.txt"); if(!f.exists()) { System.out.println("Plik " + f.getName() + " nie został odnaleziony."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; HashMap<String, Boolean> map = new HashMap<String, Boolean>(); while((line = br.readLine()) != null) { if(map.containsKey(line)) { if(!map.get(line)) { map.put(line, true); System.out.println(line); } }else { map.put(line, false); } } br.close(); } else { System.out.println("Oj nie nie, -1 byczq."); br.close(); return; } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 |
file = open("NAPIS.TXT", "r") words = [] repeated = [] for line in file: if not words.__contains__(line): words.append(line) else: if not repeated.__contains__(line): repeated.append(line) for x in repeated: print(x) file.close() |
Matura z informatyki – programy z 2015

Podpunkt 1.

W tym zadaniu musimy każdą liczbę potraktować jako łańcuch znaków. Następnie zliczymy ilość znaków będących zerami i jedynkami. Na koniec możemy je ze sobą porównać.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <iostream> #include <fstream> using namespace std; int main() { fstream plik; plik.open("liczby.txt", ios::in); if(!plik) { cout << "Błąd"; return 1; }else { string liczba; int licznik=0; int l_jedynek=0; int l_zer=0; while(plik >> liczba) { for(int i=0; i<liczba.length(); i++) { if(liczba[i]=='1') l_jedynek++; else l_zer++; } if(l_zer>l_jedynek) licznik++; l_jedynek=0; l_zer=0; } cout << licznik; } return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static void main(String[] args) throws IOException { File f = new File("liczby.txt"); if(!f.exists()) { System.out.println("Plik " + f.getName() + " nie został odnaleziony."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; int count = 0; while((line = br.readLine()) != null) { int jedynki = 0; int zera = 0; for(char c : line.toCharArray()) { if(c == '0') { zera++; } else { jedynki++; } } if(zera>jedynki) count++; } br.close(); System.out.println(count); } else { System.out.println("Oj nie nie, -1 byczq."); br.close(); return; } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
file = open("liczby.txt", "r") suma = 0 for word in file: zera = 0 jedynki = 0 for char in word: if char == "\n": continue if char == '1': jedynki += 1 else: zera += 1 if zera > jedynki: suma += 1 print(suma) file.close() |
Podpunkt 2

Tutaj wystarczyło zauważyć, że liczba zapisana podzielna jest przez 2, jeżeli jej ostatnia cyfra, najmniej znacząca, nie jest jedynką. Sprawa ma się podobnie w przypadku podzielności przez 8.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#include <iostream> #include <fstream> using namespace std; int main() { fstream plik; plik.open("liczby.txt", ios::in); if(!plik) { cout << "Błąd"; return 1; }else { string liczba; int przez_dwa=0; int przez_osiem=0; while(plik >> liczba) { if(liczba[liczba.length()-1]=='0') przez_dwa++; if(liczba[liczba.length()-1]=='0' && liczba[liczba.length()-2]=='0' && liczba[liczba.length()-3]=='0') przez_osiem++; } cout << przez_dwa << endl << przez_osiem; } return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static long getValue(String s) { long l = 0; for(int i = s.length()-1; i >= 0; i--) { l+= Math.pow(2, s.length()-i) * Integer.parseInt("" + s.charAt(i)); } return l; } public static void main(String[] args) throws IOException { File f = new File("liczby.txt"); if(!f.exists()) { System.out.println("Plik " + f.getName() + " nie został odnaleziony."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; int p2 = 0; int p8 = 0; while((line = br.readLine()) != null) { if(line.charAt(line.length()-1) == '0') { p2++; if(line.charAt(line.length()-2) == '0' && line.charAt(line.length()-3) == '0' ) { p8++; } } } System.out.println("Podzielne przez 2: " + p2); System.out.println("Podzielne przez 8 : " + p8); br.close(); } else { System.out.println("Oj nie nie, -1 byczq."); br.close(); return; } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 |
file = open("liczby.txt", "r") p8 = 0 p2 = 0 for word in file: if word[len(word) - 2] == '0': p2 += 1 if word[len(word) - 3] == '0' and word[len(word) - 4] == '0': p8 += 1 print("Podzielne przez 2: " + str(p2)) print("Podzielne przez 8: " + str(p8)) file.close() |
Podpunkt 3

W tym podpunkcie potrzebujemy kilku zmiennych pomocniczych. Przyda nam w nim się, między innymi, zmienna przechowująca długość najdłuższego bloku zer. Następnie wystarczy sprawdzać lokalnie najdłuższy blok w iterowanym wyrazie. Potem już tylko pozostaje porównanie go z poprzednią zmienną i ewentualna ich podmiana.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
//wiem, że kod wygląda słabo, ale już naprawdę nie miałem siły :D #include <iostream> #include <fstream> using namespace std; int main() { fstream plik; plik.open("liczby.txt", ios::in); if(!plik) { cout << "Błąd"; return 1; }else { string liczba, najwieksza, najmniejsza; plik >> liczba; najwieksza=liczba; najmniejsza=liczba; int n=1; int najw=1; int najm=1; while(plik >> liczba) { ++n; if(liczba.length()>najwieksza.length()) { najwieksza=liczba; najw=n; }else { if(liczba.length()==najwieksza.length()) { for(int i=1; i<liczba.length(); i++) { if(liczba[i]>najwieksza[i]) { najwieksza=liczba; najw=n; break; }else { if(najwieksza[i]>liczba[i]) break; } } } } if(liczba.length()<najmniejsza.length()) { najmniejsza=liczba; najm=n; }else { if(liczba.length()==najmniejsza.length()) { for(int i=1; i<liczba.length(); i++) { if(liczba[i]<najmniejsza[i]) { najmniejsza=liczba; najm=n; break; }else { if(najwieksza[i]<liczba[i]) break; } } } } } cout << najm << endl << najw; } return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static long getValue(String s) { long l = 0; for(int i = s.length()-1; i >= 0; i--) { l+= Math.pow(2, s.length()-i) * Integer.parseInt("" + s.charAt(i)); } return l; } public static void main(String[] args) throws IOException { File f = new File("liczby.txt"); if(!f.exists()) { System.out.println("Plik " + f.getName() + " nie został odnaleziony."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line = br.readLine(); String max = line; String min = line; int n = 1; int Max = 1; int Min = 1; while((line = br.readLine()) != null) { n++; if(line.length() > max.length()) { max = line; Max=n; } else { if(line.length() == max.length()) { for(int i=1; i< line.length(); i++) { if(line.charAt(i) > max.charAt(i)) { max = line; Max = n; break; } else { if(max.charAt(i) > line.charAt(i)) { break; } } } } if(line.length() < min.length()) { min = line; Min = n; } else { if(line.length() == min.length()) { for(int i=1; i<min.length(); i++) { if(line.charAt(i)<min.charAt(i)) { min= line; Min=n; break; }else { if(max.charAt(i)<line.charAt(i)) { break; } } } } } } } System.out.println("Najmniejsze: " + Min); System.out.println("Najwieksze : " + Max); br.close(); } else { System.out.println("Oj nie nie, -1 byczq."); br.close(); return; } } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
file = open("liczby.txt", "r") minNum = file.readline() maxNum = minNum row = 1 maxRow = 1 minRow = 1 for line in file: row += 1 if len(line) > len(maxNum): maxNum = line maxRow = row else: if len(line) == len(maxNum): for i in range(1, len(line) - 1): if line[i] > maxNum[i]: maxNum = line maxRow = row break else: if maxNum[i] > line[i]: break else: if len(line) < len(minNum): minNum = line minRow = row else: if len(line) == len(minNum): for i in range(1, len(line) - 1): if line[i] < minNum[i]: minNum = line minRow = row break else: if maxNum[i] < line[i]: break print("Najmniejsza " + str(minRow)) print("Najwieksza " + str(maxRow)) file.close() |

Matura z informatyki – programy z 2016

Zadanie z tego roku sprawiło mi największa przyjemność, gdyż w swoim czasie strasznie „jarałem się” szyfrowaniem, kryptologią, a sam omawiany już przeze mnie szyfr Cezara nie należy do tych najtrudniejszych.
Podpunkt 1.

Zanim przejdziemy do szyfrowania, musimy sprawdzić jaka jest reszta z dzielenia 107 przez 26. Reszta ta jest nam potrzebna, aby ustalić faktyczne położenie przesuniętego znaku. Dzielimy przez 26, ponieważ to właśnie co tyle cyklicznie musimy powtarzać alfabet.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
#include <iostream> #include <fstream> using namespace std; void szyfruj(string &napisik, int k) { k%=26; for(int i=0; i<napisik.length(); i++) { if(napisik[i]+k>90) napisik[i]=napisik[i]+k-26; else napisik[i]=napisik[i]+k; } } int main() { fstream plik; plik.open("dane_6_1.txt", ios::in); if(!plik) { cout << "Dupa" ; return 1; }else { string napis; while(plik >> napis) { szyfruj(napis, 107); cout << napis << endl; } } plik.close(); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static String szyfruj(String s) { char[] chars = s.toCharArray(); for(int i = 0; i < chars.length; i++) { int a = chars[i] + 107 % 26; if(a > 'Z') a -= 26; chars[i] = (char) a; } return new String(chars); } public static void main(String[] args) throws IOException { File f = new File("dane_6_1.txt"); if(!f.exists()) { System.out.println("Podany plik nie istnieje."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; while((line = br.readLine()) != null) { System.out.println(szyfruj(line)); } } br.close(); } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
def szyfruj(a): chars = [] for c in a: if a == "\n": continue i = ord(c) + 107 % 26 if i > 90: i -= 26 chars.append(chr(i)) s = "" for c in chars: s += c return s file = open("dane_6_1.txt", "r") for line in file: print(szyfruj(line)) |
Podpunkt 2.


W podpunkcie tym dokonujemy działań odwrotnych do tych, które robiliśmy przy szyfrowaniu. Tak jak w poprzednim podpunkcie musimy uwzględnić cykliczne przesunięcie alfabetu o 26.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#include <iostream> #include <fstream> using namespace std; void deszyfruj(string &napisik, int k) { k%=26; for(int i=0; i<napisik.length(); i++) { if(napisik[i]-k<65) napisik[i]=napisik[i]-k+26; else napisik[i]=napisik[i]-k; } } int main() { fstream plik; plik.open("dane_6_2.txt", ios::in); if(!plik) { cout << "Dupa" ; return 1; }else { string napis; int kod; while(plik >> napis >> kod) { cout << napis << "|" << kod << "|"; deszyfruj(napis, kod); cout << napis << endl; } } plik.close(); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static String odszyfruj(String s, int klucz) { char[] chars = s.toCharArray(); for(int i = 0; i < chars.length; i++) { int a = chars[i] - klucz % 26; if(a < 'A') a += 26; chars[i] = (char) a; } return new String(chars); } public static void main(String[] args) throws IOException { File f = new File("dane_6_2.txt"); if(!f.exists()) { System.out.println("Podany plik nie istnieje."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; while((line = br.readLine()) != null) { if(line.split(" ").length < 2) continue; String slowo = line.split(" ")[0]; int klucz = Integer.parseInt(line.split(" ")[1]); System.out.println(odszyfruj(slowo, klucz)); } } br.close(); } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
def odszyfruj(a, key): s = "" for c in a: if a == "\n": continue i = ord(c) - key % 26 if i < 65: i += 26 s += chr(i) return s file = open("dane_6_2.txt", "r").read().split('\n') for line in file: if len(line.split(" ")) < 2 or len(line.split(" ")[1]) < 1: continue print(odszyfruj(line.split(" ")[0], int(line.split(" ")[1]))) |
Podpunkt 3.

W tym podpunkcie wystarczy sprawdzić odległość miedzy dwoma pierwszymi znakami. Następnie porównujemy go z pozostałymi odstępami. Jeżeli coś się nie będzie zgadzało, to dodajemy niepoprawny plik do listy.
C++
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
#include <iostream> #include <fstream> #include <cmath> using namespace std; void sprawdz(string napisik1, string &napisik2) { int k; if(napisik2[0]<napisik1[0]) k=abs(napisik2[0]+26-napisik1[0]); else k=abs(napisik2[0]-napisik1[0]); for(int i=0; i<napisik2.length(); i++) { if(napisik2[i]-k<65) napisik2[i]=napisik2[i]-k+26; else napisik2[i]=napisik2[i]-k; } if(napisik1!=napisik2) cout << napisik1 << endl; } int main() { fstream plik; plik.open("dane_6_3.txt", ios::in); if(!plik) { cout << "Dupa" ; return 1; }else { string napis1, napis2; while(plik >> napis1 >> napis2) { sprawdz(napis1,napis2); // cout << napis << "|" << kod << "|"; //deszyfruj(napis, kod); // cout << napis << endl; } } plik.close(); return 0; } |
Java
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
package matura; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; public class Main { public static boolean czyDobry(String slowo, String szyfr) { char[] chars = szyfr.toCharArray(); int klucz = chars[0] - slowo.charAt(0); if(klucz < 0) { klucz = 26 + klucz; } for(int i = 1; i < chars.length; i++) { int check = chars[i] - slowo.charAt(i); if(check < 0) { check = 26 + check; } if(check != klucz) return false; } return true; } public static void main(String[] args) throws IOException { File f = new File("dane_6_3.txt"); if(!f.exists()) { System.out.println("Podany plik nie istnieje."); return; } BufferedReader br = new BufferedReader(new FileReader(f)); if(br.ready()) { String line; while((line = br.readLine()) != null) { if(line.split(" ").length < 2) continue; String slowo = line.split(" ")[0]; String szyfr = line.split(" ")[1]; if(!czyDobry(slowo, szyfr)) { System.out.println(slowo); } } } br.close(); } } |
Python
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
def czyDobry(a, b): key = ord(b[0]) - ord(a[0]) if key < 0: key += 26 for i in range(1, len(b)): check = ord(b[i]) - ord(a[i]) if check < 0: check += 26 if check != key: return False return True file = open("dane_6_3.txt", "r").read().split('\n') for line in file: if len(line.split(" ")) < 2 or len(line.split(" ")[1]) < 1: continue if not czyDobry(line.split(" ")[0], line.split(" ")[1]): print(line.split(" ")[0]) |