Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.83/23: Рейтинг темы: голосов - 23, средняя оценка - 4.83
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248

Двумерный массив с условием

02.03.2023, 21:47. Показов 5957. Ответов 59

Студворк — интернет-сервис помощи студентам
3. в файле data.dat задан двумерный массив целых чисел в следующем виде: в первой строке задано количества строк и столбцов массива, а далее в каждой строке файла задается одна строка двумерного массива. Элементы массива задаются через пробел. Ограничений на количества строк и столбцов в массиве нет.

Ввести двумерный массив из файла в массив в программе, отведя соответствующим образом память. Определить, существует ли в массиве строка, каждый элемент которой строго больше всех остальных элементов в столбце, содержащим данный элемент. Если существует, то уничтожить из массива найденную строку. Если строка не найдена, то матрица не изменяется. Вывести в файл data.res полученный двумерный массив.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2023, 21:47
Ответы с готовыми решениями:

Двумерный массив, обработка с условием
Дана матрица A(n,m). Найти номера строк, элементы каждой из которых образуют возрастающую или убывающую последовательность. Крайне плох в...

Как сделать двумерный массив с условием
Здравствуйте. Подскажите пожалуйста, как сделать двумерный массив с выполнением условий. Есть таблица с температурами и давлением. При...

Двумерный массив. Ввести двумерный массив, найти сумму элементов каждого столбца
Ввести двумерный массив, найти сумму элементов каждого столбца.

59
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
31.03.2023, 00:56
Студворк — интернет-сервис помощи студентам
Вот без необходимой строки
Миниатюры
Двумерный массив с условием  
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
31.03.2023, 00:58
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
Так нельзя сказали - "Все просто, записываете содержимое РЕЗ в содержимое ДАТ, и снова запускаете программу "
Ну надо тогда дописывать код, что бы он после текущих действий загружал новый файл РЕЗ
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
31.03.2023, 01:16  [ТС]
AlexProgramm, СПАСИБО ВАМ!!!!

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
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int n, m, key=0;
int findStr(int *);
int findStr(int *arr)                               //тело функции
{
    int i, j, k, l = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {  
            if (key == 0)
        {  
            l = i;
            if (l!=0){
                printf ("\nВ %d строке все элементы больше своих столбцов", i);
            }
            break;
        }
           
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
           
            else
                break;
           
           
        }                    
       
       
    }
   
    return l;
}
 
 
 
int main (void)
{
 
    int i,p, j, l = 100, *arr, *arrr;
 
       
    FILE *f1 = fopen("data_dat.txt.TXT","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f1, "%d ", &arr[i*m+j]);
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
   
    l = findStr(arr); //вызов функции
  //  printf("%d\n",l);
    printf("\n");
    p=l;
   
    if (p!=0)
    {  
        printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            printf("%2d ", arr[i*m+j]);
        }                    
           
        if (i != l)
            printf("\n");        
    }
   
    if (key == 0)
        fprintf (f2, "%d %d\n", n - 1, m);
    else
        fprintf (f2, "%d %d\n", n, m);
       
    for (i = 0; i < n; i++)                         //вывод массива в файл
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            fprintf(f2, "%d ", arr[i*m+j]);
        }                    
           
        if (i != l)
            fprintf(f2, "\n");        
    }
    if (key != 0){
      fclose (f1);
      fclose (f2);
    }
    }
    else printf("Массив не был изменён\n");
      fclose (f1);
      fclose (f2);
    
    
    
    //2прогон
    
    fscanf (f3, "%d %d", &n, &m);
   
    arrr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arrr[i*m+j]);
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arrr[i*m+j]);
       
        printf("\n");        
    }
   
    l = findStr(arrr); //вызов функции
  //  printf("%d\n",l);
    printf("\n");
    p=l;
   
    if (p!=0)
    {  
        printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            printf("%2d ", arrr[i*m+j]);
        }                    
           
        if (i != l)
            printf("\n");        
    }
   
    if (key == 0)
        fprintf (f2, "%d %d\n", n - 1, m);
    else
        fprintf (f2, "%d %d\n", n, m);
       
    for (i = 0; i < n; i++)                         //вывод массива в файл
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            fprintf(f2, "%d ", arrr[i*m+j]);
        }                    
           
        if (i != l)
            fprintf(f2, "\n");        
    }
    if (key == 0)
        return l;
    else
        return 100;    
    fclose (f1);
    fclose (f2);
    }
    else printf("Массив не был изменён\n");
}
Добавлено через 7 минут
AlexProgramm,
Вобщем всё супер теперь, кромеее
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
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int n, m, key=0;
int findStr(int *);
int findStr(int *arr)                               //тело функции
{
    int i, j, k, l = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {  
            if (key == 0)
        {  
            l = i;
            if (l!=0){
                printf ("\nВ %d строке все элементы больше своих столбцов", i);
            }
            break;
        }
           
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
           
            else
                break;
           
           
        }                    
       
       
    }
   
    return l;
}
 
 
 
int main (void)
{
 
    int i,p, j, l = 100, *arr, *arrr;
 
       
    FILE *f1 = fopen("data_dat.txt.TXT","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f1, "%d ", &arr[i*m+j]);
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
   
    l = findStr(arr); //вызов функции
  //  printf("%d\n",l);
    printf("\n");
    p=l;
   
    if (p!=0)
    {  
        printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            printf("%2d ", arr[i*m+j]);
        }                    
           
        if (i != l)
            printf("\n");        
    }
   
    if (key == 0)
        fprintf (f2, "%d %d\n", n - 1, m);
    else
        fprintf (f2, "%d %d\n", n, m);
       
    for (i = 0; i < n; i++)                         //вывод массива в файл
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            fprintf(f2, "%d ", arr[i*m+j]);
        }                    
           
        if (i != l)
            fprintf(f2, "\n");        
    }
    if (key != 0){
      fclose (f1);
      fclose (f2);
    }
    }
    else printf("Массив не был изменён\n");
      fclose (f1);
      fclose (f2);
    
    
    
    //2прогон
    
    fscanf (f3, "%d %d", &n, &m);
   
    arrr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arrr[i*m+j]);
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arrr[i*m+j]);
       
        printf("\n");        
    }
   
    l = findStr(arrr); //вызов функции
  //  printf("%d\n",l);
    printf("\n");
    p=l;
   
    if (p!=0)
    {  
        printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            printf("%2d ", arrr[i*m+j]);
        }                    
           
        if (i != l)
            printf("\n");        
    }
   
    if (key == 0)
        fprintf (f4, "%d %d\n", n - 1, m);
    else
        fprintf (f4, "%d %d\n", n, m);
       
    for (i = 0; i < n; i++)                         //вывод массива в файл
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            fprintf(f4, "%d ", arrr[i*m+j]);
        }                    
           
        if (i != l)
            fprintf(f4, "\n");        
    }
    if (key == 0)
        return l;
    else
        return 100;    
    fclose (f3);
    fclose (f4);
    }
    else printf("Массив не был изменён\n");
    fclose (f3);
    fclose (f4);
}
Добавлено через 41 секунду
AlexProgramm,
ОШИБКА ДЛЯ НУЛЕВОЙ СТРОКИ

Наш массив:
9 9 9
1 2 3
3 3 3

В 1 строке все элементы больше своих столбцов
В 2 стр�ке все элементы больше своих столбцов


Наш массив после преобразования:
9 9 9
1 2 3
Наш массив:
9 9 9
1 2 3

В 1 строке все элементы больше своих столбцо�


Наш массив после преобразования:
9 9 9
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
31.03.2023, 01:21
Начальный массив:
2 3
9 9 9
1 2 3
Миниатюры
Двумерный массив с условием  
1
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
31.03.2023, 01:33
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
в первой строке задано количества строк и столбцов массива
Про это не забыли?

Добавлено через 11 минут
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
if (key == 0)
        return l;
    else
        return 100;    
    fclose (f3);
    fclose (f4);
Закрытие не сработает, по return функция прекращает работу!
1
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
31.03.2023, 01:57  [ТС]
AlexProgramm, спасибо))))
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
31.03.2023, 02:07
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
AlexProgramm, спасибо))))
1
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
31.03.2023, 02:39  [ТС]
AlexProgramm,
Наш массив:
9 9 9
9 9 8


Наш массив после преобразования:
9 9 9
9 9 8

Массив не был изменён

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
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int n, m, key = 0;
 
int main (void)
{
    char   ch;
    int i, j, k, l = 100, *arr, *arr2;
    int findStr(int *arr);
        
    FILE *f1 = fopen("data_dat.txt.TXT","r");
    FILE *f2 = fopen("data_res.txt","w");
    
    fscanf (f1, "%d %d", &n, &m);
    
    arr = (int *) malloc(n * m * (sizeof(int)));
    
    for (i = 0; i < n; i++)                         //заполнение массива 
        for (j = 0; j < m; j++)                      
            fscanf(f1, "%d ", &arr[i*m+j]);
        
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран 
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
        
        printf("\n");         
    }
    
    l = findStr(arr);                                //вызов функции
    
    printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++) 
        {
            if (i == l)
                break;
                
            printf("%2d ", arr[i*m+j]);
        }                     
            
        if (i != l)
            printf("\n");         
    }
    
    if (key == 0)
    {
        fprintf (f2, "%d %d\n", n - 1, m);
    }
    else
    {
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
    }
        
        
    for (i = 0; i < n; i++)                         //вывод массива в файл 
    {
        for (j = 0; j < m; j++) 
        {
            if (i == l)
                break;
                
            fprintf(f2, "%d ", arr[i*m+j]);
        }                     
            
        if (i != l)
            fprintf(f2, "\n");         
    }
        
    fclose (f1);
    fclose (f2);
}
 
