C++ Modulul II

Funcții

Recapitulare

1. Se citesc 3 numere naturale, să se afișeze maximul dintre ele.

 

2. Din fișierul "sir.in" Se citește un număr natural n și un șir de n numere naturale. Să se calculeze suma celor pare.

Structura unui program

#include <iostream>
#include <nume_bibliotecă>

using namespace std;

tip_functie nume_funcție ( parametrii )
{
    tip_funcție rezultat;
    instrucțiuni;
    
    return rezultat;
}


int main ()
{
    isntrucțiuni;
    
    return 0;
}

includere de biblioteci

definirea unei funcții (subprogram) oarecare

definirea funcției principale main()

Funcțiile

  • Funcțiile sunt subprograme, pe care le putem accesa din funcția principală main() sau din alte funcții și executa de mai multe ori într-un program, cu diferiți parametrii.
  • Pentru a putea fi folosite, funcțiile trebuiesc mai întâi definite.
  • Executarea unei funcții se numește apelarea funcției.
  • Atunci când prin apelarea unei funcții se obține un rezultat, spunem că funcția returnează, (sau întoarce) acel rezultat.
  • Orice funcție este definită prin:

Definirea unei funcții

Forma O funcție este definită prin:
tip_f nume_f ( set parametrii )
{
    instrucțiuni;
    
    return rezultat;
}
  1. Un tip (int, double, char, void etc.)  reprezintă tipul rezultatului funcției.
  2. Un nume
  3. Un set de parametrii
  4. Un set de instrucțiuni
  5. Rezultatul returnat. va fi de tipul tip_f
int main()
{
    
    tip_f variabila1;

    variabila1 = nume_f ( parametrii ) ;

    return 0;
}
  1. Se va executa funcția nume_f cu parametrii respectivi, iar rezultatul returnat va fi salvat în variabila var1.
Forma Cum funcționeaza

Apelarea unei funcții

Definirea unei funcții

Forma O funcție este definită prin:


tip_f nume_f ( set parametrii )
{
    instrucțiuni;
    
    return rezultat;
}
  1. Un tip (int, double, char, void etc.)  reprezintă tipul rezultatului funcției.
  2. Un nume
  3. Un set de parametrii
  4. Un set de instrucțiuni
  5. Rezultatul returnat. va fi de tipul tip_f

Tipul void:

Față de tipurile pentru variabile, funcțiile pot avea un tip în plus, și anume tipul void. Practic, o funcție de tipul void se execută, dar nu returnează nimic. Se poate totuși folosi instrucțiunea ' return; ' pentru a ieși mai repede din funcție.

Aplicație demo

1. a) Să se facă un calculator în consolă. Se citesc în ordine un număr zecimal a, un caracter op reprezentând semnul operației și un număr zecimal b. Să se afișeze rezultatul.

  b) Transformați programul de mai sus într-o funcție de tip void, și folosiți această funcție pentru a apela programul la infinit (până când utilizatorul îchide consola).

     c)*   Modificați programul astfel încât după fiecare calcul să întrebați utilizatorul dacă vrea să continue programul.

 

Variabile globale

O variabilă este valabilă doar în blocul de instrucțiuni (între acoladele) în care a fost declarată, după ce a fost declarată.

 

Putem avea variabile car nu se află în nici o funcție, deci în niciun bloc de intrucțiuni. Acestea se vor numi variabile globale, și pot fi accesate de toate funcțiile (cât timp au fost definite după declararea variabilei ).

 

Variabilele globale la declarare au valoarea 0.

Aplicații - funcții void

A1. Se citesc numerele k, a, b, c. Să se afișeze: (scrieți câte o funcție pentru fiecare)

  1. Dacă k este 1: Maximul dintre a și b

  2. Dacă k este 2: Ultima cifră a lui c

  3. Dacă k este 3: Perimetrul unui triunghi cu laturile a, b, c

  4. Dacă k este 4: Suma cifrelor lui b.

Aplicații - funcții void

A2. Din fișierul “șir.in” Se citește un număr natural n și un șir de n numere naturale.

  1. Afișați șirul.

  2. Afișați suma numerelor din șir

  3. Afișați maximul numerelor

  4. Înlocuiți toate numerele pare cu rezultatul împărțirii lor la 2

  5. Afișați șirul modificat.

  6. Afișați suma numerelor din șirul modificat

  7. Afișați maximul numerelor din șirul modificat.

Aplicații - funcții void

A3. Din fișierul șir2.in se citește un număr natural n și un șir de n numere naturale.

  1. Afișați șirul pe ecran.

  2. Afișați minimul din șir.

  3. Înlocuiți toate numerele mai mici decât 10 cu pătratul lor.

  4. Afișați șirul rezultat.

  5. Afișați minimul din șir-ul rezultat.

 

sir2.in console out explicații
5
5 4 20 12 5
5 4 20 12 5
minim: 4
25 16 20 12 25
minim: 12
în șirul inițial minimul e 4, iar în cel final 12.
pătratul unui număr este numărul înmulțit cu el însuși.

Tema - funcții void

T1. Din fișierul data.in se citește un număr natural n și un șir de n numere naturale.

  1. Afișați șirul pe ecran.

  2. Afișați maximul din șir.

  3. Afișați câte numere sunt mai mari decât 20.

  4. Înlocuiți toate numerele mai mari decât 100 cu ultima lor cifră.

  5. Afișați șirul rezultat.

  6. Afișați maximul din șir-ul rezultat.

  7. Afișați câte numere sunt mai mari decât 20 în șirul rezultat.

 

data.in console out explicații
5
5 27 103 157 19
5 27 103 157 19
maxim: 157
5 27 3 7 19
maxim: 27

 

Recapitulare - funcții void

R1. Din fișierul recap.in se citește un număr natural n și un șir de n numere naturale.

  1. Afișați șirul pe ecran.

  2. Afișați câte numere sunt pare.

  3. Afișați suma numerelor impare.

  4. Înlocuiți toate numerele cu produsul ultimelor lor 2 cifre.

  5. Afișați șirul rezultat.

  6. Afișați câte numere sunt pare in șirul rezultat.

  7. Afișați suma numerelor impare în șirul rezultat.

 

data.in console out explicații
5
5 27 104 157 19
5 27 104 157 19
pare: 1
suma impare: 208
0 14 0 35 9
pare: 3
suma impare: 44

 

Parametrii unei funcții

Parametrii sunt niște valori în funcție de care se execută un subprogram.

în definirea funcției, se declară setul de parametrii folosit de funcție astfel:

tip_f funcția_mea ( tip1 parametru1, tip2 parametru2, ... )
{
    instrucțiuni;
    return rezultat;
}

Funcția va fi apelată sub forma:

tip1 var1;
tip2 var2;
...

funcția_mea ( var1, var2, ...)

Primul parametru va primi valoarea primei variabile, al doilea celei de a 2-a variabile etc. Chiar dacă valoarea variabilelor parametru1, parametru2 se modifică in funcție, variabilele var1 și var2 rămân nemodificate.

Aplicații paramaterii 1.

A1.1. Se citesc numerele naturale a, b, c. Afișați:

  • Suma dintre a și b
  • Suma dintre b și c
  • Suma dintre a și c

​A1.2. Se citesc numerele naturale a și b. Câte cifre are a? Dar b?

A1.3. Se citesc numerele naturale a, b, c. Afișați:

  • Maximul dintre a și b
  • Maximul dintre b și c
  • Maximul dintre a și c

A1.4. Din fișierul param.in se citește un număr natural n și două șiruri de n numere naturale: a și b. Pentru fiecare poziție i din șiruri afișați maximul dintre a[ i ] și b[ i ].

Parametrii prin referință.

Dacă parametrii se trimit normal, variabilele cu care se apelează funcția nu își schimbă valoarea. Pentru a își modifica valoarea conform funcției, aceștia trebuie transmiși prin referință.

tip_f funcția_mea ( tip1 parametru1, tip2 & parametru2, ... )
{
    instrucțiuni;
    return rezultat;
}

Funcția va fi apelată sub forma:

tip1 var1;
tip2 var2;
...

funcția_mea ( var1, var2, ...)

Dacă în funcție se schimbă ambii parametrii, pentru var1 nu se modificată valoarea.

(transmis normal, prin valoare).

Variabila var2 își va modifica valoarea conform parametrului 2 din funcție. (transmis prin referință).

operator de referențiere

parametru transmis prin referință

parametru transmis normal (prin valoare)

Aplicații parametrii 2

A2.1. Se citesc trei numere naturale a și b și c.

  • Să se interschimbe a și b.
  • Să se interschimbe b și c.
  • Să se interschimbe a și c

