Tak budu mít ještě jeden dotaz do tohoto vlákna. :-)
Úsek kódu, kde vytvářím mám furt stejný (kromě přidaného výpisu do souboru). Ovšem mám pár nových funkcí, které mi v určitých případech mohou výrazně změnit vstupní parametry funkce create_table(). Jde o to, že proměnné mohou vypadat například takto:
Je jasné, že originální pole mají navíc znak ":" a nejsou v něm uplicitní znaky. Pole line a column pak používám pro nadpisový řádek a slopec v tabulce (beze změny). Ovšem problém je u pole orig_line a orig_column. Tato pole totiž používám pro tvoření čísel, které pak vkládám do tabulky. Já bych ale potřeboval, aby když algoritmus narazí na znak ":", tak aby pozastavil počítání - respektive přičítal nulu. Takto:
Výsledná tabulka by se pak měla vygenerovat jako:
Nevíte, jak by měla vypadat podmínka, která by toto řešila?
/*
* Funkce vytvori matici prvku ze ktere posleze vypise rozkladovou tabulku
*/
void create_table (char* orig_line, char* orig_column, char* line, char* column)
{
int a = strlen(line);
int b = strlen(column);
char matrix [a] [b];
/* Inicializace matice */
int n;
for (n = 0; n <= a; n++)
{
int m;
for (m = 0; m <= b; m++)
{
matrix [n] [m] = '-';
}
}
/* Naplneni matice ciselnymi hodnotami dle danych souradnic */
int iter;
for (iter = 0; orig_line[iter] != '\0' && orig_column[iter] != '\0'; iter++)
{
matrix [get_index(line, orig_line[iter])] [get_index(column, orig_column[iter])] = '0' + (iter + 1);
}
/* */
FILE *fw;
fw = fopen("temp.txt", "w");
/* Vypsani rozkladove tabulky (matice) a ulozeni do textoveho souboru*/
printf("Tabulka:\n");
fprintf(fw, "M");
printf("M");
int x;
for (x = 0; column[x] != '\0'; x++)
{
printf("\t%c", column[x]);
fprintf(fw, "\t%c", column[x]);
}
printf("\n");
fprintf(fw, "\n");
int z;
for (z = 0; line[z] != '\0'; z++)
{
printf("%c\t", line[z]);
fprintf(fw, "%c\t", line[z]);
int y;
for (y = 0; column[y] != '\0'; y++)
{
printf("%c\t", matrix [z] [y]);
fprintf(fw, "%c\t", matrix [z] [y]);
}
printf("\n");
fprintf(fw, "\n");
}
fclose(fw);
}
/*
* Funkce pro zjisteni indexu pole
*/
unsigned get_index (const char* str, char c)
{
for (unsigned i = 0; str[i] != '\0'; i++)
{
if (str[i] == c)
{
return i;
}
}
assert(0 && "!!! Chyba ve funkci get_index() !!!");
}