Revisión de mitad de período del experimento 9 de "programación orientada a objetos" de Jiruan de la Universidad de Shenzhen

A. Transformación de robots (clases y objetos) [simulación intermedia]

Tema Descripción

Escriba una clase de robot que contenga atributos como el nombre de la máquina, el volumen de sangre, el valor de daño, el valor de defensa, el tipo y el nivel. Entre ellos, el volumen de sangre, el daño y la defensa están relacionados con el nivel y el tipo:

Robot ordinario, tipo N, volumen de sangre, daño y defensa son 5 veces el nivel

Robot atacante, el tipo es A, el ataque es 10 veces el nivel, otros atributos son los mismos que los normales

Robot defensivo, el tipo es D, la defensa es 10 veces el nivel, otros atributos son los mismos que los ordinarios

Robot de tipo de vida, el tipo es H, la vida es 50 veces el nivel y otros atributos son los mismos que los ordinarios.

Las operaciones del robot incluyen: métodos de impresión, adquisición y configuración de varios atributos, los constructores son opcionales y se pueden escribir según las necesidades.

Escriba una función global para la transformación de robots, de modo que varios tipos de robots puedan transformarse entre sí. Los parámetros incluyen el puntero del objeto del robot y el tipo de robot después de la transformación. La función es modificar el tipo de robot y cambiar los atributos relacionados. Si el tipo de transformación es diferente del tipo de robot original, ejecute la función de transformación y devuelva verdadero; si el tipo de transformación es el mismo que el tipo original, no realice la transformación y devuelva falso.

Se requiere que todos los miembros de datos sean atributos privados, y los requisitos anteriores se implementan mediante programación en lenguaje C++ e ideas de diseño orientadas a objetos.

ingresar

Ingrese t en la primera línea, lo que indica que la transformación del robot se realizará t veces

Luego, cada dos líneas, una línea ingresa los atributos de un robot, incluidos el nombre, el tipo y el nivel de la máquina, y la otra línea ingresa el tipo de transformación.

y así sucesivamente para entrar

producción

Cada línea genera la información del robot después de la transformación, y se requiere llamar al método de impresión del robot para generar, incluso si el robot no se transforma.

La salida del atributo es: nombre, tipo, nivel, HP, daño, defensa

La última línea muestra el número de transformaciones realizadas.

Muestra de entrada 1

3
X001 N 5
H
X002 A 5
D
X003 D 5
D

muestra de salida 1

X001–H–5–250–25–25
X002–D–5–25–25–50
X003–D–5–25–25–50
El número de transformación del robot es 2

código de CA

#include<iostream>
using namespace std;


class Robot {
    
    
	char type;
	string name;
	int dengji, xueliang, shanghai, fangyu;
	static int cnt;

public:
	Robot() {
    
    
		cin >> name >> type >> dengji;
		f();
	}

	//生成其他信息
	void f() {
    
    
		xueliang = shanghai = fangyu = dengji * 5;
		if (type == 'A')
			shanghai = dengji * 10;
		else if (type == 'D')
			fangyu = dengji * 10;
		else if (type == 'H')
			xueliang = dengji * 50;
	}

	void print() {
    
    
		cout << name << "--" << type << "--" << dengji << "--" << xueliang << "--" << shanghai << "--" << fangyu << endl;
	}

	char getType() {
    
     return type; }
	string getName() {
    
     return name; }
	int getDengji() {
    
     return dengji; }
	int getXueliang() {
    
     return xueliang; }
	int getShanghai() {
    
     return shanghai; }
	int getFangyu() {
    
     return fangyu; }

	void setType(char c) {
    
    
		type = c;
	}

	void setName(string name) {
    
     this->name = name; }
	void setDengji(int v) {
    
     dengji = v; }
	void setXueliang(int v) {
    
     xueliang = v; }
	void setShanghai(int v) {
    
     shanghai = v; }
	void setFangyu(int v) {
    
     fangyu = v; }

	static void print1() {
    
    
		cout << "The number of robot transform is " << cnt << endl;
	}

	void add() {
    
     cnt++; }
};

int Robot::cnt = 0;


bool trans(Robot* p, char desType) {
    
    
	if (p->getType() == desType)
		return false;
	p->setType(desType);
	p->f();
	p->add();
	return true;
}

int main() {
    
    
	int n;
	cin >> n;
	while (n--)
	{
    
    
		Robot r;
		char c;
		cin >> c;
		trans(&r, c);
		r.print();
	}
	Robot::print1();
	return 0;
}

B. Teléfono virtual (construcción y destrucción) [simulación a medio plazo]

Tema Descripción

Un teléfono virtual contiene atributos: número de teléfono, estado y nombre del propietario.

1. Un número de teléfono es una clase que incluye números y tipos, donde el número es un tipo entero y el tipo usa una sola letra para representar la categoría de usuario, A representa al gobierno, B representa a la empresa y C representa al individuo . Las operaciones de clase incluyen métodos como construcción, adquisición y establecimiento de atributos, etc., que pueden escribirse según las necesidades.

2. El estado está representado por un número, 1 significa en uso, 0 significa que no está en uso,

3. El nombre del dueño es una cadena

Las operaciones de llamada incluyen: construcción, destrucción, impresión y consulta.

1. El constructor debe considerar la construcción de miembros de clase compuestos y la información de solicitud de salida. Suponiendo que el número de teléfono es 12345678, el constructor genera "12345678 construido".

2. La impresión es para generar la información relevante del teléfono. Si el estado del teléfono está en uso, generará uso; si el estado no está en uso, generará no uso. Consulte el ejemplo para ver el formato de salida.

3. El destructor es para generar información de aviso. Asumiendo que el número de teléfono es 12345678, el destructor genera "12345678 destruido".

4. La operación de consulta es consultar el teléfono según el número dado, si el número propio del teléfono es diferente al número dado, devolverá 0, si el número propio del teléfono es el mismo que el número dado, devolverá 1

Use C++ y pensamiento orientado a objetos para lograr los siguientes requisitos:

1. Ingrese datos relevantes, cree tres objetos de teléfono e inicialícelos a través del método de construcción.

2. Ingrese varios números de teléfono, verifique si estos números están en los tres objetos de teléfono a través de la operación de consulta, si no hay un "número incorrecto" de salida, si existe, llame a la operación de impresión para generar la información del teléfono, vea la salida muestra para más detalles.

ingresar

Ingrese la información de tres teléfonos en las primeras tres líneas, cada línea incluye el número de teléfono, el tipo de teléfono, el estado y el nombre del propietario

Luego ingrese t en una línea, lo que indica que hay t números para consultar

Luego ingrese t números de teléfono en la línea t

producción

Muestra los resultados de la consulta de t números en t líneas

Muestra de entrada 1

80000001 A 1 Tom
80000002 B 0 Ken
80000003 C 1 María
3
50000002
80000003
80000002

muestra de salida 1

80000001 construido.
80000002 construido.
80000003 construido.
número equivocado.
Phone=80000003–Type=C–State=use–Owner=mary
Phone=80000002–Type=B–State=unuse–Owner=ken
80000003 destruido.
80000002 destruido.
80000001 destruido.

código de CA

#include<iostream>
#include<vector>
using namespace std;

class ID {
    
    
	int id;
	char type;
public:
	ID(int i, char t) :id(i), type(t) {
    
    }
	ID() {
    
    }
	void setType(char c) {
    
    
		type = c;
	}
	void setID(int i) {
    
    
		id = i;
	}
	char getType() {
    
     return type; }
	int getId() {
    
    
		return id;
	}
};


class Phone {
    
    
	ID _id;
	int state;
	string name;

public:
	Phone() {
    
    
		int id;
		char c;
		cin >> id >> c >> state >> name;
		_id.setID(id);
		_id.setType(c);

		cout << _id.getId() << " constructed." << endl;
	}

	bool find(int num) {
    
    
		return num == _id.getId();
	}


	~Phone()
	{
    
    
		cout << _id.getId() << " destructed." << endl;
	}

	void print() {
    
    
		cout << "Phone=" << _id.getId() << "--Type=";
		cout << _id.getType() << "--State=";
		if (state == 0)
			cout << "unuse";
		else
			cout << "use";
		cout << "--Owner=" << name << endl;
	}

};

int main() {
    
    
	Phone* v = new Phone[3];
	int n;
	cin >> n;
	for (int i = 0; i < n; i++) {
    
    
		int id;
		cin >> id;
		bool f = 0;
		for (int j = 0; j < 3; j++) {
    
    
			if (v[j].find(id)) {
    
    
				v[j].print();
				f = 1;
				break;
			}
		}
		if (!f)
			cout << "wrong number." << endl;
	}
	delete[]v;
	return 0;
}

C. Cuenta bancaria (construcción de copias) [simulación de mitad de período]

Tema Descripción

Una cuenta bancaria incluye atributos como saldo, tasa de interés, número y tipo. El número es un número entero fijo de 8 dígitos, y el tipo indica si es una cuenta personal o comercial. Si es una persona física, se marca con P, y para una empresa, se marca con E.

Las cuentas se dividen a su vez en cuentas corrientes y cuentas fijas, con una tasa de interés corriente del 0,5% y una tasa de interés fija del 1,5%.

Las operaciones de cuenta incluyen el cálculo de intereses y las operaciones de consulta. La operación de cálculo de interés es calcular el interés en función de la tasa de interés, agregar el interés al saldo y generar información relevante. La operación de consulta es para generar toda la información de la cuenta.

Cree una cuenta corriente e inicialice varias propiedades a través del constructor. Luego cree una cuenta regular a través de la construcción de copias, la información es básicamente la misma que la cuenta corriente, las diferencias incluyen: el número de cuenta regular es el número de cuenta corriente más 50000000 (7 ceros); la tasa de interés es la tasa de interés regular.

Requiere que todos los miembros de datos sean propiedades privadas

Use las ideas de clase y objeto del lenguaje C++ para escribir programas para lograr los requisitos anteriores

ingresar

Introduzca el número de pruebas t, indicando que existen t cuentas corrientes

Primero ingrese el número de cuenta, el tipo de cuenta y el saldo de una cuenta corriente (cree una cuenta corriente y una cuenta regular según la entrada)

Luego ingrese dos operadores, el primer operador opera en cuentas corrientes y el segundo operador opera en cuentas fijas. Si ingresa una C mayúscula, significa operación de cálculo de interés, si ingresa una P mayúscula, significa operación de consulta

Ingresa la información y operaciones de otras cuentas por analogía

producción

Muestra los resultados de la operación de un par de cuenta corriente y cuenta fija cada dos líneas.

Muestra de entrada 1

2
12345678 P 10000
PC
23456789 E 20000
PC

muestra de salida 1

Cuenta=12345678–suma=10050
Cuenta=62345678–Persona–suma=10000–tasa=0,015
Cuenta=23456789–Empresa–suma=20000–tasa=0,005
Cuenta=73456789–suma=20300

código de CA

#include<iostream>
#include<vector>
using namespace std;

class Account {
    
    
	double balance;
	double rate;
	int id;
	char type;
public:
	Account() {
    
    
		cin >> id >> type >> balance;
		rate = 0.005;
	}

	Account(const Account& a) {
    
    
		balance = a.balance;
		rate = 0.015;
		id = a.id + 50000000;
		type = a.type;
	}

	void print() {
    
    

	}

	void C() {
    
    
		balance *= (1.0 + rate);
		cout << "Account=" << id << "--";
		cout << "sum=" << balance << endl;
	}

	void P() {
    
    
		cout << "Account=" << id << "--";
		if (type == 'P')
			cout << "Person--";
		else 
			cout << "Enterprise--";
		cout << "sum=" << balance << "--";
		cout << "rate=" << rate << endl;
	}
};

int main() {
    
    
	int n;
	cin >> n;
	while (n--)
	{
    
    
		Account a;
		Account b(a);
		char c1, c2;
		cin >> c1 >> c2;
		if (c1 == 'C')
			a.C();
		else
			a.P();
		if (c2 == 'P')
			b.P();
		else
			b.C();
	}
	return 0;
}

D. Descuento de cumpleaños (construcción de clase compuesta)

Tema Descripción

Defina una clase de fecha Fecha, que contiene miembros de datos año\mes\día, y también contiene constructores y otras funciones (añádalo usted mismo según sea necesario)

Defina una clase de membresía VIP, incluidos los datos de identificación y nacimiento de los miembros, donde la identificación es un número entero que representa el número de membresía; el nacimiento es un tipo de fecha que representa el cumpleaños.

Class VIP contiene constructores y otras funciones (agregue usted mismo según sea necesario), y también contiene una función de descuento Descuento. El resultado devuelto por la función Descuento es un número de coma flotante que indica el descuento. La función contiene 1 parámetro, que es un tipo de fecha. La función de la función es determinar si la fecha del parámetro es el cumpleaños del miembro. Si es decir, el descuento será de 0,5, y si no lo es, el descuento será de 0,95

Escriba un programa para realizar las funciones mencionadas anteriormente y cumplir los requisitos de entrada y salida.

ingresar

Ingrese el año, mes y día en la primera línea, indicando la fecha de hoy

Introduzca t en la segunda línea para indicar que hay t miembros

En la tercera línea, ingrese la identificación del primer miembro, año, mes y día de cumpleaños

Ingrese la cantidad de consumo del primer miembro en la cuarta línea

Ingrese las próximas dos líneas de datos para el siguiente miembro por analogía...

producción

De acuerdo con el monto de consumo del miembro, llame a la función Descuento para juzgar si hoy es el cumpleaños del miembro y obtenga un descuento, y luego calcule el monto de consumo del descuento del miembro

Cada línea primero muestra el número de membresía y luego muestra la cantidad de consumo del descuento del miembro. La cantidad de consumo solo necesita generar la parte entera

Aviso para convertir números de coma flotante en enteros

doble x = 123.456

cout<<int(x)<<endl;

Muestra de entrada 1

2017 4 20
2
1111 2000 4 20
136
2222 2000 3 30
125

muestra de salida 1

El consumo de 1111 es 68
El consumo de 2222 es 118

código de CA

#include<iostream>
using namespace std;

class Date {
    
    
	int y, m, d;
public:

	Date() {
    
     cin >> y >> m >> d; }
	Date(int y, int m, int d) :
		y(y), m(m), d(d)
	{
    
    
	}

	bool operator ==(const Date& date)const {
    
    
		return  m == date.m && d == date.d;
	}

};


class VIP {
    
    
	int id;
	Date birth;
public:
	VIP(int id, Date b) :
		id(id),
		birth(b) {
    
    

	}

	double Discount(const Date& today) {
    
    
		if (today == birth)
			return 0.5;
		return 0.95;
	}

	void print(double money, const Date& today) {
    
    
		cout << id << "'s consumption is " << (int)(money * Discount(today)) << endl;
	}

};

int main() {
    
    
	Date today;

	int n;
	cin >> n;
	while (n--) {
    
    
		int a, b, c, d;
		cin >> a >> b >> c >> d;
		VIP v(a, Date(b, c, d));
		double money;
		cin >> money;
		v.print(money, today);
	}
	return 0;
}

E. Control remoto de TV (estático + amigo) [simulación a medio plazo]

Tema Descripción

Un televisor incluye atributos como volumen, modo y número de canal, entre los cuales el modo se divide en dos tipos: TV y DVD. En el modo TV, el televisor reproducirá el contenido del canal correspondiente; en el modo DVD, el televisor utiliza un número de canal unificado para reproducir el contenido del DVD y el número de canal es 99. Además, los televisores utilizan el método de miembros estáticos para compartir dos datos: el número de televisores que reproducen TV y el número de televisores que reproducen DVD, los cuales inicialmente son 0.

Las operaciones de TV incluyen impresión, funciones estáticas relacionadas, adquisición y configuración de atributos, etc., que se pueden escribir según las necesidades.

Ahora escribe una función de control remoto para controlar el televisor a través del método amigo. Sus parámetros incluyen el objeto del televisor, el modo, el cambio de volumen, el número de canal y ningún valor de retorno. Las operaciones de función incluyen:

1. Configure el modo del objeto TV. Si está configurado en modo DVD, el parámetro del número de canal debe ser 99; si está configurado en modo TV, el número de canal debe configurarse en un valor correspondiente.

2. Ajuste según el volumen cambiante, por ejemplo, el volumen original es 50 y el volumen cambiante de entrada es -30, luego 50-30 = 20, y el volumen final es 20. El valor de volumen más bajo es 0 y el más alto es 100. Si excede el rango, el volumen no cambiará.

3. Actualice la cantidad de televisores que actualmente reproducen TV y DVD

4. Llame al método de impresión del objeto de TV para generar información relacionada con TV

Sugerencia: si el modo original del televisor es el mismo que el modo pasado por el parámetro, entonces la operación real es ajustar el volumen, cambiar de canal y enviar información.

Nota: El primer parámetro de la función debe ser un objeto de TV, no un tipo de número entero, puede ser un objeto, un puntero de objeto o una referencia de objeto, y puede escribirlo usted mismo según sus necesidades.

Use el método de matriz dinámica para crear n televisores, numerados desde 1, el número de canal es el número, el volumen inicial es 50, el modo es TV y luego el televisor se controla a través de la función de control remoto.

Todos los miembros de datos de una clase son propiedades privadas. Utilice el lenguaje C++ y el pensamiento orientado a objetos para lograr los requisitos anteriores

ingresar

Ingrese n en la primera línea, lo que indica que hay n estaciones de TV

Ingrese t en la segunda línea, lo que indica que se realizarán t veces de operaciones de control remoto

Luego ingrese t líneas e ingrese el número de TV i, el modo k, el número de canal x y cambie el volumen en cada línea en secuencia, donde i representa el i-th TV, k es 1 para el modo TV, k es 2 para el modo DVD.

producción

Cada línea emite la información de TV después de realizar la operación de control remoto

La última línea muestra el número de televisores que actualmente reproducen TV y DVD.

Formato específico ver muestra

Muestra de entrada 1

10
5
3 1 11 20
4 2 99 -20
5 2 99 80
5 1 55 -60
6 2 99 -70

muestra de salida 1

TV No. 3 – Modo TV – Canal 11 – Volumen 70
TV No. 4 – Modo DVD – Canal 99 – Volumen 30 TV No.
5 – Modo DVD – Canal 99 – Volumen 100
TV No. 5 – Modo TV – Canal 55 – Volumen 40
TV No. 6 – Modo DVD – Canal 99 – Volumen 0
El número de televisores que reproducen TV es 8
El número de televisores que reproducen DVD es 2

código de CA

#include<iostream>
using namespace std;

class Tel {
    
    
	static int cntTV, cntDVD;
	int yinliang, pindao;
	int moshi;
public:
	Tel() {
    
    
		moshi = 1;
		cntTV++;
		pindao = 0;
		yinliang = 50;
	}

	void changeYin(int v) {
    
    
		yinliang += v;
		if (yinliang > 100)
			yinliang = 100;
		else if (yinliang < 0)
			yinliang = 0;
	}

	void print1() {
    
    
		if (moshi == 1)
			cout << "TV模式--";
		else if (moshi == 2)
			cout << "DVD模式--";
		cout << "频道" << pindao << "--";
		cout << "音量" << yinliang << endl;
	}

	static void print() {
    
    
		cout << "播放电视的电视机数量为" << cntTV << endl;
		cout << "播放DVD的电视机数量为" << cntDVD << endl;
	}

	//2 DVD
	//1 TV
	friend void yaokongqi(Tel* p, int moshi, int pindao, int bianyin) {
    
    
		if (p->moshi != moshi) {
    
    

			if (p->moshi == 1)
				p->cntTV--;
			else if (p->moshi == 2)
				p->cntDVD--;

			p->moshi = moshi;

			if (p->moshi == 1)
				p->cntTV++;
			else
				p->cntDVD++;

		}
		p->pindao = pindao;

		p->changeYin(bianyin);
		p->print1();

	}
};



int Tel::cntTV = 0;
int Tel::cntDVD = 0;

int main() {
    
    
	int n, t;
	cin >> n >> t;
	Tel* p = new Tel[n];
	while (t--)
	{
    
    
		int i, k, x, delta;
		cin >> i >> k >> x >> delta;
		cout << "第" << i << "号电视机--";
		i--;
		yaokongqi(p + i, k, x, delta);
	}
	Tel::print();
	return 0;
}

F. Tipo de burbuja de lista enlazada (estructura + lista enlazada)

Tema Descripción

En función de la entrada, se crea una lista vinculada utilizando el método de inserción de cola. Utilice la ordenación por burbujas para ordenar la lista vinculada creada en orden descendente y generar la lista vinculada ordenada.

Nota: Las matrices y los contenedores no son visibles en el programa; de lo contrario, se otorgarán 0 puntos.

ingresar

Número de pruebas t

El formato de cada conjunto de datos de prueba es:

Número de datos n

n líneas, una cadena por línea

producción

Para cada conjunto de datos de prueba, genere una lista vinculada de cadenas ordenadas en orden de diccionario descendente. Cada conjunto de salida está separado por una línea en blanco.

Muestra de entrada 1

2
4
shenzhen
nanjing
beijing
wuhan
6
china
brasil
alemania
filipinas
suiza
singapur

muestra de salida 1

wuhan
shenzhen
nanjing
pekín

suiza
singapur
filipinas
alemania
china
brasil

código de CA

#include<iostream>
using namespace std;

struct Node {
    
    
	string v;
	Node* next;
	Node(string v = "", Node* next = NULL) {
    
    
		this->v = v;
		this->next = next;
	}
};



class List {
    
    
	Node* head;
	int len;
public:
	List() {
    
    
		head = new Node();
		cin >> len;
		Node* p = head;
		for (int i = 0; i < len; i++) {
    
    
			string s;
			cin >> s;
			p->next = new Node(s);
			p = p->next;
		}
	}

	void print() {
    
    
		Node* p = head->next;
		while (p) {
    
    
			cout << p->v << endl;
			p = p->next;
		}
		cout << endl;
	}

	//交换p之后的两个节点
	void swap(Node* p) {
    
    
		Node* p1 = p->next;
		Node* p2 = p1->next;

		p->next = p2;
		Node* q = p2->next;
		p2->next = p1;
		p1->next = q;
	}

	//找到第index个节点的前一个
	Node* findNode(int index) {
    
    
		Node* p = head;
		while (index--)
			p = p->next;
		return p;

	}


	void BubbleSort() {
    
    
		for (int i = 1; i < len; i++) {
    
    
			bool flag = 0;
			Node* prior;
			int j;
			for (j = 0, prior = head; j < len - i; j++, prior = prior->next)
			{
    
    
				if (prior->next->v < prior->next->next->v) {
    
    
					swap(prior);
					flag = 1;
				}
			}
			if (!flag)
				break;
		}
	}

	~List() {
    
    
		while (head) {
    
    
			Node* p = head->next;
			delete head;
			head = p;
		}
	}


};



int main() {
    
    
	int t;
	cin >> t;
	while (t--) {
    
    

		List l;
		l.BubbleSort();
		l.print();

	}

	return 0;
}

Supongo que te gusta

Origin blog.csdn.net/weixin_46655675/article/details/129324321
Recomendado
Clasificación