ZoomerJuk Posted June 8, 2010 Report Share Posted June 8, 2010 Здравствуйте! Вопрос по 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; } В прикрепленном файле исходник, исполняемый файл, файл с данными и пример результатов. Quote Link to comment Share on other sites More sharing options...
ZoomerJuk Posted June 8, 2010 Author Report Share Posted June 8, 2010 т.е. если обявить массивы так 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: Quote Link to comment Share on other sites More sharing options...
Тролль Posted June 8, 2010 Report Share Posted June 8, 2010 (edited) 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 June 8, 2010 by Тролль Quote Link to comment Share on other sites More sharing options...
ZoomerJuk Posted June 8, 2010 Author Report Share Posted June 8, 2010 Тролль , огромнейшая благодарность Вам! Действительно, при объявлении матриц результатов расчета я перепутал индексы строк и столбцов. Было так float i2[5][8];//матрица результата расчета токовfloat m[5][8];//матрица результата расчета моментов а надо вот так float i2[8][5];//матрица результата расчета токовfloat m[8][5];//матрица результата расчета моментов . Да... жара... мозг кипит... такой ляп сделать... стадно :g: Вот файлы, в первом посте почемуто не прикрепилось. prog.rar prog.rar Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.