Премини към съдържанието
Форумът в приложение

По-лесно сърфиране. Научи повече.

Kaldata.com - Форуми

Приложение на форума на цял екран с push известия, значки и други.

За да инсталирате това приложение на iOS и iPadOS
  1. Докоснете Иконата за споделяне в Safari
  2. Превъртете менюто и докоснете Добавяне към началния екран.
  3. Докоснете Добавяне в горния десен ъгъл.
За да инсталирате това приложение на Android
  1. Докоснете менюто с 3 точки (⋮) в горния десен ъгъл на браузъра.
  2. Докоснете Добавяне към началния екран или Инсталиране на приложение.
  3. Потвърдете, като докоснете Инсталиране.

Добре дошли!

Добре дошли в нашите форуми, пълни с полезна информация. Имате проблем с компютъра или телефона си? Публикувайте нова тема и ще намерите решение на всичките си проблеми. Общувайте свободно и открийте безброй нови приятели.

Моля, регистрирайте се за да публикувате тема и да получите пълен достъп до всички функции.

 

C++ запитване

Featured Replies

#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <string>
using namespace std;


class Student {
private:
	string name;
	string EGN;
	string university;
	string facNum;
	string specialnost;
	float tochki;
public:
	void display();
	void getData();
	string getName();
	string getUniversity();
	string getfacNum();
	string getSpecialnost();
	string getEGN();
	float getTochki();
	bool getPol();
};

bool Student::getPol() {
	char pol = EGN[8];
	int gpol = pol - '0';
	return gpol % 2 != 0;
}

string Student::getEGN() {
	return EGN;
}

string Student::getName() { 
	return name;
}
string Student::getUniversity() {
	return university;
}
string Student::getfacNum() {
	return facNum;
}
string Student::getSpecialnost() {
	return specialnost;
}
float Student::getTochki() {
	return tochki;
}

void Student::getData() {
	cin.ignore();
	cout << "Въведи име: "; getline(cin, name);
	cout << "Въведи ЕГН: "; getline(cin, EGN);
	cout << "Въведи университет: "; getline(cin, university);
	cout << "Въведи факултетен номер: "; getline(cin, facNum);
	cout << "Въведи специалност: "; getline(cin, specialnost);
	cout << "Въведи точки: "; cin >> tochki;
}
void Student::display() {
	cout << "---Студент---" << endl;
	cout << "Име: " << name << endl;
	cout << "ЕГН: " << EGN << endl;
	cout << "Университет: " << university << endl;
	cout << "Факултет: " << facNum << endl;
	cout << "Специалност: " << specialnost << endl;
	cout << "Брой събрани точки от студента: " << tochki << endl;
	cout << endl;

}

class CStudent {
private:
	string name;
	string EGN;
	string school;
	string klas;
	int ctochki;
public:
	void display();
	void getData();
	string getName();
	string getSchool();
	string getKlas();
	int getCTochki();
};

string CStudent::getName() {
	return name;
}
string CStudent::getSchool() {
	return school;
}
string CStudent::getKlas() {
	return klas;
}
int CStudent::getCTochki() {
	return ctochki;
}
void CStudent::getData() {
	cin.ignore();
	cout << "Въведете име: "; getline(cin, name);
	cout << "Въведете ЕГН: "; getline(cin, EGN);
	cout << "Въведете училище: "; getline(cin, school);
	cout << "Въведете клас: "; getline(cin, klas);
	cout << "Въведете броя събрани точки от ученика: "; cin >> ctochki;
	
}

void CStudent::display() {
	cout << "---Ученик---" << endl;
	cout << "Име: " << name << endl;
	cout << "ЕГН: " << EGN << endl;
	cout << "Училище: " << school << endl;
	cout << "Клас: " << klas << endl;
	cout << "Брой събрани точки от ученика: " << ctochki << endl;
	cout << endl;
}

int main() {
	system("chcp 1251");
	int countStudent = 0;
	int countCStudent = 0;
	int highpoints = 0;
	Student students[20];
	CStudent cstudents[20];
	char codeOp;
	do {
		cout << "1 - добавя данни за студент " << endl;
		cout << "2 - добавя данни за ученик " << endl;
		cout << "3 - извежда всички въведени данни " << endl;
		cout << "4 - извежда името на ученика с най-много точки; " << endl;
		cout << "5 - създава масив с данните на всички студентки. " << endl;
		cout << "Посочете операция или 0 за край: " << endl;
		cin >> codeOp;
		switch (codeOp) {
		case'0':
			break;
		case'1':
			cout << "Въведете данните на студента: " << endl;
			students[countStudent++].getData(); 
			break;
		case'2':
			cout << "Въведете данните на ученика: " << endl;
			cstudents[countCStudent++].getData();
			break;
		case '3':
			cout << "Всички студенти и ученици: " << endl;
			for (int i = 0; i < countStudent; i++) {
				students[i].display();
			}
			for (int i = 0; i < countCStudent; i++) {
				cstudents[i].display();
			}
			break;
		case '4':
			cout << "Ученика с най-много точки: " << endl;
			for (int i = 0; i < countCStudent; i++)
			{
				if (cstudents[i].getCTochki() > highpoints)
				{
					highpoints = cstudents[i].getCTochki();
					cout << "Име: " << cstudents[i].getName() << endl;
				}
			}
 			break;
		case '5':
			cin.ignore();
			cout << "Данните на всички студентки: " << endl;
			for (int i = 0; i < countStudent; i++) {
				if (students[i].getPol()) {
					cout << "Име: " << students[i].getName() << endl;
					cout << "ЕГН: " << students[i].getEGN() << endl;
					cout << "Университет: " << students[i].getUniversity() << endl;
					cout << "Факултетен номер: " << students[i].getfacNum() << endl;
					cout << "Специалност: " << students[i].getSpecialnost() << endl;
					cout << "Събрани точки: " << students[i].getTochki() << endl;
				}
			}
			break;
		default: cout << "Error! " << endl;
			break;
		}
	} while (codeOp != 0);
}

case 4 би трябвало да ми изкарва името на ученика с най-много точки, но ми изкарва имената на учениците.

Ами нормално, там извеждаш

					cout << "Име: " << cstudents[i].getName() << endl;

Трябва да запаметиш някъде примерно и номера на масива за съответния студент, за който си запаметил най-голямата стойност и да ги изкараш след цикъла.

преди 9 часа, DeathHour написа:
 highpoints

Къде получава стойност? 

Изпуснал си else ... C++ If ... Else (w3schools.com)

преди 3 часа, Banesc написа:

БЕЗ  бой нищо не става

 хващаш и биеш

и да си признават

кой е с най-много точки

кой е с най-малко 

Няма нужда от насилие, става и по мирен път - пишеш на всичките двойки и резултата от програмата вече е верен.

преди 13 часа, DeathHour написа:
cout << "Ученика с най-много точки: " << endl;
			for (int i = 0; i < countCStudent; i++)
			{
				if (cstudents[i].getCTochki() > highpoints)
				{
					highpoints = cstudents[i].getCTochki();
					cout << "Име: " << cstudents[i].getName() << endl;
				}
			}
 			break;

Така написано всеки път когато highpoints се увеличи, на екрана ще се изписват данните на ученика, който има повече точки от предишния, но не е задължително той да е с максималните точки. Трябва ти една променлива от тип int, за да съхраняваш индекса на ученика с най-много точки, освен да съхраняваш самите точки. 
Чак след като приключи цикъла, тогава извеждаш чрез индекса данните за ученика.
Иначе, гледам си усвоил някои трикове от другата програма, където бях ги дал. :) 
Обърни и внимание на това, че за точките на едно място си използвал int, на друго - float. В някои случаи може да е проблем. Int във Float влаза, ама обратното не - губиш част от значението. 

преди 3 часа, dioib написа:

Къде получава стойност? 

Изпуснал си else ... C++ If ... Else (w3schools.com)

Else не е задължителна клауза! В случая и не е необходима. Ако точките са по-големи от записаните до момента highpoints, новите highpoints са равни на точките, а на int-а за индекса се присвоява текущото значение на i. Ако не - не прави нищо.

преди 7 часа, jtaggerx написа:

Else не е задължителна клауза!

Да, това вече е въпрос на стил. 

Добавете отговор

Можете да публикувате отговор сега и да се регистрирате по-късно. Ако имате регистрация, влезте в профила си за да публикувате от него.

Гост
Публикацията ви съдържа термини, които не допускаме! Моля, редактирайте съдържанието си и премахнете подчертаните думи по-долу. Ако замените букви от думата със звездички или друго, за да заобиколите това предупреждение, профилът ви ще бъде блокиран и наказан!
Напишете отговор в тази тема...

Разглеждащи това в момента 0

  • Няма регистрирани потребители разглеждащи тази страница.

Дарение

  • Подкрепи съществуването на форума - направи дарение
    25%
    Дарени 252.69 EUR от нужните 1,000.00 EUR

Бюлетин

Получавайте известие, когато има важна промяна или новина свързана с форума.

Профил

Навигация

Търсене

Търсене

Конфигуриране на push известия в браузъра

Chrome (Android)
  1. Докоснете иконата на катинар до адресната лента.
  2. Докоснете Разрешения → Известия.
  3. Променете предпочитанията си.
Chrome (Desktop)
  1. Кликнете върху иконата на катинар в адресната лента.
  2. Изберете Настройки на сайта.
  3. Намерете Известия и коригирайте предпочитанията си.