Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Денис47
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 1
1

Среди столбцов матрицы, содержащих только положительные элементы, найти столбец с min произведением элементов

11.04.2017, 15:54. Просмотров 290. Ответов 0
Метки нет (Все метки)

Доброго времени суток, не получается написать программу : Ввести двумерный целочисленный массив размерностью M*N в память ПЭВМ. Память под массив выделить динамически, сначала под один элемент, затем под остальные. Вывести массив на экран по N элементов в строке. Записать массив в файл.
После записи элементов массива в файл информация должна быть сохранена, и при последующем выходе из программы и новой её загрузке должно произойти корректное считывание информации из файла и дальнейшее её использование.
Вывести массив из файла на экран по N элементов в строке. Среди столбцов, содержащих только положительные элементы, найти столбец с минимальным произведением элементов.
Результат вывести на экран. Работу программы построить в виде меню.
Код похожей программы но она написана с таким но условием (. Определить порядковые номера первого отрицательного и последнего положительного элементов (если таковые имеются). Значение элементов и их порядковые номера вывести или выдать соответствующее сообщение при их отсутствии. )

Собственно код

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
#include <windows.h>
#include <string.h>
#include <conio.h>
#include <stdio.h>
#include <fcntl.h>
#include <io.h>
#include <sys\types.h>
#include <sys\stat.h>
#include <errno.h>
 
 
char* Rus(const char* text);
void main(void);
void input_rec(int,int);
int read_file(int);
int read_rec(int);
void write_file(int);
 
int* inp_1;
int* inp_zap;
int count_massiv;
int kol_stroka=0;
int kol_stolbec=0;
 
void main(void)
{   
 int count;
 int var;
 int var_ch=-1;
 int read_c;
 int base;
 int i=0;
 int j=0;
 int priz_vvod;
 int rea;
 int priz_otr=0;
 int priz_pol=0;
 base=open("base.dat",O_RDONLY); 
 if(base==-1)
  {
   base=open("base.dat",O_CREAT|O_BINARY,S_IREAD|S_IWRITE);
   close(base);
   base=open("base.dat",O_RDWR|O_BINARY,S_IREAD|S_IWRITE);
   system("cls");
   printf(Rus("Файл для записи массива создан.Данных в нём нет.\n"));
   printf(Rus("Для продолжения-ENTER.\n"));
   getch();
  }
 else
  {
   read_c=read_rec(base);
   if(read_c)
    {
     system("cls");
     printf(Rus("Файл данных уже существует.В нём имеются данные.\n"));
     close(base);
     base=open("base.dat",O_RDWR|O_BINARY,S_IREAD|S_IWRITE);
     printf(Rus("Для продолжения-ENTER.\n"));
     getch();
    }
   else
    {
     system("cls");
     printf(Rus("Файл данных уже существует.Данных в нём нет.\n"));
     close(base);
     base=open("base.dat",O_RDWR|O_BINARY,S_IREAD|S_IWRITE);
     printf(Rus("Для продолжения-ENTER.\n"));
     getch();
    }
  }
 do
  {
   system("cls");
   printf(Rus("Выберите пункт меню работы программы:\n"));
   printf(Rus("\n1) Ввод информации в массив и запись в файл."));
   printf(Rus("\n2) Просмотр содержимого массива в оперативной памяти"));
   printf(Rus("\n3) Считывание информации из файла и просмотр"));
   printf(Rus("\n4) Корректировка содержимого файла"));       
   printf(Rus("\n5) Обработка данных согласно условию"));
   printf(Rus("\n6) Завершение работы\n"));
 
   scanf("%d",&var);
   switch (var)
    {
     case 1:                    //ввод информации в массив и запись в файл
            {
             if(base)
              close(base);
             base=open("base.dat",O_RDWR|O_BINARY|O_TRUNC,S_IREAD|S_IWRITE);
             system("cls");
             count=0;
             priz_vvod=1;
             printf(Rus("Введите количество элементов в строке:\n"));
             scanf("%d",&kol_stolbec);
             lseek(base,0,SEEK_END);
             count++;
             input_rec(count,kol_stolbec);
             while (priz_vvod==1)
              {
               printf(Rus("Будете ещё вводить информацию построчно?:\n"));
               printf(Rus("Да-1, Нет-другая цифра:\n"));
               scanf("%d",&priz_vvod);
               if(priz_vvod)
                {
                 count++;
                 input_rec(count,kol_stolbec);
                }
              }       
             kol_stroka=count;
             count_massiv=kol_stroka*kol_stolbec;            
             write_file(base);
            }
            break;
     case 2:                    //Просмотр содержимого массива в оперативной памяти
            {           
             if(kol_stolbec)
              {
               for(i=0;i<kol_stroka;i++)
                {
                 for (j=0;j<kol_stolbec;j++)
                  {
                   printf("%8d", *(inp_1+j+(kol_stolbec*i)));
                   if((j+1)%kol_stolbec==0)
                    printf("\n");
                  }
                }
              }
             else
              printf(Rus("Массив пустой.Данных в нём нет.\n"));
             printf(Rus("\nДля продолжения-<ENTER>:\n"));
             getch();
            }
            break;
     case 3:                    //Просмотр содержимого файла
            {            
             printf("\n");
             i=0;            
             rea=read_file(base);
             if(rea)
              {
               if(kol_stolbec)
                for(i=0;i<kol_stroka;i++)
                 {
                  for(j=0;j<kol_stolbec;j++)
                   {
                    printf("%8d", *(inp_1+j+(kol_stolbec*i)));
                    if((j+1)%kol_stolbec==0)
                     printf("\n");
                   }
                 }
               else
                printf(Rus("Файл данных существует.Данных в нём нет.\n"));            
              }
             printf(Rus("\nДля продолжения-<ENTER>:\n"));
             getch();
            }
            break;
     case 4:                    //корректировка содержимого файла
            {
             do
              {
               printf(Rus("Выберите требуемый вариант пункта подменю:\n"));
               printf(Rus("\n1) Удаление информации из файла"));
               printf(Rus("\n2) Возврат в предыдущее меню\n"));
 
               scanf("%d",&var_ch);
               switch(var_ch)
                {
                 case 1:
                        {
                         if(base)
                          close(base);
                         base=open("base.dat",O_RDWR|O_BINARY|O_TRUNC,S_IREAD|S_IWRITE);
                        }
                        break;
                 case 2:
                        break;          
                 default:
                         printf(Rus("Ошибка: некорректный ввод варианта работы"));
                }
              }
             while (var_ch!=2);
             var_ch=-1;
            }
            break;
     case 5:                    //обработка информации
            {
             priz_otr=0;
             priz_pol=0;
             if(kol_stolbec)
              {
               for(i=0;i<kol_stroka;i++)
                {
                 if(priz_otr)
                  break;
                 for(j=0;j<kol_stolbec;j++)
                  {
                   if(*(inp_1+j+(kol_stolbec*i))<0)
                    {
                     printf(Rus("Первый отрицательный элемент стоит на [%d][%d] месте и равен %d\n"),i,j,*(inp_1+j+(kol_stolbec*i)));
                     priz_otr++;
                     break;
                    }
                  }
                }
               
               for(i=kol_stroka-1;i>=0;i--)
                {
                 if(priz_pol)
                  break;                 
                 for(j=kol_stolbec-1;j>=0;j--)
                  {
                   if(*(inp_1+j+(kol_stolbec*i))>0)
                    {
                     printf(Rus("Последний положительный элемент стоит на [%d][%d] месте и равен %d\n"),i,j,*(inp_1+j+(kol_stolbec*i)));
                     priz_pol++;
                     break;
                    }
                  }
                }              
               
               if(!priz_otr)
                printf(Rus("Отрицательные элементы в исходном массиве отсутствуют\n"));
               if(!priz_pol)
                printf(Rus("Положительные элементы в исходном массиве отсутствуют\n"));
              }
             else
              printf(Rus("Данные в исходном массиве отсутствуют\n"));
             printf(Rus("\nДля продолжения-<ENTER>:\n"));
             getch();
            }
            break;          
     case 6:
            break;
     default:
             printf(Rus("Ошибка: некорректный ввод варианта работы"));
    }
  }
 while(var!=6);
 close(base);
}
 
void input_rec(int count_rec, int kol_stolb)
{
 int i;
 if(count_rec==1)
  {
   inp_1=(int*)calloc(1,kol_stolb*sizeof(int*));
   if(inp_1)
    {
     for(i=0;i<kol_stolb;i++)
      {
       printf(Rus("Элемент массива[%d][%d]="),count_rec-1,i);
       scanf("%d",inp_1+i);
      }
    }
   else
    {
     printf(Rus("Нет возможности выделить память под первую строку элементов двумерного массива\n"));
     exit(-1);
    }   
  }
 else
  {
   inp_1=(int*)realloc(inp_1,count_rec*kol_stolb*sizeof(int));
   if(inp_1)
    {
     for(i=0;i<kol_stolb;i++)
      {
       printf(Rus("Элемент массива[%d][%d]="),count_rec-1,i);
       scanf("%d",inp_1+(count_rec-1)*kol_stolb+i);
      }
    }
   else
    {
     printf(Rus("Нет возможности выделить память под последующие строки элементов двумерного массива\n"));
     exit(-1);
    }   
  }
}
 
int read_file(int base)
{
 int read_c;
 int i=0;
 int j=0;
 kol_stroka=0;
 kol_stolbec=0;
 lseek(base,0,SEEK_SET);
 read(base,&kol_stroka,sizeof(int));
 read(base,&kol_stolbec,sizeof(int));
 if(inp_1)
  free(inp_1);
 inp_1=(int*)calloc(kol_stroka*kol_stolbec,sizeof(int));
 if(inp_1)
  {
   for(i=0;i<kol_stroka;i++)
    {
     for(j=0;j<kol_stolbec;j++)
      {
       read_c=read(base,inp_1+j+(kol_stolbec*i),sizeof(int));
      }
    }
  }
 else
  {
   printf(Rus("Нет возможности выделить память под лементы двумерного массива\n"));
   exit(-1);
  }   
 return(1);
}
 
int read_rec(int base)
{
 int read_c;
 lseek(base,0,SEEK_SET);
 inp_zap=(int*)calloc(1,sizeof(int));
 read_c=read(base,inp_zap,sizeof(int));
 if(read_c)
  {
   return(read_c);
  }
 else//освобождение памяти после неудачного чтения
  {
   free(inp_zap);
   return(read_c);
  }
}
 
void write_file(int base)
{
 int write_c;
 int i;
 int j;
 lseek(base,0,SEEK_END);
 write_c=write(base,&kol_stroka,sizeof(int));
 if(write_c == -1)
  {
   printf(Rus("\nНе записалось количество строк.\n"));
   getch();
  }
 write_c=write(base,&kol_stolbec,sizeof(int));
 if(write_c == -1)
  {
   printf(Rus("\nНе записалось количество столбцов.\n"));
   getch();
  }
 
 for(i=0;i<kol_stroka;i++)
  {
   for(j=0;j<kol_stolbec;j++)
    {
     write(base,inp_1+j+(kol_stolbec*i),sizeof(int));
    }
  }
 if(write_c == -1)
  {
   printf(Rus("\nНе всё записалось в двумерном массиве.\n"));
   getch();
  }
}
 
char bufRus[256];
char* Rus(const char* text)
{
 CharToOemA(text, bufRus);
 return bufRus;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.04.2017, 15:54
Ответы с готовыми решениями:

Среди столбцов целочисленной матрицы А (n,m) найти номер столбца с наименьшим произведением элементов
Среди столбцов целочисленной матрицы А (n,m) найти номер столбца с наименьшим произведением...

Вывести номер первой и последней строки матрицы, содержащих только положительные элементы
.Дана матрица размера 5 x 10. Вывести номер её первой и последней строки, содержащих только...

Удалить первый столбец матрицы, содержащий только положительные элементы
Дана матрица размера M × N. Удалить ее первый столбец, содержащий только положительные элементы....

Найти столбец матрицы с минимальным произведением элементов
Среди столбцов заданной целочисленной матрицы С размера 7на7, компоненты которой не превышают 10,...

Перед первым столбцом матрицы, содержащим только положительные элементы, вставить столбец из единиц
Дана матрица размера M × N. Перед первым столбцом, содержащим только положительные элементы,...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.04.2017, 15:54

Среди тех строк целочисленной матрицы, которые содержат только нечетные элементы, найти строку с максимальной суммой модулей элементов
Среди тех строк целочисленной матрицы, которые содержат только нечетные элементы, найти строку с...

Среди столбцов матрицы, содержащих только элементы в диапазоне от 0 до 10, найти столбец с максимальной суммой
Дана динамическая матрица размера N*M (N и M вводятся). Среди столбцов матрицы, содержащих только...

Среди столбцов целочисленной матрицы А(н,м) найти столбец с минимальным произведением элементов
Среди столбцов целочисленной матрицы А(n,m) найти столбец с минимальным произведением элементов.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru