Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Vistar
0 / 0 / 0
Регистрация: 26.04.2009
Сообщений: 8
#1

Максимальный елемент массива - C++

23.05.2009, 03:02. Просмотров 519. Ответов 3
Метки нет (Все метки)

Программа неправильно находит максимальный елемент. И иногда при генерации нового массива просто закрывается сама. Что здесь не так? Немогу найти ошибку.

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 <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
 
#define NMAX 10
 
int** generate(int& n); // функция генерирования елементов матрицы с помощью rand
void print(int **mas, int n); // печать матрицы на экран
void print_to_file(int **mas,int n); // печать матрицы в файл
int** enter(int &n); // ввод елементов матрицы с клавиатуры
int** from_file(int &n); // считывание елементов матрицы с файла
void sum_of_all(int **mas,int n); // находит сумму всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0
void large_num(int **mas,int n); // находит найбольший елемент из всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0
 
int main()
{
   int **mas, n=NMAX;
   int ch;
  // clrscr();
 
   do
   {
      cout << "Ввести с помощью клавиатуры: (1)\n";
      cout << "Сгенерировать число с помощью процедуры random (2)\n";
      cout << "Записать в файл сгенерированую матрицу (3)\n";
      cout << "Взять матрицу с файла (4)\n";
      cout << "Вывести матрицу на экран (5)\n";
      cout << "Выход (0)\n";
      cout << "\nEnter you choise: ";
      cin >> ch;
      if (ch > 5)
      {
     cout << "Error! You enter wrong key. Please, retry.\n\n";
     continue;
      }
 
      switch(ch)
      {
     case 1: {mas = enter(n); break;}
     case 2: {mas = generate(n); break;}
     case 3: {print_to_file(mas,n); break;}
     case 4: {mas = from_file(n); break;}
     case 5: {print(mas,n); break;}
      }
      large_num(mas,n);
      sum_of_all(mas,n);
   }
   while (ch != 0);
 
for(int i=0; i<n; i++)
 delete[] mas[i];
delete[] mas;
return 0;
}
 
 
int** generate(int &n)
{
   int **mas = new int*[NMAX];
   for(int i=0; i<NMAX; i++)
    mas[i] = new int[NMAX];
   n = NMAX;
   srand(time(NULL));
   for (i = 0; i < n; i++)
     {
      for (int j = 0; j < n; j++)
         {
          mas[i][j] = 20 - rand() % 25;
         }
     }
return mas;
}
 
 
int** enter(int &n)
{
   int **mas;
   n = NMAX;
   for (int i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
     {
     cout << "Enter " << i << " " << j << " element: ";
     cin >> mas[i][j];
     }
      cout << endl << endl;
   }
   return mas;
}
 
 
int** from_file(int &n)
{
   int **mas = new int*[n];
   for(int i=0; i<n; i++)
    mas[i] = new int[n];
   int k;
   FILE *L = fopen("D:\\lab5.dat", "rb");
   n = NMAX;
   for (i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
     {
     fread(&k, sizeof(k), 1, L);
     mas[i][j] = k;
     }
      cout << endl << endl;
   }
   return mas;
}
 
 
void print(int **mas, int n)
{
   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
     {
     cout << "  " << mas[i][j];
     }
      cout << endl << endl;
      }
   getch();
}
 
 
void print_to_file(int **mas, int n)
{
   FILE *h = fopen("D:\\Lab5.dat", "wb");
   char* txt = "\n\n";
 
   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
     {
     fwrite(&mas[i][j], sizeof(mas), 1, h);
     }
 fwrite(txt, strlen(txt), 1, h);
      }
}
 
 
void sum_of_all(int **mas,int n)
{
   int sum = 0;
 
   for (int i = 0; i < n; i++)
      {
      for (int j = 1; j < n; j++)
     {
     if ((i == j) && (mas[i][j] < 0))
        {
        for (int b =0; b < 10; b++)
           {
           sum += mas[i][b];
           }
        }
     }
      }
   cout << "Summ is: " << sum << endl;
}
 
 
void large_num(int **mas, int n)
{
   int **mas_new = new int*[n];
   for(int i=0; i<n; i++)
    mas_new[i] = new int[n];
   for (i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
     {
     if ((i == j) && (mas[i][j] < 0))
        {
        for (int b = 0; b < n; b++)
           {
           mas_new[i][j] = mas[i][b];
           }
        }
      }
      }
 
 
   int max = 0;
   for (int m = 0; m < n; m++)
      {
      for (int k = 0; k < n; k++)
     {
     if (mas_new[m][k] > max)
        {
        max = mas_new[m][k];
        }
     }
      }
   cout << "max: " << max;
 
for(i = 0; i<n; i++)
{
 delete[] mas_new[i];
 delete[] mas_new;
}
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.05.2009, 03:02     Максимальный елемент массива
Посмотрите здесь:

Найти максимальный елемент одномерного массива - C++
Отредактируйте пожалуйста код программы для нахождения максимального елемента массива и его номера . У меня программа не понимает команду...

Поменять максимальный и минимальный елемент - C++
Надо поменять максимальный и минимальный елемент каждой строки матрицы, как это можно сделать // ConsoleApplication12.cpp:...

Почему не выводит максимальный елемент? - C++
Вотя написал програмку, но когда я делаю условие чтобы мне вывело максимальный елемент, мне выводит - 0 #include &lt;iostream.h&gt; void...

В одномерному массиве найти максимальный по модулю елемент среди отрицательних(срочно) - C++
напишите масив пл. в групе никто не знает как ево написать!!!

Доделать код чтобы он искал произведение элементов строки в которой находится максимальный елемент - C++
Как найти произведение элементов строки в которой находится максимальный элемент? #include &lt;iostream&gt; #include &lt;math.h&gt; using...

Однонаправлений список. Операції: “[]” видалити елемент в заданій позиції, наприклад: int i; list L; L[i]; “[]” додати елемент в задану позицію, напр - C++
Помогите. Есть одна написаная. Условия: Черга. Операції: “+” додати елемент ; “-“ видалити елемент ; bool() перевірка «чи...

Визначте мінімальний елемент масиву, що кратний 5. Перший елемент масиву дорівнює 500. Розмір масиву 8 - C++
Розробіть програму, в якій визначається масив цілих чисел заданого розміру. Перший елемент масиву задається, всі інші елемен¬ти вводяться...

Мах Елемент - C++

нулевой елемент - C++
в массиве A(n) (n&lt;=14) есть хотя бы один нулевой элемент.Узнать количество элементов,что больше 10,которые следуют за этим нулем.с++

Максимальный элемент массива - C++
Помогите пожалуйста не понимаю откуда берутся в ответе не понятные числа. #include &lt;iostream&gt; /* run this program using the...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
23.05.2009, 11:56     Максимальный елемент массива #2
C++
1
2
3
4
5
6
7
 if ((i == j) && (mas[i][j] < 0))
            {
            for (int b = 0; b < n; b++)
               {
               mas_new[i][j] = mas[i][b];
               }
            }
что делает эта конструкция?

Функция enter пытается заполнить не существующий массив

188 строка лучше написать max = max_new[0][0]; на случае если массив содержит одни отрицательные элементы.

204 и 205 строки надо поменять местами.

Функция main не правильно построена, если сразу выбрать вариант 0(выход из программы), то прежде чем завершиться, программа попытается вычислить максимальный элемент и сумму элементов(вопрос только в чем?!, динамический массив то не был создан) и освободить не существующую область памяти.

Все что пока нашел.
Vistar
0 / 0 / 0
Регистрация: 26.04.2009
Сообщений: 8
23.05.2009, 13:56  [ТС]     Максимальный елемент массива #3
C++
1
2
3
4
5
6
7
if ((i == j) && (mas[i][j] < 0))
            {
            for (int b = 0; b < n; b++)
               {
               mas_new[i][j] = mas[i][b];
               }
            }
Эта конструкция записывает в отдельный массив строки в которых елементы на главной диагонали меньше 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
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
#include <iostream.h>
#include <conio.h>
#include <stdlib.h>
#include <fstream.h>
#include <stdio.h>
#include <string.h>
 
#define NMAX 10
 
int** generate(int& n); // функция генерирования елементов матрицы с помощью rand
void print(int **mas, int n); // печать матрицы на экран
void print_to_file(int **mas,int n); // печать матрицы в файл
int** enter(int &n); // ввод елементов матрицы с клавиатуры
int** from_file(int &n); // считывание елементов матрицы с файла
void sum_of_all(int **mas,int n); // находит сумму всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0
void large_num(int **mas,int n); // находит найбольший елемент из всех елементов тех строк, в которых елемент стоящий на главной диагонали меньше 0
 
int main()
{
   int **mas, n=NMAX;
   int ch;
   clrscr();
 
   do
   {
      cout << "Ввести с помощью клавиатуры: (1)\n";
      cout << "Сгенерировать число с помощью процедуры random (2)\n";
      cout << "Записать в файл сгенерированую матрицу (3)\n";
      cout << "Взять матрицу с файла (4)\n";
      cout << "Вывести матрицу на экран (5)\n";
      cout << "Показать максимальное число (6)\n";
      cout << "Показать сумму елементов (7)\n";
      cout << "Выход (0)\n";
      cout << "\nEnter you choise: ";
      cin >> ch;
      if (ch > 7)
      {
     cout << "Error! You enter wrong key. Please, retry.\n\n";
     continue;
      }
 
      switch(ch)
      {
     case 0: {exit; break;}
     case 1: {mas = enter(n); break;}
     case 2: {mas = generate(n); break;}
     case 3: {print_to_file(mas,n); break;}
     case 4: {mas = from_file(n); break;}
     case 5: {print(mas,n); break;}
     case 6: {large_num(mas,n); break;}
     case 7: {sum_of_all(mas,n); break;}
      }
   }
   while (ch != 0);
 
for(int i=0; i<n; i++)
   delete[] mas[i];
   delete[] mas;
return 0;
}
 
 
int** generate(int &n)
{
   int **mas = new int*[NMAX];
   for(int i=0; i<NMAX; i++)
   mas[i] = new int[NMAX];
   n = NMAX;
   srand(time(NULL));
   for (i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
      {
     mas[i][j] = 20 - rand() % 25;
      }
   }
return mas;
}
 
 
int** enter(int &n)
{
   int **mas = new int*[NMAX];
   for(int i=0; i<NMAX; i++)
   mas[i] = new int[NMAX];
   n = NMAX;
   for (i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
      {
     cout << "Enter " << i << " " << j << " element: ";
     cin >> mas[i][j];
      }
      cout << endl << endl;
   }
   return mas;
}
 
 
int** from_file(int &n)
{
   int **mas = new int*[n];
   for(int i=0; i<n; i++)
   mas[i] = new int[n];
   int k;
   FILE *L = fopen("D:\\lab5.dat", "rb");
   n = NMAX;
   for (i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
      {
     fread(&k, sizeof(k), 1, L);
     mas[i][j] = k;
      }
      cout << endl << endl;
   }
   return mas;
}
 
 
void print(int **mas, int n)
{
   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
     {
     cout << "  " << mas[i][j];
     }
      cout << endl << endl;
      }
}
 
 
void print_to_file(int **mas, int n)
{
   FILE *h = fopen("D:\\Lab5.dat", "wb");
   char* txt = "\n\n";
 
   for (int i = 0; i < n; i++)
      {
      for (int j = 0; j < n; j++)
     {
     fwrite(&mas[i][j], sizeof(mas), 1, h);
     }
 fwrite(txt, strlen(txt), 1, h);
      }
}
 
 
void sum_of_all(int **mas,int n)
{
   int sum = 0;
 
   for (int i = 0; i < n; i++)
      {
      for (int j = 1; j < n; j++)
     {
     if ((i == j) && (mas[i][j] < 0))
        {
        for (int b =0; b < 10; b++)
           {
           sum += mas[i][b];
           }
        }
     }
      }
   cout << "Summ is: " << sum << endl;
}
 
 
void large_num(int **mas, int n)
{
   int **mas_new = new int*[n];
   for(int i=0; i<n; i++)
   mas_new[i] = new int[n];
   for (i = 0; i < n; i++)
   {
      for (int j = 0; j < n; j++)
      {
     if ((i == j) && (mas[i][j] < 0))
     {
        for (int b = 0; b < n; b++)
        {
           mas_new[i][j] = mas[i][b];
        }
     }
      }
   }
 
 
   int max = mas_new[0][0];
   for (int m = 0; m < n; m++)
   {
      for (int k = 0; k < n; k++)
      {
     if (mas_new[m][k] > max)
     {
        max = mas_new[m][k];
     }
      }
   }
   cout << "max: " << max << endl;
 
for(i = 0; i<n; i++)
 delete[] mas_new[i];
 delete[] mas_new;
}
kazak
3032 / 2353 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
23.05.2009, 15:16     Максимальный елемент массива #4
Если копировать строка в строку, тогда уж mas_new[i][b] = mas[i][b]. И перед копированием надо mas_new инициализировать, например нулями.
Yandex
Объявления
23.05.2009, 15:16     Максимальный елемент массива
Ответ Создать тему
Опции темы

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