Sunteți pe pagina 1din 19

Colegiul Naional Carol I

LUCRARE DE ATESTAT
Tema: Problema colorarii hartilor

Profesor coordonator:
Gju Adriana
Mihaela

Elev:
Cercel AndreeaClasa a XII a B

Craiova
2015

Cuprins

1. Introducere
2. Generalitati despre limbajul HTML
3. Cerinte hardware si software
4. Structura si continutul proiectului
5. Bibliografie

Introducere
Enuntul problemei colorarii hartilor este urmatorul :
Fiind dat o hart cu n ri, se cer toate soluiile de colorare a
harii, utiliznd cel mult 4 culori, astfel ncat dou ri cu frontier
comun s fie colorate diferit.
Este demonstrat faptul c sunt suficiente numai 4 culori pentru
ca orice hart sa poat fi colorat.
De exemplu:1 2 3 4 5 ara 1 culoarea
ara 2 culoarea
ara 3 culoarea
ara 4 - culoarea
ara 5 culoarea
ROU VERDE ROU ALBASTRU GALBEN
ROU VERDE ROU ALBASTRU GALBEN

INFORMATICA

Academia Francez definea informatica: tiina


tratrii raionale prin maini automate a informaiei,
considerat ca suport al cunotinelor umane, precum i a
comunicrilor n domeniile tehnic, economic i social.
n sens mai larg, informatica se ocup de organizarea,
memorarea, prelucrarea, transmiterea i redarea
informaiilor ntr-o
form accesibil omului, i de
asemenea, de configurarea unui ansamblu de echipamente
care asigur funciile de mai sus.

Introducerea informaticii n diverse domenii de


activitate, const n aplicarea unitar a metodelor,
tehnicilor, terminologiilor specifice informaticii, este ntrun cuvnt informatizare i rezult ntr-o activitate cu
eficien mai mare.
Informatica s-a nscut odat cu calculatorul; din acel
moment informaia a devenit un concept fundamental
tiinific i tehnologic aplicat unor fenomene, de la gurile
negre din univers la DNA, de la organizarea celulelor la
procesele gndirii umane, de la conducerea ntreprinderilor
la alocarea resurselor globale. Acest concept a restructurat
disciplinele stabilite, a stimulat formarea unor noi subiecte
i domenii de activitate. Trim acum ntr-o societate a
informaiei, un ev al informaiei. Privim modele de
prelucrare a informaiei pentru a ne explica propriile
noastre modele de gndire.
Teorii bazate pe conceptul de informaie i-au permis
acestuia s devin o caracteristic a timpului nostru. n
toat aceast transformare calculatorul a jucat rolul central.
Din 1957 ncoace, calculatorul a nlocuit metodele
tradiionale de calcul i eviden a datelor printr-o nou
industrie de prelucrare a datelor, devenind astfel nucleul
tehnologiei moderne a informaiei.
Nscut odat cu calculatorul electronic, informatica
(Computer science, Informatique, Informatik) a evoluat
ncet pn n anii '60, cnd a nceput s capete form,
reunind subiecte din logica matematic (automate, teoria
demonstraiei, teoria
funciilor recursive), lingvistica
matematic i analiza numeric (algoritmi), adugndu-le
probleme de organizare a informaiilor(structuri de date) i
legtura ntre arhitectura calculatorului i modele de

prelucrare a informaiei. Ea s-a dezvoltat pe msur ce


viteza i puterea de calcul au crescut.
Denumirea de informatic vine de la franuzescul
informatique
(informationinformaie
+
automatiqueautomat).
MOMENTE DE REFERIN

Apariia tranzistorului la 3 iunie 1948 cnd Walter


Brattain, William Shockley i metalurgitii Scaff, Teurer i
Bardeen au fcut prima demonstraie public a primului
tranzistor cu siliciu n 1954, a primului circuit integrat n
1961 (W.Shockley, Gordon Moore, Robert Noyce, James
Buie) i a primului microprocesor INTEL 4004 n iunie
1971, au fost tot attea momente de revoluie tehnologic i
de accelerare pentru informatic.
Un astfel de moment a fost i apariia ingineriei
programrii (software engineering), n anul 1967, ca termen
att de provocator. Limbajele de programare au jucat un rol
extrem de important n dezvoltarea exploziv a
informaticii.
n 1957 John Backus i Irving Ziller de la IBM au
creat limbajul FORTRAN (FORmula TRANslation), n
1959 apar limbajele ALGOL (ALGOrithmic Language) i
COBOL (Common Business Oriented Language), n 1962
APL, n 1964 BASIC (Beginners All Purpose Standard for
Information Coding) creat de prof. John Kemeny i
Thomas Kurz de la Colegiul Dorthmounth, n 1967 PL1, n
1968 PASCAL, n 1972 PROLOG (PROgramming in
LOGic), ADA, LISP (List Programming), fr a mai vorbi
de diverse alte limbaje specializate. Tendina este crearea

unor limbaje artificiale din ce n ce mai apropiate de


limbajul natural.
Aa a devenit calculatorul tot mai prietenos i mai
uor de folosit pentru sarcini tot mai complexe; aceast
cutie minunat ne ajut acum s vedem adevruri pe care
nu le intuisem, s vedem mai bine i mai departe n
necunoscut, s scpm de munca de rutin i s eliberm
mintea pentru a gndi mai profund. El nu se substituie
omului, este nsa deja o unealt indispensabil, este esenial
pentru eliberarea omului de un fel de munc, nsoindu-l
ns, pentru c mintea astfel eliberat se va concentra ctre
nivelul superior n cutarea adevrului.
n faa unor probleme grele dintr-un anumit domeniu,
omul va beneficia prin calculator de toat experiena
precedent n domeniul respectiv, mintea sa avnd o sarcin
dificil: s fac, ajutat de main, acea legtur logic de
care maina nu este capabil singur, deocamdat.

CALCULATORUL NUMERIC.PRINCIPII

n 1946 echipa condus de Eckert i Mauchly a


construit primul calculator electronic din lume, ENIAC
(Electronic Numerical Integrator and Computer),costul su
de atunci fiind de 150.000$.Acesta a fost construit n
special pentru calcule balistice. Numerele au fost primele
informaii prelucrate de calculatoare.
Dispozitivele electronice care intr astzi n

construcia calculatoarelor numerice de astzi au din punct


de vedere electronic dou stri posibile: conduc sau nu
curentul electric; putem nota aceste stri cu 1 i respectiv
0.Este o convenie, pornit ns de la justificri tehnologice.
Starea notat acum cu 0 putea fi notat cu 1 i invers,
cea notat cu 1 putea fi notat cu 0.Din punct de vedere
funcional cele dou notaii sunt la fel de bune. Deci un
astfel de dispozitiv are dou stri echiprobabile posibile
(2) i este similar unui ntreruptor simplu sau unui bec,
care poate fi aprins sau stins. Dac astfel de dispozitive
asigur patru stri (2) dou becuri pot fi amndou
aprinse, amndou stinse, unul aprins i cellalt stins, i
invers trei dispozitive au 8 stri (2), n dispozitive au 2 la
puterea n stri posibile,2.
REPREZENTAREA INFORMAIEI NUMERICE

Calculatorul opereaz cu numere n baza 2, pentru


simplul motiv c, tehnologic, a fost convenabil
materializarea a dou stri. Este comod s realizezi strile
conectat (1), deconectat (0) cu un releu, sau saturat (0),
blocat (1) cu un tranzistor.
O cifr binar se numete bit (b), o grup de 4 bii se
numete nible iar o grup de 8 bii se numete octet sau
byte.
1 byte = 1B = 8 bit
1 kbit = 1 Kb = 2 bit = 1024 bit
1 kbyte = 1 KB = 2 byte = 1024 byte
1 Mbit = 1 Mb = 2 bit = 1048576 bit
1 Mbyte = 1MB = 2 byte = 1048576 byte
1GB = 1024 MB

