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 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Для публикации сообщений создайте учётную запись или авторизуйтесь
Вы должны быть пользователем, чтобы оставить комментарий
Создать учетную запись
Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!
Регистрация нового пользователяВойти
Уже есть аккаунт? Войти в систему.
Войти