LIMBAJUL DE PROGRAMARE C++
ALGORITMI
OBIECTELE CU CARE LUCREAZA ALGORITMII
1. Date
Datele pot fi:
– numerice , care pot fi intregi sau reale ;
– logice , care au doua valori TRUE (adevarat) si FALSE(fals) ;
– sir de caractere , reprezinta un sir de caractere cuprins intre apostrofuri ex. ‘mesaj’
2. Variabile
Sunt urmatoarele tipuri de variabile:
– variabile de tip intreg notate integer ;
– variabile de tip real notate real ;
– variabile de tip logic notate boolean ;
– variabile de tip sir notate string ;
Pentru ca un algoritm sa poata folosii o variabila aceasta trebuie declarata astfel:
integer a, b;
real c;
string b.
3. Expresii
O expresie este alcatuita din doi sau mai multi operanzi legati intre ei prin operatori.
Operanzii reprezinta valorile care intra in calcul si care pot fii variabile sau constante.
Operatorii desemneaza operatiile care se executa spre a obtine rezultatul. Pot fi aritmetici, relationali, logici
3.1. Operatori aritmetici
+ (adunare) ; – (scadere) ; * (inmultire) ; / (impartire)
– div (impartire intreaga) – operanzii trebuie sa fie de tip intreg si furnizeaza rezultatul corect daca ambele valori ale operanzilor sunt naturale.
Ex. 14 div 5 rezultatul va fi 2 (5 intra de 2 ori in 14)
– mod (rest al impartirii) – operanzii trebuie sa fie de tip intreg si furnizeaza rezultatul corect daca ambele valori ale operanzilor sunt naturale
Ex. 14 mod 5 rezultatul va fi 4 (restul impartirii lui 14 la 5 este 4)
3.2. Operatori relationali
<(mai mic); >(mai mare); =(egal); <>(diferit); <=(mai mic sau egal); >=(mai mare sau egal)
3.3 Operatori logici
NOT (negare) ; AND (si) ; OR(sau) ; XOR (sau exclusiv)
A2. OPERATIILE PE CARE LE EFECTUEAZA UN ALGORITM
1. Operatii de intrare / iesire
Operatia de intrare (citire) este read
Operatia de iesire (scriere) este write
Exemplu:
real a,b,c; // se declara variabilele a,b,c//
read a,b,c // se citesc variabilele a,b,c//
write a,b,c // se afiseaza valorile variabilelor a,b,c introduse de la tastatura//
2. Atribuiri
Prin operatia de atribuire se retine o anumita data intr-o variabila.
Tipul variabilei trebuie sa coincida cu tipul valorii atribuite, cu exceptia ca unei variabile de tip real i se poate atribui o data de tip intreg.
Exemple de forma1:
integer a;
a:=10; // variabila a retine valoarea 10//
real b;
b:=9.55 //variabila b retine valoarea 9.55//
real c;
c:=8; // variabila c retine valoarea 8//
string d;
d:=’limbajul C++’ ; // variabila d retine valoarea de tip sir limbajul C++
Exemple de forma 2:
a) integer a,b;
a:=5 b:=10;
a:=b // variabilei a i se atribuie valoarea variabilei b //
Dupa aceasta operatie variabila a are valoarea 10 iar variabila b ramine cu valoarea 10
b) integer a,b;
a:=5 b:=10;
b:=a // variabilei b i se atribuie valoarea variabilei a //
Dupa aceasta operatie variabila a ramine cu valoarea 5 iar variabilei b i se atribuie valoarea 5
c) integer a;
a:=5;
a:=a+1
Dupa aceasta operatie variabilei a i se atribuie valoarea 6 (5+1=6)
Pentru a inversa continutul a doua variabile intre ele trebuie utilizata o variabila auxiliara care realizeaza interschimbul de valori.
Exemplu:
integer a,b,m;
a:=1 b:=2;
m:=a //variabila m preia valoarea variabilei a si devine 1//
a:=b //variabila a preia valoarea variabilei b si devine 2//
b:=m //variabila b preia valoarea variabilei m si devine 1//
3. Operatii de decizie
Forma generala:
if expresie logica then operatia1 else operatia2 endif
Mod de executie: se evalueaza expresia logica, daca este adevarata se executa operatia 1, iar daca este falsa se executa operatia 2
Exemplul1.
integer a, b;
read a read b
if a>b then write a else write b
endif
Se citesc valorile variabilelor a si b. Daca valoarea lui a este mai mare decit valoarea lui b se afiseaza valoarea lui a, iar daca este invers se afiseaza valoarea lui b.
Exemplul 2.
Se citesc patru valori reale a,b,c,d si se evalueaza expresia:
a+b , c+d>0
E = a-b , c+d=0
a*b , c+d<0
real a, b, c, d, rez;
read a, b, c, d
if c+d>0 then rez:=a+b
else
if c+d=0 then rez:=a-b
else
rez:=a*b
endif endif
write rez
B. PRINCIPIILE PROGRAMARII STRUCTURATE
1. Structura liniara
Exemplul1. Se citesc 2 valori si se afiseaza valoarea cea mai mare
real a, b;
read a, b
if a>b then write a else write b
endif
Exemplul 2. Se citesc 2 valori intregi a si b si se afiseaza media lor aritmetica
integer a, b
real medie
read a, b
medie:=(a+b)/2
write medie
2.Structura alternativa
Exemplul1. Se citeste o valoare intreaga. Daca aceasta este para se tipareste mesajul”am citit un numar par”
integer a;
read a
if a mod 2 = 0 write ‘am citit un numar par’
endif
Exemplul 2. Se citeste x numar real. Evaluati expresia:
x, x<0
2x 0≤x<10
f= 3x 10≤x<100
4x x≥100
real x,f;
read x;
if x<0 then f:=x
else
if x<10 then f:2*x
else
if x<100 then f:=3*x
else f:=4*x
endif endif endif
write f
3. Structura repetitiva
3.1. Structura WHILE DO
Forma generala. Fie E o expresie si S o structura.
while E
do S
endwhile
Se evalueaza expresia logica E, daca este adevarata se executa structura S apoi se repeta executia pina ce expresia logica devine falsa.
Exemplu. Se citesc numerele naturale n1 si n2 si se calculaeaza produsul lor fara a utiliza operatorul de inmultire.
integer n1, n2, s, i;
read n1 read n2
s:=0 i:=1
while i <= n2 do
s:=s+n1
i:=i+1
endwhile
write s
3.2. Structura FOR
Forma generala. Fie o variabila i (variabila de ciclare) si doua valori intregi a(valoare initiala) si b(valoare finala) si o structura S
for i:=a, b
S
repeat
Variabila de ciclare i ia valoarea initiala a, si se executa structura S pina ce se ajunge la valoarea finala b
Exemplu. Se citeste numarul natural n si se efectueaza suma primelor n numere naturale
integer n, s, i;
read n
s:=0
for i:=1, n
s:=s+i
repeat
write s
3.3 Structura REPEAT UNTIL
Forma generala.
Fie o structura S si o expresie logica E
repeat
S
until E
Se executa structura S, se evalueaza expresia E, daca este falsa se executa din nou structura S, iar daca este adevarata se trece mai departe
Exemplu. Calculul sumei primelor n numere naturale n>0
integer n, i, s;
read n
i:=1 s:=0
do
s:=s+i
i:=i+1
until i > n
write s
C. ELEMENTELE DE BAZA ALE LIMBAJULUI C++
Un program scris in C++ este alcatuit din una sau mai multe functii. Fiecare functie are mai multe instructiuni in C++ care codifica algoritmul programului. Instructiunile unei functii reprezinta corpul functiei si sunt cuprinse intre { }. Dupa fiecare instructiune din corpul functiei se pune semnul ;
Functiile de acelasi domeniu sunt grupate in fisiere header numite si directive.
La inceputul fiecarui program se specifica fisierele care contin functiile ce se utilizeaza in program astfel: # include <numefisier.h>
Dupa specificarea directivelor trebuie scrisa functia radacina care se numeste main( ) sau void main( ). Dupa numele directivelor sau a functiilor nu se pune semnul ;
1. Citiri , scrieri.
– pentru realizarea citirii se utilizeaza : cin>>nume variabila
cin>>a>>b>>c – citeste variabilele a, b, c
– pentru realizarea scrierii se utilizeaza: cout<<nume variabila
cout<<a<<b<<c – scrie variabilele a, b, c
Exemplul 1:
#include<iostream.h>
#include<conio.h>
void main()
{
int L,l,h;
clrscr(); // sterge ecranul //
cout<<„Lungimea=” ; cin>>L;
cout<<„Latimea=”; cin>>l;
cout<<„Inaltimea=”; cin>>h;
getch(); // in C++ sub DOS permite vizualizarea rezultatului programului//
}
Exemplul 2:
#include<iostream.h>
#include<conio.h>
void main()
{
int L,l,h,v;
clrscr();
cout<<„Lungimea=” ; cin>>L;
cout<<„Latimea=”; cin>>l;
cout<<„Inaltimea=”; cin>>h;
v=L*l*h;
cout<<„Volumul este”<<” „<<v;
getch();
}
2. TIPURI DE DATE.
2.1. TIPURI INTREGI.
– int (tip intreg care ocupa 16 biti)
– long (tip intreg care ocupa 32 de biti)
– unsigned int sau unsigned long (valorile datelor sunt fara semn, adica pozitive)
– char (tip caracter, aceste date se pun intre doua apostrofuri ‘ ‘ )
2.2. TIPURI REALE
– float (tip real care retin si numerele zecimale , ocupa 32 biti)
ATENTIE!! IN C++ LA SCRIEREA UNUI NUMAR ZECIMAL IN LOCUL VIRGULEI SE PUNE PUNCT
– double ( tip real care ocupa 64 biti)
– long double (tip real care ocupa 80 biti)
2.3. CONSTANTE
Pentru a da un nume constantelor se foloseste declaratia const care are forma:
const [tip] nume=valoare ;
[tip] – tipul constantei ; nume -numele constantei ; valoare – valoarea constantei
Exemplu:
const float a=12.6 constanta este de tip float, poarta denumirea a, are valoarea 12,6
3. OPERATORI C++
3.1. OPERATORI ARITMETICI.
+ (adunare) ; – (scadere) ; * (inmultire) ; / (impartire) ; % (restul impartirii intregi)
3.2. OPERATORI RELATIONALI.
< (mai mic) ; <= (mai mic sau egal) ; > (mai mare) ; >= (mai mare sau egal)
3.3. OPERATORI DE EGALITATE.
== (egalitate) ; != (inegalitate)
3.4. OPERATORI DE INCREMENTARE SI DECREMENTARE.
++ (incrementare) ; – (decrementare)
Operatorii pot fi : prefixati (in fata operandului) situatie in care variabila este incrementata sau decrementata inainte ca valoarea retinuta de ea sa intre in calcul
postfixati (dupa operand) situatie in care variabila este incrementata sau decrementata dupa ce valoarea retinuta de ea intra in calcul
Exemplu:
Daca a si b sunt variabile de tip int care retin valorile 1 si 3 atunci:
a++*b++ produce valoarea 3, dupa evaluare cele 2 variabile retin 2 si 4
++a*++b produce valoarea 8, dupa evaluare cele 2 variabile retin 4 si 4
3.5. OPERATORI LOGICI
! – negare logica ; && – SI logic ; || SAU logic
3.6. OPERATORI DE ATRIBUIRE
Apare foarte frecvent si reprezinta memorarea unei valori intr-o variabila
Este reprezentata prin semnul =
a=3 (atribuie variabilei a valoarea 3)
Se mai utilizeaza operatori de atribuire combinati:
+= ; -= ; *= ; /= ; %= ; &= ; <<= ; >>=
Exemplu: a=a+b este echivalent cu a+=b ; a=a*b este echivalent cu a*=b
3.7. OPERATORUL CONDITIONAL.
Forma generala e1 ? e2 : e3
Se evalueaza e1, daca este adevarata se executa e2, daca este falsa se executa e3
Exemplu: Citirea unuui numar x si tiparirea numarului |x| (modulul numarului x)
#include<iostream.h>
#include<conio.h>
void main()
{
float x;
clrscr();
cout<<„x=” ; cin>>x; cout<<„|x|=”<<” „<<(x>=0?x:-x);
getch();
}
D. INSTRUCTIUNILE LIMBAJULUI C++
1. INSTRUCTIUNEA EXPRESIE.
Exemplul1. Interschimbarea continutului a 2 variabile care au fost initial citite.
#include<iostream.h>
#include<conio.h>
void main()
{
int a,b,m;
clrscr();
cout<<„a=” ; cin>>a;
cout<<„b=”; cin>>b;
m=a,a=b,b=m;
cout<<„a=”<<” „<<a<<endl;
cout<<„b=”<<” „<<b;
getch();
}
Exemplul2. Se citesc 3 valori intregia,b,c si se afiseaza media lor aritmetica
#include<iostream.h>
#include<conio.h>
void main()
{
int a,b,c;
float m;
clrscr();
cout<<„a=” ; cin>>a;
cout<<„b=”; cin>>b;
cout<<„c=” ; cin>>c;
m=float(a+b+c)/3;
cout<<„media aritmetica =”<<” „<<m;
getch();
}
2. INSTRUCTIUNEA IF.
Forma generala:
if (expresie) instructiune1 else instructiune2
Se evalueaza expresia, daca esteadevarata se executa instructiune1, daca este falsa se executa instructiune2
Exemplul 1. Calculeaza maximul dintre 2 numere citite
#include<iostream.h>
#include<conio.h>
void main()
{
int a,b,max;
clrscr();
cout<<„a=” ; cin>>a;
cout<<„b=”; cin>>b;
if(a>b) max=a;
else max=b;
cout<<„numarul mai mare este „<<” „<<max;
getch();
}
Exemplul 2. Se citesc coeficientii a, b, c ale unei ecuatii de gradul doi si se precizeaza natura radacinilor si semnul lor.
#include<iostream.h>
#include<math.h>
#include<conio.h>
void main()
{
float a,b,c,d,s,p;
clrscr();
cout<<„a=”;cin>>a;cout<<„b=”;cin>>b;cout<<„c=”;cin>>c;
d=b*b-4*a*c; s=float(-b/a); p=float(c/a);
cout<<„Discriminantul ecuatiei D=”<<d<<endl;
cout<<„Produsul radacinilor P=”<<p<<endl;
cout<<„Suma radacinilor S=”<<s<<endl;
if(d<0) cout<<„Ecuatia nu are solutii reale”;
else
{ if(d==0) {if(s>0) cout<<„Ecuatia are 2 solutii reale egale si pozitive”;
else cout<<„Ecuatia are 2 solutii reale egale si negative”;
}
else
if(p>0)
{if(s>0) cout<<„Ecuatia are 2 solutii reale pozitive”;
else cout<<„Ecuatia are 2 solutii reale negative”;
}
else cout<<„Ecuatia are 2 solutii reale de semne opuse”;
}
getch();
}
Exemplul 3. Rezolvarea unei ecuatii de gradul 1.
#include<iostream.h>
#include<conio.h>
void main()
{
float a,b,x;
clrscr();
cout<<„a=” ; cin>>a;
cout<<„b=”; cin>>b;
if (a!=0)
{x= -b/a ;cout<<„x=”<<” „<<x; }
else
if(b==0) cout<<„ecuatia are o infinitate de solutii”;
else cout<<„ecuatia nu are solutie”;
getch();
}
Exemplul 4. Rezolvarea unei ecuatii de gradul 2.
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
float a,b,c,d,x1,x2,x;
clrscr();
cout<<„a=” ; cin>>a;
cout<<„b=”; cin>>b;
cout<<„c=” ; cin>>c;
d=float( b*b-4*a*c);cout<<„discriminantul ecuatiei este”<<” „<<sqrt(d)<<endl;
if(d<0) {cout<<„ecuatia nu are solutii reale”;}
else
if (d>0)
{ x1=(-b+sqrt(d)) / (2*a) ; x2=(-b-sqrt(d)) / (2*a);
cout<<„x1=”<<x1<<endl;cout<<„x2=”<<x2<<endl;}
else
{x=float(-b/2*a);cout<<„ecuatia are solutie unica x=x1=x2=”<<” „<<x;}
getch();
}
3. INSTRUCTIUNEA SWITCH.
Forma generala a instructiunii:
switch (expresie) {
case e1 : secventa 1 ; break;
case e2 : secventa 2 ; break;
……………………………………….
case en : secventa n ; break;
default : secventa n+1;
}
Se evalueaza expresie , daca este egala cu una din expresiile e1, e2, …en se executa secventa corespunzatoare expresiei s1, s2, …sn, iar daca nu este egala cu una din aceste expresii se executa numai secventa n+1
Exemplul 1.
#include<iostream.h>
#include<conio.h>
void main()
{
int i;
clrscr();
cin>>i;
switch(i)
{ case 1: cout<<„Am citit 1”;break;
case 2: cout<<„Am citit 2”;break;
default: cout<<„Am citit altceva”;
}
getch();
}
Exemplul2. Se afiseaza natura sol. unei ec. de gr.2 in functie de semnul lui ∆.
#include<iostream.h>
#include<conio.h>
void main()
{
int a,b,c,d;
clrscr();
cout<<„a=”;cin>>a;cout<<„b=”;cin>>b;cout<<„c=”;cin>>c;
d=b*b-4*a*c;
if(d>=0)
{
switch(d)
{
case 0: cout<<„Ecuatia are o solutie dubla”;break;
default:cout<<„Ecuatia are doua solutii reale diferite”;
}
}
else cout<<„Ecuatia nu are solutii reale”;
}
4. INSTRUCTIUNEA WHILE.
Aceasta instructiune permite programarea ciclurilor cu test initial.
Forma generala este:
while (expresie)
{……. instructiuni }
Se evalueaza expresie, daca este adevarata se executa {….instructiuni} dupa care se revine la evaluarea expresiei , daca este falsa se trece la instructiune urmatoare.
Exemplu. Executarea unui program intr-un ciclu repetat pana la apasarea unei anumite taste(se introduc coeficientii unei ec. de gr.2 si se afiseaza solutiile de „n” ori pina la apasarea tastei „q”)
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
float a,b,c,d,x1,x2,x;
int tasta;
while(tasta!=’q’)
{
clrscr();
cout<<„a=” ; cin>>a;
cout<<„b=”; cin>>b;
cout<<„c=” ; cin>>c;
d=float( b*b-4*a*c);cout<<„discriminantul ecuatiei este”<<” „<<sqrt(d)<<endl;
if(d<0) {cout<<„ecuatia nu are solutii reale”;}
else
if (d>0)
{ x1=(-b+sqrt(d))/(2*a) ; x2=(-b-sqrt(d))/(2*a);
cout<<„x1=”<<x1<<endl;cout<<„x2=”<<x2<<endl;}
else
{x=float(-b/2*a);cout<<„ecuatia are solutie unica x=x1=x2=”<<” „<<x<<endl;}
cout<<„Pentru continuare apasa o tasta”<<endl;
cout<<„Pentru iesire apasa tasta q”;
tasta=getch();
}
}
5. INSTRUCTIUNEA DO WHILE.
Instructiunea permite programarea ciclurilor cu test final.
Forma generala este:
do
{ instructiuni }
while ( expresie )
Se executa { instructiuni } , se evalueaza expresie, daca este adevarata se executa din nou {instructiuni}, iar daca este falsa executia instructiunii do se termina.
Exemplu: Se citeste numarul natural n si se afiseaza suma primelor n numere naturale
#include<iostream.h>
#include<conio.h>
void main()
{
long n, tasta,s=0,i=1;
while(tasta!=’q’)
{
clrscr();
cout<<„n=”;cin>>n;
do
{
s=s+i; i=i+1;
}
while(i<=n);
cout<<„Suma primelor n numere naturale este”<<” „<<s<<endl;
cout<<„Pentru a continua apasa o tasta”<<endl<<„Pentru a iesi din program apasa tasta ‘q'”;
tasta=getch();
}
}
6. INSTRUCTIUNEA FOR
Se utilizeaza cel mai fracvent pentru programarea ciclurilor cu test initial.
Forma generala:
for( eINITIALIZARE; eTEST; eINCREMENTARE) instructiune
eINITIALIZARE – se evalueaza o singura data pentru initializarea variabilei de ciclare inaintea primului ciclu ;
eTEST – este evaluata inaintea fiecarui ciclu pentru a testa daca se executa instructiunea subordonata si reprezinta conditia de iesire din ciclu;
eINCREMENTARE – se evalueaza la sfirsitul fiecarui ciclu pentru incrementarea variabilei de ciclare.
Principiul de executie:
Se evalueaza eINITIALIZARE(numai la prima rulare), se evalueaza eTEST , daca este adevarata se executa instructiunea subordonata for, se evalueaza eINCREMENTARE si se revine la evaluarea expresiei eTEST. Daca eTEST este falsa se trece la urmatoarea instructiune (se termina executarea instructiunii for)
Observatie. Daca expresia eTEST este vida se executa un ciclu infinit. Pentru a iesi din acest ciclu : in DOS se tasteaza CTRL+PAUSE
in WINDOWS se tasteaza CTRL +ALT + DEL
Exemplul 1. Se introduce de la tastatura numarul n si se calculeaza suma si produsul primelor n numere
#include<iostream.h>
#include<conio.h>
void main()
{ N2
int i,n,tasta;
long double a,b;
while(tasta !=’q’) {
clrscr();
cout<<„Introduceti numarul”<<„”;cin>>n;
a=b=1;
for(i=2;i<=n;i++)
{a*=i;b+=i;}
cout<<„suma=”<<b<<endl;cout<<„produsul=”<<a<<endl;
cout<<„Pentru iesire apasa tasta q”;
tasta=getch(); }
}
Observatie. Variabila n poate fi definita la inceput fara a mai trebui introdusa de la tastatura utilizand #define n valoare (comanda se scrie inainte de void main() )
Exemplul2. Afisarea literelor alfabetului
#include<iostream.h>
#include<conio.h>
void main()
{
char litere;
for(litere=’A’;litere<=’Z’;litere++)cout<<litere<<” „;
getch();
}
Exemplul3. Afiseaza toate patratele si radicalii numerelor naturale pina la numarul n introdus de la tastatura.
#include<iostream.h>
#include<conio.h>
#include<math.h>
void main()
{
float i,n,a,b;
clrscr();
cout<<„n=”;cin>>n;
a=b=0;
for(i=1 ;i<=n;i++) {
a=sqrt(i) ; b=i*i;
cout<<„Patratul numarului”<<” „<<i<<” = „<<b<<‘\t'<<
„Radicalul numarului”<<” „<<i<<” =”<<a<<endl;
}
getch();
}
Exemplul4.
7. INSTRUCTIUNI DE SALT
7.1. INSTRUCTIUNEA BREAK
Se utilizeaza pentru intreruperea neconditionata a unei secvente si numai in 2 contexte:
1) in instructiunea switch pentru a marca incheierea secventei de instructiuni asociate unei selector case ;
2) intr-o instructiune de ciclare (while, do while, for) pentru a determina iesirea fortata din ciclul respectiv.
Observatie. Instructiunea break intrerupe executia de ciclare doar a blocului in care se afla, fara a afecta celelalte blocuri de ciclare in cazul ciclurilor imbricate.
7.2. INSTRUCTIUNEA CONTINUE
Se utilizeaza numai in blocul instructiunilor de ciclare pentru a intrerupe executia iteratiei curente (sarind peste instructiunea urmatoare) dupa care:
– in cazul instructiunilor while si do while se continua cu testarea conditiei de ciclare;
– in cazul instructiunii for se continua cu evaluarea expresiei eINCREMENTARE (actualizarea contorilor) si apoi a expresiei eTEST (testarea conditiei de ciclare)
7.3. INSTRUCTIUNEA GO TO
Are ca efect intreruperea secventei curente si continuarea executiei de la instructiunea care este specificata dupa go to.
Observatie. Instructiunile de salt se utilizeaza rar in C++ deoarece incalaca principiile programarii structurate, pentru abandonarea executiei unui ciclu se utilizeaza in general functiile exit() sau return.
E. TIPURI DE DATE STRUCTURATE
1. TABLOURI
1.1. TABLOURI IN C++
Tabloul este o lista de elemente de acelasi tip plasate succesiv intr-o zona de memorie.
Tablourile por fii : simple (vector) sau multiple (matrice)
Exemple:
– int v[10] ; am declarat un vector cu 10 componente de tip intreg care au indici intre 0 si 9 , v[0], v[1],………v[9]
– float a[10], b[20] ; am declarat doi vectori a si b care au 10 respectiv 20 de componente de tip real
– int a[10][20] ; am declarat o matrice cu 10 linii si 20 coloane cere se adreseaza astfel:
a[0][0], a[0][1], a[0][2],………..a[9][19].
Un tablou poate fi initializat cu un set de valori astfel:
– int a[5]={-2,4,8,1,9} ;
– int b[3][4]={ {11,12,13,14}, {21,22,23,24}, {31,32,33,34} } ;
Exemplul1. Afisarea unei matrici cu componentele declarate initial.
#include<iostream.h>
#include<conio.h>
void main()
{
int a[3][3]={11,12,13,21,22,23,31,32,33};
int i,j;
for(i=0;i<3;i++){
for(j=0;j<3;j++)
{
cout<<a[i][j]<<‘ ‘;
}
cout<<endl;
}
getch();
}
Rezultatul programului va fii afisarea urmatoarei matrici:
11 12 13
21 22 23
31 32 33
Exemplul2. Se introduce numarul de linii m si numarul de coloane n ale unei matrici, se intoduc elementele matricii apoi se afiseaza matricea creata.
#include<iostream.h>
#include<conio.h>
void main()
{
int i,j,m,n,a[10][10];
clrscr();
cout<<„Introduceti numarul de linii”<<” „<<„n=”;cin>>m;
cout<<„Introduceti numarul de coloane”<<” „<<„n=”;cin>>n;
cout<<„Intoduceti elementele”<<endl;
for(i=1;i<=m;i++) {
for(j=1;j<=n;j++) {
cout<<„a[„<<i<<j<<„]=”, cin>>a[i][j];
}
}
cout<<„Matricea intodusa are forma:”<<endl<<‘\t'<<‘\t'<<‘\t'<<‘\t’;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++) {
cout<<a[i][j]<<‘ ‘;
}
cout<<endl<<‘\t'<<‘\t'<<‘\t'<<‘\t’;
}
getch();
}
Exemplul3. Se introduc valorile componentelor unui vector a[100] si se atribuie aceste valori componentelor vectorului b[100].
#include<iostream.h>
#include<conio.h>
void main()
{
int n,i,a[100],b[100];
clrscr();
cout<<„Introduceti numarul de componente n=”<<” „;cin>>n;
for(i=1;i<=n;i++)
{ cout<<„a[„<<i<<„]=”;cin>>a[i];}
for(i=1;i<=n;i++) b[i]=a[i];
cout<<endl;
for(i=1;i<=n;i++) cout<<„b[„<<i<<„]=”<<b[i]<<‘\t’;
getch();
}
1.2. ALGORITMI FUNDAMANTALI CARE LUCREAZA CU VECTORI.
1.2.1. MAXIM, MINIM.
O variabila preia continutul primei componente a vectorului (max=v[0] sau min=v[0]), apoi o compara pe rind cu celelalte componente ale vectorului, iar in functie de conditia care se pune in program variabila va retine componenta cu valoare maxima sau componente cu valoare minima.
Pentru maxim :
max=v[0] ; if(v[i]>max) max=v[i]
Pentru minim ;
min=v[0] ; if(v[i]<min) min=v[i]
Exemplu. Se introduc valorile componentelor unui vector si se afiseaza valoarea maxima si valoarea minima.
#include<iostream.h>
#include<conio.h>
void main()
{
int max,min,n,i,v[100];
cout<<„Introduceti numarul de elemente n=”; cin>>n;
for(i=1;i<=n;i++)
{cout<<„v[„<<i<<„]=”;cin>>v[i];};
max=v[0];
for(i=1;i<=n;i++) if(v[i]>max) max=v[i] ;
cout<<„Valoarea maxima citita este”<<” „<<max<<endl;
min=v[0];
for(i=1;i<=n;i++) if(v[i]<min) min=v[i];
cout<<„Valoarea minima citita este”<<” „<<min;
getch();
}
1.2.2. ELEMENTE DISTINCTE.
Se citeste un vector cu n componente si se decide daca numerele citite sunt distincte (nu exista doua numere egale) sau daca nu sunt distincte (exista doua numere egale).
Pentru a rezolva problema se procedeaza astfel:
– o variabila i retine indicele primei componente
– o variabila j retine indicele urmatoarelor componente
Ex: cand i=1 j=2,3,……..n
cand i=2 j=3,4,……..n
cand i=n j=n-1
– se initializeaza o variabila gasit cu valoarea logica 0
–– daca sunt gasite doua valori egale variabilei gasit i se atribuie vloarea logica 1
Exemplu.
#include<iostream.h>
#include<conio.h>
void main()
{
int v[10],i,j,n,gasit;
cout<<„introduceti numarul de elemente n=”<<” „; cin>>n;
for(i=1;i<=n;i++)
{ cout<<„v[„<<i<<„]=”; cin>>v[i]; }
gasit=0;
for(i=1;i<=n ;i++)
for(j=i+1;j<=n ;j++)
if(v[i]==v[j]) gasit=1;
if(gasit) cout<<„Numerele nu sunt distincte”;
else cout<<„Numerele sunt distincte”;
getch();
}
1.2.3. MULTIMI.
In cadrul unei multimi un elementapare o singura data (o multime nu poate avea 2 valori egale). Elementele unei multimi sunt memorate intr-o variabila de tip vector.
Aplicatii:
Exemplul 1. Se citeste o multime A care contine n elemente numere intregi ,se citeste un numar intreg e , se verifica daca numarul e apartine multimii a.
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],n,e,i,j,gasit;
clrscr();
cout<<„Introduceti numarul de elemente n a multimii”<<” „<<„n=” ; cin>>n;
for(i=1;i<=n;i++) { cout<<„A[„<<i<<„]=”; cin>>A[i]; }
cout<<„Introduceti numarul considerat”<<” „<<„e=”; cin>>e;
gasit=0;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
if(A[i]==e) gasit=1;
if(gasit) cout<<„Numarul”<<” „<< e<<” apartine multimii”;
else cout<<„Numarul”<<” „<<e<<” nu apartine multimii”;
getch();
}
Exemplul2. Se citeasc multimile A si B si se afiseaza multimea C unde C = A- B
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],B[10],C[10],m,n,i,j,z,k,gasit;
clrscr();
cout<<„Specificati numarul de elemente a multimii A”<<” „<<„m=”; cin>>m;
cout<<„Specificati numarul de elemente a multimii B”<<” „<<„n=”; cin>>n;
cout<<„Introduceti elementele multimii A”<<endl;
for(i=1;i<=m;i++) { cout<<„A[„<<i<<„]=”; cin>>A[i];};
cout<<„Introduceti elementele multimii B”<<endl;
for(j=1;j<=n;j++) { cout<<„B[„<<j<<„]=”; cin>>B[j];};
k=0;
for(i=1;i<=m;i++)
{
gasit=0;
for(j=1;j<=n;j++)
if(A[i]==B[j])gasit=1;
if(!gasit) C[k++]=A[i];
}
cout<<„A-B”<<” „<<„={„<<” „;
for(i=0;i<k;i++) cout<<C[i]<<” „; cout<<„}” ;
getch();
}
Algoritmul de rezolvare este urmatorul:
Pentru fiecare element din multimea A se face testul daca apartine sau nu multimii B.Daca nu apartine este adaugat unei multimi C care initial este vida (variabila k cu valoare initiala 0 retine indicele componentei din C care va memora urmatorul element ce se adauga multimii C. In final se tipareste multimea C.
Exemplul3. Se citesc multimile A si B si se afiseaza multimea C unde C=AUB
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],B[10],C[10],m,n,i,j,k,gasit;
clrscr();
cout<<„Specificati numarul de elemente a multimii A”<<” „<<„m=”; cin>>m;
cout<<„Specificati numarul de elemente a multimii B”<<” „<<„n=”; cin>>n;
cout<<„Introduceti elementele multimii A”<<endl;
for(i=1;i<=m;i++) { cout<<„A[„<<i<<„]=”; cin>>A[i];};
cout<<„Introduceti elementele multimii B”<<endl;
for(j=1;j<=n;j++) { cout<<„B[„<<j<<„]=”; cin>>B[j];};
k=0;
for(i=1;i<=m;i++)
{
gasit=0;
for(j=1;j<=n;j++)
if(A[i]==B[j])gasit=1;
if(!gasit) C[k++]=A[i];
}
cout<<„AUB”<<” „<<„={„<<” „;
for(j=1;j<=n;j++) cout<<B[j]<<” „;
for(i=0;i<k;i++) cout<<C[i]<<” „; cout<<„}” ;
getch();
}
Algoritmul de rezolvare este urmatorul:
Se stie ca AUB = BU(A – B) sau AUB=AU(B – A)
Se determina multimea A-B la fel ca in cazul precedent, apoi se listeaza multimea B si in continuare multimea A – B.
Exemplul4. Se citesc multimile A si B si se listeaza multimea C unde C=A∩B
Algoritmul de rezolvare este urmatorul:
Pentru fiecare element din multimea A se face testul daca apartine sau nu multimii B.Daca apartine este adaugat unei multimi C care initial este vida (variabila k cu valoare initiala 0 retine indicele componentei din C care va memora urmatorul element ce se adauga multimii C. In final se tipareste multimea C.
#include<iostream.h>
#include<conio.h>
void main()
{
int A[10],B[10],C[10],m,n,i,j,k,gasit;
clrscr();
cout<<„Specificati numarul de elemente a multimii A”<<” „<<„m=”; cin>>m;
cout<<„Specificati numarul de elemente a multimii B”<<” „<<„n=”; cin>>n;
cout<<„Introduceti elementele multimii A”<<endl;
for(i=1;i<=m;i++) { cout<<„A[„<<i<<„]=”; cin>>A[i];};
cout<<„Introduceti elementele multimii B”<<endl;
for(j=1;j<=n;j++) { cout<<„B[„<<j<<„]=”; cin>>B[j];};
k=0;
for(i=1;i<=m;i++)
{
gasit=0;
for(j=1;j<=n;j++)
if(A[i]==B[j])gasit=1;
if(gasit) C[k++]=A[i];
}
cout<<„AnB”<<” „<<„={„<<” „;
for(i=0;i<k;i++) cout<<C[i]<<” „; cout<<„}” ;
getch();
}
Exemplul5. Se citesc multimile A si B si se listeaza C unde C=A X B
#include<iostream.h>
#include<conio.h>
void main()
{
int m,n,i,j;
char A[10],B[10];
clrscr();
cout<<„Specificati numarul de elemente a multimii A”<<” „<<„m=”; cin>>m;
cout<<„Specificati numarul de elemente a multimii B”<<” „<<„n=”; cin>>n;
cout<<„Introduceti elementele multimii A”<<endl;
for(i=1;i<=m;i++) { cout<<„A[„<<i<<„]=”; cin>>A[i];};
cout<<„Introduceti elementele multimii B”<<endl;
for(j=1;j<=n;j++) { cout<<„B[„<<j<<„]=”; cin>>B[j];};
cout<<„AXB”<<” „<<„={„<<” „;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++) cout<<„(„<<A[i]<<„,”<<B[j]<<„)”<<” „; cout<<„}” ;
getch();
}
1.2.4. METODE DE SORTARE
Se aplica pentru sortarea unor valori citite in ordine crescatoare sau descrescatoare.
a) Sortarea prin selectarea minimului(maximului).
– se determina minimul dintre toate valorile retinute incepand cu pozitia 1 si acesta este trecut pe pozitia1 prin interschimbarea continuturilor dintre cele 2 componente
– se determina minimul dintre valorile ratinute incepand cu pozitia 2 si acesta este trecut pe pozitia 2 prin interschimbarea continuturilor dintre cele 2 componente
………………………………………………
– se determina minimul dintre valorile retinute incepand cu penultima pozitie si acesta este trecut pe penultima pozitie.
Exemplul1. Se citeste o multime de numere si se listeaza valorile in ordine crescatoare si in ordine descrescatoare
#include<iostream.h>
#include<conio.h>
int a[10],n,i,j,k,min,m;
void main()
{
clrscr();
cout<<„Introduce numarul elementelor”<<” „<<„n=”;cin>>n;
for(i=1;i<=n;i++) { cout<<„a[„<<i<<„]=”;cin>>a[i];};
for(i=1;i<=n-1;i++)
{
min=a[i];k=i;
for(j=i+1;j<=n;j++)
if(a[j]<min)
{
min=a[j];
k=j;
}
m=a[k];
a[k]=a[i];
a[i]=m;
}
cout<<„Listez numerele in ordine crescatoare”<<endl;
for(i=1;i<=n;i++) cout<<a[i]<<” „;
cout<<endl<<„Listez numerele in ordine descrescatoare”<<endl;
for(i=n;i>=1;i–)cout<<a[i]<<” „;
getch();
}
b) Sortarea prin interschimbare
Se parcurge variabila intr-un ciclu do while inversand continuturile componentelor care nu sunt in ordine crescatoare(descrescatoare)
Exemplu: Fie situatia initiala:
3 | 1 | 4 | 2 |
A[1] A[2] A[3] A[4]
Algoritmul este urmatorul:
– se efectueaza prima parcurgere si se schimba A[1] cu A[2] (deoarece 3 > 1) si A[3] cu A[4] (deoarece 4 > 2), vectorul va arata astfel:
1 | 3 | 2 | 4 |
A[1] A[2] A[3] A[4]
– se efectueaza a doua parcurgere si se schimba A[2] cu A[3] (deoarece 3 > 2), iar vectorul va arata astfel:
1 | 2 | 3 | 4 |
A[1] A[2] A[3] A[4]
– se efectueaza a treia parcurgere dar deoarece numerele sunt in ordine crescatoare algoritmul se incheie
Exemplu:
#include<iostream.h>
#include<conio.h>
int a[10],n,i,k,temp,gasit;
void main()
{
clrscr();
cout<<„Introduce numarul de elemente”<<” „<<„n=”;cin>>n;
for(i=1;i<=n;i++) {cout<<„a[„<<i<<„]=”;cin>>a[i];};
do
{
gasit=0;
for(i=1;i<=n-1;i++)
if(a[i]>a[i+1])
{temp=a[i] ; a[i]=a[i+1]; a[i+1]=temp; gasit=1;}
} while(gasit);
cout<<„Listez numerele in ordine crescatoare”<<endl;
for(i=1;i<=n;i++) cout<<a[i]<<” „;
cout<<endl<<„Listez numerele in ordine descrescatoare”<<endl;
for(i=n;i>=1;i–)cout<<a[i]<<” „;
getch();
}
1.3 APLICATII CARE LUCREAZA CU MATRICI.
1.3.1 INTERSCHIMBAREA A DOUA LINII INTRE ELE SAU A DOUA COLOANE
Pentru a interschimba 2 variabile intre ele utilizam o a treia variabila de manevra care am denumit-o temp si inca doua variabile x si y carora le atribuim ca valori numerele liniilor sau a coloanelor care dorim sa le interschimbam intre ele.
a) Interschimbarea a 2 linii
for(j=1;j<=n;j++) {
temp=a[x][j];
a[x][j]=a[y][j];
a[y][j]=temp ;
}
b) Interschimbarea a 2 coloane
for(i=1;i<=n;i++) {
temp=a[i][x];
a[i][x]=a[i][y];
a[i][y]=temp ;
}
Exemplu. Schimbarea a 2 coloane a unei matrici
#include<iostream.h>
#include<conio.h>
void main()
{
int i,j,m,n,a[10][10],x,y,temp;
clrscr();
cout<<„Introduceti numarul de linii”<<” „<<„n=”;cin>>m;
cout<<„Introduceti numarul de coloane”<<” „<<„n=”;cin>>n;
cout<<„Intoduceti elementele”<<endl;
for(i=1;i<=m;i++) {
for(j=1;j<=n;j++) { cout<<„a[„<<i<<j<<„]=”, cin>>a[i][j];}}
cout<<„Matricea intodusa are forma:”<<endl;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++) {cout<<a[i][j]<<‘ ‘; } cout<<endl; }
cout<<endl;
cout<<„Introduceti numerele coloanelor care doriti sa le interschimbati”<<endl;
cout<<„x=”;cin>>x;cout<<„y=”;cin>>y;
for(i=1;i<=n;i++) { temp=a[i][x]; a[i][x]=a[i][y]; a[i][y]=temp ; }
cout<<endl;
cout<<„Noua matrice are forma:”<<endl;
for(i=1;i<=m;i++){
for(j=1;j<=n;j++){ cout<<a[i][j]<<‘ ‘; } cout<<endl;}
getch(); }
1.3.2. SPIRALA
Se citeste o matrice patratica (numarul de linii=numarul de coloane=n). Se cere sa se afiseze elementele tabloului in ordinea rezultata prin parcurgerea acestuia in spirala, incepand cu primul element din linia 1 in sensul acelor de ceasornic.
2. SIRURI DE CARACTERE
2.1. Citirea / scrierea sirurilor de caractere.
Inainte de citirea unui sir de caractere acesta trebuie declarat. Pentru a declara un sir de caractere se utilizeaza functia:
char nume sir[nr.elemente sir]
Exemplu: char sir1[100] – sa declarat sirul cu numele sir1 care poate lista 100 caractere
Pentru citirea sirurilor de caractere se utilizeaza functia:
cin.get(vector de caractere, int nr, char=’\n’)
Observatie. Dupa tastarea unui sir de caractere , la apasarea tastei Enter se intrerupe citirea . Daca dorim sa introducem mai multe siruri de caractere se utilizeza cin.get() astfel
char s1[20],s2[20];
cin.get(s1,20];
cin.get();
cin.get(s2,20);
cout<<s1<<endl<<s2;
Daca ar lipsii functia cin.get() a doua citire nu ar putea fi efectuata, deoarece la apasarea tastei Enter in memorie este pastrat caracterul ‘\n’ , fapt care duce la intreruperea citirii.
Exemplu:
#include<iostream.h>
#include<conio.h>
void main() {
char s1[20],s2[20];
cin.get(s1,20); cin.get(); cin.get(s2,20);
clrscr();
cout<<s1<<endl<<s2;
getch();
}
Observatie. Se pot scrie mai multe siruri de cuvinte daca declaram o matrice de tip char
char a[10][20] se pot scrie 10 siruri cu cate 20 caractere fiecare sir (fara spatiu)
Exemplu:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main(){
char a[10][20]; int n,i;
cout<<„Nr.cuvinte „;cin>>n;
for(i=0;i<n;i++) cin>>a[i];clrscr(); for(i=0;i<n;i++) cout<<a[i]<<endl;
getch();}
2.2. Functii si algoritmi care lucreaza cu siruri de caractere.
Pentru a utiliza functiile care lucreaza cu sirurile de caractere trebuie inclusa directiva
#include<string.h>
2.2.1. Functia strlen.
Are rolul de a returna lungimea unui sir(fara a lua in considerare caracterul nul).
Forma generala : strlen(nume sir);
Exemplu: Se citeste un sir de caractere si se afiseaza numarul de caractere a sirului
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main() {
char s1[100];
cin.get(s1,100);
cin.get();
cout<<„Sirul citit are”<<” „<<strlen(s1)<<” „<<„caractere”;
getch(); }
2.2.2 Functia strcpy.
Forma generala:strcpy(destinatie,sursa)
Functia are roluil de a copia sirul de la adresa sursa la adreasa destinatie.
Exemplu:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main() {
char s1[20]=”Limbalul Turbo C++”,s2[20]=”Limbajul C++”;
strcpy(s1,s2);
cout<<s1;
getch(); }
2.2.3. Functia strcat.
Forma generala:strcat(destinatie,sursa)
Funtia are rolul de a adauga sirului de la adresa destinatie sirul de la adresa sursa
Exemplu:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char s1[20]=”Limbajul Turbo C++”,s2[20]=” si Limbajul C++”;
strcat(s1,s2);
cout<<s1;
getch();
}
2.2.4. Functia strncat
Forma generala:strncat(destinatie,sursa,n)
Functia adauga sirului destinatie primii n octeti ai sirului sursa
Exemplu:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char s1[20]=”Limbajul Turbo C++”,s2[20]=” si Limbajul C++”;
strncat(s1,s2,5);
cout<<s1;
getch();
}
2.2.5. Functia strchr
Forma generala: strchr(nume sir, ‘ caracter ‘ )
Functia cauta in sirul nume sir caracterul caracter si returneaza subsirul care incepe cu prima aparitie a caracterului citit
Exemplul1: se va lista Turbo C++
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char s1[20]=”Limbajul Turbo C++”;
cout<<strchr(s1,’T’);
getch();
}
Exemplul2: Se tipareste indicele primei aparitii a caracterului ‘u’
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char s1[20]=”Limbajul Turbo C++”;
cout<<strchr(s1,’u’)-s1;
getch();
}
Returneaza valoarea 6
2.2.6. Functia strrchr
Returneaza adresa ultimei aparitii a caracterului cautat strrchr(sir, ‘caracter’ )
char s1[20]=”Limbajul Turbo C++”;
cout<<strrchr(s1,’u’)-s1;
Returneaza valoarea 10
2.2.7. Functia strcmp
Forma generala strcmp(sir1, sir2 )
Functia are rolul de a compara 2 siruri de caractere si va returna valoarea:
< 0 daca sir1<sir2
= 0 daca sir1=sir2
> 0 daca sir1>sir2
Exemplu1. Se compara sirul a cu sirul b si se listeaza relatia dintre cele 2 siruri astfel:
– daca primele n caractere sunt identice se compara caracterele n+1
– daca caracterul n+1 al sirului a este situat alfabetic inaintea cracterului n+1 al sirului b se afiseaza a<b
– daca caracterul n+1 al sirului a este situat alfabetic dupa cracterul n+1 al sirului b se afiseaza a>b
– daca primul caracter al sirului a este situat alfabetic inaintea primului caracter al sirului b se afiseaza a<b indiferent de lungimea celor 2 siruri
– daca primul caracter al sirului a este situat alfabetic dupa primul caracter al sirului b se afiseaza a>b indiferent de lungimea celor 2 siruri
Exemplul1:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char a[20],b[20];
int semn;
cout<<„Introduceti sirul a: „; cin>>a;
cout<<„Introduceti sirul b: „; cin>>b;
semn=strcmp(a,b);
if(semn<0) cout<<„a < b”;
else
if(semn>0) cout<<„a > b”;
else cout<<„a = b”;
getch();
}
Exemplul2. Se citesc n cuvinte si se ordoneaza alfabetic crescator si descrescator.
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main(){
char a[100][10],temp[10];
int i,n,gasit;
cout<<„Introduceti numarul de persoane „; cin>>n;
cout<<„Scrie numele persoanelor”<<endl;
for(i=0;i<n;i++) cin>>a[i];
do
{
gasit=0;
for(i=0;i<n-1;i++) if(strcmp(a[i],a[i+1])>0)
{
strcpy(temp,a[i]);
strcpy(a[i],a[i+1]);
strcpy(a[i+1],temp);
gasit=1;
}
}
while(gasit);
cout<<„Ordinea alfabetica crescatoare a persoanelor scrise este:”<<endl;
for(i=0;i<n;i++) cout<<a[i]<<endl;
cout<<„Ordinea alfabetica descrescatoare a persoanelor scrise este:”<<endl;
for(i=n;i>=0;i–) cout<<a[i]<<endl;
getch();
}
2.2.8. Functiile strlwr si struwr
strlwr(s1) – converteste toate literele sirului s1 in litere mici
struwr(s2) – converteste toate literele sirului s2 in litere mari
Exemplu:
#include<iostream.h>
#include<conio.h>
#include<string.h>
void main()
{
char a[100]=”este acesta un sir?”, b[100]=”Acest Lucru Nu Ma Deranjeaza”;
cout<<strupr(a)<<endl<<strlwr(b);
getch();
}
2.2.9. Functia strstr
Forma generala: strstr(sir1,sir2)
Functia identifica daca sirul sir2 este subsir al sirului sir1
2.2.10. Functia strcspn
Forma generala: strcspn(s1,s2)
Functia returneaza numarul caracterelor din sirul s1 care nu se gasesc in sirul s2
2.2.11. Functia spn
Forma generala: strspn(s1,s2)
Functia returneaza numarul caracterelor din sirul s1 care se gasesc in sirul s2
2.2.12. FUNCTII UTILIZATE PENTRU CONVERSIA VALORILOR NUMERICE IN SIR
La utilizarea acestor functii se introduce directiva #include<stdlib.h>
a) Functia atof – converteste un sir catre tipul double
b) Functia atold – converteste un sir catre tipul long double
Exemplu:
#include <stdlib.h>
#include <iostream.h>
#include<conio.h>
void main() {
float f;
char *str = „12345.67”;
f = atof(str);
cout<<„string = „<<str<<endl<<„float = „<< f;
getch(); }
c) Functia atoi – converteste un sir catre tipul int
d) Functia atol – converteste un sir catre tipul long
Exemplu:
#include <stdlib.h>
#include <iostream.h>
#include<conio.h>
void main()
{
int n;
char *str = „12345.67”;
n = atoi(str);
cout<<„string = „<<str<<endl<<„float = „<< n;
getch();
}
e) Functia ecvt – converteste o valoare dubla catre un sir
f) Functia itoa – converteste o valoare de tip intreg catre un sir
g) Functia ltoa – converteste o valoare de tip long int catre un sir
3. TIPUL INREGISTRARE
3.1. Inregistrari simple.
Pentru gruparea variabilelor de mai multe tipuri utilizate pentru o inregistrare se foloseste:
struct nume structura
{ tip variabila nume variabila, nume variabila ;
tip variabila nume variabila;
} lista variabile;
Un exemplu de stuctura:
struct elev
{ char nume[15],prenume[20];
int telefon;
float media;
}inr1,inr2;
Exemplu:
#include <stdlib.h>
#include <iostream.h>
#include<conio.h>
struct elev
{
char nume[15],prenume[20],clasa[10];
int tel;
float med;
} inr;
void main()
{
cout<<„Nume „;cin>>inr.nume;
cout<<„Prenume „;cin>>inr.prenume;
cout<<„Telefon „;cin>>inr.tel;
cout<<„Clasa „;cin>>inr.clasa;
cout<<„Media generala „;cin>>inr.med;
cout<<„Am citit:”<<endl
<<inr.nume<<” „<<inr.prenume<<endl
<<inr.tel<<endl
<<inr.clasa<<endl
<<inr.med;
getch();
}
3.2. Inregistrari imbricate
Un tip structurat de inregistrare contine in interiorul sau alt tip structurat de inregistrare.
Exemplu de inregistrare imbricata:
struct elev1
{
char nume[15],prenume[20];
struct
{ int clasa;
float note[20];
} sit1,sit2;
int varsta;
};
Tipul structurat elev1 subordoneaza , pe langa alte tipuri, doua structuri sit1 si sit2.
3.3. Inregistrari cu structura variabila
Se utilizeaza cand inregistrarile nu au format fix ci un format variabil.
F. FISIERE
Fisierul este o colectie de date de acelasi fel stocate pe un suport extern care are un mune si o extensie (al carei nume este in functie de tipul fisierului).Ex: nume.exe (fisier executabil) ; nume.dbf (fisier baza de date,utilizat in fox), etc.
1. FISIERE TEXT
Aceste fisiere se caracterizeaza prin urmatoarele:
– datele sunt memorate sub forma unei succesiuni de caractere
– caracterele sunt memorate in codul ASCII
– fisierul se termina cu caracterul EOF
– este format din una sau mai multe linii care se termina cu caracterul newline (\n)
– o variabila speciala numita pointer retine intotdeauna un octet al fisierului
1.1. Citiri / scrieri cu format
Acestea sun caracterizate prin:
– latime – width – se utilizeaza la scriere si are rolul de a stabili numarul de caracatere utilizate pentru afisarea unei date;
– precizie – precision – se utilizeaza la scriere atunci cand se foloseste o variabila reala, stabileste numarul de zecimale care vor fi afisate pentru valoare;
– caracterul de umplere – fill – se utilizeaza la scriere in cazul in care data propriuzisa ocupa mai putini octeti decat latimea si precizeaza caracterul care se afiseaza in spatiile neocupate;
– alinierea – left sau right – se utilizeaza cand data ocupa mai putin decat latimea si se precizeaza unde anume sa fie afisata – stanga sau drepta –
– salt sau nu peste caractere albe – se utilizeaza la citire
* Pentru formatarea citirii / scrierii se utilizeaza varibilele:
precision , wihth, fill
Accesul la aceste varibile se face cu ajutorul unor functii speciale numite manipulatori. Pentru a le putea utiliza in program trebuie inclusa directiva #<iomanip.h>
Manipulatorii sunt inclusi in expresiile de citire/scriere astfel:
– setw (int) – stabileste latimea int pe care este afisata variabila
– setprecision(int) – stabileste numarul de zecimale int care sunt afisate
– setfill(char) – stabileste caracterul de umplere char a pozitiilor ramase libere
Exemplu.
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
double a=0.123456789;
cout<<setw(20)<<setfill(‘$’)<<setprecision(2)<<a;
getch();
}
Afisarea se poate face pe 20 pozitii ; pe pozitiile ramase libere se afiseaza caracterul $ , variabila a va fi afisata cu 2 zecimale.
*Pentru formatarea intrarilor / iesirilor se utilizeaza variabila:
flags care utilizeaza comenzile:
– skipws – sunt sarite caracterele albe care preced valoarea ce trebuie citita
– left – datele se tiparesc aliniate la stanga
– right – datele se tiparesc aliniate la dreapta
– internal – se fiseaza semnaul la stinga si numarul la drepta
– dec – conversie in zecimal
– oct – conversie in octal
– hex – conversie in hexazecimal
– showbase – afisarea indicatorului de baza
– showpoint – forteaza afisarea punctului zecimal
– uppercase – in cazul afisarii in hexazecimal se vor utiliza literele mari (A,B,..F)
– showpos – valorile afisate sunt precedate de semn
– scientific – afisarea valorilor se face prin utilizarea formei stiintifice (1e-8)
– fixed – afisarea valorilor se face prin utilizarea formai normale
Variabila flags se utilizeaza in doua moduri:
setiosflags(masca) – pentru setarea bitilor accesati
resetiosflags(masca) – pentru resetarea bitilor accesati
Pentru a avea acces la comanzile cu care lucreaza flags numele lor vor fi precedate de ios::
masca este formata din una sau mai multe grupe de comenzi de forma:
ios::comanda separate intre ele de operatorul logic | (SAU-pe biti)
Exemplu de masca:
(ios::internal | ios::showpos | ios::right)
Exemplu:
#include<iostream.h>
#include<iomanip.h>
#include<conio.h>
#include<math.h>
void main()
{
double a,b,c,d,e,f;
cout<<„Introduceti primul numar „<<” „<<„a=”;cin>>a;
cout<<„Introduceti al doilea numar „<<” „<<„b=”;cin>>b;
c=a/b;
d=a*b;
e=sqrt(d);
f=d*d;
cout<<endl;
cout<<„Rezultatul impartirii „<<” „<<„a : b =”
<<setw(100)<<setfill(‘ ‘)<<setprecision(10)
<<setiosflags(ios::left|ios::showpos|ios::fixed)<<c;
cout<<endl;
cout<<„Rezultatul inmultirii „<<” „<<„a x b =”
<<setw(100)<<setfill(‘ ‘)<<setprecision(10)
<<setiosflags(ios::left|ios::showpos|ios::fixed)<<d;
cout<<endl;
cout<<„Radicalul inmultirii este „<<” „
<<setw(100)<<setfill(‘ ‘)<<setprecision(20)
<<setiosflags(ios::left|ios::showpos|ios::fixed)<<e;
cout<<endl;
cout<<„Patratul inmultirii este „<<” „
<<setw(100)<<setfill(‘ ‘)<<setprecision(20)
<<setiosflags(ios::left|ios::showpos|ios::fixed)<<f;
getch();
}
1.2. Declararea fisierelor text memorate pe suport magnetic.
Cand se lucreaza cu fisiere pe suport magnetic in program trebuie inclusa directiva:
#include<fstream.h>daca utilizam acesta directiva poatei fi scoasa <iostream.h>
Pentru a lucra usor asupra fisierelorsunt definite comenzile:
– in – deschide fisierul pentru citire
– out – deschide fisierul pentru scriere
– ate – salt la sfirsitul fisierului dupa deschiderea acestui
– app – deschide fisierul pentru a scrie la sfirsitul lui
– trunc – daca fisierul care se deaschide exista in locul lui se creaza altul
– nocreate – daschide fisierul daca acesta exista (nu se creaza altul)
– noreplace – daca fisierul exista el poate fi deschis numai pentru consultare
– binary – fisier binar. Se utilizeaza constructorul inplicit al clasei ofstream(); apoi se utilizeaza metoda open in forma generala
Inainte de a lucra cu un fisier acesta trebuie declarat. Forma generala a declaratiei:
fstream nume_logic(„nume_fizic„ , mod_de_deschidere)
Exemplu1: Declar un fisier cu numele fizic fis.txt care se va gasi in radacina (c:\\) , cu numele logic f , fisierul este declarat in vedera crearii lui (ios::out)
fstream f(„c:\\fis.txt”,ios::out);
Exemplul2. Declar doua fisiere, unul (f) pentru citire si celalat (g) pentru scriere
fstream f(„c:\\fis1.txt”,ios::in), g(„c:\\fis2.txt”,ios::out);
In cazul in care numele fisierului trebuie citit de la tastatura declaratia fisierului trebuie sa contina numele sau si trebuie plasata dupa citirea sirului respectiv astfel:
char nume_fisier[20] ;
cout<<„Numele fisierului este „;cin>>nume_fisier ;
fstream f(nume_fisier, ios::out);
Dupa deschiderea si prelucrarea unui fisier acesta trebuie inchis astfel:
nume_fisier.close() , in cazul nostru f.close()
Exemplu de creare a unui fisier de tip text in c:\ :
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„c:\\fis.txt”,ios::out);
getch();
}
1.3. Prelucrarea fisierelor de tip text
Prelucrarea unui fisier se face dupa urmatorul algoritm:
while(daca nu este sfirsit de fisier)
{
citeste ;
prelucreaza ;
}
Pentru a preciza sfirsitul de fisier care se testeaza in paranteza de dupa while se scrie:
! nume_fisier.eof()
Atentie! Functia eof() nu citeste ci doar testeaza daca anterior a fost detectat sfarsitul de fisier
Exemple de programe:
Exemplul1. Creez un fisier fis.txt in d:\ cu intrare de la tastatura (scriu in el de la tastatura).In acest exemplu nu sunt scrise caracterele albe(deci intre cuvintele scrise nu este spatiu.Ca sa termin scrierea apas consecutiv tastele CTRL+Z (echivalent cu EOF)
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„d:\\fis.txt”,ios::out);
char x;
while(cin>>x) f<<x;
f.close();
}
Exemplul2. Creez acelasi fisier dar for fi scrise si caracterele albe. Aceasta sa realizat deoarece a fost introdusa comanda resetiosflags(ios::skipws)
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„d:\\fis.txt”,ios::out);
char x;
while(cin>>resetiosflags(ios::skipws)>>x) f<<x;
f.close();
getch();
}
Exemplul3. Afisez fisierul creat la exemplul2
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„d:\\fis.txt”,ios::in);
char x;
while(f>>resetiosflags(ios::skipws)>>x) cout<<x;
f.close();
getch();
}
Exemplul4. Scriu la sfirsitul fisierului creat la exemplul2
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„d:\\fis.txt”,ios::app);
char x;
while(cin>>resetiosflags(ios::skipws)>>x) f<<x;
f.close();
getch();
}
Exemplul5. Creez un fisier al carui nume il dau de la tastatura si scriu in el.
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
char fisier[10];
cout<<„Numele fisierului este „;cin>>fisier;
fstream f(fisier,ios::out);
char x;
while(cin>>resetiosflags(ios::skipws)>>x) f<<x;
f.close();
getch();
}
Observatie: Cand scriu numele fisierului trebuie sa specific si locatia lui astfel:
c:\nume_fisier.txt sau d:\nume_fisier.txt
Exemplul6. Cuvantul „FINISH” se adauga la sfarsitul fisierului creat la exemplul2.
#include<string.h>
#include<fstream.h>
#include<stdlib.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„d:\\fis.txt”,ios::in|ios::out);
char c[100];
f>>resetiosflags(ios::skipws)>>c ;cout<<c;
f.seekp(0,ios::end);
strcpy(c,”FINISH”);
f<<resetiosflags(ios::skipws)<<c;
f.close();
getch();
}
& Functia: nume_fisier.seekp(0,ios::end) – pozitioneaza pointerul in fisierul precizat
– primul parametru reprezinta pozitia pointerului
– al doilea parametru reprezinta reperul in raport de care este calculata pozitia
Sunt definite trei constante:
end – sfarsit de fisier
beg – inceput de fisier
cur – pozitia curenta in fisier
& Functia : nume_fisier.tellp() – returneaza pozitia pointerului la un moment dat.
Exemplul7. Se convertesc primele n numere naturale in octal si hexazecimal
#include<iostream.h>
#include<fstream.h>
#include<iomanip.h>
#include<conio.h>
void main()
{
fstream f(„C:\\numere.txt”,ios::out,ios::in);
int i,n;
cout<<„Introduce numarul n= „;cin>>n;
for(i=1;i<=n;i++) {
f<<setw(10)<<oct<<i;
f<<setw(10)<<dec<<i;
f<<setw(10)<<setiosflags(ios::uppercase)<<hex<<i<<endl;
};
f.close();
getch();
}
2. Fisiere binare.
Caracteristici:
– fisierele sunt alcatuite din mai multe inregistrari de acelasi tip (int , struct, etc)
– datele sunt memorate in format intern, iar fisierele se termina tot cu EOF
– pentru deschiderea unui fisier binar se utilizeaza ios::binary
– fisierele lucreaza cu variabile de tip pointer. O astfel de variabila retine o anumita adresa a unei alte variabile. Ea se declara in felul urmator:
int a, *adr_a=&a , variabila *adr_a a fost initializata cu adresa variabilei a
Variabila *adr_a este de tip poiner
Pentru a obtine adresa unei variabile , variabila este precedata de operatorul &
Daca avem o variabila a de tip int* si o variabila b de tip float* nu este permisa atribuire de tipul a=b , aceasta atribuire se poate face astfel a=(int*)b
– scrierea unei variabile de tip pointer adr_p intr-un fisier se face utilizand:
nume_fisier.write((char*) adr_p,sizeof(p))
– citirea unei variabile de tip poiter adr_p dintr-un fisier se face utilizand:
nume_fisier.read((char*)adr_p,sizeof(p))
Prin aceste comenzi de fapt se scrie respectiv citeste continutul variabilei p , numarul de caractere scrise sau citite fiind date de lungimea variabilei p prin comanda sizeof(p).
Looking forward to discussing residential plumbing answers with the mavens at Plumber near me
BEST REPS SHOE / BAG WEBSITEWatch-Fake is a low-cost and high-quality reps bags/shoe factory. Our reps products use high-quality materials
If some one needs expert view on the topic of blogging and site-building after that i
suggest him/her to pay a quick visit this blog, Keep up the nice
work.
This is highly informative. Check out carpet store for more
Hydroseeding is such an innovative solution for l Residential hydroseeding
Запали свою светило везения совместно со “Kometa casino”! ?
Здравствуй, авантюрист похождений! Ты созрел ринуться в звездное вояж, где-то любая точка обещает фантастические награды и даже головокружительные чувства?
Тогда тебе несомненно рекомендуется присоединиться на нашему с вами неповторимому каналу в Telegram комета казино с минимальным депозитом . Здесь вас ожидают не лишь игры, но подлинные галактические похождения, насыщенные внезапных кульбитов а также ослепительных импульсов везения!
Почему выбирают нас?
Звездные бонусы: Регистрируйся к объединенную команду а заполучи начальный пакет премий, что поможет вам быстрее добиться собственной цели. Геймерские галактики: Наши развлекательные слоты – это настоящие вселенные, кишащие тайнами и ценностями. Исследуй их до единой и конечно же найди свой безупречный слот! Турнирные галактики: Вливайся на межзвездных конкурсах и потом сражайся ради пост главного геймера галактики. Призовые банки настолько велики, что могут в силах затмить и самую сверкающую светило! Мгновенная перевод: Лишь только вы одержишь победы, ваши деньги будут моментально переведены в твой счет. Никаких задержек – исключительно неподдельная восторг триумфа! Ассистанс всегда на связи: Наш экипаж непрерывно в контакте, расположенный оказать помощь тебе во всякой ситуации. Если даже если вы заблудился вокруг звезд, мы поможем открыть направление обратно. ?? Как начать? Просто оформляйте подписку к этот ресурс и затем отправься на полет! Впереди вас подстерегают неисчерпаемые горизонты шансов и даже море восторга.
Не стоит упустить минуту, в тот момент когда собственная светило засияет ярче всех!
#kometa #casino #Подарки #Победа #CometaCasino #kometacasino
I appreciated this article. For more, visit Mechanicsville Storm Damage repair
I love how you addressed the aesthetic window shutters
Does anyone have tips on how to maintain the benefits of chiropractic care between visits to a #BonneyLakeChiropractor? # Injury Chiropractor
sweet bonanza yorumlar: sweet bonanza oyna – sweet bonanza demo oyna
Разгорись твою светило везения совместно с “Kometa casino”! ?
Салют, авантюрист подвигов! Ты настроен отправиться в галактическое путешествие, в коем любая привал обещает фантастические бонусы да ошеломляющие ощущения?
В этом случае тебе несомненно следовало бы присоединиться к нашему с вами эксклюзивному Telegram-каналу комета казино онлайн играть . Тут вас поджидают отнюдь не лишь забавы, но подлинные галактические похождения, насыщенные внезапных витков и ослепительных импульсов везения!
Почему выбирают наше казино?
Галактические бонусы: Присоединяйся на объединенную команду а возьми начальный набор премий, который даст возможность вам быстрее добиться своей задачи. Игровые планеты: Наши игровые слоты – представляют собой абсолютно все вселенные, изобилующие загадками и даже ценностями. Исследуй все до единой и найди заветный безупречный автомат! Соревновательные галактики: Принимай участие в межгалактических турнирах и потом борись ради титул лучшего геймера космоса. Наградные банки до такой степени масштабны, что могут затмить и абсолютно сверкающую звезду! Моментальная оплата: Лишь только вы одержишь успеха, твои средства окажутся моментально переведены на ваш кошелек. Никаких проволочек – исключительно подлинная радость триумфа! Ассистанс всегда на связи: Наш состав постоянно на контакте, готовый помочь тебе в какой угодно положении. Даже вдруг вы потерялся среди галактик, мы все подскажем найти направление обратно. ?? Каким путем приступить? Просто оформляйте подписку на данный ресурс и пуститесь на рейс! Дальше тебя ожидают безграничные перспективы шансов и целое море удовольствия.
Не нужно упустить минуту, в тот момент когда твоя огонек заблестит ярче каждого!
#kometa #casino #Премии #Успех #КометаКазино #kometacasino
This was a wonderful guide. Check out digital marketing near me for more
Your hints on warding off widely wide-spread pitfalls when h accident lawyer las vegas
The importance of intellectual stimulation through games or arts & crafts needs to no longer be not noted while considering the fact that things to do furnished at nursing buildings across Perth—allow’s retailer them engaged! Aged Care Near Me
выведение из запоя выведение из запоя .
I liked this article. For additional info, visit استخدام نیروی نمایشگاهی
Well explained. Discover more at flooring near me
Разгорись свою огонек фарта совместно рядом “cometa casino”! ?
Здравствуй, искатель похождений! Ты созрел отправиться на галактическое вояж, где любая остановка гарантирует невероятные бонусы и даже захватывающие чувства?
Тогда тебе точно стоит вступить к нашему уникальному телеграм-каналу комета казино с минимальными ставками . Здесь тебя ожидают не лишь развлечения, но настоящие звездные похождения, переполненные непредвиденных витков а также ослепительных импульсов фортуны!
Почему избирают именно нас?
Звездные поощрения: Присоединяйся к нашу общую группу и потом получи первоначальный пакет бонусов, какой содействует тебе быстрее достичь своей задачи. Развлекательные планеты: Здешние гэмблинг машины – это целые вселенные, кишащие тайнами и даже богатствами. Осваивай каждый из них все и конечно же обнаруживай твоей безупречный слот! Конкурсные вселенные: Участвуй в межгалактических соревнованиях и борись за пост самого крутого геймера галактики. Выигрышные банки в такой мере масштабны, что аж способны ослепить и самую что ни на есть блестящую светило! Мгновенная перевод: Как только вы одержишь триумфа, твои деньги окажутся мгновенно зачислены на твой аккаунт. Совершенно никаких задержек – только неподдельная радость победы! Помощь 24/7: Наш собственный команда всегда на связи, готовый ассистировать вам при любой обстоятельстве. Если даже коль вы заблудился вокруг галактик, мы вам поможем обнаружить направление к себе. ?? Как начать? Легко оформляйте подписку на наш ресурс а потом пуститесь на путешествие! Дальше тебя подстерегают безграничные пределы шансов и море удовольствия.
Не упустить момент, когда твоя звезда засияет блестящее каждого!
#kometa #casino #Бонусы #Победа #CometaCasino #kometacasino
thanks yet again focusing upon relocation challenges confronted these shifting stateside surprisingly navigating job markets along housing wishes—it highlights complexities interested—you’ll identify relocation strategies compiled all through our website gold coast Buyers agent Savvy Fox
Thanks for the clear advice. More at cake shop
Participating in local CrossFit competitions has been this type of worthwhile adventure! Get in touch with your group at crossfit
Запали свою огонек фарта вместе со “cometa casino”! ?
Привет, искатель похождений! Ты настроен пуститься на звездное путешествие, в коем любая точка сулит потрясающие призы да ошеломляющие эмоции?
В этом случае вам точно следовало бы вступить к нашему уникальному каналу в Telegram комета казино официальные . В этом месте вас поджидают отнюдь не только забавы, но настоящие галактические похождения, полные неожиданных кульбитов а ослепительных сияний фортуны!
Зачем предпочитают наше казино?
Космические премии: Регистрируйся на объединенную команду и заполучи первоначальный набор плюшек, что даст возможность тебе оперативнее осилить собственной задачи. Геймерские галактики: Здешние гэмблинг слоты – представляют собой абсолютно все космосы, изобилующие секретами и даже богатствами. Осваивай все до единой и открой твоей идеальный автомат! Соревновательные миры: Принимай участие в межзвездных соревнованиях и потом борись ради пост главного игрока космоса. Наградные пулы настолько масштабны, что аж в силах затмить даже самую что ни на есть блестящую звезду! Моментальная перевод: Едва только вы одержишь победы, личные деньги будут моментально зачислены в собственный аккаунт. Совершенно никаких проволочек – лишь чистая радость успеха! Ассистанс 24/7: Наш собственный экипаж непрерывно на контакте, нацеленный помочь вам при любой положении. Пусть даже вдруг ты заблудился среди галактик, мы вам поможем открыть дорогу к себе. ?? Каким путем приступить? Легко оформляйте подписку к этот источник и затем пуститесь в полет! Дальше вас ждут бесконечные перспективы вариантов а океан наслаждения.
Не стоит пропусти момент, когда твоя светило заблестит блестящее абсолютно всех!
#kometa #casino #Премии #Успех #KometaCasino #kometacasino
It’s remarkable exactly how innovation is altering the landscape of psychological health support with on-line therapy solutions. Keep informed at therapist and psychiatrist
This was very enlightening. More at برگرداندن پست حذف شده اینستاگرام
Thanks for addressing the importance of client remarks in deciding upon a business cleaner—it’s necessary suggestions! More instruments achievable at commercial cleaning companies Foster Janitorial Penticton
Запали свою огонек везения бок о бок с “Комета казино”! ?
Салют, искатель подвигов! Ты созрел ринуться в звездное вояж, где-то всякая привал сулит невероятные призы и захватывающие чувства?
В таком случае тебе несомненно следовало бы вступить на нашему с вами уникальному телеграм-каналу комета казино с быстрым выводом . Здесь вас ждут отнюдь не просто игры, а подлинные галактические авантюры, переполненные неожиданных витков а ослепительных сияний везения!
Отчего выбирают именно нас?
Космические поощрения: Регистрируйся в объединенную экипаж и потом возьми стартовый комплект премий, что содействует вам быстрее добиться собственной задачи. Развлекательные миры: Наши игровые машины – это настоящие космосы, кишащие секретами и даже ценностями. Исследуй все полностью и конечно же открой свой идеальный аппарат! Соревновательные миры: Участвуй в межгалактических турнирах а также битва за титул самого крутого игрока космоса. Призовые банки настолько масштабны, что аж могут ослепить и самую что ни на есть яркую светило! Быстрая перевод: Едва только ты одержишь успеха, личные средства будут тут же зачислены в ваш счет. Совершенно никаких проволочек – только чистая удовольствие успеха! Ассистанс круглосуточно: Нашей команды экипаж постоянно в контакте, нацеленный помочь вам во любой ситуации. Даже вдруг ты потерялся среди светил, мы поможем найти направление обратно. ?? Каким путем стартовать? Просто станьте подписчиком на наш источник а потом отправься в рейс! Дальше вас ждут бесконечные горизонты возможностей и море восторга.
Не нужно упусти минуту, когда собственная огонек заблестит светлее каждого!
#kometa #casino #Бонусы #Успех #КометаКазино #kometacasino
Appreciate the detailed information. For more, visit AvraDentist
High Purity – breaking bad forum, bb gate
Thanks for the clear advice. More at indian school of calisthenics mumbai
Запали свою светило везения бок о бок рядом “cometa casino”! ?
Здравствуй, авантюрист подвигов! Ты готов ринуться в галактическое путешествие, где каждая привал обещает потрясающие награды и головокружительные эмоции?
В таком случае вам несомненно рекомендуется подключиться на этому неповторимому каналу в Telegram Честные комета казино . Здесь тебя ждут не просто игры, но подлинные звездные похождения, переполненные внезапных витков а сверкающих сияний фортуны!
Почему выбирают нас?
Галактические бонусы: Вступай к объединенную группу а получи стартовый пакет плюшек, что поможет тебе оперативнее добиться своей цели. Развлекательные миры: Местные развлекательные слоты – представляют собой абсолютно все миры, изобилующие секретами и даже ценностями. Исследуй все полностью и потом открой заветный идеальный автомат! Конкурсные вселенные: Участвуй на космических конкурсах и потом битва за звание лучшего геймера вселенной. Призовые пулы до такой степени велики, что в силах ослепить и самую что ни на есть сверкающую светило! Мгновенная оплата: Лишь только ты достигнешь победы, твои деньги осуществятся моментально зачислены на твой аккаунт. Абсолютно никаких проволочек – только чистая восторг успеха! Помощь всегда на связи: Наш состав всегда на связи, нацеленный помочь вам во какой угодно обстоятельстве. Пусть даже вдруг ты сбился с пути вокруг звезд, мы посодействуем открыть путь к себе. ?? Каким образом начать? Просто станьте подписчиком на данный ресурс а потом риньтесь в рейс! Затем тебя ожидают бесконечные пределы возможностей а океан восторга.
Не нужно упусти мгновение, как собственная звезда засветится светлее всех!
#kometa #casino #Премии #Успех #CometaCasino #kometacasino
Very informative post; keeping general places fresh is relevant to employee morale and wellbeing commercial cleaners
Great tips! For more, visit funeral director
Casino Siteleri en guvenilir casino siteleri casino bahis siteleri
Тут ничего не поделаешь.
вот, охлажденное мясо перевозится при темпрературе воздуха от минус 10 до минус 1 градуса Цельсия, а вот свежее – от минус единицы до плюс 1. при этом сама перевозка должна осуществляться в герметичном кузове, https://metallic-nso.ru/2022/03/28/%D0%BF%D1%80%D0%B8%D0%B2%D0%B5%D1%82-%D0%BC%D0%B8%D1%80/ а на весь должно быть оформлено ветеринарное свидетельство.
I appreciate that metal roofs can be applied over existing shingles, saving time and money! Find out how at i5 Exteriors
Казино Онлайн: Ваш Путеводитель в Мир Азартных Развлечений
Что же такое сетевое азартное заведение и каким образом подобрать надежное?
Азартное заведение в сети – это виртуальные платформы, предоставляющие широкий диапазон азартных игр: с классических азартных слотов и слотов по увлекательных карточных развлечений, как колесо фортуны, двадцать одно и покер. Но, дабы достичь максимальное наслаждение из игры, необходимо выбрать надежное азартное заведение, которое гарантирует честность и защищенность.
Главные параметры подбора:
Разрешение: Имеющие разрешение азартные заведения гарантируют справедливость игры и защищенность ваших денег. Проверьте наличие лицензии перед регистрацией.
Оценка и отзывы: Исследуйте рейтинг казино и комментарии о казино от других пользователей. Это поспособствует вам подобрать надежное место.
Поощрения и акции: Азартные заведения с поощрениями предлагают заманчивые условия для новичков и постоянных пользователей. Уделите интерес на бесплатные бонусы, бесплатные вращения и другие спецпредложения.
Ассортимент развлечений: Лучшие сетевые азартные заведения предоставляют обширный выбор развлечений для каждый предпочтение. Находите казино с азартными слотами, колесом фортуны, блэкджеком, игрой в карты и другими развлечениями.
Вывод средств: Убедитесь, чтобы азартное заведение с выводом денег предоставляет комфортные и оперативные способы получения приза.
Помощь: Надежные азартные заведения обеспечивают хорошую поддержку на русском диалекте ради пользователей со РФ.
Безопасность: Безопасные азартные заведения защищают ваши сведения с помощью современных методов шифрования.
?? Поощрения и спецпредложения в онлайн азартном заведении
Сетевые азартные заведения привлекают новых пользователей щедрыми бонусами азартного заведения. При подборе заведения, обратите внимание на:
Вступительный бонус: Приветственный бонус при записи – превосходная возможность начать развлечение с резервными деньгами.
Бесплатный бонус: Бесплатные поощрения дают возможность развлекаться в казино бесплатно, не кладя деньги.
Бесплатные вращения: Фриспины или бесплатные прокрутки – возможность поиграть в слоты даром.
Коды по акции: Коды по акции казино дают дополнительные поощрения и привилегии.
Возврат: Кэшбэк казино возвращает часть потерянных средств.
Спецпредложения азартного заведения: Участвуйте в регулярных акциях и принимайте дополнительные бонусы.
Многообразие развлечений в сетевом азартном заведении
В онлайн азартном заведении вы обнаружите большой ассортимент игровых игр:
Азартные автоматы: Азартные слоты в сети или слоты – самый известный вид развлечений.
Колесо фортуны: Классическая игра, которая не лишается свою актуальности.
Двадцать одно: Умственная игральная развлечение, требующая стратегии.
Покер: Различные типы игр в карты ради любителей игральных развлечений.
Баккара, бинго, кено: Иные популярные азартные игры.
Live азартное заведение: Получайте удовольствие от развлечением с реальными раздающими.
Переносное азартное заведение: играйте в всяком месте
Мобильное азартное заведение – это удобный способ получать удовольствие от игрой в всяком месте и в любое момент. Вы можете развлекаться в любимые игры казино прямо со вашего смартфона или панели.
Куда начать играть в онлайн казино?
Дабы играть в азартном заведении и наслаждаться азартом, Легкие условия вывода средств рейтинг казино следуйте этим легким шагам:
Выберите казино: Исследуйте оценку казино и выберите безопасное заведение.
Зарегистрируйтесь: Завершите скорую запись в казино.
Зачислите счет: Пополните аккаунт в азартном заведении комфортным методом.
Начните развлекаться: Выберите развлечение и наслаждайтесь действием!
Как одержать победу в азартном заведении и каким образом снять деньги?
Развлечение в казино за средства – это не только игра, а и шанс выиграть. Изучайте, совершенствуйте свои навыки и развлекайтесь ответственно. Казино с снятием обеспечивают быстрый и комфортный снятие денег с казино различными способами.
Video content is dominating the scene! Explore effective strategies at Vanguard Online Marketing, LLC
This was highly useful. For more, visit رنگ ضد حریق
You should only cytotec how long before it works pills at the lowest prices ever
Разгорись свою огонек везения бок о бок с “Комета казино”! ?
Привет, искатель похождений! Ты настроен отправиться на космическое путешествие, где любая привал обещает невероятные бонусы да захватывающие ощущения?
В таком случае тебе точно следовало бы присоединиться к нашему эксклюзивному Telegram-каналу комета казино с прогрессивными джекпотами . В этом месте вас ожидают не лишь игры, но настоящие звездные приключения, насыщенные непредвиденных кульбитов а также ярких импульсов фортуны!
Почему выбирают нас?
Космические бонусы: Регистрируйся к объединенную команду и потом возьми стартовый набор бонусов, который даст возможность тебе скорее осилить твоей цели. Игровые планеты: Здешние гэмблинг машины – есть настоящие миры, наполненные тайнами и даже сокровищами. Осваивай все полностью и потом найди свой безупречный автомат! Турнирные вселенные: Принимай участие на космических турнирах и потом сражайся во имя звание лучшего геймера вселенной. Наградные банки настолько масштабны, что могут в силах ослепить даже и самую что ни на есть яркую огонек! Моментальная выплата: Едва только вы одержишь победы, ваши капитал будут тут же зачислены на твой кошелек. Совершенно никаких задержек – исключительно неподдельная восторг триумфа! Помощь всегда на связи: Нашей команды команда непрерывно в доступе, готовый помочь тебе во любой обстоятельстве. Если даже коль ты потерялся вокруг светил, мы все поможем найти направление домой. ?? Как приступить? Легко подпишись к данный источник и затем риньтесь в путешествие! Затем вас подстерегают неисчерпаемые пределы шансов а океан наслаждения.
Не нужно упустить момент, как твоя звезда засветится ярче каждого!
#kometa #casino #Премии #Успех #CometaCasino #kometacasino
On-line therapy has truly transformed the means people look for help. It uses benefit and availability like never prior to! Look into more regarding it at evolve psychiatry
I’ve seen remarkable improvements since starting my therapy sessions. Check out the benefits at physical therapist
Appreciate the great suggestions. For more, visit Moving Company In San Jose CA
Medicament prescribing information. Short-Term Effects.
can you get cheap dilantin without dr prescription
Some about drug. Read now.
Keeping up with algorithm changes is challenging but necessary – thanks for sharing these insights! For updates google ads management
The selection of online specialists available is impressive. It behaves to have choices that cater to various demands and choices! Examine them out at psychiatrist near me accepting medicaid
Допустим, мы собрали в купон 4 события. Сумма 1 нашей ставки – 10 рублей. Волейбол. Южная Корея (муж) — Мьянма (муж). Событие состоится 30 марта 2017 года в 12:25. Мы ставим, что 1-ый выиграет 15-й поинт в 1-м гейме. Казино предлагает коэффициент 1,45. Если ставим 10 рублей, то получаем 10*1,45=14,5 рублей. Волейбол. Аир Форце (муж) — Нэви (муж) 3-й сет. Оно намечено на 30 марта 2017 года в 09:15. Мы ставим, что после 30 очков будет П1. На исход предлагают коэффициент 1,62. Теннис. ITF. К.Ониши/Ёнемура — Като/Хироко Кувата. Противостояние японских теннисистов начнется 30 марта 2017 года в те же 09:15. Мы ставим, что гейм 18: 40:40 Нет. Коэффициент Казино небольшой. Он составляет всего 1,36. Хоккей. ЦСКА (г.Москва) — Витязь (г.Чехов). Встреча хоккеистов должна состояться 1 апреля 2017 года в 18:00. Казино принимает ставки с ОТ. Мы выбираем тотал от 2 до 4. Судя по коэффициенту, вероятность наступления события высока. Коэффициент в Казино составляет 1,45.
Вариант №1. Выиграли все события Рассчитаем прибыль по каждому из 4-х. П2 в противостоянии «Волейбол. Южная Корея (муж) — Мьянма (муж)». Выигрыш — 10х1,45=14,5 рублей. П1 во встрече «Волейбол. Аир Форце (муж) — Нэви (муж) 3-й сет». Расчет осуществляется по другой формуле. (14,5 – 10) + 10х1,62. Получается, 4,5+16,2=20,7 рублей. Именно столько принесет вам цепочка. 3-я ставка на «Теннис. ITF. К.Ониши/Ёнемура — Като/Хироко Кувата». Ее расчет: (20,7 – 10) + 10х1,36 = 10,7+13,6 =24,3 рублей. 4-я ставка на хоккей. Здесь мы получим (24,3 – 10) + 10х1,45. Это значит, что 14,3+14,5=28,8 руб. Размер выигрыша по ставке составит 28,8 рублей. Вариант №2. Второе событие не прошло. Выиграли первое, третье, а также четвертое Выигрыш по первой ставке будет 10х1,45=14,5 рублей. Со второй в купоне нам не повезло. Придется смириться с убытком (14,5 – 10)=4,5 рублей. Именно 4,5 рубля и остается на счету цепочки. 3-я ставка проходит. Но ее расчет осуществляется по другим правилам. Он составляет 4,5 х 1,36 = 6,12 рублей. Остаток на счету нашей цепочки будет 6,12 руб. 4-ю ставку в Казино также рассчитают по правилам. Получается 6,12 х 1,45 = 8,87 рублей. Эти 8,87 рублей и станут вашим выигрышем. Вариант №3. Третье событие не прошло. Выиграли только первое, второе и четвертое Здесь снова меняется принцип расчета. Ставка №1 приносит 10х1,45=14,5 рублей. Пари №2 выглядит привлекательно. (14,5 – 10) + 10х1,62. Это 4,5+16,2=20,7 рублей. Ставка №3 рассчитается в минус. Она составит 320,7 – 10 = 10,7 руб. Пари №4 принесет нам окончательный выигрыш по ставке. Его сумма — (10,7 – 10) + 10х1,45. Это 0,7+14,5 =15,2 рублей. Это и есть наша прибыль. Теперь вы знаете, какие в X правила ставок цепочка. Использовать или не использовать вариант? Правила ставок икс позволяют вам смело заключать пари. Рискнете или откажетесь? Играть бесплатно dolphins pearl X (дельфин Икс): [url=https://yar-madagackar.ru/]официальное зеркало X[/url]
Выбираем букмекера по марже Маржа букмекера – один из самых важных факторов, который влияет на ваш выбор. Казалось бы, о чём тут думать: выбирай букмекера с самой низкой маржей да делай ставки. Если бы всё было так просто! У любого букмекера есть свои минусы, и, даже если комиссия у него очень низкая, это не значит, что контора вам полностью подойдёт. Все Казино можно разделить на фундаментальные и низкомаржинальные. Давайте поговорим подробнее о том, что это такое, о преимуществах и недостатках. Фундаментальные букмекерские компании. Вы прекрасно знаете такие компании, потому что их, на самом деле, подавляющее большинство. Таких букмекеров ещё называют классическими и традиционными. Это компании с большой линией, с огромной росписью, которая привлекает клиентов, у них большие бонусы, хорошие акции по привлечению клиентов, но есть один существенный минус: при всей своей крутости фундаментальные Казино закладывают в коэффициенты довольно высокую маржу. Грубо говоря, они завлекают клиентов массовостью и приятной обёрткой. Какой размер у маржи в такой компании? Разный. В среднем он составляет 5-7%, но есть и Казино, где маржа превышает 10%. В таких компаниях больше играют новички в ставках на спорт. Красивый продукт, хорошие бонусы. Большая линия и хорошая роспись, которые очень и очень привлекают игроков. Однако не стоит думать, что профессионалы избегают фундаментальных букмекеров. Нет, их там тоже можно встретить. Другой вопрос, что для них это – не основная компания. Но если одно из плеч вилки предлагает такая компания, разумеется, профессионал совершит там ставку. Или увидит, что поток денег идёт на один исход матча, и сделает ставку на противоположный завышенному коэффициент. Фото: Lars Baron/Bongarts/Getty Images. Низкомаржинальные букмекерские компании. За этих букмекеров говорит их название. Маржа здесь на порядок ниже, чем у классических букмекеров. В коэффициенты таких компаний заложено не более 3-4% комиссии. Отсюда вывод: в таких Казиноах будут высокие коэффициенты, что, конечно, понравится игрокам на ставках. Но у таких контор есть свои проблемы. В первую очередь – это скудная линия событий. И даже на топовые матчи роспись не порадует игрока. Основные исходы и десяток дополнительных, не больше. И это – сознательный выбор букмекера. Низкая маржа требует от него более кропотливой работы по балансированию потоков, чтобы заработать. Поэтому здесь работают по принципу лучше меньше, да лучше. Низкомаржинальные Казино лояльно относятся к профессиональным игрокам на ставках. Здесь будут очень высокие максимальные лимиты для ставок, приветствуются крупные суммы пари. Кроме того, если вы будете играть в плюс на дистанции в низкомаржинальной Казино, порезки максимумов не произойдёт. Поэтому профессионалы в основном играют именно в таких компаниях. А вот новичкам здесь банально скучно. Выбор маловат. Итак, теперь вы знаете, как букмекеры используют маржу, и готовы выбрать подходящую для вас компанию по этому критерию. Удачных ставок!
Винлайн — Открытие и пополнение счета Добавить деньги на баланс и начать совершать ставки в конторе Winiline можно весьма оперативно, ведь организация работает с самыми популярными и удобными для жителей РФ способами оплаты. Вот, как это осуществить. Вводите логин и пароль на официальной площадке, нажимаете на кнопку “Пополнить счёт” вверху страницы, справа. Либо переходите на вкладку “Мой счёт” и в выпадающем перечне идёте на вкладку “Пополнение и вывод средств”. Вы окажетесь на странице пополнения аккаунта Казино Винилайн, где будут доступные методы пополнения: Банковские пластиковые карты Visa и Mastercard. Интернет-кошельки Киви, ЯД, Монета.ру. При помощи сотовых операторов.
Азартное заведение В сети: Ваш Путеводитель в Мир игровых Развлечений
Что представляет собой онлайн казино и каким образом подобрать надежное?
Азартное заведение онлайн – является сетевые платформы, предоставляющие широкий диапазон игровых игр: с классических игровых автоматов и слотов по захватывающих игральных игр, как рулетка, двадцать одно и игра в карты. Но, чтобы достичь максимальное удовольствие из игры, необходимо подобрать надежное казино, которое обеспечивает справедливость и безопасность.
Основные параметры подбора:
Разрешение: Лицензионные азартные заведения гарантируют справедливость игры и защищенность ваших денег. Убедитесь в присутствии разрешения перед регистрацией.
Рейтинг и комментарии: Изучите рейтинг азартного заведения и отзывы о азартное заведение со стороны других игроков. Данное поможет тебе выбрать надежное заведение.
Бонусы и акции: Азартные заведения с бонусами предоставляют привлекательные варианты для новых и постоянных пользователей. Уделите внимание на бесплатные поощрения, бесплатные прокрутки и иные акции.
Выбор игр: Передовые онлайн казино предоставляют обширный ассортимент игр для каждый предпочтение. Находите казино с игровыми автоматами, колесом фортуны, двадцатью одним, покером и иными развлечениями.
Вывод денег: Позаботьтесь, чтобы казино с выводом средств предлагает удобные и оперативные способы забора выигрыша.
Поддержка: Надежные казино предоставляют хорошую поддержку на русском языке для пользователей из РФ.
Защита: Безопасные азартные заведения защищают ваши сведения с использованием современных технологий шифрования.
?? Бонусы и акции в онлайн казино
Сетевые азартные заведения заманивают новичков игроков обильными поощрениями азартного заведения. При выборе заведения, уделите внимание к:
Вступительный бонус: Приветственный бонус за регистрацию – превосходная шанс начать развлечение с дополнительными средствами.
Бесплатный поощрение: Бездепозитные поощрения дают возможность играть в азартном заведении даром, без кладя деньги.
Фриспины: Бесплатные вращения или бесплатные вращения – шанс развлечься в игровые автоматы бесплатно.
Промокоды: Промокоды казино дают резервные бонусы и преимущества.
Возврат: Кэшбэк казино возвращает долю потерянных денег.
Спецпредложения казино: Принимайте участие в постоянных спецпредложениях и принимайте дополнительные поощрения.
Многообразие игр в сетевом казино
В онлайн азартном заведении ты обнаружите большой выбор азартных развлечений:
Игровые слоты: Азартные автоматы онлайн или слоты – наиболее известный тип развлечений.
Рулетка: Традиционная игра, которая не лишается своей значимости.
Блэкджек: Интеллектуальная карточная игра, нуждающаяся планирования.
Покер: Различные типы покера ради поклонников карточных игр.
Баккара, бинго, кено: Иные популярные игровые развлечения.
Живое азартное заведение: Получайте удовольствие от игрой с реальными дилерами.
Переносное азартное заведение: играйте в всяком месте
Мобильное азартное заведение – это удобный способ наслаждаться игрой в любом точке и в всякое момент. Ты имеете возможность играть в любимые развлечения казино непосредственно с твоего смартфона или планшета.
Где начать развлекаться в сетевом казино?
Чтобы развлекаться в казино и наслаждаться игры, казино онлайн играть исполняйте этим простым шагам:
Подберите азартное заведение: Изучите оценку казино и подберите надежное заведение.
Запишитесь: Завершите быструю запись в казино.
Зачислите аккаунт: Зачислите счет в азартном заведении комфортным методом.
Запустите развлекаться: Выберите развлечение и получайте удовольствие от процессом!
Каким образом выиграть в азартном заведении и каким образом снять средства?
Игра в казино на деньги – это не лишь азарт, а и возможность выиграть. Учитесь, улучшайте свои навыки и развлекайтесь ответственно. Казино с выводом обеспечивают быстрый и комфортный вывод средств из азартного заведения многообразными способами.
Разгорись твою светило удачи бок о бок с “Kometa casino”! ?
Привет, искатель похождений! Вы готов пуститься на звездное вояж, в коем любая привал сулит потрясающие бонусы да головокружительные ощущения?
В этом случае вам несомненно стоит вступить к этому эксклюзивному телеграм-каналу комета казино с высокими коэффициентами . Тут тебя поджидают совсем не лишь игры, но настоящие галактические похождения, переполненные внезапных витков а также ослепительных сияний везения!
Зачем предпочитают нас?
Космические бонусы: Регистрируйся на нашу общую экипаж а возьми начальный комплект премий, что содействует тебе оперативнее добиться твоей мечты. Геймерские планеты: Местные гэмблинг слоты – представляют собой настоящие вселенные, наполненные секретами и даже ценностями. Изучай каждый из них до единой и конечно же открой заветный идеальный аппарат! Конкурсные галактики: Принимай участие на космических соревнованиях а также битва за титул лучшего игрока космоса. Призовые банки настолько масштабны, что могут в силах ослепить даже абсолютно яркую светило! Быстрая перевод: Едва только вы добьешься успеха, личные деньги осуществятся мгновенно переведены на собственный кошелек. Совершенно никаких задержек – только чистая восторг триумфа! Поддержка круглосуточно: Нашей команды состав непрерывно в контакте, нацеленный помочь вам во какой угодно обстоятельстве. Пусть даже если ты потерялся вокруг звезд, мы посодействуем открыть направление к себе. ?? Как начать? Всего лишь подпишись к данный канал и затем риньтесь в полет! Дальше тебя ждут неисчерпаемые горизонты возможностей и море удовольствия.
Не стоит упустить минуту, в тот момент когда твоя светило засветится блестящее абсолютно всех!
#kometa #casino #Премии #Выигрыш #КометаКазино #kometacasino
Thanks for shedding light on this topic! Physical therapy is vital for many conditions, learn more at Physioactif Chomedey – physiothérapie Laval