Algoritmică şi programare Laborator 3

Similar documents
Parcurgerea arborilor binari şi aplicaţii

GRAFURI NEORIENTATE. 1. Notiunea de graf neorientat

VISUAL FOX PRO VIDEOFORMATE ŞI RAPOARTE. Se deschide proiectul Documents->Forms->Form Wizard->One-to-many Form Wizard

SUBIECTE CONCURS ADMITERE TEST GRILĂ DE VERIFICARE A CUNOŞTINŢELOR FILIERA DIRECTĂ VARIANTA 1

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

declarare var <identif>:array[<tip1>,<tip2>,...] of <tip_e>; var a: array[1..20] of integer; (vector cu 20 elemente)

Ghid de instalare pentru program NPD RO

Pasul 2. Desaturaţi imaginea. image>adjustments>desaturate sau Ctrl+Shift+I

Modalităţi de redare a conţinutului 3D prin intermediul unui proiector BenQ:

PROBLEME DE TEORIA NUMERELOR LA CONCURSURI ŞI OLIMPIADE

Teoreme de Analiză Matematică - II (teorema Borel - Lebesgue) 1

Reprezentări grafice

22METS. 2. In the pattern below, which number belongs in the box? 0,5,4,9,8,13,12,17,16, A 15 B 19 C 20 D 21

OLIMPIADA DE MATEMATIC ¼A ETAPA JUDEŢEAN ¼A 3 martie 2007

Application form for the 2015/2016 auditions for THE EUROPEAN UNION YOUTH ORCHESTRA (EUYO)


Mail Moldtelecom. Microsoft Outlook Google Android Thunderbird Microsoft Outlook

2. PORŢI LOGICE ( )

Programarea calculatoarelor CURS 1

Aplicatii ale programarii grafice in experimentele de FIZICĂ

Circuite Basculante Bistabile

Split Screen Specifications

LESSON FOURTEEN

10 Estimarea parametrilor: intervale de încredere

Paradoxuri matematice 1

Defuzzificarea într-un sistem cu logică fuzzy. Aplicaţie: maşina de spălat cu reguli fuzzy. A. Obiective. B. Concepte teoretice ilustrate

Rigla şi compasul. Gabriel POPA 1

4 Caracteristici numerice ale variabilelor aleatoare: media şi dispersia

1. Ecuaţii diferenţiale de ordinul întâi

3. CPU 3.1. Setul de regiştri. Copyright Paul GASNER

O VARIANTĂ DISCRETĂ A TEOREMEI VALORII INTERMEDIARE

Exerciţii Capitolul 4

Capitolul 1. Noţiuni de bază

OLIMPIADA INTERNAŢIONALĂ DE MATEMATICĂ FORMULA OF UNITY / THE THIRD MILLENIUM 2014/2015 RUNDA A DOUA

GREUTATE INALTIME IMC TAS TAD GLICEMIE

Click pe More options sub simbolul telefon (în centru spre stânga) dacă sistemul nu a fost deja configurat.

riptografie şi Securitate

Hama Telecomanda Universala l in l

TTX260 investiţie cu cost redus, performanţă bună

Cum putem folosi întregii algebrici în matematica elementară

EPI INFO. - Cross-tabulation şi testul 2 -

Biostatistică Medicină Generală. Lucrarea de laborator Nr Intervale de încredere. Scop: la sfârşitul laboratorului veţi şti:

PREZENTARE CONCURSUL CĂLĂRAŞI My joy is my sorrow unmasked. 1

ARHITECTURA SISTEMELOR DE CALCUL ŞI SISTEME DE OPERARE. LUCRĂRILE DE LABORATOR Nr. 12, 13 şi 14

Split Screen Specifications

ARHITECTURA CALCULATOARELOR 2003/2004 CURSUL 10

Press review. Monitorizare presa. Programul de responsabilitate sociala. Lumea ta? Curata! TIMISOARA Page1

Clasele de asigurare. Legea 237/2015 Anexa nr. 1

OPTIMIZAREA GRADULUI DE ÎNCĂRCARE AL UTILAJELOR DE FABRICAŢIE OPTIMIZING THE MANUFACTURING EQUIPMENTS LOAD FACTOR

Consideraţii statistice Software statistic

Anexa 2. Instrumente informatice pentru statistică

6. MPEG2. Prezentare. Cerinţe principale:

PREVIZIUNI ÎN ECONOMIE BAZATE PE MODELELE ECONOMETRICE UTILIZÂND EViews 5. ECONOMIC FORECASTS BASED ON ECONOMETRIC MODELS USING EViews 5

CAPITOLUL 2. PROIECTAREA MODELULUI RELAŢIONAL AL DATELOR PRIN NORMALIZARE

DIRECTIVA HABITATE Prezentare generală. Directiva 92/43 a CE din 21 Mai 1992

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Matematică (Varianta 4) b este: A b 2 a B b a C b+ a D a b

Universitatea din Bucureşti Facultatea de Matematică şi Informatică. Matematică (Varianta 1)

Tehnici de programare

MANUAL DE UTILIZARE. 2. Nomenclator Curs Produse Clienti Introducere Facturi

9.1. Structura unităţii de I/E. În Figura 9.1 se prezintă structura unui sistem de calcul împreună cu unitatea

1. Funcţii speciale. 1.1 Introducere

BAZE DE DATE SI PRELUCRARI STATISTICE

Platformă de e-learning și curriculă e-content pentru învățământul superior tehnic

Un tip de data este caracterizat de: o O mulţime de date (valori є domeniului) o O mulţime de operaţii o Un identificator.

Biraportul în geometria triunghiului 1

VERBUL. Are 3 categorii: A. Auxiliare B. Modale C. Restul. A. Verbele auxiliare (to be si to have)

JOURNAL OF ROMANIAN LITERARY STUDIES DO ASSERTIONS, QUESTIONS OR WISHES MAKE A THICK TRANSLATION?

Laboratorul 1. MS Word

Microsoft Excel partea 1

ice~felix' COMPUTER S.A.

2.Transferul de date. Transferul de date

COMENTARII OLIMPIADA DE MATEMATICĂ 2014 TESTE DE SELECŢIE JUNIORI

Maria plays basketball. We live in Australia.

COMENTARII OLIMPIADA DE MATEMATICĂ 2014 ETAPA JUDEŢEANĂ ŞI A MUNICIPIULUI BUCUREŞTI

Poo Laboratoare 1. Laborator Programare cu JTable & JTree JTable JTree... 2

ZOOLOGY AND IDIOMATIC EXPRESSIONS

Olimpiada Naţională de Matematică 2015 Testele de Selecţie Juniori IV şi V

Raionul Şoldăneşti la 10 mii locuitori 5,2 4,6 4,4 4,8 4,8 4,6 4,6 Personal medical mediu - abs,

Conferinţa Naţională de Învăţământ Virtual, ediţia a IV-a, Graph Magics. Dumitru Ciubatîi Universitatea din Bucureşti,

în perioada 1 7 decembrie 2017, urmatoarele filme :

Colegiu Info LICENTA 2006

Cartea Mea Bine Ati Venit! Română

REVISTA DE MATEMATICĂ

Anexa nr.1. contul 184 Active financiare depreciate la recunoașterea inițială. 1/81

Curs 10: Analiza seriilor de timp. Data mining - Curs 10 1

Pagini Web prin Microsoft Frontpage. Crearea de pagini web. Introducere

INTRODUCERE : Ce este econometria? 1. Scurt istoric privind apariţia econometriei. 2. Definiţia econometriei

COMENTARII OLIMPIADA DE MATEMATICĂ 2013 ULTIMELE DOUĂ TESTE DE SELECŢIE

Ghid de Instalare Windows Vista

Curs 3 Word 2007 Cuprins

PREZENTARE INTERFAŢĂ MICROSOFT EXCEL 2007

Capitolul V MODELAREA SISTEMELOR CU VENSIM

ACADEMIA DE STUDII ECONOMICE FACULTATEA DE FINANŢE, ASIGURĂRI, BĂNCI şi BURSE de VALORI

CE LIMBAJ DE PROGRAMARE SĂ ÎNVĂŢ? PHP vs. C# vs. Java vs. JavaScript

Manual de utilizare 43PUS PUS PUS6551

Capitolul 5. Elemente de teoria probabilităţilor

LICITAŢIILE ŞI STRATEGIILE DE LICITARE PE PIAŢA LIBERĂ A ENERGIEI ELECTRICE AUCTIONS AND BIDDING STRATEGIES IN THE OPEN ELECTRIC POWER MARKET

CUPRINS CAP. 1. PREZENTARE GENERALĂ

SISTEME DE ACHIZIŢIE DE DATE CU PC

Review by Mihaela VANCEA

Transcription:

