Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный ХОСТИНГ на базе Linux x64 и Windows x64

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Лучшие эксперты по данной тематике

Асмик Гаряка
Статус: Академик
Рейтинг: 8743
∙ повысить рейтинг »
Коцюрбенко Алексей aka Жерар
Статус: Профессор
Рейтинг: 3101
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 2589
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И СОФТ / Программирование / C/C++

Номер выпуска:1704
Дата выхода:04.12.2011, 03:00
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:281 / 164
Вопросов / ответов:3 / 4

Консультация # 184595: Здравствуйте! У меня возникли сложности с таким вопросом: 1. Разработать класс «игральные кости» в соответствии со следующим заданием: Состояние класса – Массив описывается состояниями («Очками лицевой стороны») определенного числа костей («кубиков») в группе. Значения состояний получаются с помощью генератора случайных чисел. Память по...


Консультация # 184597: Здравствуйте! У меня возникли сложности с таким вопросом: 1. Указать, чему будет равно значение переменной n в результате выполнения следующего фрагмента программы: int n = 3, k = 5; while (n != k) { n = (n * 2) % 11; k = (k * 7) % 11; } Значение n равно 2. Значение n равно 3. Значени...
Консультация # 184599: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужно написать программу. Вот текст задания: Нужно ввести дату в формате ДД.ММ. Определить и вывести по этой дате на экран день недели для текущего года Помогите пожалуйста....Заранее спасибо!...

Консультация # 184595:

Здравствуйте! У меня возникли сложности с таким вопросом:
1. Разработать класс «игральные кости» в соответствии со следующим заданием:
Состояние класса –
Массив описывается состояниями («Очками лицевой стороны») определенного числа костей («кубиков») в группе. Значения состояний получаются с помощью генератора случайных чисел. Память под массив состояний костей выделяется статически, во время компиляции, и задается массивом фиксированного размера.
Протокол класса –
Определяет возможности создания и инициализации экземпляров класса и правила их использования (методы класса).
Предусмотреть следующие возможности:
∙ Пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчанию;
∙ Создание экземпляров класса с инициализацией количеством костей, которые заполняются случайными значениями;
∙ Создание экземпляров класса с инициализацией количеством и массивом (тип int) начальных значений;
∙ Вывод экземпляров класса ( (*) с псевдографического рисунка) в выходной поток (с помощью перегруженного оператора <<);
∙ Выполнение операции «бросить кости» (получение новых значений всех костей с помощью генератора случайных чисел);
∙ Добавить кость к группе (с помощью перегруженного оператора +=);
∙ Изъять из группы определенную кость (все кости), если она есть в группе (с помощью перегруженного оператора -=);
∙ Поулчить очки кости в группе по её номеру (с помощью перегруженного оператора [ ] );
∙ Подсчитать сумму очков в группе костей;
∙ Проверить «совпадения» (нет/есть) очков на костях группы.
2. Проектирование класса рекомендуется начать с представления состояния класса, учитывающего заданные операции, а затем реализации конструкторов и перегруженного оператора вывода. Для отладки исчерпывающего тестирования других методов разработанного класса реализовать диалоговую программу, которая позволяет вводить параметры, отлаживаемых методов. Для обработки ошибочных ситуаций и спользовать механизм исключительных ситуаций.
3. Повторить разработку класса при условии, что память под массив необходимой длины выделяется динамически, во время выолнения программы (с помощью оператор new; память задается указателем на int в состоянии класса).
Дополнить интерфейс класса следуюшими возможностями:
∙ Создание экземпляра класса с его инициализацией другим экземпляром класса (копирующий конструктор);
∙ Переопределение экземпляра класса (с помощью перегруженного оператора присваивания).
4. Написать прикладную программу, использующую разработанный класс.

Дата отправки: 28.11.2011, 10:39
Вопрос задал: Балакин Артем Петрович (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Киселёва Алёна aka Verena (Профессор):

Здравствуйте, Балакин Артем Петрович!
Вот вариант решения Вашей задачи с динамической памятью. Кости хранятся в динамическом массиве целых чисел, значения генерируются через rand. Сам код класса в приложении, а вот пример того, как его вызывать:

Код :
   #include <conio.h>
    #include "CBones.h"


	int _tmain(int argc, _TCHAR* argv[])
{ //пример
	CBones b (3);
	b+=1;
	cout << "+=1" << b;
	b-=2;
	cout << "-=2" << b;
	cout << "res=" << b.Result();
	b.Shuffle();
	cout << "sh" << b;
	cout << "b[1]" << b[1];
	_getch();
	return 0;
}


Тут особо и не о чем рассказывать, класс простой.
Проверено в VS 2010, с 2005 различий не будет. Будут вопросы, задавайте.
Удачи!

Приложение:

Консультировал: Киселёва Алёна aka Verena (Профессор)
Дата отправки: 02.12.2011, 15:01
Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 184597:

Здравствуйте! У меня возникли сложности с таким вопросом:
1. Указать, чему будет равно значение переменной n в результате выполнения следующего фрагмента программы:
int n = 3, k = 5;
while (n != k) {
n = (n * 2) % 11;
k = (k * 7) % 11;
}

Значение n равно 2.
Значение n равно 3.
Значение n равно 4.
Значение n равно 10.

2. Пусть описана структура
struct List {
struct List *next;
void *value;
};
и переменые
struct List e, *p;
int m;
Укажите все корректные выражения языка Си среди перечисленных ниже:
e = *p
m = *(int*) p->next->value
m = e->value
m = *(e.value)11


3. Пусть описана структура
struct Tree {
struct Tree *left;
struct Tree *right;
void *value;
};
и переменые
struct Tree *t1, *t2;
int m;
Укажите все корректные выражения языка Си среди перечисленных ниже:
t1 = t2
*t1 = *t2
t1 = t2->left
*t1 = t2->right
m = *(int*) t1->left->right->value

4. Пусть описана структура
struct Line {
int len;
char *str;
};
и переменые
struct Line s1, *s2;
int n; char c;
Укажите все корректные выражения языка Си среди перечисленных ниже:
s1 == *s2
s1 = *s2
n = s1.len
c = s2->str[2]

5. Пусть описан тип R2Vector, представляющий вектор на плоскости с вещественными координатами,
typedef struct {
double x;
double y;
} R2Vector;
также описаны три переменные u, v и w типа вектор и вещественная переменная s:
R2Vector u, v, w;
double s;
при этом переменная u содержат конкретный вектор единичной длины, а вектор v получается из u вращением на 30 градусов по часовой стрелке. Указать, чему будет приблизительно равно значение веществ енной переменной s в результате выполнения следующего фрагмента программы:
w.x = (-u.y); w.y = u.x;
s = v.x * w.x + v.y * w.y;

Значение s приблизительно равно 0.5.
Значение s приблизительно равно -0.5.
Значение s приблизительно равно 0.866 (корню из трех пополам).
Значение s приблизительно равно -0.866 (минус корню из трех пополам).


6. Пусть описан тип R2Vector, представляющий вектор на плоскости с вещественными координатами:
typedef struct {
double x;
double y;
} R2Vector;
также описаны три переменные u, v и w типа вектор и вещественная переменная s:
R2Vector u, v, w;
double s;
при этом переменная u содержат конкретный вектор единичной длины. Указать, чему будет приблизительно равно значение переменной s в результате выполнения следующего фрагмента программы:
v.x = (-u.y);
v.y = u.x;
w.x = u.x + v.x;
w.y = u.y + v.y;
s = sqrt(w.x * w.x + w.y * w.y);
(функция sqrt извлекает квадратный корень из вещественного числа).
Значение s приблизительно равно 1.
Значение s приблизительно равно 0.5.
Значение s приблизительно равно 1.41421 (корню из двух).
Значение s приблизительно равно 0.866 (корню из трех пополам).

Дата отправки: 28.11.2011, 14:09
Вопрос задал: Заречнева Вера Михайловна (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


Консультирует Коцюрбенко Алексей aka Жерар (Профессор):

Здравствуйте, Заречнева Вера Михайловна!

1. Переменные n, k будут пробегать следующие значения:

nk
35
62
13
210
44


В последнем случае n=k, что является условием выхода из цикла. Правильный ответ - Значение n равно 4.

2. Первые два выражения являются корректными. В третьем e содержит объект типа List, а не указатель на него, поэтому правильное обращение к элементу структуры - e.value. И в третьем, и в четвёртом выражении e.value является указателем на тип void, поэтому перед разыменовыванием для последующего присвоения переменной типа int необходимо преобразование к типу int*.

3. Корректны все выражения, кроме предпоследнего (< b>*t1 = t2->right), в котором делается попытка занесения в переменную типа Tree (разыменованный указатель t1) значения типа Tree* (неразыменованный указатель t2->right).

4. Корректны все выражения, кроме первого (s1 == *s2), в котором делается попытка сравнения двух переменных типа Line, для которого не переопределён оператор сравнения ==.

5. Вектор w получается из u вращением на 90º против часовой стрелки. Следовательно, s - скалярное произведение двух векторов единичной длины, угол между которыми равен 120º. Так как скалярное произведение векторов равно произведению их длин, умноженному на косинус угла между ними, а cos 120º = -1/2, то независимо от выбора вектора u правильным будет второй вариант ответа - Значение s приблизительно равно -0.5.

6. Аналогично предыдущему заданию, вектор v получается из u вращение м на 90º против часовой стрелки, то есть всегда u⊥v. Вектор w, очевидно, является суммой векторов u и v, и, в соответствии с правилом параллелограмма, он будет диагональю параллелограмма, построенного на векторах u и v. Так как эти вектора перепендикулрны и имеют единичную длину, то данный параллелограмм будет квадратом со стороной, равной единице, а его диагональ (вектор w) будет иметь длину √2. Переменной s как раз присваивается значение длины вектора w, поэтому правильным будет третий вариант ответа - Значение s приблизительно равно 1.41421 (корню из двух).

Консультировал: Коцюрбенко Алексей aka Жерар (Профессор)
Дата отправки: 28.11.2011, 16:14

5
Спасибо за пояснения.
-----
Дата оценки: 28.11.2011, 23:17

Рейтинг ответа:

НЕ одобряю 0 одобряю!

Консультация # 184599:

Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:

Нужно написать программу.
Вот текст задания:

Нужно ввести дату в формате ДД.ММ. Определить и вывести по этой дате на экран день недели для текущего года
Помогите пожалуйста....Заранее спасибо!

Дата отправки: 28.11.2011, 19:01
Вопрос задал: Посетитель - 349343 (Посетитель)
Всего ответов: 2
Страница онлайн-консультации »


Консультирует CradleA (Бакалавр):

Здравствуйте, Посетитель - 349343!

Предлагаю следующее решение

Код :

#include "stdafx.h"
	

//////////////////////////////////////////////////////
// Входные данные
//	year - год
//  month - месяц
//  d- день
//
//Выходные данные
// result - Результат — число от 0 до 6, где 0 — суббота, 1 — воскресенье, 2 — понедельник, 3 — вторник, 4 — среда, 5 — четверг, 6 — пятница
int day(int year,int month, int d)
{	
	int a=0;
	int y=0;
	int result=0;
	a=(14-month)/12 ; // вспомогательная переменная
	y=year-a; // определяются год и месяц с учётом поправки
	result=(7000+((d+y+y) / 4-y / 100+y / 400+(31*month) /12)) % 7 ; // получаем день недели 
	return result;// выдаем день недели
}



int _tmain(int argc, _TCHAR* argv[])
{
	int mm;
	int dd;
	int e=0;
// преобразование страки в int
	mm=int(argv[3]-'0')*10+int(argv[4]-'0')*10;
	dd=int(argv[0]-'0')*10+int(argv[1]-'0')*10;

	
	e=day(2011,mm,dd);
	//e=day(2011,11,29);// занчение для проверки
                printf("%d",e); // выод номера недели по возвращаемой функции
	return e;
}




Если Вам надо осуществить ввод с клавиатуры, пишите, реализую

В данном примере реализован ввод из командной строчки, выводит номер недели, если будут вопросы, пишите.

Консультировал: CradleA (Бакалавр)
Дата отправки: 29.11.2011, 12:08
Рейтинг ответа:

НЕ одобряю 0 одобряю!


Консультирует lamed (Академик):

Здравствуйте, Посетитель - 349343! Code::blocks/G++

Код :
/* 1.1.2011 - суббота */
#include <stdio.h>
#include <stdlib.h>
int main()
{
    enum {FIRST_DAY=6};
    enum sum_days
        {JAN=31, FEB=JAN+28, MAR=FEB+31, APR=MAR+30, MAY=APR+31, JUN=MAY+30,
         JUL=JUN+31, AUG=JUL+31, SEP=AUG+30, OCT=SEP+31, NOV=OCT+30};
    int month, day;
    int year_day, week_day;

    char s_date[6];

    system("chcp 1251 >nul");

    printf("Дата в формате dd.mm ");
    scanf("%s", s_date);

    day=(s_date[0]-'0')*10+(s_date[1]-'0');
    month=(s_date[3]-'0')*10+(s_date[4]-'0');

    switch (month)
    {
        case 1:
            year_day=day;
            break;
        case 2:
            year_day=day+JAN;
            break;
        case 3:
            year_day=day+FEB;
            break;
        case 4:
            year_day=day+MAR;
            break;
        case 5:
            year_day=day+APR;
            break;
        case 6:
            year_day=day+MAY;
            break;
        case 7:
            year_day=day+JUN;
            break;
        case 8:
            year_day=day+JUL;
            break;
        case 9:
            year_day=day+AUG;
            break;
        case 10:
            year_day=day+SEP;
            break;
        case 11:
            year_day=day+OCT;
            break;
        case 12:
            year_day=day+NOV;
            break;
        default:
            year_day=0;
            break;
    }
    week_day = (year_day+FIRST_DAY-1)%7;
    if (week_day==0)
        week_day=7;
    printf("Номер дня недели - %d\n", week_day);

    system("pause");
    return 0;
}

Если будут вопросы - обращайтесь в мини-форум.

Консультировал: lamed (Академик)
Дата отправки: 29.11.2011, 12:56
Рейтинг ответа:

НЕ одобряю +1 одобряю!


Оценить выпуск | Задать вопрос экспертам

главная страница  |  стать участником  |  получить консультацию
техническая поддержка  |  восстановить логин/пароль

Дорогой читатель!
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались. Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора - для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение. Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал, который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом. Заходите - у нас интересно!
МЫ РАБОТАЕМ ДЛЯ ВАС!



В избранное