Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.88/49: Рейтинг темы: голосов - 49, средняя оценка - 4.88
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43

Cчитывание и запись в файл

24.12.2010, 21:23. Показов 10137. Ответов 75
Метки нет (Все метки)

здравствуйте!
есть прожка на с++ билдер, расчетная, которая выдает одно значение, и есть файл rtf, следующего вида:

угол А, угол Б, длина С м, площадь S мм^2
0,0,3.34,3.45
0,0,45,89
...
45,90,567,17

необходимо в расчетной проге открыть этот файл, взять от туда каждую площадь, умножить на полученное в программе значение, и записать в этот же файл, через запятую, так же в столбик, рядом с площадью новое полученное выражение.
в книжках я нашла только простые примеры, а как сделать выбор какого-то элемента из списка и записать в уже в существующий "числовик"... такого мне не встречалось(((
если кто знает как это делать-подскажите, пожалуйста. Заранее спасибо
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.12.2010, 21:23
Ответы с готовыми решениями:

Cчитывание, сравнивание, поиск из нескольких форм
Здравствуйте у меня проблема целую ночь думаю не могу придумать ничего ((( У меня на первой...

Cчитывание из файла блоками по 8 байт
1.Исходный файл читается блоками по 8 байт 2.Работу с файлами осуществляться в двоичном формате в...

Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные
Записать 200 случайных чисел в файл a.txt. В файл b.txt вывести четные, а в файл c.txt нечетные.

75
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
29.12.2010, 21:39  [ТС]
Dycek, давайте сделаем по другому, вот скажем у вас есть строка 0,0,80,3.469352, что вам нужно с ней сделать? Можете визуально показать как она должна будет выглядеть после всех операций?[/QUOTE]

да да.
у меня есть программа, которая считает iz_t:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
void __fastcall TForm1::Button1Click(TObject *Sender)
{
t = Edit1->Text.ToDouble();
ln = Edit2->Text.ToDouble();
lk = Edit3->Text.ToDouble();
dl = Edit4->Text.ToDouble();
   iz_t=0;
   iz_t_l1=0;
   l1=ln;
   l2=ln;
   const
   double konst1 = 1.191e4;
   double konst2 = 1.439e4;
while (((l2-lk)*(l1-lk)>=0) && (l1<lk)) {
  iz_t_l2=konst1/(pow(l2,5))/(exp(konst2/l2/t)-1);
  iz_t=iz_t+(iz_t_l2+iz_t_l1)/2*(l2-l1);
  iz_t_l1=iz_t_l2;
   l1=l2;
   l2=l2+dl;
}
Memo1->Lines->Add("iz_t=" +FloatToStr(iz_t));
}
а из строки 0,0,80,3.469352, мне необходимо взять 3.469352*iz_t и записать после суммы.
если предположить, что iz_t=0.2, то получившийся результат должен выглядеть так:
0,0,80,3.469352,0.6938704
надеюсь объяснила понятно...(а то у меня с объяснениями есть небольшие проблемы )
0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 04:06
По теме

C++
1
2
String a = 3.4515;
float result = StrToFloat(a);
result будет равен 3,45149993896484... их(лишние цифры) можно как-нибудь убрать? Или стоит написать свою функцию которая будет парсить float из string-а?
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2010, 04:12
C++
1
FormatFloat("0.00",x)
Добавлено через 1 минуту
C++
1
Edit->Text=FormatFloat("0.00",x);
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 07:05
Супер! LK я вот сделал несколько тестов и получил что FormatFloat не только обрезает по заданной маске, но еще и округляет? Потому что если
C++
1
2
3
String a = 3.4515;
float result = StrToFloat(a);
result = FormatFloat("0.0000",result);
я получу как раз что result равен 3,4515, хотя до форматирования result был равен 3,45149993896484. Это совпадение, или FormatFloat и обрезает и округляет?
1
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2010, 07:35
и обрезает, и округляет, и еще кое-что
C++
1
2
3
4
double x=12345.6789;
ShowMessage(FormatFloat("0.00",x));
ShowMessage(FormatFloat("0,0.00",x));
ShowMessage(FormatFloat("0,0.000",x));
Результат
12345.68
12 345.68
12 345.679
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 08:03
LK сильно! Спасибо!
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
30.12.2010, 08:53
проставляя таким образом зпт. - вы можете разбивать по три группы любые значения
C++
1
FormatFloat("0,0,0,0.00",x)
2
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
30.12.2010, 08:54
Цитата Сообщение от LK Посмотреть сообщение
не могли бы вы в связи с этим черкнуть Надек8
LK обижаете! Уже скинул от вашего имени письмо. Я вам должен как минимум за советы что вы мне даете и как максимум половина вашего бана как бы моя косвенная заслуга, когда вы посоветовали мне XE edition. Причем последнее оказалось очень сильной мега вещью, так что можете быть уверенны, ваша жертва не была напрасной
0
30.12.2010, 08:56

Не по теме:

Нарушитель - мое перманентное состояние :D , так что не стоит беспокоиться :smoke:.

0
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
01.01.2011, 14:16
LK у меня почему-то перестал работать этот код
C++
1
2
3
String a = 3.4515;
float result = StrToFloat(a);
result = FormatFloat("0.0000",result);
выдается ошибка, что невозможно сконвертировать UnicodeString в float, хотя несколькими постами выше он у меня работал... FormatFloat какой тип переменной после фоматрирования возращает?
0
Эксперт С++
 Аватар для MikeSoft
3957 / 1812 / 184
Регистрация: 21.11.2009
Сообщений: 2,540
01.01.2011, 20:57
y_katz, ошибка в первой строке. Кавычки забыли.
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
02.01.2011, 03:05
Цитата Сообщение от MikeSoft Посмотреть сообщение
Кавычки забыли.
Добавил кавычки, все равно получаю ошибку Cannot convert 'UnicodeString' to 'float'. А ведь работало, это же я сюда постил этот кусок кода...

Хотя может я там у себя в IDE что переключил? Потому что через ShowMessage отформатированный float показывается, ну и плюс вот так тоже работает
C++
1
result = StrToFloat(FormatFloat("0.000",float x))
т.е. FormatFloat мне возращает стринг...
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.01.2011, 03:33
C++
1
2
result = FormatFloat("0.0000",result);
result = StrToFloat(FormatFloat("0.000",float x))
- вдумайтесь, что вы здесь понавыписывали .
C++
1
2
3
double result = 12345.6789;
String str = FormatFloat("0.000",result);
ShowMessage(str);
- подумайте сами, что возвращает FormatFloat ?
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
02.01.2011, 03:42
Цитата Сообщение от LK Посмотреть сообщение
подумайте сами, что возвращает FormatFloat ?
стринг возращает...и это обломно, потому я что расчитывал что будет число
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.01.2011, 03:47
а смысл - если "число " уже имете - result. хотите изврата - ну и сделайте
C++
1
2
3
4
double result = 12345.6789;
double str = StrToFloat(FormatFloat("0.000",result));
int izvrat = str;
ShowMessage(str);
но это - бред, как Вам уже намекали - только для иллюстрации...
1
83 / 18 / 2
Регистрация: 17.11.2010
Сообщений: 107
02.01.2011, 06:58
LK я наверно не совсем правильно задал свой вопрос, но тут я сделал тест и у меня возник вообще другой вопрос, вот тут, в чем прикол? Почему у меня получается разница?

C++
1
2
3
String sResult = "234.254789";
float fResult = StrToFloat(sResult); // fResult = 234.254791259766
double dResult = StrToFloat(sResult); // dResult = 234.254789
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
02.01.2011, 07:24
1. я не знаю, что такое sResult - то, что понятно Вам, как правило, не понятно другим.
2. int хResult = sResult; - вообще выдаст xResult = 234; - думайте.

Добавлено через 8 минут
Гугль в помощь...
Основные типы C++

Основные типы в C++ подразделяются на две группы: целочисленные типы и типы с плавающей точкой (для краткости их будем называть плавающими типами). Это арифметические типы.

В C++ нет жёсткого стандарта на диапазоны значений арифметических типов (в стандарте языка оговариваются лишь минимально допустимые значения). В принципе, эти диапазоны определяются конкретной реализацией. Обычно выбор этих характеристик диктуется эффективностью использования вычислительных возможностей компьютера. Зависимость языка от реализации создаёт определённые проблемы переносимости. C++ остаётся машинно-зависимым языком.

К целочисленным типам относятся типы, представленные следующими именами основных типов:

char
short
int
long

Имена целочисленных типов могут использоваться в сочетании с парой модификаторов типа:

signed
unsigned

Эти модификаторы изменяют формат представления данных, но не влияют на размеры выделяемых областей памяти.

Модификатор типа signed указывает, что переменная может принимать как положительные, так и отрицательные значения. Возможно, что при этом самый левый бит области памяти, выделяемой для хранения значения, используется для представления знака. Если этот бит установлен в 0, то значение переменной считается положительным. Если бит установлен в 1, то значение переменной считается отрицательным.

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

В ряде случаев модификаторы типа можно рассматривать как имена основных типов.

Здесь также многое определяется конкретной реализацией. В версиях Borland C++ данные типов, обозначаемых как signed, short и int в памяти занимают одно и то же количество байтов.

Особое место среди множества основных целочисленных типов занимают перечисления, которые обозначаются ключевым словом enum. Перечисления представляют собой упорядоченные наборы целых значений. Они имеют своеобразный синтаксис и достаточно специфическую область использования. Их изучению будет посвящён специальный раздел.

Здесь также многое зависит от реализации. По крайней мере, для Borland C++ 4.5, основные характеристики целочисленных типов выглядят следующим образом:

Тип данных Байты Биты Min Max
signed char 1 8 - 128 127
unsigned char 1 8 0 255
signed short 2 16 -32768 32767
enum 2 16 -32768 32767
unsigned short 2 16 0 65535
signed int 2 16 -32768 32767
unsigned int 2 16 0 65535
signed long 4 32 -2147483648 2147483647
unsigned long 4 32 0 4294967295

К плавающим типам относятся три типа, представленные следующими именами типов, модификаторов и их сочетаний:

float
double
long double

Как и ранее, модификатор типа входит в число имён основных типов.

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

297.7
2.977*10**2
2.977E2

и ещё один пример…

0.002355
2.355*10**-3
2.355E-3

В научной нотации слева от символа E записывается мантисса, справа - значение экспоненты, которая всегда равняется показателю степени 10.

Для хранения значений плавающих типов в памяти используется специальный формат представления вещественных чисел. Этот формат называется IEEE форматом.

Ниже представлены основные характеристики типов данных с плавающей точкой (опять же для Borland C++ 4.5):

Тип данных Байты Биты Min Max
float 4 32 3.4E-38 3.4E+38
double 8 64 1.7E-308 1.7E+308
long double 10 80 3.4E-4932 3.4E+4932

Подведём итог.

Имена типов данных и их сочетания с модификаторами типов используются для представления данных различных размеров в знаковом и беззнаковом представлении:

char
signed char
unsigned char

short
signed short
unsigned short

signed
unsigned

short int
signed short int
unsigned short int

int
signed int
unsigned int

long
signed long
unsigned long

long int
signed long int
unsigned long int

Все эти типы образуют множество целочисленных типов. К этому множеству также относятся перечисления.

А вот сочетания имён типов и модификаторов для представления чисел с плавающей точкой:

float
double
long double

Вот и всё об основных типах. Помимо основных типов в C++ существуют специальные языковые средства, которые позволяют из элементов основных типов создавать новые, так называемые производные типы.
2
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
17.01.2011, 12:32  [ТС]
здравствуйте. вот только появилась возможность сесть за программу и продолжить свои мучения: 15-19 строки

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 TStringList *source=new TStringList;
 source->LoadFromFile("С:\\Площади.rtf"); // чтение
 TStringList *list = new TStringList;
list->Delimiter = ',';
for(int i=0; i<source->Count; i++){
  list->DelimitedText = source->Strings[i];
  // теперь каждая строчка будет разбита и будет находится в
  //list->Strings[0] = первое значение
  //list->Strings[1] = второе значение
  //list->Strings[2] = третье значение
  //list->Strings[3] = четвертое значение
 
  // тело основной программы, действия над "площадью",
  rezult=StrToFloat(list->Strings[3])*iz_t;
  result->Strings[4]; //как правильно записать произведение каждой Strings[3] iz_t  
                          //и как правильно вынести полученный rezult в Strings[4]
      // полученный результат записываете назад в source->Strings[i]
 
  list->Clear();
Memo1->Lines->Add("S * iz_t=" +FloatToStr(rezult));
}
source->SaveToFile("C:\\source.txt");
source = NULL;
list = NULL;
}
0
 Аватар для cpp_developer
20124 / 5691 / 417
Регистрация: 09.04.2010
Сообщений: 22,546
Записей в блоге: 1
18.01.2011, 08:40
так было же чуток вышее :
C++
1
result->Strings[4] = FormatFloat("0.000",result);
- только при чем здесь result->Strings[4], может list->Strings[4] ?
1
6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43
18.01.2011, 11:08  [ТС]
все запускается, выполняет 1ый batton(высчитывает iz_t), а на втором batto'Не стопарится на открытии файла:
C++
1
2
3
4
5
6
void __fastcall TForm1::Button2Click(TObject *Sender)
{
 TStringList *source=new TStringList;
 source->LoadFromFile("С:\\tabl.rtf");// чтение
 TStringList *list = new TStringList;
...
расширение rtf... может ли из-за него возникнуть проблемы, или что-то не так записано?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.01.2011, 11:08

создать файл 1.part и записать в него первые x элементов массива. После чего, создать второй файл 2.part, куда записать оставшиеся в массиве элементы.
Не могу понять почему не работает вот этот кусок текста. ofstream q (&quot;1.part&quot;); for (int...

Сформировать текстовый файл записать в него 20 случайных чисел от-10 до 10 по 1 на строку записать выходной файл умножив
День добрый. Убил день но так и не смог сделать задание так или иначе делаю но получается херня...

Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке
Пожалуйста, помогите решить задачу в C++!!! Дан файл целых чисел. Создать новый файл, содержащий...

Даны натуральное , символьный файл и текстовый файл . Файл содержит 30 слов , каждое из которых будем называть ключевым
Добрый день, помогите пожалуйста сделать вот такую программу. Даны натуральное k , символьный файл...

Файл: Скопировать текст в другой текстовый файл файл, но чётные строки должны быть с большой буквы...
Создать текстовый файл. Скопировать текст в другой текстовый файл файл, но чётные строки должны...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
60
Ответ Создать тему
Новые блоги и статьи
[golang] Insert Delete GetRandom O(1) (Leetcode: 380)
alhaos 16.06.2026
Insert Delete GetRandom O(1) Сложность: Medium Источник: LeetCode 380 Задача Реализовать структуру данных RandomizedSet, которая поддерживает следующие операции за O(1) в среднем:
Свет в конце тоннеля
kumehtar 16.06.2026
Поймал себя на одной мысли. Раньше мне всегда казалось неправильным жить без чёткого понимания, куда всё идёт. Будто я иду по дороге судьбы, но не знаю, куда она ведёт. А раз не знаю — значит,. . .
[golang] Реализация стека с поддержкой получения минимального элемента за O(1)
alhaos 16.06.2026
Min Stack Сложность: Medium Источник: LeetCode 155 Задача: Реализовать стек который поддерживает push, pop, top и получение минимального элемента за O(1). Методы:
[golang] Конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов.
alhaos 10.06.2026
Задача Реализовать конкурентный fetcher с ограничением максимального количества одновременных HTTP запросов. Сигнатура func Fetch(urls string, maxConcurrent int) Result Пример urls :=. . .
[golang] Состояние гонки (race condition)
alhaos 10.06.2026
Состояние гонки (race condition) Состояние гонки (Race Condition) — это ошибка, возникающая при одновременном доступе нескольких горутин к одним и тем же данным без должной синхронизации. При этом. . .
Взрослые отношения, и почему они не получаются
kumehtar 09.06.2026
Когда в детстве ребёнок не получает от родителей чего-то важного, он лишается не просто приятных переживаний, а основы для формирования определённых внутренних качеств и навыков. Если ребёнок не. . .
[golang] Worker Pool
alhaos 09.06.2026
Worker Pool Worker Pool — паттерн конкурентной обработки задач в Go. Суть: фиксированное количество горутин-воркеров читают задачи из общего канала и пишут результаты в общий канал результатов. . . .
[golang] Pipeline
alhaos 08.06.2026
Pipeline Pipeline — паттерн конкурентной обработки данных в Go. Суть: данные проходят через цепочку независимых стадий, каждая из которых работает в своей горутине и общается с соседями через. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru