Katedra Informatyki Stosowanej
Borland C++
1
Opracowanie: dr Marzena Nowakowska
Katedra Informatyki Stosowanej, WZiMK PŚk
Scenariusz nr 06
Funkcja użytkownika jako funkcja zewnętrzna i jako składowa klasy.
Zmienne globalne. Przekazywanie parametrów funkcji.
Zadanie.
Zdefiniuj aplikację, która podstawowe algorytmy pracujące na ciągach liczbowych realizuje za pomocą funkcji
użytkownika. Aplikacja wykorzystuje ww. funkcje do badania dwóch ciągów liczb rzeczywistych x oraz y, co najwyżej
50-cio elementowych, realizując zadania zaprezentowane w formularzu.
Uwaga: w trakcie opracowywania aplikacji pamiętaj o testowaniu aplikacji po zdefiniowaniu każdego nowego zadania.
Wykonanie
1. Poniżej podano cześć programu, który należy umieścić na początku modułu formularza, po dyrektywach
preprocesora. Uzupełnij samodzielnie brakujące fragmenty kodu.
// wyznaczenie elementu maksymalnego w ciągu
float max(int n, float tab[])
{ int i; float pom;
pom = tab[0];
for (i=0; i<n;i++)
if(tab[i] > pom) pom=tab[i];
return pom;
}
// wyznaczenie elementu minimalnego
float min(int n, float tab[])
{
// uzupełnij fragment kodu
}
// wyznaczenie iloczynu wszystkich elementów ciągu
double iloczyn(int n, float tab[])
{
// uzupełnij fragment kodu
}
// wyznaczenie nowego ciągu tab2, zawierającego ujemne elementy ciągu tab1
void CiagUjemnych(int n, float tab1[], int *m, float tab2[])
Katedra Informatyki Stosowanej
Borland C++
2
{ int i;
*m=0;
for (i=0; i<n; i++)
if (tab1[i]<0)
tab2[(*m)++]=tab1[i];}
// wyznaczenie nowego ciągu tab2, zawierającego elementy ciągu tab1 większe od liczby a
void CiagWybranych(int n, float tab1[], float a, int *m, float tab2[])
{
// uzupełnij fragment kodu
}
2. Zadeklaruj w pliku nagłówkowym formularza, w ciele kasy formularza w sekcji public tablice dla ciągów x i y oraz
zmienne lx i ly przechowujące liczbę ich elementów do badania.
3. Napisz funkcję obsługi zdarzenia OnActivate formularza, która zwartościuje tablice x i y za pomocą pomocniczych
tablic pomx oraz pomy zainicjowanych w programie:
void __fastcall TForm1::FormActivate(TObject *Sender)
{int i;
float pomx[50]={10, -30, -50, 70, -90, 29, 17, -50, 90, -90, 68, -33, -78, 60, 99};
float pomy[50]={100, -300, -500, 700, -900, 290, 170, -500, 900, -900, 680, -330, -780, 600, 990};
lx=15; ly=15; // liczba elementów obu ciągów może ale nie musi być taka sama
for (i=0; i<lx; i++)
x[i]=pomx[i];
for (i=0; i<ly; i++)
y[i]=pomy[i];
}
4. Napisz program obsługi pierwszego przycisku na formularzu:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Edit1->Text=FloatToStr(max(lx, x));
// uzupełnij fragment kodu
}
5. Napisz program obsługi czwartego przycisku na formularzu:
void __fastcall TForm1::Button4Click(TObject *Sender)
{ int lnx, lny;
float nx[50], ny[50];
CiagUjemnych(lx, x, &lnx, nx);
WstawGrid(lnx, nx, StringGrid1);
// uzupełnij fragment kodu
}
Funkcja WstawGrid jest funkcją składową sekcji public klasy formularza zaprototypowaną następująco:
void WstawGrid(int , float [], TStringGrid*);
Umieść definicję funkcji WstawGrid w pliku modułu formularza po definicji konstruktora. Treść funkcji jest
następująca:
void TForm1::WstawGrid(int n, float tab[], TStringGrid* StringGrid)
{ int i;
StringGrid->RowCount=n;
for (i=0; i<n;i++)
StringGrid->Cells[0][i]=FloatToStr(tab[i]);
}
6. Opracuj obsługę pozostałych przycisków, wykorzystując wiedzę nabytą w trakcie budowy tej aplikacji.