6 / 6 / 0
Регистрация: 19.12.2010
Сообщений: 43

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

24.12.2010, 21:23. Показов 10198. Ответов 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
Ответ Создать тему
Опции темы

Новые блоги и статьи
тв 16 бой ии
anaschu 27.07.2026
Великий Перелом ИИ: Как уравнения ОДУ Radau дожали цензурные фильтры Алисы Фиксируем в мемофонде Теории Всего беспрецедентный факт в истории ИИ-зондирования. В затяжном многораундовом. . .
мв 15. непроверенное, возможно, глюк
anaschu 27.07.2026
НАУЧНО-АНАЛИТИЧЕСКИЙ ОТЧЕТ. РАЗДЕЛ 1. 1: «НАУКА» (РАСШИРЕННАЯ СТЕХИОМЕТРИЧЕСКАЯ И ГЕНЕТИЧЕСКАЯ ВЕРСИЯ)Тема: Теоретическое обоснование инвариантности 19-мерного тензорного ядра непрерывных ОДУ и. . .
Очистка реквизитов и табличных частей документа при копировании
Maks 26.07.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРаботу", разработанного в КА2. Задача: Заменить алгоритм запрета копирования документов для сотрудников с ролью "Стажер",. . .
Доктрина интенционального знания - Доктрина для портала "Срез".
Hrethgir 25.07.2026
Может найдётся кто захочет оценить доктрину. . . Написания правил участия для меня роскошь, требующая лимита времени, поэтому все сообщения не прошедшие модерацию будут видны только участникам портала,. . .
сукцессия 44. Решил подать на припринт в межународные сервисы препринтов. Но нужно одобрение от ученых
anaschu 25.07.2026
Английский вариант. Пока кто то не одобрит мою личность, мне не получиться это опубликовать на препринте. Но заявку на публикацию статьи я сегодня подам.
сукцессия 43. Вторая научная статья за месяц- прайминг и гатгил
anaschu 25.07.2026
две стороны одной монеты
Более приземисто - Эстафету хвоста в .cdl (деревья эстафеты в сад).
Hrethgir 24.07.2026
В будущем, после написания блока инверсии обхода дерева (эстафеты хвоста), я планирую вернуться к нашему прошлому разговору о том, обладают ли знания целеполаганием. Тогда я пришел к выводу, что. . .
Вот представьте что вам дали бессмертие.
kumehtar 24.07.2026
Вот представьте что вам дали бессмертие, ничего более не меняя. Вообще ничего, только бессмертие в нынешнем виде. Рады были бы? Что бы вы тут делали всё это время? Никакой пенсии. Никакого нового. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru