matematykaszkolna.pl
Łączenie naturalne plików C++ Mariusz: #include<iostream> #include<fstream> #include<string> using namespace std; void LeerElemDetectandoFin(fstream &arch, string &comp,bool &finArch) { finArch=arch.eof(); if(!finArch) { getline(arch,comp); } } void PasarElemDetectandoFin(fstream &archOrigen,fstream &archDestino, string &comp, bool &finArchOrigen) { archDestino<<comp<<endl; LeerElemDetectandoFin(archOrigen,comp,finArchOrigen); } void Mezcla(string path, fstream &aux1,fstream &aux2, fstream &arch) { string c1,c2; string path1,path2; bool finArch1,finArch2; path1=path.substr(0,path.find('.'))+"01.txt"; path2=path.substr(0,path.find('.'))+"02.txt"; aux1.open(path1.cstr(),ios::in); aux2.open(path2.cstr(),ios::in); arch.open(path.cstr(),ios:ut); LeerElemDetectandoFin(aux1,c1,finArch1); LeerElemDetectandoFin(aux2,c2,finArch2); while(!finArch1 && !finArch2) { if(c1<c2) PasarElemDetectandoFin(aux1,arch,c1,finArch1); else PasarElemDetectandoFin(aux2,arch,c2,finArch2); } while(!finArch1) PasarElemDetectandoFin(aux1,arch,c1,finArch1); while(!finArch2) PasarElemDetectandoFin(aux2,arch,c2,finArch2); arch.close(); aux1.close(); aux2.close(); } void Division(string path,fstream &arch,fstream &aux1, fstream &aux2, bool &esVacio2) { string valorActual,valorAnterior; bool cambio; string path1,path2; path1=path.substr(0,path.find('.'))+"01.txt"; path2=path.substr(0,path.find('.'))+"02.txt"; arch.open(path.cstr(),ios::in); aux1.open(path1.cstr(),ios:ut); aux2.open(path2.cstr(),ios:ut); cambio=true; esVacio2=true; if(!arch.eof()) { getline(arch,valorActual); aux1<<valorActual<<endl; valorAnterior=valorActual; } while(!arch.eof()) { getline(arch,valorActual); if(valorAnterior>valorActual) cambio=!cambio; if(cambio) aux1<<valorActual<<endl; else { aux2<<valorActual<<endl; esVacio2=false; } valorAnterior=valorActual; } arch.close(); aux1.close(); aux2.close(); } int main() { string path; fstream aux1,aux2,arch; bool esVacio2; getline(cin,path); esVacio2=false; while(!esVacio2) { Division(path,arch,aux1,aux2,esVacio2); if(!esVacio2) Mezcla(path,aux1,aux2,arch); } return 0; } Gdzie jest błąd ? Przepisywałem z Pascala słowo w słowo W Pascalu kod działał dobrze
6 cze 18:41