Re: Ввід матриці з файлу в С*
1 тема - 1 проблема + на форумі уже вирішено питання по ротації матриці.
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Ввід матриці з файлу в С*
Для відправлення відповіді ви повинні увійти або зареєструватися
1 тема - 1 проблема + на форумі уже вирішено питання по ротації матриці.
1 тема - 1 проблема + на форумі уже вирішено питання по ротації матриці.
Вирішення Hanter'а не можу сумістити з своєю задачею!
Ввід матриці з файлу в С
Проблема зчитування!
Проблема зчитування!
А детальніше?
Не можу написати код для зчитування!
Пробував вже всілякі методи, результат практично один!
Коли в in файлі є
1 2
3 4
То треба зчитати так, щоб Був масив A[N][N] і щоб А[1][1]=1 [1][2]=2.....
То треба зчитати так, щоб Був масив A[N][N] і щоб А[1][1]=1 [1][2]=2.....
Ви впевнені, що саме A[1][1]=1, а не A[0][0] = 1?
A[0][0] = 1
Ви праві!
Але суть така ж!
Допоможете ?
Уривок нашвидкуруч. Аналогічний я уже кидав, тут хіба кілька уточнень для роботи з масивами.
const int MAX_SIZE = 1024;
int iRow = 0, jCol = 0, newItem = 0;
int matrix[2*N][2*N] = {0};
char strBuf[MAX_SIZE] = {0};
char strItem[MAX_SIZE] = {0};
while(!feof(fp))
{
fgets(strBuf, MAX_SIZE-1, fp);
strItem = strtok(strBuf, "\t "); // as a delimiter - tabulation or space
while(strItem)
{
newItem = atoi(strItem);
matrix[iRow][jCol] = newItem;
jCol++;
strItem = strtok(0, "\t ");
}
memset(strBuf, 0, MAX_SIZE);
memset(strItem, 0, MAX_SIZE);
iRow++;
}
Розмірність масиву тут не контролюється - будьте уважні. Але це нескладно додати, якщо вимагатиметься.
Дякую, але діло в тому, що розмірність якраз потрібна, бо програма( та, яку я надсилав) повертає матрицю власне по порядкових номерах!
При змозі, гляньте в той код!
Адже в С важко відділити кожен елемент масиву, що зчитаний з файлу!
А програма повинна бути на С
Дякую, але діло в тому, що розмірність якраз потрібна, бо програма( та, яку я надсилав) повертає матрицю власне по порядкових номерах!
При змозі, гляньте в той код!Адже в С важко відділити кожен елемент масиву, що зчитаний з файлу!
А програма повинна бути на С
Замініть
const int MAX_SIZE = 1024;
на
#define MAX_SIZE 1024
і маєте чистий С.
Так підійде?
Так, це вайже те, що ви надсилали попередньо!
Проблема: Як його "з'єднати" з моїм кодом!
Бо в мене це не виходить!
От робоча реалізація. Алгоритм тих диво-циклів з кількома матрицями не чіпав, за винятком початкової ініціалізації матриці A, яка читається з файлу. Робота з пам'яттю наведена на С++, бо маллочити на чистому С не маю ані настрою, ані часу.
ДЯКУЮ!!!
Спробую розібратись!
Наскільки розумію, то N вводиться користувачем для визначення порядку матриці?
ДЯКУЮ!!!
Спробую розібратись!
Наскільки розумію, то N вводиться користувачем для визначення порядку матриці?
Ну, у вас воно так і фігурувало у початковому коді.
Якщо потрібно інакше - придумайте, звідки ще взяти розмірність, бо якщо намагатися побудувати розмірність безпосередньо у процесі зчитування файлу, то навіть динамічні масиви свербітимуть по-чорному.
У будь-якому разі буде кривизна: або у структурі вхідного файлу (розмірність у першому рядку, наприклад), або у взаємозалежності файлу та вводу з клавіатури (та'як у наведеному прикладі).
Варіант без згаданих проблем - це використання контейнерів STL, але у вас, здс, задача про чистий С, тож блага цивілізації недоступні...
Дякую!
Буду розбиратись далі!
Спробую на чистий С переписати!
Якщо матриця у файлі записана у вигляді
1 2 3 4 5 6 7 8 9 10 11 12
, то можна порядково считати та розбити кожен рядок на підрядки за допомогою strtok().
Скажімо:#define N 3 #define MAX_SIZE 1024 #define MAX_LEN 10 int main() { // initialization, etc int matrix [2*N][2*N] = {0}; char strBuf[MAX_SIZE] = {0}; char strItem[MAX_LEN] = {0}; FILE *fp = fopen("myfile.txt", "r"); if(!fp) return 1; int iRow = 0, jCol = 0; while(!feof(fp)) { fgets(strBuf, MAX_SIZE-1, fp); strItem = strtok(strBuf, "\t"); // as a delimiter - tabulation while(strItem) { //Here you parse item from string and add to matrix as you need to :) jCol++; strItem = strtok(0, "\t"); } iRow++; } fclose(fp); return 0; }
В цьому коді вибиває помилку error C2440: =: невозможно преобразовать "char *" в "char [60]"
В цьому коді вибиває помилку error C2440: =: невозможно преобразовать "char *" в "char [60]"
Читайте останню версію по темі: http://replace.org.ua/post/6468/#p6468
Для відправлення відповіді ви повинні увійти або зареєструватися