​A2.2.  Din fișierul sir.in Se citește un număr natural n și un șir de n numere naturale. Se va lua fiecare element din șir.

  • Dacă este mai mare decât 10 se va înlocui cu suma cifrelor lui. Dacă nu, se va înlocui cu dublul său.
  • Se va afișa șirul rezultat

​(se va folosi o funcție înlocuire, cu un singur parametru transmis prin referință, elementul care trebuie înlocuit. )

Aplicații parametrii 2

A2.3. Sortarea a 3 numere:

Se citesc numerele a, b, c.

Dacă a este mai mare decât b interschimb a și b.

Dacă a este mai mare decât c interschimb a și c.

Dacă b este mai mare decât c interschimb b și c.

 

(Se vor folosi 2 funcții: interschimbare, care ia 2 parametrii prin referință și interschimbă valorile, și sortare, care ia 3 parametrii prin referință și folosește funcția interschimbare pentru a sorta valorile. )

data.in console out explicații
5 8 3 3 5 8 a nu e mai mare decât b
a e mai mare decât c, interschim: 3 8 5
b e mai mare decât c interschimb: 3 5 8
 

Aplicații parametrii 2

A.2.4.

  1. Scrieți funcția max2 cu parametrii a și b transmiși prin avloare și parametrul maxim prin referință. Funcția îi va da lui maxim valoarea maximului dintre a și b.

  2. Scrieți funcția max4 care cu parametrii a, b, c, d declarați normal. Se va folosi de funcția max2 Pentru a afișa maximul dintre cele 4 numere astfel:

    1. Se va calcula maximul dintre a și b și se va salva rezultatul.

    2. Se va calcula maximul dintre c și d și se va salva rezultatul.

    3. Se va calcula și afișa maximul dintre primele doua maxime.

​! funcția max4 NU va vonține nici o structură condițională IF

Returnarea unui rezultat.

Înafară de void, o funcție poate avea diferite tipuri. Tipul unei funcții reprezintă tipul rezultatului returnat. (int, char, double etc.)

tip_f funcția_mea ( tip1 parametru1, tip2 parametru2, ... )
{
    instrucțiuni;
    return rezultat;
}

Funcția va fi apelată sub forma:

tip_f rez;

rez = funcția_mea ( parametrii )

Se va evalua funcția cu parametrii dați. Variabila rez va primi valoarea returnată în subprogramul funcția_mea,  și anume valoarea variabilei rezultat.

Aplicații RETURN

A1.

 

a) Scrieți funcția max2 de tipul int care primește ca parametrii 2 variabile de tip int și returnează maximul dintre ele.

 

b) Scrieți funcția max4 de tipul int care primește 4 parametrii de tip int și folosește funcția max2 pentru a calcula maximul dintre ele.

 

c) Citiți 4 numere și faceți maximul dintre ele.

Aplicații RETURN

A2.

Scrieți funcții pentru: minimul, suma, diferența, produsul, câtul și restul împărțirii a două numere întregi. Se citesc 3 numere întregi a, b, c. Folosind aceste funcții calculați:

  1. Dublul minimului dintre a și b.

  2. Diferenta dintre produsul numerelor a, b, c și suma lor.

  3. Ultima cifră a lui c.

  4. Suma ultimelor cifre ale lui a, b, c

  5. Penultima cifră a lui c.

  6. Dublul sumei dintre produsul lui a și b și produsul lui b și c

  7. a + b*c -b

  8. a + b/2 - (a - c)

 

Aplicații RETURN

A3.

Scrieți funcții care primesc 2 parametrii reali (double) și returnează: Maximul, suma, diferența, produsul și câtul împărțirii. Se citesc 3 numere întregi a, b, c. Calculați:

  1. Jumătate din maximul dintre b și c.

  2. Diferența dintre maximul celor 3 numere și minimul lor.

  3. Media celor 3 numere

  4. b + a*b/2

  5. (a + c) / (b + c)

 

Aplicații RETURN

A4.

 

Scrieți o funcție sumacif care primește un paramatru întreg x și returnează suma cifrelor lui x. Scrieți o funcție max2 care ia ca parametrii 2 numere int și returnează maximul dintre ele.

  1. Se citesc 3 numere naturale a, b, și c. Afișați maximul dintre sumele cifrelor celor 3 numere.

  2. Se citește un număr n și un șir de n numere naturale.

    • Afișați maximul dintre sumele cifrelor lor

    • Afișați toate numerele care au suma cifrelor maximă.

Aplicații RETURN

A5.

Se citește un număr natural n și n numere naturale. Afișați câte din ele sunt divizibile cu 3 sau au ultima cifră 3. Pentru asta veți declara global șirul a de maxim 100 elemente și numărul n (nr de elemente din șir). De asemenea, veți defini și folosi următoarele funcții:

  • Citire de tip void, fără parametrii, citește de pe ecran elementele șirului

  • Condiție de tip bool va primii ca parametrii un număr și va returna true dacă numărul este divizibil cu 3 sau are ultima cifră 3 și false în caz contrar.

  • Rezolvare de tip int va parcurge șirul și va număra câte elemente respectă condiția. (pentru evaluarea condiției se va folosi funcția). Funcția va returna rezultatul (nr de elemente).

În main veți folosi funcțiile Citire și Rezolvare și veți afișa rezultatul returnat de funcția Rezolvare.

Aplicații diverse

Recap.

 

Scrieți funcția maxim de tipul int care primește ca parametrii 2 numere întregi și returnează maximul dintre ele. În main, folosiți funcția maxim pentru a calcula maximul dintre 3 numere.

 

Aplicații diverse

A2. Se citește un număr natural n și n numere naturale. Afișați câte din ele sunt divizibile cu 3 sau au ultima cifră 3. Pentru asta veți declara global șirul a de maxim 100 elemente și numărul n (nr de elemente din șir). De asemenea, veți defini și folosi următoarele funcții:

  • citire de tip void, fără parametrii, citește de pe ecran elementele șirului

  • condiție de tip bool va primii ca parametrii un număr și va returna true dacă numărul este divizibil cu 3 sau are ultima cifră 3 și false în caz contrar.

  • rezolvare de tip int va parcurge șirul și va număra câte elemente respectă condiția. (pentru evaluarea condiției se va folosi funcția). Funcția va returna rezultatul (nr de elemente).

  • În main veți folosi funcțiile citire și rezolvare și veți afișa rezultatul returnat de funcția Rezolvare.

Aplicații diverse

A3. Se citește un număr natural n urmat de n numere naturale. Să se afișeze diferența dintre suma numerelor pare și suma numerelor impare din șir.

A4. Se citește un număr natural n urmat de n numere naturale. Să se afișeze câte dintre ele au suma cifrelor mai mare decât suma cifrelor vecinului din stânga. Se va folosi o funcție care returnează suma cifrelor unui număr.

A5. Se citește un număr natural n urmat de n numere naturale. Să se afișeze câte dintre ele sunt prime. Se va folosi o funcție de tip bool care verifică dacă un număr este sau nu prim.

A6. Din fișierul “siruri.in” se citește un număr natural n și 3 șiruri a câte n numere naturale. Afișați care dintre șiruri conține mai multe numere pare și câte.

 

Aplicații diverse

A7. Se citește un număr natural n și n numere naturale, câte numere au suma cifrelor pară?

A8. Se citește un număr natural n și n numere naturale. Afișați suma primei cifre a fiecărui element.

     Ex. pentru 4 numere: 123, 456, 63, 16 se va afișa 12 (1+4+6+1)

A9.a Din fișierul data.in se sitesc 3 șiruri de numere naturale, prin numărul de elemente și elemente. În fiecare șir, înlocuiți toate numerele impare cu cel mai mare număr par din acel șir. Dacă nu există cel mai mare par, se va înlocui cu -1.

A9.b Din fișierele a.in,b.in și c.in se sitesc 3 șiruri de numere naturale. În fiecare șir, înlocuiți toate numerele pare cu cel mai mic număr impar din acel șir. Dacă nu există cel mai mic impar, se va înlocui cu 0.

 

Aplicații diverse

Aplicații Practice

AP1. În școala lui Elif, sunt 3 clase de a VII-a. Catalogul fiecărei clase este reprezentat într-un fișier (VIIA.in,VIIB.in,VIIC.in) în felul următor:

Pe prima linie se găsește numărul de elevi din clasă.

Pe a doua linie se găsesc n numere, reprezentând mediile celor n elevi la matematică.

Pe a treia linie se găsesc alte n numere: mediile la Română.

Pe a 4-a linie se găsesc, la fel, mediile la Informatică.

Faceți un program care afișează:

  • Calculați media generală a fiecărei clase. ( media mediilor la toate materiile)
  • Care a fost media generală maximă a unui elev din fiecare clasă.
  • Care clasă a avut cea mai mare medie (pe clasă) la matemaitcă.
  • Care clasă a avut cei mai mulți corigenți la matematică
  • Care clasă a avut cei mai mulți corigenți în total.

Aplicații Practice

AP2. 2 Echipe joacă un joc. Ele adună steaguri colorate de pe un teren. Din fișierele "A.in" și "B.in", se citesc culori reprezentâd steagurile inițiale ae echipei A respecitv B.

Din consolă, la infinit, se pot face 3 operații:

1. adaug steag nou sub forma adaug [nume echipă] [culoare]

2. numar [culoare] număr steagurile de o anumită culoare din ambele echipe și văd care echipă are mai multe

3. salvez - salvează steagurile curente în fișier.

Divizori, primalitate

Divizorii unui număr natural a sunt toate numerele naturale la care se poate împărții exact numărul a. (restul 0).

Aceștia se pot calcula parcurgând toate numerele de la 1 la a și verificând restul împărțirii lui a la acestea.

Numerele prime sunt numerele care au exact 2 divizori

Atenție! numărul 1 nu este prim (are un singur divizor).

Primalitatea numărului n se poate calcula verificând ca nici un număr de la 2 la n să nu fie divizor al lui n.

Cel mai mare divizor comun (cmmdc) a 2 sau mai multe numere, este cel mai mare număr la care acele numere se împart exact.

Cel mai mic multiplu comun (cmmmc) a 2 sau mai multe numere, este cel mai mic număr care se împarte exact la acele numere. Se poate obține înmulțind numerele și împărțindu-le la cmmdc-ul lor.

Aplicații divizori/primalitate

A1. Faceți o funcție de tip int care să calculeze numărul de divizori ai unui număr.

       Se citește un număr n și un șir de n numere naturale. Care este numărul maxim de divizori ai unui număr din șir? Afișați numerele cu număr maxim de divizori.

A2. Faceți o funcție de tip bool care să verifice dacă un număr este prim sa nu.

     Se citește un număr natural n, afișați cel mai mic număr prim mai mare sau egal cu n.

A3. Din fișierul sir.in se citește un număr natural n și un sir de n numere naturale. Afișați cel mai mare prim din șir.

A4. Din fișierul data.in se citește un număr n și un șir de n elemente, apoi se citește un număr m și un șir de m elemente. Care dintre șiruri conține cele mai multe numere prime și câte ?

Aplicații cmmdc / cmmmc

A1. Se citește un număr n și un șir de numere naturale, să se calculeze cel mai mare divizor comun (cmmdc) al tuturor elementelor din șir.

Se va folosi o funcție cmmdc, care va primi prin parametrii 2 numere și va returna cmmdc-ul lor.

Pentru calcularea cmmdc a mai multor numere, se calculează pentru primele 2, apoi dintr rezultat și al 3-lea etc.

A2. Se citește un număr n și un șir de numere naturale, să se calculeze cel mai mare divizor comun (cmmmc) al tuturor elementelor din șir.

Se va folosi o funcție cmmmc, care va primi prin parametrii 2 numere și va returna cmmdc-ul lor.

Pentru calcularea cmmdc a mai multor numere, se calculează pentru primele 2, apoi dintr rezultat și al 3-lea etc.

Aplicații cmmdc / cmmmc

A3. În vara asta, Elsa vrea să o ajute pe mătușa ei Swift, la restaurantul acesteia. Ea trebuie să taie prăjitura, și întâmpină următoarea problemă:

O prăjitură dreptunghiulară de dimensiuni MxN trebuie împărţită în porţii pătrate, de aceeaşi mărime. De asemenea, ea vrea ca porțile să iasă cât mai mari.

Se citesc numerele N și M.

Afișați în câte porții o să împartă Elsa prăjitura și dimensiunea laturii unei porții.

Exemplu:

N = 4

M = 6


Număr porții: 6

Latura unei felii: 2

Aplicații cmmdc / cmmmc

A4. În vara asta, Elsa vrea să o ajute pe mătușa ei Swift, la restaurantul acesteia. Ea trebuie să taie pizza, astfel încât, la fiecare masă, fiecare să primească un număr egal de felii de pizza. Ea nu știe care pizza la care masă va merge, deci trebuie să taie toate pizza astfel încât fiecare să poate fi servită la orice masă.

În restaurant sunt n mese.

Scrieți un program care citind numărul n și numărul de persoane care stau la fiecare masă, să afișeze în câte felii trebuie să taie Elsa pizza.

Funcții

By Academia de Informatică