Peršokti į turinį
  • ŽAIDIMAI
  • , ŽAIDIMAI
  • ŽAIDIMAI

[C++] Susigeneruok magišką kvadratą (3x3) !


VytisJ

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3001 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Recommended Posts

Labas vakaras, pirmą kartą rodau šiame forume savo programą.
Anądien beskaitinėdamas internete radau tokį įdomų daiktą kaip "magiškas kvadratas".
Aptikau ir paprastutį receptą kaip pagaminti paprastą 3x3 kvadratą.
Pagal jį suprogramavau tokią programėlę, kurioje įvedus tris skaičius, automatiškai sugeneruoja magišką kvadratą.
 
Magiškas kvadratas - tai toks kvadratas, kuriame skaičiai išdėlioti taip, kad kiekvienos eilutės, stulpelio ir įstrižainės suma yra viena ir ta pati. Pavyzdžiui ant Sagrada Familia bažnyčios iškaltas toks kvadratas, kur suma lygi 33:

antikine_kriptografija.jpg
 
Žemiau pateikiu kodą, kurį įsikėlę į savo C++ kompiliatorių ir jį sukompiliavę gausite veikiančią programą. Jei neturite programavimo žinių, galite atsisiųsti pačią programą iš čia.
 
Kaip naudotis programa?
Jūsų paprašys įvesti skaičų A, B ir C. Įveskite skirtingus. Ekrane išves jūsų pasirinktus skaičius ir patį magišką kvadratą. Priedo to, šis magiškas kvadratas dar bus išvestas į failą output.txt - patikrinkite šį failą, jis randasi tam pačiam aplanke kur ir pati programa randasi.
 

#include <iostream>
#include <fstream>

using namespace std;
char tag[] = "ABC";

void Surikiuoti(int A[]) { // tinka bet kokio dydžio masyvams rūšiuoti didėjančia tvarka
    for(int i = 0; i < 2; i++) {
        for(int k = 0; k < 2; k++) {
            if(A[k] > A[k+1]) {
                int n = A[k];
                A[k] = A[k+1];
                A[k+1] = n;
            }
        }
    }
}
void Info(int A[]) {
    cout << "\nJūsų pasirinkti skaičiai: ";
    for(int i = 0; i < 3; i++) {
        cout << A[i] << " ";
    }
    cout << "\n";
}
void Piesti(int A[]) {
    cout << "\nMagiškas kvadratas: \n\n";
    cout << A[2] - A[1] << " " << A[2] + A[1] + A[0] << " " << A[2]-A[0] << endl;
    cout << A[2] - (A[0] - A[1])  << " " << A[2] << " " << A[2]+(A[0]-A[1]) << endl;
    cout << A[2] + A[0] << " " << A[2] - (A[0] + A[1]) << " " << A[2]+A[1] << endl;
    cout << "\n";
    ofstream fr("output.txt");
    fr << A[2] - A[1] << " " << A[2] + A[1] + A[0] << " " << A[2]-A[0] << endl;
    fr << A[2] - (A[0] - A[1])  << " " << A[2] << " " << A[2]+(A[0]-A[1]) << endl;
    fr << A[2] + A[0] << " " << A[2] - (A[0] + A[1]) << " " << A[2]+A[1] << endl;
    fr.close();

}
void Ivesti(int A[]) {
    int i = 0;
    while(i < 3) {
        cout << "Įveskime skaičių " << tag[i] << ":> ";
        cin >> A[i];
        // tikriname ar jau neivestas skaicius
        bool rastas = false;
        for(int j = 0; j < i; j++) {
            if(A[i] == A[j]) {
                rastas = true;
                break;
            }
        }
        if(rastas == false) { i++; }
    }
}
int main() {
    setlocale(LC_ALL,"");

    while(true) {
        int sk[3];
        cout << "Įveskite tris skirtingus skaičius: " << endl;
        Ivesti(sk);
        Surikiuoti(sk);
        Info(sk);
        Piesti(sk);
    }
    return 0;
}

Įtvirtindamas papildomai panaudojau masyvo rūšiavimo funkciją Surikiuoti, vadinamą burbulo metodą. Šią funkciją galite lengvai pritaikyti savo reikmėms, tiesiog vietoj skaičiaus <2 turite įrašyti priešpaskutinio masyvo elemento indeksą N-1 ( <= N-1 ).
 
Vertinkite ir dalinkitės mintimis. Labai nekritikuokite už griozdiškumą, didžią dalį sudaro įmantresnės funkcijos, be kurių galima ir apsieiti.

Redaguota , nario VytisJ
  • Teigiamai 3
Nuoroda į komentarą
Dalintis per kitą puslapį

Ši tema yra neaktyvi. Paskutinis pranešimas šioje temoje buvo prieš 3001 dienas (-ų). Patariame sukurti naują temą, o ne rašyti naują pranešimą.

Už neaktyvių temų prikėlimą galite sulaukti įspėjimo ir pranešimo pašalinimo!

Svečias
Ši tema yra užrakinta.
  • Šiame puslapyje naršo:   0 nariai

    • Nėra registruotų narių peržiūrinčių šį forumą.

Skelbimai


×
×
  • Sukurti naują...