Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практичні і лабораторні заняття.doc
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
382.98 Кб
Скачать

Практичне заняття 14 Теоретична частина

Базується на матеріалі лекцій 29: багатофайлові програми

Завдання

Ввести тексти програм, які розглядалися у лекції 29. Прокомпілювати, проаналізувати результат роботи. До тексту звіту включити лістінги програм та результати їх роботи.

//filea.cpp

#include "Fileh.h"

Int main()

{ someclass obj1;

int var1=obj1.memfunc(2,3);

cout<<var1;

getch();

return 0;

}

//fileb.cpp

#include "Fileh.h"

int someclass::memfunc(int n1,int n2)

{return n1+n2;

};

//fileh.h

#include <iostream.h>

#include <conio.h>

using namespace std;

class someclass

{private:

int memvar;

public:

int memfunc(int,int);

};

Програма 29.1

//заголовочний файл для класу надвеликих чисел

//verylong.h

#include<iostream>

#include<string.h>

#include<stdlib.h>

using namespace std;

const int SZ=1000; //максимальне число розрядів

class verylong

{

private:

char vlstr[SZ];//число як рядок

int vlen;//довжина рядка

verylong multdigit(const int) const; //прототипи

verylong mult10(const verylong) const;//прихованих функцій

public:

verylong():vlen(0) //конструктор без аргументів

{vlstr[0]='\0';}

verylong(const char s[SZ]) //конструктор з 1 аргументом для рядка

{strcpy(vlstr,s); vlen=strlen(s);}

verylong(const unsigned long n) //конструктор з 1 аргументом для long int

{ltoa(n,vlstr,10); //перетворити в рядок

strrev(vlstr); //перевернути

vlen=strlen(vlstr); //знайти довжину

}

void putvl() const; //вивести число

void getvl(); //одержати число від користувача

verylong operator +(const verylong); //додати числа

verylong operator *(const verylong); //помножити числа

};

Програма 29.2

//verylong.cpp

//реалізація обробки даних

#include "verylong.h"

//////////

void verylong::putvl() const

{char temp[SZ];

strcpy(temp,vlstr); //створити копію

cout<<strrev(temp); //перевернути копію і вивести її

}

/////////

void verylong::getvl()

{cin>>vlstr;//одержати рядок від користувача

vlen=strlen(vlstr);//знайти її довжину

strrev(vlstr);//перевернути її

}

//////////////

verylong verylong::operator +(const verylong v)

{char temp[SZ];

int j,maxlen;

maxlen=(vlen>v.vlen)?vlen:v.vlen;//знайти довше число

int carry=0;

for(j=0;j<maxlen;j++)

{int d1=(j>vlen-1)?0:vlstr[j]-'0';

int d2=(j>v.vlen-1)?0:v.vlstr[j]-'0';

int digitsum=d1+d2+carry;

if(digitsum>=10)

{digitsum-=10;carry=1;}

else

carry=0;

temp[j]=digitsum+'0';

}

if(carry==1)

temp[j++]='1';

temp[j]='\0';

return verylong(temp);

}

////////////

verylong verylong::operator *(const verylong v)

{verylong pprod;

verylong tempsum;

int j,digit,k;

for(j=0;j<v.vlen;j++) //для кожного розряду аргументу

{digit=v.vlstr[j]-'0';

pprod=multdigit(digit);

for(int k=0;k<j;k++)

pprod=mult10(pprod);

tempsum=tempsum+pprod;

}

return tempsum;

}

///////////

verylong verylong::mult10(const verylong v)const //домноження аргументу на 10

{char temp[SZ];

int j;

for(j=v.vlen-1;j>=0;j--)//зсунутися на 1 розряд

temp[j+1]=v.vlstr[j];

temp[0]='0'; //обнулити молодший розряд

temp[v.vlen-1]='\0';//поставити обмежувач рядка

return verylong(temp);

}

/////////

verylong verylong::multdigit(const int d2) const

{char temp[SZ];

int j,carry=0;

for(j=0;j<vlen;j++)

{int d1=vlstr[j]-'0';

int digitprod=d1*d2;

digitprod+=carry;

if(digitprod>=10)

{carry=digitprod/10;

digitprod-=carry*10;}

else

carry=0;

temp[j]=digitprod+'0';

}

if(carry!=0)

temp[j++]=carry+'0';

temp[j]='\0';

return verylong(temp);

}

Програма 29.3

//обчислення факторіалу великого числа

#include «verylong.h»

#include<conio.h>