int findStr(int *arr)                               //тело функции
{
    int i, j, k, l = 0;
    
    for (i = 0; i < n; i++)                         //поиск строки 
    {
        key = 0;
        
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
                
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
        
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
    if (key == 0)
        return l;
    else
        return 100;
}
Добавлено через 5 минут
AlexProgramm,

УДАЛИЛ НУЛЕВУЮ СТРОКУ
Наш массив:
9 9 9
1 2 3

В 0 строке все элементы больше своих столбцов

Наш массив пос�е преобразования:
1 2 3
Наш массив:
1 2 3

В 0 стро�е все элементы больше своих столбцов

Наш массив после преобразования:

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
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int n, m, key = 0;
 
int main (void)
{
    char   ch;
    int i, j, k, l = 100, *arr, *arr2;
    int findStr(int *arr);
        
    FILE *f1 = fopen("data_dat.txt.TXT","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
    
    fscanf (f1, "%d %d", &n, &m);
    
    arr = (int *) malloc(n * m * (sizeof(int)));
    
    for (i = 0; i < n; i++)                         //заполнение массива 
        for (j = 0; j < m; j++)                      
            fscanf(f1, "%d ", &arr[i*m+j]);
        
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран 
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
        
        printf("\n");         
    }
    
    l = findStr(arr);                                //вызов функции
    
    printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++) 
        {
            if (i == l)
                break;
                
            printf("%2d ", arr[i*m+j]);
        }                     
            
        if (i != l)
            printf("\n");         
    }
    
    if (key == 0)
    {
        fprintf (f2, "%d %d\n", n - 1, m);
    }
    else
    {
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
    }
        
        
    for (i = 0; i < n; i++)                         //вывод массива в файл 
    {
        for (j = 0; j < m; j++) 
        {
            if (i == l)
                break;
                
            fprintf(f2, "%d ", arr[i*m+j]);
        }                     
            
        if (i != l)
            fprintf(f2, "\n");         
    }
        
    fclose (f1);
    fclose (f2);
    
    
    
    
    //2прогон
    
    fscanf (f3, "%d %d", &n, &m);
    
    arr2 = (int *) malloc(n * m * (sizeof(int)));
    
    for (i = 0; i < n; i++)                         //заполнение массива 
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
        
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран 
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
        
        printf("\n");         
    }
    
    l = findStr(arr2);                                //вызов функции
    
    printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++) 
        {
            if (i == l)
                break;
                
            printf("%2d ", arr2[i*m+j]);
        }                     
            
        if (i != l)
            printf("\n");         
    }
    
    if (key == 0)
    {
        fprintf (f4, "%d %d\n", n - 1, m);
    }
    else
    {
        printf("\nМассив не был изменён\n");
        fprintf (f4, "%d %d\n", n, m);
    }
        
        
    for (i = 0; i < n; i++)                         //вывод массива в файл 
    {
        for (j = 0; j < m; j++) 
        {
            if (i == l)
                break;
                
            fprintf(f4, "%d ", arr2[i*m+j]);
        }                     
            
        if (i != l)
            fprintf(f4, "\n");         
    }
        
    fclose (f3);
    fclose (f4);
}
 
