Sunteți pe pagina 1din 5

Lecia 1 - Elemente de baz ale limbajului C++. Lucrul cu fiiere text.

Clasa a V-a

Etapele rezolvrii unei probleme cu ajutorul calculatorului:

1. Analiza problemei, se refer la:


identificarea datelor de intrare i a datelor de ieire
stabilirea operaiilor care trebuie efectuate asupra datelor de intrare, pentru a obine
datele de ieire

2. Conceperea algoritmului de rezolvare a problemei, se refer la descrierea operaiilor pe pai


(descrierea poate fi fcut n pseudocod sau prin schem logic)

3. Implementarea algoritmului ntr-un limbaj de programare, se refer la scrierea algoritmului


ntr-un limbaj de programare (de ex. C++), ntr-un mediu de programare specific (de ex.
CodeBlocks) se obine astfel codul surs al programului care este compilat i transformat de
ctre mediul de programare n cod executabil, dac este corect sintactic. Erorile de sintax sunt
semnalate de mediul de programare i trebuie neaprat corectate.

Erorile de logic NU se vd la compilare ci la rezultatele produse pe diverse teste.


Atentie la Warnings! Corectati-le!
4. Verificarea corectitudinii algoritmului acest lucru nseamn executarea programului pentru
diferite seturi de date de intrare.
Construii-v teste ct mai variate i ncercai s verificai i cazurile speciale (de ex. N=0)

5. Analiza eficienei (complexitii) algoritmului eficiena unui algoritm are n vedere att
numrul de operaii executate de acesta ct i spaiul de memorie necesar a fi ocupat pe durata
execuiei algoritmului.

//.... comentariu pana la sfarsitul liniei curente

/* .... */ comentariu pe mai multe linii

Structura unui program C/C++

//includerea fisierelor header cu functii predefinite utilizate in program


#include <iostream> //pentru citire-scriere de la /la consola
//declararea constantelor simbolice

using namespace std;

//declarari de variabile globale


//definitii functii utilizator
int main()
{
//declarari variabile locale
//instructiuni care implementeaza algoritmul de rezovare al problemei
return 0;
}

1
Lecia 1 - Elemente de baz ale limbajului C++. Lucrul cu fiiere text.
Clasa a V-a

Materia prim cu care lucreaz programele sunt: date i expresii.

Datele pot fi:

a) variabile
O variabil are alocat o zon de memorie, are un nume, un tip i o valoare ataat.

ATENIE! Orice variabil trebuie declarat nainte de a fi utilizat n program.


Iniializai varibilele explicit ct mai aproape de locul n care le utilizai pentru a citi, a nelege i a
depana mai uor codul surs
b) constante sunt date care nu-i schimb valoarea pe parcursul execuiei programului.
Declararea unei constante simbolice in C++: #define NMAX 1000000

Dup tipul lor, datele pot fi: date numerice si date de tip caracter.

Tipuri de date simple (o singur valoare n zona de memorie alocat):

Tip Dimensiune memorie Domeniu de valori


ocupat
int 4 octeti aprox. -2*109 .. 2*109
long 4 octeti aprox. -2*109 .. 2*109
short int 2 octeti -32768 .. 32767
long long 8 octeti aprox. -9*1017 .. 9*1017
unsigned int, 4 octeti aprox. 0 .. 4*109
unsigned long
usigned long long 8 octeti aprox. 0 .. 18*1017
float 4 octeti Valoare numeric cu zecimale, simpl precizie (6 )
double 8 octeti Valoare numeric cu zecimale, dubla precizie (10 )
long double 10 octeti Valoare numeric cu zecimale, dubl precizie
char octet Caractere cu coduri ASCII cuprinse ntre 0 i 255
(ex: A are codul 65, a are codul 97, 0 are codul 48)

Operatii posibile cu variabile de tip numeric: * (nmulire) , / (div, ctul mpririi), % (mod, restul
mpririi), + (adunare), - (scdere)

Ex: 13 / 5 este 2 iar 13 % 5 este 3 (restul mpririi lui 13 la 5)

N % 10 este ultima cifr a lui N (cifra unitilor)

Operatii posibile cu variabile de tip numeric: * (nmulire) , / (div, ctul mpririi), % (mod, restul
mpririi), + (adunare), - (scdere)

Ex: 13 / 5 este 2 iar 13 % 5 este 3 (restul mpririi lui 13 la 5)

N % 10 este ultima cifr a lui N (cifra unitilor)

2
Lecia 1 - Elemente de baz ale limbajului C++. Lucrul cu fiiere text.
Clasa a V-a

Expresiile

O expresie este format dintr-o succesiune de operanzi intercalai de operatori, care respect reguli
sintactice i de asociere.

ex: 2*(a+1)-b este o expresie aritmetic cu operatorii *, +, - (evaluarea ei produce o valoare


numeric)

Expresie de tip caracter: c + a A (transforma caracterul litera mare memorat in variabila c din litera
mare in litera mica)

Operaii implementate in C++

n cadrul algoritmului, cu datele putem efectua:

operaia de citire / scriere Implementare C++


Citire de la tastatura (fiier standard de intrare) Citire din fiier text
#include <iostream> #include <fstream>
using namespace std; using namespace std;
ifstream fin(......);
ofstream fout(......);
cin >> var1 >> var2 >> ...; fin >> var1 >> var2 >> ...;
unde var1, var2,... sunt variabile declarate
anterior in program
cout << exp1 << exp2 << ...; fout << exp1 << exp2 << ...;
unde exp1, exp2, ... sunt expresii ce se vor afisa
in ordine
cout << \n;
determina trecerea la o linie noua