Un byte este informaia transmis de 8 bii, pentru c

log

2 256 = 8 adic
celor 8 bii le corespund combinaii, iar
un byte.
Calculatorul, opernd numai cu informaie binar,
nseamn c indiferent de semnificaie (numere, caractere
alfa-numerice sau instruciuni), ntreaga informaie din
calculatorul numeric este binar, 0 sau 1.

SCURT ISTORIC AL APARIIEI


CALCULATOARELOR

Dup reprezentarea intern a informaiei calculatoarele


sunt:
- analogice, dac semnalele interne sunt continue;
- numerice, dac semnalele interne sunt discrete;
- hibride, dac sunt ambele feluri de semnale interne.
n ceea ce privete calculatorul numeric, folosirea
mainii a nceput n Orientul mijlociu cu folosirea pietrelor.
Babilonienii au dezvoltat ideea prin inventarea
abacului (dispozitiv de numrare cu bile; China Antic
.e.n.), instrument nc folosit i extrem de eficient n
calcule aritmetice.
n secolele VIII i IX s-a dezvoltat sistemul de
numeraie arbesc, care s-a rspndit i n Europa. Acest
sistem a solicitat dezvoltarea i nelegerea unei teorii
complicate a numerelor.
Pe la 1600 Napier (care a avut contribuii i n
dezvoltarea logaritmilor i aplicaiilor lor practice) a
introdus o serie de beioare care puteau fi folosite pentru
nmulire. Aceasta este posibil s fi fost predecesorul riglei
de calcul.

ntre 1640-1675 au loc realizri ale lui Pascal,


Decartes, Leibniz. Un exemplu de main mai complicat
este Pascalina, inventat de Blaise Pascal.
n 1791, Babbage, matematician englez, a dezvoltat
mpreun cu Ada Byron (fiica lordului Byron) ideile a dou
maini de calculat mecanice.
ntre 1801-1804, englezul Jaquard a construit o main
de esut ce funciona cu ajutorul cartelelor perforate.
Prima, main de diferene era destinat rezolvrii
ecuaiilor polinomiale prin metoda diferenelor.
A doua, maina analitic, era destinat ca main de
calcul de uz general. Dei nepuse n practic, din cauza
limitrilor tehnologice de atunci, aceste proiecte au lansat
concepte nc actuale.
Pe la 1880 Herman Hollerith, funcionar la serviciul
Census din Statele Unite a sugerat folosirea cartelelor
perforate ca suport pentru a memora numere, i un cititor
de cartele care putea tabela rezultatele. El a fcut o firm,
aa numita Tabulating Machine Company (transformat
mai trziu n IBM). Al doilea rzboi mondial a constituit
impulsul realizrii unor maini performante. Sub
conducerea lui Aitken, ntre 1937-1944, la Universitatea
Harward, s-a construit Mark I, o main electromecanic,
cu relee, construit de IBM pentru U.S. Navy.
Mai trziu, Colossus a fost construit de englezi n
scopul decodificrii transmisiilor radio germane.
ABC (Atanasoff-Berry Computer) a fost primul
calculator cu adevrat electronic.
ENIAC, construit de o echip condus de Eckert, la
Universitatea din Pennsylvania, a fost ns primul
calculator electronic adevrat, n sensul c poseda i

memorie, aa c schimbarea programelor nu mai nsemna


