Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабробС++1к.docx
Скачиваний:
1
Добавлен:
01.04.2025
Размер:
1 Мб
Скачать
☆

Void cMasView::OnDraw(cdc* pDc)

{ CMasDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

CString s,s1; int L1=80,k1=0;

int m1[2][3]={1,4,3,6,5,7};

for(int i=0;i<2;i++)

{ for (int j=0;j<3;j++){s.Format("%d ",m1[i][j]);

pDC->TextOut(L+k,L1,s);k+=40;}L1+=40;k=0;

s1.Format(" ");pDC->TextOut(L,L1,s1);}

}

Друкування елементів масиву за допомогою вказівників:

Void cMasView::OnDraw(cdc* pDc)

{ CMasDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

CString s,s1; int L1=80,k1=0;

int m1[2][3]={1,4,3,6,5,7};int *pm1[2];

for(int i=0;i<2;i++)

{pm1[i]=&m1[i][0];

for (int j=0;j<3;j++){s.Format("%d ",*(pm1[i]+j));

pDC->TextOut(L+k,L1,s);k+=40;}L1+=40;k=0;

s1.Format(" ");pDC->TextOut(L,L1,s1);}

}

Завдання до лабораторної роботи.

  1. Написати та відладити текст програми для вирішення завдання за варіантом – 15 балів

Можна не створювати ресурсів - будувати меню та діалогове вікно.

10. Функції. Перевантаження та шаблони функцій.

(4 години, 2 заняття)

Варіанти завдань до лабораторної роботи.

Варіант завдання

Умови задачі

Примітки

1

Обчислити корені квадратних рівнянь

Всі корені є дійсними

2

Підрахувати кількість точок, які розташовані всередині кола радіусом r та центром на початку координат; координати точок задані масивами Х(100), Y(100)

Відстань точки від початку координат обчислювати у допоміжному алгоритмії

3

Визначити периметри трикутників, що задані координатами їх вершин

Довжину сторони трикутників обчислювати у допоміжному алгоритмі

4

Підрахувати кількість точок, які знаходяться всередині кола радіусом r з центром у точці з координатами (1,1); координати задані масивами Х(80), Y(80)

Відстань точки від центра кола визначати у допоміжному алгоритмі

5

Обчислити

де v1,v2,v3 - об’єми куль з радіусами r1,r2,r3 відповідно

v1, v2, v3 обчислювати у допоміжному алгоритмії

6

Обчислити суми додатніх елементів масивів X(N),Y(M),Z(K)

7

Обчислити середнє арифметичне додатніх елементів для масивів A(N1),B(N2),C(N3)

8

Підрахувати кількість елементів матриць X(10,15) та Y(20,12), що задовольняють умовам

та

немає

9

Обчислити суми додатніх елементів кожного рядка для матриць А(10,12) та В(15,10)

немає

10

Обчислити

де xm1 та xm2 - найменші елементи масиву Х1(70), Х2(80)

немає

11

Обчислити суми елементів головних діагоналей матриць A(N,N), B(M,M)

12

Обчислити

де s1 - сума додатніх елементів масиву Х(50); s2 - сума від’ємних елементів масиву Y(60)

Обидві суми обчислювати у одному допоміжному алгоритмі

13

Підрахувати кількість нульових елементів для матриць А(N,M) та В(M,N)

14

Обчислити суми елементів нижніх трикутних матриць для матриць А(15,15) та В(20,20)

нема

15

Визначити кількість додатніх елементів до першого від’ємного у масивах Х(40), Y(50), Z(N)

Приклади вирішення завдань

1. функція розташована перед програмою, яка її викликає;

int fsum(int d[],int n){int s=0;for(int i=0;i<n;i++)s+=d[i];return s;}

void CFuncView::OnDraw(CDC* pDC)

{

CFuncDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

int m[4]={1,4,3,9};

int sum=fsum(m,4);

CString s;

s.Format("sum=%d",sum); pDC->TextOut(10,20,s);

// TODO: add draw code for native data here

}

2. функція розташована після програми, яка її викликає;

int fsum(int d[],int n);//прототип функції – попереднє оголошення

void CFuncView::OnDraw(CDC* pDC)

{

CFuncDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

int m[4]={1,4,3,9};

int sum=fsum(m,4);

CString s;

s.Format("sum=%d",sum); pDC->TextOut(10,20,s);

// TODO: add draw code for native data here

}

int fsum(int d[],int n){int s=0;for(int i=0;i<n;i++)s+=d[i];return s;}

2. функція розташована в окремому файлі з іменем fsum.h:

2a. створити файл такого вмісту:

int fsum(int d[],int n)

{int s=0;for(int i=0;i<n;i++)s+=d[i];return s;}

2б. зберегти його під іменем, наприклад. fsum.h та відкомпілювати.

2в. приєднати до файлу Lab10View:

#include “fsum.h”

2г. викликати функцію для виконання:

void CFuncView::OnDraw(CDC* pDC)

{

CFuncDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

int m[4]={1,4,3,9};

int sum=fsum(m,4); //виклик функції

CString s;

s.Format("sum=%d",sum); pDC->TextOut(10,20,s);

// TODO: add draw code for native data here

}

3.Якщо масив міститиме дійсні значення, потрібно перевантажити функцію (за варіантом 2г):

3а.вміст файлу fsum.h буде таким:

int fsum(int d[],int n){int s=0;for(int i=0;i<n;i++)s+=d[i];return s;}

double fsum(double d[],int n){double s=0;for(int i=0;i<n;i++)s+=d[i];return s;}

3б.у функції void CFuncView::OnDraw(CDC* pDC) передбачити наявність масиву дійсних чисел:

void CFuncView::OnDraw(CDC* pDC)

{

CFuncDoc* pDoc = GetDocument();

ASSERT_VALID(pDoc);

int m[4]={1,4,3,9};

int sum=fsum(m,4); //виклик функції

CString s;

s.Format("sum=%d",sum); pDC->TextOut(10,20,s);

double md[4]={1.4,4.5,3.1,9.7};

double sumd=fsum(md,4); //виклик функції

CString s1;

s1.Format("sum=%g",sumd); pDC->TextOut(10,20,s1);

}

4. перевантаження за допомогою шаблону:

Вміст файлу fsum.h буде таким:

template <class may>

may fsum(may d[],int n)

{may s=0;for(int i=0;i<n;i++)s+=d[i];return s;}

Функція void CFuncView::OnDraw(CDC* pDC) не зміниться.

Завдання до лабораторної роботи.

  1. Написати та відладити текст програми для вирішення завдання за варіантом

  2. Записати функцію після функції OnDraw та повторити результат

  3. Перенести функцію в окремий файл т а приєднати її до файлу Lab10View в

  4. Перевантажити функцію для іншого типу параметрів обома способами

Можна не створювати ресурсів - будувати меню та діалогове вікно.