Sunteți pe pagina 1din 14

Centrul de Excelență

în Informatică și Tehnologii Informaționale

Disciplina:
Programarea Structurata
Lucru de studiu individual nr.3

Grupa: B-1911

Nota:
________
Elevul: Grigoraș Dumitru
Profesor: Dovgani Irina
Cuprins:
 Enunțul problemei..................................................3
 Schițarea algoritmului programului..................4-5
 Programul propriu-zis.........................................6-9
 Teste program...................................................10-11
 Prezentarea soluțiilor………………………...12-13
 Concluzie................................................................14

2
 Enunțul primei probleme:
Se consideră tabloul unidimisional A[1..n] cu elemente numere
întregi. Să se compună un program care va transcrie la începutul
tabloului B[1..n] în ordine descrescătoare elementele lui
nenegative, apoi în continuare pe cele negative în ordine
crescătoare. Se va aplica metoda bulelor. Tabloul B se va afișa pe
ecran

 Enunțul problemei doi:


Se consider n puncta pe plan, definite prin coordonatele lor
carteziene(x,y). Să se ordoneze crescător punctele date, după
distanța lor de la originea de cordonate. Indicație: distanța d a
punctului P(x,y) de la origine de cordonate este: d=√( x 2 + y 2).
Intrare: În prima linie a fișierului puncte.txt se conține nr natural
n, iar în fiecare din următoarele n linii se conțin câte 2 numere
reale,x și y(separate prin spațiu), reprezentând abscisa și respective
ordonata.
Ieșire: Fișierul test puncte.out este constituit din n lini, pe fiecare
linie din care se conțin câte 3 numere, separate prin spațiu: în
oridnea abscisa, ordonata, și distanța. Liniile fișierului vor fi
ordonate crescător dupa distanța lor de la origine, aplicând metode
insercției.

3
 Schițarea algoritmului primului programului:

1)Declarăm biblioteca <iostream>


Pentru ca să controla citirea și scrierea in fluxurile standart.
2)Am inculs “using namespace std” aici sunt declarate
caracteristicile ale Bubliotecii Standart C++
3)Am inclus biblioteca<cmatch> pentru a folosi mai multe funcții
matematice cum ar fi abs(),sin() etc.
4)Am adăugat variabilele de care avem nevoie n,I,aux,ok,poz, și
toate de tip int caci avem de lucrat cu nr intregi.
6)Am introdus funcția principala “main()”;
a)Creezi 2 vectori necesari vectorul a și b
a)Prin “cout” cer să fie introdusă lungimea tablourilor.
b)Prin “cin” sunt introduce acestă lungime.
c)Cu ajutorul ciclului for sunt introduce valorile vectorului:
d)Folosind metoda bulelor sortez tot vectorul descrescător.
e)Parcur încă odată vectorul sortat găsind pozitia ultimului
element mai mare sau egal cu 0 și ănscriu valoarea lui în
variabila poz.
f)Din nou folosind metoda bulelor sortez vectorul dar deja
ăncepind de la primul nr negativ în vector sortând numerele
negative ăn ordine crescătoare.
g)Afișez vectorul b pe ecran prin ciclul for.

4
 Schițarea algoritmului programului doi:

1)Declarăm biblioteca <iostream>


Pentru ca să controla citirea și scrierea in fluxurile standart.
2) Declar biblioteca <fstream> pentru a lucre cu fișierele
3) Am inclus biblioteca<cmatch> pentru a folosi mai multe funcții
matematice cum ar fi abs(),sin() etc
4)Am inculs “using namespace std” aici sunt declarate
caracteristicile ale Bubliotecii Standart C++
3)Am creat o structură cu variabile de tip int x,y și variabila de tip
float d, și creez un vectorul v și variabila aux la fel de tipul acestei
structuri;
4)Am introdus funcția principala “main()”;
a)Creez variabilele n,I,k;
b)Fac legătura cu fișierul de unde o sa preiau datele și fișierul
unde ele vor fi afișate care se va crea automat.
c)Este preluată valoare lui n din fișierul puncta.in
e)Prin ciclu while valorile vectorului declarant de tipul
structurii Punct și anume x și y sunt citite din fișier iar
valoarea v[].d este calculată dupa formulă
f)După care prin metoda insercției prin compararea valorilor
v[].d vectorii sunt sortați crescători dupa distanță.
g) După care urmeză inscrierea tuturor datelor în fișierul
output și se ănchid acestea fișiere.

5
 Primul program:

#include<iostream>
using namespace std;
int n,i,aux,ok=0,poz;
int main(){
int a[n],b[n];
cout<<"Introduceti numaru de elemente ale vectoruli:";
cin>>n;
for(i=0; i<n; i++){
cout<<"a["<<i<<"]=";
cin>>a[i];
b[i]=a[i];}
while(ok==0){
ok=1;
for(i=0; i<n-1; i++){
if(b[i]<b[i+1]){
aux=b[i];
b[i]=b[i+1];
b[i+1]=aux;
ok=0;}}}
for(i=0; i<n;i++){
if(b[i]>=0){
poz=i; }}
ok = 0;

6
while(ok==0){
ok=1;
for(int j=poz+1; j<n-1; j++){
if(b[j]>b[j+1]){
aux=b[j];
b[j]=b[j+1];
b[j+1]=aux;
ok=0;}}}
for(int k=0; k<n; k++){
cout<<b[k]<<"\t";}}

7
 Programul doi:

#include<iostream>
#include<fstream>
#include<cmath>
struct Punct{
int x,y;
float d;
}v[100],aux;
using namespace std;
main(){
int n,i=0,k=0;
ifstream f("puncte.in");
ofstream g("puncte.out");
f>>n;
while(i<n){
f>>v[i].x>>v[i].y;
v[i].d=sqrt(pow((v[i].x),2)+pow((v[i].y),2));
i++;
}
for(int i=1 ; i<n ; i++)
{
aux=v[i];
k=i-1;
while(k>=0 && (v[k].d)<aux.d){
v[k+1] = v[k];
8
k--;
v[k+1] = aux;
}}
for(i=0; i<n; i++){
g<<v[i].x<<" "<<v[i].y<<" "<<v[i].d<<endl;}
g.close();
f.close();
}

9
 Teste al primului program:

Date de intrare: Date de ieșire:

n=7; 7 5 4 0 -8 -7 -6
A={ 4, -8 7 6 0 -7 5
n=5; 4 3 2 -5 -1
A={-1,3,4,2,-5}

n=6; 32 1 0 0 -32 -12


A={1,0,0,-12,32,-32}

10
 Prezentarea soluțiilor:
1)

2)

3)

11
 Teste programului doi:

Date de intrare: Date de ieșire:


3 345
-6 8 -6 8 10
9 -12 9 -12 15
34

6 2 1 2.23607
-3 4 2 3 3.60555
21 -3 4 5
35 3 5 5.83095
23 8 1 8.06226
81 9 9 12.7279
99
4 -1 1 1.41421
10 -5 2 -1 2.23607
22 2 2 2.82843
-1 -1 10 -5 11.1803
10

12
 Prezentarea soluțiilor:
1)

2)

3)

13
 Concluzie:

Eu consider ca acest lucru individual m-a ajutat să


Înțeleg mai bine metodele de sorctare în c++ la fel
să analizez cum se operează cu foșierele cum se
scriu și se citesc date dintr-un fișier la fel mi-au
creat abilitățile necesare pentru următoarea
continuare a studierii c++.

14

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