ZoomerJuk Опубликовано 8 июня, 2010 Жалоба Поделиться Опубликовано 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; } В прикрепленном файле исходник, исполняемый файл, файл с данными и пример результатов. Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
ZoomerJuk Опубликовано 8 июня, 2010 Автор Жалоба Поделиться Опубликовано 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: Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Тролль Опубликовано 8 июня, 2010 Жалоба Поделиться Опубликовано 8 июня, 2010 (изменено) 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]=...}} Границы изменения индексов в объявлениях и в циклах не соответствуют друг другу (границы первого индекса используются вместо границ второго и наоборот). И дальше тоже так же. Изменено 8 июня, 2010 пользователем Тролль Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
ZoomerJuk Опубликовано 8 июня, 2010 Автор Жалоба Поделиться Опубликовано 8 июня, 2010 Тролль , огромнейшая благодарность Вам! Действительно, при объявлении матриц результатов расчета я перепутал индексы строк и столбцов. Было так float i2[5][8];//матрица результата расчета токовfloat m[5][8];//матрица результата расчета моментов а надо вот так float i2[8][5];//матрица результата расчета токовfloat m[8][5];//матрица результата расчета моментов . Да... жара... мозг кипит... такой ляп сделать... стадно :g: Вот файлы, в первом посте почемуто не прикрепилось. prog.rar prog.rar Цитата Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.