int findStr(int *arr)                               //тело функции
{
    int i, j, k, l = 0;
    
    for (i = 0; i < n; i++)                         //поиск строки 
    {
        key = 0;
        
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
                
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
        
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
    if (key == 0)
        return l;
    else
        return 100;
}
Добавлено через 47 секунд
Ну тут изи

Добавлено через 25 минут
Нет не изи
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
31.03.2023, 04:51
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
УДАЛИЛ НУЛЕВУЮ СТРОКУ
Наш массив:
9 9 9
1 2 3
В 0 строке все элементы больше своих столбцов
Наш массив пос�е преобразования:
1 2 3
Ну все правильно, удалил
А что не так?
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
07.04.2023, 09:38  [ТС]
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
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int n, m, key = 0;
int findStr(FILE*,FILE*,int *);
int findStr(FILE*f1,FILE*f2,int *arr)                               //тело функции
{
    int i, j, k, l = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
       
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
    if (key == 0){
    printf("\n\nНаш массив после преобразования:\n");
    for (i = 0; i < n; i++)                        
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            printf("%2d ", arr[i*m+j]);
        }                    
           
        if (i != l)
            printf("\n");        
    }
   
    if (key == 0)
    {
        fprintf (f2, "%d %d\n", n - 1, m);
    }
    else
    {
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
    }
       
       
    for (i = 0; i < n; i++)                         //вывод массива в файл
    {
        for (j = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            fprintf(f2, "%d ", arr[i*m+j]);
        }                    
           
        if (i != l)
            fprintf(f2, "\n");        
    }
       
    fclose (f1);
    fclose (f2);
    return l;
   
    }
    else
        return 100;
}
 
 
int main (void)
{
 
    int i, j, l = 100, *arr, *arr2;
 
       
    FILE *f1 = fopen("data_dat.txt.TXT","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    if (f1 == NULL) {
    printf("failed to open the file");
    return -1;
  }
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++){                         //заполнение массива
        for (j = 0; j < m; j++){                      
 //     fscanf(f1, "%d ", &arr[i*m+j]);
        if (fscanf(f1, "%d", &arr[i*m+j]) != 1) // считать элемент матрицы из файла
        {
          printf("failed to read the file");
          break;}
        }
    }
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
    if (n==1){
        printf("\nМассив не был изменён и не будет!\n");
        fclose (f1);
        fclose (f2);
        fclose (f3);
        fclose (f4);
        free(arr);
        return 34;
    }
    l = findStr(f1,f2,arr);                                //вызов функции
   
    
    
    
    
    
   
   
   
    //2прогон
   
    fscanf (f3, "%d %d", &n, &m);
   
    arr2 = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
       
        printf("\n");        
    }
   
    if (n==1){
        printf("\nМассив не был изменён!\n");
        fclose (f3);
        fclose (f4);
        free(arr);
        return 35;
    }
   
    l = findStr(f3,f4,arr2);                                //вызов функции
   
 
}
Добавлено через 1 минуту
Ещё чуть изменила под требования преподавателя.


Теперь "преобразование массива" происходит в функции

И не ломается, если ввести символ в файл исходник

Добавлено через 3 часа 29 минут
AlexProgramm,
Случилась беда

Преподаватель сказал, что удалить строку из массива нужно "физически"

Как-то поиграться с памятью

Красивым выводом нельзя
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
07.04.2023, 11:34
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
Преподаватель сказал, что удалить строку из массива нужно "физически"
Какой придирчивый преподаватель

Добавлено через 1 минуту
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
Как-то поиграться с памятью
Красивым выводом нельзя
Ну тогда придется создать новый массив, выделить под него память и инициализировать его элементами из исходного массива без удаленной строки
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
07.04.2023, 15:49
Подредактировал ваш код
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
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
 
int n, m, key = 0;
int findStr(FILE*,FILE*,int *arr);
int findStr(FILE*f1,FILE*f2,int *arr)                               //тело функции
{
    int i, j, k, l = 0, *arrNew, i2 = 0, j2 = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
       
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
    
    
    if (key == 0){      
    
    arrNew = (int *) malloc((n - 1) * m * (sizeof(int)));
    
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без удаляемой строки
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
        if (i != l)
        {
            i2++;
        }
                   
    }
    
 
    
    printf("\n\nНаш массив после преобразования\n");
    for (i2 = 0; i2 < n - 1; i2++)                  //вывод нового массива на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
   
 
    fprintf (f2, "%d %d\n", n - 1, m);
        for (i2 = 0; i2 < n - 1; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                            
            fprintf(f2, "\n");        
        }   
       
    
       
    fclose (f1);
    fclose (f2);
    return l;
   
    }
    else
    {
        arrNew = (int *) malloc(n * m * (sizeof(int)));
    
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без изменений
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
        
            i2++;
        
                   
    }
        
        printf("\n\nНаш массив не измененный\n");
    for (i2 = 0; i2 < n; i2++)                  //вывод нового массива без изменений на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
        
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
        for (i2 = 0; i2 < n; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                            
            fprintf(f2, "\n");        
        }
        fclose (f1);
        fclose (f2);
        return 100;
    }
 
        
}
 
 
int main (void)
{
 
    int i, j, l = 100, *arr, *arr2;
     system("chcp 1251 > nul");
       
    FILE *f1 = fopen("data_dat.txt.TXT","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    if (f1 == NULL) {
    printf("failed to open the file");
    return -1;
  }
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++){                         //заполнение массива
        for (j = 0; j < m; j++){                      
 //     fscanf(f1, "%d ", &arr[i*m+j]);
        if (fscanf(f1, "%d", &arr[i*m+j]) != 1) // считать элемент матрицы из файла
        {
          printf("failed to read the file");
          break;}
        }
    }
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
    if (n==1){
        printf("\nМассив не был изменён и не будет!\n");
        fclose (f1);
        fclose (f2);
        fclose (f3);
        fclose (f4);
        free(arr);
        return 34;
    }
    l = findStr(f1,f2,arr);                                //вызов функции
   
   
   
    //2прогон
   
    fscanf (f3, "%d %d", &n, &m);
   
    arr2 = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
       
    printf("Наш  массив 2 прогона:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
       
        printf("\n");        
    }
   
    if (n==1){
        printf("\nМассив не был изменён!\n");
        fclose (f3);
        fclose (f4);
        free(arr);
        return 35;
    }
   
    l = findStr(f3,f4,arr2);                                //вызов функции
   
 
}
Миниатюры
Двумерный массив с условием  
1
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
14.04.2023, 09:49  [ТС]
AlexProgramm, в этом коде утечка памяти 96 байт