Algoritmică şi programare Laborator 3 Următorul algoritm calculează cel mai mare divizor comun şi cel mai mic multiplu comun a două numere naturale, nenule, a şi b, citite de la tastatură. Algoritmul are două variante: prin împărţiri repetate şi prin scăderi repetate. Varianta 1. Se foloseşte algoritmul lui Euclid, care atribuie lui b restul împărţirii lui a la b, iar lui a vechea valoare a lui b. Algoritmul se termină când b=0. 1. Se împarte a la b şi se obţine restul r; 2. Se execută operaţiile de atribuire a<-b şi b<-r; 3. Dacă b este diferit de 0 atunci se revine la pasul 1, altfel c.m.m.d.c. este a. int a, b, r, x, y; cout << "Programul calculeaza c.m.m.d.c. si c.m.m.m.c a doua numere date" << endl; cout << "Introduceti primul numar : "; cin >> a; x=a; cout << "Introduceti al doilea numar : "; cin >> b; y=b; while(b!=0) r=a%b; // calculeaza restul impartirii lui a la b a=b; b=r; cout << "c.m.m.d.c al numerelor "<< x << " si " << y << " este : " << a << endl; cout << "c.m.m.m.c al numerelor "<< x << " si " << y << " este : " << x*y/a << endl; Varianta 2. Folosim algoritmul de scădere repetată a valorii celei mai mici din valoarea cea mai mare. Rezolvarea problemei se bazează pe condiţia a b. 1. Se scade din numărul mai mare numărul mai mic; 2. Dacă numerele sunt diferite se revine la pasul 1, altfel c.m.m.d.c. este a. int a, b, x, y; cout << "Programul calculeaza c.m.m.d.c. si c.m.m.m.c a doua numere date" << endl; cout << "Introduceti primul numar : "; 1

cin >> a; x=a; cout << "Introduceti al doilea numar : "; cin >> b; y=b; while (a!=b) if(a>b) a=a-b; else b=b-a; cout << "c.m.m.d.c al numerelor "<< x << " si " << y << " este : " << a << endl; cout << "c.m.m.m.c al numerelor "<< x << " si " << y << " este : " << x*y/a << endl; Observaţie. Pentru numerele naturale considerate a şi b are loc următoarea relaţie: a*b=c.m.m.d.c.(a,b)*c.m.m.m.c.(a,b), formulă ce permite astfel determinarea şi a celui mai mic multiplu comun a acestor două numere. Algoritmi de interschimbare a valorilor a două variabile Interschimbarea valorilor a două variabile de memorie x şi y nu se face prin simpla atribuire a noii valori, deoarece secvenţa de atribuiri x<-y şi y<-x ar duce la pierderea valorii lui x, iar secvenţa y<-x şi x<-y ar duce la pierderea valorii lui y. Pentru a realiza interschimbarea conţinutului celor două variabile de memorie se poate folosi una din următoarele variante de algoritm: Varianta 1. Interschimbarea valorilor a două variabile a şi b prin folosirea unei variabile intermediare x. 1. Se salvează valoarea primei variabile a în variabila x; 2. Se atribuie primei variabile valoarea celei de a doua variabile; 3. Se atribuie celei de a doua variabile b valoarea care a fost salvată în a treia variabilă x. Exemplu. Se citesc două variabile de la tastatură. Să se interschimbe conţinutul lor şi să se afişeze apoi pe ecran. int a, b, x; cout<<"introduceti a : "; cin>>a; cout<<"introduceti b : "; cin>>b; x=a; a=b; b=x ; cout<<"valoarea lui a devine : "<<a<<endl; cout<<"valoarea lui b devine : "<<b<<endl; 2

Varianta 2. Interschimbarea valorilor a două variabile a şi b fără folosirea unei variabile intermediare. Se folosesc identităţile matematice: a=(a-b)+b şi b=((a-b)+b)-(a-b) int a,b; cout<<"introduceti a : "; cin>>a; cout<<"introduceti b : "; cin>>b; a=a-b; b=a+b; a=b-a; cout<<"valoarea lui a devine : "<<a<<endl; cout<<"valoarea lui b devine : "<<b<<endl; Problemă. La un concurs, comisia de notare este formată din n membri. Să se scrie algoritmul de calcul al mediei, ştiind că nota cea mai mică şi nota cea mai mare nu sunt luate în considerare la calcularea mediei. Procedăm în felul următor. La o singură citire este determinat atât minimul cât şi maximul şi, de asemenea, toate notele sunt adunate la o sumă. La final din sumă sunt scăzute minimul şi maximul şi suma se împarte la n-2. Este necesar, de asemenea, şi un contor care să numere câte note au fost introduse. double a, min, max, s=0, c=0, media; cout<<"introduceti nota : "; cin>>a; min=a; max=a; while(a>0) c=c+1; s=s+a; if (a>max) max=a; if (a<min) min=a; cout<<"introduceti nota : "; cin>>a; s=s-min; s=s-max; media=s/(c-2); cout<<"media celor "<<c<<" note este "<<media<<endl; Problemă. Să se citească un număr natural de la tastatură şi să se determine dacă acesta este număr prim sau nu. Algoritmul de verificare dacă un număr natural n este prim constă în generarea tuturor numerelor naturale mai mari sau egale cu 2 şi mai mici sau egale cu sqrt(n) şi verificarea pentru fiecare număr generat dacă îl divide pe n. Dacă există cel puţin un astfel de număr, numărul n nu este prim. Pentru a şti dacă există cel puţin un număr care îl divide pe n, se va folosi o variabilă logică x, care va avea valoarea logică True dacă numărul este prim şi False dacă numărul nu este prim. Se presupune de la început că 3

