Jump to content
СофтФорум - всё о компьютерах и не только

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


Recommended Posts

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

Вопрос по 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;

}

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

Link to comment
Share on other sites

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

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:

Link to comment
Share on other sites

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]=...}}

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

Edited by Тролль
Link to comment
Share on other sites

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

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

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

а надо вот так

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

.

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

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

prog.rar

prog.rar

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...