Конструирование программ

Контрольная работа - Компьютеры, программирование

Другие контрольные работы по предмету Компьютеры, программирование

влению Ancestor static procedure.. Ведь мы объявили MyObject2: TAncestor, поэтому и была вызвана процедураStaticProcedure; класса TAncestor.

А вот вызов MyObject2. VirtualProcedure; привел к вызову VirtualProcedure; реализованной в потомке(TDescendant). Это произошло потому, что MyObject2 был создан не какTAncestor, а как TDescendant: MyObject2:= TDescendant. Create; И виртуальный метод VirtualProcdure был перекрыт.

В Delphi полиморфизм реализован с помощью так называемой виртуальной таблицы методов (или VMT).

Достаточно часто виртуальные методы забывают перекрыть с помощью ключевого слова override. Это приводит к закрытию метода. В этом случае замещения методов в VMT не произойдет и требуемая функциональность не будет получена.

Эта ошибка отслеживается компилятором, который выдаёт соответствующее предупреждение.

Вызов метода предка из перекрытого метода

Бывает необходимо вызвать метод предка в перекрытом методе.

Объявим два класса. Предка(Ancestor):

 

TAncestor = class

private

protected

public

{Виртуальная процедура.}

procedure VirtualProcedure; virtual;

end;

и его потомка (Descendant):

TDescendant = class(TAncestor)

private

protected

public

{Перекрытие виртуальной процедуры.}

procedure VirtualProcedure; override;

end;

 

Обращение к методу предка реализуется с помощью ключевого слова inherited

 

procedure TDescendant. VirtualProcedure;

begin

inherited;

end;

Стоит помнить, что в Delphi деструктор должен быть обязательно перекрытым - override - и содержать вызов деструктора предка

TDescendant = class(TAncestor)

private

protected

public

destructor Destroy; override;

end;

destructor TDescendant. Destroy;

begin

inherited;

end;

 

В языке C++ не нужно вызывать конструктор и деструктор предка, деструктор должен быть виртуальным. Деструкторы предков вызовутся автоматически. Чтобы вызвать метод предка, нужно явно вызвать метод:

 

class Ancestor

{:

virtual void function1 () {printf (Ancestor:function1);}

};

Descendant: public Ancestor

{:void function1 () {(Descendant:function1);:function1 (); // здесь будет напечатано Ancestor:function1

}

};

Для вызова конструктора предка нужно указать конструктор:

class Descendant: public Ancestor

{:

Descendant(): Ancestor();

};

 

Задание 2

Значение аргумента х изменяется от а до b с шагом h. Для каждого x найдите значение функции Y(x) суммы S(x) и |Y(x) - S(x)| и выведите в виде таблицы. Значения a, b, h введите с клавиатуры произвольно. Вычисление Y(x) и S(x) реализуйте в виде функций.

В основной программе организуйте ввод исходных данных, обращение к функциям и вывод результатов.

 

 

Текст программы

 

#include

#include

#include

#include

#pragma hdrstop

#include Unit2.h

#pragma package (smart_init)double (*TFun) (double);funY(double);funS(double);funDYS(double);Out_Tabl (TFun, double, double, double);main()

{a, b, h;(Input a, b, h);(%lf % lf % lf, &a, &b, &h);(\n\t Function - Y(x));_Tabl (funY, a, b, h);(\n\t Function - S(x));_Tabl (funS, a, b, h);(\n\t Function - |S(x) - Y(x)|);_Tabl (funDYS, a, b, h);(\n Press any key…);();

}funY (double x)

{cos(x);

}

funS (double x)

{s=1, a=1;(int k=1; k<=20; k++)

{=-a*x*x/((2*k-1)*(2*k));+=a;

}s;

}

funDYS (double x)

{fabs (funS(x) - funY(x));

}Out_Tabl (TFun f, double xn, double xk, double h)

{(double x=xn; x<=xk; x+=h)( x =%5.2lf, y =%8.4lf\n, x, f(x));

}

 

Результат выполнения программы

 

 

Задание 3

 

Разработайте программу обработки массивов. Входные данные введите с клавиатуры. Результаты работы программы отобразите на экране.

Дана целочисленная квадратная матрица порядка N. Найдите номера строк, элементы в каждой из которых одинаковы.

Текст программы

 

#include

#pragma hdrstop

#include Unit3.h

#pragma package (smart_init)

#include

#include

#include main()

{a[20] [20];i, j, n=0, k;(nn;

}a[i] [j];<<\nRaws with equals elements:\n;(i=0; i<n; i++) {=0;(j=1; j<n; j++)(a[i] [j]==a[i] [0]) k++;(k==n-1) cout<<i<<\n;

}<<\nPress any key…;(! kbhit());

}

 

Результат выполнения программы

 

 

Задание 4

виртуальный класс программа массив

Разработайте программу работы со строками. Организуйте ввод исходных данных с клавиатуры. Используйте функции из библиотеки обработки строк string.h. Результаты работы программы отобразите на экране.

Дана строка произвольной длины. Группы символов, разделенные пробелами (од-ним или несколькими), будем называть словами. Определите в соответствии с вариантом:

Вариант 8

Количество слов в строке, а также самое короткое слово (если несколько слов имеют минимальную длину, то возьмите первое из них).

Текст программы

 

#include

#include

#include

#include main()

{();string[100];*word, minword[50];k=0;<<\n;<< Input string:;.getline (string, 100);<<\n;<< Words:\n;=strtok (string, );(word!= NULL)

{++;<<word<<\n;(k==1) strcpy (minword, word);(strlen(word)<strlen(minword)) strcpy (minword, word);= strtok (NULL, );

}<<\nNumber of words is equal to <<k;<<\nShortest word in string: <<minword<<\n;

getch();

}

 

Результат выполнения программы

 

 

Задание 5

 

Разработайте программу обработки структур. В программе используйте структуру, содержащую поля с информацией об учащихся:

фамилия и инициалы;

дата рождения;

номер группы;

оценки за семестр по предметам: физика, математика, информатика, этика, психология.

Организуйте ввод исходных данных, средний балл каждого учащегося рассчитайте по введенным оценкам. На