Pereiti prie turinio

geras1448

Nariai
  • Pranešimai

    14
  • Užsiregistravo

  • Lankėsi

  • Atsiliepimai

    0%

Reputacijos išklotinė

  1. Patinka
    geras1448 gavo reakciją nuo pakartoti Skaičių magija   
    Visa programa atrodo(yra šiektiek klaidų skaičiavimuose):
     

     
    Programos kodas:
     

    Skaičiai.h #pragma once #include <string> #include <iostream> #include <fstream> #include <iomanip> using namespace std; #include "Skaičius.h" class Skaičiai { public: static const int Cd = 1; // kiek didinti dinaminį masyvą private: Skaičius *Sk; // dinaminis skaičių masyvas int Elementai[12]; // statinis skaičių masyvas, skirtas saugoti skaičiams, nuskaitytiems iš failo int n; // elementų skaičius int ats; // skaitmuo, kurį reikia gauti naudojant aritmetinius veiksmus int nmax; // masyvo talpumas - maksimalus void KeistiMasyvą(int kiek); public: Skaičiai (int nmx = 0); ~Skaičiai(); void push_back(Skaičius SK); // įrašo objektą į dinaminį masyvą Skaičius Imti(int ind) { return Sk[ind]; } // grąžina nurodyto indekso objektą iš masyvo void pop_back(); // panaikina paskutinį elementą iš dinaminio masyvo int size(); // grąžina masyvo elementų skaičių void NuskaitytiIrDėtiSkaičius(); //nuskaito tekstinį failą ir sudeda skaičius į masyvą void ieškotiSprendinių(int es, bool pažymėti[], int rez, ofstream& rf, // ieško sprendinių, surašo duomenis į dinaminį masyvą Skaičiai& pp, Skaičius& yy, int &index); // ir spausdina duomenis į tekstinį failą void RastiSprendiniusIrRašyti(); //randa sprendinius ir surašo į tekstinį failą }; Skaičiai.cpp #include "Skaičiai.h" /** Konstruktorius sukuria "tuščią" dinaminį masyvą, kai nmx = 0; kai nmx > 0, sukuria dinaminį masyvą be duomenų @param nmx – masyvo dydis */ Skaičiai::Skaičiai(int nmx): Sk(NULL), n(0), nmax(nmx) { if (nmax > 0) { Sk = new Skaičius[nmax]; } } Skaičiai::~Skaičiai() { if (Sk) delete [] Sk; } /** Keičia dinaminio masyvo dydį @param kiek – naujas masyvo dydis */ void Skaičiai::KeistiMasyvą(int kiek) { if (kiek > nmax) // jeigu masyvas yra didinamas { Skaičius *Snaujas = new Skaičius [kiek]; for(int i = 0; i < n; i++) Snaujas[i] = Sk[i]; delete [] Sk; Sk = Snaujas; nmax = kiek; } else if (kiek < nmax) // jeigu masyvas yra mažinamas { Skaičius *Snaujas = new Skaičius [kiek]; for(int i = 0; i < kiek; i++) Snaujas[i] = Sk[i]; delete [] Sk; Sk = Snaujas; n = nmax = kiek; } } /** Patalpina naują studentą į masyvo pabaigą @param stud – naujas studentas */ void Skaičiai::push_back(Skaičius SK) { if (n == nmax) KeistiMasyvą(n + Cd); Sk[n] = SK; n++; } void Skaičiai::pop_back() { KeistiMasyvą(n-1); } int Skaičiai::size() { return n; } void Skaičiai::NuskaitytiIrDėtiSkaičius() { ifstream df ("Duomenys.txt"); for (int i = 0; i < 6; i++) df >> Elementai[i]; df >> ats; } void Skaičiai::RastiSprendiniusIrRašyti() { ofstream rr("Rezultatai.txt"); rr << setw(30) << "----------------------------------" << endl; rr << setw(30) << left << "| Pradiniai duomenys |" << endl; rr << setw(30) << "----------------------------------" << endl; rr << "| "; for(int i=0; i<6;i++) rr << setw(5) << Elementai[i] << ""; rr << " |" << endl; rr << "| "; rr << setw(38) << ats; rr << "|" << endl; rr << setw(30) << "----------------------------------" << endl << endl << endl; rr.close(); Skaičiai PP; Skaičius YY; bool pažymėti[12] = { false }; int ElementųSkaičius = 6; int skaitliukas = 0; ofstream rf("Rezultatai.txt", ios::app); ieškotiSprendinių(ElementųSkaičius, pažymėti, ats, rf,PP, YY, skaitliukas); if(skaitliukas == 1) { ofstream ff("Rezultatai.txt", ios::app); ff << "Sprendinių neturi" << endl; ff.close();} rf.close(); } void Skaičiai::ieškotiSprendinių(int es, bool pažymėti[], int rez, ofstream& rf, Skaičiai& pp, Skaičius& yy,int& index) { if(rez == ats) { index++; for(unsigned int i = 0; i < pp.size(); i++) //sukasi max iki 5, nes max 5 veiksmai rf << pp.Imti(i).ImtiA() << " " << pp.Imti(i).ImtiOper() << " " << pp.Imti(i).ImtiB() << " =" << " " << pp.Imti(i).ImtiRez() << endl; // tikrina ar yra nepanaudotų elementų bool ArYraNepanaudotų = false; int skaitliukas = 0; for(int t = 0; t < 6; t++) if(!pažymėti[t]){ ArYraNepanaudotų = true; skaitliukas++;} if(skaitliukas <= 3){ if(ArYraNepanaudotų == true){ rf << "Nepanaudoti elementai: "; for(int g = 0; g < 6; g++) if(!pažymėti[g]) rf << Elementai[g] << " "; } rf << endl << endl;} } for(int i = 0; i < es; i++){ for(int e = i+1; e < es; e++){ if(Elementai[i] != 0 && Elementai[e] != 0 && !pažymėti[i] && !pažymėti[e]){ //sudėti pažymėti[i] = true; pažymėti[e] = true; Elementai[es] = Elementai[i] + Elementai[e]; yy.DėtiRezultatą(Elementai[i]+Elementai[e]); yy.DėtiA(Elementai[i]); yy.DėtiB(Elementai[e]); yy.DėtiOper('+'); pp.push_back(yy); ieškotiSprendinių(es+1, pažymėti, Elementai[i]+Elementai[e], rf,pp,yy,index); pp.pop_back(); Elementai[es] = 0; pažymėti[i] = false; pažymėti[e] = false; //atimtis pažymėti[i] = true; pažymėti[e] = true; Elementai[es] = Elementai[i] - Elementai[e]; yy.DėtiRezultatą(Elementai[i] - Elementai[e]); yy.DėtiOper('-'); yy.DėtiA(Elementai[i]); yy.DėtiB(Elementai[e]); pp.push_back(yy); ieškotiSprendinių(es+1, pažymėti, Elementai[i]-Elementai[e], rf,pp,yy,index); pp.pop_back(); Elementai[es]=0; pažymėti[i] = false; pažymėti[e] = false; //daugyba pažymėti[i] = true; pažymėti[e] = true; Elementai[es] = Elementai[i] * Elementai[e]; yy.DėtiRezultatą(Elementai[i]*Elementai[e]); yy.DėtiOper('*'); yy.DėtiA(Elementai[i]); yy.DėtiB(Elementai[e]); pp.push_back(yy); ieškotiSprendinių(es+1, pažymėti, Elementai[i]*Elementai[e], rf,pp,yy,index); pp.pop_back(); Elementai[es]=0; pažymėti[i] = false; pažymėti[e] = false; //dalyba if(Elementai[i] != 0 && Elementai[e] != 0) if(Elementai[i]%Elementai[e] == 0 || Elementai[e] % Elementai[i] == 0) { int div; if(Elementai[i]%Elementai[e] == 0) div = Elementai[i] / Elementai[e]; else div = Elementai[e]/Elementai[i]; pažymėti[i] = true; pažymėti[e] = true; Elementai[es] = Elementai[i]*Elementai[e]; yy.DėtiA( (Elementai[i] % Elementai[e] == 0) ? Elementai[i] : Elementai[e]); yy.DėtiB( (Elementai[i] % Elementai[e] == 0) ? Elementai[e] : Elementai[i]); yy.DėtiRezultatą(div); yy.DėtiOper('/'); pp.push_back(yy); ieškotiSprendinių(es+1, pažymėti, div, rf,pp,yy,index); pp.pop_back(); Elementai[es] = 0; pažymėti[i] = false; pažymėti[e] = false; } } } } } Skaičius.h #pragma once class Skaičius { private: int REZ, a,b; // kintamieji, skirti saugoti skaičiavimo tarpiniams rezultatams char oper; // kintamasis, kuris saugo operatoriaus simbolį public: Skaičius(): REZ(0), a(0), b(0), oper() { } void DėtiRezultatą (int k) { REZ = k; } void DėtiA (int j) { a = j; } void DėtiB (int h) { b = h; } void DėtiOper (char c) { oper = c; } int ImtiRez () { return REZ; } int ImtiA () { return a; } int ImtiB () { return b; } char ImtiOper() { return oper; } }; Skaičius.cpp #include "Skaičius.h" MyForm.h #pragma once #include "Skaičiai.h" namespace LD1SuGUI { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Summary for MyForm /// </summary> public ref class MyForm : public System::Windows::Forms::Form { public: MyForm(void) { InitializeComponent(); // //TODO: Add the constructor code here // } protected: /// <summary> /// Clean up any resources being used. /// </summary> ~MyForm() { if (components) { delete components; } } private: System::Windows::Forms::Button^ button1; protected: private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::RichTextBox^ richTextBox1; private: System::Windows::Forms::Button^ button2; private: /// <summary> /// Required designer variable. /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> void InitializeComponent(void) { this->button1 = (gcnew System::Windows::Forms::Button()); this->label1 = (gcnew System::Windows::Forms::Label()); this->richTextBox1 = (gcnew System::Windows::Forms::RichTextBox()); this->button2 = (gcnew System::Windows::Forms::Button()); this->SuspendLayout(); // // button1 // this->button1->Font = (gcnew System::Drawing::Font(L"Courier New", 19.8F, System::Drawing::FontStyle::Regular, System::Drawing::GraphicsUnit::Point, static_cast<System::Byte>(186))); this->button1->Location = System::Drawing::Point(12, 465); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(331, 52); this->button1->TabIndex = 0; this->button1->Text = L"Skaičiuoti"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &MyForm::button1_Click); // // richTextBox1 // this->richTextBox1->Location = System::Drawing::Point(12, 12); this->richTextBox1->Name = L"richTextBox1"; this->richTextBox1->Size = System::Drawing::Size(412, 428); this->richTextBox1->TabIndex = 2; this->richTextBox1->Text = L""; this->richTextBox1->TextChanged += gcnew System::EventHandler(this, &MyForm::richTextBox1_TextChanged); // // button2 // this->button2->Location = System::Drawing::Point(349, 465); this->button2->Name = L"button2"; this->button2->Size = System::Drawing::Size(75, 52); this->button2->TabIndex = 3; this->button2->Text = L"Išjungti"; this->button2->UseVisualStyleBackColor = true; this->button2->Click += gcnew System::EventHandler(this, &MyForm::button2_Click); // // MyForm // this->AutoScaleDimensions = System::Drawing::SizeF(8, 16); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->BackColor = System::Drawing::Color::Yellow; this->ClientSize = System::Drawing::Size(437, 529); this->Controls->Add(this->button2); this->Controls->Add(this->richTextBox1); this->Controls->Add(this->label1); this->Controls->Add(this->button1); this->Name = L"MyForm"; this->Text = L"MyForm"; this->Load += gcnew System::EventHandler(this, &MyForm::MyForm_Load); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion private: System::Void MyForm_Load(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { button1-> Text = L"Skaičiuojama..."; button1->Enabled = false; Skaičius AA; Skaičiai PP; PP.NuskaitytiIrDėtiSkaičius(); PP.RastiSprendiniusIrRašyti(); label1->Text = L"Programa suskaičiavo"; button1-> Text = L"Baigta"; richTextBox1->LoadFile("Rezultatai.txt", RichTextBoxStreamType::PlainText); } private: System::Void richTextBox1_TextChanged(System::Object^ sender, System::EventArgs^ e) { } private: System::Void button2_Click(System::Object^ sender, System::EventArgs^ e) { Application::Exit(); } }; }
  2. Patinka
    geras1448 sureagavo į pakartoti Skaičių magija   
    Parasiau sioki toki sito darbo sprendima, kuris spausdinta atsakymus, tikiuosi issingarinesi koda ir kita karta mokesi spresti tokio tipo uzdavinius. Beje, cia yra daug ka tobulinti, pvz skaiciuoja minusinius skaicius, galima koda suprastinti ir pan.
     

    #include <iostream> #include <fstream> #include <algorithm> #include <cmath> #include <vector> #include <iomanip> #include <cstdio> #define pop pop_back using namespace std; struct v{ int a, b, ats; char oper; }; vector <v> veiksmai; int ats; bool pazymeti[10001]={false}; int P[10000] = {0}; void ieskok(int P[], int sz, bool pazymeti[], int rez){ if(rez == ats){ for(int i = 0; i < veiksmai.size(); i++){ cout << veiksmai[i].a << " " << veiksmai[i].oper << " " << veiksmai[i].b << " = "<< " " << veiksmai[i].ats << endl; } cout << endl; return; } for(int i = 0; i < sz; i++){ for(int e = i+1; e < sz; e++){ if(P[i]!= 0 && P[e] != 0 && !pazymeti[i]&&!pazymeti[e]){ // sudeti int top = P[i], kek = P[e]; pazymeti[i] = true; pazymeti[e] = true; P[sz]=top+kek; v f; f.ats = top+kek; f.a = top; f.b = kek; f.oper = '+'; veiksmai.push_back(f); ieskok(P,sz+1,pazymeti, top + kek); veiksmai.pop(); P[sz]=0; pazymeti[i] = false; pazymeti[e] = false; // atimtus pazymeti[i] = true; pazymeti[e] = true; P[sz]=top-kek; f.ats = top-kek; f.oper = '-'; veiksmai.push_back(f); ieskok(P,sz+1,pazymeti, top - kek); veiksmai.pop(); P[sz]=0; pazymeti[i] = false; pazymeti[e] = false; // daugyba pazymeti[i] = true; pazymeti[e] = true; P[sz]=top*kek; f.ats = top*kek; f.oper = '*'; veiksmai.push_back(f); ieskok(P,sz+1,pazymeti, top * kek); veiksmai.pop(); P[sz]=0; pazymeti[i] = false; pazymeti[e] = false; // dalyba if(top!= 0 && kek != 0) if(top%kek == 0 or kek % top == 0) { int div; if(top%kek==0)div = top/kek; else div = kek/top; pazymeti[i] = true; pazymeti[e] = true; P[sz]=top*kek; f.a = (top % kek == 0) ? top : kek; f.b = (top % kek == 0) ? kek : top; f.ats = div; f.oper = '/'; veiksmai.push_back(f); ieskok(P,sz+1,pazymeti, div); veiksmai.pop(); P[sz]=0; pazymeti[i] = false; pazymeti[e] = false; } } } } } int main() { ifstream fd("mag.txt"); for(int i = 0; i < 6; i++) { fd >> P[i]; } fd >> ats; ieskok(P,6,pazymeti, 0); return 0; }
  3. Patinka
    geras1448 gavo reakciją nuo s1lenc3 C++ skaitymas iš failo   
    Problema buvo VIENGUBOS KABUTĖS.
×
×
  • Pasirinkite naujai kuriamo turinio tipą...