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

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


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

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

Выпуск № 726
от 01.05.2007, 13:05

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


Вопрос № 84149: Как сделать так чтобы результаты проги записывались в текстовый файл!!!!!! помогите пожалуйста!!!!! Заранее спасибо!!!! ...
Вопрос № 84168: Здравствуйте, уважаемые эксперты! Где можно найти задачи на C++ для новичков, которые недолго изучают этот язык программирования? Хочу потренироваться....
Вопрос № 84184: Здравствуйте! Каким образом в диалоговом окне делают нечто вроде выпадающей вкладки? Т.е. в диалоговом окне есть такая стрелочка на неё жмешь и ваезжает вторая чать диалогового окна до этого момнета не видимая? Спаибо!...
Вопрос № 84217: Здравствуйте, эксперты. Помогите кто сколько может! Я пишу программу в Borland C++ Builder 6.0. Возникает проблема при обращении к элементам связного списка, состоящего из структур Region, в функции Quadtree(...). На 1-й итерации (если считат...
Вопрос № 84219: Доброго времеми суток, уважаемые эксперты. У меня будет к вам 2 вопроса. Вопрос первый: Есть некая переменная (может принимать значения 5, 10, 15, 20) которая храниться в int массиве Array[1]. Есть таймер. И еще есть ProgressBar. Ка...
Вопрос № 84238: Доброго времени суток. Эксперты, помогите чайнику. Попытался использовать ShellExecute, а компилятор рассыпался в 153 ругательствах: все не могу привести, слишком их много. Компилятор: Visual C++ 2005. Что я не так сделал?...
Вопрос № 84241: Уважаемые эксперты!!! Помогите переформатировать массив типа char buffer_1[1024] в массив типа char buffer_2[2048]. Предпологается: читаем из Comport ComPort1-> Read(buffer_1,Count); и имеем в burffer_1:{0x00,0xFF} Нужно переформатировать ...
Вопрос № 84276: здраствуйте уважаемые эксперты. Я пишу на С++ Bulder 6, так вот мой вопрос: как написать программу для Windos XP, чтобы программа вывела в LPT порт файл написаный в шеснадцатиричном коде. какие основные принципы для написания ...
Вопрос № 84290: Доброго всем времени суток!!! У мемя возникла проблемка. { FILE *fn1,*fn3; .... fn3=fopen(PathNum.c_str(),"r"); do{ fgets(Num,32,fn3); if(Num[strlen(Num)-1]==' '){Num[strlen(Num)-1]=0;}<b...

Вопрос № 84.149
Как сделать так чтобы результаты проги записывались в текстовый файл!!!!!! помогите пожалуйста!!!!! Заранее спасибо!!!!
Отправлен: 25.04.2007, 15:19
Вопрос задал: Maratka (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ilkras
Здравствуйте, Maratka!
самый лучший способ - пользоваться fprintf вместо printf, тогда все будет записано в файл.
на скорую руку можно перенаправить вывод консольной аппликации в файл с помощью операции ">". например:
ping 127.0.0.1 > my_file.txt - перенаправить и записать в файл
type my_fyle.txt - распечатать файл в консоль
Ответ отправил: Ilkras (статус: 8-ой класс)
Ответ отправлен: 25.04.2007, 16:08

Отвечает: kool
Здравствуйте, Maratka!
Если прога консольная,
то в командной строке пишем
имя_проги.exe ее_параметры > имя_файла_куда_будет_записано_то_что_прога_выдает_на_экран.txt
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 25.04.2007, 19:27

Отвечает: Ross
Здравствуйте, Maratka!

Самый удобный на мой взгляд способ писать текстовые файлы - использовать файловые потоки. Для этого подключаете хидер fstream.h и объявляете файловый поток:
ofstream f("output.txt");
для того, чтобы записать содержимое переменной s в файл:
f << s;
Для чтения из файла
ifstream f("input.txt");
f >> s;
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: 8-ой класс)
Ответ отправлен: 26.04.2007, 00:46

Отвечает: Mister Vova
Здравствуйте, Maratka!
#include <stdio.h>
#include <stdlib.h>
int main ()
{
FILE *MyFile;
int dat;
randomize(); //

MyFile=fopen("d:\DUMMY.txt", "w+");

for (int i=0;i<100;i++)
{
dat=random(256);
fprintf(MyFile," %4d %c",dat,dat);
}

fclose(MyFile);
return 0;
}
---------
Всё про Себя Тут Www.SahajaYoga.Ru
Ответ отправил: Mister Vova (статус: 3-ий класс)
Ответ отправлен: 26.04.2007, 13:53


Вопрос № 84.168
Здравствуйте, уважаемые эксперты!
Где можно найти задачи на C++ для новичков, которые недолго изучают этот язык программирования? Хочу потренироваться.
Отправлен: 25.04.2007, 17:09
Вопрос задал: Smelly (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: V1s0r
Здравствуйте, Smelly!

Попробуй книгу Герба Саттера "Сложные задачи на С++"
Можно и т.2 "Новые сложные задачи на С++".

Удачи! ;)
Ответ отправил: V1s0r (статус: 3-ий класс)
Ответ отправлен: 25.04.2007, 17:37

Отвечает: Boriss
Здравствуйте, Smelly!
Зы: Саттера (djvu) можно найти на http://bookshelf.ru/2007/02/08/novye_slozhnye_zadachi_na_s.html, там зарегистрироваться нужно
А простые задачи с описанием, можно найти ... Попробовал ссылки - не работают. Прикрепил к ответу. Мало будет напиши, еще много есть

Прикреплённый файл: Загрузить >>
Срок хранения файла на сервере RusFAQ.ru составляет 30 суток с момента отправки ответа.
---------
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss (статус: Профессор)
Россия, Саранск
Организация: mte
WWW: Программирование на Паскале
----
Ответ отправлен: 27.04.2007, 12:19
Оценка за ответ: 5


Вопрос № 84.184
Здравствуйте!
Каким образом в диалоговом окне делают нечто вроде выпадающей вкладки? Т.е. в диалоговом окне есть такая стрелочка на неё жмешь и ваезжает вторая чать диалогового окна до этого момнета не видимая?
Спаибо!
Отправлен: 25.04.2007, 18:43
Вопрос задал: Tatarin (статус: 2-ой класс)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: QDSota
Здравствуйте, Tatarin!

На самом деле ничего ниоткуда не выезжает... Примеров реализации несколько - просто разными способами делать ненужные контролы и часть формы невидимыми.
Простейший из них:
Пусть диалоговое окно "без выпавшей вкладки" имеет высоту Vmin, а "с выпавшей вкладкой" имеет высоту Vmax. Создаешь нужную форму, имеющую вид "с выпавшей вкладкой". А перед выводом на экран делаешь ее высотой Vmin. При этом "выпадающая вкладка" внизу формы на нее не помещается и не отображается. По нажатию "стрелочки" высоту формы увеличиваешь до Vmax.

---------
Открыть глаза навстречу солнцу
Ответ отправил: QDSota (статус: Профессионал)
Тел.: 8-916-53-43-916
ICQ: 84611301
----
Ответ отправлен: 26.04.2007, 08:43
Оценка за ответ: 5
Комментарий оценки:
Спасибо за оригинальную идею! Щас пойду воплощать в жизнь!


Вопрос № 84.217
Здравствуйте, эксперты. Помогите кто сколько может!
Я пишу программу в Borland C++ Builder 6.0. Возникает проблема при обращении к элементам связного списка, состоящего из структур Region, в функции Quadtree(...).
На 1-й итерации (если считать с 0-й) цикла for(...) программа вылетает и на экран выводится ошибка: "Access violation at address 00401EFE in module Search.exe. Read of address 616C6F79."; а в окне редактора кода выделяется строка: pPartitReg = pPartitReg->pNextRegion;
Насколько я понимаю ошибка связана с нарушением доступа к памяти, но как это возможно? С момента запуска программы и до момента возникновения ошибки динамически была выделена память под 4 экземпляра структур Region и ни под что более.
Функция Quadtree(...) вызывается из обработчика нажатия кнопки следующим образом: Quadtree(pFirstReg, NULL); где pFirstReg - указатель на предварительно выделенный в памяти экземпляр структуры Region.

Приложение:

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

Отвечает: Unreal2004
Здравствуйте, Strider-13!

Здравствуйте, Strider-13!

Прогони программу с включенным CodeGuard (он покажет утечки памяти). Лениво разбираться, но такое чувство что в добавлении новых областей AddAndInitAdjRegions теряется память

pSourceReg = pSourceReg->pNextRegion;
pSourceReg = new Region;

и в результате у тебя появляется обращение к совершенно левой мусорной памяти и срабатывает защита
Ответ отправил: Unreal2004 (статус: 2-ой класс)
Ответ отправлен: 25.04.2007, 23:42


Вопрос № 84.219
Доброго времеми суток, уважаемые эксперты.
У меня будет к вам 2 вопроса.
Вопрос первый:
Есть некая переменная (может принимать значения 5, 10, 15, 20) которая храниться в int массиве Array[1].
Есть таймер. И еще есть ProgressBar. Каким образом можно сделать индикатор таймера из ProgressBar-а? То есть, чтобы переменная из массива подставлялась, как максимальное значение ProgressBar. Мой вариант в листинге почему-то не работает, хотя теоретически должен бы был.
====
Второй вопрос будет таким:
Есть ini-файл, в котором записываются значения, с помощью TIniFile(такого вида ini->WriteString("Options", "Process_1", Edit1->Text);). Как можно прочесть строковые (например process.exe) данные из ini-файла, отправить их в массив, и оттуда программно "вписать" обратно в Edit1.

Заранее благодарен.

Приложение:

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

Отвечает: Unreal2004
Здравствуйте, Noman!
Все работает, только в С и С++ массивы начинаются с 0, а не с 1. :-)

ProgressBar1 -> Max = Array[1]*10; - тут читается какаято каша из памяти за массивом

Должно быть
ProgressBar1 -> Max = Array[0]*10;
Ответ отправил: Unreal2004 (статус: 2-ой класс)
Ответ отправлен: 26.04.2007, 00:10
Оценка за ответ: 5
Комментарий оценки:
Спасибо за ответ. Действительно глупая ошибка, хотя даже исправив это проблема не исчезла. Я смог ее решит только после ввода еще одного таймера в систему, с использованием переменной из массива.


Вопрос № 84.238
Доброго времени суток. Эксперты, помогите чайнику. Попытался использовать ShellExecute, а компилятор рассыпался в 153 ругательствах: все не могу привести, слишком их много.
Компилятор: Visual C++ 2005. Что я не так сделал?

Приложение:

Отправлен: 26.04.2007, 01:28
Вопрос задал: Elpher2006 (статус: Посетитель)
Всего ответов: 1
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: kool
Здравствуйте, Elpher2006!
Напиши перед строкой
#include "shellapi.h"
такую строку
#include
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 26.04.2007, 19:58


Вопрос № 84.241
Уважаемые эксперты!!! Помогите переформатировать массив типа char buffer_1[1024] в массив типа char buffer_2[2048]. Предпологается: читаем из Comport
ComPort1-> Read(buffer_1,Count); и имеем в burffer_1:{0x00,0xFF}
Нужно переформатировать и иметь в buffer_2:{0x30, 0x30, 0x46, 0x46} для того, чтобы эти данные затем поместить в StringGrid, и на экране визуально наблюдать принятые данные в HEX формате.

Заранее благодарен.
Отправлен: 26.04.2007, 04:00
Вопрос задал: Logan2 (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Mailusr
Здравствуйте, Logan2!
см. приложение, причем buffer_1 должен быть типа unsigned char

Приложение:

Ответ отправил: Mailusr (статус: 2-ой класс)
Ответ отправлен: 26.04.2007, 07:47

Отвечает: Ilkras
Здравствуйте, Logan2!
насколько я понял вам надо выбрать четные элементы и поместить их во второй массив:
for(int i=0, j=0; i < FIRST_ARRAY_SIZE; i++)
if(i%2)
buffer_2[j++] = buffer_1[i];
Ответ отправил: Ilkras (статус: 8-ой класс)
Ответ отправлен: 26.04.2007, 10:16

Отвечает: kool
Здравствуйте, Logan2!
Переформатировать массив типа char buffer_1[1024] в массив типа char buffer_2[2048]
невозможно можно только копировать.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 26.04.2007, 19:04


Вопрос № 84.276
здраствуйте уважаемые эксперты. Я пишу на С++ Bulder 6,

так вот мой вопрос:
как написать программу для Windos XP, чтобы программа вывела в LPT порт файл написаный в шеснадцатиричном коде.

какие основные принципы для написания подобнорй программы
Отправлен: 26.04.2007, 09:48
Вопрос задал: Ivan Abramovich (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: QDSota
Здравствуйте, Ivan Abramovich!

Основной принцип - открывать порт как файл. Примерно так:
int PORT=CreateFile("LPT1",GENERIC_WRITE,0,0,OPEN_EXISTING,0,0), byteswritten;
char buf[]={12,13,10,13,10,13,10,13,10,55};//Сюда читаються данные из файла
if(PORT!=INVALID_HANDLE_VALUE){
WriteFile(PORT,buf,sizeof(buf),byteswritten,0);
CloseHandle(PORT);
}
else printf("Error open port");

---------
Открыть глаза навстречу солнцу
Ответ отправил: QDSota (статус: Профессионал)
Тел.: 8-916-53-43-916
ICQ: 84611301
----
Ответ отправлен: 26.04.2007, 10:15

Отвечает: Sov
Здравствуйте, Ivan Abramovich!
Используйте API функции CreateFile,Writefile

Приложение:

Ответ отправил: Sov (статус: 2-ой класс)
Ответ отправлен: 27.04.2007, 07:06
Оценка за ответ: 5


Вопрос № 84.290
Доброго всем времени суток!!!
У мемя возникла проблемка.

{

FILE *fn1,*fn3;
....

fn3=fopen(PathNum.c_str(),"r");
do{
fgets(Num,32,fn3);
if(Num[strlen(Num)-1]==' '){Num[strlen(Num)-1]=0;}

char *FName= new char [strlen(Num)+32];
char *NumCpy=new char [strlen(Num)];

FName="D:\";

strcpy(NumCpy,Num);
strcat(FName,strcat(NumCpy,".txt"));

fn1=fopen(FName,"w");

....

delete [] FName;
delete [] NumCpy;
}while(!feof(fn3));
...
}

Здесь из некоторого текстосого файла считывается строка в массив символов *Num, далее надо создать для записи D:Num.txt. Т.к. Num меняется, то я копиру NumCpy. Для моей задачи Name(полный путь) и NumCpy(копия считанной строки) лучше объявить динамически. Путь формирую при помощи strcat.Если имя файла сформировать strcat(NumCpy,".txt"), то все проходит нормально. Но как только добавляется strcat("D:\",NumCpy),имя файла формируется,а поток не открывается и fn1=NULL. Почему?!!!! И как это исправить? Заранее благодарен.
Отправлен: 26.04.2007, 11:10
Вопрос задал: Козлов Николай Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: Ilkras
Здравствуйте, Козлов Николай Валерьевич!
ваша ошибка в следующем: сначала вы динамически выделяете память для строки FName, а затем присваиваете ей значение указателя на строку выделенную компилятором. "D:\" имеет тип "const char *" Память выделенная для нее определяется фактической длиной текста в строке с точностью до alignment.
Вместо присвоения - копируйте: strcpy(FName, "D:\");
Ответ отправил: Ilkras (статус: 8-ой класс)
Ответ отправлен: 26.04.2007, 13:23

Отвечает: Ross
Здравствуйте, Козлов Николай Валерьевич!

я чет не понимаю пару моментов:
strcat("D:\",NumCpy) - что к чему вы добавляете???? ;) (Numcpy к какой то константе?)
или FName="D:\"; ??? (так нельзя писать, нужно исп. strcpy)

Путь к файлу формируется так (в f_name - имя файла без расширения):
char * file_path = new char[strlen(f_name)+64];
strcpy(file_path,"D:\");
strcat(file_path,f_name);
strcat(file_path,".txt");
---------
Доступно только то, что видимо (c) Б. Керниган
Ответ отправил: Ross (статус: 8-ой класс)
Ответ отправлен: 26.04.2007, 13:33

Отвечает: kool
Здравствуйте, Козлов Николай Валерьевич!
Скорее всего нет такого файла по
сформированному пути. Можно посмотреть ошибку
ф-цией GetLastError().
Удачи!

---------
I am.
Ответ отправил: kool (статус: Студент)
Ответ отправлен: 26.04.2007, 19:59


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

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

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

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

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала 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.51 (beta) от 27.04.2007
Яндекс Rambler's Top100

В избранное