Zad. 3. W pliku ciagi.txt znajduje się tysiąc wierszy, a w każdym wierszu ciąg o długości trzech liter ze zbioru {A, B, C}(litery mogą się powtarzać). Napisz program, który:
a) obliczy prawdopodobieństwo, że w wybranym wierszu będzie ciąg składającym się z takich samych znaków. Odpowiedź zapisz do pliku a.txt
b) obliczy prawdopodobieństwo, że w wybranym wierszu będzie palindrom lub litera po prawej stronie ma wartość "A". Odpowiedź zapisz do pliku b.txt.
c) skopiuje do pliku c.txt wszystkie wiersze, w których pojawił się podciąg "AC", np.:
AAC, ACB, ACC, itd.
Wskazówka. W podpunkcie a i b, należy zastosować prawdopodobieństwo klasyczne ze wzoru:
$$P(A) = \frac{|A|}{|\Omega|}$$,
gdzie |A| - ilość wierszy spełniających kryteria zadania, |Ω| - wszystkie wiersze.
Rozwiązanie:
Podpunkt a)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream odczyt("ciagi.txt");
ofstream zapis("a.txt");
char tab[4]; //deklaracja tablicy na cztery znaki (ciąg trzech liter i znak końca tablicy - '\0')
int i=0; //zmienna zliczająca ilość ciągów spełniających kryteria zadania
while(!odczyt.eof())
{
odczyt>>tab;
if(tab[0]==tab[1]&&tab[0]==tab[2]) //sprawdzenie, czy wszystkie znaki są takie same
i++;
}
zapis<<(double)i/1000; //i jest liczbą całkowitą, trzeba więc zrzutować do rzeczywistej
odczyt.close();
zapis.close();
return 0;
}
Podpunkt b)
Palindrom, to takie słowo, które czytane z od lewej do prawej i od prawej do lewej da ten sam wyraz np.:
kajak, ala, itd..
W tym zadaniu wystarczy sprawdzić pierwszą i trzecią literę. Jeśli są one takie same to dany ciąg jest palindromem (środkowa litera nie ma znaczenia w tym przypadku).
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream odczyt("ciagi.txt");
ofstream zapis("b.txt");
char tab[4];
int i=0;
while(!odczyt.eof())
{
odczyt>>tab;
if(tab[0]==tab[2]||tab[2]=='A') //sprawdzenie, czy ciąg jest palindromem lub na końcu stoi litera 'A'
i++;
}
zapis<<(double)i/1000;
odczyt.close();
zapis.close();
return 0;
}
Podpunkt c)
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
ifstream odczyt("ciagi.txt");
ofstream zapis("c.txt");
char tab[4];
int i=0;
while(!odczyt.eof())
{
odczyt>>tab;
if(tab[0]=='A'&&tab[1]=='C'||tab[1]=='A'&&tab[2]=='C')
zapis<<tab<<endl;
}
odczyt.close();
zapis.close();
return 0;
}
Rozwiązanie:
Podpunkt a)
#include <iostream> while(!odczyt.eof()) odczyt>>tab; if(tab[0]==tab[1]&&tab[0]==tab[2]) //sprawdzenie, czy wszystkie znaki są takie same i++; } zapis<<(float)i/1000; //i jest liczbą całkowitą, trzeba więc zrzutować do rzeczywistej odczyt.close(); return 0; |
Podpunkt b)
Palindrom, to takie słowo, które czytane z od lewej do prawej i od prawej do lewej da ten sam wyraz np.:
kajak, ala, itd..
W tym zadaniu wystarczy sprawdzić pierwszą i trzecią literę. Jeśli są one takie same to dany ciąg jest palindromem (środkowa litera nie ma znaczenia w tym przypadku).
#include <iostream> ifstream odczyt("ciagi.txt"); odczyt>>tab; if(tab[0]==tab[2]||tab[2]=='A') //sprawdzenie, czy ciąg jest palindromem lub na końcu stoi litera 'A' i++; } zapis<<(float)i/1000; odczyt.close(); zapis.close(); return 0; } |
Podpunkt c)
#include <iostream> ifstream odczyt("ciagi.txt"); odczyt>>tab; if(tab[0]=='A'&&tab[1]=='C'||tab[1]=='A'&&tab[2]=='C') zapis<<tab<<endl; } odczyt.close(); zapis.close(); return 0; } |