Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C (СИ) Вычислить сумму всех положительных элементов квадратной матрицы https://www.cyberforum.ru/ c-beginners/ thread1958101.html
по идее программа должна вычислять сумму всех положительных элементов квадратной матрицы #include<stdlib.h> #include<stdio.h> main () {int n=3,m=3,a,i,j,z; z=0; for(i=n;i<n;i++)...
C (СИ) Однофайловая БД сортировка и фильтрация
Добрый день уважаемы форумчане проблема вот в чём, не работает сортировка (компилю в Pellec C, может проблема в нём) и ещё не совсем понимаю как сделать фильтрацию, помогите кто чем может. Код...
C (СИ) Неправильно выводится значение максимального элемента строки https://www.cyberforum.ru/ c-beginners/ thread1958013.html
Подскажите пожалуйста , из за чего не выводит правильно значение максимального элемента строки int main () { int mas; int i,j,max,max_index; srand(time(NULL)); for(i=0;i<4;i++) { ...
C (СИ) Задача на поиск символа из аргумента командной строки https://www.cyberforum.ru/ c-beginners/ thread1957987.html
Добрый день! решаю такую задачу:необходимо написать программу,которая принимает в качестве аргументов командной строки символ и файлы,и выводит сколько раз попадался данный символ в файлах.если...
Функция сортировки различных элементов С/С++ C (СИ)
Нужна помощь в реализации функции сортировки по различным полям структуры, в функцию сортировки должен передаваться указатель на функцию сравнения двух элементов. #include "stdafx.h" #include...
C (СИ) Не выполняется сортировка массива https://www.cyberforum.ru/ c-beginners/ thread1957895.html
Здравствуйте , вот код, но сортировка в нем не применяется а просто выводиться массив чисел без применения сортировки. Подскажите в чем проблема пожалуйста. Спасибо! #include <conio.h> #include...
C (СИ) Функция преобразования температуры из Фаренгейт в Цельсий Прошу помочь разобраться в проблеме, возникающей при компилляции данной программы. #include <stdio.h> #define lower 0 //нижний температурный предел #define upper 300 // верхний температурный... https://www.cyberforum.ru/ c-beginners/ thread1957840.html C (СИ) Создать динамический массив из вещественных чисел и написать функции, выполняющие операции с этими числами
Создать динамический массив, наполнить его вещественными числами и создать функции, выполняющие сортировку элементов массива (от наименьшего к наибольшему), map, where и конкатенацию. Только начал...
C (СИ) Как соединить 2 кода воедино или как хранить переменные в массиве? https://www.cyberforum.ru/ c-beginners/ thread1957757.html
Уважаемые форумчане, есть 2 кода, один умеет через меню выводить текст хранящийся в массиве(далее код1), а второй умеет получать текст с сайта(JSON) и выводить его(далее код2-получание, код3-вывод)....
C (СИ) Написать программу решающую уравнение https://www.cyberforum.ru/ c-beginners/ thread1957735.html
Где-то ошибка, не могу понять. Когда ввожу 0 пишет не то. Думаю ошибки с If... например, когда ввожу а=0, б=5,с=-25 выводит Введите а 0 Введите b 5 Введите c -25 x=5,000000 x1=-1,#INF00...
C (СИ) Решение квадратного уравнения
Где-то ошибка, не могу понять. Когда ввожу 0 пишет не то. Думаю ошибки с If...:pardon: например, когда ввожу а=0, б=5,с=-25 выводит Введите а 0 Введите b 5 Введите c -25 x=5,000000 x1=-1,#INF00...
C (СИ) Пропуск первого поля структуры при заполнении очереди https://www.cyberforum.ru/ c-beginners/ thread1957657.html
Нужна помощь...После создания первого узла,при добавлении узла ,внесение нового элемента начинается только со второго поля...Почему пропускает первое поле(первую строку) я не понимаю.Так же после...
0 / 0 / 0
Регистрация: 11.04.2017
Сообщений: 1
0

Среди столбцов матрицы, содержащих только положительные элементы, найти столбец с min произведением элементов - C (СИ) - Ответ 10319343

11.04.2017, 15:54. Показов 718. Ответов 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;
}


Вернуться к обсуждению:
Среди столбцов матрицы, содержащих только положительные элементы, найти столбец с min произведением элементов C (СИ)
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.04.2017, 15:54
Готовые ответы и решения:

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

Поменять местами столбец матрицы с номером 1 и последний из столбцов, содержащих только положительные элементы
Помогите пожалуйста. Delphi 7 Преобразование матрицы Дана матрица размера M * N. Поменять...

Поменять местами столбец матрицы с номером 10 и последний из столбцов, содержащих только положительные элементы
(C++) Дана матрица размера 5x10. Поменять местами столбец с номером 10 и последний из столбцов,...

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

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.04.2017, 15:54
Помогаю со студенческими работами здесь

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

Среди столбцов заданной целочисленной матрицы найти столбец с минимальным произведением элементов
Среди столбцов заданной целочисленной матрицы найти столбец с минимальным произведением элементов....

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

Среди столбцов заданной целочисленной матрицы найти столбец с минимальным произведением элементов
уже 2 дня с ней мучаюсь. никак. еще и условие непонятное. вот она: Среди столбцов заданной...

0
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru