Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.03.2009, 17:23   #1
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию поиск нуля в матрице

Помогите пожалуйста найти ошибку. Этот цикл должен искать элементы, не равные нулю и записивать их в вектор и индексы этих элементов в вектора. Подобную задачу я обсуждала уже в форуме. И использую модель, которую мне порекомендовали, но она почему-то для этого случая не работает

Код:
#define CMAX 11 
#define LMAX 4 
#define NMAX 2 
#define KMAX 2 
#define IMAX 1
#define JMAX 2
#define FMAX 3

double L1final[IMAX][JMAX][KMAX][FMAX];
double L1[IMAX*JMAX*KMAX*FMAX];                     
double iL1[IMAX*JMAX*KMAX*FMAX];                    
double jL1[IMAX*JMAX*KMAX*FMAX];                    
double kL1[IMAX*JMAX*KMAX*FMAX];                    
double lL1[IMAX*JMAX*KMAX*FMAX];

 int i, j , f, l;
out = fopen("out.txt","w");
 int vel = 0;
    
for(i = 0; i < IMAX; i++)
 for(l = 0; l < NMAX; l++)
  for (j = 0; j < JMAX; j++)
    for (f = 0; f < FMAX; f++)
    if (L1final(i,j,f,l)!=0)
     {
      iL1(vel)=i;
      jL1(vel)=j;       
      kL1(vel)=f;
      lL1(vel)=l;   
      L1(vel++)=Afinal(i,j,f,l); 
     }
printf("%i\n",vel); 
for (i = 0; i < vel; i++)
 fprintf(out,"%d",iL1(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%d",jL1(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%d",kL1(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%d",lL1(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%3.2lf",L1(i));
fclose(out);
Сама же матрица L1final (1*2*2*3):
Код:
[         0         0         0         0         0         0 7.29008e+14
  -1.45799e+15     90000 6.561e+19  7.29e+14 2.69997e+07 ]
ciaonataha вне форума Ответить с цитированием
Старый 31.03.2009, 17:35   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

ciaonataha
А где подключение заголовочных файлов? Где главная функция?

Это вот эта самая задача ->http://programmersforum.ru/showthread.php?t=43629 ?
Если так, то у меня все работает и для данных значений выводит:
Код:
0 0 0 0 0 0 
1 1 1 1 1 1 
0 0 0 1 1 1 
0 1 2 0 1 2 
729008000000000 -1457990000000000 90000 65610000000000000000 729000000000000 26999700
Проверял на коде, который я выкладывал в указанной теме в 26-м посте.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.03.2009, 18:47   #3
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

а у меня вот что выводит
Код:
000000
000000
000000
000000
729008099911710.1265610002429999915008.00-1457991872998288.75728999972999997.0090000.0026999701.00
ciaonataha вне форума Ответить с цитированием
Старый 31.03.2009, 18:49   #4
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Код:
void Gibbs::scanmatrixL(Array <double,4> &Afinal,Array <double,1> &A,Array <double,1> &iA,Array <double,1> &jA,Array <double,1> &kA,Array <double,1> &lA)
{
 int i, j , f, l;
out = fopen("out.txt","w");
 int vel = 0;
    
for(i = 0; i < IMAX; i++)
 for(l = 0; l < FMAX; l++)
  for (j = 0; j < JMAX; j++)
    for (f = 0; f < KMAX; f++)
    if (Afinal(i,j,f,l)!=0)
     {
      iA(vel)=i;
      jA(vel)=j;       
      kA(vel)=f;
      lA(vel)=l;   
      A(vel++)=Afinal(i,j,f,l); 
     }

//allocateArrays(shape(0,vel),iA,jA,kA,lA,A);

for (i = 0; i < vel; i++)
 fprintf(out,"%i",iA(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%i",jA(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%i",kA(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%i",lA(i));
fprintf(out,"\n");

for (i = 0; i < vel; i++)
 fprintf(out,"%3.2lf",A(i));

fclose(out);

}
ciaonataha вне форума Ответить с цитированием
Старый 31.03.2009, 18:49   #5
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Код:
void Gibbs::read(double T1, char *file_name)
{
//========================================================================================================
  Array <double,1> Tr(LMAX);
  Array <double,4> GHSERp(LMAX,NMAX,KMAX,CMAX);
  Array <double,6> L1ini(LMAX,IMAX,JMAX,KMAX,FMAX,CMAX);
  Array <double,6> L2ini(LMAX,IMAX,JMAX,KMAX,FMAX,CMAX);
  Array <double,7> L0ini(LMAX,IMAX,NMAX,IMAX,NMAX,IMAX,CMAX);

  Array <double,3> GHSERint(NMAX,KMAX,CMAX);
  Array <double,5> L1int(IMAX,JMAX,KMAX,FMAX,CMAX);
  Array <double,5> L2int(IMAX,JMAX,KMAX,FMAX,CMAX);
  Array <double,6> L0int(IMAX,NMAX,IMAX,NMAX,IMAX,CMAX);

  Array <double,2> GHSERfinal(NMAX,KMAX);
  Array <double,4> L1final(IMAX,JMAX,KMAX,FMAX);
  Array <double,4> L2final(IMAX,JMAX,KMAX,FMAX);
  Array <double,5> L0final(IMAX,NMAX,IMAX,NMAX,IMAX);

  Array <double,1> L1(IMAX*JMAX*KMAX*FMAX);                     
  Array <double,1> iL1(IMAX*JMAX*KMAX*FMAX);                    
  Array <double,1> jL1(IMAX*JMAX*KMAX*FMAX);                    
  Array <double,1> kL1(IMAX*JMAX*KMAX*FMAX);                    
  Array <double,1> lL1(IMAX*JMAX*KMAX*FMAX);    

  Array <double,1> L2(IMAX*JMAX*KMAX*FMAX);                     
  Array <double,1> iL2(IMAX*JMAX*KMAX*FMAX);                    
  Array <double,1> jL2(IMAX*JMAX*KMAX*FMAX);                    
  Array <double,1> kL2(IMAX*JMAX*KMAX*FMAX);                    
  Array <double,1> lL2(IMAX*JMAX*KMAX*FMAX);    

//=========================================================================================================
 int nm; //nomer matrici, kotoruu zapolnnyaem
 char str[256];
 fp=fopen(file_name,"rt");
 nm = -1;
 if (fp==NULL){cout<<" 'ne peut lire le fichier '"<<file_name<<endl;exit(-1);}
 while (!feof(fp))

  {

    str[0] = 0;

    char *tmp = fgets(str, sizeof(str), fp);

    if (!tmp || str[0] == 0) //Esli nichego ne schitali

      break; //Vihodim

    if (str[0] == '/') //Kommentariy

    {

      if (nm == 1)//Esli bil komentariy posle 1-y matrici

        nm = 2; //Znachit ko vtoroy perehodim

      continue;

    }
    if(str[0] == '/') //
    {
      if (nm ==2)
      nm = 3;
     continue;
    }
    int sp = calc_spaces(str); //Schitaem kol-vo probelov

   if (sp != 0 && nm == -1) //300 1000 1200 6000
   {
    nm = 0;
    char *tmp = str;
    for (int i = 0; i<=sp; i++){
    double a;
    sscanf(tmp,"%lf",&a);
    Tr(i) = a;
    tmp = strchr(tmp, ' ');
    if(!tmp)
    break;
    ++tmp;
    }
    continue;
   }
    if (sp == 4)//Esli 4 probela, znachit 0-ya matrica

      nm = 0;

    if (sp == 6 && nm == 0) //Esli 6 probelov i mi til'ko chto schitali 0-u matricu

      nm = 1; //Znachit perehodim k matrice 1

    //Zapolnyaem nujnuu matricu!
    if (sp == 7 && nm == 2) //
      nm = 3;

    if (nm == 0)

    {

      int t, i, j, l;

      double v;

      sscanf(str, "%d %d %d %d %lf", &t, &i, &j, &l, &v);

      GHSERp(t,i,j,l) = v;

    }

    if (nm == 1)

    {

      int t, i, j, k, l, m;

      double v;

      sscanf(str, "%d %d %d %d %d %d %lf", &t, &i, &j, &k, &l, &m, &v);

      L1ini(t,i,j,k,l,m) = v;

    }

    if (nm == 2)

    {

      int t, i, j, k, l, m;

      double v;

      sscanf(str, "%d %d %d %d %d %d %lf", &t, &i, &j, &k, &l, &m, &v);

      L2ini(t,i,j,k,l,m) = v;

    }
    if (nm == 3)
    {
     int t, i, j, k, l, m, n;
     double v;
     sscanf(str, "%d %d %d %d %d %d %d %lf", &t, &i, &j, &k, &l, &m, &n, &v);
     L0ini(t,i,j,k,l,m,n) = v;
    }    


  }

//cout<<Tr<<endl;
//cout<<L0ini<<endl;


 rewriteGHSERp(T1,Tr,GHSERp,GHSERint);//cout<<GHSERint<<endl;
 rewriteL(T1,Tr,L1ini,L1int);//cout<<L1int<<endl;
 rewriteL(T1,Tr,L2ini,L2int);//cout<<L2int<<endl;
 rewriteLtetra(T1,Tr,L0ini,L0int);//cout<<L0int<<endl;

 rewriteGHSERfinal(T1,GHSERint,GHSERfinal);//cout<<GHSERfinal<<endl;
 rewriteLfinal(T1,L1int,L1final);cout<<L1final<<endl;
 rewriteLfinal(T1,L2int,L2final);//cout<<L2final<<endl;
 rewriteL_tetra_final(T1,L0int,L0final);//cout<<L0final<<endl;
 
 scanmatrixL(L1final,L1,iL1,jL1,kL1,lL1);cout<<L1<<endl; 
 scanmatrixL(L2final,L2,iL2,jL2,kL2,lL2); 
 
}
ciaonataha вне форума Ответить с цитированием
Старый 31.03.2009, 18:51   #6
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
а у меня вот что выводит
Это значит, что вы неверно переписали мой код.
Как видите, у меня все нормально.
И, кстати, что это?
Код:
L1(vel++)=Afinal(i,j,f,l);
При обращении к элементу нужно использовать квадратные скобки.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.03.2009, 19:01   #7
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Тоже самое, что и
Код:
Velem[vel++]=MAT[i][j][k][l];
Я хотела бы присвоить размеры вектору Velem(vel),
ciaonataha вне форума Ответить с цитированием
Старый 31.03.2009, 19:06   #8
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

ciaonataha, я вижу, код сильно разросся. Вы хоть объясните где тут что. Быстро разобраться тут не получится, а у меня нет столько времени.
И я по-прежнему не вижу главной функции и подключения заголовочных файлов.

А вообще проблему лучше локализовать.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 31.03.2009, 19:15   #9
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Круглые скобки, потому что использую библиотеку blitz++
ciaonataha вне форума Ответить с цитированием
Старый 31.03.2009, 19:20   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Сообщение от ciaonataha
Круглые скобки, потому что использую библиотеку blitz++
Боюсь, что у меня этой библиотеки нет и я ей никогда не пользовался..
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск элементов в матрице, не равных нулю ciaonataha Общие вопросы C/C++ 37 29.03.2009 21:29
Меди плеер с нуля Xmire Общие вопросы C/C++ 5 03.08.2008 21:52
автоинкремент с нуля azat БД в Delphi 5 18.12.2007 08:26