Documente Academic
Documente Profesional
Documente Cultură
RAPORT
despre lucrarea de laborator nr. 6
la Programarea Calculatoarelor
Tema: Analiza algoritmilor ale tehnicii programarii
CHIȘINĂU
2018
Scopul lucrării:
Insusirea materialului teoretic pentru evidentierea esentialului tehnicilor programarii.
Analiza esentei metodelor tenicii de programare si specificul programarii.
Studierea metodei backtracking.
Sarcina lucrării:
De efectuat un program care sa amplaseze pe o tabla de sah NxN numarul maxim de
regine, fara ca acestea sa se atace.
Mersul lucrării:
NOȚIUNI GENERALE
Backtracking este numele unui algoritm general de descoperire a tuturor soluțiilor unei
probleme de calcul, algoritm ce se bazează pe construirea incrementală de soluții-candidat,
abandonând fiecare candidat parțial imediat ce devine clar că acesta nu are șanse să devină o soluție
validă.
Metoda de programare Greedy se aplică problemelor de optimizare. Aceasta metoda constă în
faptul că se construieşte solutia optimă pas cu pas, la fiecare pas fiind selectat în solutie elementul
care pare „cel mai bun/cel mai optim” la momentul respectiv, în speranta că această alegere locală
va conduce la optimul global.
Metoda Greedy se aplică problemelor pentru care se dă o mulţime A cu n elemente şi pentru
care trebuie determinată o submulţime a sa, S cu m elemente, care îndeplinesc anumite condiţii,
numite si conditii de optim.
Divide et impera se bazează pe principiul descompunerii problemei în două sau mai multe
subprobleme (mai ușoare), care se rezolvă, iar soluția pentru problema inițială se obține combinând
soluțiile subproblemelor. De multe ori, subproblemele sunt de același tip și pentru fiecare din ele se
poate aplica aceeași tactică a descompunerii în (alte) subprobleme, până când (în urma
descompunerilor repetate) se ajunge la probleme care admit rezolvare imediată.
Textul programului:
#define N 4
#include "stdio.h"
#include "stdbool.h"
//Verificam linia
for (i=col; i>=0; i--)
if (Tab[lin][i]) return false;
int i;
//Se introduce regina in una din liniile coloanei "col"
for (i=0; i<N; i++)
{
if (posibil(Tab, i, col))
{
Tab[i][col] = 1;
void fun()
{
int Tab[N][N]={0};
if (regina(Tab,0)==false)
printf("\nSolutii nu exista!\n");
else
printSol(Tab);
}
void main()
{
fun();
}
Schema-bloc:
Start
fun();
Sfarsit
Start Start
fun() regina()
regina(Tab,0)
NU return true;
== false i =0;
i ++
Da
printSol(Tab); i<N
Solutii nu exista
Nu
posibil (Tab, i, col)
Sfarsit
Da
return false;
Tab[i][col] = 1;
Tab[i][col] = 0;
regina
(Tab, i + 1)
Nu
Da
return true;
Sfarsit
Screen-shots:
Concluzie:
In urma efectuarii lucrarii date, am facut cunostinta cu metoda BACKTRACKING,
care poseda un potential enorm. Experienta acumulata este una foarte valoroasa, care imi va fi
utila in viitor.
Metoda data permite verificarea rezultatelor intermediare anterioare, iar, in caz ca ele
nu duc la obtinerea solutiei, se sterg. Este esential de a seta conditiile de oprire corecte, din
cauza ca algoritmul este unul recursiv, ceea ce inseamna ca pot aparea cicluri infinite.
Totodata, conditia de gaseire a solutiei, are si ea o insemnatate majora. In caz ca nu va fi scrisa
corect, programul va genera o solutie falsa.