Вопрос № 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, однако исключение
не обрабатывается а выскакивает вышеупомянутое окно. Как быть. Буду признателен за ответ.
Отвечает: 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 Комментарий оценки: Большое спасибо, все получилось.