Pętla for po tablicy łańcuchów

0

Witam

Mam problem z utworzeniem następującej pętli:

#include <stdio.h>
#include <conio.h>
#include <string.h> 
const int M = 30, N = 14;
char t[M][N]

void profile(char t[M][N])
{
int j;
for (j=0;j<M;j++)
{
t[j]=power_profile**j**
}
}

Powyższa pętla ma utworzyć tablicę łańcuchów zawierającą 30 wyrazów o nazwie power_profile1, power_profile2, itd.
Nie wiem jak zrobić taką numerację. Chciałbym też później odwołać się do takiej tablicy łańcuchów, aby wykonać na niej operację w pętli od 1 do 30, tego typu:

for ( j = 1 ; j<=30 ; j++)
DEFINE_PROFILE(power_profile**j**, ft, var)
{
	float x[3];
	float z;
	face_t f;
	begin_f_loop(f,ft)
	{
		F_CENTROID(x,f,ft);
	    z = x[2];
	    F_PROFILE(f,ft,var)= q[j]*sin(((z-0.287)/0.02)*M_PI);
	}
	end_f_loop(f,ft)

}

W powyższej pętli for wykorzystywana jest funkcja DEFINE_PROFILE (z biblioteki do pisania UDF pod aplikację FLUENT). Nie chciałbym jej pisać 30 razy zmieniając za każdym razem tylko nazwę na power_profile1, itd. tylko wykonać ją w pętli 30 razy

Jeżeli istnieje inny sposób na rozwiązanie tego problemu to będę wdzięczny za podzielenie się nim. Zależy mi na tym, aby w jakikolwiek sposób sobie z tym poradzić aby uniknąć mechanicznego tworzenia 30 razy funkcji DEFINE_PROFILE.

Z góry dziękuję za pomoc

0
const int M = 30, N = 15 // 15  bo "power_profile29 "
//char t[M][N] to leci np do main'a
 
void profile(char t[][N])
  {
   int i;
   for(i=0;i<M;++i) sprintf(t[i],"power_profile%d",i+1);
  }
0

Error: E:...\profile_mocy.c: line 15: sprintf: undeclared variable

#include "udf.h"
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <string.h> 
const int M = 2 , L = 15
char t[M][L];
float q[M];

void profile(char t[][L])
  {
   int i;
   for(i=0;i<M;++i) 
   {
   sprintf(t[i],"power_profile%d",i+1);
   }
  }
  

for ( i = 1 ; i<=M ; i++)
DEFINE_PROFILE(t[i], ft, var)
{
	float x[3];
	float z;
	face_t f;
	float q[1] = 1000;
	float q[2] = 5000;

	begin_f_loop(f,ft)
	{
		F_CENTROID(x,f,ft);
	    z = x[2];
	    F_PROFILE(f,ft,var)= q[i]*sin(((z-0.287)/0.02)*M_PI);
	}
	end_f_loop(f,ft)

}

Na razie testuję powyższą pętlę tylko dla dwóch powtórzeń, jak zadziała mi tam gdzie ją używam wtedy rozszerzę na 30

0

Jeżeli użyje fprintf zamiast sprintf to zadziała, ale mam też problem tego, typu, że:

line 7: invalid constant-expression in array size declaration

Jak wpiszę z palca liczby to leci, jak chcę użyć stałych, to nie daje rady

0

Co do stałych to w C używa się do tego celu #define
Co do sprintf - chrzani waść.
Co do fprintf - jeszcze większy chrzan bo fprintf wypisuje do strumienia.
http://ideone.com/hkrLkF

0

Mam teraz inny problem:
line 11: profile: undeclared variable
W mainie nie uruchamia mi funkcji profile, nie wiem dlaczego to nie działa, z

#include "udf.h"
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <string.h> 
#define M=2, L=15
#define char t[M][L]

int main()
{
profile(t);
return 0;
}

void profile(char t[][L])
  {
   int i;
   for(i=0;i<M;++i) 
   {
   fprintf(t[i],"power_profile%d",i+1);
   }
 
for ( i = 1 ; i<=M ; i++)
{
DEFINE_PROFILE(t[i], ft, var)
{
	float x[3];
	float z;
	face_t f;
	float q[1] = 1000;
	float q[2] = 5000;

	begin_f_loop(f,ft)
	{
		F_CENTROID(x,f,ft);
	    z = x[2];
	    F_PROFILE(f,ft,var)= q[i]*sin(((z-0.287)/0.02)*M_PI);
	}
	end_f_loop(f,ft)
}
}

	}	

Dzięki za pomoc już udzieloną :)

1
#define M=2, L=15
#define char t[M][L]

przeczytaj sobie jak działają definy w C/C++, a potem zacznij pisać

0

Naprawiłem parę błędów, ale teraz jest taki problem:

line 27: missing initializer for computed-length array

include "udf.h"
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <string.h> 
#define M=2, L=15

void profile(char t[][15]);

int main()
{
char t[2][15];
profile(t);
return 0;
}

void profile(char t[][15])
  {
   int i;
   for(i=0;i<2;++i) 
   {
   fprintf(t[i],"power_profile%d",i+1);
   }
 
for ( i = 0 ; i<=1 ; i++)
{
DEFINE_PROFILE(t[], ft, var)     - WIERSZ 27
{
	float x[3];
	float z;
	face_t f;
	float q[0] = 1000;
	float q[1] = 5000;

	begin_f_loop(f,ft)
	{
		F_CENTROID(x,f,ft);
	    z = x[2];
	    F_PROFILE(f,ft,var)= q[i]*sin(((z-0.287)/0.02)*M_PI);
	}
	end_f_loop(f,ft)
}
}

	}	
0

Czym jest DEFINE_PROFILE ?

0

To jest funkcja, która w programie do symulowania przepływów określa danego typu profil (tutaj strumienia ciepła) na zadanej powierzchni. Wszystko co jest w niej zawarte działa, bo testowałem dla jednej powierzchni. Chcę uniknąć pisania jej 30 razy (a właściwie to kopiowania).

DEFINE_PROFILE(t[i], ft, var) - element t[i] określa nazwę profilu jaka będzie widoczna na liście opcji sposobu określania profilu danej wielkości (tutaj wspomnianego strumienia ciepła) w programie gdy funkcja zostanie w nim skompilowana. Chciałbym w tym programie mieć od razu po wykonaniu w pętli funkcji DEFINE_PROFILE mieć dostępne od razu 30 profili na liście.

0

Przeczytaj uważnie co napisałeś i porównaj z kodem:

blowback napisał(a):

... DEFINE_PROFILE(t[i], ft, var) ...

0

taki sam błąd jak napiszę t[i] w kodzie

dzięki za taką wytrwałość, programowaniem zajmuje się w niewielkim stopniu gdy muszę tworzyć user defined function (UDF), a z reguły nie wymaga to zbyt wielkiej znajomości C

0

Bez dokładnej wiedzy czym jest ten DEFINE_PROFILE i reszta zadeklarowanych makr to nie da się ci pomóc.
Może wklej ten "udf.h"

0

Zacznij od nauki programowania lub wynajmij fachowca, to jest zbyt skomplikowane zadanie jak na twój aktualny poziom programowania.

1 użytkowników online, w tym zalogowanych: 0, gości: 1