Limbajul C/C++
CHIȘINĂU, 2020
1
LUCRAREA DE LABORATOR 1
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;
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++)
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.
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));
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