Witam. Staram się sam nauczyć do przyszłorocznej matury z informatyki i mam problem..
Treść zadania wygląda nastepująco:
http://www.cke.edu.pl/images/stories/Arkusze_matura_09/informatyka/PR/PR_2.pdf
**Zadanie 5. **
Oto co stworzylem:
#include <iostream>
using namespace std;
#include <string>
#include <fstream>
//zliczające odpowiedzi do poleceń danych
//////////////////////////////
int palindromy=0;
int bb_pary=0;
int cc_pary=0;
//////////////////////////////
void palindrom(string tab)
{
bool jest=true;
for(int i=0;i<tab.length()/2;i++)
{
if(tab[i]!=tab[tab.length()-i-1]) jest=false; break;
}
if(jest)
{palindromy++;
}
}
/////////////////////////////////////////////////////
//porównanie stringów czy wyraz 1 zawiera drugi
int parowanie(string aa,string bb)
{ int ret=0;
string::size_type pozycja = aa.find(bb);
if(pozycja != string::npos)
{bb_pary++; ret=3;}
return ret;
}
////////////////////////////
//sprawdza czy pierwsze czy 3 znaki ciągu drugiego zawierają się
//w początku ciągu znaków pierwszego
int sufiksyprefiksy_beta(const string aa, const string bb)
{
int zawiera=5;
int dlug1=aa.size();
for(int i=0;i<3;i++)
{
if(aa[dlug1-3+i] != bb[i]) {zawiera=-1; break;}
}
return zawiera;
}
/////////////////////////////
// podobnie jak wyżej tylko odwrotnie czy począek ciągu znaków drugiego(pierwsze 3 znaki)
// zawierają się w końcówce ciągu pierwszego.
int sufiksyprefiksy(const string aa,const string bb)
{
int zawiera=2;
int dlug2=bb.size();
for(int i=0;i<3;i++)
{
if(aa[i] != bb[dlug2-3+i]) {zawiera=-1; break;}
}
return zawiera;
}
/////////////////////////////
//funkcja ma na celu sprawdzanie sprawdzić co trzeba zrobić
// aby powstał wyraz C!
//
string podpunkt_d(const string aa,const string bb)
{
string wynik;
cout << "Jestem w funkcji podpunkt_d" << endl;
int dlug2=bb.size();
int dlug1=aa.size();
int a1=sufiksyprefiksy(aa,bb);
int a2=sufiksyprefiksy_beta(aa,bb);
int a3=parowanie(aa,bb);
cout << a1 << endl;
cout << a2 << endl;
cout << a3 << endl;
if(a3==3){wynik=aa;}
else {
if(a1==2)
{
wynik=bb;
wynik.insert(dlug2+1,aa,3,dlug1-3);
} else {
if(a2==5)
{
wynik=bb;
wynik.insert(dlug1+1,bb,3,dlug2-3);
} else{
wynik=aa;
wynik.insert(dlug1,bb);}}}
cout << wynik << endl;
return wynik;
}
/////////////////////////////
// wartości jakie funkcje zwracają.
// zawierają się w sobie zwraca: 3
// jesli A ma na poczatku B: 2
// jesli A ma na koncu B: 5
main()
{
fstream zapis("zad_5.txt", ios::out | ios::trunc);
fstream dane("dane.txt", ios::in);
fstream odpa("slowa.txt", ios::out | ios::trunc);
while(!zapis)
{cout << "blad !!!" << endl;
_sleep(2000);
dane.clear(dane.rdstate()& ~ios::failbit);}
while(!dane.eof())
{
int ccc=0;
string ddd;
string slowa[2];
dane >> slowa[0];
dane >> slowa[1];
palindrom(slowa[0]);
palindrom(slowa[1]);
parowanie(slowa[0],slowa[1]);
//jesli jedyną opcją stworzenia C jest połaczenie A i B
ccc += sufiksyprefiksy(slowa[0],slowa[1]);
ccc += sufiksyprefiksy_beta(slowa[0],slowa[1]);
if(ccc==-2) cc_pary++;
//###################################################
ddd=podpunkt_d(slowa[0],slowa[1]);
odpa << ddd;
odpa << "\n";
}
zapis << "AAAAA: " << palindromy << "\n";
zapis << "BBBBB:" << bb_pary << "\n";
zapis << "CCCCC: " << cc_pary << "\n";
zapis.close();
odpa.close();
dane.close();
system("Pause");
return 0;
}
Zawartość 20 linijek z 200 dodatkowego pliku z danymi:
000110011110 101010111
1100001101 110
11000100 000
01101110 0001101
101011001100001 100110000
1110110001 101110100
111001000001 011001
10 00
0100101 101110
10100101111111110001 10101001101
00010110 01001
10010001001110100011 01001101010
0001101101 0000101
00001011000 10
1101110000000110000 10100110111
00001 01
101101101000000 0001011011
111100001101 10010100011
111101011011000 1000001
11011 10
Wszystko działa dobrze, jednak nie mam pojęcia dlaczego przy 9 linijce mi się program po prostu ZAMYKA, bez żadnego błędu.
W celach edukacyjnych jestem otwarty na wszelakie porady pomysły, jak to zrobić LEPIEJ, poprawić, skrócić. Wszystko aby tylko lepiej się nauczyć do tej matury!
Pozdrawiam i dziękuje:)
PS:
*tresc chcialem dodac w spoilerze zeby sie zasmiecala calego posta jednak nie dziala link z pomocy: http:*4programmers.net/Pomoc/Formatowanie_tre%C5%9Bci_na_forum