Documente Academic
Documente Profesional
Documente Cultură
Cuprins
1.Cuprins.............................................................................................................................................2
2.Introducere.......................................................................................................................................3
3. Enunţul sarcinii individuale..........................................................................................................5
4.Descrierea modului de elaborare a aplicaţiei................................................................................6
5. Listing-ul programului...................................................................................................................6
6. Estimarea complexităţii algoritmilor aplicaţi............................................................................24
7. Rezultatele testării subprogramelor:..........................................................................................24
7.1. Datele de intrare........................................................................................................................28
7.2. Datele de ieşire (corespunzătoare datelor de intrare)............................................................28
7.3. Funcţionalitatea aplicaţiei grafice de interacţiune cu utilizatorul........................................28
8. Bibliografie....................................................................................................................................28
10.Anexe............................................................................................................................................29
2.Introducere
Obiectivele generale ale practicii de specialitate I :
- consolidarea cunoştinţelor teoretice, obţinute de studenţi pe parcursul studierii
limbajului de programare C++ şi mediului de programare CBuilder (sau C#, Visual
C+);
- însuşirea tehnologiei de elaborare a programelor mari;
- dezvoltarea abilităţilor muncii de sine stătătoare şi lucrul în echipă;
- formarea deprinderilor de cercetător.
COMPETENŢE TRANSVERSALE:
COMPETENŢE PROFESIONALE
(La specialitate):
1. Respectarea dreptului de autor asupra resurselor digitale, a normelor de etică şi
securitate informaţională.
2
2. Identificarea principiilor de funcţionare, clasificare şi proiectare a conexiunii între
echipamentele reţelelor de calculatoare.
3. Proiectarea algoritmilor şi codificarea lui într-un limbaj de programare.
4. Utilizarea metodelor şi tehnicilor eficiente de programare.
2. Merii. Planul unei livezi de formă dreptunghiulară cu dimensiunea nm (n, m ≤ 50) este
format din
zone pătrate cu latura 1 (vezi figura 1). În fiecare zonă reală
Ariciul a livezii creşte câte un măr. Din fiecare copac pot cădea
câteva
mere.
Informaţii mai detaliate despre zonele livezii
considerate sunt înregistrate în următoarele
două fişiere:
. fişierul text Apples.in conţine pe prima linie
numerele naturale n şi m, separate prin spaţiu.
Următoarele n linii ale acestui fişier conţine câte m
numere naturale, separate prin spaţiu, fiecare din aceste
valori reprezentând numărul de mere căzute de pe copacul
din zona respectivă [i, j];
. fişierul text Virsta.in, cele n linii ale căruia conţin
câte m numere naturale, separate prin spaţiu, fiecare din
aceste numere reprezentând vârsta (în ani împliniţi )
copacului din zona
respectivă [i, j], 1 ≤ i ≤ n, 1 ≤ j ≤ m.
Să se creeze o aplicație care să realizeze, la solicitarea utilizatorului, următoarele prescripţii:
(Design-ul aplicației vă aparține).
1) Actualizează, prin substituire în fişierele de intrare, conţinutul rândului/coloanei din planul
livezii; alternativa aleasă şi numărul respectiv al rândului/coloanei de actualizat se va indica de la
tastatură;
2) Exclude din planul livezii un rând (marginal) / o coloană (marginală); poziţia rândului
(nord/sud) / coloanei (vest/est) de exclus se va preciza de la tastatură;
3) Determină coordonatele (numărul rândului şi al coloanei) copacilor de vârstă maximală;
4) Determină vârstele medii ale copacilor pentru fiecare din coloanele impare ale livezii;
3
5) Afişează pe ecran lista numerelor de ordine ale rândurilor de copaci din livadă în ordinea
descendentă a cantităţilor totale de mere căzute pe rândurile respective; sortarea datelor se va
realiza prin metoda selecţiei.
6) Creează fişierul textual Tineri.txt, în care se vor copia acele linii ale fişierului de intrare
Apples.in, care conţin doar copaci de vârsta ce nu depăşeşte 3 ani;
7) Găseşte în reţeaua planului livezii un pătrat ce conţine în cele 4 vârfuri ale sale un număr
sumar maximal Smax de mere căzute; laturile pătratului vor coincide cu laturile zonelor din plan.
Pe ecran se va afişa numărul Smax, coordonatele colţurilor stânga-sus şi lungimea laturii pătratului
găsit;
8) Rezolvă problema: În zona din colţul stânga-sus al livezii se află un arici. Instinctiv ariciul
tinde să ajungă la vizuina sa situată în zona din colţul dreaptă-jos al livezii. În livadă există
restricţii de deplasare: ariciul se poate mişca din zona curentă în zona învecinată din dreapta sau de
jos.
5. Listing-ul programului
//---------------------------------------------------------------------------
4
#include <vcl.h>
#pragma hdrstop
//---------------------------------------------------------------------------
USEFORM("uPraktika3.cpp", Form1);
USEFORM("uMax.cpp", Form2);
USEFORM("uSredUroj.cpp", Form3);
USEFORM("uRabotnik.cpp", Form4);
USEFORM("uDelRow.cpp", Form5);
USEFORM("uDelCol.cpp", Form6);
//---------------------------------------------------------------------------
WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
try
{
Application->Initialize();
Application->CreateForm(__classid(TForm1), &Form1);
Application->CreateForm(__classid(TForm2), &Form2);
Application->CreateForm(__classid(TForm3), &Form3);
Application->CreateForm(__classid(TForm4), &Form4);
Application->CreateForm(__classid(TForm5), &Form5);
Application->CreateForm(__classid(TForm6), &Form6);
Application->Run();
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
catch (...)
{
try
{
throw Exception("");
}
catch (Exception &exception)
{
Application->ShowException(&exception);
}
}
return 0;
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uDelCol.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm6 *Form6;
//---------------------------------------------------------------------------
__fastcall TForm6::TForm6(TComponent* Owner)
5
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm6::Button1Click(TObject *Sender)
{
int cn = StrToInt(Edit1->Text);
if ( cn <= FormRef->MColumns )
{
FormRef->MColumns --;
FormRef->StringGrid1->ColCount --;
FormRef->StringGrid2->ColCount --;
}
FormRef->Button1->Visible = true;
FormRef->Button2->Visible = true;
FormRef->Tab1Sizes();
FormRef->Tab2Sizes();
}
Edit1->Text="";
Form6->Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uDelRow.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm5 *Form5;
//---------------------------------------------------------------------------
__fastcall TForm5::TForm5(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm5::Button1Click(TObject *Sender)
6
{
int rn = StrToInt(Edit1->Text);
if ( rn > 0 && rn <= FormRef->NRows)
{
if ( rn < FormRef->NRows )
for(int i=rn; i<FormRef->NRows; i++)
for(int j=1; j<=FormRef->MColumns; j++)
{
FormRef->StringGrid1->Cells[j][i] = FormRef->StringGrid1->Cells[j][i+1];
FormRef->StringGrid2->Cells[j][i] = FormRef->StringGrid2->Cells[j][i+1];
}
if ( rn <= FormRef->NRows )
{
FormRef->NRows --;
FormRef->StringGrid1->RowCount --;
FormRef->StringGrid2->RowCount --;
}
FormRef->Button1->Visible = true;
FormRef->Button2->Visible = true;
FormRef->Tab1Sizes();
FormRef->Tab2Sizes();
}
Edit1->Text="";
Form5->Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uMax.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm2 *Form2;
//---------------------------------------------------------------------------
__fastcall TForm2::TForm2(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button1Click(TObject *Sender)
{
int max = 0;
int i1,j1;
for(int i=1; i<=FormRef->NRows; i++)
for(int j=1; j<=FormRef->MColumns; j++)
if (StrToInt(FormRef->StringGrid2->Cells[j][i])> max )
{
max = StrToInt( FormRef->StringGrid2->Cells[j][i]);
7
i1=i; j1=j;
}
Label2->Caption = "Virsta maximala: " + IntToStr( max )
+"\nCoordonate:"+IntToStr(j1)+","+IntToStr(i1);
}
//---------------------------------------------------------------------------
void __fastcall TForm2::Button2Click(TObject *Sender)
{
Label2->Caption="";
Close();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uPraktika3.h"
#include "uMax.h"
#include "uSredUroj.h"
#include "uRabotnik.h"
#include "uDelRow.h"
#include "uDelCol.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
const int nmax = 20;
AnsiString FileName1, FileName2;
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
int GetData (int f, AnsiString *st) //читает строку до пробела
{
unsigned char buf[256];
unsigned char *p = buf;
int n;
int len = 0;
do
n = FileRead(f, p, 1);
while ((n != 0)&&(*p == ' '));
int n,i=0,j=0;
do
{
n = FileRead(f, p, 1);
if (n != 0)
{
if (*p == '\n') i++;
if ((*p == '\n') || (*p == ' ')) j++;
}
}
while (n != 0);
n1=i;
m=j/n1;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Tab1Sizes()
{
//---------------------------------------------------------------------------
void __fastcall TForm1::N2Click(TObject *Sender)
{
Label1->Visible = true;
Edit1->Visible = true;
9
}
//---------------------------------------------------------------------------
}
//---------------------------------------------------------------------------
if (Key==VK_BACK) return;
if (Key==VK_RETURN)
{
Button4->SetFocus();
return;
}
if ( (Edit1->Text).Length() != 0 ) Button4->Visible = true;
}
//---------------------------------------------------------------------------
if (Key==VK_RETURN)
{
Button3->SetFocus();
return;
}
int f;
int ls;
AnsiString st;
10
else
{
FileName2=Edit2->Text;
if ( FileExists(FileName2) )
f = FileOpen(FileName2,fmOpenRead);
else {
ShowMessage("Такого файла нет!");
return;
}
if ( f != -1 )
{
GetRC(f,NRows,MColumns);
StringGrid2->Visible = true;
StringGrid2->RowCount = NRows + 1;
StringGrid2->ColCount = MColumns + 1;
FileClose(f);
}
else
{
ShowMessage("ошибка доступа к файлу");
Edit2->Text = "";
Edit2->SetFocus();
}
if ( FileExists(FileName2) )
f = FileOpen(FileName2,fmOpenRead);
if ( f != -1 )
{
for(int i=0; i<NRows; i++)
for(int j=0; j<MColumns; j++)
{
ls=GetData(f,&st);
if(ls) StringGrid2->Cells[j+1][i+1]=StrToInt(st);
}
FileClose(f);
}
11
else
{
ShowMessage("ошибка доступа к файлу");
Edit2->Text = "";
Edit2->SetFocus();
}
// подгон размеров таблицы по значениям
Tab2Sizes();
}
int f;
int ls;
AnsiString st;
FileName1=Edit1->Text;
if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else
{
ShowMessage("Такого файла нет!");//f = FileCreate(FileName);
return;
}
if ( f != -1 )
{
GetRC(f,NRows,MColumns);
StringGrid1->Visible = true;
StringGrid1->RowCount = NRows + 1;
StringGrid1->ColCount = MColumns + 1;
FileClose(f);
}
12
else
{
ShowMessage("ошибка доступа к файлу");
Edit1->Text = "";
Edit1->SetFocus();
}
if ( FileExists(FileName1) )
f = FileOpen(FileName1,fmOpenRead);
else ShowMessage("Такого файла нет!!");//f = FileCreate(FileName);
if ( f != -1 )
{
for(int i=0; i<NRows; i++)
for(int j=0; j<MColumns; j++)
{
ls=GetData(f,&st);
if(ls) StringGrid1->Cells[j+1][i+1]=st;
}
FileClose(f);
}
else
{
ShowMessage("ошибка доступа к файлу");
Edit1->Text = "";
Edit1->SetFocus();
}
// подгон размеров таблицы по значениям
Tab1Sizes();
}
if (StringGrid1->Visible == true && StringGrid2->Visible == true)
{
N4->Enabled = true;
N9->Enabled = true;
N12->Enabled = true;
N15->Enabled = true;
}
}
//---------------------------------------------------------------------------
}
//---------------------------------------------------------------------------
}
//---------------------------------------------------------------------------
spisok="";
for(int i=1; i<=NRows; i++)
{ for(int j=1; j<=MColumns+2; j++)
{ if ((j== MColumns+2)||(j== MColumns+1)) spisok=spisok+" ["+IntToStr(x[j][i])+"]";
14
else spisok=spisok+IntToStr(x[j][i])+" "; }
spisok=spisok+"\n";}
ShowMessage(spisok);
}
//---------------------------------------------------------------------------
Button1->Visible = true;
Button2->Visible = true;
Tab1Sizes();
Tab2Sizes();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::File1Rewrite(int f)
{
AnsiString str_ln="\x0D\x0A";
AnsiString str_sp=" ";
ShowMessage(NRows);
for(int i=1; i<=NRows; i++)
if(FileExists(FileName1)) DeleteFile(FileName1);
f1 = FileCreate (FileName1);
if (f1!=-1)
{
File1Rewrite(f1);
FileClose(f1);
Button1->Visible = false;
}
else
ShowMessage("Ошибка доступа к файлу: ни открыть, ни создате не получилось!");
}
//---------------------------------------------------------------------------
if(FileExists(FileName2)) DeleteFile(FileName2);
f2 = FileCreate (FileName2);
if (f2!=-1)
{
File2Rewrite(f2);
FileClose(f2);
Button2->Visible = false;
}
else
ShowMessage("Ошибка доступа к файлу: ни открыть, ни создате не получилось!");
}
//---------------------------------------------------------------------------
NRows --;
16
StringGrid1->RowCount --;
StringGrid2->RowCount --;
Button1->Visible = true;
Button2->Visible = true;
Tab1Sizes();
Tab2Sizes();
}
//---------------------------------------------------------------------------
Button1->Visible = true;
Button2->Visible = true;
Tab1Sizes();
Tab2Sizes();
}
//---------------------------------------------------------------------------
MColumns --;
StringGrid1->ColCount --;
StringGrid2->ColCount --;
Button1->Visible = true;
Button2->Visible = true;
Tab1Sizes();
Tab2Sizes();
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
if ( FileExists("meteo.txt") )
f = FileOpen("Tineri.txt",fmOpenWrite);
else
f = FileCreate("Tineri.txt");
if ( f != -1 )
{
for(int i=1; i<=NRows; i++)
{
flag = 0;
for(int j=1; j<=MColumns; j++)
if(StrToInt(StringGrid2->Cells[j][i])<=3) flag++;
//ShowMessage(IntToStr(flag));
if (flag == MColumns)
{
for(int j=1; j<=MColumns; j++)
{ st=" " + StringGrid1->Cells[j][i];
FileWrite(f,st.c_str(),st.Length());
st="\x0D\x0A";
FileWrite(f,st.c_str(),st.Length());
18
}
}
}
//---------------------------------------------------------------------------
#include <vcl.h>
#pragma hdrstop
#include "uRabotnik.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm4 *Form4;
//---------------------------------------------------------------------------
__fastcall TForm4::TForm4(TComponent* Owner)
: TForm(Owner)
{
}
//---------------------------------------------------------------------------
//---------------------------------------------------------------------------
x3[1][1]=x[1][1];
23
Ferestra dupa accesarea comenzilor de deschidere .
Imaginea 2.
24
Rezultatul dupa comandarea acestor 4 comenzi de editare.
Imaginea 4.
25
Fereastra ce apare in urma accesarii Fisierul Tineri.txt dupa creare .
comenzii de creare a fisierului Tineri.txt .
Imaginea 8. Imaginea 9.
Img.1. Img.2.
Imaginea cu fisierul Apples.txt Imaginea cu fisierul Virsta.txt
Img.1 Img.2
26
Fisierul dupa comanda CreazaCreaza Tineri.txt Rezultatul problemei Diagonala
8. Bibliografie
1. I. Bolun, I. Covalenco. Bazele informaticii aplicate, ediţia a III-a, Chişinău, Editura
ASEM, 2005.
2. Gh. Bostan. Culegere de probleme de informatică, Chişinău , Editura "Lumina.
3. A. Braicov. Turbo Pascal. Culegere de probleme, Chişinău, Editura "Prut Internaţional",
2007.
4. S.Corlat, L.Ivanov, V.Bîrsan. Informatica, Ghid de implementare a curriculumului
modernizat, pentru treapta liceală, Chişinău, "Cartier", 2010.
5. G. Damian-Timoşenco, E. Ionaşcu-Cuciuc, Ghid de elaborare a curriculumului
profesional, Chişinău, 2011.
6. A. Gremalschi, Iu. Mocanu, I. Spinei.INFORMATICA. Limbajul Pascal.Chişinău ,
Editura Î.E.P. Ştiinţa, 2003.
7. A. Gremalschi, Iu. Mocanu, I. Spinei. Informatică, Manual pentru clasa a 9-a, Chişinău:
Editura "Ştiinţa", 2006.
8. A. Gremalschi, Iu. Mocanu, L. Gremalschi . INFORMATICĂ, Manual pentru clasa a
10-a, Chişinău , Editura "Ştiinţa", 2007.
9. A. Gremalschi, INFORMATICĂ, Manual pentru clasa a 11-a, Chişinău, Editura
"Ştiinţa", 2014.
10. Doina Logofătu. Bazele programării în C. Aplicaţii. Editura POLIROM, Iaşi, 2006.
11. Vasile Petrovici, Florin Goicea. Programarea în limbajul C. București, Editura Tehnica,
1993.
12. Cornelica Ivaşc, L.M. Condurache, Mona Carme Prună, D. Hrinciuc-Logofătu. Manual
de informatică C++ (cl. XI). Bucureşti, editura „Petrion Impex”, 2002.
13. D. Logofătu. C++. Probleme rezolvate şi algoritmi. Editura POLIROM, 2001.
14. Mickey Williams, Visual C++. București, editura TEORA, 1996.
15. Mariana Miloşescu. Manual de informatică C++ (cl. XI). Bucureşti, Editura Didactică
şi Pedagogică, R.A., 2006.
16. T. Ionescu, Fl. Munteanu, Gh. Musca, D. Saru, S.M. Dascalu. Programarea
calculatoarelor. Manual pentru licee de informatică, cl. X-XII. Bucureşti. Editura
Didactică şi Pedagogică, R.A., 1996.
17. A. Braicov, S. Gîncu. Borland C++Builder. Ghid de iniţiere. „Tipografia centrală”,
2009.
27
18. S. Berzan, R. Berzan. Programarea calculatoarelor. Instrucţiuni metodice, probleme
rezolvate, lucrări de laborator. Editura ASEM, 2005.
19. H. Schildt. C++. Manual complet. Bucureşti. Teora. 2002.
20. Marin Popa, Mariana Popa. Programare procedurală (aplicaţii C şi C++ în structuri
de date şi grafică). Editura fundaţiei Romănia de mîine, Bucureşti, 2006.
10.Anexe
28