Перейти к содержанию
СофтФорум - всё о компьютерах и не только

Результат расчета зависит от порядка объявл. массивов?!


Рекомендуемые сообщения

Здравствуйте!

Вопрос по Borland C++, v3.1. Пишу программку рассчета тока и момента по заданным параметрам. Результат пишется в текстовые файлы. Проблема в том, что результаты вычислений меняются, если поменять местами строки объявления массивов местами! :g: Почему так?

Исходник:

#include<iostream.h>

#include<conio.h>

#include<math.h>

#include<fstream.h>

int main ()

{

clrscr();

int i,j;

float r1z,x1z,r2z,x2z,rps,pn,un,n1,U,sn,m1,e2n,kn,kpd,cosfi,f;

float i1n,uf,r1,r2s,x1,x2s,w1,snew,rpnew;

float rpi[5];//массив значений сопротивления Rp

float i2[5][8];//матрица результата расчета токов

float m[5][8];//матрица результата расчета моментов

float rp[5]={0,1,2,3,4}; //исходные данные

float s[8]={0.03,0.06,0.17,0.21,0.38,0.45,0.65,0.85}; //исходные данные

fstream f1,f2,f3;

f1.open("dano.txt",ios::in);

f1>>r1z>>x1z>>r2z>>x2z>>pn>>un>>n1>>U>>sn>>m1>>e2n>>kn>>kpd>>cosfi; //считываем из файла исходные данные

f1.close();

i1n=pn/(sqrt(3)*un*kpd*cosfi);//вычисляем ток

//вычисляем требуемые параметры по исх. данным

uf=un/sqrt(3);

r1=r1z*uf/i1n;

r2s=r2z*uf/i1n;

x1=x1z*uf/i1n;

x2s=x2z*uf/i1n;

w1=2*3.14*n1/60;

//формируем массив значений сопротивления Rp, которые равны 0..4*R1

for(j=0;j<5;j++)

rpi[j]=rp[j]*r1;

//расчитываем массивы тока и момента

for(i=0;i<8;i++) //цикл по строкам

{

snew=s; //задаем значение скольжения из массива s[ ]

for(j=0;j<5;j++) //цикл по столбцам

{

rpnew=rp[j]*r1; //задаем значение сопротивления Rp

i2[j]=kn*uf*uf/(e2n*sqrt((r1+((r2s+rpnew)/snew))*(r1+((r2s+rpnew)/snew))+(x1+x2s)*(x1+x2s))); //расчет тока

m[j]=m1*uf*uf*(r2s+rpnew)/(w1*snew*((r1+((r2s+rpnew)/snew))*(r1+((r2s+rpnew)/snew))+(x1+x2s)*(x1+x2s))); //расчет момента

}

}

f2.open("rezultm.txt",ios::out); //запись массива знасений момента

for(i=0;i<5;i++)

f2<<"\t "<<"rp["<<i+1<<"]=" <<rpi;

f2<<"\n"<<"\n";

for(i=0;i<8;i++)

{

f2<<"S["<<i+1<<"]"<<"\t\t\t";

for (j=0;j<5;j++)

f2<<m[j]<<"\t\t";

f2<<"\n";

}

f2.close();

f3.open("rezulti.txt",ios::out); //запись массива знасений тока

for(i=0;i<5;i++)

f3<<" "<<"rp["<<i+1<<"]="<<rpi;

f3<<"\n"<<"\n";

for(i=0;i<8;i++)

{

f3<<"S["<<i+1<<"] "<<"\t";

for (j=0;j<5;j++)

f3<<i2[j]<<"\t";

f3<<"\n";

}

f3.close();

return 0;

}

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

Ссылка на комментарий
Поделиться на другие сайты

т.е. если обявить массивы так

float r1z,x1z,r2z,x2z,rps,pn,un,n1,U,sn,m1,e2n,kn,kpd,cosfi,f;

float i1n,uf,r1,r2s,x1,x2s,w1,snew,rpnew;

float rpi[5];//массив значений сопротивления Rp

float i2[5][8];//матрица результата расчета токов

float m[5][8];//матрица результата расчета моментов

float rp[5]={0,1,2,3,4}; //исходные данные

float s[8]={0.03,0.06,0.17,0.21,0.38,0.45,0.65,0.85};

а затем, например, так

float r1z,x1z,r2z,x2z,rps,pn,un,n1,U,sn,m1,e2n,kn,kpd,cosfi,f;

float rp[5]={0,1,2,3,4}; //исходные данные

float s[8]={0.03,0.06,0.17,0.21,0.38,0.45,0.65,0.85};

float i1n,uf,r1,r2s,x1,x2s,w1,snew,rpnew;

float rpi[5];//массив значений сопротивления Rp

float i2[5][8];//матрица результата расчета токов

float m[5][8];//матрица результата расчета моментов

результаты расчетов меняютс :g:

Ссылка на комментарий
Поделиться на другие сайты

ZoomerJuk:

На прикрепление файлов к сообщениям есть ограничения, особенно для новичков, так что если файл не присоединяется, надо пользоваться файлообменником, советы на этот счет есть в FAQ форума, впрочем, обычно разъяснения, как использовать файлообменник, излишни.

А по программе, что бросается в глаза, это

float i2[5][8]; float m[5][8];  ...for(i=0;i<8;i++){snew=s[i];for(j=0;j<5;j++) //цикл по столбцам{rpnew=rp[j]*r1; //задаем значение сопротивления Rpi2[i][j]=...m[i][j]=...}}

Границы изменения индексов в объявлениях и в циклах не соответствуют друг другу (границы первого индекса используются вместо границ второго и наоборот). И дальше тоже так же.

Изменено пользователем Тролль
Ссылка на комментарий
Поделиться на другие сайты

Тролль , огромнейшая благодарность Вам!

Действительно, при объявлении матриц результатов расчета я перепутал индексы строк и столбцов. Было так

float i2[5][8];//матрица результата расчета токовfloat m[5][8];//матрица результата расчета моментов

а надо вот так

float i2[8][5];//матрица результата расчета токовfloat m[8][5];//матрица результата расчета моментов

.

Да... жара... мозг кипит... такой ляп сделать... стадно :g:

Вот файлы, в первом посте почемуто не прикрепилось.

prog.rar

prog.rar

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...