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

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


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

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

Выпуск № 882
от 20.10.2007, 09:05

Администратор:Калашников О.А.
В рассылке:Подписчиков: 484, Экспертов: 63
В номере:Вопросов: 7, Ответов: 19


Вопрос № 105403: Здравствуйте граждане программеры, У меня такая вот проблема. Нужно написать простенькую программку на С++. Смысл в том, что есть некий файл текстом (текст, например, в одну строку). Нужно весь этот текст переписать в другой файл, но без проб...
Вопрос № 105411: Здравствуйте, как в Visual С++ 6 вывести на экран переменную типа float? Я делаю так: tt=234; wsprintf(str3,"%f",tt/2); TextOut(hdc,300,50,str3,lstrlen(str3)); Вместо переменной выводит просто символ f....
Вопрос № 105444: Уважаемые эксперты у меня такая проблема: идет работа со списком (пишу на С), в каждый элемент списка закладывается несколько записей (работа со структурой),у меня не получается нормально удалить весь элемент списка. привожу свою функцию удал...
Вопрос № 105456: Здравствуйте. Вопрос простой: Можно ли добавлять в середину файла данные и удалять их оттуда (сомневаюсь, что можно, но вдруг!)? Если нельзя, предложите, пожалуйста, способ хранения информации для простенькой базы данных, чтобы можно было легко о...
Вопрос № 105468: Дано число А. Найти сумму четных чисел меньших 100 и больших А. С использованием while я написал. Как выглядит код с do while и for?...
Вопрос № 105476: Здравствуйте! У меня возникла проблема при написании программы на СИ. Писал программу в среде программирования DEV C++ и при компиляции компилятор выдал ошибку. Вот отрывок программы: #include <stdio.h> #include <conio.h...
Вопрос № 105485: Уважаемые эксперты, помогите в решении: Нужно составить программу, которая открывает текстовый файл - список, содержащий имена файлов по одному на строке. Программа подсчитывает количество наиболее употребительных предлогов во всех файла...

Вопрос № 105.403
Здравствуйте граждане программеры,
У меня такая вот проблема. Нужно написать простенькую программку на С++.
Смысл в том, что есть некий файл текстом (текст, например, в одну строку). Нужно весь этот текст переписать в другой файл, но без пробелов.
Задача вроде элементарная, но то что получилось у меня почему то записывает вместе с пробелами (а пробелов в конечном файле быть не должно) и я не знаю как определить конец файла, который я читаю... я поставил определение хоть нуль символа, хоть символов «n» или «r».... ни на один из них программа не реагирует и зацикливается и последний символ копируется до бесконечности. Помогите пожалуйста... я понимаю что очень туплю, но не могу понять где. Код получившейся у меня программы в приложении, те места где программа работает неправильно снабжены комментариями как должно работать.

Приложение:

Отправлен: 14.10.2007, 12:37
Вопрос задал: Стас Тельнов/[анти]КИЛЛЕР (статус: 3-ий класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: CruelHity
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
Для проверки конца файла воспользуйтесь eof()
Вашем случае это будет выглядеть так
while(!file.eof())
{
опретаоры
}
для записи без пробелов и энтеров используйте обыкновеные операторы >> <<
Смотрите пример! Правда он написан на MVS с++. Но переделать вам не составит труда!

Приложение:

Ответ отправил: CruelHity (статус: 1-ый класс)
Ответ отправлен: 14.10.2007, 12:50
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо))) Примера записи без пробелов я не понял, но за остальное спасибо... с пробелами сам разберусь))))

Отвечает: Ilkras
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!

в "while (stroka!=" " || stroka!="замените "или" на "и"

сам же цикл сделайте
for(int i = 0, int j = 0; i {
if(stroka[i] == ' ')//пробел
continue;
if(stroka[i] == ' ') //табуляция
continue;
stroka_out[j++] = stroka[i]'

}
Ответ отправил: Ilkras (статус: Студент)
Ответ отправлен: 14.10.2007, 15:17

Отвечает: Виталий Юрьевич
Здравствуйте, Стас Тельнов/[анти]КИЛЛЕР!
Вот пример программы. Она игнорирует вообше все знаки типа пробел, конец строки, табуляция.
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main(int num, char** args)
{
if(num == 1)
{
cout << "using: " << args[0] << " file[input] file[output] ";
return 0;
};

if(num == 3)
{
fstream ins(args[1],std::ios::in);
fstream outs(args[2],std::ios::out);
while( !ins.eof() )
{
string buf;
ins>>buf;
outs<<buf;
};
ins.close();
outs.close();
};
};

или как в предыдущих вариантах.
Ответ отправил: Виталий Юрьевич (статус: 1-ый класс)
Ответ отправлен: 14.10.2007, 17:45


Вопрос № 105.411
Здравствуйте, как в Visual С++ 6 вывести на экран переменную типа float?
Я делаю так:
tt=234;
wsprintf(str3,"%f",tt/2);
TextOut(hdc,300,50,str3,lstrlen(str3));
Вместо переменной выводит просто символ f.
Отправлен: 14.10.2007, 13:55
Вопрос задал: Оленёв Кирилл Валерьевич (статус: Посетитель)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: CruelHity
Здравствуйте, Оленёв Кирилл Валерьевич!
Попробуйте спомощью СString:
float t=233;
t=t/2;
CString str;
str.Format("%f",t);

pDC->TextOut(10,pos,str);
Ответ отправил: CruelHity (статус: 1-ый класс)
Ответ отправлен: 14.10.2007, 16:46

Отвечает: kool
Здравствуйте, Оленёв Кирилл Валерьевич!
Можно использовать другую ф-цию
sprintf(str3,"%f",tt/2);
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 14.10.2007, 16:48

Отвечает: Lestat de Lionkur
Здравствуйте, Оленёв Кирилл Валерьевич!
В С++ есть замечательная функция cout << text_out для вывода информации и cin >> text_in для ввода, причем выводить и вводить можно данные любого типа. Для работы с данными файлами необходимо подключить библиотеку #include <iostream.h> И все будет работать...
Ответ отправил: Lestat de Lionkur (статус: 2-ой класс)
Ответ отправлен: 16.10.2007, 00:18


Вопрос № 105.444
Уважаемые эксперты у меня такая проблема:
идет работа со списком (пишу на С), в каждый элемент списка закладывается несколько записей (работа со структурой),у меня не получается нормально удалить весь элемент списка.
привожу свою функцию удаления.
Help me,please!!!

Приложение:

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

Отвечает: Aristos
Здравствуйте, ЛАЕ!

При работе с односторонныем списком бывает удобно запоминать предыдущий элемент при обходе.
В приложении функция для удаления n-ного элемента. Объявление функции может быть не совсем корректным с точки зрения сиснтаксиса C.

Приложение:

---------
нет ничего невозможного

Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 14.10.2007, 18:58
Оценка за ответ: 5


Вопрос № 105.456
Здравствуйте. Вопрос простой:
Можно ли добавлять в середину файла данные и удалять их оттуда (сомневаюсь, что можно, но вдруг!)? Если нельзя, предложите, пожалуйста, способ хранения информации для простенькой базы данных, чтобы можно было легко осуществлять поиск по ней (пока приходит на ум только перебором, т.е. 1 файл подходил бы идеально), при этом легко (в смысле не затратно по времени процессора) удалять некоторые записи (для этого и нужно было удаление из середины файла, а копировать весь файл в память, удалять ненужное, и создавать новый файл накладно выходит... файл может достигать размера 1 Гб). Можно было бы разбить базу на множество файлов, но целесообразно ли это (тут не понятно, какие размеры файлов должны быть, чтобы не было 1000000 файлов.. а то поиск осуществить будет трудно)? Жду ваших ответов, помогите, пожалуйста выбраться из ситуации... Если нужна доп. информация для решения проблемы, пишите в минифорум.
Отправлен: 14.10.2007, 20:52
Вопрос задал: Mystic (статус: 7-ой класс)
Всего ответов: 3
Мини-форум вопроса >>> (сообщений: 1)

Отвечает: CruelHity
Здравствуйте, Mystic!
Не совсем понятен вопрос! насчет добавление в середину файла то можно например в объектах fstream есть такие функции как seekg и tellg- спомощью которых можно лазить по всему файлу, тоесть устанавливать коретку в неоюходимом месте а значит и добавлять инфо в необходимое место! Поишите в интернете про fstream!
а что насчет базы даных, если вы умеете работать в Access то Начните изучать DAO(это класс для работы с бызами даных). Я начинал изучать его с этого справочника http:\worldcpp.vingrad.ru(очень удобный справочник советую скачать там вы найдете и про работу с файлами).
Удачи!
Ответ отправил: CruelHity (статус: 1-ый класс)
Ответ отправлен: 14.10.2007, 21:16
Оценка за ответ: 3

Отвечает: kool
Здравствуйте, Mystic!
Хранить можно все в одном файле, а работать только с его
частью в оперативе. Сделать можно например как в БД DBF.
Формат можно найти в нете.
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 15.10.2007, 13:13

Отвечает: Rockie
Здравствуйте, Mystic!
Думаю если вам нужна скорость, вам нужно смотреть в сторону уже готовых субд. То есть не изобретать велосипед а воспользоваться базами данных, которые уже созданы, оттестированы и оптимизированы командами других людей :)

Касаемо файла - вы никак не можете "вставить" что-то в середину, только перезаписать. Так как файл лежит на винчестере одним цельным куском и не изменяет размер динамически. Стоит помнить, что работа с файлами(по сравнению с работой в оперативной памяти) уже является накладной, так как вы привязываетесь к "механике"(то есть скорость работы зависит от того, как двигаются бегунки в вашем жестком диске). Так что не так просто сказать, что в конечном счете будет накладней.

Касаемо оптимизации - оптимизировать действительно можно и для этого есть, опять же, давно придуманные механизмы. Один из вариантов - хеш таблицы. По этому адресу довольно доступно описаны:
http://algolist.ru/ds/s_has.php
Также можете поискать в интернете, вот пример запроса к гуглу:
http://www.google.md/search?hl=ru&q=%D1%85%D0%B5%D1%88-%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86%D0%B0&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=

Кстати пример довольно интересной системы - файловая система гугла(GFS). Фактически это база данных, кэширующая весь интернет) Кратко можно почитать тут:
http://alenacpp.blogspot.com/2007/02/blog-post_20.html
Ответ отправил: Rockie (статус: 5-ый класс)
Ответ отправлен: 15.10.2007, 13:24


Вопрос № 105.468
Дано число А. Найти сумму четных чисел меньших 100 и больших А.
С использованием while я написал. Как выглядит код с do while и for?

Приложение:

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

Отвечает: Aristos
Здравствуйте, Volt!

В приложении код. Способы суммирования разделил по функциям.

Приложение:

---------
нет ничего невозможного

Ответ отправил: Aristos (статус: 8-ой класс)
Ответ отправлен: 14.10.2007, 23:28
Оценка за ответ: 5

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Volt!

Помоему Ваша программа не соответствует Вашему вопросу...у Вас получается, что считается сумма чётных чисел ничиная с введенного числа до 100...если использовать for, то это будет выглядеть так:

Приложение:

---------
Да здравтствует С++!!!...;)

Ответ отправил: Гальцов Андрей Михаилович (статус: 7-ой класс)
Ответ отправлен: 14.10.2007, 23:31

Отвечает: Виталий Юрьевич
Здравствуйте, Volt!
Просто строки

while (a < b)
{
sum+=a;
a=a+2;

}

меняете на
for(;a<b;a+=2)
sum+=a;

или
do
{
sum+=a;
a=a+2;

} while (a<b)
Ответ отправил: Виталий Юрьевич (статус: 1-ый класс)
Ответ отправлен: 15.10.2007, 07:18


Вопрос № 105.476
Здравствуйте! У меня возникла проблема при написании программы на СИ.
Писал программу в среде программирования DEV C++
и при компиляции компилятор выдал ошибку.
Вот отрывок программы:
#include <stdio.h>
#include <conio.h>
void main()
{
...
printf("text ");
getch();
clrscr();
printf("text");
...
}
Компилятор выдал сообщение:
[Linker error] undefined reference to `clrscr'

Функция clrscr(); почемуто не работает, я удалил её из кода,
после чего арограмма нормально скомпилировалась.
Я попробывал сделать тоже самое в среде программирования Visual C++
и снова получил ошибку.
Тогда я попробывал записать тотже код в среде Turbo C 2.0
программа нормально скомпилировалась, без ошибок и функция очистки экрана работает нормально.
Объясните пожайлусто, почему возникла ошибка и можно ли найти какой-то выход из этой ситуации и в случае необходимости всётаки выполнить очистку экрана.

Скажите ещё пожайлуста можно ли добавить ресурс в консольное приложение Win32
например я пишу программу на СИ в среде Visual C++
и мне надо добавить ресурс иконки. Я выбираю "дбавить ресурс -> .ico"
а как прописать в коде файл ресурса чтобы после компиляции *.exe файл отображался не со стондартной иконкой в виде окна, а с заданной кортинкой?
Зарание благодарю.
С уважением Fed.

Отправлен: 15.10.2007, 01:41
Вопрос задал: Грибанов Фёдор Александрович (статус: Посетитель)
Всего ответов: 4
Мини-форум вопроса >>> (сообщений: 0)

Отвечает: CruelHity
Здравствуйте, Грибанов Фёдор Александрович!
На счет отчистки: clrscr - не работает в виндовс!и с этим надо смериться:(((
Самый простой способ очистки в консольных програмах виндовс это так:
#include <stdlib.h>

void main()
{
system("cls");
}
На счет второго точно незнаю!Когда-то и я это искал но находил только отрицательный ответ(((
Но в мире програмирование бывает все что угодно надо только мозгами пошивелить))
Ответ отправил: CruelHity (статус: 1-ый класс)
Ответ отправлен: 15.10.2007, 02:11
Оценка за ответ: 5
Комментарий оценки:
Большое спасибо за ответ.
Вы мне очень помогли.

Отвечает: Mihail Yarlykov
Здравствуйте, Грибанов Фёдор Александрович!
Что касается добавления иконки, можно сделать так:
Создать файл Resurs.rc и добавить его к проекту в Borland это так: "Проект->Добавить к проекту...", думаю и в Visual C++ примерно так же.
В самом файле Resurs.rc прописать всего одну строку:
ID_ICON1 ICON icon.ico
Где icon.ico имя иконки в папке проекта.

Windows отображает в качестве иконки *.exe файла первую(по имени ресурса) имеющуюся у него внутри. Т.е. если в файле ресурсов дописать строку: AAICON1 ICON iconA.ico
то *.exe файл будет отображаться иконкой AAICON1, а не ID_ICON1.
Удачи!..
---------
Нет ничего невозможного!
Ответ отправил: Mihail Yarlykov (статус: 2-ой класс)
Ответ отправлен: 15.10.2007, 06:58

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Грибанов Фёдор Александрович!

По поводу clrscr() - он тработает в определённых средах...например Turbo C,C++ 3.0...а В остальных такую функцию надо писать самому. Смысл в том, что надо весь экран заполнить пробелами. Если не изменяет память их должно быть 2000.
А код при мерно такой:

#include <windows.h>
#include <conio.h>

void clrscr()
{
COORD c={0,0};
DWORD whocares;
FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT _HANDLE),' ',2000,c,&whocares);
}

Как очистить экран в консоли Win32?
Можно использовать функцию ScrollConsoleScreenBuffer или следующий код:
COORD c; c.X = 0; c.Y = 0; CONSOLE_SCREEN_BUFFER_INFO bi; DWORD written; GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), bi); FillConsoleOutputCharacter(GetStdHandle(STD_OUTPUT_HANDLE), ' ',bi.dwSize.X*bi.dwSize.Y, c, written); FillConsoleOutputAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED |FOREGROUND_GREEN | FOREGRUND_BLUE /*цвет*/, bi.dwSize.X*bi.dwSize.Y, c,written);

А по поводу иконки Вы всё можете прочитать здесь - http://www.cyberguru.ru/cpp-sources/graphics-video/ispolzovanie-ikonok-page2.html
---------
Да здравтствует С++!!!...;)
Ответ отправил: Гальцов Андрей Михаилович (статус: 7-ой класс)
Ответ отправлен: 15.10.2007, 10:11

Отвечает: kool
Здравствуйте, Грибанов Фёдор Александрович!
Один из способов:
system("cls");
Удачи!

---------
I am.
Ответ отправил: kool (статус: Практикант)
Ответ отправлен: 15.10.2007, 13:13


Вопрос № 105.485
Уважаемые эксперты, помогите в решении:

Нужно составить программу, которая открывает текстовый файл - список, содержащий имена файлов по одному на строке.
Программа подсчитывает количество наиболее употребительных предлогов во всех файлах и выводит сообщение на экран.

Заранее спасибо!
Отправлен: 15.10.2007, 08:26
Вопрос задал: Серов Дмитрий В (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 2)

Отвечает: Mihail Yarlykov
Здравствуйте, Серов Дмитрий В!
Смотрите в приложении программу для вашей задачи:

Приложение:

---------
Нет ничего невозможного!

Ответ отправил: Mihail Yarlykov (статус: 2-ой класс)
Ответ отправлен: 15.10.2007, 10:11
Оценка за ответ: 4
Комментарий оценки:
что-то программа не совсем работает, проверьте пожалуйста ещё раз

Отвечает: Гальцов Андрей Михаилович
Здравствуйте, Серов Дмитрий В!

Держите программу...

Приложение:

---------
Да здравтствует С++!!!...;)

Ответ отправил: Гальцов Андрей Михаилович (статус: 7-ой класс)
Ответ отправлен: 15.10.2007, 10:26
Оценка за ответ: 2
Комментарий оценки:
программа не работает на Microsoft Visual Studio 2005, console application


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

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

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

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

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


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


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

В избранное