recablare, aa cum se ntmpl la ABC. Urmeaz apoi
EDVAC (Electronic Discret Variable Automatic Computer)
construit de aceeai echip ntre 1945-1949.
n 1951 se construiete primul calculator destinat
scopurilor comerciale, UNIVAC.
Calculatoarele numerice pot fi de uz general sau
specializate, n ultimul caz ele echipnd sisteme care
asigur numai o singur aplicaie.
Suntem acum n plin desfurare a generaiei a cincea
de calculatoare. Pe scurt, succesiunea a fost urmtoarea:
- Generaia I (1946-1956) cu relee, logic prin
excelen cablat, dar i
tuburi electronice, limbaje de asamblare.
- Generaia II-a (1957-1963) cu tuburi electronice,
limbaje de nivel nalt (Fortran, Cobol).
- Generaia III-a (1964-1981) cu circuite integrate
pe scar larg LSI (Large Scale Integration),
memorii semiconductoare, limbaje de nivel foarte
nalt (Pascal, Lips).
- Generaia IV-a (1982-1992) circuite integrate pe
scar foarte larg VLSI (Very Large Scale
Integration), limbaje orientate obiect (Lisp,C).
- Generaia a V-a (1992-prezent) circuite integrate
pe scar ultralarg ULSI, programare funcional,
prelucrare simbolic, sisteme expert evoluate,
limbaje concurente, limbaje naturale.
ntr-un anumit sens, istoria calculatoarelor personale
care formeaz acum clasa mainilor cele mai rspndite, a
nceput n 1974, cnd firma Intel a produs microprocesorul
8080, care coninea 4.500 tranzistoare i era capabil s

adreseze 64 Kb de memorie, pe o magistral de 16 bit.


Acest microprocesor a echipat microcalculatorul MITS
Altair care a polarizat de la nceput, din 1975, interesul
public.
n 1978 Intel a produs microprocesorul 8086 a crui
performan era de 10 ori mai mare.
Sistemul de operare era DOS versiunea 1.0 care putea
lucra numai cu discuri magnetice cu o singur fa activ
(160 KB). Versiunea 1.1 a permis folosirea discurilor cu
dou fee active, dublnd astfel capacitatea (320 KB).
n august 1982 a fost introdus placa grafic Hercules
care a permis mrirea rezoluiei grafice. Ca pachet de
programe, LOTUS 123 (spreadsheet), a permis noului IBM
PC cucerirea unei largi audiene n rndul utilizatorilor.
n 1981 IBM a nceput proiectarea primului calculator
personal serios, primul PC n accepiunea modern,
folosind ca procesor 8088, strns nrudit cu 8086 avnd un
display color monocrom CGA. Prin concepia sa modular
i prin structura deschis, noul produs a cucerit curnd
piaa.
n noiembrie 1982, firma Compaq produce primul
calculator portabil compatibil, prima copie (clone) IBM.
Standardul IBM PC devine din ce n ce mai popular iar din
ce n ce mai multe firme produc calculatoare copie.
Firma Phoenix technologies scoate programele BIOS
i SYS care funcioneaz ca i IBM BIOS fr a-l fi copiat.
BIOS nseamn (input and output system) i este nucleul
programelor (software) eseniale pentru tastatura, disc
magnetic i monitor (display).
n martie 1983 IBM introduce calculatorul PC XT cu
memorie mai mult, i cu disc magnetic dur (hard

drive).Apare versiunea DOS 2.0.


n1984 IBM introduce pe pia primul PC portabil. n
august 1984 apare primul calculator IBM PC AT mai
puternic, cu un nou procesor Intel 80826, un nou standard
grafic (EGA) i o nou versiune DOS 3.0 care
administreaz o nou generaie de discuri magnetice
flexibile (1.2 MB).
n1985 firma Microsoft scoate noul mediu grafic
Windows. n acelai an apare DOS 3.2 care poate lucra i
cu dischete de 3,5 inch de capacitate 720KB.DOS poate
adresa acum pn la 32 MB pe un singur disc dur.
n septembrie 1986, Compaq produce un nou
calculator cu procesorul 80386, mai puternic ca PC AT.
n aprilie 1987 apar modelele IBM PC/230, 50 i 60,
versiunea DOS 3.3, standardul video VGA.
1987.Microsoft Windows versiunea 2.0
1990. Microsoft introduce Windows versiunea 3.0,
nc actual. Folosirea programelor este mai productiv
avnd la dispoziie ferestre grafice soft multiple i
posibilitatea de a comuta ntre mai multe sarcini soft active
pe ecran. Dar Windows poate funciona acceptabil, numai
pe maini mai puternice, de exemplu ele coninnd
microprocesorul 386 DX sau 386 SX.
n iunie 1991 apare DOS 5.0, incluznd caracteristici
noi: interfa prietenoas cu utilizatorul, editor inclus,
opiuni unformat/unerase, un interpretor Basic mbuntit.
Au urmat apoi calculatoare din ce n ce mai
performante, echipate cu procesoare 486 n diverse
variante, apoi Pentium etc.
Calculatoare i modem-uri legate prin tehnologia
celular radio/telefon fr fir permit fiecrui calculator s

se conecteze oriunde n lume. Apoi a fost posibil


structurarea Internetului, marea magistral informatic
actual.

Metoda BACKTRACKING
La dispoziia celor care rezolv probleme cu ajutorul
calculatorului exist mai multe metode . Dintre acestea cel
mai des utilizate sunt:
-

metoda Greedy;
metoda Divide et impera;
metoda Branch and Bound;
metoda Backtracking;

Metoda Backtracking se aplic problemelor n care


soluia poate fi reprezentat sub forma unui vector x =
(x1, x2, x3, xk, xn) S, unde S este mulimea
soluiilor problemei i S = S1 x S2 x x Sn, i Si sunt
mulimi finite avnd s elemente si xi si , ()i = 1..n.
Pentru fiecare problem se dau relaii ntre
componentele vectorului x, care sunt numite condiii
interne; soluiile posibile care satisfac condiiile interne se
numesc soluii rezultat. Metoda de generare a tuturor
soluiilor posibile si apoi de determinare a soluiilor rezultat
prin verificarea ndeplinirii condiiilor interne necesit
foarte mult timp.
Metoda backtracking evit aceast generare i este mai
eficient. Elementele vectorului x, primesc pe rnd valori n
ordinea cresctoare a indicilor, x[k] va primi o valoare
numai daca au fost atribuite valori elementelor x1.. x[k-1].
La atribuirea valorii lui x[k] se verifica ndeplinirea unor

condiii de continuare referitoare la x1x[k-1]. Daca


aceste condiii nu sunt ndeplinite, la pasul k, acest lucru
nseamn ca orice valori i-am atribui lui x[k+1], x[k+1], ..
x[n] nu se va ajunge la o soluie rezultat.
Metoda backtracking construiete un vector soluie n
mod progresiv ncepnd cu prima component a vectorului
i mergnd spre ultima cu eventuale reveniri asupra
atribuirilor anterioare.
Metoda se aplica astfel :
1) se alege prima valoare sin S1 si I se atribuie lui x1 ;
2) se presupun generate elementele x1x[k-1], cu valori
din S1..S[k-1]; pentru generarea lui x[k] se alege
primul element din S[k] disponibil si pentru valoarea
aleasa se testeaz ndeplinirea condiiilor de
continuare.
Pot aprea urmtoarele situaii :
a) x[k] ndeplinete condiiile de continuare. Daca sa ajuns la soluia final (k = n) atunci se afieaz
soluia obinut. Daca nu s-a ajuns la soluia
final se trece la generarea elementului urmtor
x [k-1];
b) x[k] nu ndeplinete condiiile de continuare. Se
ncearc urmtoarea valoare disponibila din S[k].
Daca nu se gsete nici o valoare n S[k] care s
ndeplineasc condiiile de continuare, se revine
la elementul x[k-1] i se reia algoritmul pentru o
nou valoare a acestuia. Algoritmul se ncheie
cnd au fost luate in considerare toate elementele
lui S1.

Este o tehnica de programare aplicabila algoritmilor care ofer


mai multe soluii i are ca rezultat obinerea tuturor soluiilor
problemei. Fiecare soluie se memoreaz ntr-o structura de date de tip
stiv implementat cu ajutorul unui vector. Deci fiecare soluie poate fi
pus sub forma unui vector.
ntr-un algoritm backtracking ne intereseaz toate soluiile
posibile. Pentru a obine fiecare soluie final se completeaz stiva
nivel cu nivel trecnd astfel prin nite soluii pariale. Astfel soluiile
finale ct i cele pariale pentru a fi luate n considerare trebuie s
ndeplineasc anumite condiii numite condiii de validare. O soluie
care ndeplinete o astfel de condiie se numete soluie valid.
Toate configuraiile stivei ce reprezint soluii finale sunt alctuite
din elementele aceleiai mulimi bine definite pe care o numim
mulimea soluiilor. Fiecare nou soluie parial se obine prin
completarea soluiei pariale precedente cu nc o nivel pe stiv. La
fiecare nivel se pun valori din mulimea soluiilor care nu au fost
ncercate pn cnd se obine o soluie valid. n acest moment se trece
la nivelul urmtor n stiv pentru a completa mai departe soluia
relund ncercrile pe noul nivel.
La un moment dat pe un anumit nivel nu mai exist nici o valoare
nencercat din mulimea valorilor problemei. n acest caz se face un
pas napoi n stiv la nivelul anterior i se reia cutarea cu valorile
rmase nencercate pe acest nivel anterior.
Respectivul nivel a mai fost vizitat dar l-am abandonat dup ce am pus
o valoare care a generat o soluie valid. Deci este posibil s fi rmas
aici valori nencercate. Dac nici pe acest nivel nu mai avem valori
nencercate mai facem un pas napoi n stiv. Mecanismul revenirilor a
determinat denumirea de metoda backtracking.
Plecnd de la nivelul 1 i repetnd algoritmul pn cnd pe toate
nivelele au fost ncercate toate valorile din mulimea valorilor se obin
soluii finale care se tipresc.

Vom implementa metoda backtracking iterativ folosind o rutin unic


aplicabil oricrei probleme. Rutina va apela proceduri i funcii care
au ntotdeauna acelai nume i parametri i care din punct de vedere al
metodei realizeaz acelai lucru.
Sarcina rezolvatorului este s scrie explicit - pentru fiecare problem procedurile i funciile aplicate pe rutin. Astfel gsirea urmtorului
element netestat de pe un nivel k al stivei St se face cu procedura
succesor (as,St,k)
Odat ales un element testarea condiiilor de validare se face cu
procedura valid (ev,St,k).
Testul dac s-a ajuns sau nu la o soluie final se face cu funcia
soluie (k)
Soluia se tiprete cu procedura tipar.
De asemenea fiecare nivel al stivei trebuie iniializat cu o valoare
aflat naintea tuturor valorilor posibile din mulimea soluiilor.
Aceast afiare se face cu procedura init (k,St).

Rutina Backtracking
K:=1; init (1,St);
while k>0 do
begin
repeat
succesor (as,St,k);
if as then valid (ev,St,k);
until (not as) or (as and ev);

if as then
if solutie (k) then tipar
else begin
k:=k+1;
init(k,St);
end;
else k:=k-1;
end;
end;

Structura si continutul proiectului :


#include<iostream.h>
#include<conio.h>
#include<math.h>
int st[20],n,k;
void init()
{st[k]=0;}
int succesor()
{if (st[k]<4)
{st[k]++;
return 1;
}
else return 0;}
int valid()
{for(int i=1;i<k;i++)
if(st[i]==st[k] && a[i][k]==1) return 0;
return 1;}
int sol()
{return (k==n);}
void tipar()
{for(int i=1;i<=n;i++) cout<<"tara numarul"<<i<<"

culoarea"<<st[i]<<endl;
cout<<endl;
}
void bkt()
{int as;k=1;
init();
while(k>0)
{
do {} while ((as=succesor()) && !valid());
if (as)
if (sol()) tipar();
else {k++;init();}
else k--;
}
}
main()
{cout<<"numarul de tari=";cin>>n;
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++) cin>>a[i][j];
bkt();
}

S-ar putea să vă placă și