1 Востаннє редагувалося Anddep (23.01.2013 10:31:47)

Тема: Ввід матриці з файлу в С*

Задача зчитати з файлу матрицю N порядку!
Як реалізувати?

2

Re: Ввід матриці з файлу в С*

Користуйтесь пошуком http://replace.org.ua/topic/643/

Білий Лунь

3

Re: Ввід матриці з файлу в С*

1. Відкрити файл.
2. Зчитати матрицю:
2.1. Вичитати дані
2.2. Перетворити дані та зберегти до змінних
3. Закрити файл.

I belong to the Dead Generation.

4

Re: Ввід матриці з файлу в С*

Як зчитати матрицю?
Адже у файл я можу ввести зовсім різні дані!

Потрібно щоб програма працювала, як для 3х3, так і для 6х6.)

І як виконати пункти 2,1 та 2,2?

5

Re: Ввід матриці з файлу в С*

А в задачі вказано взагалі, який файл, як задається вхідна матриця, чи ще щось?..

I belong to the Dead Generation.

6 Востаннє редагувалося Anddep (23.01.2013 14:41:31)

Re: Ввід матриці з файлу в С*

НІ!
Нічого
Просто ввід\вивід в файли.!

Тут треба повернути елементи матриці порядку 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;
 }

Вивід працює.
А ввід, не знаю як реалізувати зчитування матриці?

7

Re: Ввід матриці з файлу в С*

Якщо матриця у файлі записана у вигляді

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;
}
I belong to the Dead Generation.

8

Re: Ввід матриці з файлу в С*

Спробував..., не працює все одно!

Ця програма, що я надіслав код, має бути реалізовно з вводом\виводом в файли.
in та out

9

Re: Ввід матриці з файлу в С*

Anddep написав:

Спробував..., не працює все одно!

Ця програма, що я надіслав код, має бути реалізовно з вводом\виводом в файли.
in та out

Що саме у вас не працює?
Якщо ви про мій код, то варто уважніше читати коментарі до нього.
Якщо про свій - показуйте, з описом помилки.

I belong to the Dead Generation.

10

Re: Ввід матриці з файлу в С*

Я спробував Ваш код+ свій!
Можливо, щось не туди вставив, але він в мене не прицює!
Можете з цим допомогти?

11

Re: Ввід матриці з файлу в С*

Теоретично - можемо.
Практично - треба побачити код. :)

I belong to the Dead Generation.

12

Re: Ввід матриці з файлу в С*

Ось працююча програма без файлів

#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;
 }

13

Re: Ввід матриці з файлу в С*

Цікаво, як вона у вас працює, якщо вона навіть не компілюється.

Як мінімум, через оце:

#define N 1
int main()
{   int N;

Але якщо пропустити цей момент та закоментувати константу, то програма працює так:

http://s14.postimage.org/vsrcaht6p/result.png

Матриці подібні настільки ж, наскільки доберман та чау-чау. Хочете сказати, що це - робочий код? :)

З.І: здається, до посту від keithfay ви не поставилися серйозно, а дарма: там є достатньо ефективний для вашого випадку варіант, запропонований форумчанином Hanter.

I belong to the Dead Generation.

14 Востаннє редагувалося Anddep (26.01.2013 17:53:58)

Re: Ввід матриці з файлу в С*

Щодо помилки, перепрошую, не замітив! ( не те скопіював)
Щодо варіанту Hanter не пробував, але найблищим часом спробую! ... Відпишусь!

Щодо скріну, то результат таким і має бути!
Все правильно, якщо матриця

1 2
3 4

то результат

4 1
3 2

15

Re: Ввід матриці з файлу в С*

#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;
}
I belong to the Dead Generation.

16

Re: Ввід матриці з файлу в С*

/* Тут вам варто написати цикл, у якому робити
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");
}

В даному випадку, цей?

17

Re: Ввід матриці з файлу в С*

Виходить, що його.
По суті, замінити printf() на [ itoa() або sprintf() ] + fwrite();

Я просто не до кінця розумію логіки вашої задачі, відповідно до вашого передостаннього посту.

I belong to the Dead Generation.

18 Востаннє редагувалося Anddep (26.01.2013 22:38:47)

Re: Ввід матриці з файлу в С*

Ось задача!

http://cs316122.userapi.com/v316122844/4c23/LKwrP3dL9hY.jpg

В мене матриця задана як масив з порядковим номером, а у Вашому коді, як?
Не можу з цим циклом розібратись!

19

Re: Ввід матриці з файлу в С*

Тоді запис до файлу - просто поелементний, та'як згадувалося раніше. А матрицю перед тим перетворюєте відповідно до вимог задачі.

I belong to the Dead Generation.

20

Re: Ввід матриці з файлу в С*

Запис в мене реалізований в коді!
Проблема з читанням, Ваш код зчитує?