Вопрос № 123978: Здравствуйте. Как в приложении на MS Visual C++ запустить таймер, определив для него время работы и выполнить опред. код по началу и завершению работы таймера?...Вопрос № 123985: Здраствуйте уважаемые эксперты !!!
Помогите мне пожалуйста со строками в C++:
1) Дана строка символов, состоящая из произвольного текста, слова разделены пробелами.
В каждом слове заменить первую букву на прописную ну или поменять размер...Вопрос № 123997: Что означает оператор ++x (не x++, а именно ++x)?
Поясните каждое из получающихся значений при выполнении следующего фрагмента программы:
Char *s=”ИНФОРМАТИКА”, *s1, y;
s1 = s;
y=*s1;
y=*s1++;
y=++*s1;
y=*++s1;
y...Вопрос № 124012: Здраствуйте.
Среда разработки BDS 2006.
В Edit1->Text становиться равным 0,0109999999999999,
если прибавить 0.0000000000000001 то всё в порядке.
Код в приложении.
Почему 0,0109999999999999?
И как ис...Вопрос № 124049: Здраствуйте уважаемые эксперты !!!
Загрузили кучей работ по C++, помогите мне пожалуйста c их решением :
1) Дана матрица размера M x N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, …). Вывод элементов производит...Вопрос № 124098: Дали задание "Разработать класс, моделирующий работу с комплексными числами. Членами класса должны быть длинна вектора и угол наклона к оси реальных значений комплексного числа. Перегрузите для данного класса операторы ввода вывода, сложения, вы...Вопрос № 124106:
здравствуйте уважаемые эксперты помогите пажалуста решить
Дана строка символов состояшая из произвольного текста слова разделены пробелами в каждом слове заменить первую букву на прописную...Вопрос № 124107: Здраствуйте Уважаемые эксперты,
помогите мне немножко разобратся с rand :)
У меня задача создать 2 матрицы [1,N] [N,1] N вводится с клавиатуры, а сами матрицы заполняются при помощи rand, в приложении написано, как я это зделал, но почемуто э...Вопрос № 124145: Здравствуйте, уважаемые специалисты! Очень сильно нужна ваша помощь в решении программ. По идее вроде бы все понятно но в тоже же время сделать не получается.
1. Написать программу для хранения в битовом поле информации о конфигурации компьютера....
Вопрос № 123.978
Здравствуйте. Как в приложении на MS Visual C++ запустить таймер, определив для него время работы и выполнить опред. код по началу и завершению работы таймера?
Отправлен: 20.02.2008, 09:00
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Сандров Алекс
Здравствуйте, Blackie!
Есть функция SetTimer(HWND hWnd, UINT uiEvent, UINT uiTimeout, TIMERPROC tmpFunc);
Эта функция вешает на окно hWnd, таймер с идетификатором uiEvent, который будет присылать в окно hWnd сообщение WM_TIMER каждые uiTimeout миллисекунд. При этом в wParam будет указан идентификатор uiEvent, чтоб отличать этот таймер от другого.
Если хэндл окна hWnd не указан (ну или нету окна, или не надо в окно) надо указать функцию tmpFunc вида
uiMsg тут всегда будет WM_TIMER прилетать, а dwTime - текущее системное время, hWnd - будет NULL, елси он не указан в SetTimer вместе с функцией tmpFunc как первый парметр.
...и просто засунуть её в SetTimer
SetTimer(0, 1, 1000, (TIMERPROC)tmpFunc)
через секунду в tmpProc будет вызвана системой с параметрами :
(NULL, WM_TIMER, 1, <current_time>)
Ответ отправил: Сандров Алекс (статус: 5-ый класс)
Ответ отправлен: 20.02.2008, 09:12 Оценка за ответ: 4 Комментарий оценки: Примерчик бы не помешал
Вопрос № 123.985
Здраствуйте уважаемые эксперты !!!
Помогите мне пожалуйста со строками в C++:
1) Дана строка символов, состоящая из произвольного текста, слова разделены пробелами.
В каждом слове заменить первую букву на прописную ну или поменять размер !!!
Отвечает: Терсков Сергей
Здравствуйте, Фидосеева Ольга Викторовна!
Вариант решения вашей задачи смотрите в приложении. Обрабатывается введенная строка. Разделители слов содержатся в переменной const string delimiters(" .,:; ").
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 20.02.2008, 09:57 Оценка за ответ: 5
Вопрос № 123.997
Что означает оператор ++x (не x++, а именно ++x)?
Поясните каждое из получающихся значений при выполнении следующего фрагмента программы:
Char *s=”ИНФОРМАТИКА”, *s1, y;
s1 = s;
y=*s1;
y=*s1++;
y=++*s1;
y=*++s1;
y=(*s1)++;
y=++(*s1);
Отправлен: 20.02.2008, 10:18
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Терсков Сергей
Здравствуйте, Blackie! ++x - это префиксный оператор инкремента. Т.е. Значение переменной будет инкрементировано перед этим выражением. Подробнее можете посмотреть здесь или здесь.
А второй вопрос лучше построчно разобрать. сhar *s=”ИНФОРМАТИКА”, *s1, y; - далее мы не сможем модифицировать значение строки ”ИНФОРМАТИКА”, т.к. память под нее никак не выделена. Нужно выделить память динамически или статически.
Например:
сhar s[12]=”ИНФОРМАТИКА”, *s1, y;
Далее:
s1 = s; // Указатель s1 указывает на начало строки s y=*s1; // Переменная y получает значение разыменованного указателя s1, т.е. 'И' y=*s1++; // Переменная y получает то же значение, указатель постфиксно инкрементируется y=++*s1; // Переменная y получает значение инкрементрованного разыменованного указателя s1. Т.е. 'О' y=*++s1; // Переменная y получает инкрементрова
нное значение разыменованного указателя s1. Т.е. 'Ф' y=(*s1)++; // Переменная y получает то же значение, значение разыменованного указателя s1 постфиксно инкрементируется y=++(*s1); // Переменная y получает дважды инкрементрованное значение разыменованного указателя s1. Т.е. 'Ц'
Значение исходной строки после всего этого "ИОЦОРМАТИКА".
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 20.02.2008, 10:52 Оценка за ответ: 5
Отвечает: Сандров Алекс
Здравствуйте, Blackie!
Здравствуйте, Blackie!
++х - это значит, что если используют в выражениях это, то сначала прибавляют 1, а потом берут значение.
то есть
а = х;
y = x++;
z = ++a;
то y != z
____________
s1 = s; // s1 указывает туда же, куда и указатель s, на строку ”ИНФОРМАТИКА”
y=*s1; // в y записали символ, который лежит по адресу s1 (*s1 - "разыменовали указатель") буква 'И'
y=*s1++; // разыменовать s1, присвоить к y, а потом прирастить указатель на 1 - s1 будет указывать на второй символ 'Н', а в y = 'И'
y=++*s1; // аксес виолэйшн. И вот почему, в данном случае. Если бы строка s1 была динамической, всё было бы ок. А так вот что: сначала разыменовывается указатель, потом то что получилось увеличивается на 1, результат пишется в y, и потом само разыменованное значение увеличивается на 1. А так как строка статическая - ошибка доступа к памяти... Иначе y = 'О', а s1 = 'ОФОРМАТИКА'
y=*++s1; //s1 приращается на 1, и потом разыменовывается; y='Ф' s1 = 'ФОРМАТИКА'
y=(*s1)++; // принудилеьно сначала разыменовывается значение по указателю (было там 'Ф')прописывается в y, а потом к нему прибаляется 1 = 'X',
в *s1 = 'Х', в y = 'Ф'
y=++(*s1); // сначала берётся символ, приращается на 1, а потом присваивается в y, в обоих местах = 'Ц'
s1 = 'ЦОРМАТИКА'
__________
есть классическая задачка на понимание:
x = 5;
y = ++x + ++x;
чему равен y?
ответ = 14, а х =7
разбор выражения:
1. первое слагаемое ++х - х становится равным 6
2. второе слагаемое ++х - х становится равным 7
3. 7 + 7 = 14
y = ++x + x++;
чему равен y? y = 12, а х = 7
разбор:
1. первое слагаемое ++х - х = 6
2. сумма у = х + х - у = 12
3. х++ - х = 7
Ответ отправил: Сандров Алекс (статус: 5-ый класс)
Ответ отправлен: 20.02.2008, 11:02 Оценка за ответ: 5
Отвечает: Garmash Dima
Здравствуйте, Blackie!
операторы ++x и x++ увеличиваю значение x на единицу с той разницей, что первое сначало увеличит раньше, чем возмет значение, а второе наоборот. т.е если x=0, то cout<<++x выведет 1, а cout<<x++ выведет 0, и приследующем выводе cout<<x выведет 1 в обоих случаях.
Давайте посмотрим действия в каждой строке.
Char *s=”ИНФОРМАТИКА”,*s1,y;//хочу заметить,чо char пишется с маленькой буквы и " английские
объявление инициализированой стрки s, указателя s1 на строку(символ), "содержащей мусор", и символ y.
s1 = s;
теперь s и s1 это одно и тоже.(обе равны и при изменении одного, изменяется второе)
y=*s1;
y равен первому символу строки s1, т.е. И
y=*s1++;
теперь s1=НФОРМАТИКА, y=И;т.е. y равен первому символу строки s1, т.е. И, и указатель стал указывать на второй символ в строке, и y равен первому символу строки s1. s еще никак не изменилась.
y=++*s1;
вызывает ошибку.способ убрать ошибку в приложении. первый символ строки s1 увеличивется на 1, и это значение присваевается y.s1=ОФОРМАТИКА, y=О, s=ИОФОРМАТИКА.
y=*++s1;
s1 начинается с Ф и равна ФОРМАТИКА, и y=Ф.строка s неизменилась.
y=(*s1)++;
y равна первому символу s1, и увеличивает первый символ на 1.y=Ф, s1=ХОРМАТИКА, s=ИОХОРМАТИКА
y=++(*s1);
тоже самое, что и y=++*s1. первый символ строки s1 увеличивется на 1, и это значение присваевается y. y=Ц, s1=ЦОРМАТИКА, s=ИОЦОРМАТИКА.
получаем :y=Ц, s1=ЦОРМАТИКА, s=ИОЦОРМАТИКА.
Приложение:
--------- Шизофрения это нормально
Ответ отправил: Garmash Dima (статус: 3-ий класс)
Ответ отправлен: 20.02.2008, 12:59 Оценка за ответ: 5
Отвечает: yatagan
Здравствуйте, Blackie!
при х++, создается временная переменная, которой присваивается значение х, послечего х увеличивается на 1, а возвращается сначение временной переменной, тоесть начальное значение х.
при ++х, х увеличивается на 1 и возвращается его новое значение.
тоесть последняя быстрее работает
y=*s1;= И
y=*s1++;=И
y=++*s1;=(Н+1) по таблице кодов ASCII
y=*++s1;=Ф
y=(*s1)++;=Ф
y=++(*s1);=О+1 по таблице ASCII
вроде так, удачи.
--------- Сало понад усе!
Ответ отправил: yatagan (статус: 5-ый класс)
Ответ отправлен: 20.02.2008, 19:30 Оценка за ответ: 5
Вопрос № 124.012
Здраствуйте.
Среда разработки BDS 2006.
В Edit1->Text становиться равным 0,0109999999999999,
если прибавить 0.0000000000000001 то всё в порядке.
Код в приложении.
Почему 0,0109999999999999?
И как исправить?
Спасибо.
Приложение:
Отправлен: 20.02.2008, 11:38
Вопрос задал: Yark1n9 (статус: 1-ый класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Хватов Сергей
Здравствуйте, Yark1n9!
Потому что вещественные числа представляются в компьютерах не вполне адекватно.
Во-первых, компьютеры нынче двоичные, и ни 1.1, ни 1.111 в форматах float, double, long double,.. - точно не представляются.
Во-вторых, точность double примерно 13 десятичных знаков. Вы же печатаете больше. Вот ошибка и набежала.
Бороться с этим сложно. Вы можете использовать long double, но всё равно рано или поздно вы на такое можете нарваться.
Единственный реальный метод - работать с целыми подходящей длины, а входящие данные нужным образом масштабировать в эти целые. Способ хлопотный и капризный, но приходится его использовать, причём не так редко, например в финансовых расчётах.
Ответ отправил: Хватов Сергей (статус: Практикант)
Ответ отправлен: 20.02.2008, 12:48 Оценка за ответ: 4 Комментарий оценки: а в консоли на cout коректное значение выводит!?
Вопрос № 124.049
Здраствуйте уважаемые эксперты !!!
Загрузили кучей работ по C++, помогите мне пожалуйста c их решением :
1) Дана матрица размера M x N. Вывести ее элементы, расположенные в строках с четными номерами (2, 4, …). Вывод элементов производить по строкам, условный оператор не использовать.
2) Дана квадратная матрица A порядка M (M — нечетное число). Начиная с элемента A1,1 и перемещаясь против часовой стрелки, вывести все ее элементы по спирали: первый столбец, последняя строка, последний столбец в обратном порядке, первая строка в обратном порядке, оставшиеся элементы второго столбца и т. д.; последним выводится центральный элемент матрицы.
3) Дана матрица размера M x N. В каждом столбце матрицы найти максимальный элемент.
4) Дана матрица размера M x N. Найти минимальный среди максимальных элементов ее столбцов.
5) Дана матрица размера M x N. Найти минимальный среди элементов тех строк, которые упорядочены либо по возрастанию, либо по убыванию. Если упорядоченные строки в матрице отсутствуют, то вывести 0.
6) Дана матрица размера M x N. Поменять местами столбец с номером N и первый из столбцов, содержащих только отрицательные элементы. Если требуемых столбцов нет, то вывести матрицу без изменений.
7) Дана матрица размера M x N и целое число K (1 Ј K Ј N). После столбца матрицы с номером K вставить столбец из единиц.
8) Дана квадратная матрица A порядка M. Зеркально отразить ее элементы относительно главной диагонали (при этом элементы главной диагонали останутся на прежнем месте, элемент A1,2 поменяется местами с A2,1, элемент A1,3 — с A3,1 и т. д.). Вспомогательную матрицу не использовать.
Отвечает: Попов А.С.
Здравствуйте, Фидосеева Ольга Викторовна!
В приложении решение 1,3,4 задачи
Приложение:
Ответ отправил: Попов А.С. (статус: 8-ой класс)
Ответ отправлен: 20.02.2008, 19:33 Оценка за ответ: 5
Отвечает: X-men
Здравствуйте, Фидосеева Ольга Викторовна!
А вот и остальные программы. Написаны на MS VC++ Express .NET
Приложение:
Ответ отправил: X-men (статус: 1-ый класс)
Ответ отправлен: 21.02.2008, 20:55
Вопрос № 124.098
Дали задание "Разработать класс, моделирующий работу с комплексными числами. Членами класса должны быть длинна вектора и угол наклона к оси реальных значений комплексного числа. Перегрузите для данного класса операторы ввода вывода, сложения, вычитания умножения, деления. Определить функцию преобразования комплексного числа в алгебраическую форму и его вывод."
ПОМОГИТЕ ДОПИСАТЬ.
Отвечает: Ross
Здравствуйте, Неня Николай Николаевич!
Код в приложении. Дописывать нужно было довольно много =), поэтому я решил переписать полностью.
P.S: Не забудьте удалить копирайт в начале файла.
Приложение:
--------- Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: Студент)
Ответ отправлен: 22.02.2008, 20:54
Вопрос № 124.106
здравствуйте уважаемые эксперты помогите пажалуста решить
Дана строка символов состояшая из произвольного текста слова разделены пробелами в каждом слове заменить первую букву на прописную
Отправлен: 20.02.2008, 20:19
Вопрос задал: Razum89 (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Verena
Здравствуйте, Razum89!
Задача совсем простая. вы не указали, можно ли пользоваться строковыми функциями или string-ом, ну, предположим, что нет. Предположим также, что строку можно брать статическую - Вы, опять же, об этом не пишете. Пусть строка не будет превышать 255 символов (+1 символ под символ конца строки) и пусть эту строку в начальном виде сохранять не нужно. Тогда решение может выглядеть, например, так, как в приложении. Просматриваем строку и заменяем каждый строчный символ, стоящий после пробела, на прописной. Из комментариев
всё, думаю, ясно.
Удачи!
Приложение:
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 20.02.2008, 22:04 Оценка за ответ: 5
Отвечает: Терсков Сергей
Здравствуйте, Razum89!
Идентичный вопрос №123985. Наверное оба от одного преподавателя. Код повторно привожу в приложении.
Приложение:
Ответ отправил: Терсков Сергей (статус: Практикант)
Ответ отправлен: 21.02.2008, 02:51 Оценка за ответ: 5
Вопрос № 124.107
Здраствуйте Уважаемые эксперты,
помогите мне немножко разобратся с rand :)
У меня задача создать 2 матрицы [1,N] [N,1] N вводится с клавиатуры, а сами матрицы заполняются при помощи rand, в приложении написано, как я это зделал, но почемуто этот ранд генерирует случайные числа в одной матрице, но элементы этих двух матриц совпадают, например так: если в первой матрице 1 2 3 4 5 то во второй тоже 1 2 3 4 5, подскажите как зделать чтобы числа в матрицах несовпадали.
Заранее спасибо.
С Уважением, Станислав.
Приложение:
Отправлен: 20.02.2008, 20:25
Вопрос задал: Станислав (статус: 1-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 5)
Отвечает: Verena
Здравствуйте, Станислав!
У Вас нет инициализации генератора случайных чисел. Если добавить в начало функции main, например, такое выражение:
srand ((unsigned int)time(NULL)); (необходимо подключить time.h)
то распределение получится приближённым к нормальному. Инициализация необходима в связи с алгоритмом генерации псевдослучайного числа.
Удачи!
--------- Эта история - не для истории, понимаешь?
Ответ отправила: Verena (статус: Студент)
Ответ отправлен: 20.02.2008, 20:52 Оценка за ответ: 5
Отвечает: Dr_Andrew
Здравствуйте, Станислав!
Функция rand генерирует псевдослучайные (всегда одинаковая последовательность чисел) числа: это удобно для отладки. Для того, чтобы генерировались по настоящему случайные числа, необходимо до использования rand использовать функцию srand, в качестве аргумента принимающую время, генерируемое таймером, что-то вроде:
#include <stdlib.h>
#include <time.h>
//...
srand(time(NULL));
//...
int i = rand() % 6 + 1;
Ответ отправил: Dr_Andrew (статус: 7-ой класс)
Ответ отправлен: 20.02.2008, 20:57 Оценка за ответ: 4
Отвечает: yatagan
Здравствуйте, Станислав!
с самого начала программы вызови srand(time(0));
удачи
--------- Сало понад усе!
Ответ отправил: yatagan (статус: 5-ый класс)
Ответ отправлен: 20.02.2008, 21:23 Оценка за ответ: 4
Отвечает: shayen
Здравствуйте, Станислав!
Всё дело в том что функция rand() работает используя в качестве начальной точки-точку определённую при написании алгоритма генератора случайных чисел, то есть какое-то постоянное число, что у вас и получается. Для того чтобы значения были разными необходимо задавать начальную точку генерации, это делается с помощью функции srand() которая устанавливает начальную точку генерации и использует следующий синтаксис
void srand(unsigned int start).
Начальную точку start можно задавать вручную, но проще воспользоваться функцией времени time() которая находится в библиотеке time.h и если её вызвать с параметром NULL то функция вернёт количество милисекунд прошедших с 1 января 1970 года. Пример в приложении.
Приложение:
Ответ отправил: shayen (статус: 3-ий класс)
Ответ отправлен: 20.02.2008, 21:39 Оценка за ответ: 4
Вопрос № 124.145
Здравствуйте, уважаемые специалисты! Очень сильно нужна ваша помощь в решении программ. По идее вроде бы все понятно но в тоже же время сделать не получается.
1. Написать программу для хранения в битовом поле информации о конфигурации компьютера. Например: Корпус AT – 0, ATX – 1; Видео на борту – 0, карта – 1 и так далее.
2. Дан массив целых чисел. Воспользовавшись указателями, поменяйте местами элементы массива с четными и нечетными индексами (т.е. те элементы массива, которые стоят на четных местах, поменяйте с элементами, которые стоят на нечетных местах).
3. Создать битовое поле для хранения времени (часы, минуты, секунды, миллисекунды). Написать функции для установки и получения времени в(из) битовое(-го) поле(-я).
Отправлен: 21.02.2008, 01:03
Вопрос задала: Lana-N (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: shayen
Здравствуйте, Lana-N!
В приложении программы компилированные в VS 2003
Приложение:
Ответ отправил: shayen (статус: 3-ий класс)
Ответ отправлен: 21.02.2008, 11:59 Оценка за ответ: 5