numărul este prim (variabila x se iniţializează cu 1) şi pentru primul număr găsit în şirul de numere generate, care îl divide pe n, se va schimba valoarea variabilei x în False. Pentru generarea şirului de numere se foloseşte o variabilă contor care va fi iniţializată cu 2 şi care se va incrementa cu 1 până va avea valoarea [sqrt(n)]. 1. Se iniţializează variabila x cu True; 2. Se generează primul număr din şirul de numere, prin operaţia i<-2; 3. Dacă n se divide cu i, atunci se schimbă valoarea variabilei x prin operaţia x<-f; altfel, se generează următoarea cifră din şirul de numere prin incrementarea contorului i++; 4. Dacă i<=sqrt(n) şi x=t se revine la pasul 3; 5. Dacă x=t se afişează mesajul "Numărul este prim" altfel se generează mesajul "Numarul nu este prim". #include<math.h> int i, n; bool x=1; cout<<"introduceti numarul pe care doriti sa il verificati : "; cin>>n; for(i=2;i<sqrt(float(n));i++) if(n%i==0) x=0; if(x==1) cout<<"numarul "<<n<<" este prim!"<<endl; else cout<<"numarul "<<n<<" nu este prim!"<<endl; Problemă. Să se elaboreze un algoritm care determină inversul unui număr natural citit de la tastatură şi să se verifice dacă el este palindrom sau nu (un număr este palindrom dacă el este egal cu inversul său). Algoritmul determină inversul unui număr n prin extragerea pe rând a fiecărei cifre (începând cu cifra unităţilor) din numărul n şi compunerea unui nou număr cu aceste cifre. 1. Se citeşte numărul n; 2. Se iniţializează numărul inv cu valoarea 0; 3. Se extrage cifra cea mai semnificativă din numărul n şi se adună cifra la numărul inv*10, prin operaţia inv=inv*10+n%10; 4. Se elimină din numărul n cifra extrasă, cu operaţia n=n/10; 5. Dacă n este diferit de 0 se revine la pasul 3. int n, nr, inv; cout<<"introduceti numarul natural pe care vreti sa il inversati : "; cin>>n; nr=n; inv=0; 4

while(n!=0) inv=inv*10+n%10; n=n/10; cout<<"inversul numarului considerat este : "<<inv<<endl; if(nr==inv) cout<<"numarul este palindrom!"<<endl; else cout<<"numarul nu este palindrom!"<<endl; Problemă. Să se elaboreze un algoritm care citeşte de la tastatură un număr natural şi îl descompune în factori primi. Pentru a afişa numai divizorii primi ai unui număr n, din număr se elimină toţi divizorii i găsiţi la un moment dat, operaţia repetându-se până când sunt eliminaţi toţi divizorii din numărul n (n are valoarea 1). Pasii algoritmului sunt: 1. Se iniţializează şirul de numere cu care se va împărţi n cu primul divizor posibil, adică i<-2; 2. Dacă i îl divide pe n, atunci se afişează i şi, atâta timp cât n se împarte la i, se execută împărţirea lui n la i pentru a elimina toate puterile lui i din n. 3. Se trece la următorul divizor posibil, prin incrementarea lui i; 4. Dacă n este diferit de 1 atunci se revine la pasul 2; altfel algoritmul se termină. int n, i, k; cout<<"introduceti nr. natural pe care vreti sa il descompuneti : "; cin>>n; i=2; while(n!=1) if(n%i==0) k=0; while(n%i==0) k++; n=n/i; cout<<i<<" la puterea "<<k<<endl; i++; Problemă (schema lui Horner). Să se elaboreze doi algoritmi care să convertească un număr din baza 10 într-o baza b şi reciproc. // Algoritm de conversie din baza 10 in baza b<10 5

int n10, nb, b, p; cout<<"introduceti numarul in baza 10 ce trebuie transformat : "; cin>>n10; cout<<"introduceti noua baza (<=9) : "; cin>>b; nb=0; p=1; while(n10!=0) nb=nb+p*(n10%b); n10=n10/b; p=p*10; cout<<"numarul in baza "<<b<<" este "<<nb<<endl; // Algoritm de conversie din baza b<10 in baza 10 int n, b, inv, inv2; cout<<"introduceti numarul natural pe care vreti sa il convertiti : "; cin>>n; cout<<"introduceti baza din care convertiti : "; cin>>b; // in secventa ce urmeaza determinam inversul numarului n inv=0; while(n!=0) inv=inv*10+n%10; n=n/10; // la o noua inversare trecem de la baza b la baza 10 n=0; while(inv!=0) n=n*b+inv%10; inv=inv/10; cout<<"numarul convertit in baza 10 este : "<<n<<endl; 6