Documente Academic
Documente Profesional
Documente Cultură
Proiect pentru
susinerea atestatului profesional
la informatic
Filier: teoretic
Profil: real
Specializare: matematic-informatic-intensiv informatica
Autor:
Rosu Alexandru
Coordonator:
Iordachi Lizeta Mihaela
MAI 2015
LABIRINT
Cuprins:
2.Cerinte de sistem:
Programul poate fi rulat pe orice calculator ce foloseste un sistem de operare Windows XP SP3
sau mai nou de atat(Vista,7,8,8.1), pe orice tip de arhitectura, si are instalat pachetul .NET Framework 4.
Este recomandat totusi ca procesorul sa fie cel putin Pentium de 1 Ghz si memoria RAM de cel putin 512
MB.
3.Programe utilizate
In proiectarea si realizarea acestui proiect a fost folosit Microsoft Visual Studio 2010 si limbajul
c#. Visual Studio include un set complet de instrumente de dezvoltare pentru generarea de aplicaii
ASP.NET, Servicii Web XML, aplicaii desktop i aplicaii mobile. Visual Basic, Visual C++, Visual C# i
Visual J#, toate folosesc acelai mediu de dezvoltare integrat (IDE) care le permite partajarea
instrumentelor i faciliteaz crearea de soluii folosind mai multe limbaje de programare. Aceste limbaje
permit s beneficieze de caracteristicile .NET Framework care ofer acces la tehnologii cheie care
simplifica dezvoltarea de aplicaii web ASP i XML Web Services cu Visual Web Developer.
Visual Studio 2010 are numele de cod Dev10[15] i a fost lansat pe 12 aprilie 2010 alturi de .NET
Framework 4. Visual Studio 2010 are un editor nou care utilizeaz WPF (Windows Presentation
Foundation), sprin interfaa de tip Ribbon, suport monitoare multiple, Windows 7 multitouch,
funcionalitatea SharePoint, instrumente de Windows Azure i IntelliTrace, un nou produs care ajut la
eradicarea bug-urilor irepetabile.[16] Va veni furnizat mpreun cu Expression Studio, Business &
Enterprise Servers i Microsoft Office i n versiunile Ultimate i Premium.
Aplicatia este constituita din doua ferestre principale. Prima dintre ele, care apare la deschiderea
programului, contine mai multe campuri unde se vor introduce caracteristicile labirintului ce va fi creat,
punctul de plecare si cat de mare se doreste sa fie afisare, urmand ca in cel de-al doilea labirintul sa fie
afisat, alaturi de un buton folosit pentru afisarea iesirii din acesta si unul pentru inchiderea aplicatiei.
In ceea ce priveste rezolvare propriu-zisa a labirintului, a fost folosita o varianta recursiva a
algoritmului Lee.
Fereastra de inceput contine, dupa cum se poate observa in figura 1, 5 campuri in care se vor
introduce date despre labirint si despre modul de afisare al acestuia, dupa cum urmeaza:
Primul camp (Dimensiune punct) determina latimea si lungimea fiecarui gol sau perete din tabel
seminificatie:
o 0 goluri, spatii prin care se poate trece
o 1 pereti, spatii prin care nu se poate trece
Ultimele 2 campuri (Punct de plecare) determina coordonatele punctului de unde va incepe
drumul de iesire din labirint(mai intai pe axa verticala, iar apoi pe cea orizontala)
Figura 1
Cea de a doua fereastra contine reprezentarea grafica a labirintului introdus (figura 2). Peretii sunt marcati
cu rosu, iar golurile cu alb, in timp ce punctul de plecare este reprezentat prin culoarea albastra si numarul
1.
Figura 2
La apasarea butonului Arata solutie se va afisa solutia labirintului, adica cel mai scurt drum
pana la o iesire din acesta, daca exista, sau mesajul Labirintul nu are solutie, daca nu exista. Drumul va
fi marcat cu patrate de culoare verde si numerotat dupa cum se poate observa in figura 3. La apasarea
butonului Inchide aplicatia se va opri.
Figura 3
Mai departe este inclus codul celor doua ferestre, in cel de al doilea putand fi observat algoritmul Lee:
Form1.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
if (textBox1.Text == null || textBox3.Text==null)
MessageBox.Show("Introduceti dimensiunile!");
else
{
int n1 = Convert.ToInt32(textBox1.Text);
int[,] v1 = new int[20, 20];
string[] linii = textBox2.Text.Split(new string[] { Environment.NewLine },
StringSplitOptions.None);
for (int i = 0; i < n1; i++)
{
string[] linie = linii[i].Split(' ');
for (int j = 0; j < n1; j++)
{
v1[i + 1, j + 1] = Convert.ToInt32(linie[j]);
if (v1[i + 1, j + 1] == 1)
v1[i + 1, j + 1] = -1;
}
}
Variabile.n = n1;
Variabile.v = v1;
Variabile.dim = Convert.ToInt32(textBox3.Text);
Variabile.plecx = Convert.ToInt32(textBox4.Text);
Variabile.plecy = Convert.ToInt32(textBox5.Text);
Hide();
Form2 form2 = new Form2();
form2.Show();
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
}
}
Form2.cs:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace WindowsFormsApplication1
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
int n = Variabile.n;
int[,] v = Variabile.v;
int dim = Variabile.dim;
Label[] label = new Label[(n + 1) * (n + 1)];
for (int i = 1; i <= n; i++)
for (int j = 1; j <= n; j++)
{
if (v[i, j] == -1)
{
{
int[,] v = Variabile.v;
if (v[x - 1, y] == 0 || v[x - 1, y] > v[x, y] + 1)
{
v[x - 1, y] = v[x, y] + 1;
lee(x - 1, y);
}
if (v[x + 1, y] == 0 || v[x + 1, y] > v[x, y] + 1)
{
v[x + 1, y] = v[x, y] + 1;
lee(x + 1, y);
}
if (v[x, y - 1] == 0 || v[x, y - 1] > v[x, y] + 1)
{
v[x, y - 1] = v[x, y] + 1;
lee(x, y - 1);
}
if (v[x, y + 1] == 0 || v[x, y + 1] > v[x, y] + 1)
{
v[x, y + 1] = v[x, y] + 1;
lee(x, y + 1);
}
}
}
private void button1_Click_1(object sender, EventArgs e)
{
int x = Variabile.plecx;
int y = Variabile.plecy;
int[,] v = Variabile.v;
Variabile.ok = 0;
v[x, y] = 1;
lee(x, y);
int n = Variabile.n, min = n * n, minx=0, miny=0;
for (int i = 1; i <= n; i++)
{
6. Bibliografie
http://ro.wikipedia.org/wiki/Microsoft_Visual_Studio