Sunteți pe pagina 1din 13

Ministerul Educației, Culturii și Cercetării al Republicii Moldova

Centrul de Excelență în Informatică și Tehnologii Informaționale

Sarcini individuale la unitatea de curs


Programarea procedurală

Limbajul C/C++

Lucrare individuală nr.2

Specialitatea: Rețele de calculatoare


Grupa: R-1921

Profesor la discipline de informatică: Măligă Doina


Elev: Ganea Ghenadie, grupa R-1921

CHIȘINĂU, 2020

1
LUCRAREA DE LABORATOR 1

1. Programul de la lecție (lista simplu inlantuita) nu lucrează în cazul în care nu avem


inserareinceput si vrem sa inseram la sfirsit, si in cazul in care vreți să ștergeți primul sau
elementul de dupa ultimul element din listă. Fixați acest lucru!
#include <iostream>
using namespace std;
struct Nod{
int valoare;
Nod* next;
};
Nod* prim=NULL;
void afisarelista(Nod* prim){
while(prim!=NULL){
cout<<prim->valoare<<"\n";
prim=prim->next;
}
}
void InserareInceput(Nod* &prim, int valoarenoua){
Nod* p=new Nod;
p->valoare=valoarenoua;
p->next=prim;
prim=p;
}
void InserareSfirsit(Nod* &prim, int valoarenoua){
if(prim==NULL){
Nod* p=new Nod;
p->valoare=valoarenoua;
p->next=prim;
prim=p;
}
else{
Nod* p=new Nod;
p->valoare=valoarenoua;
p->next=NULL;
Nod* nod_curent=prim;
while(nod_curent->next!=NULL){
nod_curent=nod_curent->next;
}
nod_curent->next=p;}
}
Nod* CautarePozitie(Nod* prim, int pozitie){
int i=1;
while(prim!=NULL){
if(i==pozitie){
return prim;
}

2
i++;
prim=prim->next;
}
return NULL;
}
void StergereElement(Nod* elem){
Nod* elemen=elem->next;
elem->next=elem->next->next;
delete elemen;
}
void StergereElementPoz(Nod* &prim, int poz){
if (prim == NULL)
return;
if (poz == 0)
{
Nod* Sters = prim;
prim = prim->next;
delete Sters;
return;
}
Nod* elem=CautarePozitie(prim,poz);
StergereElement(elem);
}
int main(){
InserareInceput(prim,18);
InserareSfirsit(prim,13);
InserareSfirsit(prim,14);
InserareSfirsit(prim,11);
InserareSfirsit(prim,19);
StergereElementPoz(prim,4);
afisarelista(prim);
}

Rezultat:

3
LUCRAREA DE LABORATOR 2
#include<iostream>
#include<string.h>
#include<stdio.h>
using namespace std;
int main()
{
char str[100], temp;
int i=0, j;
cout<<"\n Introduceti cuvintul : ";
gets(str);
i=0;
j=strlen(str)-1;
while(i<j)///LOOP Pentru inversarea cuvintului
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
i++;
j--;
}
cout<<"\n Cuvintul intors este : "<<str;///Cuvintul intors
return 0;
}

4
5
Lucrare de laborator nr. 3
Avem urmatorul tablou a=[79,40,23,110,11,73,20,60,3].
1. Creati un program care o sa-mi afiseze numarul
100 daca tabloul meu are 9 elemente sau mai mult.
2. Avand tabloul de mai sus creati un program care o
sa-mi calculeze suma tuturor elementelor.
3. Sortati tabloul de mai sus.

#include <iostream>
#include <bits/stdc++.h>
using namespace std;
int main(){
int v[]={79,40,23,110,11,73,20,60,3};
int n=sizeof(v)/sizeof(v[0]),s=0;
if(n>=9){
cout<<"1. 100"<<endl;
}
for(int i=0;i<n;i++){
s=s+v[i];
}
cout<<"2. Suma: "<<s<<endl;
sort(v,v+n);
cout<<"3. Tabloul sortat:";
for(int i=0;i<n;i++){
cout<<v[i]<<" ";
}
cout<<endl;
}

Rezultat:

6
Metoda Greedy
Problema Sumei Maxime
 Se considera o multime de n numere reale. Se cere o submultime a sa cu un
numar maxim de elemente, astfel incat suma elementelor sale sa fie maxima
#include<iostream>
using namespace std;
float A[100],B[100];
int n,m,i;
void Greedy()
{
for(i=1;i<=n;i++)
if(A[i]>=0)
{
m++;
B[m]=A[i];
}
}
main()
{
cout<<"n=";cin>>n;
for(i=1;i<=n;i++)
{
cout<<"A["<<i<<"]=";
cin>>A[i];
}
Greedy();
for(i=1;i<=m;i++)
cout<<B[i]<<" "; }

7
Metoda backtraking
Fie n un număr natural nenul. Să se genereze permutările de n elemente. Indicaţii: pentru
poziţia curentă k din stivă, se parcurge întreg domeniul de valori {1,2,...,n} şi după depunerea
elementului curent, se verifică dacă valoarea este diferită de toate valorile depuse anterior.

#include <iostream>
using namespace std;
int n,st[20];
void afiseaza()
{ for (int j=1;j<=n;j++)
cout<<st[j]<<" ";
cout<<"\n"; }
int valid(int k)
{ int sw=1;
for(int j=1;j<k;j++)
if (st[j]==st[k])
sw=0;
return sw;
}
void back(int k)
{
int i;
for(i=1;i<=n;i++)
{
st[k]=i;
if (valid(k))
if (k==n)
afiseaza();
else back(k+1);
}
}
int main()
{
cout<<"n=";cin>>n;
back(1);
return 0;
}

8
Metoda METODA DESPARTE ŞI STĂPÂNEŞTE

#include<iostream.h>

int a[10],n;

void sort(int p,int q,int a[10])

void interc (int p,int q, int m, int a[10])

else

if (i<=m)

for(j=i;j<=m;j++)

else

for(i=j;i<=q;i++)

k=1;

for(i=p;i<=q;i++)

void divimp(int p,int q, int a[10])

9
main()

divimp(1,n,a);

for(i=1;i<=n;i++)

cout<<a[i]<<' ';

Metoda trierii
Problema 2.Se considera numerele naturale din multimea {0,1,2,
…,n}.Elaborati
un program care determina cate numere prime sunt mai mari decat
numarulnatural dat m.var

i,k,n,m:integer;
function
NrPrim(a:integer):boolean;
var
i:integer;t:boolean;r:real;
 begin
t:=true;r:=sqrt(a);i:=2;
 while
(i<=r)
and
t
do beginif
(a
 mod
i)=0
then

10
t:=false;i:=i+1;
end 
;NrPrim:=t;
end 
;
function
SolutiePosibila(i:integer):boolean;
 begin
SolutiePosibila:=NrPrim(n);
end 
;
 procedure
PrelucrareaSolutiei(i:integer);
 begin
writeln('i=',i);k:=k+1;
end 
;
 begin
writeln('Dati n=');readln(n);writeln('Dati
m=');readln(m);k:=0;writeln('raspuns');
if
NrPrim(n)
then
writeln('numarul ',n,' este prim')
else
writeln('numarul',n,' nu este prim');
for
i:=n+1
to
m
doif
NrPrim(i)=true
and
(i<m)
then
PrelucrareaSolutiei(i);writeln('k=',k);
end 

11
Reprezentarea-grafurilor
Mai jos este o sursă demonstrativă pentru reținerea unui graf orientat prin lista sa de muchii. Aceasta
prezintă o listă de muchii definită global și implementează funcții pentru operațiile descrise mai sus. Pentru
a face sursa să funcționeze cu grafuri neorientate, când comparăm o muchie [x,y][x,y] cu muchia [a,b][a,b],
va trebui să o comparăm și pe [y,x][y,x] cu [a,b][a,b], pentru că poate am reținut-o invers în listă. La fel și
când parcurgem vecinii unui nod. Va trebui să comparăm nodul dat cu ambele extremități ale muchiei
curente.

#include <iostream>using namespace std;


const int VMAX = 618;
struct Edge {
int x, y;
Edge(int x = 0, int y = 0) {
this->x = x;
this->y = y;
}};
int m; // numărul de muchii
Edge edg[VMAX]; // lista de muchii
/// Funcția returnează poziția din vector unde se găsește edge,/// sau -1 dacă muchia
nu există.int find(Edge edge) {
for (int i = 0; i < m; i++)
if (edg[i].x == edge.x && edg[i].y == edge.y)
return i;
return -1;}
void remove(Edge edge) {
for (int i = 0; i < m; i++)
if (edg[i].x == edge.x && edg[i].y == edge.y) {
swap(edg[i], edg[m - 1]);
m--;
return;
}}
void insert(Edge edge) {
edg[m++] = edge;}
void neighbors(int node) {
for (int i = 0; i < m; i++)
if (edg[i].x == node)
cout << edg[i].y << ' ';

12
cout << '\n';}
int main() {
insert(Edge(5, 1));
insert(Edge(5, 2));
insert(Edge(5, 4));

insert(Edge(5, 3));
remove(Edge(5, 3));

cout << find(Edge(5, 2)) << '\n';


cout << find(Edge(2, 5)) << '\n';

neighbors(5);
return 0;}

Cuprins---
 Lucrare de laborator nr.1 ................ 2-3
 Lucrare de laborator nr.2................ 3-4
 Lucrare de laborator nr.3................. 5
 Problema rezolvata cu ajutorul metodei Greedy.....................… 7
 Problema rezolvata cu ajutorul metodei Backtracking..................… 8-9
 Problema rezolvata cu ajutorul metodei Desparte si stapineste.........................9-10
 Problema rezolvata cu ajutorul metodei Metodei trierii.......................10-11-12
 Problema rezolvata cu ajutorul grafurilor........................12-13

13