Все выпуски  

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


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

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

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

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

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

Номер выпуска:1706
Дата выхода:07.12.2011, 02:30
Администратор рассылки:Киселёва Алёна aka Verena (Профессор)
Подписчиков / экспертов:280 / 164
Вопросов / ответов:2 / 2

Консультация # 184638: Здравствуйте! У меня возникли сложности с таким вопросом: 1. В операционной системе MS Windows файл "tmp.dat" создается в результате выполнения следующего фрагмента программы: int a[3]; int i; FILE *f = fopen("tmp.dat", "wt"); a[0] = 1; a[1] = 10; a[2] = 100; for (i = 0; i < 3; ++i) {...


Консультация # 184641: Здравствуйте! Прошу помощи в следующем вопросе: Помогите решить задачу С++ в консольном виде, с коментариями Точка на экране в текстовом (или графическом режиме). Должны быть предоставлены возможности: ∙ высветить точку в определенном месте экрана определенным цветом; ∙ определить, видима ли точка в данный момент; ∙ получить координаты ...

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

Здравствуйте! У меня возникли сложности с таким вопросом:
1. В операционной системе MS Windows файл "tmp.dat" создается в результате выполнения следующего фрагмента программы:
int a[3]; int i;
FILE *f = fopen("tmp.dat", "wt");
a[0] = 1; a[1] = 10; a[2] = 100;
for (i = 0; i < 3; ++i) {
fprintf(f, "%d\n", a[i]);
}
fclose(f);
Чему равен размер файла "tmp.dat" в байтах?

2. Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "e2e4e7e5");
strcpy(a + 2, "e3");
strcpy(a + 6, "e6d2d4");
n = strlen(a);

Чему будет равно значение переменной n в результате выполнения этого фрагмента?

3. Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, " ;abcdefgh" + 5);
strcpy(a + 4, "1234");
n = strlen(a);
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

4. Рассмотрим следующий фрагмент программы:
#include <string.h>
. . .
int n;
char a[32];
strcpy(a, "e2e4");
strcpy(a + 5, "c7c5");
n = strlen(a);
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

5. Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "20e");
n = 0; i = 0;
while (a[i] != 0) {
n *= 16;
if ('a' <= a[i] && a[i] <= 'f') {
n += (a[i] - 'a') + 10;
} else if (isdigit(a[i])) {
n += a[i] - '0';
}
++i;
}
Чему будет равно знач ение переменной n в результате выполнения этого фрагмента?

6. Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "375e10");
n = 0; i = 0;
while (a[i] != 0) {
n *= 8;
if (isdigit(a[i]) && a[i] < '8') {
n += a[i] - '0';
} else {
break;
}
++i;
}
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

7. Рассмотрим следующий фрагмент программы:
#include <string.h>
#include <сtype.h>
. . .
int n, i;
char a[32];
strcpy(a, "11B");
n = 0; i = 0;
while (a[i] != 0) {
n *= 16;
if (isdigit(a[i])) {
n += a[i] - '0';
} else if ('A' <= a[i] && a[i] <= 'F') {
n += (a[i] - 'A') + 10;
}
++i;
}
Чему будет равно значение переменной n в результате выполнения этого фрагмента?

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


Консультирует Лысков Игорь Витальевич (Старший модератор):

Здравствуйте, Заречнева Вера Михайловна!
1. Будут последовательно записаны числа 1, 10, 100. После каждого пара 0x0d, 0x0a (возврат строки). Итого: 3+4+5 = 12 байт
2. a = "e2e3", n = 4 (после второго копирования строка усечется до 4 символов, третье копирует за нулем)
3. a = "fgh", n = 3 (сначала копируем последние 3 байта, последующее копирование происходит за нулем)
4. a = "e2e4", n = 4 (второе копирование за нулем, поэтому строка не меняется)
5. n = 20e16 = 526 (фрагмент преобразовывает hex-строку в hex-число)
6. n = 37508 = 7e816 = 2024 (фрагмент неправильно(!) преобразовывает восьмиричное число-строку в число.
По идее, задумывалось преобразовывать либо до конца строки, либо до первого символа-не цифры 0-7 (символ 'e')
Неправильность в том, что умножать на 8 надо не до проверки на восьмиричную цифру, а после.
7. n = 11b16 = 283 (фрагмент преобразовывает, ка к и пример 5, hex-строку в hex-число)
Оба примера 5 и 7 имеют ту же некорректность, что и №6!

Консультировал: Лысков Игорь Витальевич (Старший модератор)
Дата отправки: 01.12.2011, 03:05
Рейтинг ответа:

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

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

Здравствуйте! Прошу помощи в следующем вопросе: Помогите решить задачу С++ в консольном виде, с коментариями
Точка на экране в текстовом (или графическом режиме). Должны быть предоставлены возможности:
∙ высветить точку в определенном месте экрана определенным цветом;
∙ определить, видима ли точка в данный момент;
∙ получить координаты точки после поворота отрезка, соединяющего эту точку с началом координат, на заданный угол.
Описать класс и продемонстрировать его использование.

Дата отправки: 01.12.2011, 19:59
Вопрос задал: pavell (Посетитель)
Всего ответов: 1
Страница онлайн-консультации »


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

Здравствуйте, pavell!
Например, можно сделать так. Точка выводится в текстовом режиме точкой, цвет меняется как цвет текста консоли. Для поворота точки был применён рассмотренный здесь алгоритм (у нас как бы получается равнобедренный треугольник, одна вершина которого - начало координат, вторая - имеющаяся точка, и последняя - результирующая точка). Размер консоли принят за константу. Берётся не размер буфера, а именно размер окна. При желании, эти числа можно получить через winapi. Начало координат - приблизительно в центре консоли. Поскольку координаты точки - действительные числа, а в консоли мы можем отобразить только целые, отрисовка приблизительна.
Вот пример использования класса:

Код :
int main()
{
	Pixel p;
	p.Print ();
	getch();
	p.SetColor (red);
	p.SetCoordinates (1, 1);
	p.Rotate (90);
	p.Print();
	return 0;
}

Кстати, обратите внимание, поскольку на экране ось Y возрастает сверху вниз, а не снизу вверх, для сдвига по ней надо вычитать координату из координаты центра, а не наоборот.
Сам код класса в приложении. Проверено в VS 2005.
Удачи!

Приложение:

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

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


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

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

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



В избранное