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

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


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

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

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

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

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

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

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