Добавлено через 17 секунд
AlexProgramm,
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
#include <stdio.h>
#include <stdlib.h>
 
int n, m,l = 100, key = 0;
int findStr(FILE*,FILE*,int *arr);
int findStr(FILE*f1,FILE*f2,int *arr)                               //тело функции
{
    int i, j, k, l = 0, *arrNew, i2 = 0, j2 = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
       
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
   
   
    if (key == 0){      
   
    arrNew = (int *) malloc((n - 1) * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без удаляемой строки
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
        if (i != l)
        {
            i2++;
        }
                   
    }
   
 
   
    printf("\n\nНаш массив после преобразования\n");
    for (i2 = 0; i2 < n - 1; i2++)                  //вывод нового массива на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
   
 
    fprintf (f2, "%d %d\n", n - 1, m);
        for (i2 = 0; i2 < n - 1; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }  
       
   
       
    fclose (f1);
    fclose (f2);
    return l;
   
    }
    else
    {
        arrNew = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без изменений
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
       
            i2++;
       
                   
    }
       
        printf("\n\nНаш массив не измененный\n");
    for (i2 = 0; i2 < n; i2++)                  //вывод нового массива без изменений на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
       
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
        for (i2 = 0; i2 < n; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }
        fclose (f1);
        fclose (f2);
        return 100;
    }
 
       
}
 
 
int main (void)
{
 
    int i, j,  *arr, *arr2;
       
    FILE *f1 = fopen("data_dat.txt","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    if (f1 == NULL) {
    printf("failed to open the file");
    fclose (f1);
    fclose (f2);
    fclose (f3);
    fclose (f4);
    return -1;
  }
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++){                         //заполнение массива
        for (j = 0; j < m; j++){                      
 //     fscanf(f1, "%d ", &arr[i*m+j]);
        if (fscanf(f1, "%d", &arr[i*m+j]) != 1) // считать элемент матрицы из файла
        {
          printf("failed to read the file");
          break;}
        }
    }
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
    if (n==1){
        printf("\nМассив не был изменён и не будет!\n");
        fclose (f1);
        fclose (f2);
        fclose (f3);
        fclose (f4);
        return 34;
    }
    l = findStr(f1,f2,arr);                                //вызов функции
   
   
   
    //2прогон
   
    fscanf (f3, "%d %d", &n, &m);
   
    arr2 = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
       
    printf("Наш  массив 2 прогона:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
       
        printf("\n");        
    }
   
    if (n==1){
        printf("\nМассив не был изменён!\n");
        fclose (f3);
        fclose (f4);
        fclose (f1);
        fclose (f2);
   
        return 35;
    }
   
    l = findStr(f3,f4,arr2);                                //вызов функции
    fclose (f3);
    fclose (f4);
    fclose (f1);
    fclose (f2);
    free(arr);
   
 
}
Добавлено через 1 минуту
В последнем пишет, что 2 раза использовали free (нет второго фри), поэтому стек памяти сброшен на диск
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
14.04.2023, 23:57
Ну давай везде, где мы создаем массив и выделяем под него память, будем его корректно закрывать(может тогда не будет утечки)
92 строка
C
1
2
3
    free(arr);
    free(arrNew);
    return l;
133 строка
C
1
2
        free(arrNew);
        return 100;
186 строка
C
1
2
        free(arrNew);
        return 100;
218 строка
C
1
2
free(arr);
        free(arr2);
