MetagramymetagramMetagramy to wyrazy różniące się od siebie tylko jedną literą znajdującą się w obu słowach na tej samej pozycji. Metagramami są np. słowa kasa i rasa, nie są nimi natomiast wyrazy krab i bruk.
W pliku słowa.txt zapisano 1000 par słów, każda w osobnej linii. Dwa słowa w jednej linii oddzielone są spacją. Słowa składają się z małych liter alfabetu łacińskiego.
Napisz program, który dla słów z pliku słowa.txt poda liczbę par słów, które są metagramami. Wynik zapisz w pliku wynik.txt.
Przykład 1
Dla przykładowych danych:
Linia 1. jmyxhkjjvmyt jmyxhkjjxmyt.
Linia 2. pmtwjkogf tnsosjesjx.
Linia 3. df ktlzs.
Linia 4. gondp bpvfoc.
Linia 5. bs qqhaozzbheb.
Linia 6. opuxpvts jfs.
Linia 7. euepkzg dbgzhs.
Linia 8. bgfg brfg.
plik wynik.txt zawierający odpowiedź do zadania (liczba naturalna oznaczająca liczbę par słów z pliku słowa.txt stanowiących metagramy),
plik(i) z komputerową realizacją zadania (kodem programu).
Polecenie 1
Twoim zadaniem jest opracowanie rozwiązania zadania w wybranym przez siebie języku programowania: C++, Java lub Python. Odpowiedź do zadania dla danych z pliku znajdziesz na dole strony.
Rozwiązanie
Rozwiązanie zadania przedstawimy w postaci pseudokodu, ponieważ na egzaminie maturalnym można korzystać z wybranego języka programowania: C++, Java lub Python.
Najpierw wczytujemy dane z pliku do tablicy. Pamiętajmy o tym, że każda linia zawiera dwa słowa.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
Zmiennej licznik przypisujemy wartość 0. W zmiennej będziemy przechowywać informację, ile par słów jest metagramami.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
Zapisujemy pętlę dla. Dla każdej pary słów będziemy sprawdzać, czy słowa te są różnej długości. Jeśli tak, nie mogą być metagramami, zatem przejdziemy do analizy kolejnej pary słów.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 8. słowo1 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.
Linia 9. słowo2 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy.
Linia 10. jeżeli długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły słowo2 zamknij nawias okrągły dwukropek.
Linia 11. kontynuuj pętlę od następnej iteracji.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
dla i = 0, 1, ..., 999 wykonuj:
słowo1 ← słowa[i][0]
słowo2 ← słowa[i][1]
jeżeli długość(słowo1) != długość(słowo2):
kontynuuj pętlę od następnej iteracji
Zmiennej ile_różnych przypisujemy wartość 0. W zmiennej tej będziemy przechowywać informację, na ilu pozycjach w słowach znajdują się różne litery.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 8. słowo1 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.
Linia 9. słowo2 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy.
Linia 10. jeżeli długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły słowo2 zamknij nawias okrągły dwukropek.
Linia 11. kontynuuj pętlę od następnej iteracji.
Linia 13. ile podkreślnik różnych ← 0.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
dla i = 0, 1, ..., 999 wykonuj:
słowo1 ← słowa[i][0]
słowo2 ← słowa[i][1]
jeżeli długość(słowo1) != długość(słowo2):
kontynuuj pętlę od następnej iteracji
ile_różnych ← 0
Jeśli słowa są takiej samej długości, przechodzimy do kolejnej pętli.
Sprawdzamy, czy kolejne litery słów są takie same. Przy każdej parze liter, które się różnią, zwiększamy wartość zmiennej ile_różnych o 1.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 8. słowo1 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.
Linia 9. słowo2 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy.
Linia 10. jeżeli długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły słowo2 zamknij nawias okrągły dwukropek.
Linia 11. kontynuuj pętlę od następnej iteracji.
Linia 13. ile podkreślnik różnych ← 0.
Linia 14. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykonuj dwukropek.
Linia 15. jeżeli słowo1 otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości słowo2 otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek.
Linia 16. ile podkreślnik różnych ← ile podkreślnik różnych plus 1.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
dla i = 0, 1, ..., 999 wykonuj:
słowo1 ← słowa[i][0]
słowo2 ← słowa[i][1]
jeżeli długość(słowo1) != długość(słowo2):
kontynuuj pętlę od następnej iteracji
ile_różnych ← 0
dla j = 0, 1, ..., długość(słowo1) wykonuj:
jeżeli słowo1[j] != słowo2[j]:
ile_różnych ← ile_różnych + 1
Gdy wartość zmiennej ile_różnych będzie większa od 1, pętla przerwie swoje działanie, ponieważ słowa nie będą metagramami.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 8. słowo1 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.
Linia 9. słowo2 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy.
Linia 10. jeżeli długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły słowo2 zamknij nawias okrągły dwukropek.
Linia 11. kontynuuj pętlę od następnej iteracji.
Linia 13. ile podkreślnik różnych ← 0.
Linia 14. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykonuj dwukropek.
Linia 15. jeżeli słowo1 otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości słowo2 otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek.
Linia 16. ile podkreślnik różnych ← ile podkreślnik różnych plus 1.
Linia 17. jeżeli ile podkreślnik różnych zamknij nawias ostrokątny 1 dwukropek.
Linia 18. przerwij pętlę.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
dla i = 0, 1, ..., 999 wykonuj:
słowo1 ← słowa[i][0]
słowo2 ← słowa[i][1]
jeżeli długość(słowo1) != długość(słowo2):
kontynuuj pętlę od następnej iteracji
ile_różnych ← 0
dla j = 0, 1, ..., długość(słowo1) wykonuj:
jeżeli słowo1[j] != słowo2[j]:
ile_różnych ← ile_różnych + 1
jeżeli ile_różnych > 1:
przerwij pętlę
Po sprawdzeniu całego słowa – jeśli zmienna ile_różnych ma wartość 1 – zwiększamy wartość zmiennej licznik o 1.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 8. słowo1 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.
Linia 9. słowo2 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy.
Linia 10. jeżeli długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły słowo2 zamknij nawias okrągły dwukropek.
Linia 11. kontynuuj pętlę od następnej iteracji.
Linia 13. ile podkreślnik różnych ← 0.
Linia 14. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykonuj dwukropek.
Linia 15. jeżeli słowo1 otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości słowo2 otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek.
Linia 16. ile podkreślnik różnych ← ile podkreślnik różnych plus 1.
Linia 17. jeżeli ile podkreślnik różnych zamknij nawias ostrokątny 1 dwukropek.
Linia 18. przerwij pętlę.
Linia 20. jeżeli ile podkreślnik różnych znak równości 1 dwukropek.
Linia 21. licznik ← licznik plus 1.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
dla i = 0, 1, ..., 999 wykonuj:
słowo1 ← słowa[i][0]
słowo2 ← słowa[i][1]
jeżeli długość(słowo1) != długość(słowo2):
kontynuuj pętlę od następnej iteracji
ile_różnych ← 0
dla j = 0, 1, ..., długość(słowo1) wykonuj:
jeżeli słowo1[j] != słowo2[j]:
ile_różnych ← ile_różnych + 1
jeżeli ile_różnych > 1:
przerwij pętlę
jeżeli ile_różnych = 1:
licznik ← licznik + 1
Po sprawdzeniu całej zawartości pliku zapisujemy stan zmiennej licznik do pliku wynik.txt i zamykamy pliki.
Linia 1. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 2. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy ← wczytaj pierwsze słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 3. słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy ← wczytaj drugie słowo z i minus tej linii pliku cudzysłów słowa kropka txt cudzysłów.
Linia 4. przejdź do następnej linii w pliku cudzysłów słowa kropka txt cudzysłów.
Linia 6. licznik ← 0.
Linia 7. dla i znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek 999 wykonuj dwukropek.
Linia 8. słowo1 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 0 zamknij nawias kwadratowy.
Linia 9. słowo2 ← słowa otwórz nawias kwadratowy i zamknij nawias kwadratowy otwórz nawias kwadratowy 1 zamknij nawias kwadratowy.
Linia 10. jeżeli długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykrzyknik znak równości długość otwórz nawias okrągły słowo2 zamknij nawias okrągły dwukropek.
Linia 11. kontynuuj pętlę od następnej iteracji.
Linia 13. ile podkreślnik różnych ← 0.
Linia 14. dla j znak równości 0 przecinek 1 przecinek kropka kropka kropka przecinek długość otwórz nawias okrągły słowo1 zamknij nawias okrągły wykonuj dwukropek.
Linia 15. jeżeli słowo1 otwórz nawias kwadratowy j zamknij nawias kwadratowy wykrzyknik znak równości słowo2 otwórz nawias kwadratowy j zamknij nawias kwadratowy dwukropek.
Linia 16. ile podkreślnik różnych ← ile podkreślnik różnych plus 1.
Linia 17. jeżeli ile podkreślnik różnych zamknij nawias ostrokątny 1 dwukropek.
Linia 18. przerwij pętlę.
Linia 20. jeżeli ile podkreślnik różnych znak równości 1 dwukropek.
Linia 21. licznik ← licznik plus 1.
Linia 23. zapisz licznik do pliku cudzysłów wynik kropka txt cudzysłów.
Linia 24. zamknij plik cudzysłów słowa kropka txt cudzysłów.
Linia 25. zamknij plik cudzysłów wynik kropka txt cudzysłów.
dla i = 0, 1, ..., 999 wykonuj:
słowa[i][0] ← wczytaj pierwsze słowo z i-tej linii pliku "słowa.txt"
słowa[i][1] ← wczytaj drugie słowo z i-tej linii pliku "słowa.txt"
przejdź do następnej linii w pliku "słowa.txt"
licznik ← 0
dla i = 0, 1, ..., 999 wykonuj:
słowo1 ← słowa[i][0]
słowo2 ← słowa[i][1]
jeżeli długość(słowo1) != długość(słowo2):
kontynuuj pętlę od następnej iteracji
ile_różnych ← 0
dla j = 0, 1, ..., długość(słowo1) wykonuj:
jeżeli słowo1[j] != słowo2[j]:
ile_różnych ← ile_różnych + 1
jeżeli ile_różnych > 1:
przerwij pętlę
jeżeli ile_różnych = 1:
licznik ← licznik + 1
zapisz licznik do pliku "wynik.txt"
zamknij plik "słowa.txt"
zamknij plik "wynik.txt"
Odpowiedź do zadania
Odpowiedź do zadania znajduje się w pliku.
R1c3jz8vk9zk0
Przycisk do pobrania pliku TXT z odpowiedzią do zadania.