Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2016, 14:02   #31
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

verdant322. Ну что, ты уже здесь?
ura_111 вне форума Ответить с цитированием
Старый 24.05.2016, 14:26   #32
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ну договаривались же на 14:00.

Ладно.

Программа ещё не сделана.

Она оказалась сложней чем я думал. Но я не унываю (решил её доделать уже сам).

А пока пришлю тебе текст программы, чтобы ты смог скомпелировать её и "пощупать ручками". Программа "сырая" - поэтому не удивляйся, если вдруг выползит какае то ошибка...
Хотя кое что работает: привожу скриншоты. Но сначало сохрани на диске С:/ текстовый файл с фамилиями (см. скриншоты )
ura_111 вне форума Ответить с цитированием
Старый 24.05.2016, 14:29   #33
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Код:
#include <fstream>
#include <cstdlib>
#include <windows.h>

#include "iostream"
#include <ctime>
#include <string>

using namespace std;

// Класс "кошелёк"
class Purse {

private: // Приватные поля (доступ к ним имеется только внутри класса) 

	int number; 
	string owner; // Владелец кошелька
	int *banknotes; // Купюры
	int summ; // Общая сумма в кошельке

	Purse *Tail; 

public: // Публичные поля (Доступ к ним можно получить из окружения класса)

	static int Instances; // Экземпляров создано
	static int TotalSumm; // Общая сумма на кошельках
	static int Number;    // 

private: // Приватные методы


	void computeSumm(){ // Вычисляет сумму на кошельке

		this->summ = 0; // Обнуляем старое значение суммы

		for (int i = 0; i < 9; i++){ // Перебираем все номиналы купюр
			this->summ += this->banknotes[i] * i; // Умножаем номинал купюры на количество купюр и прибавляем к сумме кошелька
		}

	}

	void computeTotalSumm(){ // Вычесляет сумму на всех кошельках
		Purse::TotalSumm -= this->summ; // Удаляем сумму этого конкретного кошелька из общей суммы
		this->computeSumm(); // Пересчитываем сумму на данном конкретном кошельке
		Purse::TotalSumm += this->summ; // Добавляем сумму данного конкретного кошелька к общей сумме
	}

public: // Публичные методы

	Purse() : Tail(NULL){ // Конструктор

		// инициализируем поля класса

		this->number = 0;
		this->owner = "";
		this->banknotes = new int[8];
		this->summ = 0;
		this->Tail = this;
		Purse::Number + 1;


		if (Purse::Instances < 20) 
		{
			Purse::Number++;
			this->number = Purse::Number;
			Purse::Instances++;                
		}
		else{
			throw overflow_error("Недопустимо создавать больше 20 экземпляров"); // Исключение переполнения
		}

		fstream in1("C:/1.txt", ios_base::in);
		if (!in1.is_open())                       // Проверка открылся ли файл
			cout << "Ошибка чтения файла\n\n\n";
		else
		{
			int k = 0;
			char *a1 = new char[255];
			for (; in1.peek() != EOF;)
			{
				in1.getline(a1, 255, '\n');
				k++;
			}
			in1.seekg(0, ios::beg);
			for (int i = 0; i <= rand() % k; i++)
			{
				in1.getline(a1, 255, '\n');
				k++;
			}
			this->owner = a1;
			delete a1;
			in1.close();
		}

		for (int i = 0; i < 9; i++){      // количество купюр
			this->banknotes[i] = rand() % 10;
		}

		this->computeSumm();
	}

	~Purse(){ // Деструктор
		Purse::Instances--; // Уменьшаем счётчик созданных экземпляров на 1

		for (int i = 0; i < 9; i++){ // Пересчёт общей суммы
			this->banknotes[i] = 0;
		}

		this->computeTotalSumm();
	}


	void Add()
	{
		Purse *temp = new Purse;
		Purse *temp1 = new Purse; //Указываем на голову

		temp1->Tail = this->Tail;
		this->Tail = temp->Tail;
		temp->Tail = temp1->Tail;

		delete temp1;
		Purse::Number--;

		//	Purse *temp1 = new Purse;


		
	}
	
	void Show()
	{
		Purse *tempHead = Tail; //Указываем на голову

		int temp = Instances; //Временная переменная равная числу элементов в списке
		while (temp != 0) //Пока не выполнен признак прохода по всему списку
		{

			cout << "\nНомер кошелька: " << tempHead->number << endl;
			cout << "Владелец кошелька: " << tempHead->owner << endl;
			cout << "Сумма в кошельке: " << tempHead->summ << endl;
			cout << "Банкноты: " << endl;

			for (int i = 0; i < 9; i++){
				cout << "Номинал: " << i + 1 << " Количество: " << tempHead->banknotes[i] << endl;
			}
			cout << endl;

			tempHead = tempHead->Tail; //Указываем, что нужен следующий элемент
			temp--; //Один элемент считан, значит осталось на один меньше
		}
		delete tempHead;
	}


	void ChangeBanknotes(int nominal, int count){ // Смена количества банкнот. Принимает номинал купюры и количество.

		if (nominal > 8 || nominal < 0){
			throw invalid_argument("Номинал не может быть больше 8 или меньше 0");
		}

		if (count < 0){
			throw invalid_argument("Количество купюр не может быть отрицательно");
		}

		this->banknotes[nominal] = count;
		this->computeTotalSumm(); // Пересчитываем сумму
	}

	void ShowAllFields(int k){ 

		Purse *tempHead = this->Tail; //Указываем на голову

		int temp = Instances; 
		while (true) //Пока не выполнен признак прохода по всему списку
		{
			if (tempHead->number==k)
			{
				break;
			}
			tempHead = tempHead->Tail; //Указываем, что нужен следующий элемент
			temp--; //Один элемент считан, значит осталось на один меньше
		}
		cout << "\nНомер кошелька: " << tempHead->number << endl;
		cout << "Владелец кошелька: " << tempHead->owner << endl;
		cout << "Сумма в кошельке: " << tempHead->summ << endl;
		cout << "Банкноты: " << endl;
		for (int i = 0; i < 9; i++)
		{
			cout << "Номинал: " << i + 1 << " Количество: " << tempHead->banknotes[i] << endl;
		}
		cout << endl;
		Purse::Number--;
	}



	void ShowRichFields(double k){ // Выводит все поля конкретного элемента

		Purse *tempHead = this->Tail; //Указываем на голову

		int temp = Instances; //Временная переменная равная числу элементов в списке
		while (true) //Пока не выполнен признак прохода по всему списку
		{
			if (tempHead->summ >= k)
			{
				cout << "\nНомер кошелька: " << tempHead->number << endl;
				cout << "Владелец кошелька: " << tempHead->owner << endl;
				cout << "Сумма в кошельке: " << tempHead->summ << endl;
				cout << "Банкноты: " << endl;
				for (int i = 0; i < 9; i++)
				{
					cout << "Номинал: " << i + 1 << " Количество: " << tempHead->banknotes[i] << endl;
				}	
				
			}
			tempHead = tempHead->Tail; //Указываем, что нужен следующий элемент
			temp--; //Один элемент считан, значит осталось на один меньше
		}
		cout << endl;
//		Purse::Number--;
	}
	
static void ShowTotalSumm(){ // Выводит сумму на кошельках
		cout << "\nОбщая сумма во всех кошельках: " << Purse::TotalSumm << endl;
	}
};

// Инициализируем статические поля класса "кошелёк"
int Purse::Instances = 0;
int Purse::TotalSumm = 0;
int Purse::Number = 0;

int main()
{
	setlocale(LC_ALL, "Russian");
	int k = 0;
	cout << "\n ФОРМИРОВАНИЕ КОШЕЛЬКОВ.\n\n";
	cout << " Введите количество кошельков (не более 20шт): ";
	cin >> k;
		
	if ((0 < k) && (k < 20))
	{
		Purse BCE;
		for (int i = 1; i < k; i++)
		{
			BCE.Add();						
		}		
		k = 0;
		while (true)
		{
						
			system("CLS");
			cout << "\n МЕНЮ:\n\n";
			cout << " 1) Ручная смена количества выбранных купюр в выбранном кошельке;\n";
			cout << " 2) Вывод на экран всех полей выбранного кошелька;\n";
			cout << " 3) Вывод на экран суммы денег во всех кошельках;\n";
			cout << " 4) Добавить элемент списка;\n";
			cout << " 5) Удалить элемент списка;\n";
			cout << " 6) Вывод всего списка;\n";
			cout << " 7) Вывод всех кошельков с количеством денег больше выбранного;\n";
			cout << " 8) Выход;\n\n";
			cin >> k;
			if (k == 1)
			{
				cout << "Пока не сделано\n\n";
				system("pause");
			}
			if (k == 2)
			{		
				cout << " Введите ноомер № кошелька:";
				cin >> k;
				BCE.ShowAllFields(k);
				k = 2;
				system("pause");			
			}
			if (k == 3)
			{
				BCE.ShowTotalSumm();
				system("pause");
			}
			if (k == 4)
			{
				cout << "Пока не сделано\n\n";
				system("pause");

			}
			if (k == 5)
			{
				cout << "Пока не сделано\n\n";
				system("pause");
			}
			if (k == 6)
			{
				BCE.Show();
				system("pause");
			}
			if (k == 7)
			{
				double b = 0;
				cout << " Введите сумму для выборки:";
				cin >> b;
				BCE.ShowRichFields(b);
				system("pause");
			}
			if (k == 8)
			{
				break;
			}
		}
	}
	else
	{
		cout << "Неверное кол-во кошельков\n\n";
		system("pause");
	}
			

	system("PAUSE");
	return 0;
}



ura_111 вне форума Ответить с цитированием
Старый 24.05.2016, 14:55   #34
verdant322
Пользователь
 
Регистрация: 22.05.2016
Сообщений: 26
По умолчанию

Извини на парах задержали.
неплохо сделал
verdant322 вне форума Ответить с цитированием
Старый 24.05.2016, 15:09   #35
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Поиграйся с программой, а пока она не доделанная - поэтому что-то будет работать, что-то нет.

Например: сразу выбор "Пунк меню 2" работает адекватно, а после Пункта (например 4) - программа вылетает.


Я решил, что посижу над ней еще вечерок (может два).

На сегодня все.

Следующий сеанс связи завтра в 14:00 (по Москве).
ura_111 вне форума Ответить с цитированием
Старый 24.05.2016, 15:14   #36
verdant322
Пользователь
 
Регистрация: 22.05.2016
Сообщений: 26
По умолчанию

хорошо
verdant322 вне форума Ответить с цитированием
Старый 25.05.2016, 14:01   #37
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Ты на форуме?
ura_111 вне форума Ответить с цитированием
Старый 25.05.2016, 14:12   #38
verdant322
Пользователь
 
Регистрация: 22.05.2016
Сообщений: 26
По умолчанию

тут я
verdant322 вне форума Ответить с цитированием
Старый 25.05.2016, 14:14   #39
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

verdant322 и ura_111, хватит в чат играться. Але, ты на форуме, тут я и прочее. Это флуд и буду карточками награждать
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.05.2016, 14:26   #40
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Что то на нас ругаются.


В принципе я программу сделал. Но я её особо не тестировал на ошибки.

verdant322 нужно программу протестировать. Тестируй все-все-все-все режимы и в разных комбинациях.

Ты умеешь компилировать программы (получать *.exe файлы)?

Осталось не выяснено: я сделал 10 публичных методов (см. фотографию), а
в задании написано 7-м. Разница вышла из-за реализации "списка".
(не знаю может лучше было у твоего преподавателя спросить сначало)
Ещё не понятно в задании "Вывод всего списка" " Если список круговой, должна быть возможность вывести на экран полный список, начиная с любого экземпляра." - сделал одним пунктом. Может ещё что то не помню.

Кстате ты смотрел вчера программу?

Сейчас пишет, что у Вас 12000 слов в программе, а нужно макс. 8000
ura_111 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
c# лабораторная nikitaivanov Фриланс 1 26.05.2012 15:05
лабораторная за $$$ djendalf Фриланс 0 26.12.2011 22:41
Лабораторная по C++ Mr.Voragus001 Помощь студентам 0 10.12.2011 13:02
Лабораторная asya92 Помощь студентам 4 20.12.2010 18:52
C# лабораторная Tase4ka Помощь студентам 1 09.12.2010 03:51