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

Произведение строк; максимум сумм диагоналей (исправить ошибки) - C++

Восстановить пароль Регистрация
 
rtpn
0 / 0 / 0
Регистрация: 05.10.2010
Сообщений: 22
20.04.2011, 19:17     Произведение строк; максимум сумм диагоналей (исправить ошибки) #1
Программа должна запрашивать размеры матрицы и самостоятельно заполнять ее с помощью генератора случайных чисел (динамический массив). Верхняя граница для значения элементов матрицы также вводится с клавиатуры.
Дана целочисленная прямоугольная матрица. Определить:
а) произведение элементов тех строк, которые не содержат ни одного нулевого элемента;
б) максимум среди сумм элементов диагоналей, параллельных главной диагонали.

Помогите исправить ошибки:
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
#include <iostream>
 using namespace std;
 int main(){
     int     **a;
     int     n,m,z,s,i,j;
     int     **proizv;
     cout<<"n: ";
     cin>>n;
     cout<<"m: ";
     cin>>m;
     cout << "vvedite maximalnoe znachenie elementa :";
     cin >> z;
 
     a=new int*[n];
     for(i=0;i<n;i++)
         a[i]=new int[m];
  proizv=new int*[n];
     for(i=0;i<n;i++)
         proizv[i]=new int[m];
  s=new int*[n];
     for(i=0;i<n;i++)
         s[i]=new int[m];
      for(i=0;i<n;i++)
         for(j=0;j<m;j++){
            a[i][j]=rand()%z;
         }
 
     for(i=0;i<n;i++){
         for(j=0;j<m;j++)
             cout<<a[i][j]<<" ";
         cout<<endl;
     }
//a
for (i=0;i<n;i++)
   {
       proizv[i]=1;
    for(j=0;j<n;j++)
    {
           if(a[i][j]!=0) proizv[i]*=a[i][j]; 
          else proizv[i]=0;                         
    }    
       if(proizv[i]>0) printf("Proizvedenie elementov stroki %d ravno %d\n",i+1,proizv[i]);     
   }
//b
 for (j=0;j<(2*n);j++) 
  s[j]=0;
   for (i=0;i<n;i++)
   {
       for (j=0;j+i<n;j++)
       {
           s[j]+=a[i][i+j];
           s[n+j]+=a[i+j][i]; 
       }      
   }
   for (j=0;j<n;j++) printf("%d\n",s[j]);
   for (j=n+1;j<(2*n);j++) printf("%d\n",s[j]);
  
 for(i=0;i<n;i++)
         delete []a[i];
 
     cin.get(),cin.get();
     return 0;
 }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.04.2011, 19:17     Произведение строк; максимум сумм диагоналей (исправить ошибки)
Посмотрите здесь:

Определить максимум среди сумм элементов диагоналей матрицы C++
C++ найти максимум среди сумм элементов диагоналей, параллельных побочной диагонали
C++ Определить максимум среди сумм элементов диагоналей
Максимум среди сумм элементов диагоналей матрицы: исправить C++
Найти максимум среди сумм элементов диагоналей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
popov654
 Аватар для popov654
31 / 31 / 2
Регистрация: 09.04.2011
Сообщений: 114
20.04.2011, 23:13     Произведение строк; максимум сумм диагоналей (исправить ошибки) #2
1) У Вас s объявлен как int, а Вы пытаетесь из него сделать двумерный массив
2)
C
1
else proizv[i]=0;
Забавно, но факт - можно обойтись и без этой строки. Просто тупо всё умножать, а потом проверять уже на условие >0
3) По вопросу 2 у Вас что-то совсем непонятное, Вы уж извините. О_о Сейчас попробую переписать, через полчаса выложу что получилось...

Добавлено через 1 час 6 минут
Во:
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
#include <iostream>
using namespace std;
int main(){
     int     **a;
     int     n,m,z,i,j;
     int     *proizv;
     int     *sum;
     cout<<"n: ";
     cin>>n;
     cout<<"m: ";
     cin>>m;
     cout << "vvedite maximalnoe znachenie elementa :";
     cin >> z;
 
 
     a=new int*[n];
     for(i=0;i<n;i++)
         a[i]=new int[m];
     proizv=new int[n];
     sum = new int[n+m-1];
     for (i=0;i<n+m-1;i++) {
         sum[i]=0;
     }
     srand(time(NULL));
 
 
 
     for(i=0;i<n;i++)
         for(j=0;j<m;j++){
            a[i][j]=rand()%z;
         }
 
     for(i=0;i<n;i++){
         for(j=0;j<m;j++)
             cout<<a[i][j]<<" ";
         cout<<endl;
     }
     //1
     for (i=0;i<n;i++) {
        proizv[i]=1;
        for(j=0;j<m;j++) {
           proizv[i]*=a[i][j]; 
        }    
        if(proizv[i]>0) printf("Proizvedenie elementov stroki %d ravno %d\n",i+1,proizv[i]);     
     }
     //2
     int k;
     for (j=0;j<m;j++) { 
        i=0;
        k=j;
        sum[k]=0;
        int jj=j;
        while (jj<m) {
           sum[k]+=a[i][jj];
           i++;
           jj++;
        }
     }
    
     for (i=1;i<n;i++) {
        j=0;
        k=m+i;
        int ii=i;
        while (ii<n) {
           sum[k]+=a[ii][j];
           ii++;
           j++;
        }
     }
       
     int max=sum[0];
     for(i=0;i<n+m-1;i++) {
        if(sum[i]>max) max=sum[i];
     }
    
     printf("Maksimum sredi summ elementov diagonaley, parallelnih glavnoy = %d\n",max);
 
     getchar();
     getchar();
     return 0;
}
rtpn
0 / 0 / 0
Регистрация: 05.10.2010
Сообщений: 22
21.04.2011, 13:14  [ТС]     Произведение строк; максимум сумм диагоналей (исправить ошибки) #3
а что с этим делать?
error C3861: time: идентификатор не найден
1>
1>СБОЙ построения.
silent_1991
Эксперт C++
4938 / 3014 / 149
Регистрация: 11.11.2009
Сообщений: 7,024
Завершенные тесты: 1
21.04.2011, 13:52     Произведение строк; максимум сумм диагоналей (исправить ошибки) #4
C++
1
#include <ctime>
Yandex
Объявления
21.04.2011, 13:52     Произведение строк; максимум сумм диагоналей (исправить ошибки)
Ответ Создать тему
Опции темы

Текущее время: 05:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru