Тема: Ввід матриці з файлу в С*
Задача зчитати з файлу матрицю N порядку!
Як реалізувати?
Ви не увійшли. Будь ласка, увійдіть або зареєструйтесь.
Ласкаво просимо вас на україномовний форум з програмування, веб-дизайну, SEO та всього пов'язаного з інтернетом та комп'ютерами.
Будемо вдячні, якщо ви поділитись посиланням на Replace.org.ua на інших ресурсах.
Для того щоб створювати теми та надсилати повідомлення вам потрібно Зареєструватись.
Український форум програмістів → C++ → Ввід матриці з файлу в С*
Для відправлення відповіді ви повинні увійти або зареєструватися
Задача зчитати з файлу матрицю N порядку!
Як реалізувати?
Користуйтесь пошуком http://replace.org.ua/topic/643/
1. Відкрити файл.
2. Зчитати матрицю:
2.1. Вичитати дані
2.2. Перетворити дані та зберегти до змінних
3. Закрити файл.
Як зчитати матрицю?
Адже у файл я можу ввести зовсім різні дані!
Потрібно щоб програма працювала, як для 3х3, так і для 6х6.)
І як виконати пункти 2,1 та 2,2?
А в задачі вказано взагалі, який файл, як задається вхідна матриця, чи ще щось?..
НІ!
Нічого
Просто ввід\вивід в файли.!
Тут треба повернути елементи матриці порядку 2*N
КОД
#include <stdio.h>
#define N 1
 
int main()
{   FILE *out;
    FILE *in;
    printf("N=");
    int A[2*N][2*N],B1[N][N],B2[N][N],B3[N][N],B4[N][N],i,j,k,m,q=0;
        
        printf("Stara\n");
        for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                {                    
                    A[i][j]=q;
                        q++;
                }
                printf("\n");
        }
 
        for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                        printf("%d   ",A[i][j]);
                printf("\n");
        }
        
 
        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                        B1[i][j]=A[i][j];
 
        for(i=0;i<N;i++)
                for(j=N,m=0;j<2*N;j++,m++)
                        B2[i][m]=A[i][j];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=N,m=0;j<2*N;j++,m++)
                        B3[k][m]=A[i][j];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=0;j<N;j++)
                        B4[k][j]=A[i][j];
 
        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                        A[i][j]=B4[i][j];
 
        for(i=0;i<N;i++)
                for(j=N,k=0;j<2*N;j++,k++)
                        A[i][j]=B1[i][k];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=N,m=0;j<2*N;j++,m++)
                        A[i][j]=B2[k][m];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=0;j<N;j++)
                        A[i][j]=B3[k][j];
 
        printf("Nova\n");
        for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                        printf("%d   ",A[i][j]);
                printf("\n");
        }
            out = fopen("E:\\out.txt","wt"); 
            //fprintf( out, "Nova\n" );
            for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                        fprintf( out,"%d   ",A[i][j]);
               fprintf( out,"\n");
        }
    fclose(out); 
 getchar();
return 0;
 }Вивід працює.
А ввід, не знаю як реалізувати зчитування матриці?
Якщо матриця у файлі записана у вигляді
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;
}Спробував..., не працює все одно!
Ця програма, що я надіслав код, має бути реалізовно з вводом\виводом в файли.
in та out
Спробував..., не працює все одно!
Ця програма, що я надіслав код, має бути реалізовно з вводом\виводом в файли.
in та out
Що саме у вас не працює?
Якщо ви про мій код, то варто уважніше читати коментарі до нього.
Якщо про свій - показуйте, з описом помилки.
Я спробував Ваш код+ свій!
Можливо, щось не туди вставив, але він в мене не прицює!
Можете з цим допомогти?
Теоретично - можемо.
Практично - треба побачити код. 
Ось працююча програма без файлів
#include <stdio.h>
#define N 1
int main()
{   int N;
        printf("N=");
        scanf ("%d",&N);
    int A[2*N][2*N],B1[N][N],B2[N][N],B3[N][N],B4[N][N],i,j,k,m,q=0;
        
        printf("Stara\n");
        for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                {                    
                    A[i][j]=q;
                        q++;
                }
                printf("\n");
        }
 
        for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                        printf("%d   ",A[i][j]);
                printf("\n");
        }
        
 
        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                        B1[i][j]=A[i][j];
 
        for(i=0;i<N;i++)
                for(j=N,m=0;j<2*N;j++,m++)
                        B2[i][m]=A[i][j];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=N,m=0;j<2*N;j++,m++)
                        B3[k][m]=A[i][j];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=0;j<N;j++)
                        B4[k][j]=A[i][j];
 
        for(i=0;i<N;i++)
                for(j=0;j<N;j++)
                        A[i][j]=B4[i][j];
 
        for(i=0;i<N;i++)
                for(j=N,k=0;j<2*N;j++,k++)
                        A[i][j]=B1[i][k];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=N,m=0;j<2*N;j++,m++)
                        A[i][j]=B2[k][m];
 
        for(i=N,k=0;i<2*N;i++,k++)
                for(j=0;j<N;j++)
                        A[i][j]=B3[k][j];
 
        printf("\Nova\n");
        for(i=0;i<2*N;i++)
        {       for(j=0;j<2*N;j++)
                        printf("%d   ",A[i][j]);
                printf("\n");
        }
 
 getchar();
return 0;
 }Цікаво, як вона у вас працює, якщо вона навіть не компілюється.
Як мінімум, через оце:
#define N 1
int main()
{   int N;Але якщо пропустити цей момент та закоментувати константу, то програма працює так:

Матриці подібні настільки ж, наскільки доберман та чау-чау. Хочете сказати, що це - робочий код? 
З.І: здається, до посту від keithfay ви не поставилися серйозно, а дарма: там є достатньо ефективний для вашого випадку варіант, запропонований форумчанином Hanter.
Щодо помилки, перепрошую, не замітив! ( не те скопіював)
Щодо варіанту Hanter не пробував, але найблищим часом спробую! ... Відпишусь!
Щодо скріну, то результат таким і має бути!
Все правильно, якщо матриця 
1 2
3 4то результат
4 1
3 2#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};
    char itemStr[MAX_LEN] = {0};
    int newItem = 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 :)
            newItem = atoi(strItem);
            matrix[iRow][jCol] = newItem;
 
            jCol++;
            strItem = strtok(0, "\t");
        }
 
        iRow++;
    }
    
    fclose(fp);
 
    fp = fopen("output.txt", "w");
    
    /* Тут вам варто написати цикл, у якому робити
        fwrite(itemStr, strlen(itemStr), 1, fp);
        відповідно до порядку елементів, який вам потрібний.
    */
    fclose(fp);
 
    return 0;
}/* Тут вам варто написати цикл, у якому робити
fwrite(itemStr, strlen(itemStr), 1, fp);
відповідно до порядку елементів, який вам потрібний.
*/
Тобто вивід елементів в файл?
 for(i=0;i<2*N;i++)
{ for(j=0;j<2*N;j++)
printf("%d ",A[i][j]);
printf("\n");
}В даному випадку, цей?
Виходить, що його.
По суті, замінити printf() на [ itoa() або sprintf() ] + fwrite();
Я просто не до кінця розумію логіки вашої задачі, відповідно до вашого передостаннього посту.
Ось задача!

В мене матриця задана як масив з порядковим номером, а у Вашому коді, як?
Не можу з цим циклом розібратись!
Тоді запис до файлу - просто поелементний, та'як згадувалося раніше. А матрицю перед тим перетворюєте відповідно до вимог задачі.
Запис в мене реалізований в коді!
Проблема з читанням, Ваш код зчитує?
Для відправлення відповіді ви повинні увійти або зареєструватися