Witam mam problem z pewnym zadaniem w C++, tworzę program, który ma korzystać z reguły rezolucji. Pierwszą część programu mam, ma ona przeszukać podane z-formuły i usunąć pojawiające się duplikaty, żeby formuły się nie powtarzały.
-oddziela formuły z lewej strony od tych z prawej
p#d,s
p,q#s
p,s#q
W drugiej części problem polega na tym, że nie wiem jak zrobić by program brał pierwszą formułę (pierwsza linia w notatniku) i porównywał z każdą następną tzn.
Bierze: p#d,s
Sprawdza z pozostałymi i jak znajdzie w jakiejś formule, że ta sama litera wystąpi po lewej i po prawej stronie znaku # to je kasuje i powstają nowe formuły:
p#d,s
p,s#q
s – występuje po lewej i po prawej stronie więc jest usuwana i powstają nowe formuły:
p#d
p#q
Program ma tak długo działać aż wymaże wszystkie formuły i wtedy zwróci prawdę a w przypadku gdy zostanie formuła, której nie można z niczym zredukować to zwróci fałsz.
Bardzo proszę o pomoc bo naprawdę nie wiem jak to zrobić, jestem początkujący w programowaniu więc bardzo proszę o wyrozumiałość i bardzo dziękuję za udzieloną pomoc bo nie umiem dać sobie z tym rady.
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
string nazwaPliku;
cout << "Podaj nazwe pliku do otwarcia: ";
cin >> nazwaPliku;
ifstream plikwe(nazwaPliku.c_str());
if(!plikwe)
{
cerr << "Blad otwarcia pliku\n";
return -1;
}
string tmp;
vector<string> tekst;
while(plikwe >> tmp)
{
tekst.push_back(tmp);
}
cout << "Przed usunieciem duplikatow\n";
for(int i = 0; i < tekst.size(); ++i)
{
cout << tekst[i] << "\n";
}
sort(tekst.begin(),tekst.end());
tekst.erase(unique(tekst.begin(),tekst.end()),tekst.end());
cout << "Po usunieciu duplikatow\n";
for(int i = 0; i < tekst.size(); ++i)
{
cout << tekst[i] << "\n";
}
cout << "Podaj nazwe pliku do ktorego zapisac\n";
cin >> nazwaPliku;
ofstream plikwy(nazwaPliku.c_str());
for(int i = 0; i < tekst.size(); ++i)
{
plikwy << tekst[i] << "\n";
}
}