Тема: Ввід матриці з файлу в С*
Задача зчитати з файлу матрицю 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();
Я просто не до кінця розумію логіки вашої задачі, відповідно до вашого передостаннього посту.
Ось задача!
В мене матриця задана як масив з порядковим номером, а у Вашому коді, як?
Не можу з цим циклом розібратись!
Тоді запис до файлу - просто поелементний, та'як згадувалося раніше. А матрицю перед тим перетворюєте відповідно до вимог задачі.
Запис в мене реалізований в коді!
Проблема з читанням, Ваш код зчитує?
Для відправлення відповіді ви повинні увійти або зареєструватися