Добрый вечер, я разобрался с некоторыми проблемами, но теперь у меня другой вопрос: есть такой код расчета температуры:
int x, y, z;
double cx, Tn1, Tn2, Tn3, Tn4, k, r23, r24, bb3, f, h0, f2, f3, f4, f5, f6, f7, fpad2, ktwo, s, Tn5, Tn6;
ifstream fin1("pov20.txt");
ifstream fin2("nak20.txt");
ifstream fin3("h20.txt");
FILE *ff = fopen("res1.txt", "w+");
for (int i = 0;i<Lan;i++) {
for (int j = 0;j<Lan;j++) {
fin1 >> pov[i][j];
fin2 >> nak[i][j];
fin3 >> h[i][j];
}
}
for (T = 1;T<v;T++) {
for (z = 1;z<Lanz;z++) {
for (y = 1;y<Lan;y++) {
for (x = 1;x<Lan;x++) {
if (T ==1) {
if (y<25) {
Tnach[x][y][z] = 100;
}
else
Tnach[x][y][z] = 100;
}
else Tnach[x][y][z] = Tempernach[x][y][z];
}
}
}
q0 = 6.67*(10 ^ (-23));
r22 = R0 / A1;
r23 = log(r22);
r24 = exp(r23 * 2);
T01 = log(T0);
T02 = exp(T01 * 4);
F0 = r24 * T02;
s = 5.67*(10 ^ (-8));
Tim = 29.5 * 24 * 60 * 60;
a = e * s;
for (z = 1;z<Lanz;z++) {
d = z * deltaz;
for (y = 1;y<Lan;y++) {
for (x = 1;x<Lan;x++) {
Tem11=Tnach[x][y][z];
Tem = (Tem11 - 300) / 300;
Tum = log(Tem);
Tem1 = exp(Tum * 2);
Tem2 = exp(Tum * 3);
Tem3 = exp(Tum * 4);
ccx1 = cc1 + (cc2*Tem) + (cc3*Tem1) + (cc4*Tem2) + (cc5*Tem3);
cx = ccx1 * 4186.8;
ro = ro2 - ((ro2 - ro1)*exp(-d / 0.06));
Tn1 = log(Tem11 / 350);
Tn2 = exp(Tn1 * 3);
k = kd - ((kd - ks)*exp(-d / 0.06)) + (ksi*ks*Tn2);
if (d <= 0.02) {
ktwo = k1 * (1 + (ksi1*Tn2)) / (ro1*cx);
k11 = k1 * (ksi1*Tn2);
ro = ro1;
kvak = k11;
}
else {
ktwo = k2 * (1 + (ksi2*Tn2)) / (ro2*cx);
k22 = k2 * (ksi2*Tn2);
ro = ro2;
kvak = k22;
}
k = ktwo;
tau01 = log(deltaz);
tau02 = exp(tau01 * 2);
tau1 = tau02 / (2 * k);
if (x = 1) {
f2 = 0;
f3 = k * deltat*(Tnach[x + 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
}
else {
if (x == Lan-1) {
f3 = 0;
f2 = k * deltat*(Tnach[x - 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
}
else
f3 = k * deltat*(Tnach[x + 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
f2 = k * deltat*(Tnach[x - 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
}
if (y == 1) {
f5 = 0;
f4 = k * deltat*(Tnach[x][y + 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
}
else {
if (y == Lan-1) {
f4 = 0;
f5 = k * deltat*(Tnach[x][y - 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
}
else
f4 = k * deltat*(Tnach[x][y + 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
f5 = k * deltat*(Tnach[x][y - 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
}
if (z == 1) {
h0 = 90 - fi;
Az = 359;
Tn5 = log(Tnach[x][y][z]);
Tn6 = exp(Tn5 * 4);
f6 = (1 - albedo)*F0*s*((sin(h0*Pi / 180)*cos(nak[x][y])*Pi / 180)) - (cos(h0*Pi / 180)*sin(nak[x][y] * Pi / 180)*cos((pov[x][y] - Az)*Pi / 180)) - (e*s*Tn6);
f7 = k * deltat*(Tnach[x][y][z + 1] - Tnach[x][y][z]) / (deltax*deltay);
}
else {
if (z == Lanz-1) {
f7 = 0;
f6 = k * deltat*(Tnach[x][y][z - 1] - Tnach[x][y][z]) / (deltax*deltay);
}
else
f7 = k * deltat*(Tnach[x][y][z + 1] - Tnach[x][y][z]) / (deltax*deltay);
f6 = k * deltat*(Tnach[x][y][z - 1] - Tnach[x][y][z]) / (deltax*deltay);
}
if (f6<0) {
f6 = 0;
}
fpad2 = f2 + f3 + f4 + f5 + f6 + f7;
Tn3 = log(Tnach[x][y][z]);
Tn4 = exp(Tn3 * 4);
f = (s*Tn4) + fpad2;
Tb1 = f / s;
Tb2 = log(Tb1);
Tb3 = exp(Tb2*0.25);
Temper[x][y][z] = Tb3;
bb3 = Temper[x][y][z];
Tut[x][y] = Temper[x][y][1];
Tut11[x][y] = Temper[x][y][2];
Tut22[x][y] = Temper[x][y][3];
Tut1[x][z] = Temper[x][10][z];
Tempernach[x][y][z] = Temper[x][y][z];
}
}
}
Tempernach[x][y][z] = Temper[x][y][z];
Tim2 = Tim2 + deltat;
}
Temper1[x][y][z] = Temper[x][y][z];
fprintf(ff, "%d", Tut1[x][y]);
}
Мне нужно вывести массив Tut1 в файл txt. Это срез распространения температуры в некоем объеме. Я сделал пересборку и получил в окне Вывод - Сборка смледующий текст:
1>------ Перестроение всех файлов начато: проект: Project1, Конфигурация: Debug Win32 ------ 1>Source.cpp 1>c:\users\л\source\repos\project1\project1\source.cpp(66): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1>c:\program files (x86)\windows kits\10\include\10.0.16299.0\ucrt\stdio.h(207): note: см. объявление "fopen" 1>c:\users\л\source\repos\project1\project1\source.cpp(209): warning C4477: "fprintf": в строке форматирования "%d" требуется аргумент типа "int", но вариативный аргумент "1" имеет тип "double" 1>Сборка проекта "Project1.vcxproj" завершена с ошибкой. ========== Перестроение всех проектов: успешно: 0, с ошибками: 1, пропущено: 0 ==========
Скажите пожалуйста, что не так? Что ему не нравится?
Спасибо, кое-что изменилось:
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <math.h>
#include <cmath>
#include <conio.h>
using namespace std;
double Tnach[139][139][50];
double Temper[139][139][50];
double Temper1[139][139][50];
double Tempernach[139][139][50];
double Tut[139][139];
double Tut1[139][139];
double Tut11[139][139];
double Tut22[139][139];
#define _CRT_SECURE_NO_WARNINGS
int main() {
const int i = 0;
const int w = 20;
const int fi = 73;
double albedo = 0.11;
double I0 = 1.538889;
double R0 = 695510;
const double T0 = 5778;
double A1 = 147800000;
double e = 0.95;
const int v = 100;
double Az = 360;
int Lan = 139;
int Lanz = 50;
double pov[139][139];
double nak[139][139];
double h[139][139];
double l1 = 0.02;
double Fn = 0.02;
double Pi = 3.1415;
double ro1 = 1300;
double ro2 = 1800;
double cc1 = 0.1812;
double cc2 = 0.1191;
double cc3 = 0.0176;
double cc4 = 0.2721;
double cc5 = 0.1869;
double k1 = 0.000922;
double k2 = 0.0093;
double ks = 0.0006;
double kd = 0.007;
double ksi1 = 1.48;
double ksi2 = 0.073;
double Tim2 = 0;
double ksi = 2.7;
double ccx1;
double Tum, tau01, tau02, tau1, r22, ro, k11, k22, Tem, Tem11, Tem1, Tem2, Tem3, d, kvak, q0, F0, Tim, a, Tb1, Tb2, Tb3, T, T01, T02;
double deltaz = 0.002;
double deltay = 0.002;
double deltax = 0.002;
double deltat = 0.000429;
int x, y, z;
double cx, Tn1, Tn2, Tn3, Tn4, k, r23, r24, bb3, f, h0, f2, f3, f4, f5, f6, f7, fpad2, ktwo, s, Tn5, Tn6;
ifstream fin1("pov20.txt");
ifstream fin2("nak20.txt");
ifstream fin3("h20.txt");
FILE *ff = fopen("res1.txt", "w+");
for (int i = 0;i<Lan;i++) {
for (int j = 0;j<Lan;j++) {
fin1 >> pov[i][j];
fin2 >> nak[i][j];
fin3 >> h[i][j];
}
}
for (T = 1;T<v;T++) {
for (z = 1;z<Lanz;z++) {
for (y = 1;y<Lan;y++) {
for (x = 1;x<Lan;x++) {
if (T ==1) {
if (y<25) {
Tnach[x][y][z] = 100;
}
else
Tnach[x][y][z] = 100;
}
else Tnach[x][y][z] = Tempernach[x][y][z];
}
}
}
q0 = 6.67*(10 ^ (-23));
r22 = R0 / A1;
r23 = log(r22);
r24 = exp(r23 * 2);
T01 = log(T0);
T02 = exp(T01 * 4);
F0 = r24 * T02;
s = 5.67*(10 ^ (-8));
Tim = 29.5 * 24 * 60 * 60;
a = e * s;
for (z = 1;z<Lanz;z++) {
d = z * deltaz;
for (y = 1;y<Lan;y++) {
for (x = 1;x<Lan;x++) {
Tem11=Tnach[x][y][z];
Tem = (Tem11 - 300) / 300;
Tum = log(Tem);
Tem1 = exp(Tum * 2);
Tem2 = exp(Tum * 3);
Tem3 = exp(Tum * 4);
ccx1 = cc1 + (cc2*Tem) + (cc3*Tem1) + (cc4*Tem2) + (cc5*Tem3);
cx = ccx1 * 4186.8;
ro = ro2 - ((ro2 - ro1)*exp(-d / 0.06));
Tn1 = log(Tem11 / 350);
Tn2 = exp(Tn1 * 3);
k = kd - ((kd - ks)*exp(-d / 0.06)) + (ksi*ks*Tn2);
if (d <= 0.02) {
ktwo = k1 * (1 + (ksi1*Tn2)) / (ro1*cx);
k11 = k1 * (ksi1*Tn2);
ro = ro1;
kvak = k11;
}
else {
ktwo = k2 * (1 + (ksi2*Tn2)) / (ro2*cx);
k22 = k2 * (ksi2*Tn2);
ro = ro2;
kvak = k22;
}
k = ktwo;
tau01 = log(deltaz);
tau02 = exp(tau01 * 2);
tau1 = tau02 / (2 * k);
if (x = 1) {
f2 = 0;
f3 = k * deltat*(Tnach[x + 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
}
else {
if (x == Lan-1) {
f3 = 0;
f2 = k * deltat*(Tnach[x - 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
}
else
f3 = k * deltat*(Tnach[x + 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
f2 = k * deltat*(Tnach[x - 1][y][z] - Tnach[x][y][z]) / (deltaz*deltay);
}
if (y == 1) {
f5 = 0;
f4 = k * deltat*(Tnach[x][y + 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
}
else {
if (y == Lan-1) {
f4 = 0;
f5 = k * deltat*(Tnach[x][y - 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
}
else
f4 = k * deltat*(Tnach[x][y + 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
f5 = k * deltat*(Tnach[x][y - 1][z] - Tnach[x][y][z]) / (deltaz*deltax);
}
if (z == 1) {
h0 = 90 - fi;
Az = 359;
Tn5 = log(Tnach[x][y][z]);
Tn6 = exp(Tn5 * 4);
f6 = (1 - albedo)*F0*s*((sin(h0*Pi / 180)*cos(nak[x][y])*Pi / 180)) - (cos(h0*Pi / 180)*sin(nak[x][y] * Pi / 180)*cos((pov[x][y] - Az)*Pi / 180)) - (e*s*Tn6);
f7 = k * deltat*(Tnach[x][y][z + 1] - Tnach[x][y][z]) / (deltax*deltay);
}
else {
if (z == Lanz-1) {
f7 = 0;
f6 = k * deltat*(Tnach[x][y][z - 1] - Tnach[x][y][z]) / (deltax*deltay);
}
else
f7 = k * deltat*(Tnach[x][y][z + 1] - Tnach[x][y][z]) / (deltax*deltay);
f6 = k * deltat*(Tnach[x][y][z - 1] - Tnach[x][y][z]) / (deltax*deltay);
}
if (f6<0) {
f6 = 0;
}
fpad2 = f2 + f3 + f4 + f5 + f6 + f7;
Tn3 = log(Tnach[x][y][z]);
Tn4 = exp(Tn3 * 4);
f = (s*Tn4) + fpad2;
Tb1 = f / s;
Tb2 = log(Tb1);
Tb3 = exp(Tb2*0.25);
Temper[x][y][z] = Tb3;
bb3 = Temper[x][y][z];
Tut[x][y] = Temper[x][y][1];
Tut11[x][y] = Temper[x][y][2];
Tut22[x][y] = Temper[x][y][3];
Tut1[x][z] = Temper[x][10][z];
Tempernach[x][y][z] = Temper[x][y][z];
}
}
}
Tempernach[x][y][z] = Temper[x][y][z];
Tim2 = Tim2 + deltat;
}
Temper1[x][y][z] = Temper[x][y][z];
fprintf(ff, "%lf", Tut1[x][y]);
}
Но попрежнему он выдает:
1>------ Сборка начата: проект: Project1, Конфигурация: Debug Win32 ------ 1>Source.cpp 1>c:\users\л\source\repos\project1\project1\source.cpp(67): error C4996: 'fopen': This function or variable may be unsafe. Consider using fopen_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. 1>c:\program files (x86)\windows kits\10\include\10.0.16299.0\ucrt\stdio.h(207): note: см. объявление "fopen" 1>Сборка проекта "Project1.vcxproj" завершена с ошибкой. ========== Сборка: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== В графе Проект - С/С+ - Общие не было строки "Обрабатывать исключения как ошибки" , там было "Обрабатывать предупреждения как ошибки" и было выставлено Нет. При нажатии Отладка - Начать отладку он говорит что проект устарел и нужно ли сделать его сборку? Я отвечаю ему что Да и дальше он выкидывает окно, что Возникли ошибки сборки и Нужно ли запустить последнюю удачную сборку? Я отвечаю что Да и он выкидывает окно, что путь к Project.exe не найден. Как с этим быть?
C4996 это на самом деле предупреждение а не ошибка, нужно либо последовать совету и использовать fopen_s
либо выставить в настройках проект не обрабатывать исключения как ошибки (С++ -> Общие -> Обрабатывать исключения как обшибки)
Ему не нравятся две вещи.
Вы используете функцию fopen
, которую он считает небезопасной. Но тут же показывает, как ему заткнуть рот :) - или используйте fopen_s
, или первой же строкой поставьте
#define _CRT_SECURE_NO_WARNINGS
Вы используете для вывода %d
, но этот спецификатор - для вывода целых чисел (тип int
). Вы хотите выводить double
- а тут надо использовать %lf
или там %le
- в зависимости, как вы хотите выводить...
А вообще, раз вы работаете в C++ - используйте потоки (ofstream
).
Спасибо всем за ответы. изменил открытие файла на след вид и вопросов у программы больше нет.
FILE *ff; fopen_s(&ff,"res1.txt", "w");
Теперь осталось убедиться что она считает то что мне нужно.
Виртуальный выделенный сервер (VDS) становится отличным выбором
Программирую софт на OpenSuse с фиксированым шрифтомПри запуске софта на другом дистрибутиве, к примеру на Ubuntu, выстовляется другой шрифт
Oбычно в индексах массивов, контейнеров используется беззнаковое числоК тому же unsigned(-1) компилятором преобразовывается на большое положительное...