PARTEA DE HELP ESTE EXTINSA IN IDE-URILE ACTUALE CU BLOGURI ,FORUMURI , EXEMPLE DE COD GEN INTELISENSE IN VISUAL STUDIO SAU IN ANDROID STUDIO
Structura unui program C++ :
zona de declaratii
#include.....//se pun fisiere header numite si fisiere antet uneori se scriu fara .h daca asa cere compilatorul
int a,..
float c...//se declara variabile , tipuri de date , functii create de programator
zona de instructiuni
aici se pun in ordine toate instructiunile functiei principale (numita si programul principal main)
incepe cu void main () {.......}
sau incepe cu int main(){....return 0;}
daca incepe cu int instructiunea return e obligatorie .
Functiile create si declarate ca atare in zona de declaratii au si ele o zona proprie de declaratii si o zona proprie de instructiuni .
Uneori compilatoarele lucrează cu nume de spatii de lucru .
MINGW si CODEBLOCKS , dar si CPPDROID utilizează instrucţiunea used namespace std;
INSTRUCTIUNI C++ :
sau do{ instr; } while(conditie);
instructiunea cu test initial are conditia inainte de executia grupului de instr pe care il repeta
instr repetitiva cu test final are conditia dupa grupul de instr repetat
efect : la instr repetitive (numite si iterative) daca avem contor avem repetitia facand diferenta intre valoarea maxima si cea minima a contorului ; daca avem test initial si testul e fals de la bun inceput instr nu se va executa niciodata ; daca avem test fals si avem instr repetitiva cu test final atunci aceasta se executa cel putin o data
in C++ si in multe alte limbaje de programare se folosesc doar paranteze rotunde la expresii , nu paranteze drepte sau acolade ca la expresiile din manuale de matematică
if(cond) instr1 ; else instr 2 ; e selectia duală
Există şi instr selectivă cu variabilă selector
(numita si selectie multipla) :
case(c)
{
valoare_1:instr_1; break;
valoare_2:instr_2;break;
valoare_n:instr_n; break;
else instr;
}
SINTAXA -totalitatea regulilor utilizate în scrierea programelor
Spre exemplu o regulă : se separă instrucțiunile cu punt și virgulă.
! reprezintă negația
|| ori (sau) logic
&& si logic
; separator instructiune
/* text */ comentariu pe mai multe randuri (text explicativ)
v++ postincrementare - cresterea variabilei v cu o unitate dupa ce e folosita cu
valoarea curenta
++v-preincrementare a lui v
creste cu 1 si apoi e folosit in expresii
--v- deincrementeaza v si apoi se foloseste v in calcule
v-- utilizare cu valoarea curenta si apoi deincrementare
v=v+5; v+=5; echivalente
! -negatia logica
= atribuire v=5;
== egalitate
a==b e propozitie cu valoarea 1 daca e adevarat si 0 altfel
cout<<"text"<<v; afiseaza text si apoi valoarea lui v
cout<<endl; trece la randul urmator endline
cout<<"text"<<v<<endl;
cin>>v;
gets(v); daca v e sir de caractere sau caracter
puts(v); daca v sir/caracter
getchar(v); pt caracter
putchar(v); caracter
getch();
getche(); citire cu ecou a unui caracter
scanf("%d", &v); citire cu format printf("%d text",v); scriere cu format
APLICATIE pentru SCRIERE SI CITIRE
#include<stdio.h>
using namespace std;
float a,b=3.67;//b var initializata
//b se comporta ca o const daca nu e modif
int main()
{
printf("a= ");
scanf("%f",&a);
printf ("suma=%f",a+b);//%f descriptor de format
return 0;
}
Se dă algoritmul de mai jos in pseudocod .
Declară n,i,s
citeste n
s=0
scrie n+10
Pentru i de la 1 la 10
{
scrie n+i
s=s+n+i
}
scrie s
a. Ce afiseaza pt n=10 ?
b.Inlocuiti structura repetitiva pentru (cu contorul i) cu instr repetitiva cu test initial
c.program C++ pt alg de mai sus
REZOLVARE
a.
Raspuns la a ) 25 25 25 25 25 25 30
Aplicatie -verificare scris si practic
CEL MAI MIC MULTIPLU COMUN DINTRE a si b
Stiind ca cel mai mic multiplu comun pentru a si b este a*b/(a,b) , unde cu (a,b) se noteaza conventional cmmdc dintre a si b se cere sa scrieti programul corespunzator avand in vedere ca datele de intrare sa foloseasca fisierul in.txt si cele de iesire out.txt .
De asemeni se cere codificarea in stil CodeBlocks -compilator MINGW .
APLICATIE PRACTICA MINIMUL intr-un vector
#include<iostream.h>
int i,j,min,a[10];
int main()
{
cout<<"nr de elemente = " ;cin>>j;
min=32767;//maxint
for(i=0;i<j;i++) { cin>>a[i]; if (a[i]<min) min=a[i]; }
cout<<min;
return 0;
}
zona de declaratii
#include.....//se pun fisiere header numite si fisiere antet uneori se scriu fara .h daca asa cere compilatorul
int a,..
float c...//se declara variabile , tipuri de date , functii create de programator
zona de instructiuni
aici se pun in ordine toate instructiunile functiei principale (numita si programul principal main)
incepe cu void main () {.......}
sau incepe cu int main(){....return 0;}
daca incepe cu int instructiunea return e obligatorie .
Functiile create si declarate ca atare in zona de declaratii au si ele o zona proprie de declaratii si o zona proprie de instructiuni .
Uneori compilatoarele lucrează cu nume de spatii de lucru .
MINGW si CODEBLOCKS , dar si CPPDROID utilizează instrucţiunea used namespace std;
INSTRUCTIUNI C++ :
- instructiuni de scriere printf si cout ex: printf("%f",c); cout<<c;
- de citire scanf si cin ex: scanf("f",&c) ; cin>>c;
- de atribuire =
- instructiunea compusă {......mai multe instructiuni separate prin ; }
- instrucţiuni repetitive
for(contor=val initiala ;contor<=val finala;contor++) instructiune ;
sau do{ instr; } while(conditie);
instructiunea cu test initial are conditia inainte de executia grupului de instr pe care il repeta
instr repetitiva cu test final are conditia dupa grupul de instr repetat
efect : la instr repetitive (numite si iterative) daca avem contor avem repetitia facand diferenta intre valoarea maxima si cea minima a contorului ; daca avem test initial si testul e fals de la bun inceput instr nu se va executa niciodata ; daca avem test fals si avem instr repetitiva cu test final atunci aceasta se executa cel putin o data
- instrucţiuni de declarare
- cunoştinţe despre expresii in C++ , de fapt evaluarea se face pe baza conceptiei de "precedenta a operatorilor " (stim ca se executa intai produsul apoi scaderea , se poate evita o situatie ambigua folosind paranteze cand e cazul in cadrul expresiilor)
in C++ si in multe alte limbaje de programare se folosesc doar paranteze rotunde la expresii , nu paranteze drepte sau acolade ca la expresiile din manuale de matematică
- instructiuni selective(numite si conditionale sau alternative)
if(cond) instr1 ; else instr 2 ; e selectia duală
Există şi instr selectivă cu variabilă selector
(numita si selectie multipla) :
case(c)
{
valoare_1:instr_1; break;
valoare_2:instr_2;break;
valoare_n:instr_n; break;
else instr;
}
SINTAXA -totalitatea regulilor utilizate în scrierea programelor
Spre exemplu o regulă : se separă instrucțiunile cu punt și virgulă.
! reprezintă negația
|| ori (sau) logic
&& si logic
; separator instructiune
/* text */ comentariu pe mai multe randuri (text explicativ)
v++ postincrementare - cresterea variabilei v cu o unitate dupa ce e folosita cu
valoarea curenta
++v-preincrementare a lui v
creste cu 1 si apoi e folosit in expresii
--v- deincrementeaza v si apoi se foloseste v in calcule
v-- utilizare cu valoarea curenta si apoi deincrementare
v=v+5; v+=5; echivalente
! -negatia logica
= atribuire v=5;
== egalitate
a==b e propozitie cu valoarea 1 daca e adevarat si 0 altfel
cout<<"text"<<v; afiseaza text si apoi valoarea lui v
cout<<endl; trece la randul urmator endline
cout<<"text"<<v<<endl;
cin>>v;
gets(v); daca v e sir de caractere sau caracter
puts(v); daca v sir/caracter
getchar(v); pt caracter
putchar(v); caracter
getch();
getche(); citire cu ecou a unui caracter
scanf("%d", &v); citire cu format printf("%d text",v); scriere cu format
APLICATIE pentru SCRIERE SI CITIRE
#include<stdio.h>
using namespace std;
float a,b=3.67;//b var initializata
//b se comporta ca o const daca nu e modif
int main()
{
printf("a= ");
scanf("%f",&a);
printf ("suma=%f",a+b);//%f descriptor de format
return 0;
}
Un model de subiect I pentru proba de informatică la bac REZOLVAT mai jos :
Se dă algoritmul de mai jos in pseudocod .
Declară n,i,s
citeste n
s=0
scrie n+10
Pentru i de la 1 la 10
{
scrie n+i
s=s+n+i
}
scrie s
a. Ce afiseaza pt n=10 ?
b.Inlocuiti structura repetitiva pentru (cu contorul i) cu instr repetitiva cu test initial
c.program C++ pt alg de mai sus
REZOLVARE
a.
n
|
i
|
s
|
||
10
|
1
|
11
|
||
2
|
22
|
|||
3
|
33
|
|||
……
|
……
|
|||
110
|
R: 20 11 12 ……20 110
b. i=1cat timp(i<=10){.................................................i=+1}
c.#include<iostream.h>
int n,i,s;
void main()
{cin>>n;s=0;cout<<n+10;
for(i=1;i<=10;i++) { cout<<n+i; s=s+n+i; }cout<<s;}
TEST 1
Test cu 4 intrebări. la sfarsit
Pentru itemul 1, scrieţi pe foaia de examen litera corespunzătoare răspunsului corect.
1. Variabila x este de tip real. Care dintre următoarele expresii C/C++ are valoarea 1 dacă şi
numai dacă numărul real memorat în variabila x aparţine intervalului (5,8]? (1p.)
a. (x<8) && (x>=5) b. (x<=8) || (x>5)
c. (x>8) || (x<=5) d. (x<=8) && (x>5)
Scrieţi răspunsul pentru fiecare dintre cerinţele următoare.
2. Se consideră algoritmul alăturat, descris în pseudocod.
citeşte n (număr natural)
z=0
p=1
┌cât timp n>0 execută
│ c=n%10
│ n=[n/10]
│┌dacă c%3=0 atunci
││ z=z+p*(9-c)
││ p=p*10
│└■
└■
scrie z
scrie z
S-a notat cu x%y restul împărţirii numărului întreg x la numărul
întreg nenul y şi cu [a] partea întreagă a numărului real a.
a) Scrieţi valoarea care se va afişa dacă se citeşte
n=103456. (3p.)
b) Scrieţi toate numere naturale impare, distincte, fiecare
având exact două cifre, care pot fi citite pentru variabila
n astfel încât să se afişeze valoarea 3. (2p.)
c) Scrieţi în pseudocod un algoritm, echivalent cu cel dat,
în care să se înlocuiască structura cât timp...execută
cu o structură repetitivă de alt tip. (2p.)
2p (of)
Rezolvare:
La 1 avem raspuns corect b si d
la 2 a) se face un tabel
Rezolvare:
La 1 avem raspuns corect b si d
la 2 a) se face un tabel
n
|
c
|
z
|
p
| |
103456
|
6
|
0
|
1
| |
10345
|
3
|
10
| ||
1034
|
5
| |||
103
|
4
| |||
3
|
63
|
100
| ||
10
|
0
|
963
|
1000
| |
1
|
1
| |||
0
|
Cel mai probabil afiseaza 963
2 b) pt n=16 observam
n
|
c
|
z
|
p
| |
16
|
0
|
1
| ||
1
|
6
|
3
|
10
| |
0
|
1
| |||
presupunem ca daca prima cifra nu e diviz cu 3 dar ultima e 6 avem f probabil valorile
16,26,46,56,76,86
c) citeşte n (număr natural)
z=0
p=1
daca n>0 atunci
┌repeta
┌repeta
│ c=n%10
│ n=[n/10]
│┌dacă c%3=0 atunci
││ z=z+p*(9-c)
││ p=p*10
│└■
└■ pana cand(n=0)
scrie z
S-a inlocuit instructiunea repetitiva cu test initial cu cea cu test final.
Intrebari
1. Observati ca am inlocuit instr repetitiva cu test initial cu instr repetitiva cu test final !
De ce se pune inaintea instructiunii repetitive cu test final o instructiune conditionala cu exact aceeasi conditie ca in instr repetitiva cu test initial?
2.Mentionati numele variabilelor intalnite in algoritm
3.Mai sus avem doua modalitati diferite de reprezentare a algoritmilor . Care sunt ?
4.Ce inseamna % , &&, ||, [ ] in algoritmul de mai sus ?
scrie z
S-a inlocuit instructiunea repetitiva cu test initial cu cea cu test final.
Intrebari
1. Observati ca am inlocuit instr repetitiva cu test initial cu instr repetitiva cu test final !
De ce se pune inaintea instructiunii repetitive cu test final o instructiune conditionala cu exact aceeasi conditie ca in instr repetitiva cu test initial?
2.Mentionati numele variabilelor intalnite in algoritm
3.Mai sus avem doua modalitati diferite de reprezentare a algoritmilor . Care sunt ?
4.Ce inseamna % , &&, ||, [ ] in algoritmul de mai sus ?
Test 2 (lucrare scrisa)
1. Se da algoritmul
Declarăm n,i,s
Citește n
S=0
Scrie n*n
Pentru i de la 1 la 5
{
Scrie n* n
s=s+n+1
}
Scrie s
a. Ce afișează pt n=5?
b.inlocuiti structura repetitiva pentru cu alta structura repetitiva
c.scrieti programul C++
Raspuns la a ) 25 25 25 25 25 25 30
pentru ca datele arata conform tabelului
n
|
i
|
s
|
5
|
0
|
|
5
|
1
|
6
|
5
|
2
|
12
|
5
|
….
|
…..
|
5
|
5
|
30
|
la b) avem o initializare a variabilei i cu
i=1
Cat timp( i< =5)
{. ...... i++; }
La c) e listat mai jos
#include<iostream.h>
int n,i,s;
int main()
{cin>>n;s=0;cout<<n*n;
for(i=1;i<=5;i++)
cout<<n*n; s=s+n+1; }cout<<s;return 0;}
TEST 3 (Varianta 002 la bac-subiectul I)
Pentru itemul 1, scrieţi litera corespunzătoare răspunsului corect.
1. Variabilele x şi y sunt tip int. Care dintre expresiile C/C++ de mai jos are valoarea 1
dacă şi numai dacă valorile întregi nenule memorate în variabilele x şi y sunt egale? (4p.)
a. (x%y==0) && (y%x==0) && (x*y>0) b. (x<=y) && (y<x)
c. (x<=y) || (y<=x) d. x*x==y*y
Scrieţi răspunsul pentru fiecare dintre cerinţele următoare.
2. Se consideră algoritmul alăturat, descris în
pseudocod.
S-a notat cu x%y restul împărţirii numărului întreg x la
numărul întreg nenul y.
a) Scrieţi ce se va afişa dacă se citesc, în această
ordine, numerele: 17 22 13 101 2 7 5 0.
b) Scrieţi un şir de date de intrare, format doar din
numere naturale cu cel mult două cifre fiecare,
care să determine afişarea valorii 9877.
citeşte x (număr natural nenul)
┌cât timp x>0 execută
│ citeşte y (număr natural)
│┌dacă x>y atunci
││ scrie x%10
││altfel
││ scrie y%10
│└■
│ x=y
└■
c) Scrieţi în pseudocod un algoritm echivalent cu cel dat, în care să se înlocuiască structura
cât timp...execută cu o structură repetitivă de alt tip. (6p.)
d) Scrieţi programul C/C++ corespunzător algoritmului dat.
Rezolvare
a)
17 22 13
101 2 7 5 0
x
|
y
|
17
|
22
|
22
|
13
|
13
|
101
|
101
|
2
|
2
|
7
|
7
|
5
|
5
|
0
|
0
Se vor
afisa 2 2 1
1 7 7 5
b) pentru a
afisa 9877 se va citi de la tastatura sirul
9,8,7,7,0
Am pus 0 pt
ca algoritmul sa se opreasca
c) citeste
x
daca x>0
atunci repeat
citeste y;
daca
x>y atunci scrie x%10 altfel scrie y%10;
x=y;
pana cand x=0
d)
programul C++
#include<iostream.h>
int x,y;
void main()
{
cin>>x;
while(x>0)
{ cin>>y;
if x>y cout<<x%10 ; else cout
<<y%10;
}
x=y;
}
Operații cu fișiere
http://lectiideticsiinfo.blogspot.ro/p/operatii-cu-fisiere-text-bac.html
Probleme propuse
Se dau a,b, c . Verificati daca sunt sau nu laturi ale unui triunghi .
rezolvare
Inegalitatea triunghiului
#include <iostream>
#include <stdlib.h>
using namespace std;
int main()
{
int a, b, c;
cin>>a>>b>>c;
if (!((a+b>c)
&& (a<b+c) && (b<a+c)) )
{
cout<<"nu este triunghi";
exit(0);
}
else cout<<"este triunghi";
return 0;
}
!! SE CERE PT PROBLEMA REZOLVATA MAI SUS CU INEGALITATEA TRIUNGHIULUI SA CITITI A,B,C DIN A.TXT SI SA SCRIETI DACA E SAU NU TRIUNGHI IN B.TXT
Se citeste n din fisierul a.in si se scrie in b.out daca este sau nu număr prim .
Se dau a si b numere intregi . Sa se scrie in fisierul a.out daca sunt divizibile cu 3.
Se va lua un numar si se vor elimina zerourile dintre cifrele sale .
Se va verifica daca un numar este palindrom . (citit dreapta -stanga e la fel cu citirea stanga-dreapta)
Se va scrie un program pentru extragerea radicalului dintr-un numar real a.
alte probleme rezolvate ,propuse pt pregătire suplimentară
Se va scrie un program pt calculul ariei unui triunghi cu formula lui Heron . ( SE VA VERIFICA DACA a,b,c sunt laturi ale unui triunghi) .
Se vor face grupe de maxim 5 elevi si se va realiza proiectul in format .doc .cpp si ca prezentare .
APLICATIE :CMMDC pt n numere folosind fisierele a.txt pt citirea lui n si a n numere , urmând ca rezultatul să se scrie în b.txt .
#include<iostream>
#include<fstream>
uses namespace std;
int a[10],n,i,j,k;
ifstream f("a.txt");
ofstream g("b.txt");
int main()
{
clrscr();
f>>n;for(i=1;i<=n;i++)
f>>a[i];
for(i=1;i<n;i++)
while(a[i]!=a[i+1])
{if(a[i]>a[i+1]) a[i]=a[i] -a[i+1];
if (a[i]<a[i+1]) a[i+1]=a[i+1]-a[i];
}
g<<a[n]<<" este cmmdc";
return 0 ;
}
Aplicație Distante.Segmente.Reprezentare și calcul.
Calculati pt doua puncte A de coordonate x0,y0,z0 si B de coordonate x1,y1 si z1 distanta d . Coordonatele se vor introduce dintr-un fisier .
Se cere si o reprezentare grafica .
Se cere si o reprezentare grafica .
Indicatie 1 : pt a reprezenta grafic segmentul pe ecran se poate utiliza in Turbo C++ codul :
#include<graphics.h>
#include<conio.h>
#include<iostream.h>
int x1,x2,y1,y2,gd=DETECT,gm;
int main()
{
cout<<"x1=";cin>>x1;cout<<"x2=";cin>>x2;
cout<<"y1=";cin>>y1;cout<<"y2=";cin>>y2;
initgraph(&gd,&gm,"");
setcolor(10);
line(x1,y1,x2,y2);
getch();
closegraph();
getch(); return 0;
}
Dacă avem un segment în spațiul tridimensional se utilizează perspectiva (metodă de reprezentare în plan bidimensional cum e ecranul unui calculator a unui obiect din spatiul 3D).
Indicatie 2 :distanta dintre A și B în planul tridimensional este radical de suma patratelor diferentelor dintre x0 si x1 , y0 si y1 , z0 si z1 .
#include<conio.h>
#include<iostream.h>
int x1,x2,y1,y2,gd=DETECT,gm;
int main()
{
cout<<"x1=";cin>>x1;cout<<"x2=";cin>>x2;
cout<<"y1=";cin>>y1;cout<<"y2=";cin>>y2;
initgraph(&gd,&gm,"");
setcolor(10);
line(x1,y1,x2,y2);
getch();
closegraph();
getch(); return 0;
}
Dacă avem un segment în spațiul tridimensional se utilizează perspectiva (metodă de reprezentare în plan bidimensional cum e ecranul unui calculator a unui obiect din spatiul 3D).
Indicatie 2 :distanta dintre A și B în planul tridimensional este radical de suma patratelor diferentelor dintre x0 si x1 , y0 si y1 , z0 si z1 .
Se utilizeaza # include <math.h>
DISTANTA INTRE A si B
#include <iostream>
#include<math.h>
using namespace std;
double x1,y1,z1,x2,y2,z2;
int main()
{
cout << "x1= " ;
cin>>x1;
cout<<"y1=";cin>>y1;
cout<<"z1=";cin>>z1;
cout << "x2= " ;
cin>>x2;
cout<<"y2=";cin>>y2;
cout<<"z2=";cin>>z2;
cout<<"distanta este = "<<sqrt(pow(x2-x1,2)+pow(y2-y1,2)
+pow(z2-z1,2));
return 0;
}
DISTANTA INTRE A si B
#include <iostream>
#include<math.h>
using namespace std;
double x1,y1,z1,x2,y2,z2;
int main()
{
cout << "x1= " ;
cin>>x1;
cout<<"y1=";cin>>y1;
cout<<"z1=";cin>>z1;
cout << "x2= " ;
cin>>x2;
cout<<"y2=";cin>>y2;
cout<<"z2=";cin>>z2;
cout<<"distanta este = "<<sqrt(pow(x2-x1,2)+pow(y2-y1,2)
+pow(z2-z1,2));
return 0;
}
Aplicatie -verificare scris si practic
CEL MAI MIC MULTIPLU COMUN DINTRE a si b
Stiind ca cel mai mic multiplu comun pentru a si b este a*b/(a,b) , unde cu (a,b) se noteaza conventional cmmdc dintre a si b se cere sa scrieti programul corespunzator avand in vedere ca datele de intrare sa foloseasca fisierul in.txt si cele de iesire out.txt .
De asemeni se cere codificarea in stil CodeBlocks -compilator MINGW .
APLICATIE PRACTICA MINIMUL intr-un vector
#include<iostream.h>
int i,j,min,a[10];
int main()
{
cout<<"nr de elemente = " ;cin>>j;
min=32767;//maxint
for(i=0;i<j;i++) { cin>>a[i]; if (a[i]<min) min=a[i]; }
cout<<min;
return 0;
}