Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.03.2009, 15:59   #1
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию поиск элементов в матрице, не равных нулю

Программа должна искать числа в матрице, не равные нулю и записивать индексы этих элементов в векторы и эти элементы в вектор.
Помогите пожалуйста разобраться

Код:
int main()
{
FILE *in;
FILE *out;
in = fopen("matrix.txt","r");
out = fopen("sortie.txt","w");
int i, j , k , l;
double MAT[6][2][2][6];
while (!feof(in)){
for(i=0; i<6; i++){
 for(l=0; l<6; l++)
  for (j=0; j<2; j++){
    for (k=0; k<2; k++){
 fscanf(in,"%lf",&MAT[i][j][k][l]);fprintf(out,"%lf",MAT[i][j][k][l]);
 }}}}

fclose(in);

double *pf;
double *calculer;
int MAT1[6];
for (i=0; i<6; i++){
 MAT1[i]=0;}

pf = &MAT[0][0][0][0];

for (calculer = pf; calculer < &MAT[6][0][0][0]; calculer++)
 for (calculer = pf; calculer < &MAT[0][0][0][6]; calculer++){
  for (calculer = pf; calculer < &MAT[0][2][0][0]; calculer++)
   for (calculer = pf; calculer < &MAT[0][0][2][0]; calculer++){
     if (*calculer!=0){
      for (i=0; i<6; i++)
 MAT1[i] = (calculer - pf);}}}

for (i=0; i<6; i++){
printf("%d",MAT1[i]);}

fclose(out);
}
ciaonataha вне форума Ответить с цитированием
Старый 29.03.2009, 16:53   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Итак. Как я понимаю, есть 4-мерный массив.
Цитата:
записивать индексы этих элементов в векторы
То есть есть 4 вектора? Так?
Цитата:
и эти элементы в вектор
и еще один пятый вектор? Все правильно?

Во-первых, приведите содержание файла matrix.txt.
Во-вторых, а указатели вам тут зачем? Все без них делается.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 16:57   #3
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

вот текстовый файл....
Вложения
Тип файла: txt matrix.txt (73 байт, 111 просмотров)
ciaonataha вне форума Ответить с цитированием
Старый 29.03.2009, 17:01   #4
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Какое-то странное содержимое:
Код:
0 0 0 0 1.9
1. 1.5 1. 11. 0
0 0 2. 10.5 0
-2. 21. 20. 0 0
1. 0 -12. 0 0
Во-первых, уж очень напоминает обычную матрицу. Вы уверены, что это не она?
И во-вторых, почему после точек пробелы? Это уже, получается, не вещественные числа, а непонятно что.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 17:08   #5
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

есть 4 вектора для индексов и 5 вектор, для самих значений, которые не равня нулю.
Только, когда я считиваю элементы из текстового файла, они записиваются в матрицу. И эта матрица записывается в файл в одну строку. В этой строке встречаутся и другие числа (такие как 0.290512 или еще хуже 0.000000-360465672504775395806328015860670), тоесть такой метод заполнения матрицы автоматически заполняет каким-то набором чисел элементя матрицы.
ciaonataha вне форума Ответить с цитированием
Старый 29.03.2009, 17:11   #6
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

Но я же не могу в текстовом фаиле отразить всю четырехмерность матрицы...Поэтому записивау в таком виде. Может нужно ввести ограничения на пробел.!?
ciaonataha вне форума Ответить с цитированием
Старый 29.03.2009, 17:17   #7
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Цитата:
Но я же не могу в текстовом фаиле отразить всю четырехмерность матрицы...Поэтому записивау в таком виде
А вы действительно думаете, что компьютер понимает, что это числа? Увы нет. Он и не догадывается о вашей идее таким образом записать четырехмерную матрицу.

Имхо вы не сможете адекватно записать такое.
Да и сомневаюсь, что вам это надо. У вас написано:
Цитата:
Программа должна искать числа в матрице, не равные нулю и записивать индексы этих элементов в векторы и эти элементы в вектор.
Что означает, что в конечном итоге мы получим 5 векторов, которые в файле будут из себя представлять 5 строк с числами.

Исходную матрицу можно записать также в одну строку.
И повторюсь: никакие указатели здесь использовать не нужно! Обычные циклы с обычными счетчиками.
Если элемент не равен нулю, то пишем индексы в те 4 вектора, сам элемент - в 5-й вектор. Увеличиваем счетчик для векторов.

И потом просто проходим в цикле по элементам векторов и пишем их в файл.
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 29.03.2009, 17:23   #8
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

а как без указателей сделать?
ciaonataha вне форума Ответить с цитированием
Старый 29.03.2009, 17:27   #9
ciaonataha
Форумчанин
 
Регистрация: 12.02.2009
Сообщений: 150
По умолчанию

вот что видает, когда матрицу в одну строчку записиваю. Мне не нравится, что в sortie.txt он заполняет матрицу 4-ю какими-то непонятними числами под конец
Вложения
Тип файла: txt matrix.txt (144 байт, 120 просмотров)
Тип файла: txt sortie.txt (1.4 Кб, 124 просмотров)
ciaonataha вне форума Ответить с цитированием
Старый 29.03.2009, 17:37   #10
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Вот упрощенный вариант (поменьше чисел) - матрица 2x2x2x2. (всего 16 элементов)
Размер указывается в начале (константы).

Файл matrix.txt:
Код:
0 0 0 76 0 8 45 5 6 9 0 4 3 6 0 0
Программа:
Код:
#include <stdio.h>
#include <conio.h>

int main()
{
const int M1=2, M2=2, M3=2, M4=2;
FILE *in;
FILE *out;
int i,j,k,l;
double MAT[M1][M2][M3][M4];
int V1[M1*M2*M3*M4], V2[M1*M2*M3*M4], V3[M1*M2*M3*M4], V4[M1*M2*M3*M4];
double Vz[M1*M2*M3*M4];
int vk=0;

in = fopen("matrix.txt","r");
out = fopen("sortie.txt","w");

while(!feof(in))
 for(i=0;i<M1;i++)
  for(j=0;j<M2;j++)
   for(k=0;k<M3;k++)
    for(l=0;l<M4;l++)
     fscanf(in,"%lf",&MAT[i][j][k][l]);

fclose(in);

 for(i=0;i<M1;i++)
  for(j=0;j<M2;j++)
   for(k=0;k<M3;k++)
    for(l=0;l<M4;l++)
     if(MAT[i][j][k][l]!=0)
      {
       V1[vk] = i;
       V2[vk] = j;
       V3[vk] = k;
       V4[vk] = l;
       Vz[vk++] = MAT[i][j][k][l];
      }

for(i=0;i<vk;i++)
 fprintf(out,"%d ",V1[i]);
fprintf(out,"\n");
for(i=0;i<vk;i++)
 fprintf(out,"%d ",V2[i]);
fprintf(out,"\n");
for(i=0;i<vk;i++)
 fprintf(out,"%d ",V3[i]);
fprintf(out,"\n");
for(i=0;i<vk;i++)
 fprintf(out,"%d ",V4[i]);
fprintf(out,"\n");
for(i=0;i<vk;i++)
 fprintf(out,"%3.2lf ",Vz[i]);

fclose(out);

getch();
return 0;
}
Файл sortie.txt после работы программы:
Код:
0 0 0 0 1 1 1 1 1 
0 1 1 1 0 0 0 1 1 
1 0 1 1 0 0 1 0 0 
1 1 0 1 0 1 1 0 1 
76.00 8.00 45.00 5.00 6.00 9.00 4.00 3.00 6.00
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
в сглаженой матрице найти сумму модулей элементов расположенных ниже главной диагонали Sergeo_89 Паскаль, Turbo Pascal, PascalABC.NET 8 07.12.2010 00:02
Оптимизировать алгоритм вычисления сумм элементов главной и побочной диагонали в матрице - Delphi r9m Помощь студентам 5 04.02.2009 11:01
В прямоугольной матрице переставить столбцы так, чтобы сумма элементов столбца росла от первого столбца Aleo13 Помощь студентам 5 15.10.2008 18:34