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

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


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

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

Выпуск № 807
от 28.07.2007, 15:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 497, Экспертов: 61
В номере:Вопросов: 9, Ответов: 21


Вопрос № 95983: Здравствуйте, ув. эксперты. VS 6.0. Visual C++. Консольное приложение. Надо написать таймер с "графическим" изображением таймера. "Графическим", т.е. все цифры должны изображаться в увеличенном виде, скажем в виде пос...
Вопрос № 95996: Здравствуйте уважаемые эксперты! Привожу немного изменённый код программы из книги "С++ для чайников" по преобразованию температуры из градусов цельсия в градус по фаренгейту. #include <iostream> #include <c...
Вопрос № 95998: Здравствуйте! Ищу в интернете, но почти всё на английском, не пойму. Что мне нужно установить (какие IDE и SDK) чтобы я мог писать программы для Symbian? Заранее спасибо за ответы!...
Вопрос № 96010: Здравствуйте, уважаемые эксперты вопрос такой: У меня есть фрагмент кода в котором появляется ошибка, но суть ошибки или способ её обхода придумать не могу, ЕСТЬ ПОДОЗРЕНИЕ, ЧТО Я НЕ МОГУ К ТИПУ CHAR ОБРАЩАТЬСЯ ПО ИНДЕКСУ, А ПОЧЕМУ ТОГДА Я МОГУ О...
Вопрос № 96020: Здравствуйте, уважаемые экперты! Помогите, пожалуйста, полному чайнику в разрешении задачи! Дана целочисленная матрица [Aij]i, j=1,...,n. Получить b1,...,bn, где bi-это сумма j=1 до n |Aij|....
Вопрос № 96037: Всем!Всем! спасибо за решение задачи!, и подскажите как скачать саму программу С/С++???...
Вопрос № 96051: Здравствуйте. Подскажите пожалуйста, как можно распарсить строку типа String на отдельные слова, есть ли для этого стандартные функции, типа strtok()? Еще было бы интересно знать как получить многословную строку в char* из потока ввода....
Вопрос № 96075: Всем привет! Помогите с документацией по SNMP, МСДН очень расплывчив или я просто еще не доконца понял то что там написано, если есть примеры кода - ваще супер, или скажите где порыть. Заранее благодарен....
Вопрос № 96080: Здравствуйте Ув. Программисты! У меня такой вопрос: Я написал программу на C++ Builder 6.0. На компьютере где писал работает без проблем. Как только переношу на компьютер где данное приложение должно работать вылетает ошибка: Не найден vcl60....

Вопрос № 95.983
Здравствуйте, ув. эксперты.
VS 6.0. Visual C++. Консольное приложение.

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

Собственно сама задача сложностей не вызывает. И она работает. Напрягает блыманье экрана, когда идет очистка и запись новых значений с помощью оператора cout.

Когда-то в школе в Паскале создавал массив, который потом накладывал на видеопамять (командой absolute $B800:0000). И работал с этим массивом. Т.е. не было необходимости очищать и заполнять весь экран, а достаточно было изменить значения нескольких элементов в массиве, чтобы на экране поменялось изображение. Плюс еще можно было "разукрашивать" надписи и т.д.

Вопрос, собственно, вот в чем. Может ли VC++ предложить что-либо подобное. В инете порылся, нашел только вот это (в приложении). Но такой вариант слишком сложен для моего понимания, т.к. изучать С++ только начал.
Спасибо за помощь.

Приложение:

Отправлен: 22.07.2007, 20:16
Вопрос задал: Грибенников Александр Сергеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: estiGi
Здравствуйте, Грибенников Александр Сергеевич!
Как-то вы слишком сложно выводите данные на консоль :)
для работу с символами в консоли по координатами пожно использовать функцию SetConsoleCursorPosition. Изменил позицию курсора - ввел символ, который затер предыдущий, т.е. саму консоль перерисовывать не нужно
Работа с цветами в консоли - SetConsoleTextAttribute
пс.
C++ здесь ни причем. Это Win32API.
Если на то пошло, то такого языка, как VC++ (Visual C++) не существует, так просто называют программы на С++ с графическим интерфейсом, а MS VS - это среда разработки и компилятор, предлагаемые MS
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 23.07.2007, 01:20
Оценка за ответ: 5
Комментарий оценки:
Великолепно. То, что надо.

