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

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


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

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

Выпуск № 463
от 12.07.2006, 19:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 341, Экспертов: 46
В номере:Вопросов: 3, Ответов: 3


Вопрос № 48399: Подскажите, пожалуйста, какой-нибудь мощный тест (в смысле экзамен) по С++. Чтоб в и-нете и бесплатный :). Хотя, и про серьёзные (чтоб в классе проверяли, а не через и-нет) сертификационные программы интересно было бы узнать, если есть такие. <br...
Вопрос № 48404: Здрасти!! не могу никак написать программу: дан массив целых чисел вводим их (неизвестное кол-во) через пробел и что бы после каждого пробела число занасилось в массив. и проблема с двойным массивом. посоветуйте что лучше изменить а что у...
Вопрос № 48447: Уважаемые эксперты у меня к вам такой вопрос точнее два. Создано Windows-приложение на MVC++, в котором используется открытие БД, посредством CDatabase. В случае недоступности БД по сети выдается стандарное окно о ненормальном прекращении работы прог...

Вопрос № 48.399
Подскажите, пожалуйста, какой-нибудь мощный тест (в смысле экзамен) по С++. Чтоб в и-нете и бесплатный :). Хотя, и про серьёзные (чтоб в классе проверяли, а не через и-нет) сертификационные программы интересно было бы узнать, если есть такие.

Нужно чтоб там были не тривиальные вопросы по полиморфизму указателей да и вообще по ООП. Желательно, чтоб можно было посмотреть правильно ли я ответил на конкретный вопрос.
Отправлен: 06.07.2006, 21:34
Вопрос задал: luchisty (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 13)

Отвечает: gitter
Здравствуйте, luchisty!
Можете попробовать себя на http://tests.specialist.ru/ или на http://www.upmark.ru/cgi-bin/tests.cgi?action=testid&tid=24

Когда-то был бесплатен brainbench по этой тематике (http://brainbench.com/ )
но это очень известный ресурс, на котором можно пройти сертификацию по любому направлению (но на английском).

на http://www.intuit.ru/ можно подписаться на заочные курсы по программированию
здесь тоже система обучения проходит в виде тестирования
(Можете попробовать подписаться на курс С++ и попробовать сдать экзамен экстерном)

Единственное, что Вас не устроит, так это то, что все эти тесты, (как, впрочем, и все боле-менее "мощные" тесты) не позволят Вам видеть правильные ответы.
Правда, на http://www.intuit.ru/ можно поэтапно (методом исключения) узнать какие ответы Вы дали неверно. (Но на это уйдёт немало времени)

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 06.07.2006, 22:08
Оценка за ответ: 4
Комментарий оценки:
tests.specialist.ru - тут нашёл только тест по Pascalю.
www.upmark.ru - слабенький тест. Тема ООП почти не затронута.
brainbench.com - известное место, но по C++, тест, насколько я понял, платный.
www.intuit.ru - средний тест, тема ООП не очень глубоко затронута. Есть ошибки (пример на мини-форуме) и неоднозначности, имхо.


Вопрос № 48.404
Здрасти!! не могу никак написать программу:
дан массив целых чисел
вводим их (неизвестное кол-во) через пробел и что бы после каждого пробела число занасилось в массив. и проблема с двойным массивом.
посоветуйте что лучше изменить а что убрать совсем

Приложение:

Отправлен: 06.07.2006, 23:17
Вопрос задал: HITY (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Zitz
Здравствуйте, HITY!

Для двумерных массивов нужно **k, и еще нужно память под массивы выделять.
Т.е. если вам нужен массив из 10 элементов, то делаете:
int * massiv;
massiv = new int[10];
Тоже самое со строкой
char * str;
str = new char[20];
Очистить память можно используя memset (объявление можно найти в #include "string.h")
Например:
memset(str,0,20); - установить двадцать символов str в 0 (символ 0 - это конец строки)
Или
memset(massiv,0,sizeof(int)*10); - заполнить massiv нулями, где sizeof(int) - размер одного элемента массива, 10 - количество элементов (sizeof(char) = 1, поэтому я это упустил в прошлом примере)
В конце работы выделенную память нужно освободить, для массивов это делается так:
delete [] str;
delete [] massiv;
Т.к. у Вас все действия происходят в классе plan, то целесообразнее всего освобождать память в деструкторе:
plan::~plan()
{
// вот здеся
};

Размер строки можно узнать функцией strlen из тойже #include "string.h"
Например:
int i = strlen(str);

Из примера не совсем ясно для чего вообще Вам понадобился двумерный массив...
Так же является плохим стилем использование оператора goto, тем более что оно вообще в Вашем примере не требуется.

посоветуйте что лучше изменить а что убрать совсем
Лучше вообще все сделать не так ;))
Я предлагаю вообще уйти от строк и их преобразований, за место них все будем делать с int. Мысля следующая: считываем символ - если цифра то прибавляем к буферу (буфер - обычный int), например считали 5 (символ '5' - 48 дает число 5), на следуюшем шаге просто добавляем у буфера разряд впереди (это делается простым умножением на 10), т.е. на втором шаге считываем например 6, в буфере лежит 5, умножаем на 10, будет 50, прибавляем 6 будет 56 и т.д. Если мы нажали не цифру (например пробел), то записываем значение буффера в массив, буфер очищаем и переходим к считыванию следующего числа и т.д. (см. приложение)

На счет динамических массивов: я бы посоветовал Вам использовать вместо них vector
(#include "vector").
Т.е. скажем Вам нужен массив чисел, число элементов не известно:
std::vector massiv;
На каждом шаге добавляете в массив числа, например так:
massiv.push_back(10);
навигация по вектору такая же как по массиву, т.е. можно спокойно использовать:
if (massiv[0] == 10) {};
Если хотите для вектора выделить сразу память пож скажем 5 элементов, то просто говорите ему:
massiv.resize(5);

massiv.size( ) - это число элементов в векторе
massiv.empty( ) - проверить есть ли элементы в векторе
massiv.clear( ) - очистить вектор (убрать все элементы)
Вот вроде и все важные функции...

За состоянием своей памяти вектор следит сам, по этому нет необходимость очищать память при выходе.

Приложение:

---------
Успех неизбежен + Думать вообще полезно + Чем сейчас, тем лучше

Ответ отправил: Zitz (статус: Студент)
Ответ отправлен: 07.07.2006, 22:51
Оценка за ответ: 4
Комментарий оценки:
спасибо за предоставленую иформацию. но я хотел чуть не это.
int ch(0); это как я понимаю ch =0;а то мой си 3.0
int result(0);не воспринимает это
int i(0);


Вопрос № 48.447
Уважаемые эксперты у меня к вам такой вопрос точнее два. Создано Windows-приложение на MVC++, в котором используется открытие БД, посредством CDatabase. В случае недоступности БД по сети выдается стандарное окно о ненормальном прекращении работы программы с кнопками: прекратить, продолжить, отладка. Вопрос как сделать, чтобы окно не выходило и приложение "слетало". И еще я привожу фрагмент кода, здесь использую обработку исключения CDBException, при использовании CDatabase->OpenEx, однако исключение не обрабатывается а выскакивает вышеупомянутое окно. Как быть. Буду признателен за ответ.

Приложение:

Отправлен: 07.07.2006, 11:53
Вопрос задал: Воробьев Дмитрий Владимирович (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: gitter
Здравствуйте, Воробьев Дмитрий Владимирович!
Попробуйте такой обработчик исключения
try{
pDatabase=new CDatabase();
d_status=pDatabase->OpenEx(_T"DSN=ALPHA2004;UID=ALPHA2004;PWD=alpha2005"),
CDatabase::openReadOnly|
CDatabase::noOdbcDialog);
}
catch(CDBException* ex)
{
ex->GetErrorMessage(szCause,255,NULL);
AfxMessageBox(szCause,MB_OK, 0);
i_status=0;
delete ex;
}
и всё получится так как Вы хотели.

Удачи!
Ответ отправил: gitter (статус: Студент)
Ответ отправлен: 07.07.2006, 23:56
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо, все получилось.


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

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

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

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

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


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


© 2001-2006, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
Авторские права | Реклама на портале
Версия системы: 4.34 от 01.06.2006
Яндекс Rambler's Top100

В избранное