operaia de atribuire permite efectuarea de calcule; este operaia prin care o variabil primete o
valoare constant sau rezultatul evalurii unei expresii.
ATRIBUIREA NU ESTE EGALITAEA MATEMATIC!!!
variabila = expresie;
Intotdeauna, in partea stanga a unei atribuiri trebuie sa fie o variabila si nu o expresie (variabila are
memorie alocata, expresia NU are)
Ex:
a = b + 1; nu este echivalent cu b + 1 = a;

calculul radicalului
#include <cmath>
....
int n, x;
....
x = sqrt(n); //va atribui lui x cel mai mare numar pentru care x2<=n (daca n=28 atunci x=5)

verificarea unui numar daca este patrat perfect


int (sqrt(n)) == sqrt(n)

3
Lecia 1 - Elemente de baz ale limbajului C++. Lucrul cu fiiere text.
Clasa a V-a

operaia de decizie n funcie de ndeplinirea sau nendeplinirea unei condiii, algoritmul /


programul se ramific

if (expresie logica)
//instructiuni ramura DA
else //instructiuni ramura NU

Expresiile logice au rezultat valori de adevar (valoare nenula adevarat, valarea 0 fals)

Operatori relationali: <, <=, >, >=

Operatori de egalitate: == (egal), != (diferit)

Operatori logici: ! (negatia), && (i, conjuncia), || (sau, disjuncia)

! && 0 1 || 0 1
0 1 0 0 0 0 0 1
1 0 1 0 1 1 1 1

Regulile lui de Morgan


!(E1 && E2) = !(E1) || !(E2)
!(E1 && E2) = !(E1) || !(E2)

Ex:
x [a,b] <=> (x>=a && x<=b)

A este un an bisect (divizibil cu 4 si nu este multiplu de 100 sau divizibil cu 400)


(x % 4 == 0 && x % 100 != 0) || (x % 400 == 0)
1900 nu este bisect desi se divide cu 4; 1920 si 2000 sunt ani bisecti

Instruciuni repetitive:
while (expresie logica) do { for (i = exp_init; i <= exp_fin; i++)
//instructiuni //instructiuni // instructiuni
} while (expresie logica);

Aplicaii
1. Cifra de control a unui numr se obine calculnd suma cifrelor sale. Dac aceast valoare are mai
mult de o cifr se repet procedeul pentru sumele obinute pn cnd se obine un numr cu o
singur cifr, care reprezint cifra de control.
Ex: n = 1891, s = 1 + 8 + 9 + 1 = 29, s = 2 + 9 = 11, s = 1 + 1 = 2 care este cifra de control a lui 1891
a) Se citeste de la tastatur un numr natural n < 1017. S se afieze cifra de control a lui n.
b) S se determine cte numere mai mici strict dect n au aceeai cifr de control ca i n.
2. Din fiierul text date.in se citesc a i b dou numere naturale ((0 a , b 2.000.000.000, a 0). S
se scrie n date.out ultima cifr a lui a ridicat la puterea b.

4
Lecia 1 - Elemente de baz ale limbajului C++. Lucrul cu fiiere text.
Clasa a V-a

3. S se determine numrul ptratelor perfecte cuprinse n intervalul nchis [a, b], cu a, b doua
numere naturale citite din fisierul text patrate.in (1 a < b 1.000.000). Scriei n fiierul de ieire
patrate.out pe prima linie numrul de ptrate din interval iar pe linia urmtoare, separate prin cte
un spaiu, n ordine cresctoare, aceste ptrate.
4. Se citete din fiierul cifre.in un numr natural n (1 n 1.000.000). S se scrie n cifre.out, pe
prima linie, numrul de cifre pe care l-ar avea irul tuturor numerelor de la 1 la n scrise unul dup
cellalt, n ordine cresctoare.
De ex., dac n = 23, irul 1234567891011121314151617181920212223 are 37 cifre.
5. Se citete din fiierul date.in un numr natural n (1 n 1.000.000). S se scrie n date.out, pe o
linie, separate prin cte un spaiu, numerele mai mici sau egale cu n care au un numr impar de
divizori.
6. Se citesc din fiierul text cifre.in n, un numar natural nenul (1 n 100.000) apoi, din linia
urmtoare, n caractere cifr aflate pe poziii alturate, fr spaii. S se scrie n fiierul de ieire
cifre.out ctul i restul mpririi sumei cifrelor impare la numrul cifrelor pare nenule. Cele dou
valori vor fi scrise pe o linie separate prin spaiu.
Transformarea unui caracter cifra in cifra pe care o reprezint: cif = c 0;
cifre.in cifre.out Explicatii
20 4 7 Suma cifrelor impare = 1+3+9+9+1+7+9 = 39
12002394941002847092 Numarul cifrelor pare nenule = 8
39 /8 = 4; 39 % 8 = 7

Tema

http://varena.ro problemele: la scoala, cangur, vampiri


http://campion.edu.ro problemele: ucif, cifra1, multimi

Trimitei soluiile pe adresa mirela.tibu@gmail.com sub forma unei arhive denumit cu numele vostru.
Creai arhiva urmnd paii:
1. Creai un folder cu numelevostru_tema1
2. Copiati una cte una sursele main.cpp n acest folder i redenumii-le cu numele problemei
3. Arhivai acest folder pastrand numele arhivei identic cu al folderului
4. Ataai arhiva la email-ul pe care l trimitei la adresa mirela.tibu@gmail.com

Termen: 13 nov 2015, ora 21

SUCCES!

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