Отвечает: Ilkras
Здравствуйте, Грибенников Александр Сергеевич!
Не буду повторять ответ предыдущего эксперта. Добавлю лишь, что записть на экран по адресу 0х8000+0х4000*х возможна только в ДОС. ДОС, не являясь в сущьности полноценной операционной системой, никоим образом не изолирует исполняемую программу от "железа". Если же вы работаете в Windows 9x/NT/2K/XP/Vista, то доступа к буферу видеообмена с экраном у вас нет - это работа драйвера, который отделен от исполняемой программы HALом (Hardware Abstraction Layer). Так что красивый способ работы с экраном, который вы со школы помните, увы остался в прошлом.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 24.07.2007, 15:23


Вопрос № 95.996
Здравствуйте уважаемые эксперты!

Привожу немного изменённый код программы из книги "С++ для чайников" по преобразованию температуры из градусов цельсия в градус по фаренгейту.

#include <iostream>
#include <conio.h>
using namespace std;
int main (int nNumberofArgs, char* pszArgs [])
{
int Cel;
cout << "Vvedite temperaturu v gradusah celsia ";
cin >> Cel;
//Определяем переменную для фаренгейта.
int Far;
Far = Cel * (212 - 32)/100 + 32;
//Выводим температуру на консоль.
cout << "Temperatura po Forengeitu = " << Far;
getch ();
return 0;
}

Программа работает, но я захотел по экспериментировать. Строку "int main (int nNumberofArgs, char* pszArgs [])" заменил на "void main ()" и удалил "return 0;". Программа выполнила те же действия. Вернул строку на место но вместо "return 0" ввёл "return 4" Опять программа выполнила всё тоже самое. Тогда в чём же отличия? И что значат аргументы int main (int nNumberofArgs, char* pszArgs []) если в программе, что их использование, что удаление всё равно ни к чему не приводят. И ещё подскажите пожалуйста, как сделать так, что бы в Visual Studio 2005 при написании консольных программ отображался русский текст. Иначе после запуска экзешника вместо русских слов - крякозябры.


Спасибо!
Отправлен: 22.07.2007, 22:55
Вопрос задал: Чирков Вячеслав Александрович (статус: Посетитель)
Всего ответов: 5
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ghoul
Здравствуйте, Чирков Вячеслав Александрович!
int main (int nNumberofArgs, char* pszArgs []) -- заголовок (прототип) функции с именем main (главной функции).

Первый int -- тип, возвращаемый в результате работы функции. В случае главной функции (main), это как правило код ошибки, или 0, если таковой в ходе работы приложения не возникло.

Строка int nNumberofArgs, char* pszArgs [] -- параметры функции. Но это не обычная функция, а главная, поэтому и параметры её так же не обычны.
В качестве аргументов этой функции передаются:
1. Количество аргументов командной строки -- int nNumberofArgs (размерность массива pszArgs []);
2. Указатель на массив аргументов командной строки -- char* pszArgs []

Например, Вы запускаете свою программу таким образом: Cel2Far.exe param1 param2… Тогда param1, param2 и т.д. будут являться теми самыми аргументами, которые хранятся в массиве char* pszArgs []. Причем, в первом элементе этого массива (pszArgs [0]) всегда будет храниться имя программы (и полный путь до неё, если она запускается не из своей папки), в данном случае -- Cel2Far.exe.

В вашем приложении аргументы командной строки не используются, поэтому список параметров функции может быть пустым.
Значение, возвращаемое функцией используется при проектировании консольных приложений и в принципе на ранних этапах и в Windows-приложениях его использовать особого смысла нет. Поэтому от заголовка функции можно оставить только void main();

Если хотите поиграться с параметрами, вот пример, который выводит их список:

#include <iostream>
#include <cstdlib>
using namespace std;

void main (int argc, char *argv[])
{
cout << "Application name: " << argv[0] <<endl;

int c = 1;
while (c < argc)
{
cout << argv[c] << endl;
c++;
}

system("pause");
}
Ответ отправил: Ghoul (статус: 1-ый класс)
Ответ отправлен: 22.07.2007, 23:19
Оценка за ответ: 4

Отвечает: Терсков Сергей
Здравствуйте, Чирков Вячеслав Александрович!
Формат функции main утвержден в стандарте С++, так что с ним экспериментировать ни к чему и менять его на что-либо другое тоже не нужно. Назначение параметров функции main вам объяснил эксперт Ghoul. А что касается русских символов в консоли, то на портале уже были подобные вопросы. Например вопрос № 93858. Но более подробная и точная информация по данной теме находится здесь:
www.rsdn.ru/article/qna/ui/concp.xml
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 23.07.2007, 04:15

Отвечает: Sema
Здравствуйте, Чирков Вячеслав Александрович!

Ну в общем это параметры которые ты можешь передавать в программу из командной строки
Ответ отправил: Sema (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 11:13

Отвечает: Ilkras
Здравствуйте, Чирков Вячеслав Александрович!
Когда в прототипе функции вы указываете возвращаемое значение, то тем самым вы даете инструкцию компилятору выделить на стэке место для возвращаемой величины. Если вы вернули значение из функции, прототип которой void, то возможны следующие вырианты:
1) компилятор сообщит вам об ощибке (желательный вариант)
2) компилятор изменит прототип функции (и аллокацию стэка) под вашу имплементацию (вероятно это то что происходить с VC6)
3) компилятор проигнорирует возвращаемое значение
4) компилятор построит код в точности как вы написали. При этом возвращаемое значение будет затирать что-нибудь в стэке. Поведение программы в таком случае можно объяснить тем, что в Windows программа запускается в отдельно процессе и после выхода из функции main процесс уничтожается (вместе со стэком) и затирание стэка "не успевает" проявиться.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 24.07.2007, 15:34

Отвечает: Василенко Алексей Васильевич
Здравствуйте, Чирков Вячеслав Александрович!
int main означает, что функция "main" возвращает результат челочисленного типа.
"return 0" - какраз уздает величину которая возвращается.
при изменении обьявления функции на "void main ()" функция не возвращает значения.
все изменения значения "return 0" и "return 4" и не могли дать изменения, т.к. результат работы main нигде не используется
---------
Готовых решений небыло, нет и не будет... вся жизнь - это лишь размышления на тему
Ответ отправил: Василенко Алексей Васильевич (статус: 3-ий класс)
Ответ отправлен: 25.07.2007, 19:35


Вопрос № 95.998
Здравствуйте!
Ищу в интернете, но почти всё на английском, не пойму.
Что мне нужно установить (какие IDE и SDK) чтобы я мог писать программы для Symbian?
Заранее спасибо за ответы!
Отправлен: 22.07.2007, 23:03
Вопрос задал: Yadovit (статус: 7-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Yadovit!
Почему же только на английском ?
Вот пример установки SDK для Visual Studio 6.0
http://www.citforum.ru/programming/embedded/first_symbian

Вот форумная ветка по этому поводу

http://www.gamedev.ru/mobile/forum/?id=66140

Здесь находится обзор программирования на С++ под Symbian

http://rsdn.ru/article/pda/symbian.xml

И вообще на rsdn.ru достаточно много информации по программированию на мобильных устройствах...
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 23.07.2007, 03:03
Оценка за ответ: 5


Вопрос № 96.010
Здравствуйте, уважаемые эксперты вопрос такой:
У меня есть фрагмент кода в котором появляется ошибка, но суть ошибки или способ её обхода придумать не могу, ЕСТЬ ПОДОЗРЕНИЕ, ЧТО Я НЕ МОГУ К ТИПУ CHAR ОБРАЩАТЬСЯ ПО ИНДЕКСУ, А ПОЧЕМУ ТОГДА Я МОГУ ОБРАЩАТЬСЯ по индексу к указателю на char

Приложение:

Отправлен: 23.07.2007, 00:20
Вопрос задал: Losaped (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: estiGi
Здравствуйте, Losaped!
А что вас удивляет? Вы передаете неверный аргумент в функцию.
Типы char и char* - это не одно и то же. char хранит в себе один символ, char* - это указатель на адрес в памяти. Функция strlen принимает указатель на массив символов, ограниченный нулем.
В данном случае, выражением st=*word; вы не получаете указатель на массив, вы просто копируете первый символ из буфера word в символьную переменную st
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 23.07.2007, 01:02

Отвечает: Попов А.С.
Здравствуйте, Losaped!
Дело в том что тип char эквивалентен типу byte в паскале (т.е. целое число 0-255) следовательно к нему нельзя применить индексацию в отличие от указателя на char (или другой тип переменной). Указатель - это переменная, содержащая адрес, поэтому к указателям применимы операции сложения, вычитания, сравнения. В языке C++ запись вида a[1] эквивалентна *(a+1): здесь к значению указателя а прибавляется кол-во байт которые занимает одна переменная того типа на который указывает указатель а (например в случае с char это 1 байт)
Ответ отправил: Попов А.С. (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 11:04

Отвечает: kool
Здравствуйте, Losaped!
Нужно так
cout< или так
cout< Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 23.07.2007, 20:28
Оценка за ответ: 1
Комментарий оценки:
ничего не понятно.


Вопрос № 96.020
Здравствуйте, уважаемые экперты!
Помогите, пожалуйста, полному чайнику в разрешении задачи!
Дана целочисленная матрица [Aij]i, j=1,...,n. Получить b1,...,bn, где bi-это сумма j=1 до n |Aij|.
Отправлен: 23.07.2007, 03:18
Вопрос задал: Соловьев Максим Сергеевич (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

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

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 23.07.2007, 04:50

Отвечает: Попов А.С.
Здравствуйте, Соловьев Максим Сергеевич!
см. в приложении

Приложение:

Ответ отправил: Попов А.С. (статус: 2-ой класс)
Ответ отправлен: 23.07.2007, 11:23
Оценка за ответ: 5


Вопрос № 96.037
Всем!Всем! спасибо за решение задачи!, и подскажите как скачать саму программу С/С++???
Отправлен: 23.07.2007, 09:31
Вопрос задала: Myasoedova natalua (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Терсков Сергей
Здравствуйте, Myasoedova natalua!
По-моему, лучшим решением для начинающих является Visual Studio 2005 Express Edition. Она бесплатна, а по возможностям достаточно близка к профессиональной версии. Да и сами майкрософтовцы советуют эту версию для обучения программированию... Скачать ее можно с сайта майкрософт вот здесь...

http://msdn.microsoft.com/vstudio/express/downloads
Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 23.07.2007, 10:46


Вопрос № 96.051
Здравствуйте. Подскажите пожалуйста, как можно распарсить строку типа String на отдельные слова, есть ли для этого стандартные функции, типа strtok()? Еще было бы интересно знать как получить многословную строку в char* из потока ввода.
Отправлен: 23.07.2007, 11:28
Вопрос задал: Losaped (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Stv
Здравствуйте, Losaped!
Стандартных функции нет. Используя функцию find можно искать пробел мужде слов, а затем функцией assign выделять нужное слово. Вместо assign можно еще использовать функцию substr.
Ответ отправила: Stv (статус: 1-ый класс)
Ответ отправлен: 23.07.2007, 11:38
Оценка за ответ: 5
Комментарий оценки:
спасибо, понятно, как использовать функции найду.

Отвечает: Терсков Сергей
Здравствуйте, Losaped!
У строк из STL нет специальных функций для рапарсивания. Поэтому нужно пользоваться функциями поиска и подстрок. В приложении есть подобный пример. А для серьезных целей лучше воспользоваться классом tokenizer из библиотеки boost. Подробней об этом классе смотрите здесь:

http://www.boost.org/libs/tokenizer/index.html

Приложение:

Ответ отправил: Терсков Сергей (статус: Студент)
Ответ отправлен: 24.07.2007, 03:15
Оценка за ответ: 5
Комментарий оценки:
Суппер ответ. Большое спасибо.


Вопрос № 96.075
Всем привет! Помогите с документацией по SNMP, МСДН очень расплывчив или я просто еще не доконца понял то что там написано, если есть примеры кода - ваще супер, или скажите где порыть.
Заранее благодарен.
Отправлен: 23.07.2007, 13:40
Вопрос задал: Andrew123 (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: Новак Александер Васильевич
Здравствуйте, Andrew123!
MSDN должен идти вместе со средой программирования(VC++), так-же она есть в сети : http://msdn2.microsoft.com/en-us/library/ms708086.aspx
Ответ отправил: Новак Александер Васильевич (статус: 1-ый класс)
Ответ отправлен: 23.07.2007, 20:52

Отвечает: Ilkras
Здравствуйте, Andrew123!
Алгоритм нахождения документации по сетевым протоколам такой:
заходим в google, пишем искомое слово
получаем результаты и в них ищем ссылки на сайты cisco и wikipedia.
Идем по этим линкам и получаем исчерпывающий ответ.
(работае практически для всех сетевых протоколов)

http://en.wikipedia.org/wiki/Simple_Network_Management_Protocol
http://www.cisco.com/univercd/cc/td/doc/cisintwk/ito_doc/snmp.htm

Приятного чтения.
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 24.07.2007, 15:42


Вопрос № 96.080
Здравствуйте Ув. Программисты!
У меня такой вопрос: Я написал программу на C++ Builder 6.0. На компьютере где писал работает без проблем. Как только переношу на компьютер где данное приложение должно работать вылетает ошибка:
Не найден vcl60.bpl. (Далее скопировал данную библиотеку визуальн. компонентов в каталог рпограммы, начинает ругаться на следующую *.bpl и т.д) Как обрулить данную проблему?
Спасибо за внимание.
Отправлен: 23.07.2007, 14:01
Вопрос задал: Малоземов А.С. (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 3)

Отвечает: V1s0r
Перенесено в минифорум, т.к. не является ответом на вопрос. [ Alexandre V. Tchamaev ]
Ответ отправил: V1s0r (статус: 4-ый класс)
Ответ отправлен: 23.07.2007, 14:43
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за помощь! Помогло

Отвечает: Maxim V.G.
Здравствуйте, Малоземов А.С.!
Ваш вопрос задаётся также часто как вопрос есть ли жизнь на марсе )).
Есть 2 пути запустить программу с билдера на другом компьютере:
1) Складывать в папочку необходимые либы.
2) Установить флаг в опциях проекта (Project -> Options->Packages) "Build with runtime packages".
---------
Жить вредно - от неё умирают
Ответ отправил: Maxim V.G. (статус: 3-ий класс)
Ответ отправлен: 23.07.2007, 15:26

Отвечает: kool
Здравствуйте, Малоземов А.С.!
Обрулить можно отключить в настройках компилятора
или линкера использования этих библиотек, но тогда нельзя
будет воспользовавться их преимуществами. Можно включить
эти библиотеки в программу, но тогда ее размер сильно увеличится
(настройки меняются там же).
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 23.07.2007, 20:28
Оценка за ответ: 5


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

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

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

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

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


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


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Авторское право: ООО "Мастер-Эксперт Про"
Email: support@rusfaq.ru, тел.: +7 (926) 535-23-31
Хостинг: "Московский хостер"
Поддержка: "Московский дизайнер"
Авторские права | Реклама на портале
Версия системы: 4.53 beta от 09.07.2007
Яндекс Rambler's Top100
RusFAQ.ru | MosHoster.ru | MosDesigner.ru | RusIRC.ru
Kalashnikoff.ru | RadioLeader.ru | RusFUCK.ru

В избранное