Documente Academic
Documente Profesional
Documente Cultură
AN COLAR:
2016-2017
Cuprins
1.Motivul alegerii temei..1
2.Ciocnirea perfect elastica.2
3.Structura programului..3
4.Secventa de cod...4
5. Introducere in C#....11
6.Bibliografie..18
Motivul alegerii temei
Am ales sa creez un program care sa simuleze un fenomen fizic
deoarece ,dupa informatica , fizica este a doua cea mai mare
pasiune a mea si m-am gandit sa imi combin cele doua pasiuni
intr-un singur program ce creaza fenomene asemanatoare
ciocnirii perfect elastice intre doua obiecte .
1
Ciocnirea perfect elastica
In ciocnirea perfect elastica energica cinetica se conserva. In natura nu
existaciocnire perfect elastica, dar in multe situatii ciocnirile reale pot fi
considerate elastice(de exemplu ciocnirea a doua bile de otel).Sa consideram cazul
unidimensional a doua corpuri. Acest caz presupune ca,atat inainte, cat si dupa
ciocnire cele doua corpuri se misca pe aceeasi dreapta.
2
Structura Programului
Programul consta in configurarea vitezei si masei fiecarui obiect si miscarea
sus/jos prin intermediul sagetiolor .
3
Secventa de cod
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;
using System.Drawing;
using System.Threading.Tasks;
namespace Atestat_1
{
public partial class form5 : Form
{ int mx, my,a;
double x1=10, y1=175, x2=620, y2=175,v3y,v4y, alfa,
beta,coef1=0.97f,coef2=0.97f, v1,v2,m1,coef3,m2,sem=1,v3,v4,v3sec
,v4sec;
bool dif;
private void pictureBox4_MouseUp(object sender, MouseEventArgs
e)
{
timer3.Stop();
4
}
5
obj2.Location = new Point(obj2.Location.X,
obj2.Location.Y + 1);
y1 = obj1.Location.Y;
y2 = obj2.Location.Y;
}
6
}
public form5()
{
InitializeComponent();
}private void button1_Click(object sender, EventArgs e)
{
m1=Convert.ToInt32(tm1.Text);
m2 = Convert.ToInt32(tm2.Text);
v1 = Convert.ToInt32(tv1.Text);
v2 = Convert.ToInt32(tv2.Text);
timer1.Start();
}
x1 = x1 + v1;
7
x2 = x2 - v2;
if (obj1.Location.Y == obj2.Location.Y)
{
if (obj1.Location.X + obj1.Width - 18 >=
obj2.Location.X)
{
v3 = Math.Abs((2 * (m1 * v1 + m2 * v2) / (m1 +
m2)) - v1);
v4 = Math.Abs((2 * (m1 * v1 + m2 * v2) / (m1 +
m2)) - v2);
if (m1 > m2)
{
if (m1 <= 10 * m2)
{
v3 -= v3 * ((float)(1 - (m2 / m1)));
v4 += v4 * ((float)(1 - (m2 / m1)));
}
if (m1 > 10 * m2)
{
v3 -= Math.Abs(2 * v3 * (m2 / m1 - 1));
v4 += Math.Abs(v4 * ((m2 / m1) / 2 - 1));
}
}
else if (m2 > m1)
{
if (m2 <= 10 * m1)
{
v3 += v3 * (1 - (m1 / m2));
v4 -= v4 * (1 - (m1 / m2));
}
if (m2 > 10 * m1)
{
v4 -= Math.Abs(2 * v4 * (m1 / m2 - 1));
v3 += Math.Abs((v4) * ((m1 / m2) / 2 -
1));
8
timer2.Start();
timer1.Stop();
}
}
else
{
if (obj1.Location.Y < obj2.Location.Y)
if (obj1.Location.X + obj1.Width - 18 >=
obj2.Location.X && obj2.Location.Y - obj1.Location.Y < 48)
{
alfa = (double)(obj2.Location.Y -
obj1.Location.Y) / 29;
v3 = -v3sec * Math.Sin(alfa);
v3y = v3sec * Math.Cos(alfa);
v4 = -v4sec * Math.Sin(alfa);
v4y = v4sec * Math.Cos(alfa);
}
timer2.Start();
timer1.Stop();
}
if (obj1.Location.Y > obj2.Location.Y)
if (obj1.Location.X + obj1.Width - 18 >=
obj2.Location.X && obj1.Location.Y - obj2.Location.Y < 48)
{
alfa =(double)(obj1.Location.Y -
obj2.Location.Y) / 29;
9
if (alfa < 0.78)
{v3sec = Math.Abs((2 * (m1 * v1 + m2 * v2) /
(m1 + m2)) - v1);
v4sec = Math.Abs((2 * (m1 * v1 + m2 * v2) /
(m1 + m2)) - v2);
v3 = v3sec * Math.Cos(alfa);
v3y = -v3sec * Math.Sin(alfa);
v4 = v4sec * Math.Cos(alfa);
v4y = -v4sec * Math.Sin(alfa);
}
if(alfa >0.78)
{
v3sec = v1;
v4sec = v2;
v3 = -v3sec * Math.Sin(alfa);
v3y = -v3sec * Math.Cos(alfa);
v4 = -v4sec * Math.Sin(alfa);
v4y = -v4sec * Math.Cos(alfa);
}
timer2.Start();
timer1.Stop();
}
}
10
Introducere in C#
C# este un limbaj de programare conceput pentru a se putea crea cu ajutorul sau
o gama variata de programe. care pot fi rulate folosind .NET framework. C# este un
limbaj simplu, puternic tipizat. C# este limbaj de programare care foloseste paradigma
programarii orintate pe obiecte. Cu multele sale inovatii C# permite dezvoltarea rapida
de aplicatii retinand de asemenea expresivitatea si eleganta limbajelor bazate pe sintaza
C.
.NET framework pune la dispozitie o gama larga de operatii care se pot executa
care accelereaza timpul de dezvoltare a unei aplicatii. Aceste operatii sunt realizate cu
ajutorul unor clase bine proiectate.
Un bun design Toate clasele din .NET framework sunt construite din
start intr-o maniera intuitiva si eficienta
Securitate imbunatatita
11
Rezultatul compilarii unui program din C# este un assembly sau un modul, din mai
multe module putandu-se crea un assembly.Un assembly este o unitate care se descrie
singura avand toate informatiile necesare folosirii acestuia in interiorul sau. De exemplu
are informatii despre: tipurile care sunt definite, versiunea sa, alte assembly care sunt
necesare etc. Acelasi assembly poate fi incarcat de mai multe ori in memoria folosita de
acelasi proces daca versiunile acestui assembly sunt diferite. Assembly-urile sunt de doua
tipuri: private si publice. Assembly-urile private sunt folosite de o singura aplicatie iar
pentru instalarea acestui tip de assembly este necesara doar copierea acestuia in
directorul aplicatiei. Assembly-urile publice pot fi folosite de mai multe aplicatii iar pentru
instalarea lor trebuie urmata o procedura speciala acestea fiind instalate in GAC (Global
Assembly Cache). Pentru instalarea acestor assembly este nevoie de o cheie privata la
care are acces numai cel care instaleaza assembly-ul dorit. Daca se doreste inlocuirea
acestui assembly el nu poate fi inlocuit decat daca se cunoaste cheia privata cu care a
fost instalat. Acesta metoda de instalare este una din multele metode prin care .NET
incearca sa imbunatateasca securitatea aplicatiilor.
Toate tipurile din .NET framework(inclusiv din C#) au o clasa de baza din care
sunt derivate, aceasta clasa se numeste object. In C# este facuta distinctia intre tipurile
valoare si referinta. Variabilele de tip valoare sunt retinute pe stiva. Variabilele de tip
referinta se memoreaza in managed heap. Continutul unei variabile de tip valoare
este chiar valoarea care trebuie retinuta de tip. Exemple de tipuri valoare: int, float,
unsigned int etc. Alte tipuri valoare sunt cele declarate ca fiind struct sau enum.
Continutul unei variabile de tip referinta este o referinta catre locul unde se retine
informatia propriu-zisa. Exemplu tip referinta : tipul string.
12
De exemplu: Clasa 'floare' desemneaza toate plantele care au flori, precum clasa
'Fruct' desemneaza toate obiectele pe care noi le identificam ca fiind fructe. Bineinteles,
in implementarea efectiva a programului nu se lucreaza cu entitati abstracte, precum
clasele ci se lucreaza cu obiecte, care sunt 'instantieri' ale claselor. Altfel spus, plecand
de la exemplul de mai sus, daca se construieste un program care sa lucreze cu fructe, el
nu va prelucra entitatea 'fruct' ci va lucra cu entitati concrete ale clasei 'fruct', adica 'mar',
'para', 'portocala', etc.
Am vazut mai sus ca o clasa poate mosteni o alta clasa, ceea ce inseamna ca o
entitate preia toate atributele altei entitati. Putem avea, de asemeni, mai multe clase care
mostenesc o clasa. Fie clasa 'A' si clasele 'B', 'C' si 'D'; sa presupunem ca 'B', 'C', 'D'
mostenesc pe 'A'. In acest caz putem face afirmatia: 'B, C si D sunt de tip A'. Aceasta
13
inseamna ca B, C si D mostenesc toate caracteristicile clasei A deci pot fi identificate cu
o clasa de tip A.
Facand o analogie cu exemplul anterior, daca A -> 'Fruct', B -> 'mar', C -> 'nuca',
D -> 'pruna', afirmatia de mai sus ar suna in felul urmator: 'marul, para si nuca sunt
fructe', lucru care este in mod evident adevarat. Dar sa consideram urmatoarea situatie:
'Fruct' poate implementa o subrutina pe care o vom numi 'mananca-ma!'. Deoarece, prin
mostenire, clasele 'Mar', 'Par' si 'Nuca' preiau toate atributele clasei 'Fruct', deci si
subrutina 'mananca-ma!' inseamna ca un mar se mananca la fel ca o pruna! Bineinteles,
daca incercam sa muscam cu pofta dintr-o nuca Asta inseamna ca 'mananca-ma!' trebuie
sa se particularizeze pentru fiecare clasa in parte, reflectand un comportament adecvat
cu proprietatile acesteia. Acest lucru mai este numit si polimorfism.
In C# exista o mare diferenta intre clase si structuri. Clasele sunt de tip referinta
iar structurile sunt de tip valoare. Structurile pot avea si acestea constructori dar la
structuri poate fi definit un constructor care nu are nici un parametru. Aceasta restrictie
este datorata faptului ca campurile structurilor sunt implicit initializati cu valoarea lor
neutra. De exemplu membrii de tip int sunt initializati implicit cu zero, cei de tip bool cu
false iar membrii de tip referinta cu null.
14
exporta, o proprietate read-only poate doar sa citeasca ce contine campul pe care aceasta
il exporta. Un nou lucru adus in plus fata de C++ sunt delegatii si evenimentele. Delegatii
pot fi comparati cu pointerii la functii din C/C++ cu exceptia faptului ca delegatii sunt
puternic tipizati. In C# se pot crea instante la un delegat definit luand ca paramentru
functia care va fi folosita de acea instanta a delegatului.
3 Evenimente
4 Interfete
15
Un nou lucru adus in C# fata de C++ este introducerea tipului string. Acesta
memoreaza siruri de caractere unicode. Are multime de functii care ajuta la manipularea
mai usoara a sirurilor. De asemenea este o introdusa o clasa pentru expresii regulare.
In C# colectiile de date fac parte din biblioteca standard. Acesta biblioteca include
clase pentru lista simplu inlantuita, dublu inlantuita, stiva, hash etc. Aceste clase sunt
usor de utilizat si ofera un bun randament atat ca rapiditate cat si management al
memoriei folosite.
Un concept nou adus in versiunea 2.0 fata de versiunea 1.0 a .NET framework
sunt generics. Un concept asemenator gasim de asemenea si in C++ prin template. Dar
spre deosebire de C++ in C# se pot scrie librarii care folosesc generics, in C++ pentru
folosirea template-urilor era nevoie de codul sursa pentru a crea program neputandu-se
crea librarii folosindu-se template-uri. Faptul ca in C# (.NET) se pot scrie librarii este
datorat CLR. CLR(Common Language Runtime) transforma codul IL in instructiuni care
pot fi intelese de procesor. Astfel nu conteaza ce tip este folosit cu generics datorita
faptului ca CLR transform IL in timpul rularii programului in cod care poate fi inteles direct
de procesor. Generics poate fi folosit la metode, delegati, clase etc.
O alta nouatate adusa in C# ( .NET) este procesul de reflection. Prin acest proces
se pot afla informatii despre ceea ce se gaseste intr-un assembly. Folsind procesul de
reflection se poate gasi ce tipuri sunt definite intr-un assembly, ce metode campuri, etc
au tipurile respective, ce atribute sunt folosite si pentru ce tipuri, campuri etc. versiunea
unui assembly etc.
6 Fisiere. Serializare
In .NET ca de asemenea in C++ sunt folosite fluxurile de date. In .NET acest lucru
este realizat indeosebi folosing clasa de baza Stream. Din aceasta clasa abstracta sunt
derivate alte clase care sunt folosite pentru fluxurile de date, fiecare fiind specializata:
pentru fisiere, pentru memorie, pentru retea, pentru comprimare, pentru criptare etc.
Un alt lucru care vine in ajutorul programatorului este folosirea serializarii. Prin
serializare se intelege in genereal trecerea (transferul) starii unui obiect din memorie intr-
un flux de date (stream). Deserializarea este este procesul invers al serializarii adica
trecerea (transferul) din fluxul de date intr-un obiect. Serializarea se realizeaza cu
ajutorul fluxurilor de date, de aici rezultand ca un obiect poate fi serializat intr-un fisier,
pe retea, in memorie etc. Pentru a marca o clasa ca sa poate fi serializara este necesara
16
folosirea atributului [Serializable]. Daca nu se doreste (nu este posibil) ca un camp sa fie
serializat acesta trebuie sa fie marcat cu atributul [NonSerialized]. In procesul de
serializare se folosesc object graphs. Un object graphs este alcatuit din obiectul care va
fi serializat alaturi de toate datele necesare seralizarii lui (inclusiv alte tipuri cu care clasa
obiectului are o relatie).
Exista mai multe feluri cum poate fi retinute obiectele serializate. Pot fi serializate
folosind BinaryFormatter astfel rezultand un sir de bytes in care este retinut obiectul,
acest tip nu tine cont de modificatorii de acces aplicati asupra campurilor clasei din care
face parte obiectul care va fi serializat. Un alt tip este SoapFormatter care foloseste SOAP
pentru a serializa un obiec dar SoapFormatter serializeaza numai campurile care sunt
declarate publice sau care sunt exportate prin proprietati publice. Acelasi lucru se
intampla folosind XmlSerializer singura diferenta fata de SoapFormatter fiind faptul ca se
foloseste XML pentru a serializa obiectul dorit. Fiecare din aceste tipuri au doua functii
Serialize si Deserialize una pentru a serializara respectiv pentru a deserializa.
7 Concluzii
Programarea orientata obiect este unul din cei mai importanti pasi facuti in evolutia
limbajelor de programare spre o mai puternica abstractizare in implementarea
programelor. Ea a aparut din necesitatea exprimarii problemei intr-un mod mai natural
fiintei umane. Astfel unitatile care alcatuiesc un program se apropie mai mult de modul
nostru de a gandi decat modul de lucru al calculatorului.
17
Bibliografie
1. http://www.qreferat.com/referate/informatica/METODE-VIZUALE-
C418.php
2. Curs de C# - Programare n Visual C# 2008 Express Edition,
Autori : Constantin Glan,Susana Glan;
Editura: L&S INFOMAT
18