Advertisement
Guest User

Languages

a guest
May 20th, 2013
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 16.89 KB | None | 0 0
  1. //talda@digitus.itk.ppke.hu
  2. #include <iostream>
  3. #include <list>
  4. #include <map>
  5. #include <fstream>
  6.  
  7. using namespace std;
  8.  
  9. class Egyszoveg
  10. {
  11.     public:
  12.  
  13.     bool mondatVege(char c)
  14.     {
  15.       return c == '.' || c == '!' || c == '?';
  16.     }
  17.  
  18.     bool mondatonBeluliIrasjel(char c)
  19.     {
  20.       return c == ':' || c == ';' || c == ',';
  21.     }
  22.  
  23.     bool maganhangzo(char c)
  24.     {
  25.       return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u' || c == 'y';
  26.     }
  27.  
  28.     bool ujMondat( char azonosito, std::string mondat)
  29.     {
  30.         int i = 0;
  31.         Mondat keszuloMondat;
  32.         Szo keszuloSzo;
  33.         do
  34.         {
  35.            keszuloSzo.clear();
  36.            do
  37.             {
  38.                 keszuloSzo.push_back (mondat [i]);
  39.                 ++i;
  40.             }
  41.             while (mondat[i] != ' ' && !mondatVege (mondat[i]) && i<=mondat.size());
  42.             keszuloMondat.push_back (keszuloSzo);
  43.             if (mondat [i] == ' ' && i+1 <= mondat.size() && !mondatVege (mondat[i]))
  44.             {
  45.                ++i;
  46.             }
  47.         }
  48.         while (!mondatVege(mondat[i]) && i<=mondat.size());
  49.         m_szoveg [azonosito] = keszuloMondat;
  50.     }
  51.  
  52.     void kiir (std::ostream & ki)
  53.     {
  54.         ki << "Szoveg:" << std::endl;
  55.         for (Szoveg::iterator it = m_szoveg.begin(); it!= m_szoveg.end(); ++it)
  56.         {
  57.            ki << it -> first << " mondat:" << std::endl;
  58.            kiir (ki, it -> second);
  59.            ki << '.' << std::endl;
  60.         }
  61.     }
  62.  
  63.     void beolvas (std::ifstream & ifs)
  64.     {
  65.         std::string kuka;
  66.         getline (ifs, kuka);
  67.         if (kuka!="Szoveg:")
  68.         {
  69.             std::cout << "Nagy gond van." << std::endl;
  70.             return;
  71.         }
  72.         std::string mondat;
  73.         int szamlalo = 0;
  74.         char azonosito;
  75.         while (ifs.good())
  76.         {
  77.             if (szamlalo % 2 == 0)
  78.             {
  79.                 ifs >> azonosito;
  80.                 std::getline (ifs, kuka);
  81.             }
  82.             else
  83.             {
  84.                 std::getline (ifs, mondat);
  85.                 int i = 0;
  86.                 Mondat keszuloMondat;
  87.                 Szo keszuloSzo;
  88.                 do
  89.                 {
  90.                    keszuloSzo.clear();
  91.                    do
  92.                     {
  93.                         keszuloSzo.push_back (mondat [i]);
  94.                         ++i;
  95.                     }
  96.                     while (mondat[i] != ' ' && !mondatVege (mondat[i]) && i<=mondat.size());
  97.                     keszuloMondat.push_back (keszuloSzo);
  98.                     if (mondat [i] == ' ' && i+1 <= mondat.size())
  99.                     {
  100.                        ++i;
  101.                     }
  102.                 }
  103.                 while (!mondatVege(mondat[i]) && i<=mondat.size());
  104.                 m_szoveg [azonosito] = keszuloMondat;
  105.                 keszuloMondat.clear();
  106.             }
  107.             ++szamlalo;
  108.         }
  109.     }
  110.  
  111.     void leggyakoribbBetu (std::string nyelv)
  112.     {
  113.         std::map <char, int> betuszam;
  114.         for ( Szoveg::iterator it1 = m_szoveg.begin(); it1 != m_szoveg.end(); ++it1 )
  115.         {
  116.             for ( Mondat::iterator it2 = (it1->second).begin(); it2 != (it1->second).end(); ++it2 )
  117.             {
  118.                 for ( Szo::iterator it3 = (*it2).begin(); it3 != (*it2).end(); ++it3 )
  119.                 {
  120.                     if (!mondatonBeluliIrasjel(*it3))
  121.                     {
  122.                         char betu = tolower(*it3);
  123.                         if (betuszam.find(betu) == betuszam.end())
  124.                         {
  125.                             betuszam [betu]=1;
  126.                         } else
  127.                         {
  128.                             betuszam [betu]++;
  129.                         }
  130.                     }
  131.  
  132.                 }
  133.             }
  134.         }
  135.         int max=0;
  136.         for ( std::map < char, int >::iterator it = betuszam.begin(); it != betuszam.end(); ++it )
  137.         {
  138.             if (it->second > max)
  139.             {
  140.                 max = it->second;
  141.             }
  142.         }
  143.         std::cout << "A leggyakoribb betu(k) a " << nyelv << " nyelvben: ";
  144.         for ( std::map < char, int >::iterator it = betuszam.begin(); it != betuszam.end(); ++it )
  145.             {
  146.                 if (it->second == max)
  147.                 {
  148.                     std::cout << it->first << std::endl;
  149.                 }
  150.             }
  151.     }
  152.  
  153.     void leggyakoribbMassalhangzo (std::string nyelv)
  154.     {
  155.         std::map <char, int> betuszam;
  156.         for ( Szoveg::iterator it1 = m_szoveg.begin(); it1 != m_szoveg.end(); ++it1 )
  157.         {
  158.             for ( Mondat::iterator it2 = (it1->second).begin(); it2 != (it1->second).end(); ++it2 )
  159.             {
  160.                 for ( Szo::iterator it3 = (*it2).begin(); it3 != (*it2).end(); ++it3 )
  161.                 {
  162.                     if (!mondatonBeluliIrasjel(*it3) && !maganhangzo(*it3))
  163.                     {
  164.                         char betu = tolower(*it3);
  165.                         if (betuszam.find(betu) == betuszam.end())
  166.                         {
  167.                             betuszam [betu]=1;
  168.                         } else
  169.                         {
  170.                             betuszam [betu]++;
  171.                         }
  172.                     }
  173.  
  174.                 }
  175.             }
  176.         }
  177.         int max=0;
  178.         for ( std::map < char, int >::iterator it = betuszam.begin(); it != betuszam.end(); ++it )
  179.         {
  180.             if (it->second > max)
  181.             {
  182.                 max = it->second;
  183.             }
  184.         }
  185.         std::cout << "A leggyakoribb massalhangzo(k) a " << nyelv << " nyelvben: ";
  186.         for ( std::map < char, int >::iterator it = betuszam.begin(); it != betuszam.end(); ++it )
  187.             {
  188.                 if (it->second == max)
  189.                 {
  190.                     std::cout << it->first << std::endl;
  191.                 }
  192.             }
  193.     }
  194.  
  195.     void leghosszabbSzo (std::string nyelv)
  196.     {
  197.         std::map <Szo, int> legesleghosszabbSzo;
  198.         int max = 0;
  199.         for ( Szoveg::iterator it1 = m_szoveg.begin(); it1 != m_szoveg.end(); ++it1 )
  200.         {
  201.             for ( Mondat::iterator it2 = (it1->second).begin(); it2 != (it1->second).end(); ++it2 )
  202.             {
  203.                 int betuSzam = 0;
  204.                 for ( Szo::iterator it3 = (*it2).begin(); it3 != (*it2).end(); ++it3 )
  205.                 {
  206.                     if (!mondatonBeluliIrasjel(*it3))
  207.                     {
  208.                         ++betuSzam;
  209.                     }
  210.                 }
  211.                 if (betuSzam > max)
  212.                 {
  213.                     max = betuSzam;
  214.                     legesleghosszabbSzo.clear();
  215.                     legesleghosszabbSzo [*it2] = betuSzam;
  216.                 }
  217.             }
  218.         }
  219.         std::cout << "A leghosszabb szo a " << nyelv << " nyelvu szovegben: ";
  220.         for ( std::map <Szo, int>::iterator it1 = legesleghosszabbSzo.begin(); it1 != legesleghosszabbSzo.end(); ++it1 )
  221.         {
  222.             Szo proba;
  223.             proba = it1->first;
  224.             for ( Szo::iterator it2 = (proba).begin(); it2 != (proba).end(); ++it2 )
  225.             {
  226.                 std::cout << *it2;
  227.             }
  228.         }
  229.         int aszoHossza;
  230.         for ( std::map <Szo, int>::iterator it = legesleghosszabbSzo.begin(); it != legesleghosszabbSzo.end(); ++it )
  231.         {
  232.             aszoHossza = it->second;
  233.         }
  234.         std::cout << ", es ennek a hossza: " << aszoHossza << " betu." << std::endl;
  235.     }
  236.  
  237.     void atlagosSzohossz (std::string nyelv)
  238.     {
  239.         std::list <int> szavakSzama;
  240.         for ( Szoveg::iterator it1 = m_szoveg.begin(); it1 != m_szoveg.end(); ++it1 )
  241.         {
  242.             for ( Mondat::iterator it2 = (it1->second).begin(); it2 != (it1->second).end(); ++it2 )
  243.             {
  244.                 int betuSzam = 0;
  245.                 for ( Szo::iterator it3 = (*it2).begin(); it3 != (*it2).end(); ++it3 )
  246.                 {
  247.                     if (!mondatonBeluliIrasjel(*it3))
  248.                     {
  249.                         ++betuSzam;
  250.                     }
  251.                 }
  252.                 szavakSzama.push_back (betuSzam);
  253.             }
  254.         }
  255.         int osszeg = 0;
  256.         for ( std::list <int>::iterator it = szavakSzama.begin(); it != szavakSzama.end(); ++it )
  257.         {
  258.             osszeg = osszeg + *it;
  259.         }
  260.         std::cout << "Az atlagos szohossz a " << nyelv << " nyelvben: " << (double(osszeg)/double(szavakSzama.size())) << " betu." << std::endl;
  261.     }
  262.  
  263.     private:
  264.     typedef std::list <char> Szo;
  265.     typedef std::list <Szo> Mondat;
  266.     typedef std::map <char, Mondat> Szoveg;
  267.  
  268.     void kiir (std::ostream & ki, Mondat & mondat )
  269.     {
  270.         for (Mondat::iterator it = mondat.begin(); it != mondat.end(); ++it)
  271.         {
  272.             kiir (ki, *it);
  273.         }
  274.     }
  275.  
  276.     void kiir (std::ostream & ki, Szo & szo)
  277.     {
  278.         for (Szo::iterator it = szo.begin(); it != szo.end(); ++it)
  279.         {
  280.             ki << *it;
  281.         }
  282.         ki << ' ';
  283.     }
  284.  
  285.     Szoveg m_szoveg;
  286. };
  287.  
  288. int main()
  289. {
  290.     Egyszoveg szoveg;
  291.     szoveg.ujMondat('a', "Pisti nyaralni megy.");
  292.     szoveg.ujMondat('b', "Az egyetemnek mindjart vege.");
  293.     szoveg.ujMondat('c', "Fizikabol vizsgazni kell.");
  294.     std::ofstream ofs ("ki.txt");
  295.     szoveg.kiir (std::cout);
  296.     szoveg.kiir (ofs);
  297.  
  298.     Egyszoveg elsoszoveg;
  299.     std::ifstream ifs ("ki.txt");
  300.     if( !ifs.is_open())
  301.     {
  302.         std::cout << "Sikertelen megnyitas!" << std::endl;
  303.         return 42;
  304.     }
  305.     elsoszoveg.beolvas(ifs);
  306.     std::ofstream ofs2 ("ki2.txt");
  307.     elsoszoveg.kiir (std::cout);
  308.     elsoszoveg.kiir (ofs2);
  309.  
  310.     std::cout << std::endl;
  311.  
  312.     Egyszoveg magyar;
  313.     magyar.ujMondat('a', "Egy peldakent megemlithetjuk az alkalmazott fizika egyik kulonosen termekeny teruletet, a szilardtestfizikat, ami a kvantummechanika es az elektromagnesseg alapveto torvenyeit hasznalja teridomot alkoto atomok viselkedesenek vizsgalatara.");
  314.     magyar.ujMondat('b', "Azonban ismerni a jot konnyebb, mint kovetni; sot meg az sem nehez, hogy nemelykor jo vagy eppen nemes tettet vigyunk veghez: de egesz eltedet meghatarozott elv szerent intezve, sohasem tenni mast, mint amit az erkolcsiseg kivan; s meg akkor sem, midon haszon, batorlet, indulat heve vagy szenvedelem ereje masfele ragad; ezt hivjak erenynek.");
  315.     magyar.ujMondat('c', "A szervezo jogosult tovabba a nyeremeny atadasaig kizarni a jatekbol annak a jatekosnak valamennyi palyazatat, aki tisztessegtelen modszerekkel probal meg nyeremenyhez jutni, valamint a jatek celjaval ellentetes modon, a jelen jatekszabalyzatban foglalt feltetelek es eloirasok megkerulesevel probal meg reszt venni a jatekban.");
  316.     magyar.ujMondat('d', "Tudom, hogy ez a kerdes es a kifinomultsagnak ez a szintje a mindennapi problemak, a befizetendo csekkek erdejeben Magyarorszagrol nezve tavoli es sznob dolognak tunik, de a pezsgo tizmilliard dollaros uzlet vilagszerte, a magyar kitoresi pontokat keresve tehat erdemes lenne odafigyelni.");
  317.     magyar.ujMondat('e', "Ezek seregebol valo Pazmany Peter is, ki midon lata, hogy mas uton nem lehet a Krisztus evangeliomat vallo nepnek veszedelmet szerezzen, a jezsuitak regulaja mellol, melyre egesz eletet eskuvessel kotelezte vala, elszakada, es hogy annyival nagyobb ereje lenne a Krisztus anyaszentegyhazanak uldozesere a jezsuitak Magyarorszaganak foeleje lon es Ofelsege, a kiraly utan ezen orszagban legfelso tisztessegbe helyheztetek, majd azon ido tajban, melyben e felsomagyarorszagi varmegyek nem csak testi, hanem lelki ellensegnek is hirdettettek az orszagnak nyilvanvalo gyalazataval, esztergomi ersekke tetetek, es az orszagnak akaratja ellen nyakara kottettetek");
  318.     std::ofstream ofmagyar ("magyar.txt");
  319.     magyar.kiir (ofmagyar);
  320.  
  321.     Egyszoveg sved;
  322.     sved.ujMondat('a', "Den ungerska regeringen har kraftfullt tillbakavisat dessa synpunkter och gjort gallande att andringarna inte pa nagot satt star i strid mot demokratiska principer eller manskliga rattigheter; andringarna ar daremot, enligt regeringen, nodvandiga for att fa fart pa den ungerska ekonomin och innebar ett nodvandigt nytankande for att mota framtidens utmaningar.");
  323.     sved.ujMondat('b', "Lyckan ser alltid liten ut nar du haller den i dina hander, men slapp den, och du inser genast hur stor och dyrbar den ar.");
  324.     sved.ujMondat('c', "Det har kan ju inte stamma enligt alla som uttryckt sig i media sa ar val majoriteten av det Svenska folket rasister, eller ar det sa att ordet rasism anvands lite varsta mycket fritt idag for att beskriva nagon som inte har samma asikter som nagon annan.");
  325.     sved.ujMondat('d', "Det ar sa mycket jag vill fraga denna levande historiebok som var med i tidernas begynnelse nar musiktavlingen foddes som ett forsok att forena folken och plastra om en sargad kontinents krigssar.");
  326.     sved.ujMondat('e', "Det var faktiskt ren tur eller vad vi ska kalla det, eller jag tror nog att det kanske var lite odet, jag hade liksom bara hort namnet flera ganger och innan var det min systerdotter som sa att du maste lyssna pa dem och sa kopte jag min forsta samlingsplatta, som jag gillade, och sen var det en ljudtekniker i det bandet jag var i som sa att han har hort att de kickat sin sangerska och sa att du borde liksom soka.");
  327.     std::ofstream ofsved ("sved.txt");
  328.     sved.kiir (ofsved);
  329.  
  330.     Egyszoveg finn;
  331.     finn.ujMondat ('a', "Joulupukkiturismi kukoistaa Lapissa: kaikki haluavat nahda joulupukin, siitakin huolimatta, etta suomalainen joulupukki ei valttamatta ole kaikille se oikea pukki.");
  332.     finn.ujMondat ('b', "Kielitoimiston suosituksen mukaan vieraat nimet, joiden aanneasu paattyy konsonanttiin ja kirjoitusasu vokaaliin, saavat aantamyksensa mukaisen taivutuspaatteen, mutta kirjoitettaessa toimitaan ikaan kuin kirjoitusasun loppuvokaali olisi aantyva.");
  333.     finn.ujMondat ('c', "Karjistysten takaa selviaa muun muassa se, etta asuinpaikan luonto ja ulkoilumahdollisuudet eivat olekaan ihmisille yhta tarkeita kuin vaikkapa se, etta palvelut pelaavat ja etaisyydet ovat siedettavia.");
  334.     finn.ujMondat ('d', "Parin viikon paasta paihin painetaan valkolakkeja ja kasiin papereita, joiden suurin painoarvo on siina, etta niita voivat sukulaiset lahjapoydalta pallistella. ");
  335.     finn.ujMondat ('e', "Sanastossa on kuitenkin enemman sukulaisuutta kuin akkiseltaan nayttaisi, silla ugrilaisen kantakielen monet sanat ovat unkarissa ja suomessa muuttuneet aanteellisesti niin paljon eri tavoin, ettei maallikko enaa pysty tunnistamaan niiden keskinaista sukulaisuutta.");
  336.     std::ofstream offinn ("finn.txt");
  337.     finn.kiir (offinn);
  338.  
  339.     Egyszoveg norveg;
  340.     norveg.ujMondat ('a', "Ungarns parlament proklamerte landet som monarki, men den eksilerte ungarske kongen og osterrikske keiseren fikk aldri tilbake tronen, tross flere forsok, da seierherrene fra forste verdenskrig la sterkt press pa Ungarn for a forhindre det.");
  341.     norveg.ujMondat ('b', "Dessuten gar noen av skillene mellom vest og ostskandinavisk tvers igjennom det norske sprakomradet, og videre har skriftspraket bokmal svert mange ostnordiske trekk pa grunn av sitt nere slektskap med dansk og kan i sin mest konservative variant sies a vere nermest ren ostnordisk.");
  342.     norveg.ujMondat ('c', "Ogsa disse kan sannsynligvis sammenfattes videre, men disse enhetene, de sakalte makrofamiliene, knytter det seg mye storre usikkerhet til, siden de respektive ursprakene ligger sapass lenge tilbake i tid.");
  343.     norveg.ujMondat ('d', "Sammenslaingen av de to landene hadde i flere tiar vert onsket i begge statene, men i det demokratiske Osterrike fryktet man likevel for konsekvensene av a ga sammen med den mye sterkere naboen i nord og var derfor nolende");
  344.     norveg.ujMondat ('e', "Dette landet Harald berget med sin kjemperad, dette landet Hakon verget medens Oyvind kvad; Olav pa det landet malte korset med sitt blod, fra dets hoye Sverre talte Roma midt imot.");
  345.     std::ofstream ofnorveg ("norveg.txt");
  346.     norveg.kiir (ofnorveg);
  347.  
  348.     //Feladat: leggyakoribb betu (ekezet nem szamit, egyebkent emiatt nem tul reprezentativan :D) nehany nyelvben.
  349.  
  350.     magyar.leggyakoribbBetu("magyar");
  351.     sved.leggyakoribbBetu("sved");
  352.     finn.leggyakoribbBetu("finn");
  353.     norveg.leggyakoribbBetu("norveg");
  354.  
  355.     std::cout << std::endl;
  356.  
  357.     //Feladat: leggyakoribb massalhangzo keresese (a magyarban így csak betujegyeket vizsgalva a kettos betuk miatt):
  358.  
  359.     magyar.leggyakoribbMassalhangzo ("magyar");
  360.     sved.leggyakoribbMassalhangzo ("sved");
  361.     finn.leggyakoribbMassalhangzo ("finn");
  362.     norveg.leggyakoribbMassalhangzo ("norveg");
  363.  
  364.     std::cout << std::endl;
  365.  
  366.     //Feladat: leghosszabb szo az egyes szovegekben:
  367.  
  368.     magyar.leghosszabbSzo ("magyar");
  369.     sved.leghosszabbSzo ("sved");
  370.     finn.leghosszabbSzo ("finn");
  371.     norveg.leghosszabbSzo ("norveg");
  372.  
  373.     std::cout << std::endl;
  374.  
  375.     //Feladat: atlagos szohossz:
  376.  
  377.     magyar.atlagosSzohossz ("magyar");
  378.     sved.atlagosSzohossz ("sved");
  379.     finn.atlagosSzohossz ("finn");
  380.     norveg.atlagosSzohossz ("norveg");
  381.  
  382.     std::cout << std::endl;
  383.  
  384.     return 0;
  385. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement