ЛЮДИ, разбирающиеся в С++ ХЕЛП

kv31174

Пользователь
...
long double A[4][7][100 000]
тоесть 4 x 7 x 100 000 = 2 800 000 ячеек и 2 800 000 * 8 байт = 2 МБ
...
зы. толькочто создал A[120 000 000] ~ 114МБ, правда при компиляции не хватило озу и заскрипел swap
Чем ему не нравится A[4][7][1 000 000] ~ 26МБ ? (а в идеале надо на 260МБ)

2 800 000 * 8B / 1048576(1/M) = 21.36... MB
120 000 000 * 8B / 1048576(1/M) = 915.52... MB
28 000 000 * 8B / 1048576(1/M) = 213.62... MB
 

~VZ~

Пользователь
Всем доброго времени суток! Помогите пожалуйста решить задачку на C++ Builder 6. Саму прогу то я накидал,вот в методах класса запутался немного ...буду очень признателен!

задача -
Создайте класс, имитирующий работу биллинговой системы сотового оператора. Объектом
данного класса является лицевой счет абонента. Создайте 3 объекта класса. Полем класса
является баланс, на котором имеется изначальная сумма (стартовый баланс). Абонент может
расходовать деньги на SMS, голосовую связь и мобильный интернет. Реализуйте в классе методы
для уменьшения баланса (каждый из которых запрашивает, сколько и чего сделал абонент,
например, сколько он отправил СМС). Стоимость одного сообщения, одной минуты разговора и
одного мегабайта известны и заданы константно. В случае достижения нулевого баланса,
программа сообщает пользователю о невозможности предоставления услуги.

Код:
class Billing
{	   private:
float start;
public:
Billing():start(50)
{}
float calls,inet,sms;
void fillabonent()
{	   do
{	   cout <<"enter full time of calls (in minutes): ";
cin >> calls;
if (calls<0)
{	   cout <<"Invalid value, try again" <<endl;
}
}
while (calls<0);
do
{	   cout <<"enter number of sms: ";
cin >> sms;
if (sms<0)
{	   cout <<"Invalid value, try again" <<endl;
}
}
while(sms<0);
do
{	   cout <<"enter traffic (in mb): ";
cin >> inet;
if (inet<0)
{	   cout <<"Invalid value, try again" <<endl;
}
}
while (inet<0);
}
float zvonki(float a,float b,float c)
{	   float e;
e=start-((a*1.5)-(b*1.9)-(c*3.5));
return e;
}

};
int main(int argc, char* argv[])
{	   int p;
float a,b,c;
do
{	   Billing Abonent1;
cout <<"First Abonent"<<endl;
Abonent1.fillabonent();
a=Abonent1.zvonki(float calls,float sms,float inet);
cout <<"Balance: " << a;
if (a<=0)
{	   cout <<"Obsluzhivanie preostanovleno";
}
Billing Abonent2;
cout <<"Second Abonent"<<endl;
Abonent2.fillabonent();
b=Abonent2.zvonki(float calls,float sms,float inet);
cout <<"Balance: " << b;
if (b<=0)
{	   cout <<"Obsluzhivanie preostanovleno";
}
Billing Abonent3;
cout <<"Third Abonent"<<endl;
Abonent3.fillabonent();
c=Abonent3.zvonki(float calls,float sms,float inet);
cout <<"Balance: " << c;
if (c<=0)
{	   cout <<"Obsluzhivanie preostanovleno";
}
cout <<"Press 1 to continue, 0 to cancel: ";
cin >>p;
}
while (p!=0);
getch();
return 0;
}
 

sami

Местный
Всем доброго времени суток! Помогите пожалуйста решить задачку на C++ Builder 6. Саму прогу то я накидал,вот в методах класса запутался немного ...буду очень признателен!
Не уверен, что оказываю помощь, скорее это можно назвать "не смог пройти мимо".

Начну с критики формулировки задачи. Это шедевр! Не стоит передавать мою критику преподавателю, если это его формулировка. Может быть в качестве уточняющих вопросов...
задача -
Создайте класс, имитирующий работу биллинговой системы сотового оператора.
Биллинговые системы сотовых операторов достаточно громмоздки, что бы даже имитировать их работу одним лишь классом. Классов там должно быть предостаточно.
Объектом
данного класса является лицевой счет абонента.
На фразе "объектом данного класса" меня перемкнуло. Объект - это сущность, поведение которой определяется типом. Класс - это способ описания типа в языке C++.
Создайте 3 объекта класса.
Опять! Нет такого "объект класса". Если на то пошло, говорят "экземпляр класса", и "объект типа". Но это не всегда одно и то же.
Полем класса
является баланс, на котором имеется изначальная сумма (стартовый баланс).
Если буквоедничать до конца, то баланс не может являться полем. Поле оно само по себе поле. Это место в памяти. У поля есть тип. Поле некоторого типа может хранить величину баланса. Но не являться им.
Абонент может
расходовать деньги на SMS, голосовую связь и мобильный интернет.
До сих пор никакого Абонента не было. Это что, еще один класс? Но в условии сказано что класс должен быть один - лицевой счет абонента. В программировании нужна точность. Абонент и его счет - это не одно и то же.
Реализуйте в классе методы
для уменьшения баланса (каждый из которых запрашивает, сколько и чего сделал абонент,
например, сколько он отправил СМС).
Вот беда, единственное поле класса призвано хранить баланс на счете. Как же методы смогут отвечать на запрос о том сколько и чего сделал абонент? Может быть методам надо указать, сколько и чего сделал абонент, а эти методы бы соответственно уменьшили значение баланса? Мне кажется, что так было бы логичнее. Но я не берусь утверждать что такая формулировка устроит преподавателя.
Или речь о том, что метод запрашивает у пользователя сколько и чего он сделал? А кто решает, какой метод вызывать? Нужен ли такой класс в биллинге, если он будет ждать ввода от пользователя, блокируя работу биллинга?

Вижу, что код все-таки запрашивает у пользователя, а не у метода класса.
Стоимость одного сообщения, одной минуты разговора и
одного мегабайта известны и заданы константно. В случае достижения нулевого баланса,
программа сообщает пользователю о невозможности предоставления услуги.
Кто такой пользователь, откуда взялся, какова его роль в программе? Это не тот самый абонент, нет? Если это абонент, то какова вероятность что он сидит и смотрит в консоль биллинговой программы при отправке СМС? Наверное не он.
Обычно в биллинге стоимость услуги можно посчитать до достижения нулевого баланса лишь для SMS. По поводу всего остального типичный биллинг позволяет уйти в минуса, и лишь при получении очередной услуги отказывает. Но таки ладно, для тестового задания можно допустить что время звонка и объем трафика определены до оказания услуги.

Теперь о том, что не прояснено в формулировке.
Как правило, техническое задание содержит информацию о том, что программа должна сделать, как она поможет быть пользователю счастливым. Эта же содержит информацию о том, сколько объектов и какое поле у них должно быть. И совершенно не дает представление о том, как должна работать программа, какие данные принимать.

Вобщем, если писать программу буквально по заданию, то вряд ли что хорошего получится. Я бы не справился.

По поводу кода:
1) назвать класс Account (счет ведь)
2) вынести из класса любое взаимодействие с пользователем (ввод/вывод). Ваш класс никто в систему биллинга бы не вставил, т.к. биллинг прекратил бы работу и ждал бы ввода от пользователя. Это недопустимо для биллинга.
3) взаимодействие с пользователем перенести куда-нибудь. Можно в main, можно в специальный метод, который будет спрашивать, какое именно дейстиве собирается выполнить владелец аккаунта. (1-СМС, 2-трафик,...) После того как действие будет определено, запросить число СМС, объем трафика, время звонка в соответствии. И после этого вызывать соответствующий метод класса Account.
4) три экземпляра Account наверное надо таки завести, и спрашивать, какой именно экземпляр хочет что-либо сделать.
 

~VZ~

Пользователь
Не уверен, что оказываю помощь, скорее это можно назвать "не смог пройти мимо".

Начну с критики формулировки задачи. Это шедевр! Не стоит передавать мою критику преподавателю, если это его формулировка. Может быть в качестве уточняющих вопросов...

Биллинговые системы сотовых операторов достаточно громмоздки, что бы даже имитировать их работу одним лишь классом. Классов там должно быть предостаточно.

На фразе "объектом данного класса" меня перемкнуло. Объект - это сущность, поведение которой определяется типом. Класс - это способ описания типа в языке C++.

Опять! Нет такого "объект класса". Если на то пошло, говорят "экземпляр класса", и "объект типа". Но это не всегда одно и то же.

Если буквоедничать до конца, то баланс не может являться полем. Поле оно само по себе поле. Это место в памяти. У поля есть тип. Поле некоторого типа может хранить величину баланса. Но не являться им.

До сих пор никакого Абонента не было. Это что, еще один класс? Но в условии сказано что класс должен быть один - лицевой счет абонента. В программировании нужна точность. Абонент и его счет - это не одно и то же.

Вот беда, единственное поле класса призвано хранить баланс на счете. Как же методы смогут отвечать на запрос о том сколько и чего сделал абонент? Может быть методам надо указать, сколько и чего сделал абонент, а эти методы бы соответственно уменьшили значение баланса? Мне кажется, что так было бы логичнее. Но я не берусь утверждать что такая формулировка устроит преподавателя.
Или речь о том, что метод запрашивает у пользователя сколько и чего он сделал? А кто решает, какой метод вызывать? Нужен ли такой класс в биллинге, если он будет ждать ввода от пользователя, блокируя работу биллинга?

Вижу, что код все-таки запрашивает у пользователя, а не у метода класса.

Кто такой пользователь, откуда взялся, какова его роль в программе? Это не тот самый абонент, нет? Если это абонент, то какова вероятность что он сидит и смотрит в консоль биллинговой программы при отправке СМС? Наверное не он.
Обычно в биллинге стоимость услуги можно посчитать до достижения нулевого баланса лишь для SMS. По поводу всего остального типичный биллинг позволяет уйти в минуса, и лишь при получении очередной услуги отказывает. Но таки ладно, для тестового задания можно допустить что время звонка и объем трафика определены до оказания услуги.

Теперь о том, что не прояснено в формулировке.
Как правило, техническое задание содержит информацию о том, что программа должна сделать, как она поможет быть пользователю счастливым. Эта же содержит информацию о том, сколько объектов и какое поле у них должно быть. И совершенно не дает представление о том, как должна работать программа, какие данные принимать.

Вобщем, если писать программу буквально по заданию, то вряд ли что хорошего получится. Я бы не справился.

По поводу кода:
1) назвать класс Account (счет ведь)
2) вынести из класса любое взаимодействие с пользователем (ввод/вывод). Ваш класс никто в систему биллинга бы не вставил, т.к. биллинг прекратил бы работу и ждал бы ввода от пользователя. Это недопустимо для биллинга.
3) взаимодействие с пользователем перенести куда-нибудь. Можно в main, можно в специальный метод, который будет спрашивать, какое именно дейстиве собирается выполнить владелец аккаунта. (1-СМС, 2-трафик,...) После того как действие будет определено, запросить число СМС, объем трафика, время звонка в соответствии. И после этого вызывать соответствующий метод класса Account.
4) три экземпляра Account наверное надо таки завести, и спрашивать, какой именно экземпляр хочет что-либо сделать.
спасибо ,буду думать даальше))
 

kv31174

Пользователь
Всем доброго времени суток! Помогите пожалуйста решить задачку на C++ Builder 6. Саму прогу то я накидал,вот в методах класса запутался немного ...буду очень признателен!

задача -
Создайте класс, имитирующий работу биллинговой системы сотового оператора. Объектом
данного класса является лицевой счет абонента. Создайте 3 объекта класса. Полем класса
является баланс, на котором имеется изначальная сумма (стартовый баланс). Абонент может
расходовать деньги на SMS, голосовую связь и мобильный интернет. Реализуйте в классе методы
для уменьшения баланса (каждый из которых запрашивает, сколько и чего сделал абонент,
например, сколько он отправил СМС). Стоимость одного сообщения, одной минуты разговора и
одного мегабайта известны и заданы константно. В случае достижения нулевого баланса,
программа сообщает пользователю о невозможности предоставления услуги.


Код:
#include <iostream>
#include <string>

using namespace std;

class Billing
{
private:
float start, toAcc;
int i;
string s;
public:
float calls, inet, sms;
Billing():start(50){
calls = 0;
inet = 0;
sms = 0;
}

void fillAbonent(int number)
{ 
cout << endl << "Abonent № " << number << endl;
while (start > 0){
cout <<"Balance: " << start << endl;
cout <<"Select the action\n(1 - to call, \n2 - to send sms, "
"\n3 - to get online,\n0 - to quit): ";
cin >> s;
i = atoi(s.c_str());

if (i < 0 || i > 3){
cout <<"Invalid value, try again" <<endl;
}

switch(i){
case 0:
return;
case 1:
toCalls();
break;
case 2:
toSms();
break;
case 3:
toInet();
break;
}
}
cout <<"Balance: " << start << endl << "Service suspended" << endl;
}

void toCalls(){
do{
cout <<"Enter full time of calls (in minutes): ";
cin >> s;
calls = atoi(s.c_str());
if (calls<0){ 
cout <<"Invalid value, try again" <<endl;
}
}
while (calls<0);

cout << "Wrote off: " << toAccount(calls, 0, 0) << endl << endl;
}

void toSms(){
do{
cout <<"Enter number of sms: ";
cin >> s;
sms = atoi(s.c_str());
if (sms<0){
cout <<"Invalid value, try again" <<endl;
}
}
while(sms<0);

cout << "Wrote off: " << toAccount(0, sms, 0) << endl << endl;
}

void toInet(){
do
{       
cout <<"Enter traffic (in mb): ";
cin >> s;
inet = atoi(s.c_str());
if (inet<0)
{       
cout <<"Invalid value, try again" << endl;
}
}
while (inet<0);
cout << "Wrote off: " << toAccount(0, 0, inet) << endl << endl;
}

float toAccount(float calls,float sms,float inet){
toAcc = ((calls*1.5)+(sms*1.9)+(inet*3.5));
start -= toAcc;
return toAcc;
}
};

int main(int argc, char* argv[])
{
string str;
int i, abonentsQuantity = 3;
Billing Abonent[abonentsQuantity];
do
{    
cout << endl <<"Select abonent(1, 2, 3 or 0 - to exit): ";
cin >> str;
i = atoi(str.c_str());
if(i > 0 && i <= abonentsQuantity){
Abonent[i - 1].fillAbonent(i);
}else
if(i == 0)
return 0;
else
cout << "Invalid value, try again" << endl;
}
while (true); 
}

Решил сделать получше.
 

sami

Местный
А трёп Бендера оставь вне круга своих интересов.
Совершенно согласен. Тем, чья цель "сдать и забыть", нужно предоставить решение адекватное задаче в глазах преподавателя. Ни в коем случае не вступать в полемику с преподавателем и боже упаси с дядьками на форуме, которые преподавателями не являются. Даже мысль о неадекватности постановки задачи может привести к осложнениям ситуации.
Бендер же просто воспользовался ситуацией что бы выпендрить свое мнение о задании. И предупредил, что оно может быть деструктивным.
 

~VZ~

Пользователь
Народ! Помогите пожалст опять ) очередная задача,на этот раз вообще нет представления об её решении ..

В прямоугольной таблице MxN (в каждой клетке записано некоторое число) в начале игрок находится в левой верхней клетке. За один ход ему разрешается перемещаться в соседнюю клетку либо вправо, либо вниз (влево и вверх перемещаться заперещено). При проходе через клетку с игрока берут столько у.е., какое число записано в этой клетке (деньги берут также за первую и последнюю клетку пути).
Требуется найти минимальную сумму у.е., заплатив которую игрок сможет попасть в правый нижний угол.
Во входном файле INPUT.TXT задано два числа N и M – размеры таблицы (1 < N,M < 20). Затем идет N строк по M чисел в каждой – числа, которые будут в таблице (числа от 1 до 99).
В выходной файл OUTPUT.TXT вывести минимальную сумму, потратив которую, можно попасть в правый нижний угол.

INPUT.TXT OUTPUT.TXT
1 3 4 8 8
1 1 1 1
5 2 2 100
9 4 2 1
 

tomcat

far away...
Команда форума
Мульти модератор
Задача сугубо алгоритмическая и с++ тут ни при чём. Если втупую, то решается методом пузырька (это сравнение "веса" прохода в данном случае с предыдущими) путём пересчёта всех возможных комбинаций. Но даже при таком подходе на вашем примере процесс займёт меньше секунды.
 

sami

Местный
Народ! Помогите пожалст опять ) очередная задача,на этот раз вообще нет представления об её решении ..
Если это задача на тему дискретной оптимизации, то возможно лучшим вариантом решения будет применение соответствующего метода. Но если ничего такого не проходили, то выбор минимального значения из длин всех возможных маршрутов - самое такое лобовое решение, годное для малых размеров матрицы.

Так как направления передвижения в задаче ограничены, то маршрут будет заведомо ациклическим и по числу шагов не будет превосходить сумму длин сторон матрицы (K = M + N). Число возможных маршрутов можно грубо оценить сверху как 2 ^ (M+N). На самом деле меньше.
 

Santi

Пользователь
Приветствую! Может кто помочь с курсовой работой? ЛС
 

Кота-Кота

Новичок
Ребят, дайте ссыль пожалуйста на С++ для 7й винды, чтоб не было других языков программирования на ней, чтоб все стандартно было)
 

Кота-Кота

Новичок
Ребят, за 300 рублей кто сможет мне поставить норм С++ на семерку и объяснить азы в проге(в плане интерфейса)?
Приду со своим ноутбуком, могу с пивком)) Звонить сюда 89227583737 или писать сюда http://vk.com/id40023245
 

Mike22

Местный
Гм.
Если для вас является проблемой установка программного обеспечения, настройка и подготовка среды, окружения, компилятора, то может вам и не надо С++ ?
Я бы советовал вам самостоятельно решить эту задачу. Иначе как вы работать будете?
 

Кота-Кота

Новичок
Гм.
Если для вас является проблемой установка программного обеспечения, настройка и подготовка среды, окружения, компилятора, то может вам и не надо С++ ?
Я бы советовал вам самостоятельно решить эту задачу. Иначе как вы работать будете?
Вот для чего это мне щас писать? Мне побыстрее все нужно настроить, чтобы я мог спокойно выполнять лабораторные.
 

Кота-Кота

Новичок
#include <iostream.h>
#include <conio.h>
class massive
{ public: int mass[10];
void input();//ввод массива
void output();//вывод массива
void sred();//вычисление математического ожидания случайных чисел и вычисление дисперсии случайных чисел
};
int n;

void massive::input()
{
int i;
cout<<"Введите массив:";
for(i=0; i<10; i++)
cin>>mass;
}

void massive::eek:utput()
{ int i;
cout<<"Вывод:\n";
for(i=0; i<10; i++)
cout<<mass<<" ";
}

void massive::sred()
{
float sred;
int sum=0,i,d;
cout<<"\n";
for(i=0; i<10; i++)
sum=sum+mass;
sred=float(sum)/10;
cout<<"Среднее арифметическое массива ="<<sred<<"\n";
cout<<"Отклонение от среднего арифметического";
for(i=0; i<10; i++)
{d=sred-mass;
cout<<"\n mass="<<mass<<" d="<<d;
}
}
void main()
{
clrscr();
massive obj;
obj.input();
obj.output();
obj.sred();
getch();
}
______________________
проверьте кто нибудь у себя, может просто программа неправильно написана
 

tomcat

far away...
Команда форума
Мульти модератор
Судя по наличию функции clrscr(), нужен древний Borland c.
 

Mike22

Местный
Если человеку С++ нужен только чтобы сдать зачёты и забыть, то ему лучше всего к своему преподавателю обращаться со всеми вопросами.
А то насоветуем ему все последние веяния, а преподаватель такого не знает. :)
 
Сверху