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.
Informatica, pas cu pas
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.
Abonați-vă la:
Postări (Atom)