Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

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


Новое направление Портала RusFAQ.ru:
MosHoster.ru - Профессиональный хостинг

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

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Выпуск № 1072
от 06.06.2008, 07:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 487, Экспертов: 39
В номере:Вопросов: 14, Ответов: 17

Нам важно Ваше мнение об этой рассылке.
Оценить этот выпуск рассылки >>


Вопрос № 138379: Здраствуйте, уважаемые эксперты. Как реализовать на С++ проверку типов данных... нужно ввести число, но при вводе вместо чиста - символа (или нескольких символов) нужно вывести сообщение об ошибке... //Использую string, поэтому прив...
Вопрос № 138404: Здравствуйте. Генерирую случ. число следующим образом: srand((unsigned)time(NULL)); ch=(((double)rand()*0xFFFFFFFF); ch - переменная типа int Две копии этой программы на разных компах, запущенные вручную, выдают в результате...
Вопрос № 138480: Здравствуйте! Решал задачу на каком то стареньком компиляторе и программа нормально работала, но только перекинул код на MS Visual Studio 2005 - возникають ошибки. Так как VS у меня немецкий, то я ничего не понял, но думаю, что проблема именно в имен...
Вопрос № 138496: Здравствуйте shayen! Вы мне очень помогли ответом на вопрос № 138480, суть проблемы понятна, просто реально нет времени и я прошу Вас подкоректировать ещё две программки: следующая в следующем вопросе! Заранее спасибо!...
Вопрос № 138574: Помогите с сортировкой. Есть структура struct film { char nazv[NAZV]; char zanr[ZANR]; char rezis[REZIS]; int god; }; данные структуры хранятся в файле (тип БД) Требуется отсортировать данные по названию...
Вопрос № 138588: Здравствуйте! Напишыте пожалуйста какую играет роль "extern". Спасибо заранее!...
Вопрос № 138599: Дан одномерный массив А, состоящий из N элементов. Найти первый и последний положительные элементы массива и подсчитать количество элементов, заключенных между ними...
Вопрос № 138613: Уважаемые эксперты! В программе запускаются 2 процесса: вывод прямоугольников и треугольников. Подскажите, как и какие строки в программе нужно исправить, чтобы выводился закрашенный прямоугольник и прямые линии. В приложении фрагмент для вы...
Вопрос № 138615: Подскажите, как определить класс трехмерного вектора (3 вещественных числа)...
Вопрос № 138672: Сколько данная структура занимает места в оперативке ?...
Вопрос № 138692: Здравствуйте! Есть такой думаю простой для Вас вопрос: К какому типу (класу) относиться задача на написание программы (на С++) для создания, редактирования, и вывод отредактированного массива?. Это нужно для ответа в отчёте Заранее спаси...
Вопрос № 138732: Здравствуйте уважаемые эксперты! Помогите, пожалуйста, разобоаться с такой задачёй: необходимо подсчитать количество слов в строке, состоящих только из цифр....
Вопрос № 138762: Мне нужно добавлять один символ где-то посередине строки Что быстрее будет работать: 1.сдвиг с помощью movmem, memmov и т.п. 2.сдвиг с помощью strcpy Что удобнее? -------------------- Жду ваших профессиональных мнений:)...
Вопрос № 138808: Здравствуйте! Не могу разобраться, в большинстве книг по С++, с наведеним примеров програм, используються функции: int main(int argc, char* argv[]). Напишыте пожалуйста, что в даном случае значит "argc", char* <br...

Вопрос № 138.379
Здраствуйте, уважаемые эксперты.
Как реализовать на С++ проверку типов данных...

нужно ввести число, но при вводе вместо чиста - символа (или нескольких символов) нужно вывести сообщение об ошибке...
//Использую string, поэтому приведенный ниже код не подходит

Приложение:

Отправлен: 28.05.2008, 22:34
Вопрос задал: UserCJ (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Хватов Сергей
Здравствуйте, UserCJ!

Если в библиотеке есть strtod() или strtol() (в зависимости от нужного вам типа) - используйте их.
Но лучше сначала вычитывать строку целиком, а потом её разбирать (даже с участиеи istringstream)- недозагруженные остатки введённой строки (в первую очередь оставшийся там eol) могут помешать в дальнейшем.

Приложение:

Ответ отправил: Хватов Сергей (статус: Практикант)
Ответ отправлен: 29.05.2008, 08:34
Оценка за ответ: 5


Вопрос № 138.404
Здравствуйте. Генерирую случ. число следующим образом:
srand((unsigned)time(NULL));
ch=(((double)rand()*0xFFFFFFFF);

ch - переменная типа int

Две копии этой программы на разных компах, запущенные вручную, выдают в результате одно и то же число каждый раз. Как бороться?
Отправлен: 29.05.2008, 01:37
Вопрос задал: Blackie (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Blackie!
Это происходит из-за приведения типов и rand здесь ни при чем. Попробуйте взять любое число типа double отличное от нуля и поставьте его вместо rand - результат будет тем же. По стандарту размер типа int - 4 байта (32 бита) при этом один бит отводится на знак, если тип знаковый. Интервал int - (–2147483648; 2147483647)
Тип результата выражения ((double)rand()*0xFFFFFFFF); - double, причем превышающий предел типа int. Соответственно после приведения типов возникнет число –2147483648.
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 29.05.2008, 02:57


Вопрос № 138.480
Здравствуйте! Решал задачу на каком то стареньком компиляторе и программа нормально работала, но только перекинул код на MS Visual Studio 2005 - возникають ошибки. Так как VS у меня немецкий, то я ничего не понял, но думаю, что проблема именно в именах заголовочных файлов. Посмотрите пожалуйста. Заранее спасибо!

Приложение:

Отправлен: 29.05.2008, 13:42
Вопрос задал: Sashka (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: Сандров Алекс
Здравствуйте, Sashka!

С именами заголовочных файлов проблем быть не должно.
Но есть различия в языке, например переменная, объявленная внутри цикла:
for(int i=0....
после цикла в VS2005 будет не видна, в отличие от VC6

Не совсем по теме:
- MS VC2005 Express бесплатна и позволяет делать Win32API проекты
- www.translate.ru умеет переводить с немецкого
Ответ отправил: Сандров Алекс (статус: 8-ой класс)
Ответ отправлен: 29.05.2008, 13:50
Оценка за ответ: 5

Отвечает: shayen
Здравствуйте, Sashka!
Вы правы в вашем случае имеет место ошибка в заголовочном файле.Несколько лет после появления языка С++ он использовал тот же стиль работы с заголовками что и язык С,в нём применялись заголовочные файлы,стандарт С++ также допускает использование заголовчных файлов в стиле языка С, однако стандарт языка С++ предусматривает новый вид заголовка,который используется в стандартной библиотеке.Эти заголовки не являются файлами,они просто представляют собой некие стандартные идентификаторы,которые могут соответствовать файлам, а могут не соответствовать им, поэтому расширение .h в них не ставится.Например <iostream>,<string>.Также при использовании заголовков нового стиля его содержимое погружается в пространство имён std.Пространство имён-это просто область видимости.В данном случае using namespace std, т.е. пространство имён включается в глобальное пространство имён.
Новый стиль заголовков используется в VS начиная с версии 2003.
В приложении слегка скоректированная программа скомпилированная под VS 2003

Приложение:

Ответ отправил: shayen (статус: 6-ой класс)
Ответ отправлен: 29.05.2008, 14:58
Оценка за ответ: 5

Отвечает: Kamerad
Здравствуйте, Sashka!

include<iostream> //без .h

/////////////////////////////////////////

nt** radd(int** a,int n,int m){

int i,j,k; // здесь следует проініціалізіровать переменную k либо передать ее
// в качестве параметра

int** b=new int*[n];

for (i=0;i<n;i++) b[i]=new int[m];
for (i=0;i<n;i++){
for (j=0;j<m;j++){
if (j<k) b[i][j]=rand()%100-50;else b[i][j]=a[i][j-k];}
}
return b;
Ответ отправил: Kamerad (статус: 3-ий класс)
Ответ отправлен: 31.05.2008, 01:12
Оценка за ответ: 5


Вопрос № 138.496
Здравствуйте shayen!

Вы мне очень помогли ответом на вопрос № 138480, суть проблемы понятна, просто реально нет времени и я прошу Вас подкоректировать ещё две программки: следующая в следующем вопросе! Заранее спасибо!

Приложение:

Отправлен: 29.05.2008, 15:31
Вопрос задал: Sashka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: shayen
Здравствуйте, Sashka!
программа компилировалась в VS 2003 добавлена функция srand(time(NULL)) которая служит для задания начального значения при генерации случайный чисел, исправлены некоторые неточности.
Удачи.

Приложение:

Ответ отправил: shayen (статус: 6-ой класс)
Ответ отправлен: 29.05.2008, 16:22
Оценка за ответ: 5
Комментарий оценки:
Спасибо Вам большое!


Вопрос № 138.574
Помогите с сортировкой.
Есть структура
struct film
{
char nazv[NAZV];
char zanr[ZANR];
char rezis[REZIS];
int god;
};

данные структуры хранятся в файле (тип БД)
Требуется отсортировать данные по названию
Отправлен: 29.05.2008, 20:49
Вопрос задал: Брянцев Алексей Юрьевич (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Fenixk19
Здравствуйте, Брянцев Алексей Юрьевич!
Сортировка методом пузырька. Без функции main - только функция сортировки.

Приложение:

Ответ отправил: Fenixk19 (статус: 3-ий класс)
Ответ отправлен: 30.05.2008, 00:02


Вопрос № 138.588
Здравствуйте! Напишыте пожалуйста какую играет роль "extern".
Спасибо заранее!
Отправлен: 29.05.2008, 22:16
Вопрос задал: Sashka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Sashka!
Вот здесьwww.rsdn.ru) вы можете прочитать очень неплохое описание действия ключевого слова extern.
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.05.2008, 02:55
Оценка за ответ: 5


Вопрос № 138.599
Дан одномерный массив А, состоящий из N элементов. Найти первый и последний положительные элементы массива и подсчитать количество элементов, заключенных между ними
Отправлен: 29.05.2008, 23:22
Вопрос задал: Савчук Павел (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Denisss

Здравствуйте, Савчук Павел!

Пример решения задачи с комментариями находится в приложении (для С++).

Удачи!

Приложение:

---------
Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...

Ответ отправил: Denisss (статус: Профессор)
Россия, Москва
ICQ: 281599577
----
Ответ отправлен: 30.05.2008, 20:29


Вопрос № 138.613
Уважаемые эксперты! В программе запускаются 2 процесса: вывод прямоугольников и треугольников. Подскажите, как и какие строки в программе нужно исправить, чтобы выводился закрашенный прямоугольник и прямые линии.

В приложении фрагмент для вывода незакрашенного прямоугольника.

Приложение:

Отправлен: 30.05.2008, 04:53
Вопрос задал: Сергеев Александр (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Сергеев Александр!
В приведенной вами программе отрисовка прямоугольника производится в строчке:

Rectangle(hdc, random(SizeWindow), random(SizeWindow/2), random(SizeWindow), random(SizeWindow));

Для отрисовки случайной линии используйте:

MoveToEx(hdc, random(SizeWindow), random(SizeWindow), NULL);
LineTo(hdc, random(SizeWindow), random(SizeWindow));

а для закрашенного прямоугольника:

RECT r = {
random(SizeWindow),
random(SizeWindow/2),
random(SizeWindow),
random(SizeWindow)
};

FillRect(hdc, &r, (HBRUSH) (COLOR_WINDOW+1));
Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.05.2008, 09:46


Вопрос № 138.615
Подскажите, как определить класс трехмерного вектора (3 вещественных числа)
Отправлен: 30.05.2008, 05:50
Вопрос задал: Сергеев Александр (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Сергеев Александр!
Пример смотрите в приложении. Класс конечно же нужно будет дополнять. Это пример для дальнейшего развития. В нем реализованы лишь несколько операций с векторами (сложение, вычитание).

Приложение:

Ответ отправил: Терсков Сергей (статус: Специалист)
Ответ отправлен: 30.05.2008, 08:31


Вопрос № 138.672
Сколько данная структура занимает места в оперативке ?

Приложение:

Отправлен: 30.05.2008, 13:23
Вопрос задал: Юрий Анатольевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Юрий Анатольевич!

размер любой структуры можно посмотреть через:

int iSize = sizeof(digit);

так же допускается запись:

int iSize = sizeof digit;
Ответ отправил: Сандров Алекс (статус: 8-ой класс)
Ответ отправлен: 30.05.2008, 13:31
Оценка за ответ: 5

Отвечает: Kamerad
Здравствуйте, Юрий Анатольевич!

Вообще структура занимает памяти столько ,сколько требует ее максимальный элемент.
В данном случае это 2 байта (unsigned int data).

 digit *left, digit *right - это указатели на структуры типа  digit.
Ответ отправил: Kamerad (статус: 3-ий класс)
Ответ отправлен: 31.05.2008, 00:45


Вопрос № 138.692
Здравствуйте! Есть такой думаю простой для Вас вопрос:

К какому типу (класу) относиться задача на написание программы (на С++) для создания, редактирования, и вывод отредактированного массива?. Это нужно для ответа в отчёте
Заранее спасибо!
Отправлен: 30.05.2008, 15:03
Вопрос задал: Sashka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Сандров Алекс
Здравствуйте, Sashka!

Ну, судя по массиву, это, наверно, электронные таблицы, типа MS Excel.
Ответ отправил: Сандров Алекс (статус: 8-ой класс)
Ответ отправлен: 02.06.2008, 05:48
Оценка за ответ: 4


Вопрос № 138.732
Здравствуйте уважаемые эксперты! Помогите, пожалуйста, разобоаться с такой задачёй: необходимо подсчитать количество слов в строке, состоящих только из цифр.
Отправлен: 30.05.2008, 20:23
Вопрос задал: Borman Karlovich (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Denisss

Здравствуйте, Borman Karlovich!

По-моему, для решения Вашей задачи удобно воспользоваться функцией strtok, разбивающей строку на токены (в данном случае на слова).
Пример для С++ (компилируется нормально в GCC 4.2.3) находится в приложении.
Символы, отделяющие слова в строке (пробел, знаки пунктуации, табулятор и др.) объявлены в массиве delims.
Функция isdigit определяет, является ли символ цифрой.

Успехов!

Приложение:

---------
Будь осторожен, когда молишься ради чего-то, потому что можешь это получить...

Ответ отправил: Denisss (статус: Профессор)
Россия, Москва
ICQ: 281599577
----
Ответ отправлен: 30.05.2008, 21:15
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за Вашу помощь!!!


Вопрос № 138.762
Мне нужно добавлять один символ где-то посередине строки
Что быстрее будет работать:
1.сдвиг с помощью movmem, memmov и т.п.
2.сдвиг с помощью strcpy
Что удобнее?
--------------------
Жду ваших профессиональных мнений:)
Отправлен: 31.05.2008, 07:28
Вопрос задал: Warobushek (статус: 1-ый класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Хватов Сергей
Здравствуйте, Warobushek!

У вас строка и буфер явно перекрываются, поэтому использовать вы можете только memmove()
Ответ отправил: Хватов Сергей (статус: Практикант)
Ответ отправлен: 31.05.2008, 12:42
Оценка за ответ: 5
Комментарий оценки:
спасибо


Вопрос № 138.808
Здравствуйте!
Не могу разобраться, в большинстве книг по С++,
с наведеним примеров програм, используються функции:

int main(int argc, char* argv[]).

Напишыте пожалуйста, что в даном случае значит "argc", char*
(я понимаю, что char это символьный тип, но зачем здесь *) и argv[].
И ещё: Т.к тип void - это тип, который характ. функцию,
которая не возваращяет никакого значения, то
напишыте пожалуйста кратко в каких задачах в большинстве случаев нужно
использовать этот тип. Большое Вам спасибо.
Отправлен: 31.05.2008, 18:02
Вопрос задал: Sashka (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Сандров Алекс
Здравствуйте, Sashka!

msdn said:

argc:
An integer specifying how many arguments are passed to the program from the command line. Because the program name is considered an argument, argc is at least 1.

argv
An array of null-terminated strings. The first string (argv[0]) is the program name, and each following string is an argument passed to the program from the command line.

То есть argc - число аргументов функции(в т.ч. и сама программа) и собственно argv - массив этих аргументов.

char* - это переменная-указатель на переменную char. Или проще: указатель на char. В таких переменных-указателях хранится адрес другой переменной. Такие указатели используют для динамического выделения памяти(т.е. обычно он указывает не на одну переменную, а на начало массива с переменными, char* - это обычно массив символов, строка), для передачи параметров в функцию (в с++ с параметров, переданных в функцию, делается копия и сам параметр снаружи функции остаётся неизменным, но если работать через указатель, то данные по указателю можно менять)

void: например функции установки занчений:

void SetValue(int iNewValue)
{
m_iValue = iNewValue;
}
Ответ отправил: Сандров Алекс (статус: 8-ой класс)
Ответ отправлен: 02.06.2008, 06:02
Оценка за ответ: 4


Вы имеете возможность оценить этот выпуск рассылки.
Нам очень важно Ваше мнение!
Оценить этот выпуск рассылки >>

Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

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

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2008, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Техподдержка портала, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале

∙ Версия системы: 4.92 pre 5.0 RC2 от 09.05.2008

Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное