Un numar NB scris in baza B are "cifre" cu valori intre 0 si B-1.
Pentru a obtine reprezentarea numarului N10 in baza B, trebuie sa realizam un sir de impartiri repetate la B.
Fie N10=2490 si B=8
2490 impartit la 8 produce catul 311 si restul 2.
311 impartit la 8 produce catul 38 si restul 7
38 impartit la 8 produce catul 4 si restul 6
4 impartit la 8 produce catul 0 si restul 4
Luam resturile in ordine inversa si obtinem NB=4672.
Algoritmul de mai jos urmareste exact acest tip de calcul. Se observa ca pentru constructia lui NB trebuie sa lipim fiecare rest in fata numarului NB.
citeste N10;
NB=0;
p10=1;
cat timp(N10!=0)
{
NB=NB+P10*(N10%B);
P10=P10*10;
N=N/B;
}
scrie NB.
Blog dedicat elevilor de liceu care au nevoie de aprofundarea/fixarea cunostintelor de algoritmica, programare si TIC.
marți, 2 octombrie 2012
L13. Conversia unui numar din baza B in baza 10
Un numar NB scris in baza B are "cifre" cu valori intre 0 si B-1. Problema noastra este sa determinam ce numar N10 ii corespunde lui NB pentru baza 10.
Pentru aceasta sa observam urmatorul exemplu. Un numar in baza 10, N10=2490 poate fi scris si in forma canonica, adica N10=2*10^3+4*10^2+9*10^1+0*10^0.
Fie NB=4672 scris in baza B=8. Pentru a converti NB in baza 10 trebuie sa il scriem in forma canonica.
N10=4*8^3+6*8^2+7*8^1+2*8^0. Dupa calcule se obtine valoarea N10=2490.
Practic trebuie sa calculam o suma de produse a cifrelor din NB cu puteri ale bazei. Vom folosi algoritmul de prelucrare a cifrelor unui numar (NB).
citeste NB, B;
N10=0;
PB=1;
executa{
N10=N10+(NB%10)*PB;
PB=PB*B;
NB=NB/10;
}cat timp (NB!=0);
scrie N10;
Pentru aceasta sa observam urmatorul exemplu. Un numar in baza 10, N10=2490 poate fi scris si in forma canonica, adica N10=2*10^3+4*10^2+9*10^1+0*10^0.
Fie NB=4672 scris in baza B=8. Pentru a converti NB in baza 10 trebuie sa il scriem in forma canonica.
N10=4*8^3+6*8^2+7*8^1+2*8^0. Dupa calcule se obtine valoarea N10=2490.
Practic trebuie sa calculam o suma de produse a cifrelor din NB cu puteri ale bazei. Vom folosi algoritmul de prelucrare a cifrelor unui numar (NB).
citeste NB, B;
N10=0;
PB=1;
executa{
N10=N10+(NB%10)*PB;
PB=PB*B;
NB=NB/10;
}cat timp (NB!=0);
scrie N10;
L12. Sirul lui Fibonacci
Sirul lui Fibonacci este 1, 1, 2, 3, 5, 8, 13, 21, 34, .... si are legatura cu celebrul numar de aur.
Se observa ca sirul incepe cu valorile 1 si 1 , dupa care, fiecare noua valoare se obtine prin adunarea ultimelor doua valori:
Pentru noi problema este de a determina al N-lea termen din sir.
Daca N=1 sau N=2, raspunsul este simplu, 1. In restul cazurilor trebuie ca avand mereu ultimile valori A si B, sa calculam noua valoare C=A+B.
citeste N;
A=1;B=1;
daca (N<=2) atunci scrie 1;
altfel {pentru i=3,N executa
{//calculam noua valoare
C=A+B;
//pregatim noua pereche
A=B;B=C}
scrie B;}
Se observa ca sirul incepe cu valorile 1 si 1 , dupa care, fiecare noua valoare se obtine prin adunarea ultimelor doua valori:
- F(1)=1
- F(2)=1
- F(n)=F(n-1)+F(n-2)
Pentru noi problema este de a determina al N-lea termen din sir.
Daca N=1 sau N=2, raspunsul este simplu, 1. In restul cazurilor trebuie ca avand mereu ultimile valori A si B, sa calculam noua valoare C=A+B.
citeste N;
A=1;B=1;
daca (N<=2) atunci scrie 1;
altfel {pentru i=3,N executa
{//calculam noua valoare
C=A+B;
//pregatim noua pereche
A=B;B=C}
scrie B;}
vineri, 28 septembrie 2012
L11. Cmmdc. Cmmmc
C.m.m.d.c. este acronimul (prima litera de la fiecare cuvant) de la "cel mai mare divizor comun" si se aplica pentru doua numere naturale.
Problema. Fie doua numere naturale A si B. Sa se determine cel mai mare divizor comun a lui A si B.
Sa citim iar. Practic trebuie sa determin un numar natural care sa fie divizor atat pentru A cat si pentru B. Daca sunt mai multe numere in aceasta situatie, atunci il aleg pe cel mai mare. Ceea ce ma duce cu gandul la
citeste A, B;
cmmdc=0;
pentru D=1 pana la A executa
daca (A%D==0 si B%D==0 ) atunci cmmdc=D;
scrie cmmdc;
Practic, cmmdc-ul va fi cel mult unul dintre numere. As putea sa fiu prevazator si sa aleg ca limita superioara pe cel mai mic dintre A si B. Si conditia de numitor comun se poate rescrie A%D +B%D==0.
citeste A,B
min=A; daca (min>B) atunci min=B;
pentru D=1 pana la min executa
daca (A%D +B%D==0) atunci cmmdc=D;
scrie cmmdc;
Problema nu e noua, Euclid (cca 325 - 265 î.Hr.!!!!!) s-a gandit si el la acelasi lucru si a gasit o solutie. Daca D este divizorul comun a lui A si B, atunci estista A2 si B2 asa incat:
Practic, in "lenea" lui de a calcula cmmdc(A,B), Euclid propune mereu o pereche mai mica (A-B, B) daca A>B sau (A, B-A) daca B>A. Deci, cmmdc(A, B) este
Se observa ca in primele doua cazuri trebuie sa reluam algoritmul, ceea ce ne duce cu gandul la urmatoarea secventa:
citeste A,B
cat timp (A!=B) executa
daca (A>B) atunci A=A-B;
altfel B=B-A;
scrie A;
Deci varianta 3 e de acum 2000 de ani! Intre timp, s-a mai facut o varianta. Daca A=23456 si B=89 ar trebui sa se efectueze o multime de scaderi a lui B din A. Scaderi repetate, pana nu se mai poate scadea pe B din A! Asta este o impartire si ce ramane in A este restul. In consecinta, pe cel mai mare il vom transforma in restul impartirii. Cand ne oprim? Ne vom opri cand A sau B vor fi nule, ceea ce inseamna ca cealalta valoare, nenula, va fi CMMDC.
citeste A,B;
cat timp (A*B!=0) executa //daca nici unul nu e nul....
daca (A>B) atunci A=A%B;
altfel B=B%A;
scrie A+B; //afisez valoarea nenula
Varianta 5.
Desi varianta 4 e o solutie respectabila, inca nu e de ajuns. Practic, la fiecare iteratie se executa 2 teste - cel din CAT TIMP si cel din DACA. Varianta urmatoare foloseste aceeasi idee de mai sus dar elimina unul din teste.
citeste A,B;
cat timp (B!=0) executa
{R=A%B; A=B; B=R;}
scrie B;
Analiza variantelor
Evident, ultima varianta este cea mai buna. Am explicat deja ratiunile prin care s-a trecut de la o varianta la alta. In vederea examenului de bacalaureat va trebuie toate variantele, indeosebi ultima pentru momentul cand va trebui sa programati.
Pentru calculul matematic a cmmdc pentru doua numere A si B, se realizeaza descompunerea in factori primi si apoi se considera termenii comuni, la puterea cea mai mica.
Pentru calculul matematic a cmmmc pentru doua numere A si B, se realizeaza descompunerea in factori primi si apoi se considera termenii comuni si necomuni, la puterea cea mai mare.
Practic daca as scrie produsul A*B ca inmultire intre descompunerile lor, as observa ca toti termenii existenti sunt fie parte a CMMDC, fie parte a CMMMC. De aici apare si relatia A*B=CMMDC(A,B)*CMMMC(A,B). Practic ne vom folosi de CMMMC(A,B)=A*B/CMMDC(A,B).
citeste A,B
A2=A; B2=B; //salvez separat datele initiale
//calculez CMMDC
cat timp (B!=0) {R=A%B; A=B; B=R;}
scrie "CMMDC este ", A2*B2/A.
Problema. Fie doua numere naturale A si B. Sa se determine cel mai mare divizor comun a lui A si B.
Sa citim iar. Practic trebuie sa determin un numar natural care sa fie divizor atat pentru A cat si pentru B. Daca sunt mai multe numere in aceasta situatie, atunci il aleg pe cel mai mare. Ceea ce ma duce cu gandul la
Varianta 1.
citeste A, B;
cmmdc=0;
pentru D=1 pana la A executa
daca (A%D==0 si B%D==0 ) atunci cmmdc=D;
scrie cmmdc;
Practic, cmmdc-ul va fi cel mult unul dintre numere. As putea sa fiu prevazator si sa aleg ca limita superioara pe cel mai mic dintre A si B. Si conditia de numitor comun se poate rescrie A%D +B%D==0.
Varianta 2.
citeste A,B
min=A; daca (min>B) atunci min=B;
pentru D=1 pana la min executa
daca (A%D +B%D==0) atunci cmmdc=D;
scrie cmmdc;
Varianta 3.
Problema nu e noua, Euclid (cca 325 - 265 î.Hr.!!!!!) s-a gandit si el la acelasi lucru si a gasit o solutie. Daca D este divizorul comun a lui A si B, atunci estista A2 si B2 asa incat:
- A=D*A2
- B=D*B2 si deduce ca si diferenta acestor numere are acelasi divizor comun
- A-B=D*(A2-B2)
Practic, in "lenea" lui de a calcula cmmdc(A,B), Euclid propune mereu o pereche mai mica (A-B, B) daca A>B sau (A, B-A) daca B>A. Deci, cmmdc(A, B) este
- (A-B, B) daca A>B
- (A, B-A) daca B>A
- A daca A==B
Se observa ca in primele doua cazuri trebuie sa reluam algoritmul, ceea ce ne duce cu gandul la urmatoarea secventa:
citeste A,B
cat timp (A!=B) executa
daca (A>B) atunci A=A-B;
altfel B=B-A;
scrie A;
Varianta 4.
Deci varianta 3 e de acum 2000 de ani! Intre timp, s-a mai facut o varianta. Daca A=23456 si B=89 ar trebui sa se efectueze o multime de scaderi a lui B din A. Scaderi repetate, pana nu se mai poate scadea pe B din A! Asta este o impartire si ce ramane in A este restul. In consecinta, pe cel mai mare il vom transforma in restul impartirii. Cand ne oprim? Ne vom opri cand A sau B vor fi nule, ceea ce inseamna ca cealalta valoare, nenula, va fi CMMDC.
citeste A,B;
cat timp (A*B!=0) executa //daca nici unul nu e nul....
daca (A>B) atunci A=A%B;
altfel B=B%A;
scrie A+B; //afisez valoarea nenula
Varianta 5.
Desi varianta 4 e o solutie respectabila, inca nu e de ajuns. Practic, la fiecare iteratie se executa 2 teste - cel din CAT TIMP si cel din DACA. Varianta urmatoare foloseste aceeasi idee de mai sus dar elimina unul din teste.
citeste A,B;
cat timp (B!=0) executa
{R=A%B; A=B; B=R;}
scrie B;
Analiza variantelor
Evident, ultima varianta este cea mai buna. Am explicat deja ratiunile prin care s-a trecut de la o varianta la alta. In vederea examenului de bacalaureat va trebuie toate variantele, indeosebi ultima pentru momentul cand va trebui sa programati.
Calculul CMMMC
Pentru calculul matematic a cmmdc pentru doua numere A si B, se realizeaza descompunerea in factori primi si apoi se considera termenii comuni, la puterea cea mai mica.
Pentru calculul matematic a cmmmc pentru doua numere A si B, se realizeaza descompunerea in factori primi si apoi se considera termenii comuni si necomuni, la puterea cea mai mare.
Practic daca as scrie produsul A*B ca inmultire intre descompunerile lor, as observa ca toti termenii existenti sunt fie parte a CMMDC, fie parte a CMMMC. De aici apare si relatia A*B=CMMDC(A,B)*CMMMC(A,B). Practic ne vom folosi de CMMMC(A,B)=A*B/CMMDC(A,B).
citeste A,B
A2=A; B2=B; //salvez separat datele initiale
//calculez CMMDC
cat timp (B!=0) {R=A%B; A=B; B=R;}
scrie "CMMDC este ", A2*B2/A.
L7.2. Care instructiune repetitiva este mai buna?
Desi sunteti tentati sa alegeti trebuie sa stit ca ambele instructiuni au aceeasi capacitate. Toata problema este sa verificati in algoritmul dumneavoastra daca trebuie sau nu efectuat un test inainte de executarea instructiunii/instructiunilor de repetat.
Simularea instructiunii CAT TIMP EXECUTA cu EXECUTA CAT TIMP. Instructiunea CAT TIMP EXECUTA intai testeaza si apoi executa; daca comparam secventele de executie observam ca la CAT TIMP EXECUTA intai apare un test/conditie. si apoi este identica cu EXECUTA CAT TIMP; nu ramane decat sa folosim o instructiune de test pentru aceasta conditie;
Observati ca pentru transformarea unei instructiuni cat timp in una executa cat timp, nu trebuie dacat sa identificati conditia si secventa care se repeta; apoi copiati corespunzator in sablon.
Simularea instructiunii EXECUTA CAT TIMP cu CAT TIMP EXECUTA .
Simularea instructiunii REPETA PANA CAND cu EXECUTA CAT TIMP.
Simularea instructiunii PENTRU cu CAT TIMP EXECUTA .
Simularea instructiunii CAT TIMP EXECUTA cu EXECUTA CAT TIMP. Instructiunea CAT TIMP EXECUTA intai testeaza si apoi executa; daca comparam secventele de executie observam ca la CAT TIMP EXECUTA intai apare un test/conditie. si apoi este identica cu EXECUTA CAT TIMP; nu ramane decat sa folosim o instructiune de test pentru aceasta conditie;
| cat timp (exp_logica) executa instructiune; | daca (exp_logica) atunciexecuta instructiune cat timp (exp_logica) |
Observati ca pentru transformarea unei instructiuni cat timp in una executa cat timp, nu trebuie dacat sa identificati conditia si secventa care se repeta; apoi copiati corespunzator in sablon.
Simularea instructiunii EXECUTA CAT TIMP cu CAT TIMP EXECUTA .
| executa instructiune cat timp (exp_logica); | instructiune;cat timp (exp_logica) executa instructiune; |
Simularea instructiunii REPETA PANA CAND cu EXECUTA CAT TIMP.
| repeta instructiune pana cand (exp_logica); | executa instructiune cat timp!(exp_logica) |
Simularea instructiunii PENTRU cu CAT TIMP EXECUTA .
| pentru i<-A pana la B cu pasul C executa instructiune. | i <- A;cat timp (i<=B) executa {instructiune; i<-i+C}; |
Labels:
C2_1. Algoritmica,
cat timp,
do while,
executa cat timp,
for,
instructiuni repetitive,
pentru,
transformare instructiuni repetitive,
while
marți, 25 septembrie 2012
L4. Animatii si legaturi in Powerpoint
Adaugarea de animatii
Unui obiect selectat i se poate atasa o animatie (la aparitia in slide, cand sunteti cu mouse-ul deasupra lui sau cand obiectul trebuie sa dispara din slide):
- selectati obiectul
- dupa selectarea optiunii animatie particularizata va aparea o coloana noua in dreapta
- Animatie particularizata (…) – ADAUGARE EFECT – INTRARE (sau ACCENT sau IESIRE) - alegeti din animatiile propuse sau MAI MULTE EFECTE.
Functie de logica prezentarii, ordinea aparitiei in ecran a obiectelor animate se poate schimba (in coloana din dreapta) - folositi sagetile din dreptul optiunii REORDONARE.
O animatie se poate personaliza:
- selectati obiectul animat din coloana din dreapta
- executati click dreapta
- meniul contextual permite:
- stabilirea momentului cand va incepe animatia: la click, dupa aparitia obiectulului anterior sau odata cu el
- optiuni adaugate efectului: cu sunet sau nu, cuvant cu cuvant sau pe litere etc
Hiperlinkuri
De la orice obiect (text sau imagine) se poate crea un link (legatura) cu click DRP , Hyperlink (CTRL+K).
Fereastra urmatoare are , in zona LINK TO, cateva optiuni interesante:
- Link to Existing file or web page:
- Existing file: inseamna ca, in timpul prezentarii, poti efectua click pentru a vedea continutul unui alt fisier; de exemplu un film sau o fisier PDF (de dorit ar fi ca fisierul referit sa fie in acelasi folder cu prezentarea; cand luati PPT-ul , luati si fisierele asociate
)
- web page: se scrie o adresa web cu tot cu “http://”
- Existing file: inseamna ca, in timpul prezentarii, poti efectua click pentru a vedea continutul unui alt fisier; de exemplu un film sau o fisier PDF (de dorit ar fi ca fisierul referit sa fie in acelasi folder cu prezentarea; cand luati PPT-ul , luati si fisierele asociate
- Link to email adress: de obicei se foloseste in ultimul slide pentru a putea fi contactat ulterior
- Link to Create new document. Nu folosesc. nu recomand.
- Link to Place in this document: face saltul la o pagina anume; aceasta facilitate va permite crearea unui cuprins cu hyperlinkuri la inceputul prezentarii, ceea ce va da o mobilitate deosebita in parcurgerea materialului; la sfarsitul fiecarui capitol (sau pe fiecare slide) se poate insera un ACTION BUTTON (2007: Insert, Shapes , Action button; 2003: Slideshow, Action button); in felul acesta publicul va avea mereu o privire de ansamblu asupra prezentarii dvs.
L3. Fundalul unui slide. Antetul si subsolul
Fundalul unui slide
Pentru a colora fundalul slide-ului efectuam click dreapta pe suprafata alba (unde nu este nici un obiect) si alegem optiunea FORMAT BACKGROUND.
Putem colora
- cu o singura culoare (SOLID COLOR), ajustand transparenta ei
- in gradient (cu trecere de la o culoare la alta); se poate modifica directia in care se modifica culoarea; exista si variante predefinite
- cu o imagine (FILL - INSERT FROM - FILE ) - poate fi imaginea institutiei dvs , de exemplu
- cu o textura : imagini predefinite - imita lemnul, metalul , apa, nisipul, panza de sac, ...
Se pot aplica diferite filtre de imagine (optiunea PICTURE).
Apasarea butonul CLOSE determina fixarea fundalului slide-ului curent cu modificarile facute. Petru a aplica aceleasi modificari in toate slide-urile, selectati butonul APPLY TO ALL.
Antetul si subsolul unui slide
Ca si la documentele Word, antetul si subsolul unui slide sunt folosite pentru a adauga date cum ar fi
- numarul slide-ului
- data curenta
- un text oarecare - date despre proprietarul prezentarii.
Pentru aceasta accesati meniul INSERT - TEXT - HEADERS AND FOOTERS. In fisa SLIDE puteti alege care din datele de mai sus le doriti completate.
sâmbătă, 5 mai 2012
L17. Inserarea scripturilor
Script inseamna un program realizat intr-unul din limbajele suportate de web (de obicei JavaScript).
Aceste scripturi se refera la aspecte variate ale unui site:
Scripturile pot fi gasite cu o simpla cautare pe G
Aceste scripturi se refera la aspecte variate ale unui site:
- realizarea unui slideshow pentru albumul foto
- afisarea datei si a orei
- meniuri (glisante, ascunse, ...)
- contorizarea numarului de vizitatori
Scripturile pot fi gasite cu o simpla cautare pe G
miercuri, 2 mai 2012
L15. Crearea unui site din FRAME-uri
Aceasta metoda presupune impartirea intregului ecran in cadre/ferestre, fiecare din ele avand atasat un fisier
Pentru aceasta vom folosi tagul <FRAMESET> pentru a descrie orice mod de impartire a ecranului iar pentru descrierea unui frame folosim tagul FRAME (identic cu IFRAME).
<FRAMESET [ ROWS="structura-linii"] [ COLS="structura-coloane"] [ FRAMEBORDER=1|0] [ FRAMESPACING=interspatiu]> continut-cadre </FRAMESET>
unde :
<FRAME [ SRC="adresa-URL"] [ NAME="nume-cadru"] [ NORESIZE] [ SCROLLING="yes"|"no"|"auto"] [ MARGINWIDTH="lãtime"] [ MARGINHEIGHT="&înãltime"] [ ALIGN=top|middle|bottom|left|right] [ FRAMEBORDER=0|1]>
cu acelesi expicatii de la IFRAME
Pentru modelul nostru, fisierul principal index.html va contine descrierea:
A ramas nelamurita problema linkurilor din meniu. Fiecare link din fisierul meniu.html trebuie sa se deschida in cadrul/fereastra continut. Sa ne reamintim tagul <A> , pentru linkuri:
<A HREF="link-url" [ REL="tip-rel"] [ REV="tip-rev"] [ TITLE="title-name"] [ TARGET=window|_blank|_parent|_self|_top]> text_legaturã </A>
Observatii:
Practic, trebuie sa stabilim ca valoare a TARGET, cadrul continuturi. De exemplu linkul corespunzator butonului HOME ar putea sa arate asa (restul fiind analoge):
<A HREF="home.html" TARGET ="continut"> <img src="buton.jpg"> </A>
- pentru cadrul cu banner, banner.html
- pentru cadrul cu meniul, meniu.html
- pentru cadrul cu continutul, continut.html
Pentru aceasta vom folosi tagul <FRAMESET> pentru a descrie orice mod de impartire a ecranului iar pentru descrierea unui frame folosim tagul FRAME (identic cu IFRAME).
Tagul FRAMESET
<FRAMESET [ ROWS="structura-linii"] [ COLS="structura-coloane"] [ FRAMEBORDER=1|0] [ FRAMESPACING=interspatiu]> continut-cadre </FRAMESET>
unde :
- se foloseste fie ROWS (daca in principal e vorba de mai multe linii), fie COLS (daca in principal e vorba de mai multe coloane)
- structura liniilor/coloanelor se da in procente si se poate folosi caracterul * cu semnificatia , restul (ce a mai ramas)...
- FRAMEBORDER specifica daca frame-urile se separa cu linie
- FRAMESPACING = distanta intre cadre
- continut -cadre = alte taguri FRAMESET sau FRAME
Tagul FRAME
<FRAME [ SRC="adresa-URL"] [ NAME="nume-cadru"] [ NORESIZE] [ SCROLLING="yes"|"no"|"auto"] [ MARGINWIDTH="lãtime"] [ MARGINHEIGHT="&înãltime"] [ ALIGN=top|middle|bottom|left|right] [ FRAMEBORDER=0|1]>
cu acelesi expicatii de la IFRAME
Pentru modelul nostru, fisierul principal index.html va contine descrierea:
- <FRAMESET ROWS=" 20%,*">
- <FRAME SRC= "banner.html" name="bannner">
- <FRAMESET COLS="25%, * " >
- <FRAME SRC= "meniu.html" name="meniu">
- <FRAME SRC= "continut.html" name="continut">
- </FRAMESET>
- </FRAMESET>
A ramas nelamurita problema linkurilor din meniu. Fiecare link din fisierul meniu.html trebuie sa se deschida in cadrul/fereastra continut. Sa ne reamintim tagul <A> , pentru linkuri:
<A HREF="link-url" [ REL="tip-rel"] [ REV="tip-rev"] [ TITLE="title-name"] [ TARGET=window|_blank|_parent|_self|_top]> text_legaturã </A>
Observatii:
- HREF= hyper-referinta, reprezinta adresa paginii care se va deschide
- TARGET= puteti specifica unde se va deschide noua pagina
- window = indica fereastra in care se afiseaza; daca nu exista, va fi creata o fereastra cu acest nume
- _blank=pagina se deschide intr-o fereastra noua
- _parent= pagina se deschide in fereastra anterioara
- _self= pagina se deschide in aceeasi fereastra ca si documentul curent
- _top= pagina se deschide in fereastra initiala
Practic, trebuie sa stabilim ca valoare a TARGET, cadrul continuturi. De exemplu linkul corespunzator butonului HOME ar putea sa arate asa (restul fiind analoge):
<A HREF="home.html" TARGET ="continut"> <img src="buton.jpg"> </A>
L14. Introducerea unui IFRAME
Notiunea de FRAME (cadru) presupune stabilirea unei ferestre/cadru a carei contiut sa fie dat de un anumit fisier. ( 1 cadru are atasat un fisier).
In celula de CONTINUT al tabelului din LAYOUT vom declara un FRAME ce va avea atasat fisierul home.html cu continutul corespunzator butonului HOME.
Nu ramane decat sa putem stabili ca butoanele noastre trebuie sa-si dechida paginile in acest frame.
<IFRAME [ SRC="adresa-URL"] [ NAME="nume-cadru"] [ SCROLLING="yes"|"no"] [ MARGINWIDTH="lãatime"] [ MARGINHEIGHT="înãltime"] [ ALIGN=top|middle|bottom|left|right] [ FRAMEBORDER=0|1]>
unde:
Ideal ar fi sa desenati intai (in Photoshop) "fatza" unui site (cu butoane) si apoi (cu defunctul Macromedia Firewoks sau aplicatia similara din Adobe) astfel incat:
In celula de CONTINUT al tabelului din LAYOUT vom declara un FRAME ce va avea atasat fisierul home.html cu continutul corespunzator butonului HOME.
Nu ramane decat sa putem stabili ca butoanele noastre trebuie sa-si dechida paginile in acest frame.
Crearea unui IFRAME
<IFRAME [ SRC="adresa-URL"] [ NAME="nume-cadru"] [ SCROLLING="yes"|"no"] [ MARGINWIDTH="lãatime"] [ MARGINHEIGHT="înãltime"] [ ALIGN=top|middle|bottom|left|right] [ FRAMEBORDER=0|1]>
unde:
- SRC = calea pana la fisierul atasat
- NAME = numele ferestrei/cadrului
- SCROLLING = permite derularea ferestrei daca datele introduse ocupa mai mult loc decat cel rezervat
Ideal ar fi sa desenati intai (in Photoshop) "fatza" unui site (cu butoane) si apoi (cu defunctul Macromedia Firewoks sau aplicatia similara din Adobe) astfel incat:
- sa puteti elimina spatiul asociat "continutului" si sa inserati acolo IFRAME-ul
- sa decupati butoanele, stabilind astfel unde sunt linkurile, cu TARGET spre FRAME-ul "continut".
L13. Crearea unui mini-site folosind tehnica layout
LECTIA 13!!!!!
Ideea acestei tenhnici este crearea unui model pe care sa il pot multiplica.
Dezavantaj. Daca dotiti modificarea modelului (layout-ului), trebuie modificate corespunzator toate paginile create.
Ideea acestei tenhnici este crearea unui model pe care sa il pot multiplica.
- deseneaza pe caiet modelul paginii dorite (sugerez primul rand = banner, randul 2 coloana pt meniu si coloana pentru continut)
- creez si inserez bannerul
- creez si inserez butoanele (HOME, LINKS, PHOTOS)
- Fac legaturile fiecarui buton catre paginile (inca ne-existente) index.html, links.html, photos.html.
- Salvez pagina ca layout.html
- Salvez pagina ca index.html, links.html, photos.html.
- Incercati index.html
- Nu ramane decat sa modificati corespunzator partea de continut a fiecarei pagini
- in HOME ceva despre voi
- in PHOTOS o imagine mica, link catre aceeasi imagine in marime naturala
- in LINKS, un link la un mail.
Dezavantaj. Daca dotiti modificarea modelului (layout-ului), trebuie modificate corespunzator toate paginile create.
L12. Tabele in HTML
Resursa: http://profs.info.uaic.ro/~val/htmlearn.html
Forma generala a unui tabel in html este
Se observa ca:
Exemplu:
Marcaje generale pentru tabele
<TABLE [ BORDER[=nn]] [ FRAME=void|above|below|hsides|lhs|rhs|vsides|box] [ RULES=none|groups|rows|cols|all] [ WIDTH=ooo|pn%] [ HEIGHT=mmm|pm%] [ BGCOLOR="#rrggbb"|culoare] [ BORDERCOLOR="#rrggbb"|culoare] [ BORDERCOLORLIGHT="#rrggbb"|culoare] [ BORDERCOLORDARK="#rrggbb"|culoare] [ BACKGROUND="URL-imagine"] [ CELLSPACING=qqq] [ CELLPADDING=rrr] [ ALIGN=left|center|right] [ VALIGN=top|bottom]>
continut-tabel
</TABLE>
este tagul de definire a unui tabel.
BORDER defineste prezenta chenarului. Dacã atributul lipseste sau are valoarea 0 (BORDER=0), atunci tabelul nu va avea chenar. Prin nn pozitiv se indicã, în pixeli, mãrimea umbrei pentru o reprezentare spatialã.
FRAME specificã afisarea bordurilor exterioare. Atributul BORDER trebuie sã fie prezent.Aceasta este o extensie Microsoft.
RULES controleazã afisarea liniilor interioare în cazul când se utilizeazã TBODY, TFOOT si THEAD (vezi în continuare). Atributul BORDER trebuie sãa fie prezent. Aceasta este o extensie Microsoft.
WIDTH comandã lãtimea tabelului: în pixeli, ooo, sau procentual, pn%, din lãtimea ecranului;
HEIGHT, similar cu WIDTH, pentru înãltimea tabelului;
BGCOLOR este culoarea pentru fundalul tabelului. Culoarea de fundal este acoperitã, evident, de culoarea declaratã ca fundal pentru linii (vezi TR), care este acoperitã de culoarea declaratã ca fundal pentru celule (vezi TH si TD). Aceasta este o extensie Netscape si Microsoft;
BORDERCOLOR este culoarea bordurii tabelului. Aceasta este o extensie Microsoft;
BORDERCOLORLIGHT este culoarea liniei luminoase dintr-o bordurã umbritã. Aceasta este o extensie Microsoft;
BORDERCOLORDARK este culoarea umbrei dintr-o bordurã umbritã.Aceasta este o extensie Microsoft;
BACKGROUND specificã adresa URL a fisierului imagine utilizat drept fundal pentru fiecare celulã a tabelului. Aceasta este o extensie Microsoft;
CELLSPACING aratã spatierea, în pixeli, dintre celule;
CELLPADDING aratã spatierea, în pixeli, dintre marginile celulei si continutul ei:
ALIGN comandã alinierea tabelului între marginile laterale ale ferestrei;
VALIGN aratã alinierea verticalã a tabelului.Aceasta este o extensie Microsoft.
continut-tabel defineste celulele tabelului, antetul, captarea si continutul celulelor tabelului.
Forma generala a unui tabel in html este
<TABLE>
<CAPTION>...</CAPTION> - titlul tabelului
<TR><TH></TH> ... </TR> - linie antet
<TR><TD></TD> ... </TR> - linie curentã
...
<TR><TD></TD> ... </TR> - linie curentã
</TABLE>
Se observa ca:
- <TABLE> este tagul specific tabelului
- <CAPTION> este tagul prin care stabilim titlul tabelului
- tabelul este format din mai multe linii (<TR> table row), fiecare din ele fiind impartit in mai multe celule (<TD>). Daca vorbim de prima linie, atunci ne referim la antetul tabelului si folosim <TH> (table header)
Exemplu:
<TABLE >
<TR><TH>Nr. crt</TH><TH>Numele si prenumele</TH></TR>
<TR><TD>1.</TD><TD>Popescu Ionel</TD></TR>
<TR><TD>2.</TD><TD>Ionescu Emil</TD></TR>
</TABLE>
| Nr. crt | Numele si prenumele |
|---|---|
| 1. | Popescu Ionel |
| 2. | Ionescu Emil |
Marcaje generale pentru tabele
<TABLE [ BORDER[=nn]] [ FRAME=void|above|below|hsides|lhs|rhs|vsides|box] [ RULES=none|groups|rows|cols|all] [ WIDTH=ooo|pn%] [ HEIGHT=mmm|pm%] [ BGCOLOR="#rrggbb"|culoare] [ BORDERCOLOR="#rrggbb"|culoare] [ BORDERCOLORLIGHT="#rrggbb"|culoare] [ BORDERCOLORDARK="#rrggbb"|culoare] [ BACKGROUND="URL-imagine"] [ CELLSPACING=qqq] [ CELLPADDING=rrr] [ ALIGN=left|center|right] [ VALIGN=top|bottom]>
continut-tabel
</TABLE>
este tagul de definire a unui tabel.
BORDER defineste prezenta chenarului. Dacã atributul lipseste sau are valoarea 0 (BORDER=0), atunci tabelul nu va avea chenar. Prin nn pozitiv se indicã, în pixeli, mãrimea umbrei pentru o reprezentare spatialã.
FRAME specificã afisarea bordurilor exterioare. Atributul BORDER trebuie sã fie prezent.Aceasta este o extensie Microsoft.
- void - fãrã bordurã exterioarã;
- above - chenar sus;
- below - chenar jos;
- hsides - chenar sus si jos;
- vsides - chenar stânga si dreapta;
- lhs - chenar stânga;
- rhs - chenar dreapta;
- box - chenar complet.
RULES controleazã afisarea liniilor interioare în cazul când se utilizeazã TBODY, TFOOT si THEAD (vezi în continuare). Atributul BORDER trebuie sãa fie prezent. Aceasta este o extensie Microsoft.
- none - nu se afiseazã linii interioare;
- groups - afiseazã linii între grupurile tabelului (specific extensiei Microsoft de definire a grupurilor: COLGROUP etc.);
- rows - afiseazã linii între linii;
- cols - afiseazã linii între coloane;
- all - afiseazã toate liniile interioare.
WIDTH comandã lãtimea tabelului: în pixeli, ooo, sau procentual, pn%, din lãtimea ecranului;
HEIGHT, similar cu WIDTH, pentru înãltimea tabelului;
BGCOLOR este culoarea pentru fundalul tabelului. Culoarea de fundal este acoperitã, evident, de culoarea declaratã ca fundal pentru linii (vezi TR), care este acoperitã de culoarea declaratã ca fundal pentru celule (vezi TH si TD). Aceasta este o extensie Netscape si Microsoft;
BORDERCOLOR este culoarea bordurii tabelului. Aceasta este o extensie Microsoft;
BORDERCOLORLIGHT este culoarea liniei luminoase dintr-o bordurã umbritã. Aceasta este o extensie Microsoft;
BORDERCOLORDARK este culoarea umbrei dintr-o bordurã umbritã.Aceasta este o extensie Microsoft;
BACKGROUND specificã adresa URL a fisierului imagine utilizat drept fundal pentru fiecare celulã a tabelului. Aceasta este o extensie Microsoft;
CELLSPACING aratã spatierea, în pixeli, dintre celule;
CELLPADDING aratã spatierea, în pixeli, dintre marginile celulei si continutul ei:
ALIGN comandã alinierea tabelului între marginile laterale ale ferestrei;
VALIGN aratã alinierea verticalã a tabelului.Aceasta este o extensie Microsoft.
continut-tabel defineste celulele tabelului, antetul, captarea si continutul celulelor tabelului.
luni, 23 aprilie 2012
luni, 26 martie 2012
L11. Liste cu numere sau buline
Asa cum stiti de la lectia similara de WORD, listele sunt de trei feluri:
Tagul folosit este UL (unordered list ?)
in care
Tagul folosit este OL (ordered list)
in care
Listele ierarhice se obtin prin combinarea celor doua tipuri de liste, ca in exemplu urmator:
Exercitiu:
In pagina LINKS faceti o lista de situri favorite despre: muzica, filme, carti. Fiecare categorie trebuie sa includa mimim 4 linkuri.
- liste cu bulina (valori neordonate)
- liste cu numere (valori ordonate)
- liste cu litere (valori ordonate)
- liste ierarhice (cu mai multe nivele de ordonare)
Liste cu bulina
Tagul folosit este UL (unordered list ?)
- <ul [compact] [ type=disk|square|circle]>
- <li> optiune 1
- <li> optiune 2
- </ul>
in care
- COMPACT= permite browserului reducerea distantei intre bulina si tex
- TYPE= specifica ce tip de marcator va fi folosit
Liste cu numere
Tagul folosit este OL (ordered list)
- <OL[ COMPACT] [ START=nnnn] [ TYPE=1|a|A|i|I]>
- <li> optiune
- <li>optiune
- </OL>
in care
- START = specifica valoare de pornire
- TYPE = specifica tipul de marcator (numeric, alfabetic, mare/mic, cifre romane mari/mici)
Liste ierarhice
Listele ierarhice se obtin prin combinarea celor doua tipuri de liste, ca in exemplu urmator:
| <OL COMPACT START=1 TYPE=1><LI>primul element <UL COMPACT TYPE="circle"> <LI>element secundar <LI>element secundar <LI>element secundar </UL><LI>al doilea element<LI>al treilea element<LI>al patrulea element</OL> |
|
Exercitiu:
In pagina LINKS faceti o lista de situri favorite despre: muzica, filme, carti. Fiecare categorie trebuie sa includa mimim 4 linkuri.
vineri, 23 martie 2012
L10. Crearea legaturilor in HTML
Un link (legatura) este o trimitere de la un text sau imagine catre
Tagul pentru linkuri este
<A HREF="link-url" [ REL="tip-rel"] [ REV="tip-rev"] [ TITLE="title-name"] [ TARGET=window|_blank|_parent|_self|_top]> text_legaturã </A>
Observatii:
Exemple:
Exercitii:
Acest tip de link presupune marcarea unei zone ca destinatie.
Exemplu:
- o pagina de web, locala sau de pe internet
- o locatie din aceeasi pagina (ancora, bookmark)
Linkuri
Tagul pentru linkuri este
<A HREF="link-url" [ REL="tip-rel"] [ REV="tip-rev"] [ TITLE="title-name"] [ TARGET=window|_blank|_parent|_self|_top]> text_legaturã </A>
Observatii:
- HREF= hyper-referinta, reprezinta adresa paginii care se va deschide
- TARGET= puteti specifica unde se va deschide noua pagina
- window = indica fereastra in care se afiseaza; daca nu exista, va fi creata o fereastra cu acest nume
- _blank=pagina se deschide intr-o fereastra noua
- _parent= pagina se deschide in fereastra anterioara
- _self= pagina se deschide in aceeasi fereastra ca si documentul curent
- _top= pagina se deschide in fereastra initiala
Exemple:
- <a href="exemplu1.html"> aici gasiti exemplul nr 1 </a>
- fisierul exemplu1.html se deschide in aceeasi fereastra
- <a href="http://www.google.com" target ="_blank"> Cu acest link ajungeti la Google </a>
- pagina Google se deschide intr-o fereastra noua
- <a href="albumfoto.html" > <img src="images/albumfoto.jpg"> </a>
- imaginea albumfoto.jpg este buton (face trimitere) pentru pagina albumfoto.html
- <a href="http://www.acasa.com/pdfs/document.pdf" target ="_blank"> Link la DOCUMENT.PDF </a>
- face trimitere la documentul document.pdf de la adresa http://www.acasa.com/pdfs/.
- <a href="mailto:aaa@bbb.com"> Email-ul meu</a>
- link la email-ul aaa@bbb.com
Exercitii:
- Salvati pagina de la lectia IMAGINI cu numele model.html
- realizati linkuri de la fiecare buton catre o pagina cu acelasi nume
- butonul Home catre index.html
- butonul Album catre album.html
- butonul Links catre links.html
- Salvati pagina model sub numele fisierelor de mai sus
- Completati fiecare pagina conform semnificatiei ei
- Vizualizati situl incepand cu index.html. Acesta este primul dvs site.
Ancore
Acest tip de link presupune marcarea unei zone ca destinatie.
- sa marcam zona unde vrem sa sarim
- <A NAME="nume_zona"> text-denumire </A>
- sa realizam trimiterea catre zona noastra
- <A HREF="#nume_zona"> text_legaturã </A>
Exemplu:
- daca in pagina prezentam o lucrare cu mai multe capitole, in dorinta de a nu pune utilizatorul sa gliseze pagina sus-jos intre cuprins si continut, ii punem la dispozitie un sistem de linkuri
- dorim, ca la inceputul fisierului sa realizam un cuprins de genul "Titlul_lucrarii Capitol1 Capitol 2 Capitol3" cu legaturi catre fiecare capitol in parte.
- la terminarea fiecarui capitol dorim un link (HOME) catre titlul lucrarii
marți, 13 martie 2012
L9. Inserarea imaginilor in pagina HTML
O imagine se poate afla fie in acelasi calculator cu pagina fie pe un alt calculator(server). in ambele cazuri ne trebuie calea pana la ea, fie casuccesiune de foldere de pe calculator, fie ca succesiune de foldere de pe server.
Cu inserarea unei imagini ne-am mai intalnit la lectia anterioara (folosirea culorilor) la tagul BODY:
<BODY [ BACKGROUND="adresa_imagine"] [ BGCOLOR="#rrggbb"|"culoare"] ... > continut document </BODY>
Atributul BACKGROUND permite stabilirea unei imagini ca fundal al paginii. Imaginea va fi repetata pana la acoperirea ecranului (gen TILE ca si aceeasi proprietate la setarea monitorului).
Exemplu
<IMG SRC="URL-imagine" [ ALIGN=left|right|top|middle|bottom] [ ALT="text-alternativ"] [ BORDER=nn] [ DYNSRC="URL-dinamic"] [ LOWSRC="URL-rez-slaba"] [ LOOP=nr-repet] [ CONTROLS] [ HEIGHT=mm] [ WIDTH=ww] [ HSPACE=hh] [ VSPACE=vv] [ ISMAP] [ USEMAP]> [text]
Explicatii:
Observatie:
Aplicatii
Cu inserarea unei imagini ne-am mai intalnit la lectia anterioara (folosirea culorilor) la tagul BODY:
<BODY [ BACKGROUND="adresa_imagine"] [ BGCOLOR="#rrggbb"|"culoare"] ... > continut document </BODY>
Atributul BACKGROUND permite stabilirea unei imagini ca fundal al paginii. Imaginea va fi repetata pana la acoperirea ecranului (gen TILE ca si aceeasi proprietate la setarea monitorului).
Exemplu
- Desenati in Paint un cerc si salvati imaginea in folderul de lucru sub numele poza.jpg.
- Scrieti urmatorul cod html si salvat sub numele index.html, in acelasi folder cu imaginea. Vizualizati fisierul html intr-un browser.
- <html> <body BACKGROUND="poza.jpg"</body> </html>
- Cautati o imagine pe internet si copiati adresa ei (click drp, copy image location); inlocuiti poza.jpg cu adresa imaginii. reincarcati pagina index.html in browser
Sintaxa tagului IMG
<IMG SRC="URL-imagine" [ ALIGN=left|right|top|middle|bottom] [ ALT="text-alternativ"] [ BORDER=nn] [ DYNSRC="URL-dinamic"] [ LOWSRC="URL-rez-slaba"] [ LOOP=nr-repet] [ CONTROLS] [ HEIGHT=mm] [ WIDTH=ww] [ HSPACE=hh] [ VSPACE=vv] [ ISMAP] [ USEMAP]> [text]
Explicatii:
- SRC reprezina SURSA; ea poate fi locala (in acelasi folder cu pagina sau in altul) sau de pe internet
- ALIGN reprezinta aliniarea imagini vis a vis de pagina/textul
- ALT= permite afisarea unui text in cazul in care browserul nu afiseaza imaginile
- BORDER = permite afisarea imaginii cu o margine a carei grosime se da ca parametru
- HEIGHT = inaltimea pe care o va avea imaginea afisata
- WIDTH = latimea pe care o va avea imaginea afisata
Observatie:
- Intai imaginea se incarca in memorie si apoi i se aplica restrangerile de inaltime si latime. Daca doriti ca timpul de incarcare al imaginii sa fie mai mic, va trebui ca, in prealabil, sa micsorati imaginea la dimensiunile dorite.
- imaginea se poate incarca si de la o locatie de pe internet
- <img src= "http://www.google.ro/logos/2012/juan_gris-2012-hp.jpg">
- imaginea se poate incarca dintr-un folder local; ea nu trebuie neaparat situata in acelasi folder cu pagina
- <img src="imagini/poza.jpg">
Aplicatii
- incercati toate cazurile de mai sus: incarcarea unei imagini de pe net, din folderul local, dintr-un alt folder
- realizati o cautare a siturilor care pot realiza butoane online ( online buttons ) si salvati un set de butoane cu textele: Home, Album, Links
- realizati o cautare a siturilor care pot realiza bannere online (free online banners) si creati un banner cu un text de bun-venit.
- Creati o pagina web care sa contina pe mijloc un banner si pe randul urmator, centrat, setul de butoane de mai sus, separate de 2-3 spatii.
L8. Atributele tagurilor. Folosirea culorilor in HTML
Atributele tagurilor
Majoritatea tagurilor au si o serie de proprietati care pot fi folosite. Sintaxa completa a tagului <p> este:
<P [ ALIGN=left|center|right]> text [</P>].
Astfel, textului i se poate aplica proprietatea de aliniere stanga, dreapta si centrare, ca si in Word.
Folosirea culorilor in HTML
Mai multe taguri necesita folosirea culorilor:
- tagul FONT - care stabileste proprietatile unui sir de caractere
- <FONT [ SIZE=[+|-]1|2|3|4|5|6|7] [ COLOR="#rrggbb"|"color"] [ FACE="font"]>text</FONT>
- mareste/micsoreaza fontul implicit; ii atribuie o culoare; forteaza schimbarea fontului implicit cu alt font cunoscut
- tagul BODY
- <BODY [ BACKGROUND="adresa_imagine"] [ BGCOLOR="#rrggbb"|"culoare"] [ TEXT="#rrggbb"|"culoare"] [ LINK="#rrggbb"|"culoare"] [ VLINK="#rrggbb"|"culoare"] [ ALINK="#rrggbb"|"culoare"] [ LEFTMARGIN=marg_st] [ TOPMARGIN=marg_top] [ BGPROPERTIES="fixed"]>
continut document
</BODY> - stabileste o culoare de fundal pentru pagina (BGCOLOR); stabileste culoarea unui link normal, a unui link vizitat sau a unui link activ.
- <BODY [ BACKGROUND="adresa_imagine"] [ BGCOLOR="#rrggbb"|"culoare"] [ TEXT="#rrggbb"|"culoare"] [ LINK="#rrggbb"|"culoare"] [ VLINK="#rrggbb"|"culoare"] [ ALINK="#rrggbb"|"culoare"] [ LEFTMARGIN=marg_st] [ TOPMARGIN=marg_top] [ BGPROPERTIES="fixed"]>
Moduri de aplicare a culorii
- Se poate folosi denumirea culorii respective (considerata ca si constanta): red, green, blue, yellow, ....
- In toate cazurile de mai sus se foloseste un cod HEX (amestec de culori rosu/RED, verde/GREEN, albastru/BLUE) sau Codul HEX este un sir de "cifre" in baza 16 ( 0, 1, 2, ... 9, A (10), B(11), C(12), D(13), E (14), F(15), ) cate doua cifre pentru fiecare din cele trei culori standard.
- Aceleasi culori se pot stabili si in baza 10 (cod RGB) prin valori intre 0 si 255, pentru fiecare din cele trei culori standard.
Iata, spre exemplu echivalenta culorii HotPink :
- in HEX: #FF69B4
- in RGB:
- culoarea rosie are codul FF = 15*16+15=255
- culoarea verde are codul 69 = 6*16+ 9 = 105
- culoarea albastra are codul B4 = 11 *16 +4 = 180
- astfel se obtine codul RGB(255, 105, 180) -> HotPink
Codul HTML folosit poate fi:
- <font size=+5 color="#FF69B4"> HotPink </font> : HotPink
- <font size=+5 color="HotPink"> HotPink </font> : HotPink
Potrivirea culorilor - Color matching
- Daca gasiti o culoare minunata sau situl pe care vreti sa il faceti trebuie sa corespunda ca si colorit puteti folosi o aplicatie COLOR PICKER, care sa va stabileasca codul culorii favorite.
- O alta problema este aspectul sitului dvs din punct de vedere al coloritului. In definitiv, armonia de culoare este primul element de impresie al vizitatorului dvs. A potrivi culoarea textuui cu culoarea de fundal si cu cea a meniului este o problema des dezbatuta - COLOR MATCHING. Exista situri care se ocupa cu sugestii pornind de la o culoare data.
marți, 6 martie 2012
L10. Algoritmi fundamentali. Divizibilitate. N este prim?
Divizibilitate
Problema. Pentru un N dat, care sunt divizorii lui N?
Multimea divizorilor lui N este cuprinsa intre valorile 1 si N. Un numar D este divizor al lui N daca N se imparte exact la D. Pentru noi, impartirea exacta inseamna ca restul impartirii lui N la D este zero. Trebuie sa cautam acele valori intre 1 si N la care N se imparte exact. Vom aifsa si vom numara aceste valori.
natural N, D, NR;
NR=0;
citeste N;
pentru D=1, N executa
daca (N%D==0) atunci { scrie D; NR=NR+1}
scrie NR;
Cu numarul de divizori putem stabili daca numarul N este prim.
daca (NR==2) atunci scrie N, " este prim!"
Este N numar prim?
Problema. Fie N un numar natural. Este N numar prim?
Conform matematicii un numar N este prim daca are drept divizori pe 1 si pe N.
Varianta 1. Ideea este sa realizam cat mai putine teste, astfel incat algoritmul sa se incheie mai repede
- D=2;
- cat timp (D<=N-1 si N%D!=0) executa D=D+1;
- daca (N%D==0) atunci scrie "divizibil"
- altfel scrie "prim"
Am redus doua teste : nu mai testam cazul D=1 si D=N. De asemenea, profitam de situatia in care gasim primul divizor pentru a iesi din repetitie. Totusi, pentru cazul in care numarul ar fi prim, inca se executa N-2 pasi.
Varianta 2. Numarul 2 este cel mai mic potential divizor. Deduc ca numarul N/2 este cel mai mare potential divizor.
- D=2;
- cat timp (D<=N/2 si N%D!=0) executa D=D+1;
- daca (N%D==0) atunci scrie "divizibil"
- altfel scrie "prim"
In aceasta varianta se executa, in cel mai rau caz, N/2 operatii. Super! Am redus munca la jumatate! Se poate mai bine?
Varianta 3. Sa cercetam, in continuare, perechile de potential divizori: 2 cu N/2, 3 cu N/3, 4 cu N/4, .... Observ ca pe masura ce primul termen creste, al doilea scade. Deduc ca, la un moment dat cei doi termeni pot fi egali. Adica ar putea fi un element X astfel incat N==X*X sa fie adevarat! In consecinta X=radical(N) . Deci ultima pereche care ar trebui studiata este cea cu radical (N).
- D=2;
- cat timp (D<=radical(N) si N%D!=0) executa D=D+1;
- daca (N%D==0) atunci scrie "divizibil"
- altfel scrie "prim"
Este cert ca radical(N)<N/2. Iata ca am obtinut un numar mai mic de operatii. Sa cercetam cat de eficienti sunt algoritmii nostri.
Numarul N=611953 este prim, spun unii.
- varianta 1 va executa 611951 pasi
- varianta 2 va executa 305 976 pasi
varianta 3 va executa 782 pasi!!!!!!!
E ceva, nu?
luni, 5 martie 2012
L9. Algoritmi fundamentali. Siruri de numere
Pentru a prelucra un sir de numere trebuie sa stim fie numarul de valori in discutie (sir cu numar cunoscut de valori), fie sa avem o valoare care sa marcheze sfarsitul sirului (de obicei - zero).
De vreme ce stim cate valori vor fi in sir (prelucrarea va fi retetat de un numar cunoscut de ori) putem folosi instructiunea FOR/PENTRU.
Valoarea zero nu face parte din sir si nu trebuie prelucrata. Nu stim exact cand primim valoarea zero (care marcheaza sfarsitul sirului), motiv pentru care la fiecare citire trebuie sa verificam daca s-a citit zero sau nu.Daca valoarea citita nu este zero avem de realizar prelucrarea ceruta de problema si o noua citire.
Prelucrarea unui sir cu numar cunoscut de valori
De vreme ce stim cate valori vor fi in sir (prelucrarea va fi retetat de un numar cunoscut de ori) putem folosi instructiunea FOR/PENTRU.
natural x, n, i;
citeste N
pentru i=1,N executa
{ citeste X;
//prelucrez X
........
}
Prelucrarea unui sir cu un numar necunoscut de valori (care se incheie cu zero)
Valoarea zero nu face parte din sir si nu trebuie prelucrata. Nu stim exact cand primim valoarea zero (care marcheaza sfarsitul sirului), motiv pentru care la fiecare citire trebuie sa verificam daca s-a citit zero sau nu.Daca valoarea citita nu este zero avem de realizar prelucrarea ceruta de problema si o noua citire.
citeste x;
cat timp (x!=0) {
//prelucrez valorea X
.........
//trec la valoarea urmatoare
citeste X
}
Probleme
- Sa se calculeze suma/produsul valorilor din sir
- Sa se determine valoarea minima/maxima dintre valorile citite.
- O valoare data Y se gaseste in sir?
- De cate ori apare o valoare data Y?
- Presupunand ca sirul reprezinta coeficientii uni polinom ( dati incepand cu gradul cel mai mic), calculati valoarea polinomului intr-un punct Y.
L8. Algoritmi fundamentali. Prelucrarea cifrelor unui numar natural
Fie N un numar natural. Avem nevoie sa prelucram pe rand cifrele unui numar natural.
In prelucrarea cifrelor numarului, cel mai usor ajungem la ultima cifra (N%10) . Dupa prelucrarea ei, ultima cifra va trebui inlaturata (N=N/10). Si totul trebuie repetat cat timp N mai are cifre (N!=0).
De vreme ca nu stim cate cifre are N, nu putem folosi intructiunea FOR/PENTRU. Raman instructiunile repetitive cu un numar necunoscut de pasi : CAT TIMP EXECUTA/WHILE si EXECUTA CAT TIMP/ DO WHILE.
Pentru CAT TIMP EXECUTA/WHILE am un contraargmuent. Algoritmul ar trebui sa fie
Daca utilizatorul doreste sa aplice algoritmul pentru valoarea zero, nu se va efectua nimic si secventa noastra nu se va executa.Evident, situatia se poate evita prin plasarea unui test inainte de CAT TIMP , care sa verifice daca N este nul.
Nu ramane decat varianta cu EXECUTA CAT TIMP/DO WHILE.
Cateva probleme clasice pentru acest algoritm:
In prelucrarea cifrelor numarului, cel mai usor ajungem la ultima cifra (N%10) . Dupa prelucrarea ei, ultima cifra va trebui inlaturata (N=N/10). Si totul trebuie repetat cat timp N mai are cifre (N!=0).
De vreme ca nu stim cate cifre are N, nu putem folosi intructiunea FOR/PENTRU. Raman instructiunile repetitive cu un numar necunoscut de pasi : CAT TIMP EXECUTA/WHILE si EXECUTA CAT TIMP/ DO WHILE.
Pentru CAT TIMP EXECUTA/WHILE am un contraargmuent. Algoritmul ar trebui sa fie
cat timp (N!=0) executa { //prel ultima cifra a lui N
.......N%10;
//stergem ultima cifra
N=N/10;
}Daca utilizatorul doreste sa aplice algoritmul pentru valoarea zero, nu se va efectua nimic si secventa noastra nu se va executa.Evident, situatia se poate evita prin plasarea unui test inainte de CAT TIMP , care sa verifice daca N este nul.
Nu ramane decat varianta cu EXECUTA CAT TIMP/DO WHILE.
executa{ //prel ultima cifra a lui N
.......N%10;
//stergem ultima cifra
N=N/10;
} cat timp (N!=0);Cateva probleme clasice pentru acest algoritm:
- Sa se numere cate cifre are numarul N
- Sa se stabileasca cate cifre pare/impare are numarul N.
- Sa se stabileasca daca N contine o cifra data, CIF.
- Sa se numere de cate ori apare cifra CIF in numarul N.
- Sa se determine cifra maxima/minima din numarul N
- Sa se construiasca "oglinditul" numarului N. Pentru N=3648 se va afisa 8463.
- Sa se stabilesca daca N este palindrom (egal cu oglinditul sau).
- Pentru un numar N dat, sa se construiasca cel mai mare numar natural care se poate forma cu cifrele lui N.
cat timp (N!=0) executa { //prel ultima cifra a lui N
.......N%10;
//stergem ultima cifra
N=N/10;
}
Abonați-vă la:
Postări (Atom)