227 строка
C
1
2
free(arr);
        free(arr2);
Добавлено через 5 минут
Цитата Сообщение от DaraChernyshova Посмотреть сообщение
В последнем пишет, что 2 раза использовали free
А можете окно прикрепить, где это пишется?
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
18.04.2023, 12:14  [ТС]
AlexProgramm,

Код после добавления всех фри


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
#include <stdio.h>
#include <stdlib.h>
 
int n, m,l = 100, key = 0;
int findStr(FILE*,FILE*,int *arr);
int findStr(FILE*f1,FILE*f2,int *arr)                               //тело функции
{
    int i, j, k, l = 0, *arrNew, i2 = 0, j2 = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
       
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
   
   
    if (key == 0){      
   
    arrNew = (int *) malloc((n - 1) * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без удаляемой строки
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
        if (i != l)
        {
            i2++;
        }
                   
    }
   
 
   
    printf("\n\nНаш массив после преобразования\n");
    for (i2 = 0; i2 < n - 1; i2++)                  //вывод нового массива на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
   
 
    fprintf (f2, "%d %d\n", n - 1, m);
        for (i2 = 0; i2 < n - 1; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }  
       
   
       
    fclose (f1);
    fclose (f2);
    free(arr);
    free(arrNew);
    return l;
   
    }
    else
    {
        arrNew = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без изменений
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
       
            i2++;
       
                   
    }
       
        printf("\n\nНаш массив не измененный\n");
    for (i2 = 0; i2 < n; i2++)                  //вывод нового массива без изменений на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
       
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
        for (i2 = 0; i2 < n; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }
        fclose (f1);
        fclose (f2);
        free(arrNew);
        return 100;
    }
 
       
}
 
 
int main (void)
{
 
    int i, j,  *arr, *arr2;
       
    FILE *f1 = fopen("data_dat.txt","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    if (f1 == NULL) {
    printf("failed to open the file");
    fclose (f1);
    fclose (f2);
    fclose (f3);
    fclose (f4);
    return -1;
  }
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++){                         //заполнение массива
        for (j = 0; j < m; j++){                      
 //     fscanf(f1, "%d ", &arr[i*m+j]);
        if (fscanf(f1, "%d", &arr[i*m+j]) != 1) // считать элемент матрицы из файла
        {
          printf("failed to read the file");
          break;}
        }
    }
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
    if (n==1){
        printf("\nМассив не был изменён и не будет!\n");
        fclose (f1);
        fclose (f2);
        fclose (f3);
        fclose (f4);
        //free(arrNew);
        return 34;
    }
    l = findStr(f1,f2,arr);                                //вызов функции
   
   
   
    //2прогон
   
    fscanf (f3, "%d %d", &n, &m);
   
    arr2 = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
       
    printf("Наш  массив 2 прогона:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
       
        printf("\n");        
    }
   
    if (n==1){
        printf("\nМассив не был изменён!\n");
        fclose (f3);
        fclose (f4);
        fclose (f1);
        fclose (f2);
        free(arr);
        free(arr2);
        return 35;
    }
   
    l = findStr(f3,f4,arr2);                                //вызов функции
    fclose (f3);
    fclose (f4);
    fclose (f1);
    fclose (f2);
    free(arr);
    free(arr2);
   
 
}
Миниатюры
Двумерный массив с условием  
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
18.04.2023, 12:15  [ТС]
AlexProgramm, преподаватель намекнул, что проблемы с границами массивов. Ищу
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
18.04.2023, 13:22
190 строка - free(arr);

Добавлено через 6 минут
135стр - free(arr);
free(arrNew);
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
21.04.2023, 09:22  [ТС]
AlexProgramm,

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
#include <stdio.h>
#include <stdlib.h>
 
int n, m,l = 100, key = 0;
int findStr(FILE*,FILE*,int *arr);
int findStr(FILE*f1,FILE*f2,int *arr)                               //тело функции
{
    int i, j, k, l = 0, *arrNew, i2 = 0, j2 = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
       
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
   
   
    if (key == 0){      
   
    arrNew = (int *) malloc((n - 1) * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без удаляемой строки
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
        if (i != l)
        {
            i2++;
        }
                   
    }
   
 
   
    printf("\n\nНаш массив после преобразования\n");
    for (i2 = 0; i2 < n - 1; i2++)                  //вывод нового массива на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
   
 
    fprintf (f2, "%d %d\n", n - 1, m);
        for (i2 = 0; i2 < n - 1; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }  
       
   
       
    fclose (f1);
    fclose (f2);
    free(arr);
    free(arrNew);
    return l;
   
    }
    else
    {
        arrNew = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без изменений
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
       
            i2++;
       
                   
    }
       
        printf("\n\nНаш массив не измененный\n");
    for (i2 = 0; i2 < n; i2++)                  //вывод нового массива без изменений на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
       
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
        for (i2 = 0; i2 < n; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }
        fclose (f1);
        fclose (f2);
        free(arrNew);
        free(arrNew);
        return 100;
    }
 
       
}
 
 
int main (void)
{
 
    int i, j,  *arr, *arr2;
       
    FILE *f1 = fopen("data_dat.txt","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    if (f1 == NULL) {
    printf("failed to open the file");
    fclose (f1);
    fclose (f2);
    fclose (f3);
    fclose (f4);
    return -1;
  }
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++){                         //заполнение массива
        for (j = 0; j < m; j++){                      
 //     fscanf(f1, "%d ", &arr[i*m+j]);
        if (fscanf(f1, "%d", &arr[i*m+j]) != 1) // считать элемент матрицы из файла
        {
          printf("failed to read the file");
          break;}
        }
    }
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
    if (n==1){
        printf("\nМассив не был изменён и не будет!\n");
        fclose (f1);
        fclose (f2);
        fclose (f3);
        fclose (f4);
        free(arr);
        return 34;
    }
    l = findStr(f1,f2,arr);                                //вызов функции
   
   
   
    //2прогон
   
    fscanf (f3, "%d %d", &n, &m);
   
    arr2 = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
       
    printf("Наш  массив 2 прогона:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
       
        printf("\n");        
    }
   
    if (n==1){
        printf("\nМассив не был изменён!\n");
        fclose (f3);
        fclose (f4);
        fclose (f1);
        fclose (f2);
        free(arr);
        free(arr2);
        return 35;
    }
   
    l = findStr(f3,f4,arr2);                                //вызов функции
    fclose (f3);
    fclose (f4);
    fclose (f1);
    fclose (f2);
    free(arr);
    free(arr2);
   
 
}
Миниатюры
Двумерный массив с условием  
0
 Аватар для AlexProgramm
227 / 98 / 32
Регистрация: 01.10.2022
Сообщений: 696
Записей в блоге: 47
21.04.2023, 09:40
135 строка - 2 раза фри
0
 Аватар для DaraChernyshova
2 / 2 / 0
Регистрация: 06.03.2021
Сообщений: 248
21.04.2023, 14:28  [ТС]
AlexProgramm, да, но проблема осталась. (Там описка была)


Я думаю, что проблема происходит, когда считывается m и 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
#include <stdio.h>
#include <stdlib.h>
 
int n, m,l = 100, key = 0;
int findStr(FILE*,FILE*,int *arr);
int findStr(FILE*f1,FILE*f2,int *arr)                               //тело функции
{
    int i, j, k, l = 0, *arrNew, i2 = 0, j2 = 0;
   
    for (i = 0; i < n; i++)                         //поиск строки
    {
        key = 0;
       
        for (j = 0; j < m; j++)  
        {
            if (key == 0)
            {
                for (k = 0; k < n; k++)
                {
                    if (k == i)
                        continue;
               
                    if (arr[i*m+j] > arr[k*m+j])
                        continue;
                    else
                    {
                        key = 1;
                        break;
                    }
                }
            }
            else
                break;
        }                    
       
        if (key == 0)
        {
            printf ("\nВ %d строке все элементы больше своих столбцов", i);
            l = i;
            break;
        }
    }
   
   
    if (key == 0){      
   
    arrNew = (int *) malloc((n - 1) * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без удаляемой строки
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            if (i == l)
                break;
               
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
        if (i != l)
        {
            i2++;
        }
                   
    }
   
 
   
    printf("\n\nНаш массив после преобразования\n");
    for (i2 = 0; i2 < n - 1; i2++)                  //вывод нового массива на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
   
 
    fprintf (f2, "%d %d\n", n - 1, m);
        for (i2 = 0; i2 < n - 1; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }  
       
   
       
    fclose (f1);
    fclose (f2);
    free(arr);
    free(arrNew);
    return l;
   
    }
    else
    {
        arrNew = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //массив arr записываем в новый массив arrNew без изменений
    {
        for (j = 0, j2 = 0; j < m; j++)
        {
            arrNew[i2*m+j2] = arr[i*m+j];
            j2++;
        }                    
           
       
            i2++;
       
                   
    }
       
        printf("\n\nНаш массив не измененный\n");
    for (i2 = 0; i2 < n; i2++)                  //вывод нового массива без изменений на экран полностью
    {
        for (j2 = 0; j2 < m; j2++)                      
            printf("%2d ", arrNew[i2*m+j2]);
       
        printf("\n");
    }
       
        printf("\nМассив не был изменён\n");
        fprintf (f2, "%d %d\n", n, m);
        for (i2 = 0; i2 < n; i2++)                         //вывод НОВОГО массива в файл
        {    
            for (j2 = 0; j2 < m; j2++)
                fprintf(f2, "%d ", arrNew[i2*m+j2]);
                           
            fprintf(f2, "\n");        
        }
        fclose (f1);
        fclose (f2);
        free(arrNew);
        free(arr);
        return 100;
    }
 
       
}
 
 
int main (void)
{
 
    int i, j,  *arr, *arr2;
       
    FILE *f1 = fopen("data_dat.txt","r");
    FILE *f2 = fopen("data_res.txt","w");
    FILE *f3 = fopen("data_res.txt","r");
    FILE *f4 = fopen("data_res2.txt","w");
   
    if (f1 == NULL) {
    printf("failed to open the file");
    fclose (f1);
    fclose (f2);
    fclose (f3);
    fclose (f4);
    return -1;
  }
   
    fscanf (f1, "%d %d", &n, &m);
   
    arr = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++){                         //заполнение массива
        for (j = 0; j < m; j++){                      
 //     fscanf(f1, "%d ", &arr[i*m+j]);
        if (fscanf(f1, "%d", &arr[i*m+j]) != 1) // считать элемент матрицы из файла
        {
          printf("failed to read the file");
          break;}
        }
    }
       
    printf("Наш  массив:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr[i*m+j]);
       
        printf("\n");        
    }
    if (n==1){
        printf("\nМассив не был изменён и не будет!\n");
        fclose (f1);
        fclose (f2);
        fclose (f3);
        fclose (f4);
        free(arr);
        return 34;
    }
    l = findStr(f1,f2,arr);                                //вызов функции
   
   
   
    //2прогон
   
    fscanf (f3, "%d %d", &n, &m);
   
    arr2 = (int *) malloc(n * m * (sizeof(int)));
   
    for (i = 0; i < n; i++)                         //заполнение массива
        for (j = 0; j < m; j++)                      
            fscanf(f3, "%d ", &arr2[i*m+j]);
       
    printf("Наш  массив 2 прогона:\n");      
    for (i = 0; i < n; i++)                         //вывод массива на экран
    {
        for (j = 0; j < m; j++)                      
            printf("%2d ", arr2[i*m+j]);
       
        printf("\n");        
    }
   
    if (n==1){
        printf("\nМассив не был изменён!\n");
        fclose (f3);
        fclose (f4);
        fclose (f1);
        fclose (f2);
        free(arr);
        free(arr2);
        return 35;
    }
   
    l = findStr(f3,f4,arr2);                                //вызов функции
    fclose (f3);
    fclose (f4);
    fclose (f1);
    fclose (f2);
    free(arr);
    free(arr2);
   
 
}

AlexProgramm,
Миниатюры
Двумерный массив с условием  
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.04.2023, 14:28

Двумерный массив. Заполнить и вывести двумерный массив БЕЗ использования цикла FOR
Заполнить ивывести двумерный массив БЕЗ использования цикла FOR очень срочно!!!

Можно ли заменить двумерный массив на массив массивов и наоборот - массив массивов на двумерный массив?
._.

Создать двумерный массив, опираясь на другой двумерный массив
У меня есть такой массив 0 0 0 0 0 0 0 6 3 2 2 8 9 3 7 6 8 3 4 5 1 0 0 0 0 0 0 0 0 0 0 0 0...

Считать из текстового файла двумерный массив и записать его двумерный динамический
Есть текстовый файл(см.Рисунок) и его надо загрузить в динамический массив(почему динамический?потому что массив будет создаваться в...

Сделайте, чтобы двумерный вектор обогнал двумерный массив при заполнении случайными числами
Всем привет! Попробовал сравнить время заполнения векторов в векторе и массивов в массиве (динамические) случайными числами, получаемыми...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр.
Jin X 06.09.2026
Скрипты Tampermonkey для CyberForum, ChatGPT, Claude и пр. Работая с форумом и нейросетями в браузере часто хочется что-то подкорректировать или добавить какого-то функционала. Ниже прикреплён. . .
Программа опроса у.з. расходомера SLS-720F
Argus19 02.09.2026
Программа опроса у. з. расходомера SLS-720F Программа опрашивает один раз в минуту три ультразвуковых расходомера SLS-720F через интерфейс RS-485 по протоколу Modbus RTU. Опрашиваются регистры. . .
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru