Консультация # 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: Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос: Нужно написать программу. Вот текст задания: Нужно ввести дату в формате ДД.ММ. Определить и вывести по этой дате на экран день недели для текущего года Помогите пожалуйста....Заранее спасибо!...
Здравствуйте! У меня возникли сложности с таким вопросом: 1. Разработать класс «игральные кости» в соответствии со следующим заданием: Состояние класса – Массив описывается состояниями («Очками лицевой стороны») определенного числа костей («кубиков») в группе. Значения состояний получаются с помощью генератора случайных чисел. Память под массив состояний костей выделяется статически, во время компиляции, и задается массивом фиксированного размера. Протокол класса – Определяет возможности
создания и инициализации экземпляров класса и правила их использования (методы класса). Предусмотреть следующие возможности: ∙ Пустой конструктор для инициализации экземпляров и массивов экземпляров класса по умолчанию; ∙ Создание экземпляров класса с инициализацией количеством костей, которые заполняются случайными значениями; ∙ Создание экземпляров класса с инициализацией количеством и массивом (тип int) начальных значений; ∙ Вывод экземпляров класса (
(*) с псевдографического рисунка) в выходной поток (с помощью перегруженного оператора <<); ∙ Выполнение операции «бросить кости» (получение новых значений всех костей с помощью генератора случайных чисел); ∙ Добавить кость к группе (с помощью перегруженного оператора +=); ∙ Изъять из группы определенную кость (все кости), если она есть в группе (с помощью перегруженного оператора -=); ∙ Поулчить очки кости в группе по её номеру (с помощью перегруженного оператора [ ] ); ∙ Подсчитать сумму
очков в группе костей; ∙ Проверить «совпадения» (нет/есть) очков на костях группы. 2. Проектирование класса рекомендуется начать с представления состояния класса, учитывающего заданные операции, а затем реализации конструкторов и перегруженного оператора вывода. Для отладки исчерпывающего тестирования других методов разработанного класса реализовать диалоговую программу, которая позволяет вводить параметры, отлаживаемых методов. Для обработки ошибочных ситуаций и
спользовать механизм исключительных ситуаций. 3. Повторить разработку класса при условии, что память под массив необходимой длины выделяется динамически, во время выолнения программы (с помощью оператор new; память задается указателем на int в состоянии класса). Дополнить интерфейс класса следуюшими возможностями: ∙ Создание экземпляра класса с его инициализацией другим экземпляром класса (копирующий конструктор); ∙ Переопределение экземпляра класса (с помощью перегруженного оператора присваивания). 4. Написать
прикладную программу, использующую разработанный класс.
Здравствуйте, Балакин Артем Петрович! Вот вариант решения Вашей задачи с динамической памятью. Кости хранятся в динамическом массиве целых чисел, значения генерируются через rand. Сам код класса в приложении, а вот пример того, как его вызывать:
Здравствуйте! У меня возникли сложности с таким вопросом: 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 (корню из трех пополам).
1. Переменные n, k будут пробегать следующие значения:
n
k
3
5
6
2
1
3
2
10
4
4
В последнем случае 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 (корню из двух).
#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
Команда портала RFPRO.RU благодарит Вас за то, что Вы пользуетесь нашими услугами. Вы только что прочли очередной выпуск рассылки. Мы старались.
Пожалуйста, оцените его. Если совет помог Вам, если Вам понравился ответ, Вы можете поблагодарить автора -
для этого в каждом ответе есть специальные ссылки. Вы можете оставить отзыв о работе портале. Нам очень важно знать Ваше мнение.
Вы можете поближе познакомиться с жизнью портала, посетив наш форум, почитав журнал,
который издают наши эксперты. Если у Вас есть желание помочь людям, поделиться своими знаниями, Вы можете зарегистрироваться экспертом.
Заходите - у нас интересно!