poniedziałek, 10 kwietnia 2017

Czy napis jest anagramem?

Anagram 
Anagram jest to wyraz (lub całe zdanie) powstały w wyniku przestawiania liter innego wyrazu, wykorzystując wszystkie jego litery. Pojęcie anagramu jest podstawowym pojęciem jakie należy sobie przyswoić, przed przystąpieniem do matury z informatyki. Zadania związane z anagramami trafiają się bardzo często i wszystkie są do siebie podobne.
Aby sprawdzić czy dany wyraz jest anagramem drugiego, należy sprawdzić czy ich długość jest taka sama. Następnie posortować obydwie zmienne za pomocą sortowania bąbelkowego. Jeżeli posortowane zmienne są takie same i mają taką samą długość, oznacza to że są anagramami.
Dla przykładu:
anagramem wyrazu karol jest wyraz rolka
anagramem wyrazu matura jest wyraz trauma.

Lista kroków:
  1. Początek algorytmu
  2. Wczytaj pierwsze słowo do zmiennej wyraz1
  3. Wczytaj drugie słowo do zmiennej  wyraz2
  4. Jeżeli długości zmiennych wyraz1 i wyraz2 są różne, to wyrazy nie są anagramami
  5. Posortuj bąbelkowo zmienną wyraz1 i zapisz do zmiennej wyraz1
  6. Posortuj bąbelkowo zmienną wyraz2 i zapisz do zmiennej słowo2
  7. Jeżeli wyraz1=wyraz2 to wyrazy są anagramami
  8. W przeciwnym wypadku nie są anagramami
  9. Koniec algorytmu

C++
include <cstdlib>
#include <iostream>
#include <string>
using namespace std;
bool anagram(string wyraz1, string wyraz2)
{
    if (wyraz1.length()!=wyraz2.length())
        return false;   // dlugosc sie nie zgadza
    // sortujemy babelkowo obydwa stringi
    for (int i = 0; i<wyraz1.length()-1; i++)
    {
        for (int j = 0; j<wyraz2.length()-1; j++)
        {
            if (wyraz1[j]>wyraz1[j+1])
                swap(wyraz1[j], wyraz1[j+1]);
            if (wyraz2[j]>wyraz2[j+1])
                swap(wyraz2[j], wyraz2[j+1]);
        }
    }
  return wyraz1==wyraz2; //zwracamy true lub false
}
int main()
{
    string wyraz1, wyraz2;
    cout << "Podaj wyraz pierwszy" << endl;
    cin >> wyraz1;
    cout << "Podaj wyraz drugi" << endl;
    cin >> wyraz2;
    cout << anagram(wyraz1, wyraz2) << endl;
    system("PAUSE");
    return 0;
}

Excel
Jak sprawdzić czy dane słowo jest anagramem w Excelu?
1. Po wprowadzeniu wartości z treścią pierwszego i drugiego wyrazu należy wyodrębnić z wyrazu litery, które tworzą ten wyraz. tą operację wykonujemy za pomocą instrukcji "FRAGMENT TEKSTU" którą stosujemy w kolejnych komórkach kolumny M.

=FRAGMENT.TEKSTU($C$3;1;1)

Analogicznie postępujemy z drugim wyrazem.
2. Pierwszy wyodrębniony wyraz skopiować do komórki C9 (uwaga wkleić tylko wartość a nie formułę). Wklejanie odbywa się za pomocą  makra.
3. Tworzenie makra
a. Rysujemy prostokąt, dodajemy mu tekst o treści "wklej pierwszy wyraz"
b. Uruchamiamy opcję rejestracji makra
c. Wybieramy narzędzie: Deweloper >> Zarejestruj makro
d. Nazywamy makro "Skopiuj1"
e. Nacisnąć "ok"
f. Ustawić się w C9
g. Wykonać kopiowanie z wklejeniem wartości
h. Zatrzymaj makro (z narzędzia Deweloper)
4. Analogicznie postępujemy z drugim wyrazem
5. Utworzyć makro które będzie sortować dane od A do Z w analogiczny sposób dla obydwu wyrazów
6. Projektujemy funkcję która sprawdzi czy wyrazy składają się z takich samych liter
=JEŻELI(C10=E10;0;1)
7. Na końcu należy podsumować (funkcja SUMA, która podsumowuje wyniki)
=SUMA(G10:G23)
8. Wypisujemy funkcję JEŻELI sprawdzającą czy wyrazy składają się z takich samych liter

=JEŻELI(G24=0;"TAK - wyrazy tworzą anagram";"NIE- wyrazy nie są anagramami")

Opracował: Szymon G.