ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 19.04.2024
Просмотров: 68
Скачиваний: 1
Matrix ( ) {
m = 0;
n = 0;
}
Matrix ( int a, int b ) {
m = a;
n = a;
}
~Matrix ( ) {
delete mat;
}
void setSize ( int a, int b ) {
m = a;
n = a;
}
void setDate ( ) {
mat = new float[m*n];
for ( i = 0; i < m; i++ ) {
cout << "Enter stroku " << i + 1 << endl;
for ( j = 0; j < n; j++ ) {
cin >> *(mat + ( i*n + j ) );
}
}
}
void toString ( ) {
cout << "Output Matrix" << endl;
for ( i = 0; i < m; i++ ) {
for ( j = 0; j < n; j++ ) {
cout<< "[" << *(mat + ( i*n + j ) ) << "]";
}
cout << endl;
}
}
};
#endif
Файл реализации класса
#include "stdafx.h"
#include "matrix.h"
Matrix& Matrix::operator = ( Matrix &x ) {
setSize ( x.m, x.n );
mat = new float[ x.m * x.n ];
float *m = x.mat;
for ( int i = 0; i < x.m; i++ ) {
for ( int j = 0; j < x.n; j++ ) {
*(mat + ( i*n + j ) ) = *(m + ( i*n + j ) );
}
}
return *this;
}
Matrix& operator + (Matrix &x, Matrix &y) {
Matrix *tmp = new Matrix ( x.m, x.n ) ;
float *m = new float[x.m * x.n];
float *mx = x.mat;
float *my =y.mat;
for ( int i = 0 ; i < tmp->m ; i++ ) {
for ( int j = 0 ; j < tmp->n ; j++ ) {
*( m + i*tmp->n + j ) = *( mx + i*tmp->n + j ) + *( my + i*tmp->n + j );
}
}
tmp->mat = m;
return *tmp;
}
Matrix& operator - (Matrix &x, Matrix &y) {
Matrix *tmp = new Matrix ( x.m, x.n ) ;
float *m = new float[x.m * x.n];
float *mx = x.mat;
float *my =y.mat;
for ( int i = 0 ; i < tmp->m ; i++ ) {
for ( int j = 0 ; j < tmp->n ; j++ ) {
*( m + i*tmp->n + j ) = *( mx + i*tmp->n + j ) - *( my + i*tmp->n + j );
}
}
tmp->mat = m;
return *tmp;
}
Matrix& operator * (Matrix &x, Matrix &y) {
Matrix *tmp = new Matrix ( x.m, y.n ) ;
float *m = new float[x.m * x.n];
float *mx = x.mat;
float *my =y.mat;
for ( int i = 0 ; i < x.m ; i++ ) {
for ( int j = 0 ; j < y.n ; j++ ) {
*( m + i*tmp->n + j ) = 0;
for ( int k = 0; k < x.n; k++ ) {
*( m + i*tmp->n + j ) += (*( mx + i*tmp->n + k )) * (*( my + k*tmp->n + j ));
}
}
}
tmp->mat = m;
return *tmp;
}
6.Создайте класс Shape (форма). Создайте от него производные классы Circle (окружность) и Cylinder(цилиндр). Класс Shape должен содержать чисто виртуальную функцию printShapeName (печатать имя формы). Эта функция должна переопределяться в каждом производном классе. Имена объектов производных классов должны выводиться на печать через указатель на базовый класс, то есть использовать свойства полиморфизма.
Основной файл с ф-ией main
#include "stdafx.h"
#include <iostream.h>
class Shape {
public:
virtual void printShapeName ( ) {
cout << "Shape" << endl;
};
};
class Circle : public Shape {
public:
void printShapeName ( ) {
cout << "Circle" << endl;
};
};
class Cylinder : public Shape {
public:
void printShapeName ( ) {
cout << "Cylinder" << endl;
};
};
int main(int argc, char* argv[])
{
Shape *s = new Shape;
s->printShapeName();
Circle ci;
s = &ci;
s->printShapeName();
Cylinder cy;
s = &cy;
s->printShapeName();
return 0;
}
8. Описать класс “множество”, позволяющий выполнять основные операции – добавление и удаление элемента, пересечение, объединение и разность множеств.
Основной файл с ф-ией main
// p8.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "many1.h"
int main(int argc, char* argv[])
{
Many a;
a.add ( 11 );
a.add ( 2 );
a.add ( 3 );
Many b;
b.add ( 11 );
b.add ( 22 );
b.add ( 33 );
Many s;
s = a - b;
s.print();
//s.print();
/*
a.del ( 1 );
a.del ( 2 );
a.add ( 33 );
a.add ( 36 );
cout << endl << endl;
a.print();
*/
return 0;
}
Заголовочный файл класса
#pragma once
class Many {
friend Many &operator | ( Many &x, Many &y) {
Many *tmp = new Many ( ) ;
List *a;
a = x.q;
while ( a != 0 ) {
tmp->add ( a->ch );
a = a->ps;
}
a = y.q;
while ( a != 0 ) {
tmp->add ( a->ch );
a = a->ps;
}
return *tmp;
};
friend Many &operator & ( Many &x, Many &y) {
Many *tmp = new Many ( ) ;
List *a;
List *b;
a = x.q;
while ( a != 0 ) {
b = y.q;
while ( b != 0 ) {
if ( a->ch == b->ch ) tmp->add ( a->ch );
b = b->ps;
}
a = a->ps;
}
return *tmp;
};
friend Many &operator - ( Many &x, Many &y) {
Many *tmp = new Many ( ) ;
List *a;
List *b;
bool t = false;
a = x.q;
while ( a != NULL ) {
b = y.q;
t = false;
while ( b != NULL ) {
if ( a->ch == b->ch ) t = true;
b = b->ps;
}
if ( !t ) tmp->add ( a->ch );
a = a->ps;
}
return *tmp;
};
private:
typedef struct st {
int ch;
struct st *ps;
} List;
List *p;
List *q;
List *m;
public:
Many ( ) {
p = NULL;
q = NULL;
m = NULL;
};
Many &operator = ( Many &x ) {
List *a;
a = x.q;
while ( a != NULL ) {
add ( a->ch );
a = a->ps;
}
return *this;
};
void add ( int val ) {
m = q;
while ( m != NULL ) {
if ( m->ch == val ) return;
m = m->ps;
}
q = new List;
q->ps = p;
p = q;
q->ch = val;
return;
};
void del ( int val ) {
List *n, *s;
m = q;
while ( m != NULL ) {
if ( m->ch == val ) {
if ( m == q ) {
p = m->ps;
delete m;
q = p;
m =q;
}
else {
s = m->ps;
delete m;
n->ps = s;
m = n;
}
}
n = m;
m = m->ps;
}
return;
};
void print ( ) {
cout << "Print" << endl;
m = q;
while ( m != NULL ) {
cout << m->ch << endl;
m = m->ps;
}
return;
};
};
Описать класс, реализующий стек.
// p9.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "stdio.h"
class Stack {
private :
typedef struct st {
int ch;
struct st *ps;
} STACK;
STACK *p;
STACK *q;
public :
Stack () {
p = NULL;
q = NULL;
}
void push ( int val ) {
q = new STACK;
q->ps = p;
p = q;
q->ch = val;
return;
};
void pop ( int *pval ) {
*pval = q ->ch;
p = q->ps;
delete q;
q = p;
return;
};
};
Int main(int argc, char* argv[])
{
Stack a;
int i;
a.push(1);
a.push(2);
a.push(3);
a.push(4);
a.push(5);
a.pop(&i);
printf("%d\n", i );
a.pop(&i);
printf("%d\n", i );
a.pop(&i);
printf("%d\n", i );
a.pop(&i);
printf("%d\n", i );
a.pop(&i);
printf("%d\n", i );
return 0;
}
Просмотр результата проги в Pascal Debug->Output
Дана последовательность чисел . Используя сортировку выбором, написать программу (на языке Visual Basic или Pascal) упорядочивания элементов по убыванию.
const
SIZE=255;
var
a : array[1..SIZE] of integer;
min, i, j, n, t : integer;
begin
write('vvedite n: ');
readln(n);
write('vvedite massiv: ');
for i := 1 to n do
read(a[i]);
for i := 1 to n - 1 do
begin
min := i;
for j := i + 1 to n do
if a[min] > a[j] then
min := j;
t := a[i];
a[i] := a[min];
a[min] := t;
end;
for i := 1 to n do
write(a[i], ' ');
writeln;
end.
Дана последовательность чисел . Используя сортировку обменами, написать программу (на языке Visual Basic или Pascal) упорядочивания элементов по возрастанию.