Господа программисты прошу помочь мне, суть проблемы такая: Взялся решать задачу "Составитель кроссвордов", надо из файла прочитать слова, составить кроссворд и вставить в файл, сообразил код, (большенство не мною написаный) и проблема встала такая, когда ввожу следующие слова:
africa
family
engel
brother
charming
design
greatfull
hart
klient
effort
independence
то из кроссворда выподает слово engel, он просто пишет его рядом, хотя место для вставки есть, подскажите плиз как решить эту проблему, код программы ниже, заранее благодарен!!!
//—————————————————————————
#pragma hdrstop
#include <stdio.h>
#include <conio.h>
#define crss_sz 30
#pragma argsused
//—————————————————————————
typedef struct//тип структуры списка слов
{
char **grid;//матрица слов переменной длинны
int m;//количество строк сетки
int n;//количество столбцов сетки
int *len; //массив с размерами соотв. слов из grid
}
Matrix;
void printWords(Matrix M)
{
int i,j;
for (i=0; i<M.m; i++)
{
for (j=0; j<M.len[i]; j++)
printf("%c",M.grid[i][j]);
printf(" %d", M.len[i]);
printf("\n");
}
}
void printMatrix(char M[crss_sz][crss_sz])
{
int i,j;
for (i=0; i<crss_sz; i++)
{
for (j=0; j<crss_sz; j++)
printf("%c",M[i][j]);
printf("\n");
}
}
void readFile(Matrix *Words)
{
FILE *fp;
char c;
int i, j;
fp=fopen("words.txt", "r");
j=0;
i=0;
Words->len=NULL;
do
{
//нужно добавить новую строку в матрицу слов для очередного слова
Words->grid=realloc(Words->grid, (i+1)*sizeof(char *) );
Words->grid[i]=NULL;
c=fgetc(fp);
j=0;
while (c!='\n' && !feof(fp) )
//набираем слово в текущую строку матрицы слов
{
Words->grid[i]=realloc(Words->grid[i], (j+1)*sizeof(char));
Words->grid[i][j]=c;
j++;
c=fgetc(fp);
};
Words->len=realloc(Words->len, (i+1)*sizeof(int));
Words->len[i]=j;
i++;
}
while ( !feof(fp) );
Words->m=i;
fclose(fp);
}
void writeFile(char Cross[crss_sz][crss_sz])
{
FILE *fp;
int i, j;
fp=fopen("crosswords.txt", "w");
for (i=0; i<crss_sz; i++)
{
for (j=0; j<crss_sz; j++)
fputc(Cross[i][j], fp);
fprintf(fp, "\n");
}
fclose(fp);
}
//функция сортировки массива слов по длинне
void sortMatrix(Matrix *Words)
{
int i, j, t;
char *e;
for (i=0; i+1 < Words->m; i++)
for (j=i+1; j < Words->m; j++)
{
if ( Words->len[i] < Words->len[j])
{
e=Words->grid[i];
Words->grid[i]=Words->grid[j];
Words->grid[j]=e;
t=Words->len[i];
Words->len[i]=Words->len[j];
Words->len[j]=t;
}
}
}
//функция копирует слово str в кроссворд по горизонтали,начиная с координат(i,j)
void putLine(char *word, int word_sz, int i, int j, char Cross[crss_sz][crss_sz])
{
int s;
for (s=0; s<word_sz; j++, s++)
Cross[i]