Вопрос № 76896: Уважаемые эксперты, хочу научиться программированию на C/C++.
Какие между ними отличия?
Подскажите пожалуйста наиболее подходящие учебники для этого и софт (если можно то всё с ссылками для скачивания и на русском языке!!!)....Вопрос № 76909: Здравствуйт, уважаемые эксперты! Помогите, пожалуйста, найти ошибку (в приложении). Задача такая: в одномерном массиве, состоящем из n вещественных чисел, вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного э...Вопрос № 76960:
Здравствуйте уважаемые эксперты... У меня такая проблема -- я решила переписать свою прогу (отображает анимированные гифы) и вместо GetPixel использовать GetDIBits .
Переписала работает конечно быстрее, но к сожелению не все гифы отображаются ко...Вопрос № 76996: Пишу приложение на Visual C++. Необходимо хранить и обрабатывать данные. Можно использовать сторонние СУБД или сделать свою. Как можно реализовать работу с БД средствами Visual C++? Нужно, чтобы таблицы БД можно было редактировать в самой программе....Вопрос № 77005: Здравствуйте, эксперты!
Что не верного в моём коде. Не стабильно работает функция:
при однократном вызове всё "ОК", но в цикле шаге на 3-4-ом возникает ошибка:
AccessViolationException (Attempted to read or write protected...Вопрос № 77037: Здравствуйте эксперты!
Просьба отвечать тем кто рельно понимает о чем я говорю.
Пишу архиватор с алгоритмлм сжатия Шенона-Фано в Visual c++. Столкнулся спроблемой: каким образом мне считывать символьную информацию с разных типов файлов для то...Вопрос № 77083: Всем привет!
Нужно сделать программу с модулями.Тоесть есть оснавная программа,она представляет собой меню (обычное,c циферками (switch)),из этого меню должны вызываться другии программы (как бы модули).Вопрос в том как вызвать эти программы...Вопрос № 77085: Здраствуйте Эксперты. Посоветуйте пожалуйста литературу или ссылочку дайте, по программированию на С++, для новичков. Заранее благодарю. ...Вопрос № 77090: Вот у меня такой вопрос:
как написать многотомное приложение, т.е. есть некая программа которая обрабатывает запросы других программ. (на подобии сервера БД)?
Заранее благодарен!. ...Вопрос № 77122: Уважаемые эксперты!
Столкнулся с трагической проблемой.
Работаю с gcc 3.3.3 RHL9 and PPC_8xx
Я использую C и C++. И после сшивки приложения получаю смертельную зависисмость от libstdc++.so.5.
# readelf -a ./myappl | grep "Sh...Вопрос № 77131: Здравствуйте Уважамаемые Эксперты!!
Помогите реализовать задачу на языке C++!!!
Даны две строки символов S и T. Необходимо определить сколько раз строка T входит в строку S и удалить первое и последнее вхождение T в S.
В условии сказанно ...Вопрос № 77155: Приведите пожалуйта пример как можно маписать в фаил пару бит...Вопрос № 77185: Спаибо всем за предыдущую справку!
Вопрос:
Напишите подробнее про переменную типа BYTE эта переменная может хранить инфу размером в один байт или как?
Допустим у меня есть целочисленный массив из разных значения типа 111010101 могу-ли я п...Вопрос № 77190: Здравствуйте. Подскажите пожалуйста, как можно опредилить время работы программы?...Вопрос № 77204: Каким образом с помощью api можно запустить на выполнение фаил кроме как system() и ShellExecute()?...Вопрос № 77205: Добрый день, уважаемые господа эсперты!
Не могли бы вы мне на каком-нить простом примере показать использование функции EnumPrunters(...)?
На текущий момент, к сожалению, я не смог добиться от нее никакой работоспособности. В приложении ...Вопрос № 77207: Здраствуйте!скажите пожалуйста я хочу изучать С++ и незнаю что делать качать от микрософта Visual C++ Express 2005 (кажеться так называеться),или же пойти и купить С++ 6.0 ?
Если можете дайте исчерпающий ответ!...Вопрос № 77219: Все с битами разобались а теперь разберемся чего я хочу
Я считываю из файла строку ну например "мама мыла раму" при помощи алгоритма шенона-фано
я поеобразую эту строку в что то типо 0010101010 (это конечно не точно так но что то бо...Вопрос № 77252: Здарово всем! ;)
Скажите пожалуйста как теперь из файла в который я назаписывал биты их считать да так чтоб затем представить их в виде строки? ну тоесть для тех кто отвечал на предыдущие мои вопросы нужно объяснить мне как повернуть процесс в об...Вопрос № 77346: все наверно знают о существовании такого заголовочного файла как <biset>
почему когда я пишу что-то типо:
<bitset>
int main()
{
bitset <100> b1;
return 0;
}
компелятор пи...Вопрос № 77367: Напишите пожалуйста на примеhе как пользоваться функцией OpenFile...Вопрос № 77368: Еще раз всем привеД!
Вопрос правильно ли я записываю в фаил биты
и ещё вопрос как мне их оттуда считать...Вопрос № 77380: Здравствуйте Уважаемые Эксперты, помогите разобраться. Проблема вот в чём: я написал программу, в ней есть всякие настройки, когда запускаешь и настраиваешь, то всё работает, но когда выключаешь и запускаешь заново, то все настройки пропадают, как мо...Вопрос № 77387: Ура товарищи теперь я научился записывать и считывать биты в и из файла!
если это переделывает строку в биты
char mass[]="11010100";BYTE my_byte;
for(int i=0; i<8; i++)
{
my_byte<<=1;
if(mass[i] =...Вопрос № 77398: Здравствуйте Эксперты!
Я начал изучать С++. Как написать код, который будет выполнять функции через определённый промежуток времени. Например выполняется функция func(), проходит две секунды и выполняется следующая функция.
И ещё вопрос: Как ...
Вопрос № 76.896
Уважаемые эксперты, хочу научиться программированию на C/C++.
Какие между ними отличия?
Подскажите пожалуйста наиболее подходящие учебники для этого и софт (если можно то всё с ссылками для скачивания и на русском языке!!!).
Отвечает: Терсков Сергей
Здравствуйте, Кондрашов Дмитрий!
На Википедии есть отличные материалы по обоим языкам. В них и обзоры языков, и примеры программ, и ссылки на различные внешние ресурсы.
Вот ссылки...
Язык C
http://ru.wikipedia.org/wiki/%D0%A1%D0%B8_%28%D1%8F%D0%B7%D1%8B%D0%BA_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F%29
Язык C++
http://ru.wikipedia.org/wiki/C++
Ответ отправил: Терсков Сергей (статус: 6-ой класс)
Ответ отправлен: 27.02.2007, 10:13 Оценка за ответ: 4 Комментарий оценки: Спасибо, но по моему могло быть и лучше.
Отвечает: wils0n
Здравствуйте, Кондрашов Дмитрий!
Купите книгу "Язык программирования С++", автор Бьерн Страуструп.
Это Дао по программированию на С++. Там же можно найти информацию об отличиях C от C++ и наоборот.
Но эта книга расчитана (IMHO) на читателей с выше чем начальной подготовкой.
Т.е. было бы неплохо, если Вы до этого на Паскале (или Бейсике) уже программировали.
--------- Life is like a box with chocolate. You never know what you're gonna get. (c) Forrest Gump's mom
Ответ отправил: wils0n (статус: 6-ой класс)
Ответ отправлен: 27.02.2007, 12:04 Оценка за ответ: 5 Комментарий оценки: Было бы идеально если бы вы ещё порекомендовали хороший учебник для начинающих!!! А так спасибо!
Отвечает: Thread
Здравствуйте, Кондрашов Дмитрий!
Основное отличие это то, что C++ это объектно ориентированный Си. Язык Си имеет большое распространение в Linux и в системном программировании, прикладные приложения под Windows пишут как правило на С++.
По С++ советую:
Полный справочник по C++ Герберт Шилдт
http://www.natahaus.ru/2006/10/21/polnyjj_spravochnik_po_c_gerbert_shildt_3e_izdanie.html
Язык программирования С++. Бьерн Страуструп
http://openlib.org.ua/ru/books/id/16/
По Си:
Язык программирования C Брайан Керниган, Деннис Ритчи
http://openlib.org.ua/ru/books/id/14/
Бесплатная среда программирования от Microsoft:
Visual C++ 2005 Express Edition
http://msdn.microsoft.com/vstudio/express/visualc/
Ответ отправил: Thread (статус: 4-ый класс)
Ответ отправлен: 27.02.2007, 23:57 Оценка за ответ: 4 Комментарий оценки: Просил же на русском!
Вопрос № 76.909
Здравствуйт, уважаемые эксперты! Помогите, пожалуйста, найти ошибку (в приложении). Задача такая: в одномерном массиве, состоящем из n вещественных чисел, вычислить сумму целых частей элементов массива, расположенных после последнего отрицательного элемента.
Приложение:
Отправлен: 27.02.2007, 02:27
Вопрос задал: Joeman (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Tek
Здравствуйте, Joeman!
Чёй то мне кажется что вся программа - одна большая ошибка, либо вы наугад расставляли операторские скобки.
Не есть конечно предположение где еще может быть ошибка, но по-этому поводу можно дискутировать долго :-).
По-этому предлагаю следующее решение:
Находим индекс поледнего отрицательного элемента:
int ind = -1;
for (i=n-1; i>=0; ++i)
if (a[i]<0) {ind = i; break;}
// считаем сумму целых частей после него (если отрицательных частей нет -
// считаем сумму по всем элементам)
int sum=0;
for (i=ind+1; i<n; ++i)
sum+=int(a[i]);
/* ну тут вариации - если нужно чистать просто целые части, то применяем abs - содуль числа, если округленные до целого, математически, то округление, а еще есть в математике вроде такое, что целая часть от вещественного - это то которое меньше или равно и целое - значит для отрицательного -1.5 например - целая часть это -2*/
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: Студент)
Ответ отправлен: 27.02.2007, 10:03 Оценка за ответ: 4
Отвечает: Терсков Сергей
Здравствуйте, Joeman!
Главная Ваша ошибка это неверное использование циклов. Для этой задачи требуется всего два прохода по массиву. 1-ый для определения индекса последнего отрицательного элемента и 2-ой (неполный проход) для вычисления суммы целых частей остальных элементов массива. В Вашем исходнике циклов явно многовато, некоторые из них вообще не нужны. Например...
for(a[k]>0; k<n;k++)
первая его часть вообще не имеет смысла, и это видно в предупреждениях компилятора. Так что проще весь текст написать заново...
Приложение:
Ответ отправил: Терсков Сергей (статус: 6-ой класс)
Ответ отправлен: 27.02.2007, 10:10 Оценка за ответ: 4
Отвечает: Ilkras
Здравствуйте, Joeman!
вместо
for(k=ineg+1; k<n;k++)
for(a[k]>0; k<n;k++)
for(k=ineg+1,s=0;k<n;k++)
s+=a[k];
сделайте просто
for(k=ineg+1; k<n;k++)
s+=a[k];
тогда будет работать. Однако это будет работать n раз. Чтобы работало только один раз - удалите самый внешний цикл.
Таким образом получается:
#include<iostream.h>
#include<conio.h>
int main()
{
float a[100];
int i,n,s,ineg;
cout<<"Enter the size of array";
cin>>n;
for(i=0;i<n;i++)
{
cout<<"Value for a["<<i<<"]:";
cin>>a[i];
}
//this cycle finds the index of the last
//negative member in indexes from 0 to n-1
for(ineg = 0,i = 0; i<n; i++)
if(a[i]<0)
ineg=i;
// now compute the required summ
for(i=ineg+1,s=0; i<n; i++)
s += a[k];
cout<<s;
getch();
}
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 27.02.2007, 14:18 Оценка за ответ: 5
Отвечает: kool
Здравствуйте, Joeman!
Все отлично - все компилится!
Только алгоритм не соответствует
тексту программы. Почитайте еще про
циклы. Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 27.02.2007, 20:36 Оценка за ответ: 4
Вопрос № 76.960
Здравствуйте уважаемые эксперты... У меня такая проблема -- я решила переписать свою прогу (отображает анимированные гифы) и вместо GetPixel использовать GetDIBits .
Переписала работает конечно быстрее, но к сожелению не все гифы отображаются корректно... некоторые анимашки чёрно-белые, и наперекосяк... Подскажите плиз -- может у кого есть подобный опят... что мне делать ??? Прилагаю свой код который шлёт в порт по 1 строчке из кадра анимашки (я это вывожу через юсб порт на экранчик)
Приложение:
Отправлен: 27.02.2007, 13:07
Вопрос задала: Annuta (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Tek
Здравствуйте, Annuta!
Айн: Девайсо-независимые битмапы(впрочем как и зависимые) могут быть не только 24-битные но и к примеру 32 (что в наше гнилое время чаще). Про planes (то бишь цветовые плоскости не скажу - не вкурял)
Цвай: Из вышеизложенного следует что количество байт на пиксель совсем не обязательно 3, следовательно в строке не 3*пикселей_в_строке (В 32-битном битмапе в строчке их вааще странное какое то количество).
Драй: Считанный DIB-массив передается с кумулятивным смещением на каждой строчке - поэтому наперкосяк. Да плюс еще и не в своей цветовой палитре.
Ахтунг: Учим матчасть и курим MSDN. Поскольку я вам конкретнее подсказать не могу (ну блин не помню я где мои исходники с DIB, а память - не скажу как у кого).
Советую хорошую (на мой взгляд) книжку по API:
Щупак Win32 API Эффективная разработка приложений. Там пара полезных глав для Вашего случая.
А на сайте www.piter.com к этой книжке есть архив с исходниками для скачивания. И кажется чтоли к 3 главе идет как раз пример сохранения битмапа в файл - а по обратной аналогии разберетесь с выводом из DIB.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: Студент)
Ответ отправлен: 27.02.2007, 15:45 Оценка за ответ: 5 Комментарий оценки: Шпасибо... Дейтсвительно не правильно установила колличество бит на пиксель..! Книжку почитаю..
Ответ отправил: Gremlin (статус: 1-ый класс)
Ответ отправлен: 27.02.2007, 20:05 Оценка за ответ: 1 Комментарий оценки: http://forum.vingrad.ru/topic-138862.html я решила эту проблему вчера на русфаке... А винград к сожелению молчит... Спасибо.
Вопрос № 76.996
Пишу приложение на Visual C++. Необходимо хранить и обрабатывать данные. Можно использовать сторонние СУБД или сделать свою. Как можно реализовать работу с БД средствами Visual C++? Нужно, чтобы таблицы БД можно было редактировать в самой программе.
Отправлен: 27.02.2007, 16:08
Вопрос задал: Wild_one (статус: 5-ый класс)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Tek
Здравствуйте, Wild_one!
Самый первый вариант, который даже в учебниках пишут: хранение информации в файле записей определенной структуры. Совершенно нежизнеспособен в любых случаях, кроме образовательных целей.
Если система будет работать под Windows - самый эффективный способ использовать ODBC API. Во первых практически универсально. В большинстве случаев достаточно поставить драйвера и заменить connection в настройках ODBC и ваша программа работает с БД на другой платформе, но той же структуры.
Вариант следующий: другие библиотеки (в смысле не от Microsoft).
Либо специализированные библиотеки с API от производителей СУБД.
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: Студент)
Ответ отправлен: 27.02.2007, 16:22
Отвечает: Mihasic
Здравствуйте, Wild_one!
Конечно можно использовать БД... редактировать таблицы в студии - это уже сложнее, т.к. обычно сами производители СУБД предоставляют средства для редактирования схем данных и самих данных визуально.
Есть еще общие интерфейсы (драйверы, адаптеры...) - т.е. с различными СУБД можно работать однотипно, не задумываясь о том, какая это БД - например, ODBC, OLE DB, ADO, DAO, ADO.NET (но это применительно к платформе .NET).
Если требуется хранить небольшие объемы данных, то рекомендую задуматься о хранении в файлах специфического формата (свой формат, xml, csv...) или же использовать встроенную БД (наприме, SQLite).
Писать свою СУБД для конкретного приложения - нежелательная трата времени (если конечно полноценную БД), т.к. существует множество уже написанных, при чем людьми, у которых изначально была задача - написать СУБД и все, а Вам скорее всего нужно думать о структуре и работе самого приложения вцелом.
Ответ отправил: Mihasic (статус: 9-ый класс)
Ответ отправлен: 27.02.2007, 16:39
Отвечает: Jadd
Здравствуйте, Wild_one!
Да нет. Я тут уже отвечал на подобный вопрос. Никаких сторонних API и, тем более, разбираться с ODBC API не нужно. Поищи по сайту.
Далее. За неизвестностью версии Visual C++ (а это надо сообщать!!!), перечислю почти все варианты:
1)Класс CRecordset (CDatabase) - в Visual С++ 6.0 можно создать через конструктор классов, в Visual C++ версиями выше надо писать ручками. Удобно, прозрачно, минимум заморочек. Можно подключаться через ODBC, а можно через DAO (CDAORecordset).
2)ADO - можно самому писать классы для более легкого управления табличками, а не через COM. Можно пойти на www.codeproject.com и скачать готовые классы.
Есть еще способы, но их стоит обсуждать исходя из конкретной платформы, т.е. сервера баз данных.
Успехов.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ---- Ответ отправлен: 27.02.2007, 16:40 Оценка за ответ: 5 Комментарий оценки: Спасибо. Самый простой и удобный вариант.
Отвечает: kool
Здравствуйте, Wild_one!
Быстрее работать с базой получается через
ODBC-драйвер.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 27.02.2007, 20:36
Вопрос № 77.005
Здравствуйте, эксперты!
Что не верного в моём коде. Не стабильно работает функция:
при однократном вызове всё "ОК", но в цикле шаге на 3-4-ом возникает ошибка:
AccessViolationException (Attempted to read or write protected memory. This is often an indication that other memory is corrupt.)
Заранее спасибо ВС
Приложение:
Отправлен: 27.02.2007, 16:43
Вопрос задал: VovikDoc (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: Tek
Здравствуйте, VovikDoc!
У вас szBuf= (MAX_PATH+1) * sizeof(wchar_t);
а размер c-строки p MAX_PATH - скорее всего выход за границы массива и есть Access Violation
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: Студент)
Ответ отправлен: 27.02.2007, 16:55
Отвечает: estiGi
Здравствуйте, VovikDoc!
Сразу целый набор из memory leak:
1. CoUninitialize(); нужно вызывать на том же уровне, что и CoInitialize(NULL);
2. psl->Release(); нужно вызывать в том же условии, где вы его и получаете. А то если psl->QueryInterface у вас обломается, то и psl->Release(); не вызовется
3. pfd не освобождается вообще никогда. используйте smart-поинтеры, коточе говоря
4. GetPath(p,szBuf, ... - возможен выход за границы массива, как уже сказали
5. wcsncpy(s, p, wcslen(p)); - вообще непонятнокак? ведь для s выделен размер под 1 символ, а вы пытаетесь туда затолкать весь p, который MAX_PATH
6. память, выделенная для p, освобождается некорректно и неполностью
7. память, выделенная для s, не освобождается вообще
итого - используйте smart-pointer'ы, не играйтесь с указателями, пока не научитесь с ними обращаться, т.е. уделите большое внримаение использованию указателей, это ваш пробел в знаниях, имхо. критический.
Ответ отправил: estiGi (статус: Студент)
Ответ отправлен: 27.02.2007, 17:08
Отвечает: Ilkras
Здравствуйте, VovikDoc!
В вашем примере функция CoInitialize вызывается каждый раз, в то время как CoUninitialize вызывается не каждый. Кроме того в MSDN пишут следующее: "It is convenient to use CoCreateInstance when you need to create only a single instance of an object on the local machine." Вы же вызываете функцию CoCreateInstance последовательно несколько раз.
Еще одно соображение.
Вы выделяете память под s как new WCHAR[1], а сколько вы туда копируете в wcsncpy(s, p, wcslen(p)); ? Попробуйте распечатать величину wcslen(p) перед копированием.
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 27.02.2007, 18:19
Отвечает: kool
Здравствуйте, VovikDoc!
CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW,
(LPVOID*)&psl) == S_OK - получили интерфейс IShellLinkW. А кто его освобождать-то будет?
Кроме того if (hres == S_OK || hres == S_FALSE), а
CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLinkW, (LPVOID*)&psl) != S_OK, то CoUninitialize(); не будут выполнено.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 27.02.2007, 20:34
Вопрос № 77.037
Здравствуйте эксперты!
Просьба отвечать тем кто рельно понимает о чем я говорю.
Пишу архиватор с алгоритмлм сжатия Шенона-Фано в Visual c++. Столкнулся спроблемой: каким образом мне считывать символьную информацию с разных типов файлов для того чтобы ее потом сжимать(считывать с exe doc txt html), как создать фаил с собственным форматом и расширением в котором будут храниться сжатая информация и таблица для её расжатия, каким образом мне разжимать разные типы файлов как этот процесс дожен быть сделан. Меня интересует работа с файлами.
И если я получу при от алгоритма строку например 1010101010101 то как сделать так чтоб строка записалась в фаил причем не как текст а как биты
Отправлен: 27.02.2007, 20:41
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 3)
Отвечает: kool
Здравствуйте, Tatarin!
Открывай файл как бинарный и считывай чем хош.
Если нужна скорость используй отображение файла на память
и потом работай с файлом как с массивом.
>как создать фаил с собственным форматом и расширением
создавай как обычный файл, с форматом и расширением, которые
сам и придумаешь.
С битами работают с помощью масок и операторов &, ~ и |.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 27.02.2007, 22:48
Отвечает: Sergijj
Здравствуйте, Tatarin!
Чтобы убрать привязку к типу файла нужно читать и писать файл как НЕтипизированный (Сырой, двоичный (бинарный) код).
С записью - то же самое.
Но для того чтобы что-нибудь создать (например формат файла) нужно это самое что-нибудь сначала прИдумать/прОдумать...:)
Работать в памяти (с массивом например) удобнее и быстрее, чем с файлом. Поэтому перед обработкой файла нужно его (файл) прочитать в какой-нибудь буфер памяти.
С битами _строкой_ работать НЕ нужно. Легче / лучше /быстрее работать с _числами_.
Успехов!
Спрашивайте если чего...
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 8-ой класс)
Ответ отправлен: 28.02.2007, 10:12 Оценка за ответ: 5 Комментарий оценки: Спасибо!
Вопрос № 77.083
Всем привет!
Нужно сделать программу с модулями.Тоесть есть оснавная программа,она представляет собой меню (обычное,c циферками (switch)),из этого меню должны вызываться другии программы (как бы модули).Вопрос в том как вызвать эти программы из меню?И в каком формате они вообще должны быть?Правила описания и все такое.
Транслятор у меня TURBO C++ 3.0. Желательно привести код для чистого си.
Спасибо за помощь).
Отправлен: 28.02.2007, 00:54
Вопрос задал: Ogogo (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 2)
Отвечает: Ilkras
Здравствуйте, Ogogo!
насколько я помню в Turbo C 3.0 (для DOS) были вызовы launch() и exec(). С их помощью можно было загрузить исполняемый модуль и этот модуль вытеснял из памяти вызывающий модуль.
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 10:47 Оценка за ответ: 4 Комментарий оценки: не то,но спосибо за ответ
Вопрос № 77.085
Здраствуйте Эксперты. Посоветуйте пожалуйста литературу или ссылочку дайте, по программированию на С++, для новичков. Заранее благодарю.
Отвечает: Рязанов Максим Валерьевич
Здравствуйте, Киор Ярослав Николаевич!
Книжки можно посмотреть здесь:
1. http://c-books.info/books/load.php?ty=c
2.http://4read.org/
3. natahaus.ru
Я лично начинал изучать С++ с Бьерна Страуструпа. Скачать можно: http://www.megaupload.com/?d=OARL7G9H или http://rapidshare.com/files/2548034/jazyk_programmirovanija_s_bern_straustrup.rar.
Размер: 2.65 Mb
Удачи!
Вот у меня такой вопрос: как написать многотомное приложение, т.е. есть некая программа которая обрабатывает запросы других программ. (на подобии сервера БД)?
Заранее благодарен!.
Отправлен: 28.02.2007, 03:56
Вопрос задал: FreeCube (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: lupus campestris
Здравствуйте, FreeCube!
Вам поможет книжка Шона Уолтона "Создание сетевых приложений в среде Linux. Руководство разработчика".
Удачи!
--------- «С кем тяжело молчать, с тем не о чем говорить» (Метерлинк)
Ответ отправила: lupus campestris (статус: Профессор) Россия, Москва Тел.: +79060429689 Организация: http://www.orange-business.ru WWW:http://lupus-campestris.blogspot.com/ ICQ: 193918889 ---- Ответ отправлен: 28.02.2007, 19:11
Отвечает: kool
Здравствуйте, FreeCube!
Можно использовать технологию DCOM.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 21:12
Вопрос № 77.122
Уважаемые эксперты!
Столкнулся с трагической проблемой.
Работаю с gcc 3.3.3 RHL9 and PPC_8xx
Я использую C и C++. И после сшивки приложения получаю смертельную зависисмость от libstdc++.so.5.
# readelf -a ./myappl | grep "Shared"
0x00000001 (NEEDED) Shared library: [libstdc++.so.5]
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
Она размером почти 800 Кб. Это смертелно для Flash. Статическая линковка тоже смертельна, та как бинарный файл очень большой.
Я видел, что можно получить
# readelf -a ./myappl | grep "Shared"
0x00000001 (NEEDED) Shared library: [libm.so.6]
0x00000001 (NEEDED) Shared library: [libc.so.6]
К сожалению, мне не к кому больше обратиться. Я очень надеюсь на помощь и совет, как я могу сшиться таким образом, чтобы libc.so.6 динамически подшивалась, а libstdc++.so.5 статически. Переписать все на С - просто катастрофа.
Отвечает: Ilkras
Здравствуйте, Alex CogitoErgoSum!
Я чего-то недопонимаю в вашем вопросе. Если статическая линковка смертельна - файл не влазит в ROM - значит и динамическая линковка не поможет. Ведь статическая линковка выбирает только используемые функции, а при динамической вы храните все функции и потом подгружаете только те, что нужны. Вообще, для embedded, статическая линковка предпочтительнее.
Проверьте, нет ли отладочной информации в библиотеках. Попробуйте сделать strip на ваш image. Если не поможет, то посмотрите в библиотеках какие функции сколько места занимают - может быть сможете имплементировать по другому и уменьшить ваш footprint.
А вообще - опишите вашу систему поподробнее, что за железо, что за система...
Удачи
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 11:20
Отвечает: ramok
Здравствуйте, Alex CogitoErgoSum!
при линковке укажите явно libstdc++.a с ключиком -L
узнать где он находится можно
g++ -print-file-name=libstdc++.a
например
g++ -L`g++ -print-file-name=libstdc++.a` -другие-опции
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 01.03.2007, 03:20
Вопрос № 77.131
Здравствуйте Уважамаемые Эксперты!!
Помогите реализовать задачу на языке C++!!!
Даны две строки символов S и T. Необходимо определить сколько раз строка T входит в строку S и удалить первое и последнее вхождение T в S.
В условии сказанно что данные считываються из текстового файла in.txt
и результат тоже записываеться в текстовый фаил out.txt
Отвечает: Ilkras
Здравствуйте, Михальчук Максим!
Здравствуйте, Михальчук Максим!
похожая задача была пару дней назад. В дополнение к данному уже решению:
Данные из текстового файла считываются в строку следующим образом
Приложение:
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 14:51
Отвечает: Терсков Сергей
Здравствуйте, Михальчук Максим!
Второй раз уже вижу этот вопрос, но на C++ на него Вам так никто и не ответил. Так что вот...
Входной файл in.txt
test this is a test test test
test
Выходной файл out.txt
Count of string T in string S is : 4
String S after transformations :
this is a test test
Приложение:
Ответ отправил: Терсков Сергей (статус: 6-ой класс)
Ответ отправлен: 01.03.2007, 03:09
Вопрос № 77.155
Приведите пожалуйта пример как можно маписать в фаил пару бит
Отправлен: 28.02.2007, 14:34
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ilkras
Здравствуйте, Tatarin!
Здравствуйте, Tatarin!
К сожалению, невозможно записать в файл ровно 2 бита, однако если запись одного байта вас устроит, то смотрите:
FILE * fp;
char ParaBit;
fp = fopen("file.txt","wb");
fwrite(&ParaBit, 1, 1, fp);
fclose(fp);
Счастливо
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 14:55
Отвечает: Tek
Здравствуйте, Tatarin!
К сожалению файловые системы оперируют в большинстве своем байтами - большое упущение со стороны разработчиков стандартов (кстати я не прикалываюсь и не издеваюсь, иногда нужно, хоть и оооочень редко), по-этому выставляем в байте нужные биты, и пишем этот один байт в файл, напрмер так(используем Win32API):
HANDLE hFile = CreateFile("file.bin", GENERIC_WRITE | GENERIC_READ, FILE_SHARE_READ, (SECURITY_ATTRIBUTES *)NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL | FILE_FLAG_WRITE_THROUGH, NULL);
BYTE bt = 2;
DWORD dw = 0;
WriteFile(hFile, &bt, 1, &dw, NULL);
CloseHandle(hFile);
--------- WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: Студент)
Ответ отправлен: 28.02.2007, 15:01 Оценка за ответ: 5 Комментарий оценки: Молодес!
Отвечает: Gremlin
Здравствуйте, Tatarin! В приложении простенький метод, который устанавливает в файле бит,спозициионированный на BitNumber, в значение BitValue. Поскольку минимальное количество информации при работе с файлами равно одному байту, то необходимо сначала считать байт, содержащий данный бит, выставить в нем значение бита, а затем уже записать по-новой этот байт обратно в файл.
В методе подразумевается, что BitNumber физически уже существует в файле, поэтому проверок на его отсутствие я не делал.
Приложение:
Ответ отправил: Gremlin (статус: 1-ый класс)
Ответ отправлен: 28.02.2007, 16:54
Отвечает: kool
Здравствуйте, Tatarin!
В файле можно сохранять не менее байта.
Чтобы сохранить два бита нужно сохранить байт
у которого заданные два бита имеют
определенное значение (см.пример).
Удачи!
Приложение:
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 20:40
Вопрос № 77.185
Спаибо всем за предыдущую справку!
Вопрос:
Напишите подробнее про переменную типа BYTE эта переменная может хранить инфу размером в один байт или как?
Допустим у меня есть целочисленный массив из разных значения типа 111010101 могу-ли я присвоить значения этого массива переменной типа BYTE и как присваивать ведь один байт это 8 бит т.е. в одну переменную типа BYTE поместится 10101010 или нет?
Как в байте выставить нужные биты?
И еще одно 8-)
У меня есть переменная типа char mass[]="10010101" как мне записать эту битовую строчку в фаил и как считать её потом, или надо использовать int b=10010101? заранее спасибо/
Отправлен: 28.02.2007, 18:17
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 5 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ilkras
Здравствуйте, Tatarin!
байт это 8 бит. Иначе BYTE = unsigned char.
запись константы может быть в бинарной или десятичной форме. можно записать
unsigned char A = 11101010b; или
unsigned char A = 234;
unsigned char A = 0xEA; в шестнадцатеричной форме.
для того чтоб записать строчку в файл надо использовать обычный интерфейс типа write(), fwrite(), FileWrite() etc. Чтобы превратить строчку с числом в число можно пользоваться функциями sscanf(), atoi().
если вы хотите выставить бит N в байте в 1, то воспользуйтесь операцией
unsigned char A;
A = A|(1<<N);
если вы хотите выставить бит N в байте в 0, то воспользуйтесь операцией
A = A&(0xFE<<N);
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 18:29
Отвечает: Gremlin
Здравствуйте, Tatarin!
int b=10010101 - это десятичная запись, поэтому битовое представление b будет уже другим(00000000100110001011110111110101). Точно так же обстоят дела и с char mass[]="10010101".Только битовая версия строки будет совокупностью байт, соответствцющих ASCII-кодам символов '0' и '1', которые соответственно равны десятичным цифрам 48 и 49. Если у вас есть реальная битовая строка, которая в последствии не будет меняться, то быстрее всего будет разбить эту последовательность на блоки, размерностью по 64,32,16
или 8 бит, забить эти блоки в калькулятор, перевести их в десятичное представление, и уже манипулировать в программе десятичными числами.
Размер блока - выбирайте на свое усмотрение, но ТИП, используемый для хранения соответвтвующих десятичных чисел должен соответствовать следующим отношениям:
Для 64 битных блоков, используйте целочисленный тип __int64 или LONGLONG
Для 32 битных блоков, используйте целочисленный тип DWORD или ULONG
Для 16 битных блоков, используйте целочисленный тип WORD
Для 8 битных блоков, используйте целочисленный тип BYTE
BYTE - это тот же char, только без знака, т.е. unsigned char
Метод, который я привел предыдущим сообщением как раз и выставляет заданный бит в байте.
Ответ отправил: Gremlin (статус: 1-ый класс)
Ответ отправлен: 28.02.2007, 18:49 Оценка за ответ: 5 Комментарий оценки: Спасибо
Отвечает: Thread
Здравствуйте, Tatarin!
В С/С++ переменная размером в 8 бит это char. Она может принимать значения -127..127. Аналог паскалевского byte это unsigned char (т.е. беззнаковый). Заметьте, что char - это не символ, это целый тип. Что бы присвоить такой переменной значение char mass[]="10010101" нужно перевести это число в десятичное значение.
Приложение:
Ответ отправил: Thread (статус: 4-ый класс)
Ответ отправлен: 28.02.2007, 19:18 Оценка за ответ: 5 Комментарий оценки: Ок понял спаибо
Отвечает: kool
Здравствуйте, Tatarin!
Да - переменная типа BYTE может содержать
инфу в один байт.
Нет не можешь. Тип int в Win32 занимает 4-ре байта.
А значения из четырех байт не поместиться в один байт, а
тем более массив!!!
Биты в байте выставляются с помощью масок и операций &, ~ и |.
Почитать можно в любом учебнике по C.
Чтобы записать строку char mass[]="10010101"
в переменную BYTE b см.приложение.
Удачи!
Приложение:
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 20:40
Отвечает: Ross
Здравствуйте, Tatarin!
Считаю своим долгом объяснить, почему предыдущие эксперты использовали тип unsigned char в качестве одного байта.
Любой тип данных в языке C имеет свою размерность:
char,bool - 1 байт
short - 2 байта
long,float,int - 4 байта
long double,double - 8 байт
Т.е. , как ты видишь, типы переменных одной и той же размерности могут хранить данные различного типа, разница лишь в том, как эти байты интерпретируются.
Теперь насчет "типа" BYTE. В одном из заголовочных файлов находится строчка:
typedef unsigned char BYTE;
Т.е. BYTE = unsigned char
Конечно, массив в один байт не поместится, но можно выставить биты в нем в соответствии с числами в массиве, например так:
BYTE b;
char m[]="10010001";
for (int i=0; i<8; i++)
{
mas[i]-=48;
b<<=1;//сдвигаем биты влево на 1
if (m[i]) b|=1; else b&=254;
}
число 1 в двоичном виде 00000001, зн. операция x|=1 установит последний бит в 1
число 254 - это 11111110, зн. x&=254 установит последний бит в 0
Ответ отправил: Ross (статус: 6-ой класс)
Ответ отправлен: 01.03.2007, 02:12 Оценка за ответ: 5 Комментарий оценки: Спасибо за справку вроде бы все понял!
Вопрос № 77.190
Здравствуйте. Подскажите пожалуйста, как можно опредилить время работы программы?
Отправлен: 28.02.2007, 18:46
Вопрос задал: Platon (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ilkras
Здравствуйте, Platon!
в windows можно посмотреть в "Task Manager"
в linux с помощью утилиты "top"
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 18:55
Отвечает: Gremlin
Здравствуйте, Platon!
Воспользуйтесь методом GetTickCount, он возвращает число милисекунд, прошедшее с момента запуска операционной системы.
чтобы вычислить время в заданном диапазоне, нужно вычесть значение этой функции перед окончанием работы из значения этой функции после начала работы.
Ответ отправил: Gremlin (статус: 1-ый класс)
Ответ отправлен: 28.02.2007, 18:57
Отвечает: kool
Здравствуйте, Platon!
Для этого служат профилировщики.
Смотрите "Enable Profiling" в MSDN.
Можно также с помощью функций использования системного времени
банально засечь время, что бывает более точно.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 20:40
Отвечает: ramok
Здравствуйте, Platon!
в юникс подобных системах время выполнения программы измеряется програмкой time
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 01.03.2007, 02:28
Вопрос № 77.204
Каким образом с помощью api можно запустить на выполнение фаил кроме как system() и ShellExecute()?
Отправлен: 28.02.2007, 20:27
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Расшифровка параметров в MSDN и по поиску на сайте.
Успехов.
--------- Если в сердце дверь закрыта, нужно в печень постучаться
Ответ отправил: Jadd (статус: Профессионал) Адрес: Санкт-Петербург WWW:http://www.sport-diary.ru ---- Ответ отправлен: 28.02.2007, 20:34
Отвечает: kool
Здравствуйте, Tatarin!
Смотри, например, CreateProcess(.....).
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 20:42
Вопрос № 77.205
Добрый день, уважаемые господа эсперты!
Не могли бы вы мне на каком-нить простом примере показать использование функции EnumPrunters(...)?
На текущий момент, к сожалению, я не смог добиться от нее никакой работоспособности. В приложении кусок экспериментального кода. Скажите мне, пожалуйста, где я не прав.
Приложение:
Отправлен: 28.02.2007, 20:32
Вопрос задал: Karlson (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: kool
Здравствуйте, Karlson!
Имхо Вместо DWORD size_buf=4096;
Нуно так - DWORD size_buf=sizeof(PRINTER_INFO_2);
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 21:12
Отвечает: John Paramol
Здравствуйте, Karlson!
Посмотрите простой пример кода, отображающего список принтеров.
При первом вызове EnumPrinters получаем количество установленных в системе принтеров.
При втором - в массив структур PRINTER_INFO_2 заносится информация.
Удачи
Приложение:
--------- 1=2, at values 1 large enough
Ответ отправил: John Paramol (статус: 6-ой класс)
Ответ отправлен: 01.03.2007, 09:37
Отвечает: Sergey A. Wedensky
Здравствуйте, Karlson!
Пример получения списка локальных и сетевых принтеров.
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 01.03.2007, 10:56
Вопрос № 77.207
Здраствуйте!скажите пожалуйста я хочу изучать С++ и незнаю что делать качать от микрософта Visual C++ Express 2005 (кажеться так называеться),или же пойти и купить С++ 6.0 ?
Если можете дайте исчерпающий ответ!
Отправлен: 28.02.2007, 20:40
Вопрос задал: DarkHacker (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ilkras
Здравствуйте, DarkHacker!
компилировать программы на С++ вы сможете любым компилятором С++. Так что вам надо решить, что вы хотите писать, запастись книжками, полазать по интернету - поискать статьи на интересующую вас тему и, только потом, вы сможете выбрать подходящий инструментарий.
Для того чтобы научиться писать программы на С++ вам вполне хватит бесплатного gcc. Посмотрите cygwin на redhat.com или Dev-C++ например на tucows.com.
Последняя версия Microsoft Visual C++ вам необходима, только если вы хотите использовать последние технологии этой фирмы, а это уже зависит от выших планов (смотри выше).
Удачи.
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 22:28 Оценка за ответ: 5 Комментарий оценки: С этим ясно а вот что использовать:
Visual C++ 6
илли Visual C++ 2005 Express Edition Beta 2
или посоветуйте что нибудь свое...
Отвечает: Thread
Здравствуйте, DarkHacker!
Между двумя рассматриваемыми IDE разницы принципе нет. Ставьте ту, которую вам проще добыть - вы ничего не потеряете. Единственное существенное отличие - это в возможность создания C++.NET приложений в новой среде, но для новичка это не нужно. Еще я вам советую обратить внимание на бесплатную среду Eclipse.
Ответ отправил: Thread (статус: 4-ый класс)
Ответ отправлен: 01.03.2007, 07:34
Вопрос № 77.219
Все с битами разобались а теперь разберемся чего я хочу
Я считываю из файла строку ну например "мама мыла раму" при помощи алгоритма шенона-фано
я поеобразую эту строку в что то типо 0010101010 (это конечно не точно так но что то бодобное) сейчас эти нули и единицы это символы типа char теперь надо умудриться сделать так чтобы именно эти символы именно в этом порядке без добавления лишнего материала и.т.п оказались в бинарном файле в виде бинарного кода (не приобразовавать по таблицам апросто чтоб это стало содержимым бинарного файла, т.е. было битовым представлением) уже незнаю как обьяснить 8-)
Отправлен: 28.02.2007, 21:36
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Ilkras
Здравствуйте, Tatarin!
я думаю, что оптимально будет считывать по 8 символов, превращать их в один байт и писать его в файл (или в буфер, а потом в файл). Как преобразовать "0" или "1" в бит вы уже знаете. Символ в число, в данном случае, проще всего преобразовать так if(ch =='1'){c = 1;} else {c = 0;}. Чтоб преобразовать 8 символов подряд - делайте это в цикле:
for(i=0; i<8; i++)
{
if(string[i] == '1')
my_byte |= (1<<i);
else
my_byte &=(0xFE<<i);
}
Недостаток этого метода - низкая скорость. На кодирование одного бита тратится много операций (около 10 команд ассемблера я думаю).
Преимущество - простота и отлаживаемость.
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 28.02.2007, 22:40
Отвечает: kool
Здравствуйте, Tatarin!
А в чем дело - упаковывай их в байты (по 8 бит в каждом)
и записывай в файл.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 28.02.2007, 23:21
Отвечает: Sergey A. Wedensky
Здравствуйте, Tatarin!
Вот Вам две функции - запись строки вашего вида в бинарный файл и чтение обратно. Работа с файлами - на WinAPI. Первые 4 байта файла - заголовок - истинная длина исходной строки (нужна, т.к. в файл можно записать только целое число байт, т.е. кратное 8 число бит).
Приложение:
Ответ отправил: Sergey A. Wedensky (статус: Студент)
Ответ отправлен: 01.03.2007, 10:55 Оценка за ответ: 5
Вопрос № 77.252
Здарово всем! ;)
Скажите пожалуйста как теперь из файла в который я назаписывал биты их считать да так чтоб затем представить их в виде строки? ну тоесть для тех кто отвечал на предыдущие мои вопросы нужно объяснить мне как повернуть процесс в обратном направлении.
Кстати всем кто мне помогал большой respect и спаибо!
Отправлен: 01.03.2007, 04:27
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 6 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: ramok
Здравствуйте, Tatarin!
считать строку из файла
char str[10];
FILE *f;
/*открываем перед этим файл fopen() в переменнную f */
fgets(str, 9, f);
Ответ отправил: ramok (статус: Практикант)
Ответ отправлен: 01.03.2007, 04:34
Отвечает: kool
Здравствуйте, Tatarin!
Считываешь байты, снимаешь с них маску
все теми же операциями &,|,<< и записываешь
эти значениея в массив.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 07:52
Отвечает: Tamashev Denis M
Здравствуйте, Tatarin!
Ну так в чём трабл.
CreateFile
ReadFile
SetFilePointer
Ответ отправил: Tamashev Denis M (статус: 3-ий класс)
Ответ отправлен: 01.03.2007, 09:32
Отвечает: Sergijj
Здравствуйте, Tatarin!
Если биты записаны в файлике в виде _текста_, то см. ответ ramok.
Если биты записаны в файлик в виде _числа_, то:
int bits = 0; // Переменная, куда будем записывать то, что в файле
char bitString[100]; // Буфер из символов = строка, куда будем складывать символы, полученные после переконвертации числа в строку.
int f = open("file.bit", O_RDONLY); // Открываем файл на чтение
read(f, &bits, sizeof(int)); // Считываем 2 (или 4, - в зависимости от платформы) байта в переменную bits. Переменная bits занимает sizeof(int) байт! Больше sizeof(int) байт сюда считывать нельзя! Если хотите прочитать из файла много байт, то используйте какой-нибудь буфер, например массив.
itoa(bits, bitString, 2); // Конвертируем число bits в строку bitString, используя в качестве основания двойку (ибо хотим получить двоичную систему счисления);
printf("
Binary: %s", bitString); // Печатаем получившуюся строку
close(f); // Закрываем файл
Должно быть типа того...
Успехов!
--------- Стучитесь! И Вас откопают...
Ответ отправил: Sergijj (статус: 8-ой класс)
Ответ отправлен: 01.03.2007, 09:48 Оценка за ответ: 5
Отвечает: Ilkras
Здравствуйте, Tatarin!
Считываете текст в строчку. Выделяете в 8 раз больше места для результата.
Далее, побайтно делаете следующее:
for(k = 0; j=0; j<strlen(incoming_string); j++,k+=8)
for(i=0;i<8;i++)
{
if((1<<i)&incoming_string[j])
outgoing_string[k+i] = '1';
else
outgoing_string[k+i] = '0';
}
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 01.03.2007, 10:58 Оценка за ответ: 5
Отвечает: Gremlin
Здравствуйте, Tatarin!
в приложении обратный метод, он считывает весь файл и конвертирует его содержимое в битовую строку, ASCII вида. Здесь я использовал STD-контейнер string для хранения результата. Принцип, как видите прост: читаем файл во временный буфер. Пробегаем каждый его байт и тестируем каждый бит байта.
Результирующая строка будет, соответственно больше размера файла в 8 раз.
Приложение:
Ответ отправил: Gremlin (статус: 1-ый класс)
Ответ отправлен: 01.03.2007, 12:59 Оценка за ответ: 5
Вопрос № 77.346
все наверно знают о существовании такого заголовочного файла как <biset>
почему когда я пишу что-то типо:
<bitset>
int main()
{
bitset <100> b1;
return 0;
}
компелятор пишет 'bitset' : undeclared identifier
C:filefile.cpp(15) : error C2065: 'b1' : undeclared identifier
C:filefile.cpp(15) : warning C4804: '>' : unsafe use of type 'bool' in operation
C:filefile.cpp(15) : warning C4552: '>' : operator has no effect; expected operator with side-effect
Error executing cl.exe.
Хотя я читал примеоы в разных книгах там пишут что все должно тработать
У меня cpp Visual 6
Отправлен: 01.03.2007, 16:50
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 4 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Thread
Здравствуйте, Tatarin!
Класс bitset находиться в пространстве имен std
Приложение:
Ответ отправил: Thread (статус: 4-ый класс)
Ответ отправлен: 01.03.2007, 16:58 Оценка за ответ: 5
Отвечает: V1s0r
Здравствуйте, Tatarin!
Во всех мне известных книгах C++ для начинающих написано, что все функции/классы стандартной библиотеки C++ заключены в пространство имён std.
Нужно нписаль либо
using namespace std;
либо
using std::bitset;
Отличия между ними - также в любой книжке (если этого в книге нет, то выкиньте эту книгу в форточку).
Ответ отправил: V1s0r (статус: 2-ой класс)
Ответ отправлен: 01.03.2007, 17:13
Отвечает: Ilkras
Здравствуйте, Tatarin!
действительно есть такой header, но писать надо
#include <bitset>
Удачи
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 01.03.2007, 17:15
Отвечает: kool
Здравствуйте, Tatarin!
Нуно так (см. приложение):
Приложение:
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 20:31 Оценка за ответ: 5 Комментарий оценки: thanks very mach
Вопрос № 77.367
Напишите пожалуйста на примеhе как пользоваться функцией OpenFile
Отправлен: 01.03.2007, 18:58
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 1)
Отвечает: kool
Здравствуйте, Tatarin!
--------------------------
См. прил.
--------------------------
Удачи!
Приложение:
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 20:33
Вопрос № 77.368
Еще раз всем привеД!
Вопрос правильно ли я записываю в фаил биты
и ещё вопрос как мне их оттуда считать
Приложение:
Отправлен: 01.03.2007, 19:00
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 2 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: kool
Здравствуйте, Tatarin!
Все правильно. Только записываются байты, содержащие нужные биты.
Но быстрее будет так (см. приложение).
Чтобы получить биты из файла нуно считать байты, которые их содержат,
а потом уже можно работать с необходимыми битами, которые содержатся в этих
байтах.
Удачи!
Приложение:
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 20:32 Оценка за ответ: 5 Комментарий оценки: Огр Спосибо )))))
Отвечает: Ilkras
Здравствуйте, Tatarin!
почти правильно.
1) надо инициализировать переменную (чтоб проще отлаживаться было)
2) побитовый сдвиг влево надо делать после присвоения бита, иначе у вас первый бит теряется.
в остальном, похоже, все правильно
Ответ отправил: Ilkras (статус: 2-ой класс)
Ответ отправлен: 01.03.2007, 20:58 Оценка за ответ: 5
Вопрос № 77.380
Здравствуйте Уважаемые Эксперты, помогите разобраться. Проблема вот в чём: я написал программу, в ней есть всякие настройки, когда запускаешь и настраиваешь, то всё работает, но когда выключаешь и запускаешь заново, то все настройки пропадают, как можно сделать чтоб они сохранялись. Спасибо.
Отправлен: 01.03.2007, 20:14
Вопрос задал: Leajoker (статус: Посетитель)
Всего ответов: 3 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: Thread
Здравствуйте, Leajoker!
Вам нужно сохранить ваши настройки в файл. Например в INI. Лично я использую XML для хранения настроек.
Ответ отправил: Thread (статус: 4-ый класс)
Ответ отправлен: 01.03.2007, 20:27
Отвечает: kool
Здравствуйте, Leajoker!
Нужно сохранять настройки в файле конфигурации,
а при запуске проги считывать их оттуда.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 20:33
Отвечает: Patriotix-N
Здравствуйте, Leajoker!
Конечно можно создавать и ini, и xml файлы. Можно сохранить настройки в простой текстовой файл.
Иногда полезно сохранять настройки в реестре.
Можно в МСДНе поискать, а можно и в инете.
Вот несколько ссылок по реестру и файлам инициализации:
http://www.hostmake.ru/articles/c/241/
http://forum.sources.ru/index.php?showtopic=119084
Вообще по С++ много информации: http://www.cracklab.ru/pro/cpp.php?
--------- Лучше знать ничего обо всем, чем все ни о чем.
Ответ отправил: Patriotix-N (статус: 3-ий класс)
Ответ отправлен: 01.03.2007, 21:19
Вопрос № 77.387
Ура товарищи теперь я научился записывать и считывать биты в и из файла!
если это переделывает строку в биты
char mass[]="11010100";BYTE my_byte;
for(int i=0; i<8; i++)
{
my_byte<<=1;
if(mass[i] == '1')
my_byte |= 1;
}
то каким мне образом сделать обратное, т.е. забить массивчик char mass2[8] из байта BYTE b
Да и ещё kool обьясни пожалуйста что в твоем прошло ответе значило my_byte |= (0x80>>i); я так понял что это сдвиг, но не понял как именно!
Отправлен: 01.03.2007, 21:04
Вопрос задал: Tatarin (статус: Посетитель)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: kool
Здравствуйте, Tatarin!
>Да и ещё kool обьясни пожалуйста что в твоем прошло ответе значило
>my_byte |= (0x80>>i); я так понял что это сдвиг, но не понял как именно!
Смотри за руками: 0x80 - это шестнадц-ное. предсатвление байта,
кот. состоит из след. битов 0x80=10000000b.
Сначала сдвигаем эту посл-ть вправо на i, а затем маскируем с my_byte.
Т.е. если, например, i=5, и my_byte=0x40=01000000b, то 0x80>>5=00000100b,
my_byte|=00000100b = my_byte=my_byte|00000100b = 01000000b|00000100b =
01000100b. (Т.к. сначала my_byte =0, то нулевые биты можно не обрабатывать -
они и так на своих местах. Твой код вообще говоря не правильный.
Нужна инициация my_byte =0. См. внимательно пред. прил-ние.)
От того куда ты будешь двигать маску зависит порядок бит в твоем байте.
Код кот. я тебе передал сохраняет порядок бит в байте таким же как в массиве
mass2[8]. Первый бит этого массива - старший бит байта. Если хочешь
поменять порядок, нуно делать так -
my_byte=0;
.......
my_byte |= (1<<i); //1=00000001b
.......
Лучше тебя самого тебе никто не объяснит. Почитай про битовые операции -
это в каждом учебнике по C. Посмотри все в отладчике. Если чего не
понятно еще спрашивай.
Удачи!
--------- I am.
Ответ отправил: kool (статус: 10-ый класс)
Ответ отправлен: 01.03.2007, 23:09
Вопрос № 77.398
Здравствуйте Эксперты!
Я начал изучать С++. Как написать код, который будет выполнять функции через определённый промежуток времени. Например выполняется функция func(), проходит две секунды и выполняется следующая функция.
И ещё вопрос: Как написать код, который открывает сторонний файл на жёстком диске. Например я запускаю исходный файл, а он открывает файл с расширением *.bmp.
Отправлен: 01.03.2007, 21:53
Вопрос задал: Shkiperr (статус: 3-ий класс)
Всего ответов: 1 Мини-форум вопроса >>> (сообщений: 0)
Отвечает: kool
Здравствуйте, Shkiperr!
Для приостанова выполнения программы
на определенное время есть такая ф-ция