Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Wyrazy jednolite

Ostatnio zmodyfikowano 2017-05-22 20:15
Autor Wiadomość
Avaris
Temat założony przez niniejszego użytkownika
Wyrazy jednolite
» 2017-05-22 19:48:27
Hej,
mam mały problem z pierwszym podpunktem pewnego zadania maturalnego. Mam sprawdzić czy napisy pobrane z pliku są napisami jednolitymi.
Treść podpunktu: Napis nazywamy jednolitym, jeżeli wszystkie jego litery są takie same. Przykładem takiego napisu
jest AAAA. Podaj liczbę wierszy zawierających parę napisów jednolitych, które są wzajemnie
swoimi anagramami.
Przykład
Dla pliku zawierającego następujące dane:
AAAA AAAA
AHHAH AHHAH
AAAA AAAAAAA
BBBBBBB BABBAB
CCCCC CCCCC
wynikiem jest liczba 2 (pierwszy i ostatni wiersz). Zwróć uwagę, że napisy w trzecim wierszu są
napisami jednolitymi, ale nie są wzajemnie swoimi anagramami..

Uporałem się już z drugim podpunktem gdzie miałem sprawdzić czy napisy wzajemnie są anagramami, mam ideę by sprawdzić najpierw długość ciągu znaków a potem sprawdzać po znaku, czy sobie odpowiadają lecz nie mam pomysłu jak to zrobić. Myślę także, że działa to na zasadzie szukania palindromów. Proszę powiedzieć czy dobrze myślę, oraz o ewentualne instrukcje :)
Pozdrawiam!

C/C++
#include <iostream>
#include<fstream>
#include<string>
#include<cstring>
#include<cstdlib>
#include<algorithm>
using namespace std;

void zad1jednolite() {
    fstream plik;
    plik.open( "Dane/68/dane_napisy.txt", ios::in | ios::out );
    if( plik.good() == true ) { cout << "Uzyskano dostep do pliku" << endl; } else cout << "Brak dostepu do pliku" << endl;
   
    ifstream fin( "Dane/68/dane_napisy.txt" );
    ofstream fout( "wyniki_anagramy.txt" );
    string anagramy[ 2000 ];
    int ilosc_wierszy = 0;
    int k = 0;
    while( k < 2000 && fin >> anagramy[ k++ ] ) {
        fin >> anagramy[ k ];
        k++;
    }
   
    for( int i = 0; i < 2000; i = i + 2 )
    {
        if( anagramy[ i ].size() != anagramy[ i + 1 ].size() ) cout << "To nie sa wyrazy jednolite";
        else
    }
   
   
   
   
   
   
    void zad2anagramy() {
        fstream plik;
        plik.open( "Dane/68/dane_napisy.txt", ios::in | ios::out );
        if( plik.good() == true ) { cout << "Uzyskano dostep do pliku" << endl; } else cout << "Brak dostepu do pliku" << endl;
       
        ifstream fin( "Dane/68/dane_napisy.txt" );
        ofstream fout( "wyniki_anagramy.txt" );
        string anagramy[ 2000 ];
        int ilosc_wierszy = 0;
        int k = 0;
        while( k < 2000 && fin >> anagramy[ k++ ] ) {
            fin >> anagramy[ k ];
            k++;
        }
        int licz = 0;
        for( int i = 0; i < 2000; i = i + 2 )
        {
            if( anagramy[ i ].size() != anagramy[ i + 1 ].size() ) continue;
            else
            {
                sort( anagramy[ i ].begin(), anagramy[ i ].end() );
                sort( anagramy[ i + 1 ].begin(), anagramy[ i + 1 ].end() );
                if( anagramy[ i ] == anagramy[ i + 1 ] )
                     ilosc_wierszy = ilosc_wierszy + 1;
               
            }
        }
       
        fout << "Zad68.2\n";
        fout << "Anagramow jest: " << ilosc_wierszy;
        fin.close();
        fout.close();
    }
   
   
   
   
   
   
   
   
    int main()
    {
        zad1jednolite();
        zad2anagramy();
       
        return 0;
    }
P-161432
michal11
» 2017-05-22 20:15:12
Ja bym policzył ile razy w wyrazie występuje pierwsza litera, wtedy wystarczy sprawdzić czy pierwsze litery obu wyrazów są takie same i czy występują tyle samo razy.

Coś takiego napisałem żeby to sprawdzić
C/C++
bool AreWordsUniform( const std::string & FirstWord, const std::string & SecondWord )
{
    if( FirstWord.length() != SecondWord.length() ) { return false; }
   
    if( FirstWord[ 0 ] != SecondWord[ 0 ] ) { return false; }
   
    int FirstWordFirstLetterCount = std::count( FirstWord.cbegin(), FirstWord.cend(), FirstWord[ 0 ] );
    int SecondWordFirstLetterCount = std::count( SecondWord.cbegin(), SecondWord.cend(), SecondWord[ 0 ] );
   
    if( FirstWordFirstLetterCount != FirstWord.length() ||
    SecondWordFirstLetterCount != SecondWord.length() )
    {
        return false;
    }
   
    return true;
}
P-161434
« 1 »
  Strona 1 z 1