PATRATE_MAGICE

70
  I I Io o o n n n e e es s sc c c u u u  R R R o o o d d di i ic c ca a a  E E E d d d i i i t t t u u u r r r a a a  S SS f f f â â n n n t t t u u u l l l  I I I e e e r r r a aa r r r h h h  N  N  N i i c c c o o o l l l a a a e e  2 2 2 0 0 01 1 1 0 0 0  I IS SB BB  N  N  N  9 997 778 8 - - - 6 6 6 0 006 6 6 - -8 81 1 2 2 2 9 9 9 - -5 58 8- -7 7  Lucrare publicată în Sala de Lectură a  Editurii Sfântul Ierarh Nicolae, la adresa http://lectura.bibliotecadigitala.r o

description

PATRATE_MAGICE

Transcript of PATRATE_MAGICE

  • IIIooonnneeessscccuuu RRRooodddiiicccaaa

    EEEdddiiitttuuurrraaa SSSfffnnntttuuulll IIIeeerrraaarrrhhh NNNiiicccooolllaaaeee

    222000111000

    IIISSSBBBNNN 999777888---666000666---888111222999---555888---777

    Lucrare publicat n Sala de Lectur a

    Editurii Sfntul Ierarh Nicolae, la adresa http://lectura.bibliotecadigitala.ro

  • 1

    Referent tinific, S.L.DRD. ing. LUMINIA DU

  • 2

    INTRODUCERE .................................................................................................3 CCaappiittoolluull II NOIUNI TEORETICE ....................................................................5

    I.1. Prezentare Visual Basic ..............................................................................5 I.1.1. Prezentarea mediului de programare Visual Basic (IDE)......................6 I.1.2. Proiectarea interfeelor grafice n Visual Basic.....................................8 I.1.3. Proiectarea unei forme ....................................................................... 10

    I.2. Prezentarea tehnicii backtracking ............................................................. 20 I.2.1. Programul in C++ pentru realizarea permutarilor a n numere. ............ 23 I.2.2. Program in C++ pentru realizarea unei permutari de n (n par) numere, grupate in perechi complementare si asezate in pozitii corespondente. ........ 23

    CCaappiittoolluull IIII PTRATE MAGICE...................................................................... 25 II.1. Istoric...................................................................................................... 25 II.2. Definiii si terminologie .......................................................................... 25 II.3. Proprietile generale ale ptratelor magice ............................................. 27 II.4. Metode pentru construirea patratelor magice........................................... 29 II.5. Ptrate impare ......................................................................................... 29

    II.5.1. Metoda lui Bachet de Mziriac ......................................................... 29 II.5.2. Programul in C++ pentru metoda Bachet de Mziriac....................... 30 II.5.3. Metoda lui La Hire............................................................................ 32 II.5.4. Programul in C++ pentru ptrate magice impare dupa metoda lui La Hire. ............................................................................................................ 35

    II.6. Ptrate par pare ....................................................................................... 37 II.6.1. Metoda lui La Hire............................................................................ 37 II.6.2. Programul n C++ pentru ptratele par pare dupa metoda lui La Hire39

    II.7. Ptrate impar pare ................................................................................... 41 II.7.1. Programul n C++ pentru ptratele magice par impare. ..................... 43 II.7.2. Crearea fiierelor text n C++............................................................ 47

    II.8. Ptrate magice cu borduri........................................................................ 48 II.9. Discuia ptratelor magice ....................................................................... 50 II.10. Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC .................... 52

    II.10.1. Interfaa .......................................................................................... 52 II.10.2. Programele sursa............................................................................. 56

    Concluzii ........................................................................................................ 67 Indice alfabetic ............................................................................................... 68 BIBLIOGRAFIE ............................................................................................ 69

  • 3

    De curnd, innd un curs opional de matematic distractiv cu elevi de

    gimnaziu, am descoperit tema Ptrate magice. nc de la nceput am observat

    c problema irurilor de numere ofer surprize nebnuite i m-am gndit s o

    prezint elevilor, mai ales c avea legtur cu noiunile nvatate la orele de

    matematic i ajuta la aprofundarea lor. Este in acelai timp altceva, o ieire

    din banal, din ecuaiile i problemele zilnice, de care chiar i cadrele didactice se

    plictisesc . Dei este o tem de matematic distractiv, aflarea unei singure soluii

    este destul de complicat, motiv pentru care le-am prezentat elevilor cteva

    metode ingenioase descoperite cu cteva secole in urma de savani precum:

    Bachet de Meziriac, La Hire etc. Cu excepia ptratului magic de 3 care are o

    singura soluie, celelalte au un numr mare de soluii, iar aflarea lor prin calcul

    este practic imposibila. Aceti savani au oferit cteva metode care ocolesc

    calculele, dar ofer mai puine soluii sau doar una. La Hire a clasificat ptratele

    magice in mai multe tipuri si a elaborat cteva metode ingenioase, care ofer

    pentru fiecare caz mai multe soluii, chiar daca nu toate. Prezentarea acestor

    metode constituie pentru elevi un punct de plecare in studiul permutrilor,

    combinrilor si al matricilor.

    In prezent, datorita descoperirii calculatorului ca sprijin in munca omului,

    si avnd la indemana tehnicile de programare moderne, mi s-a prut interesant sa

    transpun aceste metode in programe pentru aflarea soluiilor. Rezultatele acestora

    sunt salvate in fiiere text, ca apoi s poat fi utilizate sub forma de baza de date

    pentru o aplicatie.

  • 4

    Jocul, de exemplu, este inspirat din aceasta tema i se bazeaz pe

    cunoaterea proprietailor ptratelor magice prezentate la ore, constnd din cteva

    reguli simple. Astfel, copiii sunt ndemnai s-i dezvolte abilitai de calcul

    mintal, s-i testeze i aprofundeze baza teoretic, s-i dezvolte spiritul de

    observaie. Totodat acest joc poate constitui o baza de pregtire pentru

    concursurile de matematica (Cangurul, Cezar Ivnescu etc.) sau a

    olimpiadelor scolare.

  • Prezentare Visual Basic

    5

    CCaappiittoolluull II NOIUNI TEORETICE

    I.1. Prezentare Visual Basic

    Visual Basic este unul dintre cele mai populare limbaje de programare

    vizual existente la ora actual. Mediul Visual Basic ofer un set complet de

    instrumente necesare crerii, intr-un mod simplu i rapid, de aplicaii pentru

    Windows din diverse domenii: matematic, gestiunea bazelor de date, grafic,

    multimedia, internet, etc.

    Partea de Visual se refer la un set complet de metode i instrumente pe

    care mediul le pune la dispoziia programatorilor astfel nct acestia s poat

    proiect intr-un mod ct mai uor, scriind ct mai puin cod, interfee grafice

    (GUI) ct mai complexe, specifice sistemului de operare Windows . Partea de

    Basic se refer la limbajul BASIC din care a fost dezvoltat Visual Basic.Chiar

    dac are o sintaxa relativ simpl i numeroase limite (nu pot fi folosite toate

    funciile Windows, nu pot fi folosite majoritatea interfeelor standard COM, nu

    pot fi implementate interfee standard COM, nu poate fi creat un singur program

    executabil fiind necesar un program de construit kituri pentru a putea distribui

    aplicaia creat, absena pointer-ilor i accesul destul de dificil la memorie, sunt

    doar cteva) Visual Basic rmne un limbaj de programare deosebit de puternic

    pentru numeroase aplicaii; mai ales c ncepnd cu versiunea 5.0 i-au fost

    adugate o serie de caracteristici care l-au fcut, pe deplin, un limbaj orientat pe

    obiecte. Visual Basic a devenit aproape la fel de structurat ca i C-ul , aproape la

    fel de flexibil ca i Pascal-ul, aproape la fel de bun pentru aplicaiile tiinifice ca

    i FORTRAN-ul, mai puternic n ce privete manipularea bazelor de date dect

    Xbase-ul sau Fox-ul, i cu mici mbuntiri s-ar putea s devin la fel de orientat

    pe obiecte ca Smalltalk.

  • Prezentare Visual Basic

    6

    I.1.1. Prezentarea mediului de programare Visual Basic (IDE)

    Mediul de programare (IDE Integrated Development Environment) este

    un ansamblu de meniuri, bare de instrumente si ferestre cu ajutorul crora

    programatorul poate proiecta i crea aplicaii n Visual Basic.

    Meniurile de context

    Meniurile de context sun scurtturi ale celor mai frecvente aciuni. Pentru a

    deschide un meniu de context executai click cu butonul dreapta la mouse-ului pe

    obiectul pe care l folosii. Meniurile de context sunt n funcie de zona din IDE

    pe care executai click.

    Bara de instrumente (Toolbar)

    Bara de instrumente (Toolbar) conine o serie de butoane cu iconie pe ele

    care ofer un acces rapid la comenzile uzuale. n mod implicit la ncrcarea IDE

    se afieaz bara de instrumente Standard, ns cu ajutorul comenzii Toolbars din

    meniul View se pot aduga bare de instrumente i pentru editare, designe-ul

    formelor, debug.

    Cutia de instrumente (Toolbox)

    Cutia de instrumente conine o serie de controale standard ct i

    controalele ActiveX pe care le-ai adugat dumneavoastr , ce v vor ajuta la

    proiectarea interfeelor grafice. Putei s adugai un nou toolbox selectnd

    comanda Add tab din meniul de context.

  • Prezentare Visual Basic

    7

    Fereastra formei (Form Window) i Fereastra codului (Code Window)

    Fiecare form rezid intr-o fereastr de proiectare a formei. Folosii

    fereastra de proiectare a formei pentru a aduga controale formei. Pentru fiecare

    form se poate deschide o fereastr de cod (Code window). Aici vei scrie codul

    aferent formei respective. Putei deschide fereastra de cod efectund dublu-click

    pe form sau alegnd comanda Code din meniul View.

    Fereastra v pune la dispoziie un procesor de texte foarte specializat, cu

    numeroase faciliti ce v vor ajuta s scriei cod ntr-un mod ct mai uor.

    Fereastra Project Explorer

    Fereastra Project Explorer afieaz toate componentele proiectului curent

    (forme, module, clase). Din meniul de context se pot aciona diferite comenzi de

    gestionare a componentelor proiectului (asemntoare cu cele din meniul

    Project).

    ToolBox

    Formular

    Fereastra de proprietati

    Bara cu meniuri

  • Prezentare Visual Basic

    8

    Fereastra Properties

    Fereastra Properties afieaz proprietile controlului sau formei selectate,

    ce pot fi setate n timpul proiectrii programului.

    Fereastra Form Layout

    Fereastra Form Layout ajut la poziionarea formei pe ecran utiliznd o

    mic reprezentare a ecranului.

    I.1.2. Proiectarea interfeelor grafice n Visual Basic

    Primul pas n crearea unei aplicaii vizuale n Visual Basic este s

    proiectai interfaa grafic prin intermediul creia utilizatorul va interaciona cu

    aplicaia. Interfeele grafice fac ca programele Windows sa fie att de uor de

    folosit de o gam larg de utilizatori. Proiectarea unei interfee ct mai simple i

    ct mai atractive constituie un atu important pentru un program Windows.

    Ce sunt formele i controalele ?

    Forma constituie fundaia de la care se pleac n proiectarea interfeei. Cu

    ajutorul lor vei construi ferestre i casete de dialog. Forma este locul unde vei

    insera controale cu care utilizatorii interacioneaz n timp ce folosesc aplicaia.

    Controalele sunt acele lucruri care le permit utilizatorilor care folosesc programul

    s fac diferite lucruri: s introduc un text, s apese un buton, s valideze o

    opiune, s vad coninutul unui fiier din interiorul aplicaiei etc.

    Adugarea i tergerea controalelor

    Adugarea controalelor se poate realiza n dou moduri :

    I. Putei aduga un control la o form executnd dublu click pe iconia

    controlului din Toolbox. Aceast metod nu v ofer un control aa de

    mare asupra controlului.

  • Prezentare Visual Basic

    9

    II. Efectuai un click pe controlul dorit. Poziionai mouse-ul deasupra formei

    i vei observa o schimbare a cursorului mouse-ului n form de cruce.

    Plasai cursorul in locul unde dorii s fie colul stnga sus al controlului.

    Deplasai mouse-ul innd apsat butonul stng pn cnd controlul are

    dimensiunea dorit. Sub cursorul mouse-ului v aprea o caset galben ce

    va indica dimensiunile (n pixeli) ale controlului.

    Pentru tergerea unui control, selectai-l efectund clic cu moue-ul pe el i

    apoi apsa-i tasta Delete sau alegei comanda Delete din meniul de context

    Mutarea redimensionarea i blocarea controalelor

    Pentru a muta un control n cadrul formei selectai-l i innd mouse-ul

    apsat pe el, tragei de el pn ajunge n poziia dorit.

    Pentru a schima dimensiunile unui control poziionai-v cu mouse-ul pe

    una din laturi i n momentul n care cursorul mouse-ului s-a transformat ntr-o

    sgeat deplasai mouse-ul mn cnd controlul are dimensiunea dorit.

    n poziionarea i dimensionarea controalelor v pot fi de un real folos comenzile

    din meniul Format. Dac dorii o aliniere a mai multor controale, selectai

    controalele pe care dorii s le aliniai i alegei una dintre comenzile Align

    (alinire le stnga ,la dreapta ,n centru, n partea de sus, n partea de jos, la mijloc

    relativ la marginile formei. Alinierea se face n funcie de ultimul control selectat

    care este marcat diferit de celelalte; selectarea mai multor controlale se face

    innd apsat tasta Ctrl i efectund clic cu mouse-ul pe controalele dorite. O

    dat poziionate n cadrul formei, controalele pot fi blocate n poziia n care au

    fost puse pentru a se evita o eventual deplasare a lor din greeal. Pentru aceasta

    selectai comanda Lock Controls din meniul Format. Pentru deblocare selectai

    aceeai comand.

  • Prezentare Visual Basic

    10

    nelegerea metodelor proprietailor i evenimentelor

    Formele i controalele Visual Basic sunt obiecte ce au propriile proprieti,

    metode i evenimente. Proprietile sunt atribute pe care le posed obiectul i

    care i descriu modul de apariie. Name, top, left, height, width, visible sunt doar

    cteva din proprietile ce se ntlnesc la marea majoritate a controalelor.

    Majoritatea proprietolor unui control (sau forme) sunt afiate n fereastra

    Properties i pot fi setate (primi valori) n timpul proiectrii aplicaiei(design-

    time). O mic parte din proprieti sunt accesibile doar n timpul execuiei

    programului(run-time).

    Metodele stabilesc comportamentul acestor obiecte, indicnd ce pot face

    ele efectiv. Metodele sunt de fapt nite proceduri, adic blocuri de cod, care

    determin obiectul s fac un anumit lucru (ex: metoda Move ntlnit la

    majoritatea controalelor determin o schimbare a poziiei controlului.)

    Evenimentele definesc interaciunea cu utilizatorul. Evenimentele sunt

    ceea ce se ntmpl cnd un obiect face ceva. Evenimentul este o aciune

    recunoscut de ctre un obiect. Fiecare obiect are un set predefinit de evenimente

    care i se pot ntmpla i pentru care dumneavoastr putei scrie cod care se va

    executa n momentul producerii acelui eveniment. Pentru fiecare eveniment se

    poate scrie o procedur, numit numeobiect_ evenimentcare se va executa n

    momentul producerii acelui eveniment. n general vei scrie proceduri pentru

    evenimentele pe care le considerai importante pentru aplicaie, nu vei scrie

    proceduri pentru toate evenimentele. Stabilind proprietile unui obiect i

    scriind cod pentru a rspunde la evenimente particularizai obiectul astfel nct s

    rspund la cerinele aplicaiei dumneavoastr.

    I.1.3. Proiectarea unei forme

    Formele constituie fundaia de la care se ncepe construirea unei interfee

    n Visual Basic.

  • Prezentare Visual Basic

    11

    Ele constituie ferestrele prin intermediul crora utilizatorul va interaciona

    cu aplicaia. Formele posed propriile proprieti, evenimente i metode cu

    ajutorul crora le putei controla modul de afiare i comportamentul. Primul pas

    n proiectarea unei forme este s-i stabilii proprietile. Acestea pot fi stabilite n

    timpul proiectrii (design time) cu ajutorul ferestrei Properties window, sau n

    timpul execuiei (run time) scriind cod.

    Not : Timpul proiectrii (design time) este timpul n care lucrai la aplicaie n

    mediul de programare. Timpul execuiei (run time) este timpul n care aplicaia

    ruleaz pe calculator i se poate lucra cu ea.

    Majoritatea proprietilor formei influeneaz modul de afiare.

    Proprietatea Caption stabilete care va fi titlul afiat n bara de titlu a formei;

    proprietatea Icon stabilete iconia pentru form; proprietatea MaxButton i

    MinButton stabilesc dac forma poate s fie maximizat sau minimizat.

    Schimbnd proprietatea BorderStyle putei controla modul de redimensionare al

    formei. Proprietile Height i Width stabilesc dimensiunile iniiale ale formei;

    proprietile Left i Top stabilesc locaia formei fa de colul stnga sus al

    ecranului; proprietatea WindowState stabilete modul n care se va afia forma la

    nceput: minimizat, maxmizat sau normal; proprietatea Name stabilete un

    identificator cu ajutorul cruia putei referi forma respectiv. n mod implicit VB

    le numete Form1, Form2, etc. Este recomandat s schimbai aceste denumiri cu

    unele mai familiare i mai uor de reinut. Cel mai bun mod de a v familiariza cu

    proprietile este s experimentai. Schimbai pe rand diferite proprieti i

    executai aplicaia ca s vedei efectul.

    Ca orice obiect forma poate executa metode i poate rspunde la

    evenimente. Evenimentul Resize al unei forme se declaneaz ori de cte ori

    forma este redimensionat fie de utilizator, fie prin intermediul codului. Acest

    eveniment al formei ofer posibilitatea de a executa anumite aciuni ca mutarea

    sau redimensionarea controalelor de pe form n momentul n care aceasta i

    schimb dimensiunile. Pentru a afia o form pe ecran utilizai metoda

  • Prezentare Visual Basic

    12

    Show.FrmForma.Show (frmForma reprezint numele formei) Pentru a nltura o

    form de pe ecran folosii metoda Hide sau funcia UnloadfrmForma.Hide sau

    Unload frmForma.

    Utilizarea butoanelor de comand

    Vei utiliza, de cele mai multe ori, butoanele de comand pentru a permite

    utilizatorilor aplicaiei s-i dea o comand, s ndeplineasc o anumit sarcin.

    Utilizatorii vor executa click pe buton sau l vor selecta n alt mod (apsnd tasta

    Tab pn ajung la ele apoi tasta Enter), moment n care butonul va arta ca i

    cum ar fi apsat. Cu ajutorul proprietii Caption putei afia text pe buton.

    Cel mai frecvent eveniment ntlnit la acest control i pentru care vei scrie cel

    mai mult cod este evenimentul Click. De cte ori utilizatorul va apsa butonul

    acest eveniment se va produce i va determina executarea codului ce se afla scris

    in procedura numit NumeButon_Click().

    Utilizarea controalelor ce manipuleaz texte

    Principalele contoale utilizate pentru manipularea textelor sunt etichet

    (Label) i caset de text (TextBox). Eticheta este un control grafic folosit pentru

    afiarea de text pe care utilizatorul nu l poate modifica. Textul ce va fi afiat se

    stabilete prin intermediul proprietii Caption . Acesta poate fi stabilit din faza

    de proiectare dar se poate modifica n timpul execuiei prin intermediul codului.

    Spre deosebire de controlul etichet, controlul Caset de text este folosit

    pentru a fia text furnizat de dumneavoastr din faza de proiectare, introdus de

    utilizator la rulare sau asociat controlului prin program. Deci controlul poate fi

    folosit i pentru ca aplicaia s preia diferite informaii de la utilizatori. Textul

    care se va afia sau care va fi preluat se gestioneaz cu ajutorul proprietii Text.

    Dac textul trebuie afiat pe mai multe linii proprietate MultiLine trebuie s aib

    valoarea True. De asemenea cu ajutorul proprietii ScollBars se pot aduga bare

    de defilare controlului.

  • Prezentare Visual Basic

    13

    Scrierea codului

    O aplicaie nu este altceva dect o serie de instruciuni care i spun

    computerului cum s ndeplineasc o anumit sarcin. Astfel, pentru fiecare

    form pe care ai adugat-o la aplicaie exist un modul al formei (un fiier cu

    extensia .frm) unde putei scrie cod ce i va determina modul de comportare.

    Modulele formelor constituie baza majoritii aplicaiilor create n Visual Basic.

    Ele conin declaraii de variabile, constante, tipuri definite de utilizator,

    enumerri, proceduri ce gestioneaz evenimentele, proceduri i funcii globale

    sau locale.

    Setul de caractere

    Aceste cuvinte sunt entiti formate din caractere. n cazul limbajului

    Visual Basic se pot folosi urmtoarele caractere (pe care le putei vedea i pe

    tastatura calculatorului): - literele mari i mici ale alfabetului limbii romne: A-Z,

    a-z; inclusiv caracterele specifice limbii romne:,,,,;

    - Cifrele sistemului de numerotaie zecimal:0-9;

    - Caractere speciale: + - / ^ () [] {}. , ; :_ ! # % & $ etc.;

    - Caracterele speciale perechi: =, := ;

    - Separatorii: spaiu, tab i caracteru Enter.

    Identificatori

    Un identificator este numele unui element dintr-un program, fie el

    variabil, constant, tip definit de utilizator, enumerare, procedur, funcie,

    obiect, metod, proprietate, control, form modul sau chiar proiectul nsui. Un

    proiect Visual Basic poate s conin maxim 32000 identificatori. Un

    identificator trebuie s respecte urtoarele reguli:

    - s nceap cu o liter;

    - s nu conin n interior unul din caracterele: . %!$@;

    - numele variabilelor nu pot fi mai lungi de 255 caractere iar cele ale

  • Prezentare Visual Basic

    14

    controalelor, modulelor, formelor i claselor nu pot fi mai lungi de 40

    caractere;

    - nu trebuie s existe doi identificatori identici cu acelai scop;

    - exist o serie de identificatori standard, definii de Visual Basic. O

    redeclarare a lor va duce la nerecunoaterea sensurilor iniiale;

    - nu pot fi identificatori cuvintele cheie ale limbajului. Cuvintele cheie sunt

    identificatori cu semnificaie fixat, care nu pot fi folosii n alt context dect

    cel precizat de semantica limbajului. Exemple: Dim, Private, Public, Array ,

    For , Next, If, Then ,Else, End etc..

    Comentarii, separatori, mprirea liniei

    Comentariile sunt iruri de caractere care au n fa caracterul (`). Au rolul

    de a face textul programului mai lizibil.

    Exemple:

    Aici ncepe programul

    n general n Visual Basic putei scrie doar o singur declaraie pe o linie. Totui,

    dac dorii, putei scrie mai multe declaraii pe mai o singur linie desprindu-le

    cu ajutorul separatorului de instruciuni i declaraii care este caracterul (:) .

    Exemplu:

    Dim a as Integer : a=10

    De asemenea pentru a spori lizibilitatea programelor dumneavoastr, dac

    o declaraie este prea mare o putei scrie pe mai multe linii. Acest lucru se

    realizeaz folosind caracterul continuator de linie ( _)( un spaiu urmat de o linie

    jos).

    Exemplu:

    Private Declare Function GetVolumeInformation Lib _

    kernel32 Alias GetVolumeInformationA _

  • Prezentare Visual Basic

    15

    Tipuri de date

    Tipul unei date definete mulimea de valori pe care le poate conine o

    variabil i mulimea de operaii care pot fi efectuate cu elementele mulimii

    respective. n funcie de tipul de dat pe care-l stocheaz o anumit variabil

    compilatorul aloc o zon mai mare sau mai mic de memorie pentru a fi

    reprezentat.

    Cu fiecare tip de dat sunt permise o serie de operaii. Astfel:

    - operaiile care se pot face cu valorile unui tip ntreg sunt: adunarea (+),

    scderea(-), nmulirea(*), mprirea ntreag (\) a \ b returneaz ctul mpririi

    lui a cu b, mprirea real(/), restul mpririi ntregi (mod); ridicarea la putere

    (^) de asemenea sunt permise operaiile relaionale: mai mic sau egal (=);Rezultatul unor astfel de

    operaii este de tip boolean, avnd valorile True sau False.

    - valorile logice, booleane (True i False) suport urmtoarele operaii logice:

    negarea logic (Not); i logic (And); sau logic (Or); sau exclusiv logic (Xor);

    echivalena logic (Eqv); implicaia logic (Imp);

    Variabile

    Din punct de vedere al utilizrii variabilelor Visual Basic poate fi

    considerat un limbaj cu 2 feluri de variabile: cu tip i fr tip. Folosirea

    variantelor fr tip de date (prin utilizarea tipului implici Variant) a devenit

    deosebit de important. Tipul Variant conine nu numai variabila dar i informaii

    despre variabil.

    A declara o variabil nsemn s-i spui programului nainte despre ea astfel

    nct programul s tie ct memorie s-i aloce i unde. Declararea unei variabile

    se face astfel:

    [Public| Private] Dim NumeVariabil as TipVaribil

    Declararea variabilelor se poate face n dou moduri : implicit sau explicit.

    n modul implicit o variabil este considerat declarat la prima ei folosire.

  • Prezentare Visual Basic

    16

    Nu este necesar o declarare prealabil cu ajutorul cuvintelor cheie Dim, Private,

    Public. n mod implicit Visual Basic le declar de tip Variant pe toate.

    Tablouri

    n Visual Basic sunt dou tipuri de tablouri: tablouri cu dimensiune fix i

    tablouri dinamice.

    Tablourile cu dimensiune fix sunt tablourile care au un numr fix de

    componente. Acesta este declarat de la nceput astfel nct compilatorul aloc

    suficient memorie pentru a putea reine toate elementele. Declararea unui tablou

    cu dimensiune fix se poate face n dou moduri:

    - prin specificarea numrului ultimului element

    Dim|Public|Private NumeTablou(NrUltimulElement) As TipDat

    - Exemplu: Dim aPuncte(5) As Integer

    - Cnd declarai un tablou primul element este 0. Exist totui

    posibilitatea s facei ca primul element s fie 1. Pentru aceasta inserai

    declarai Option Base 1 n seciunea General a modulului n care declarai

    tabloul.

    Limbajul Visual Basic accept tablouri bi-, tri, i multi- dimensionale. Cea

    mai bun cale de a vizualiza un tabel bidimensional este o matrice cu rnduri i

    coloana. Exemple: Dim aCuloarePunctePlane(10,10) As Byte

    Cnd adresai un element al unui tablou multidimensional trebuie s

    specificai numrul de ordine al elementului pe fiecare dimensiune.

    Exemple: aCuloarePunctePlane(3,6)=10

    aCuloarePuncteSpaiu(15,49,3)>=20

    Pentru gestionarea ct mai eficient a elementelor tablourilor sunt de mare

    folos structurile repetitive.

  • Prezentare Visual Basic

    17

    Structuri de control

    Structurile de control sunt formate din instruciuni. Acestea descriu partea

    algoritmic a unui program. Ele pot fi prefixate de etichete pentru a putea fi

    referite n instruciunea de salt necondiionat Goto.

    Structura liniar

    Structura liniar este format din dou instruciuni: instruciunea de

    atribuire i instruciunea de apel procedur.

    Instruciunea cea mai important i cea mai frecvent a limbajului este

    instruciunea de atribuire, avnd forma:

    variabil = expresie sau Set variabil = obiect sau Nume_de_funcie = expresie

    Instruciunea specific faptul c unei variabile sau unei funcii i este

    atribuit o nou valoare, care este specificat printr-o expresie sau printr-un

    obiect. O expresie este o construcie care desemneaz forma de reprezentare a

    unei formule pentru calculul valorii unui obiect oarecare. O expresie const dintr-

    o secven format din operanzi (variabile, constante, etc.) i operatori (simboluri

    operaionale).

    Structura alternativ

    Structura alternativ este descris cu ajutorul instruciunilor If Then,

    If Then Else i

    Select Case.

    Exemplu: If iNota

  • Prezentare Visual Basic

    18

    Else bloc de instruciuni3 EndIf

    Sintaxa: Select Case condiia

    Case list_de_expresii1 bloc_de_instrucini1

    Case list_de_expresii2 bloc_de_instruciuni2

    Else Case bloc_de_instruciuniN

    End Select

    Fiecare list_de_expresii este o list format din mai multe variabile. Se

    testeaz condiia i n funcie de valoarea obinut se execut

    blocul_de_instruciuni care este precedat de lista_de_expresii care conine

    valoarea selectorului

    Exemplu:Select Case sLunaAn

    Case decembrie ,ianuarie, februarie sAnotimp=iarna

    Case martie, aprilie, mai sAnotimp=primvara

    Case iunie, iulie, august sAnotimp=vara

    Else Case sAnotimp=toamnaEnd Select

    Structura repetitiv

    Aceast structur permite repetarea n anumite condiii a unei instruciuni

    sau a unei secvene de instruciuni.Visual Basic suport dou tipuri de structuri

    repetitive:

    Structuri repetitive cu contor descrise de instruciunile For Next i

    ForEachNext care execut acelai lucru de un numr stabilit de ori i

    structuri repetitive cu condiie descrise de diferitele variante ale instruciunii

    DoLoop ce ndeplinesc aceeai sarcin atta timp ct o condiie exist sau pn

    cnd nu mai exist o condiie.

    Structurile repetitive cu contor ncep cu instruciunea For i se termin cu

    instruciunea Next.

    Sintaxa : For VariabilaContor = NumStart to NumSfrit [Step

    VariabilaIncr]

  • Prezentare Visual Basic

    19

    bloc_de-instruciuni

    [Exit For]

    bloc_de_instruciuni

    Next [VaiabilaContor]

    VariabilaContor este o variabil ntreag pe care structura o folosete

    pentru a contoriza numrul de repetri efectuate. NumStart i NumSfrit sunt

    dou variabile reale care stabilesc valoarea iniial ce o va lua VariabilaContor i,

    respectiv, valoarea final. VariabilaContor stabilete cu ce valoare se

    incrementeaz sau decrementeaz VariabilaContor la fiecare repetare. n mod

    implicit valoarea este 1. Instruciunea Exit For este folosit pentru ca excuia

    programului s prseasc structura repetitiv chiar dac VariabilaContor nu a

    ajuns s ia valoarea NumSfrit

    Instruciunile DoLoop sunt folosite pentru execuia unui bloc de

    instruciuni de un numr de necunoscut de ori. Exist mai multe variante ale

    instruciuni DoLoop dar fiecare evalueaz o anumit condiie. Condiia este o

    expresie care este evaluat ca fiind fals (zero) sau adevrat (diferit de zero).

    Instruciunea Do While Loop are sintaxa:

    Do While condiie

    bloc_de_instruciuni

    [Exit Do] bloc_de_instruciuni

    Loop

    O alt variant a instruciunii DoLoop este urmtoarea:

    Do Until condiie

    bloc_de_instruciuni

    [Exit Do] bloc_de_instrciuni

    Loop

    Aceast instruciune se aseamn cu cea prezentat anterior cu diferena c

    blocul de instruciuni se repet pn cnd condiia devine adevrat (adic atta

    timp ct condiia este fals).

  • Prezentarea tehnicii backtracking

    I.2. Prezentarea tehnicii backtracking

    Folosim aceasta tehnica atunci cnd nu dispunem de o alta metoda de

    rezolvare a unei probleme iar problema respectiva ndeplinete simultan

    condiiile:

    -solutia poate fi pusa sub forma unui sir x1,x2,,xn (x1,x2,,xn pot fi la rndul lor

    iruri)

    -elementele irului aparin mulimilor A1,A2,.,An care sunt mulimi finite cu

    elementele intr-o ordine foarte bine stabilita (exista si probleme n care aceste

    mulimi coincid). Soluia pe care suntem tentai sa o adoptam cnd ntlnim o

    astfel de problema este generarea produsului cartezian A1xA2..xAn si sa testam

    fiecare element daca este soluie, dar ne vom lovi de faptul ca timpul de execuie

    este att de mare nct nu se mai ajunge la nici o valoare practica. Exemplul cel

    mai concludent l constituie problema care genereaz permutrile unei mulimi

    finite A: vom genera 1,1,1,1 si vom constata ca nu am obinut o permutare,

    lucru pe care l puteam observa chiar de la a doua cifra de 1 pe care am introdus-

    o n irul soluiilor, pentru ca nu era distincta fata de prima.

    Rezulta din acest exemplu urmatorul principiu: construim solutia pas cu

    pas si daca se constata ca pentru o valoare aleasa nu avem cum sa ajungem la

    solutie, renuntam la acea valoare si reluam cautarea din punctul n care am ramas.

    n cazul n care aplicatia pe care dorim sa o rexolvam cere doar o singura solutie

    vom forta oprirea metodei dupa aflarea acesteia deoarece tehnica ofera aflarea

    tuturor solutiilor.

    Testarea elementelor x1, x2,. din irul soluiilor se face pana cnd nu a

    mai rmas nici un element netestat n urmtorii pai:

    -consideram ca am gsit elementele x1,x2,xk din irul soluiilor si se pune

    problema aflrii elementului xk+1. Acest element se cuta n mulimea Ak+1 ncepnd cu primul element disponibil. Apar astfel doua posibilitati:

  • Prezentarea tehnicii backtracking

    21

    a) nu se gsete un astfel de element n aceasta mulime si de aceea se considera

    generate n irul soluiilor doar elementele x1,x2,xk-1 si se cuta un alt

    element xk n mulimea Ak dintre cele ramase netestate

    b) se gsete elementul xk+1 , dar trebuie testat daca ndeplinete anumite

    condiii. n cazul n care le ndeplinete se testeaz daca s-a ajuns la soluie

    aprnd astfel doua posibilitati:

    b.1) s-a ajuns la soluie, se tiprete si se cuta n continuare un alt element

    din mulimea Ak+1 rmas netestat.

    b.2) nu s-a ajuns la soluie si se reia algoritmul considernd generate

    elementele x1,x2,..,xk+1 cutnd primul element xk+2 din mulimea Ak+2

    In cazul n care elementul nu ndeplinete condiiile se considera generate

    doar elementele x1,x2,xk si se cuta un alt element xk+1 ntre elementele

    mulimii Ak+1 ramase netestate.

    Daca vom privi irul soluiilor ca pe o stiva cu elementele x1,x2,,xn si

    vom nota stiva ST aceasta poate arata astfel:

    Xn

    X1

    Fiecare nivel al stivei trebuie iniializat pentru a alege n ordine elementele

    mulimii. Iniializarea se va face cu o valoare aflata naintea tuturor valorilor

    posibile din mulime. Vom utiliza pentru aceasta o procedura de iniializare

    denumita INIT care are parametrul transmis prin valoare nivelul k care trebuie

    iniializat si parametrul transmis prin referina stiva ST de tip sir care este

    returnata n programul principal.

    Cutarea urmtorului element al mulimii Ak se face cu ajutorul procedurii

    SUCCESOR care are ca parametrii transmii prin valoare nivelul k al stivei pe

    care se cuta urmtorul element si irul soluiilor gsite pana n acel moment, si

    ca parametrul transmis prin referina o variabila booleana AS care are valoarea

  • Prezentarea tehnicii backtracking

    22

    adevrat n cazul n care se gsete un succesor si valoarea fals cnd nu se gsete

    succesor.

    n cazul n care se gsete un succesor acesta trebuie testat daca

    ndeplinete condiiile impuse de problema adic daca este valid . Acest lucru

    este realizat de ctre procedura VALID care are ca parametrii transmii prin

    valoare nivelul k pe care este gsit un succesor si irul creat pana n acel

    moment, si ca parametru transmis prin referina o variabila booleana AS care are

    valoarea adevrat n cazul n care succesorul gsit ndeplinete condiiile impuse

    de fiecare aplicaie n parte si fals n caz contrar.

    Dup validarea succesorului funcia SOLUTIE testeaz daca s-a ajuns sau

    nu la soluia finala adic ultimul element este al n-lea si n caz afirmativ soluia

    se tiprete cu ajutorul procedurii TIPAR care poate fi adaptata de fiecare

    utilizator n parte n funcie de cum dorete sa afieze rezultatele.

    Legarea intre ele a celor cinci funcii si proceduri prezentate anterior

    formeaz de fapt tehnica backtacking:

    K:=1; Init(k,st); While k>0 {

    Do {Succesor(k,st,as); If as_valid(k,st,ev);

    While ((!as) || (as && ev)); If as

    If soluie(k) tipar;

    Else {

    K:=k+1; Init(k,st);

    } Else

    k=k-1; }

  • Prezentarea tehnicii backtracking

    23

    I.2.1. Programul in C++ pentru realizarea permutarilor a n numere.

    #include #include int st[20], folosit[20],n,i,c,a[20][20],l,j,k; void afisare() { int i,j,k,l; c++; for(i=1;i

  • Prezentarea tehnicii backtracking

    24

    int st[20], folosit[20],n,i,c,a[20],l,j,k; void afisare() { int i,j,k,l; c++; for(i=1;i

  • PTRATE MAGICE

    25

    CCaappiittoolluull IIII PTRATE MAGICE

    II.1. Istoric

    Patratele magice au fost cunoscute nc din antichitate de ctre chinezi i

    de ctre indieni. Acetia din urm le purtau asupra lor, atrnate de gt sau

    ascunse in sn, ca amulete mpotriva bolilor, deochiului, calamitailor etc.

    pitagoricienii, pentru a-si prezerva fora spirituala, nchinau ptrate magice

    planetelor.

    Merita a fi subliniat faptul ca in acea epoca nu se cunoteau dect vreo

    cteva ptrate magice, att de puine, incat se puteau numra pe degete. Tocmai

    raritatea lor le conferea pe atunci, caracterul ,, magic.

    In Evul Mediu, ptratele magice au fost in mare cinste printre arabi, care

    au sporit numrul lor cu inca vreo cteva combinaii. Cea dinti scriere care

    constituie un studiu mai serios despre ptratele magice aparine clugrului

    Emanoil Moscopol (secolul XIV-lea), care si-a dat seama ca pot exista foarte

    multe combinaii de numere cu aceste proprietatea.

    In era moderna s-au ocupat de ptratele magice numeroi savani, printre

    care: in secolul al XVI-lea Cardan si Paracelsus, in secolul al XVII Bachet de

    Mziriac, Fermat, La Hire, Kircher si Saveur, in secolul al XVIII-lea Euler si

    Franklin, in secolul al XIX-lea Arnoux si Lucas. Fiecare din ei a adus o

    contribuie la studiul problemei, azi definitiv si complet lmurita teoretic, dar

    relativ puin exploatata practic si deocamdat lipsita de utilitate aplicativa.

    II.2. Definiii i terminologie

    1. Se numete ptrat magic un tablou (o matrice) alctuit din n2 numere (n

    principiu diferite), dispuse pe n rnduri si n coloane, in aa fel nct suma

  • PTRATE MAGICE

    26

    celor n numere de pe fiecare rnd, de pe fiecare coloan i de pe fiecare

    diagonal s fie aceeai.

    2. Cele n2 numere, dispuse aa cum s-a artat mai sus se numesc elementele

    ptratului magic. Pentru o mai buna vizibilitate se obinuiete, n

    practic, s se aeze elementele ptratului magic n ptraele sau csue.

    3. Suma constant a fiecrui rnd, a fiecrei coloane i fiecrei diagonale se

    numete suma magica, notat Sm sau sm.

    4. Diagonala de la stnga-sus la dreapta-jos se numete prima diagonala, iar

    cealalt a doua diagonala.

    5. Ptratul magic este denumit in funcie de numrul de elemente de pe

    fiecare latura a sa; astfel, un ptrat magic cu 62=36 elemente, deci avnd

    latura de 6 elemente lungime, se numete ptrat magic de 6.

    6. Doua casute situate pe acelai rnd, sau pe aceeai coloana, sau pe

    aceeai diagonala, la egala distanta de mijlocul rndului respectiv, al

    coloanei respective sau al diagonalei respective, se numesc casute

    corespondente, iar elementele (numerele) coninute de ele se numesc

    elemente corespondente.

    7. Ptratul magic in care n este par (adic a crui latura are un numr par de

    elemente ) se numete ptrat ptrat magic par. Daca n este impar,

    ptratul magic respectiv se numete ptrat magic impar. Ptratele magice

    pare sunt de doua feluri: ptrate magice par pare, in care latura n are

    forma n=4m, si ptratele magice impar pare, in care latura n are forma

    n=4m+2.

    8. Linia orizontala sau verticala care mparte un ptrat magic par in doua

    jumtatea egale se numete mediana. Un ptrat magic par are o linie

    mediana orizontala si o linie mediana verticala. In ptratele magice

    impare, rndul sau coloana a cror axa este linie mediana se numesc rnd

    median respectiv coloana mediana.

  • PTRATE MAGICE

    27

    9. Liniile mediane ale unui ptrat magic par mpart ptratul in 4 sferturi ( tot

    in forma ptrata ), numerotate astfel: stnga sus 1, stnga jos 3, dreapta

    sus 2, dreapta jos 4. In ptratele impare, rndul median si coloana

    mediana izoleaz patru ptrate mai mici ( pare ), numite prin analogie ( in

    mod impropriu ) tot sferturi si numerotate la fel.

    10. Doua elemente situate la egala distanta de centrul ptratului magic, unul

    in sfertul 1 si celalalt in sfertul 4 sau unul in sfertul 2 si celalalt in sfertul

    3, se numesc simetrice. De asemenea, doua elemente ale unui ptrat

    magic impar, situate la egal distan de centrul ptratului magic se

    numesc tot simetrice (ele fiind in acelai timp si corespondente).

    Elementele simetrice de pe diagonalele oricrui ptrat magic sunt n

    acelai timp si elemente corespondente.

    II.3. Proprietile generale ale ptratelor magice

    1. Un ptrat rmne magic dac se mrete sau se micoreaz cu acelai

    numr fiecare element al sau, ceea ce este evident, pentru c dac mrim

    sau micoram cu x fiecare element al unui ptrat magic de n, atunci pe

    fiecare rnd, pe fiecare coloana si pe fiecare diagonala, suma magica

    iniiala Sm va deveni Sm=Sm+n x, respectiv Sm=Sm-nx, deci va ramane

    constanta.

    2. Un ptrat magic rmne magic dac se inmulteste sau se mparte cu x

    fiecare element al unui ptrat magic de n, atunci pe fiecare coloan si pe

    ambele diagonale, suma magic iniial Sm va deveni Sm=x Sm, respectiv

    Sm=Sm / x, deci va rmne constant.

    3. Din aliniatele 1 si 2 de mai sus rezulta ca un ptrat magic ramane magic

    daca se nlocuiete irul natural al primelor n2 numere (1n2) prin orice sir

    de n2 numere consecutive, sau prin orice progresie aritmetic cu n2

    termeni. Pentru comoditatea exprimrii, in prezentul capitol vom folosi, in

  • PTRATE MAGICE

    28

    general, irul natural al numerelor: 1n2. aadar, ditr-un ptrat magic de

    baza se pot confeciona o infinitate de alte ptrate magice.

    4. Daca se aduna doua cate doua elementele de acelai rang a doua ptrate

    magice de aceeai mrime, se obine un alt ptrat magic, ceea ce este

    evident, pentru ca atunci pe fiecare rnd, pe fiecare coloana si pe ambele

    diagonale, suma magica a ptratului nou va fi Sm=Sm1+Sm2, deci va ramane

    constanta. Daca cele doua ptrate magice de adunat nu sunt de aceeai

    mrime, iar diferena n1-n2 este numr par, atunci ptratul magic mai mic

    se nconjoar cu o bordura de casute, in care se pun zerouri, apoi se

    efectueaz adunarea. Se nelege ca cele spuse in prezentul alineat cu

    privire la adunarea a doua ptrate magice rmn valabile i pentru cazul

    scderii unui ptrat magic din alt ptrat magic.

    5. Un ptrat magic rmne magic dac se schimb ntre ele mai nti dou

    coloane corespondente, apoi dou rnduri corespondente ( sau invers: mai

    nti doua rnduri corespondente i apoi doua coloane corespondente),

    ceea ce este evident, pentru ca schimbnd mai nti doua iruri ( rnduri

    sau coloane) suma magica pe rnduri i pe coloane rmne neschimbata,

    deranjndu-se numai suma magic de pe diagonale, iar apoi, schimbnd

    ntre ele si celelalte dou iruri, elementele diagonale mutate de la locul lor

    revin in diagonalele din care au fcut parte iniiala, restabilindu-se astfel

    suma magica si pe diagonale.

    6. Suma magica, in orice ptrat magic in care n2 elemente sunt termenii unei

    progresii aritmetice, este Sm=n(n2+1)/2. in ptratele magice in care n=4m,

    suma magica este Sm=2m(16m2+1). In ptratele magice impar pare, in care

    n=4m+2, suma magica este Sm=32m3+48m2+26m+5.

  • PTRATE MAGICE

    29

    II.4. Metode pentru construirea patratelor magice

    II.5. Ptrate impare

    II.5.1. Metoda lui Bachet de Mziriac

    Exist un singur ptrat magic de ordinul 3 (cu toate c prin rotaii i

    simetrii pot fi obinute 8 astfel de ptrate):

    Se deseneaz un ptrat cu latura n dorita, dar cu casute goale, apoi se

    completeaz in exterior cu casutele auxiliare necesare pentru obinerea unui

    ptrat aezat pe vrf. Aceste casute auxiliare exterioare fac parte din ptratele

    care repeta in exterior ptratul de baza ( ca in fig.2,a)

    In ptratul aezat pe vrf se nscriu, in ordinea lor crescnd, numerele care

    fac parte din progresia aritmetic aleas, pe una din direciile aritmetice

    diagonale. Ca exemplu, artam cum se efectueaz aceasta operaie intr-un ptrat

    de 5 (fig.2)

    Se las la locul lor numerele care au czut in interiorul ptratului de baza si

    se transfera numerele din casutele auxiliare exterioare n csuele

    corespunztoare ale ptratului de baz ( ca in fig. 2,b). va rezulta un ptrat magic

    corect.

    Aceast metod prezint avantajul ca este foarte comod, dar prezint

    totodat i un dezavantaj: da o singura soluie propriu-zis, adica- daca se ine

    seama de rsturnri (inversri ) i de rotiri numai 8 soluii distincte.

    2 9 4

    7 5 3

    6 1 8

    fig. 1

  • PTRATE MAGICE

    30

    II.5.2. Programul in C++ pentru metoda Bachet de Mziriac

    Acest program da o metoda de constructie a unui patrat magic impar

    adaptata la conditiile de lucru ale calculatorului. Astfel, nu se construiesc csuele

    exterioare ca la metoda manuala, numerele vor fi trecute direct dupa cum

    urmeaza:

    Se plaseaz 1 n centrul ultimei coloane;

    Se merge n linie oblic, dreapta-jos, cu numrul urmtor; dac se iese din

    ptrat prin partea dreapt, se merge n partea opus, n stnga liniei unde

    trebuia depus numrul, iar dac se iese prin partea de jos a ptratului, se

    merge n partea de sus a coloanei unde trebuia depus numrul;

    Dup ce se completeaz un grup de n numere, se merge cu o csu spre

    stnga, pe aceeai linie, pentru a se repeta apoi pasul 2 i a genera urmtorul

    grup de n numere.

    Se obine n final urmtorul ptrat magic:

    Despre program:

    Programul permite 2 tipuri de afiare a ptratului

    magic:

    11 10 4 23 17

    18 12 6 5 24

    25 19 13 7 1

    2 21 20 14 8

    9 3 22 16 15

    17 13 9

    6

    21

    12 8

    18 14

    23 19 15

    11 7 3

    16

    22

    2

    1

    4

    10

    5

    24 20

    25

    c 11 24 7 20 3

    4 12 25 8 16

    17

    10

    23

    5 13 21 9

    18 1 14 22

    6 19 2 15

    fig. 2

    b

    a

  • PTRATE MAGICE

    31

    1. Direct

    programul afieaz ptratul chiar dac nu o s ncap pe ecran

    2. Pas cu pas

    dup fiecare numr afiat trebuie apsat o tast

    se vor afia numai ptratele cu n15 afiarea se va face

    numai n mod Direct

    Aceasta metoda are dezavantajul ca da o singura solutie pentru acest tip de

    patrate.

    Sursa programului:

    #include #include #include unsigned char m[200][200]; int n; void af(){ for (int i=1;i

  • PTRATE MAGICE

    32

    gotoxy(j*4,poz+i); printf("%3d ",nr); getch(); } gotoxy(1,poz+n); } void main(void) { char c; do{ clrscr(); printf("N=");scanf("%d",&n);fflush(stdin); if (n%2) { puts("1. Direct 2. Pas cu pas"); printf("Alegeti modul de afisare al patratului

    (1/2):"); unsigned char k; scanf("%u",&k); if (k==1) mod_1(); else mod_2(); printf("\nAcesta este patratul magic de ordin

    %d.",n); printf("\nNumarul magic este %d.",n*(n*n+1)/2); } else printf("Ati introdus un numar par..."); printf("\nContinuati? (d/n) ");c=getch(); }while (c!='n'); }

    II.5.3. Metoda lui La Hire

    Se recurge la doua progresii aritmetice:

    (1) 1,2,3,4,.n

    (2) 0,n,2n,3n,..(n-1)n

    Daca se adun fiecare termen al progresiei (1) cu fiecare termen al

    progresiei (2) se obin toi termenii progresiei

    (3) 1,2,3,4,..n2.

    Se deseneaz doua ptrate auxiliare de cate n2 casute ( de exemplu de 52

    = 25 csute ).

    Se nscriu n primul ptrat auxiliar termenii progresiei (1) astfel:

    1. in rndul 1 intr-o ordine oarecare,

  • PTRATE MAGICE

    33

    2. apoi in rndul urmtor in aceeai ordine, dar ncepnd cu un numr

    care in rndul 1 ocupa locul 3(n-1) si aa mai departe, adic ncepnd

    fiecare rnd dup aceeai regula ca si rndul precedent ca si rndul 2 fa

    de rndul 1.

    In exemplul nostru (fig. 3,a ) fiecare rnd ncepe cu numrul care in

    rndul precedent ocupa locul 3.(n-1) si aa mai departe, adic ncepnd

    fiecare rnd dup aceeai regula ca i rndul 2 fata de rndul 1.

    n cel de-al doilea ptrat se trec temenii progresiei (2) in primul rnd,

    dar regula nceperii fiecrui rnd fata de rndul precedent sa fie diferit de

    regula folosita in acelai scop in primul ptrat auxiliar. In exemplul nostru

    (fig.3,b), fiecare rnd ncepe cu numrul care in rndul precedent ocupa locul

    4. i acest al doilea ptrat auxiliar va fi magic, pentru aceleai considerente ca

    si primul ptrat auxiliar.

    Se adun doua cte dou, numerele care ocupa acelai loc in ambele

    ptrate auxiliare. Va rezulta un ptrat magic ( fig. 3,c), pentru c, pe de o parte

    nici unul din numerele primului ptrat auxiliar nu se adun de doua ori cu

    acelai numr din al doilea ptrat auxiliar, iar pe de alta parte pentru ca daca

    se aduna doua cate doua numerele care ocupa acelasi loc in doua ptrate

    magice se obine tot un ptrat magic.

  • PTRATE MAGICE

    34

    Aceasta metoda permite gsirea unui numr mare de ptrate magice,

    anume: in primul ptrat auxiliar, termenii progresiei (1) pot fi aezai in rndul

    1 in Pn feluri, iar termenii progresiei 2 pot fi aezai in rndul 1 al celui de-al

    doilea ptrat auxiliar tot in Pn feluri, deci rezulta (Pn)2 combinaii , adic (n!)2

    combinaii. In rndul 2, termenii pot fi aezai in primul ptrat auxiliar in (n-3)

    feluri diferite, iar in al doilea ptrat auxiliar in (n-4) feluri diferite, deci

    rezulta in total (n-3)(n-4) combinaii.

    Total general: (n!)2 (n-3)(n-4) ptrate magice distincte, iar daca se tine

    seama de rsturnri si de rotiri: 8(n!)2(n-4)(n-3) ptrate magice diferite. Se

    excepteaz ptratul magic de 3, care nu admite dect o singura soluie,

    respectiv 8 soluii.

    In cazul ptratului magic de 5, formula de mai sus d:

    (n!)2(n-3)(n-4)=(5!)2.2.1 = 28800 soluii;

    8(n!)2(n-3)(n-4) = 8 .(5!)2.2.1 = 230400 soluii.

    3 1 2 4 5

    2 4 5 3 1

    5

    1

    4

    3 1 2 4

    2 4 5 3

    5 3 1 2

    10 20 15 0 5

    0 5 10 20 15

    20

    5

    15

    15 0 5 10

    10 20 15 0

    0 5 10 20

    13 21 17 4 10

    2 9 15 23 16

    25

    6

    19

    18 1 7 14

    12 24 20 3

    5 8 11 22

    fig. 3

    a b

    c

  • PTRATE MAGICE

    35

    II.5.4. Programul in C++ pentru ptrate magice impare dupa metoda

    lui La Hire.

    Acest program presupune formarea a doua ptrate unul din numerele

    1,2,3.n si cellalt din n,2n,.n2 . Prima linie a fiecaruia fiind alcatuita din o

    anume permutare a numerelor date. Deci, pentru prima linie a fiecrui ptrat a

    fost necesara cte o procedur backtracking. Aceste proceduri se apeleaz una pe

    cealalt i astfel se obine un numr foarte mare de soluii.

    Programul pentru patrate impare dupa metoda lui La Hire. #include #include int st[10],

    folosit[10],n,i,a[10][10],l,j,k,val[10],b[10][10],sti[10],ii,folositi[10],ci,nrlin;

    unsigned long c; char cont; //procedura de creare a patratului intermediar //format din numerele 0,n,2n,...n*n void patrati() { int ii,ji,k,l,j,i; for(ii=1;ii

  • PTRATE MAGICE

    36

    cout

  • PTRATE MAGICE

    37

    { do { clrscr();c=0;nrlin=0; cout

  • PTRATE MAGICE

    38

    3. rndurile de ordin impar vor fi identice cu rndul 1,

    4. iar cele de ordin par vor fi identice cu rndul 2.

    5. De la mediana orizontala in jos, invers: rndurile de ordin impar vor fi

    identice cu rndul 2 de sus, iar cele de ordin par vor fi identice cu rndul 1

    de sus (fig. 4,a).

    In la doilea ptrat auxiliar se nscriu in prima coloana ( din stnga )

    termenii progresiei (2), avnd grija, tot aa, ca termenii complementari sa se

    gseasc in casute corespondente. Se continua cu coloanele de la stnga la

    dreapta, aa cum s-a procedat cu rndurile de sus in jos: coloana 2 este inversa

    coloanei 1 (pe verticala), coloanele 3,5 etc. vor fi identice cu coloana 1,

    coloanele 4,6 etc. vor fi identice cu coloana 2, pana la mediana verticala, iar in

    dreapta medianei verticale invers: coloanele de rang impar vor fi identice cu

    coloana 2, iar cele de rang par vor fi identice cu coloana 1 (fig. 4,b).

    Adunnd doua cate dou numerele care ocupa acelai loc in ambele

    ptrate auxiliare, se obine un ptrat magic. Ca exemplu dam un ptrat magic

    de 4 construit cu ajutorul acestei metode (fig. 4,c)

    Programul pentru patrate magice par pare.

    2 4 1 3

    3 1 4 2

    3

    2

    1 4 2

    4 1 3

    12 0 0 12

    4 8 8 4

    8

    0

    4 4 8

    12 12 0

    14 4 1 15

    7 9 12 6

    11

    2

    5 8 10

    16 13 3

    fig. 4

    b a

    c

  • PTRATE MAGICE

    39

    In cazul acestor patrate metoda consta ca si la patratele impare din

    construirea a doua patrate, dar difera modul de formare a primei linii. Asfel prima

    linie, respectiv prima coloana la cel de-al doilea patrat, este alcatuita tot dintr-o

    permutare de n numere, dar acestea sunt mparite in perechi complementare si

    aezate in csute corespondente. A fost necesara tot cte o procedura backtacking

    de formare a primei linii pentru primul ptrat, respectiv coloane pentru cellalt.

    II.6.2. Programul n C++ pentru ptratele par pare dupa metoda lui La

    Hire

    #include #include int st[20],

    folosit[20],folositi[20],n,i,a[20][20],b[20][20],l,j,k,nrlin,val[20],ii,sti[20];

    char cont; unsigned long c; // afisarea rezultatelor void afis_final() { c++; for(i=1;i

  • PTRATE MAGICE

    40

    b[i][j]=b[i][1]; for(j=4;j

  • PTRATE MAGICE

    41

    // { // for(i=1;i

  • PTRATE MAGICE

    42

    Se nsumeaz cele doua ptrate auxiliare. Rezulta un ptrat care nu este

    nici el magic, dar care are, de asemenea, suma magica pe diagonale.

    Se lsa intacte elementele de pe diagonale si se schimba intre ele:

    1. elementele corespondente din rndul 1 si coloana 1;

    2. elementele mediane din rndul 2 si rndul ultim si din coloana 2 si

    coloana ultima;

    3. elementele extreme din unul dintre cele cele doua rnduri mediane si

    din una dintre cele doua coloane mediane.

    In loc de rndul 1 si coloana 1 se pot lua rndul ultim si coloana ultima,

    iar in loc de rndul doi si coloana 2 si rndul si coloana ultime se pot lua un rnd

    si o coloana oarecare, cu condiia sa nu fie modificate diagonalele.

    Rezulta un ptrat magic. Ca exemplu (fig. 5) dam un ptrat de 6, in cele

    cinci faze de lucru: cele doua ptrate auxiliare (fig. 5,a,b), ptratul care

    nsumeaz cele doua ptrate auxiliare (fig. 5,c), ptratul intermediar (fig. 5,d) si

    patratul magic final (fig. 5,e).

  • PTRATE MAGICE

    43

    II.7.1. Programul n C++ pentru ptratele magice par impare.

    Acest program are la baza noiunile prezentate la programul pentru

    ptratele par pare, cu deosebirea c la programul rezultat doar diagonalele au

    suma magica. Deci, mai sunt necesare schimbri i intre elemente. Acestea sunt

    trecute in interiorul programului sub forma de comentarii.

    Programul sursa:

    5 6 3 4 1

    2 1 4 3 6

    5

    5

    2

    6 3 4 1

    6 3 4 1

    1 4 3 6

    2

    5

    2

    2

    5

    5 6 3 4 1 2

    24 6 24 24 6

    0 30 0 0 30

    12

    18

    30

    18 12 12 18

    12 18 18 12

    0 30 30 0

    24

    0

    12

    18

    30

    6 24 6 6 24 6

    29 12 27 28 7

    2 31 4 3 36

    17

    23

    32

    24 15 16 19

    18 21 22 13

    1 34 33 6

    26

    5

    14

    20

    35

    11 30 9 10 25 8

    29 7 28 27 12

    32

    31 3

    4

    36

    23 17 2

    18

    15 16 19

    24

    21 22 13

    1 34 33 6

    26

    5

    14

    20

    35

    11 30 10

    9

    25 8

    29 7 28 9

    12

    32

    31 3

    4

    36

    23 14 2

    18

    15 16 19

    24

    21 22 13

    1 34 33 6

    26

    5

    20 17 35

    11 30 10

    27

    25 8

    fig. 5

    c

    d e

    b a

  • PTRATE MAGICE

    44

    #include #include int st[20],

    folosit[20],folositi[20],n,i,a[20][20],b[20][20],c[20][20],aux,l,j,k,nrlin,val[20],ii,sti[20];

    char cont; unsigned long d; //afisarea rezultatelor void afis_final() { d++; for(i=1;i

  • PTRATE MAGICE

    45

    c[n][n/2]=aux; //afisarea patratului magic par impar for(i=1;i

  • PTRATE MAGICE

    46

    afis_final(); } void bti(int ii) { int ji; if(ii>n/2) patrint(); else for(ji=1;ji

  • PTRATE MAGICE

    47

    if (i>n/2) afisare(); else for(j=1;j

  • PTRATE MAGICE

    48

    am declarat noul fiier pm4.txt pe directorul C ca fiind un obiect de tipul

    fstream i prin adugarea constantei out este pregatit pentru operaia de

    scriere. fstream f("c:\\pm4.txt",ios::out); funcia de scriere in fiier este f

    in acest fiier numerele care alctuiesc un ptrat vor fi inregistrate ca un ir

    de numere separate cu ,, deci fiecare soluie pe cte un rand

    la sfritul liniei se introduce endl sau \n

    Voi da ca exemplu urmatoarea secvena de program #include #include int st[20],

    folosit[20],folositi[20],n,i,a[20][20],b[20][20],d[100],p,l,j,k,nrlin,val[20],ii,sti[20];

    char cont; unsigned long c; // afisarea rezultatelor fstream f("c:\\pm4.txt",ios::out); void afis_final() { c++;p=0; for(i=1;i

  • PTRATE MAGICE

    49

    d chiar mai multe soluii dect metoda lui La Hire. Sa presupunem ca dorim sa

    construim un ptrat magic cu o bordura simpla, avnd latura n+2, si coninnd in

    interior un ptrat magic cu latura n. vom proceda astfel:

    a) Dispunem irul natural al numerelor de la 1 pana la (n+2)2 pe doua

    rnduri, in aa fel incat termenii complementari sa se afle pe aceleai

    coloane:

    (1) 1 2 3 ..(n+2)2/2

    (2) (n+2)2 (n+2)2-1 (n+2)2-2 .(n+2)2/2+1

    suma a doi termeni complementari este (n+2)2+1

    Construim un ptrat magic de n cu n2 dintre aceste numere, luate astfel:

    n2/2 numere din irul (1), plus numerele lor complementare din irul (2).

    Construirea se face dup una din metodele prezentate mai nainte.

    Calculam suma magica sm a ptratului magic interior, suma magica Sm a

    ptratului magic final si diferena Sm-sm.

    Pentru a obine ptratul magic cutat, cu latura n+2, vom aduga fiecrui

    rnd, fiecrei coloane si ambelor diagonale cate doua numere, a cror suma

    sa fie egala cu diferena Sm-sm, adic doua numere complementare dintre

    cele ramase in irurile (1) si (2). Vom completa deci casutele bordurii

    nscriind pe rnd cate o pereche de numere in doua casute opuse (pornind

    de preferina din colturi).

    Ca exemplu fie un ptrat magic de 6, cu o bordura simpla, care nconjoar

    un ptrat magic de 4.

    Se considera irul

    (1) 1 2 3 4................18

    (2) 36 35 34 33..............19

    Se aleg numerele: 1,2,3,..8 din primul sir si din al doilea

    36,35,34,.29 , acestea fiind complementare conform punctului (a).

    Din aceste numere se constrieste un nou ptrat magic de patru sau se ia

    unul gata fcut care se modific dup cum urmeaz: (fig. 7,a)

  • PTRATE MAGICE

    50

    Se aduga fiecrui numr mai mare dect 8, 20 (fig. 7,b)

    Se nconjoar ptratul magic auxiliar modificat, cu o bordur de csue, in

    care se nscriu numerele nlocuite in ptratul magic auxiliar, cu o bordur de

    csue, in care se nscriu numerele nlocuite in ptratul magic auxiliar iniial,

    precum i celelalte numere care mai lipsesc din irul 136, avnd grija ca suma

    celor doua numere adugate in casutele bordurii pe un rnd, pe o coloana sau pe

    o diagonala sa fie egala cu 37, iar suma numerelor de pe rndurile i coloanele

    noi s fie egala cu 111.(fig. 6,c)

    II.9. Discuia ptratelor magice

    Ptrat magic de 1 nu exista, sau daca se considera ca un numr oarecare,

    el singur, poate fi considerat ca un caz particular al ptratului de n, pentru n = 1

    atunci exista un singur ptrat magic de 1.

    Ptrate de 2 exista , dar nici unul nu poate fi magic, dac cele patru numere

    alctuitoare sunt diferite.

    14 4 1 15

    7 9 12 6

    11

    2

    5 8 10

    16 13 3

    34 4 1 35

    7 29 32 6

    31

    2

    5 8 30

    36 33 3

    19 27 26 12

    13

    22

    34 4

    1

    35

    21 17 9

    7

    29 32 6

    31

    5 8 30

    2 36 33 3

    14

    15

    16 20 28

    23 10 11

    25

    24 18

    c

    a b

    fig. 6

  • PTRATE MAGICE

    51

    Exista un singur ptrat magic de 3, care, rsturnat ( inversat ) si rotit,

    reprezint 8 soluii.

    Ptratul magic de 4 prezint numeroase variante. Acest ptrat a fost

    analizat in mod amnunit in secolele XV XVII intr-un mare numr de studii

    pariale asupra lui. La sfritul secolului al XVII lea a aprut un studiu

    exhaustiv al lui Frenicle de Bessy: Table generale des Quatre (Tabel general al

    ptratelor de patru) tiprit la Luvru, prin grija lui La Hire, in 1693, si retiprit in

    volumul 5 din Memoires de l Academie des Sciences (Memoriile Academiei de

    tiine). In acest studio Frenicle de Bessy da toate soluiile distincte posibile ala

    ptratului de 4, in numr de 880, alctuite toate cu numerele 116. Cele 880

    soluii, supuse rsturnrilor i rotirii, reprezint practic 880 . 2 . 4 = 7040 soluii

    diferite!

    Printre cele 7040 ptrate magice de patru se numra

    si ptratul magic de 4 gravat de Albrecht Durer in alegoria

    sa Melancolia. In acest ptrat magic, numerele 5 si 8

    reprezint numrul de litere al numelui si prenumelui

    autorului (Durer 5, Albrecht 8), iar numerele 15 si 14,

    alturate in rndul de jos, reprezint data lucrrii: 1514.

    O aplicaie a ptratului magic de 4 este urmtoarea

    problema:

    Sa se aeze dup un ptrat figurile (rigi, dame, valei si aii) unui joc de

    carti, in aa fel incat pe fiecare rnd, pe fiecare coloana si pe fiecare diagonala sa

    nu se intalneasca doua carti de aceeai valoare, nici de aceeai culoare (,,culori,

    la cartile de joc, sunt patru: trefla, caro, cupa, pica). Problema se rezolva cu doua

    ptrate auxiliare, identificnd valorile cu termenii progresiei 1..4 si culorile cu

    termenii progresiei 0,4,8,12.

    Ptratele magice cu n>=5 nu au fost analizate separat in mod att de

    minuios ca ptratele de 4, ceea ce este explicabil: dac de la 1 soluie ( respectiv

    8 soluii) la ptratele magice de 3 se ajunge la 880 soluii (respectiv 7040

    16 3 2 13

    5 10 11 8

    9

    4

    6 7 12

    15 14 1

    fig. 7

  • PTRATE MAGICE

    52

    soluii)la ptratele de 4, este uor de imaginat cat de impetuos creste numrul

    soluiilor pentru n>=5 si ct de dezarmant se complica posibilitile, combinaiile,

    i deci i analiza.

    II.10. Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    Acest joc are la baza patratele magice obtinute in urma executiei

    programelor prezentate anterior. Rezultatele sunt depuse in cateva fisiere care

    servesc ca date iniiale ale jocului. Jocul consta in afisarea unor patrate din care

    lipsesc cateva numere, care sunt afisate in partea de sus intr-o ordine oarecare.

    Jucatorul trebuie ca mai intai sa afle suma magica si apoi sa inlocuiasca casutele

    goale cu numerele care satisfac cerintele problemei. Daca este nlocuit numrul

    corect se acord un punctaj pentru stimularea jucatorului.

    II.10.1. Interfaa

    Este vorba despre o forma fixa

    care cuprinde un meniu din care se intra

    in jocul propriu zis prin deschiderea

    meniului ,,Joc . Sub bara de meniuri cu

    ajutorul intrumentelor din caseta toolbox:

    shape, label a fost realizat fundalul

    formei. Pentru partea central s-a folosit

    o imagine introdus cu instrumentul

    Image

    Meniul a fost fcut prin deschiderea editorului de meniuri cu click dreapta

    pe form i alegerea submeniului Menu Editor din meniul contextual.

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    53

    Cu acest editor am stabilit cele doua meniuri principale: Joc si Ajutor care

    la rndul lor conin cteva submeniuri dup cum se

    poate observa in figur.

    Pentru fiecare submeniu am folosit cte un

    form, care constituie fundaia in proiectarea

    interfetei. Un form poate fi particularizat prin

    intermediul ferestrei Properties. Astfel se poate

    stabili :

    Numele la (name) : frmniv1

    Dimensiunile : Height si Width

    culoarea de fundal de la : Backcolor

    asezarea fata de ferastra principala a jocului

    de la : StartUpPozition

    numele din bara de titlu la :Caption

    In mod asemanator au fost create si celelalte forme : frmniv2, frmniv3,

    frmniv4 si frm_ajutor. Pe acestea au fost inserate obiecte ca : butoane de

    comanda( Command button), etichete (Label).

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    54

    Butoane de comanda (Command Button)

    Sunt utilizate pentru declanarea unei aciuni sau

    operaiuni. Pentru definirea unui buton:

    Se plaseaz i se contureaz butonul pe

    form;

    Se definesc proprietile Name si Caption Se stabilete culoarea de fundal, eventual

    Se adaug cod pentru evenimentul Click Pe formurile corespunzatoare celor patru nivele am

    plasat o lista (array) de butoane de comanda astfel : am

    creat primul buton la care am stabilit proprietaile de mai

    sus, apoi folosind copy si paste le-am inserat si pe

    celelalte rspunznd yes la intrebarea dac doresc sa introduc un array. In acest

    fel butoanelor li se ataeaza un index care face ca referirea acestora in program s

    se fac pentru toate innd cont de numrul de ordine. Acest index apare i in

    fereastra Properties pentru fiecare. n frmniv1, frmniv2 i frmniv3 s-au inserat

    doua liste (vectori) de butone :

    prima lista este deasupra i afieaza la proprietatea Caption numerele care

    lipsesc din ptratul de jos,

    Buton Eticheta

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    55

    a doua list este cea care reprezint ptratul i afieaza la Caption soluiile

    sau caracterul spaiu n locul numerelor care lipsesc.

    Cind se produce evenimentul click intr-un buton din prima lista este

    extras valoarea afiata la Caption n variabila val i dac se produce evenimentul

    click ntr-un loc liber din a doua list valoarea va fi introdus aici.

    In formul frmniv4 au fost necesare 3 liste (vectori) de butoane astfel :

    Prima pentru cele doua rnduri cu numerele care trebuie mutate,

    A doua cu butoanele care formeaza bordura n care se vor introduce

    numerele de sus.

    A treia ptratul din mijloc

    Butoanele care formeaz bordura trebuie s fie aezate n aa fel ca

    indecii celor opuse s corespund. Asfel, colul stnga sus cu dreapta jos au

    indecii 0 si 10, 1 de pe latura de sus cu 11 din dreptul lui de pe latura de jos

    ...etc. A fost necesar aceast aranjare pentru c soluia prevede ca in poziiile

    opuse s fie numere complementare.

    Pentru ieirea din nivel, pe fiecare form s-a plasat butonul cu denumirea

    Stop, acesta nchide fereastra de lucru i d comanda in fereastra principal

    frmpm.

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    56

    Etichete ( Label)

    Conin texte (titluri) care se afieaza pe form in poziii bine precizate.

    Textul afiat de o etichet (valoarea proprietatii Caption) se poate modifica pe

    parcursul execuiei aplicaiei, conform cerinelor, dar numai prin codul sursa.

    Pe formurile celor patru nivele am plasat

    dou etichete prima care afieaz textul

    ,,Puncte i cealalt sub ea care arat numarul

    de puncte pe care il realizeaz jucatorul. Pentru

    fiecare eticheta se pot stabili in fereastra

    Properties : numele, mrimea, culoarea..etc.

    Toate aceste elemente ale aplicatiei sunt

    afisate in fereastra Project explorer dupa cum se vede in figura alturat.

    II.10.2. Programele sursa

    Orice form are asociat o fereastr pentru scrierea codului. In aceasta

    fereastr sunt trecute obiectele plasate pe form cu denumirile acestora. Astfel

    pentru fiecare obiect se poate scrie o secvena de program care va determina

    comportamentul acestuia la aciunea utilizatorului. Pentru fiecare obiect sunt

    stabilite anumite evenimente cum ar fi: click, dubluclick, load, dragdrop,...etc.

    Aceste evenimente fac ca programul sa funcioneze interactiv cu utilizatorul.

    Pentru formul frmpm programul cod descrie: la evenimentul click asupra

    submeniurilor se incarca formurile corespunztoare i formul principal este

    dezactivat iar la click asupra submeniului Iesire jocul este descrcat din memorie. Private Sub iesire_Click()Unload Me End End Sub Private Sub nivel1_Click() Load frmniv1 Frmniv1.Show frmpm.Enabled = False End Sub

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    57

    Private Sub nivel2_Click() Load frmniv2 frmniv2.Show frmpm.Enabled = False End Sub Private Sub nivel3_Click() Load frmniv3 frmniv3.Show frmpm.Enabled = False End Sub Private Sub nivel4_Click() Load frmniv4 frmniv4.Show frmpm.Enabled = False End Sub Private Sub reguli_Click() Load frm_ajutor frm_ajutor.Show frmpm.Enabled = False End Sub

    Frmniv1

    In acest program de la inceput sunt declarate variabilele folosite: vectorii a

    si b si r, i, j de tip intreg. La ncarcarea formului n partea Sub Form_Load( ) este deschis fiierul text pm4.txt i unde printr-un procedeu aleator se citete din

    acesta un rnd care este preluat de vectorul a(15). De fapt, acest vector reprezint

    o soluie a patratului de 4 care trebuie introdus in joc. Deasemenea este

    completat irul de butoane de deasupra prin extragerea unor numere din vectorul

    a. Pentru ca din greeal, numerele extrase s nu fie trecute in ptrat se folosete

    vectorul b care este iniializat cu 0, i b(i) se schimb cu 1 atunci cnd a(i) este

    extras. Astfel, ptratul reprezentat de command2(index) primete valorile a(i)

    dac b(i)=0 i dac b(i)=1. Dim a(15), b(15), r, i, j As Integer Dim val, mut As Integer Private Sub cmdstop_Click() Unload Me frmpm.Show frmpm.Enabled = True End Sub La click asupra command(index) val primete Caption.

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    58

    Private Sub Command1_Click(Index As Integer) If val = 0 Then val = Command1(Index).Caption Command1(Index).Caption = "" End If End Sub

    In aceasta seciune la click la command2(index), anume csua goal din

    ptrat, este introdus valoarea, dac s-a pus numrul

    corect punctajul se mrete. La terminarea umplerii

    ptratului juctorul primete un mesaj prin care i se

    comunic modul cum a jucat. Au fost descrise toate

    posibilitile prin instruciunea case select. Private Sub Command2_Click(Index As Integer) If val 0 Then If Command2(Index).Caption = "" Then Command2(Index).Caption = val val = 0 mut = mut + 1 End If If (Command2(Index).Caption = a(Index)) Then punctaj.Caption = punctaj.Caption + 20 End If End If If mut = 4 Then Select Case punctaj Case 0 MsgBox "Ati gresit!. Mai studiati." Case 20 MsgBox "Ati gasit doar o solutie" Case 40 MsgBox "Ati gasit doar doua solutii" Case 80 MsgBox "Ati reusit, FELICITARI !" End Select End If End Sub Private Sub Form_Load() Open "c:\pm4.txt" For Input As #1 mut = 0 val = 0 For i = 0 To 15 b(i) = 0 Next aleator = Int(Rnd * 60) j = 1

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    59

    Do While Not EOF(1) Input #1, a(0), a(1), a(2), a(3), a(4), a(5), a(6), a(7), a(8), a(9), a(10), a(11), a(12), a(13), a(14), a(15) If (j = aleator) Then i = 0 Do While i

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    60

    Dim c(25), d(25) As Integer Dim i, n, timp, scor, val, mut As Integer Private Sub cmdstop_Click() Unload Me frmpm.Show frmpm.Enabled = True End Sub Private Sub cmd1_Click(Index As Integer) If val = 0 Then val = cmd1(Index).Caption cmd1(Index).Caption = "" End If End Sub Private Sub Command2_Click(Index As Integer) If val 0 Then If Command2(Index).Caption = "" Then Command2(Index).Caption = val val = 0 mut = mut + 1 End If If (Command2(Index).Caption = c(Index)) Then punctaj.Caption = punctaj.Caption + 20 End If End If If mut = 6 Then Select Case punctaj Case 0 MsgBox "Ati gresit!. Mai studiati." Case 120 MsgBox "Ati reusit, FELICITARI !" Case Else MsgBox "Ati gasit doar cateva solutii, mai incercati" End Select End If End Sub Sub Form_Load() Open "c:\pm5.txt" For Input As #2 mut = 0 val = 0 For i = 0 To 24 d(i) = 0 Next aleator = Int(Rnd * 100) inreg = 1 Do While Not EOF(2) Input #2, c(0), c(1), c(2), c(3), c(4), c(5), c(6), c(7), c(8), c(9), c(10), c(11), c(12), c(13), c(14), c(15), c(16), c(17), c(18), c(19), c(20), c(21), c(22), c(23), c(24) If (inreg = aleator) Then i = 0 Do While i

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    61

    r = Int(Rnd * 24) If (d(r) = 0) Then j = i d(r) = 1 cmd1(j).Caption = c(r) i = i + 1 End If Loop For i = 0 To 24 If (d(i) = 0) Then Command2(i).Caption = c(i) Else Command2(i).Caption = "" End If Next Exit Do End If inreg = inreg + 1 Loop Close 2 End Sub

    Frmniv3

    Acest program deschide fiierul pm6.txt de unde sunt preluate valorile

    pentru vectorul c(35) n acelai mod ca i la celelalte nivele. Gradul de dificultate

    este mai mare dect la nivelele precedente prin numrul mai mare de numere care

    sunt de nlocuit. Dim c(35), d(35) As Integer Dim i, n, mut, val As Integer

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    62

    Private Sub cmdstop_Click() Unload Me frmpm.Show frmpm.Enabled = True End Sub Private Sub Command1_Click(Index As Integer) If val = 0 Then val = Command1(Index).Caption Command1(Index).Caption = "" End If End Sub Private Sub Command2_Click(Index As Integer) If val 0 Then If Command2(Index).Caption = "" Then Command2(Index).Caption = val val = 0 mut = mut + 1 End If If (Command2(Index).Caption = c(Index)) Then punctaj.Caption = punctaj.Caption + 20 End If End If If mut = 10 Then Select Case punctaj Case 0 MsgBox "Ati gresit!. Mai studiati." Case 20 MsgBox "Ati gasit doar o solutie" Case 40 MsgBox "Ati gasit doar doua solutii" Case 80 MsgBox "Ati reusit, FELICITARI !" End Select End If End Sub Private Sub Form_Load() val = 0 Open "c:\pm6.txt" For Input As #3 mut = 0 For i = 0 To 35 d(i) = 0 Next aleator = Int(Rnd * 50) inreg = 1 Do While Not EOF(3) Input #3, c(0), c(1), c(2), c(3), c(4), c(5), c(6), c(7), c(8), c(9), c(10), c(11), c(12), c(13), c(14), c(15), c(16), c(17), c(18), c(19), c(20), c(21), c(22), c(23), c(24), c(25), c(26), c(27), c(28), c(29), c(30), c(31), c(32), c(33), c(34), c(35) If (inreg = aleator) Then i = 0

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    63

    'copletarea randului de deasupra prin extragerea in mod aleator a unor numere din sir Do While i

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    64

    In seciunea care corespunde punctajului sunt prevzute mai multe

    variante:

    Dac valoarea nu are in poziia opus nimic punctajul se mrete,

    Dac o valoare are complementul deja depus i ea este aezat n alt loc

    dect ar fi trebuit, punctajul nu se acorda,

    Dac la umplerea unei linii sau coloane suma nu este magic, punctajul

    nu se acord.

    La terminarea tuturor mutrilor se afieaza prin MsgBox aprecierea asupra

    modului de joc. Dim a(16), b(19), val, i, j, k, var(19), mut, sum(3), scor(3) As Integer Dim gasit, depasit As Boolean Private Sub cmdstop_Click() Unload Me frmpm.Show frmpm.Enabled = True End Sub Private Sub Command1_Click(Index As Integer) If val = 0 Then val = Command1(Index).Caption k = Index Command1(Index).Caption = "" End If End Sub Private Sub Command2_Click(Index As Integer) If val 0 Then If Command2(Index).Caption = "" Then Command2(Index).Caption = val val = 0 mut = mut + 1 var(Index) = b(k) End If Select Case Index Case Is

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    65

    scor(3) = scor(3) + 1 Case 0 sum(3) = sum(3) + var(Index) scor(3) = scor(3) + 1 Case Else MsgBox "nu efectueaza suma!" End Select For j = 0 To 3 If (sum(j) > 111 Or sum(j) < 111) And (scor(j) = 5) Then depasit = True End If Next For j = 0 To 19 If (b(k) + var(j)) = 37 Then gasit = True If ((j = Index + 10) Or (j = Index - 10)) And (depasit = False) Then punctaj.Caption = punctaj.Caption + 20 End If End If Next If Index > 9 Then j = Index - 10 Else j = Index + 10 End If If gasit = False Then If (Command2(j).Caption = "") And (depasit = False) Then punctaj.Caption = punctaj.Caption + 10 End If Else gasit = False End If End If 'afisare punctaj If mut = 20 Then Select Case punctaj Case 0 MsgBox "Ati gresit!. Mai studiati." Case 400 MsgBox "Ati reusit, FELICITARI !" Case Else MsgBox "Ati aflat doar cateva solutii." End Select End If End Sub Private Sub Form_Load() a(0) = 13: a(1) = 3: a(2) = 2: a(3) = 16: a(4) = 12: a(5) = 6: a(6) = 7: a(7) = 9: a(8) = 8: a(9) = 10: a(10) = 11: a(11) = 5 a(12) = 1: a(13) = 15: a(14) = 14: a(15) = 4: val = 0 j = 0: k = 0:

  • Jocul PTRATE MAGICE, aplicatie in VISUAL BASIC

    66

    gasit = False: depasit = False For i = 0 To 3 sum(i) = 0 scor(i) = 0 Next For i = 0 To 15 If a(i) > 8 Then b(j) = a(i) a(i) = a(i) + 20 j = j + 1 End If Next For j = 8 To 11 b(j) = 17 + (j - 8) Next For j = 12 To 19 b(j) = 37 - b(j - 12) Next For j = 0 To 19 Command1(j).Caption = b(j) Next For i = 0 To 15 Command3(i).Caption = a(i) Next End Sub Frm_ajutor Private Sub cmdrevenire_Click() Unload Me frmpm.Show frmpm.Enabled = True End Sub

    Frm_ajutor

    Pe acest form sunt afiate regulile de joc. Codul corespunztor este doar pentru butonul Revenire in joc.

    Private Sub cmdrevenire_Click() Unload Me frmpm.Show frmpm.Enabled = True End Sub

  • 67

    Concluzii

    Prin aceast lucrare s-a demonstrat inc o dat c descoperirea

    calculatorului este un sprijin substanial i nu poate fi nlocuit n situaii care i-ar

    lua omului poate ani de zile pentru a le gsi rezolvarea. Dei la problema

    ptratelor magice s-au gsit cateva metode de rezolvare chiar de acum cteva sute

    de ani, tot nu li s-a gsit o utilitate practic. Totui aceast tem poate fi predat

    la coal n orele de opional putnd fi un punct de plecare pentru copiii pasionai

    de matematic n cunoaterea i folosirea noiunilor de combinatoric. Jocul

    realizat poate fi folosit ca un ajutor la aceste ore avnd totodat i avantajul

    utilizarii calculatorului n acelai timp. Cum specificul copilriei este jocul, copiii

    sunt ndemnai s-i dezvolte abiliti de calcul mintal, s-i testeze i

    aprofundeze baza teoretic, s-i dezvolte spiritul de observaie. Totodat acest

    joc poate constitui o baza de pregtire pentru concursurile de matematic

    (Cangurul, Cezar Ivnescu etc.) sau a olimpiadelor colare.

  • 68

    Indice alfabetic

    BACHET DE MZIRIAC,Claude-Gaspard (1581-1638).

    Scriitor poliglot (a scris in franceza, latina si italiana) si matematician

    francez A fost admis membru al Academiei Franceze (1634), desi absent.

    CARDANO, Gerolamo (1501-1576) (cunoscut sub numele de CARDAN)

    Matematician, medic si filozof italian

    FRANKLIN, Benjmin (1706-1790

    Om politic, filosof, fizician si matematiciam american

    EULER, Leonhard (1707-1783)

    Matematician si fizician elvetian

    MOSCOPOL (inceputul sec XIV)

    Calugar si filozof bizantin.

    FRMAT, Pierre de (1601-1665)

    Matematician francez.

    LA HIRE, Philipe de (1640-1718)

    Astronom si matematician francez. Spirit enciclopedic. Profesor de

    matematici la Collge de France. In geometrie a fost continuatorul lui Descartes.

    A expus proprietatile diviziunilor armonice si ale relatiilor de involutie. A pus la

    punct teoria polilor si polarelor. A dezvoltata teoria angrenajelor epicicloidale. A

    fost unul din intemeietorii Academiei regale de arhitectura.

    PARACELSUS (1493-1541)

    Alchimist si medic elvetian.

  • 69

    BIBLIOGRAFIE

    BOGDAN PTRU Aplicatii in visual basic

    GHEORGHE PAUN Intre matematica si jocuri

    H.R. RADIAN , T.J. RADIAN Recreatii matematice

    L. DU, N.C. ISTRATE, A. ALEXANDRU, G. GORGHIU Programarea

    calculatoarelor in limbajul C++

    L. FNARU, I. BRAVA VISUAL BASIC Primii pai si urmatorii.

    MARTIN GARDNER Alte amuzamente matematice

    MICROSOFT VISUAL BASIC6.0 Ghidul programatorului.

    R. CHERCIU, C. BLNESCU, D. GRIGORIU, S. PETRESCU, I.

    IOSUPESCU, M. HOMORODEAN Informatica probleme propuse si

    rezolvate.

    RZVAN MUNTEANU Visual basic-curs in format electronic