Last active
August 29, 2015 14:21
-
-
Save j000/82a8d888d50f9a466253 to your computer and use it in GitHub Desktop.
Matura 2010 - rozszerzony - Anagramy
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <fstream> | |
#include <string> | |
using namespace std; | |
bool czy_rowne_dlugosci(string a[]) { | |
// piec slow | |
for (int k = 1; k < 5; ++k) { | |
if (a[k-1].size() != a[k].size()) // jesli rozna dlugosc | |
return false; // zwroc false | |
} | |
return true; | |
} | |
void swap(char &x, char &y) { | |
char tmp = x; | |
x = y; | |
y = tmp; | |
} | |
void sortuj(string &a) { | |
int dlugosc = a.size(); | |
for (int i = 1; i < dlugosc; ++i) { | |
for (int k = i; k > 0 && a[k] < a[k-1]; --k) { | |
swap(a[k], a[k-1]); | |
} | |
} | |
} | |
bool czy_anagram(string a[]) { | |
// dzialanie: | |
// adcb dcba -> abcd abcd => anagramy | |
// abac adac -> aabc aacd => nie anagramy | |
string kopia[5]; | |
for (int k = 0; k < 5; ++k) { | |
kopia[k] = a[k]; | |
} | |
for (int k = 0; k < 5; ++k) { // to jedziemy | |
sortuj(kopia[k]); | |
} | |
for (int k = 1; k < 5; ++k) { // ostatniego nie potrzebujemy | |
if (kopia[k-1] != kopia[k]) // jesli slowa sa rozne | |
return false; // to nie sa anagramem | |
} | |
return true; | |
} | |
int main () { | |
ifstream dane; | |
ofstream odpowiedza, odpowiedzb; | |
string wyrazy[5]; | |
////////// | |
dane.open("anagram.txt"); // otwieramy plik z danymi | |
odpowiedza.open("odp_4a.txt"); // otwieramy plik wyjsciowy | |
odpowiedzb.open("odp_4b.txt"); // otwieramy plik wyjsciowy | |
for (int i = 0; i < 200; ++i) { | |
for (int k = 0; k < 5; ++k) { | |
dane >> wyrazy[k]; | |
} | |
if (!czy_rowne_dlugosci(wyrazy)) // slowa roznej dlugosci | |
continue; // anagramami tez nie beda | |
for (int k = 0; k < 5; ++k) { | |
odpowiedza << wyrazy[k] << " "; // wypisujemy wszystkie wyrazy | |
} | |
odpowiedza << endl; // koniec lini | |
if (czy_anagram(wyrazy)) { | |
for (int k = 0; k < 5; ++k) { | |
odpowiedzb << wyrazy[k] << " "; // wypisujemy wszystkie wyrazy | |
} | |
odpowiedzb << endl; // koniec lini | |
} | |
} | |
// zamykamy pliki | |
odpowiedza.close(); | |
odpowiedzb.close(); | |
dane.close(); | |
// koniec | |
return 0; | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment