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

Зануление переменных, при считываний этих переменных с текстового файла

28.12.2022, 18:51. Показов 1837. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер! Моя задача состоит в том чтобы встроить программу из архива vsput в программу из архива planet rotation( Кнопка 10)

В архив planet rotation уже пытался добавить программу под кнопкой 10:
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
void __fastcall TForm1::Button10Click(TObject *Sender)
{
 
FILE* file = fopen("data.txt", "wt");
  if (file == NULL) {
    Application->MessageBoxA("Файл не создан", "Ок", MB_OK);
    return;
  }
 int j;
 FILE*fp;
   if (InputOpen->Execute()) {
      if(!(fp = fopen(InputOpen->FileName.c_str(),"rt")))
         {Application->MessageBoxA("Файл не открылся", "Ошибка", MB_OK);}
      else
         {int ii=fscanf(fp," m= %d "
           " ro= %le atom= %le "
           " l1= %le "
           " R= %le "
           " Q= %le U= %le kcur= %le kenergy= %le "
           " Ysput= %le Yself_sput= %le Mion= %le "
           " Esput= %le Eself_sput= %le "
           " S= %8s "
           ,&m,&ro,&atom,&l1,&R,&Q,&U,&kcur,&kenergy,&Ysput,&Yself_sput,&Mion,&Esput,&Eself_sput,S);
          if (ii!=15) Application->MessageBoxA("Не все данные введены",
                 "Ошибка", MB_OK);
       fclose(fp);
       }
 
   rrr.resize(m);  /* координаты ячеек вдоль поверхности мишени */
   q.resize(m); /* плотность мощности */
   vsput.resize(m); /* скорость распыления при бомбардировке ионов рабочего газа */
 
 
 
    // Ввод данных пространственного распределения плотности мощности вдоль поверхности мишени
   vec FR, FF; /* для задания распределения плотности тока по r */
   hr=R/m;  //разделение подложки на м участков
   for (j=0; j<m; j++)
   {
   rrr[j]=hr/2+hr*j;
   AnsiString S_help;
   S_help=AnsiString(S)+".txt";
   ifstream input(S_help.c_str());
   double value1;
   input >> value1;
   while (!input.eof())
   {
      FR.push_back(value1);
      input >> value1;
      FF.push_back(value1);
      input >> value1;
   }
   nist = FF.size();
   }
 
// for (j=0; j<m; j++) /* равномерное распределение плотности мощности вдоль поверхности мишени */
//     q[j]=Q/(pi*R*R);
 
 
   vec f;
   f.resize(m);
   for (j=0; j<m; j++)
      f[j]=approxd(rrr[j],nist,FR.begin(),FF.begin());
   double B=0;
   for (j=0; j<m; j++)
   {
      B=B+rrr[j]*f[j]*hr;//ДА, тут так и должно быть, если закинуть это все в один цикл выходят неправильные значения.
   }
   double A=Q/(2.0*pi*B);
   for (j=0; j<m; j++)
   {  hr=R/m;
      q[j]=f[j]*A;
        vsput[j]=(q[j]/(U*electron))*kcur*kenergy*Ysput/(ro*NAvogadro/atom);
        rrr[j]=hr/2+hr*j;
        fprintf(file, "%.3E %.3E\n", rrr[j], vsput[j]);
   }
}
 
 
//for (int j = 0; j < m; j++)
fclose(file);
}
В результате моей попытки перестали считываться переменные из текстового файла(прикрепил его отдельно), код который за это отвечает:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int j;
 FILE*fp;
   if (InputOpen->Execute()) {
      if(!(fp = fopen(InputOpen->FileName.c_str(),"rt")))
         {Application->MessageBoxA("Файл не открылся", "Ошибка", MB_OK);}
      else
         {int ii=fscanf(fp," m= %d "
           " ro= %le atom= %le "
           " l1= %le "
           " R= %le "
           " Q= %le U= %le kcur= %le kenergy= %le "
           " Ysput= %le Yself_sput= %le Mion= %le "
           " Esput= %le Eself_sput= %le "
           " S= %8s "
           ,&m,&ro,&atom,&l1,&R,&Q,&U,&kcur,&kenergy,&Ysput,&Yself_sput,&Mion,&Esput,&Eself_sput,S);
          if (ii!=15) Application->MessageBoxA("Не все данные введены",
                 "Ошибка", MB_OK);
       fclose(fp);
       }
Код ошибок не выдает, есть предупреждения( так и должно быть, поскольку идет операция сравнения, а не приравнивание):
C++
1
 if(!(fp = fopen(InputOpen->FileName.c_str(),"rt")))
Краткое заключение: Не считывает данные из текстового документа и при расчетах всегда их берет равным нулю. Предполагаю что не работает из-за циклов, на нервах из-за вот такого зануления. Буду благодарен любой подсказке.
Вложения
Тип файла: rar planet rotation.rar (542.6 Кб, 2 просмотров)
Тип файла: rar vsput.rar (808.3 Кб, 2 просмотров)
Тип файла: txt Ar_Cr_1000W_2021_для Cr.txt (165 байт, 2 просмотров)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
28.12.2022, 18:51
Ответы с готовыми решениями:

Даны 5 переменных a,b,c,d,e - необходимо каждой из этих переменных присвоить число из текстового документа
Есть у меня текстовый документ, в котором записаны 5 чисел. Каждое число в новой строчке. Предположим: 893 42 8 745 43 Даны 5...

Чтение имён переменных из файла и раскрытие этих переменных
Допустим есть скрипт &quot;1&quot;,в котором описано: set ueqrxbfmfi=t for /f &quot;usebackq tokens=*&quot; %%a in (&quot;test.txt&quot;) do set...

Замена в строке всех слов, совпадающих с именами заданных переменных, значениями этих переменных
добрый день. подскажите пожалуйста, можно ли на бате реализовать следущее: @echo off cls set type=Debug set amodel=32

9
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.12.2022, 19:16
auezovalisher28, предлагаю разбить строку на две__
C++
1
2
fp = fopen(InputOpen->FileName.c_str(),"rt");
if(!fp)
Приравнивание fp = fopen(... не возвращает никакого значения, поэтому анализ не имеет смысла. Предупреждение должно исчезнуть.

Добавлено через 5 минут
Проверьте содержимое файла data1.txt, - там в 5-й строке между параметрами U= и kcur= вкралась буква В - она там лишняя и нарушает алгоритм присвоения.
0
0 / 0 / 0
Регистрация: 31.10.2021
Сообщений: 34
28.12.2022, 19:32  [ТС]
Цитата Сообщение от nick42 Посмотреть сообщение
Приравнивание fp = fopen(... не возвращает никакого значения, поэтому анализ не имеет смысла. Предупреждение должно исчезнуть.
Предупреждение исчезло, но проблема была не в нем.

И файл который считывается другой, в нем все окей( загружен во вложениях тхт).

На скриншоте показал про что имею ввиду, вот так все переменные зануляются.
Миниатюры
Зануление переменных, при считываний этих переменных с текстового файла  
0
фрилансер
 Аватар для Алексей1153
6467 / 5682 / 1131
Регистрация: 11.10.2019
Сообщений: 15,145
28.12.2022, 19:38
auezovalisher28, и в выводе компилятора тоже огонь:

[C++ Warning] MSD.cpp(35): W8060 Possibly incorrect assignment
[C++ Warning] MSD.cpp(226): W8070 Function should return a value

нужно исправлять
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.12.2022, 20:03
Цитата Сообщение от auezovalisher28 Посмотреть сообщение
Краткое заключение: Не считывает данные из текстового документа
auezovalisher28, а сложно добавить вот тот "куплет", что я уже публиковал (расширенным на остальные переменные)...
C++
1
2
3
4
   ShowMessage("Значения m = "+FloatToStr(m)+
               " ro = "+FloatToStr(ro)+
               " atom = "+FloatToStr(atom)+
               "\n Q = "+FloatToStr(Q)
сразу после этого else и посмотреть - те ли значения присвоены переменным, что в файле?

Добавлено через 2 минуты
И, кстати, показанный выше скриншот настолько непрозрачен, что мало что понятно по теме зануления.

Добавлено через 18 минут
Цитата Сообщение от Алексей1153 Посмотреть сообщение
нужно исправлять
Цитата Сообщение от Алексей1153 Посмотреть сообщение
[C++ Warning] MSD.cpp(35): W8060 Possibly incorrect assignment
C++
1
2
3
4
   if (OpenDialog1->Execute()) {
      fp=fopen(OpenDialog1->FileName.c_str(),"rt");
      if(!fp){Application->MessageBoxA("Файл не открылся", "Ошибка", MB_OK);}
      else
Цитата Сообщение от Алексей1153 Посмотреть сообщение
[C++ Warning] MSD.cpp(226): W8070 Function should return a value
C++
1
2
3
 double __fastcall TForm1:: N_calc (double Teta_end) {
     return 0;
 }
- (этот нужно еще сочинить).
0
0 / 0 / 0
Регистрация: 31.10.2021
Сообщений: 34
28.12.2022, 20:24  [ТС]
nick42,
Цитата Сообщение от nick42 Посмотреть сообщение
а сложно добавить вот тот "куплет", что я уже публиковал (расширенным на остальные переменные)...
Там значения будут везде 0, это я уже проверял, вот из-за чего говорю что зануляет.(на скриншоте видно что значение U*электрон = 0, а U берет с файла).

Цитата Сообщение от nick42 Посмотреть сообщение
[C++ Warning] MSD.cpp(35): W8060 Possibly incorrect assignment
Насчет вот этого как-то не парюсь, оно особо не влияет. До добавления моей кнопки так же было.

Цитата Сообщение от nick42 Посмотреть сообщение
double __fastcall TForm1:: N_calc (double Teta_end) {
     return 0;
 }
Да, но работает...но суть вопроса остается в занулений(
0
0 / 0 / 0
Регистрация: 31.10.2021
Сообщений: 34
28.12.2022, 20:32  [ТС]
Беру свой слова назад, на скриншоте показаны результаты, и они выводятся как должны. Я в замешательстве, почему при вычислениях тогда зануляет эти переменные
Миниатюры
Зануление переменных, при считываний этих переменных с текстового файла  
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.12.2022, 20:55
Так учитесь отслеживать, где "сюрприз"; это не сложно. В сомнительном месте кода (но вне цикла) вставляете ShowMessage с информацией о подозрительной величине - и анализируете, как же тот ноль в знаменатель проникает (или еще что-то).
0
2743 / 1669 / 269
Регистрация: 19.02.2010
Сообщений: 4,419
28.12.2022, 22:40
Цитата Сообщение от nick42 Посмотреть сообщение
В сомнительном месте кода (но вне цикла) вставляете ShowMessage с информацией о подозрительной величине
Блин, ну нафига советовать/юзать такой геморрой?
В Билдере же нормальный дебаггер есть для пошаговой отладки. В Watches пихаются все нужные переменные - и после прохождения дебаггером каждой очередной строки кода информация о значениях этих переменных обновляется.
0
Практикантроп
 Аватар для nick42
4841 / 2726 / 534
Регистрация: 23.09.2011
Сообщений: 5,798
28.12.2022, 23:54
Лучший ответ Сообщение было отмечено auezovalisher28 как решение

Решение

Что касается кнопки Button10 (ее обработчика), то, если параметры из файла взяты верно, ошибка деления на ноль происходит в последнем цикле при расчете vsput[j]. В знаменателе неизбежен ноль, поскольку сомножители electron и NAvogadro попросту не определены и равны 0. Число Авогадро вы еще определили в конструкторе формы, но переменную назвали Na, а не так как в обработчике. Про electron видимо забыли.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
28.12.2022, 23:54
Помогаю со студенческими работами здесь

Считывание переменных с текстового файла
У меня задача следующая, в файле записаны данные: 3 010 101 010 001 001 110

Загрузка переменных из текстового файла
всем добрый день! помогите кто сможет. есть текстовый фаил сохранения настроек *.txt в нем имеется текст или так или так в общем...

Чтение переменных из текстового файла
Раньше с С++ не сталкивался, и вот поставили мне такую задачу: вынуть следующие переменные для последующего расчёта double l //длина...

Даны значения двух переменных a и b. Поменять местами значения этих переменных
1) Обмен значениями. Даны значения двух переменных a и b. Поменять местами значения этих переменных.

Чтение переменных из текстового файла и перевод из string в real
Пытаюсь разобраться с чтением переменных из файла .txt. В файле в 2 столбца записаны числа типа real. Количество строк - 9000. Нужно...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru