geras1448
gavo reakciją nuo
pakartoti
Skaičių magija
Kovo 9, 2015
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();
}
};
}