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

Прокомментировать - C++

Восстановить пароль Регистрация
 
Sonn ADK
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 11
27.12.2010, 01: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
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
#include<iostream.h>
#include<iomanip.h>
#include<stdlib.h>
#include<conio.h>
 
const int max_razm = 20;
 
struct array2D{
 
   int rows, cols;
   int arr[max_razm][max_razm];
};
 
struct array1D{
 
   int cols;
   bool prov_cols[max_razm];
   int arr[max_razm];
};
 
 
array2D InitStartArray(){
 
    array2D temp;
 
    cout<<"Rows "<<"(<="<<max_razm<<"): "; cin>>temp.rows;
   cout<<"Cols "<<"(<="<<max_razm<<"): "; cin>>temp.cols;
   cout<<endl;
 
   randomize();
 
   for(int row = 0; row < temp.rows; row++)
 
    for(int col = 0; col < temp.cols; col++)
 
        temp.arr[row][col] = (float)(random(5)-3);
 
   return temp;
}
 
 
void PrintArray2(array2D arr){
 
   for(int row = 0; row < arr.rows; row++){
 
    for(int col = 0; col < arr.cols; col++){
 
        cout<<setprecision(2)<<setw(5)<<arr.arr[row][col];
      }
 
      cout<<endl;
   }
 
   cout<<endl;
}
 
 
array1D CalculateSumInRows(array2D arr){
 
    array1D result;
 
   result.cols = arr.rows;
 
   float pro;
 
   for(int row = 0; row < arr.rows; row++){
 
      int start_null = -1;
      int end_null = -1;
 
    for(int col = 0; col < arr.cols; col++){
 
        if(arr.arr[row][col] == 0){
 
            if(start_null = -1){
 
                start_null = col;
               col = arr.cols;
               for(int i = arr.cols-1; i > start_null+1; i--){
 
                 if(arr.arr[row][i] == 0) {end_null = i; i = start_null+1;}
               }
            }
         }
      }
      if(start_null == -1 || end_null == -1){
 
           result.prov_cols[row] = false;
      }
      else{
          result.arr[row] = 1;
          for(int col = start_null + 1; col < end_null; col++)
          result.arr[row] = result.arr[row] * arr.arr[row][col];
          result.prov_cols[row] = true;
      }
   }
 
   return result;
}
 
 
 
 
void PrintArray1(array1D arr){
 
    for(int col = 0; col < arr.cols; col++){
 
      cout<<"proizvedenie B "<<(col+1)<<" stroke: ";
        if(arr.prov_cols[col]) cout<<arr.arr[col]<<endl;
      else cout<<"proizvedenia net"<<endl;
      }
}
 
 
void main(){
 
   array2D start_array = InitStartArray();
 
   clrscr();
 
    PrintArray2(start_array);
   getch();
 
   PrintArray1(CalculateSumInRows(start_array));
   getch();
}
 Комментарий модератора 
Используйте теги форматирования кода.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.12.2010, 01:17     Прокомментировать
Посмотрите здесь:

C++ Прокомментировать
Прокомментировать v3.0 C++
C++ Прокомментировать код
C++ Прокомментировать код
Прокомментировать код C++
Прокомментировать! C++
C++ Прокомментировать код
C++ Прокомментировать код
C++ Прокомментировать код
C++ Прокомментировать код
C++ Прокомментировать код
C++ Прокомментировать код

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт С++
 Аватар для ForEveR
7934 / 4716 / 318
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
27.12.2010, 01:37     Прокомментировать #2
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
#include<iostream.h>//Ввод-вывод
#include<iomanip.h>//Манипуляторы
#include<stdlib.h>//Стандартная библа
#include<conio.h>//Для getch
 
const int max_razm = 20;//Константа размера
//Структура 
struct array2D{
 
   int rows, cols;//Строки, столбцы
   int arr[max_razm][max_razm];//Двумерный массив 20 на 20
};
//Структура
struct array1D{
 
   int cols;//Столбцы
   bool prov_cols[max_razm];//Булевый массив размером 20
   int arr[max_razm];//Интовый массив размером 20
};
 
//Функция, возвращающая объект типа array2D без параметров
array2D InitStartArray(){
//Создание объекта
    array2D temp;
//Ввод кол-ва строк и стобцов
    cout<<"Rows "<<"(<="<<max_razm<<"): "; cin>>temp.rows;
   cout<<"Cols "<<"(<="<<max_razm<<"): "; cin>>temp.cols;
   cout<<endl;
//Инициализация датчика рандома
   randomize();
//Заполнение дробными числами двумерного массива
   for(int row = 0; row < temp.rows; row++)
 
    for(int col = 0; col < temp.cols; col++)
 
        temp.arr[row][col] = (float)(random(5)-3);
//Возврат объекта
   return temp;
}
 
//Печать двумерного массива
void PrintArray2(array2D arr){
 
   for(int row = 0; row < arr.rows; row++){
 
    for(int col = 0; col < arr.cols; col++){
//Два знака, в поле размером 5
        cout<<setprecision(2)<<setw(5)<<arr.arr[row][col];
      }
 
      cout<<endl;
   }
 
   cout<<endl;
}
 
//Функция подсчета суммы в строках
array1D CalculateSumInRows(array2D arr){
//Объект структуры array1D
    array1D result;
//Устанавливаем его размер равным кол-ву строк двумерного массива
   result.cols = arr.rows;
//Сумма
   float pro;
 
   for(int row = 0; row < arr.rows; row++){
//Индекс первого и последнего нулей. Сначала равны -1
      int start_null = -1;
      int end_null = -1;
 
    for(int col = 0; col < arr.cols; col++){
//Если в матрице число с индексом row, col = 0
        if(arr.arr[row][col] == 0){
//И если индекс первого нуля есть -1
            if(start_null == -1){
//Индекс первого нуля становится равен счетчику
                start_null = col;
//А счетчик становится равен arr.cols.
               col = arr.cols;
               for(int i = arr.cols-1; i > start_null+1; i--){
//Если в матрице число с индексом row, i ноль, то индекс последнего нуля есть i а i есть индекс //первого нуля+1
                 if(arr.arr[row][i] == 0) {end_null = i; i = start_null+1;}
               }
            }
         }
      }
//Если нулей не найдено
      if(start_null == -1 || end_null == -1){
//Ставим в булевый массив в элемент в индексом row false
           result.prov_cols[row] = false;
      }
//Иначе
      else{
          result.arr[row] = 1;
          for(int col = start_null + 1; col < end_null; col++)
//Ставим в итоговый одномерный массив на место row это число умноженное на элемент двумерного массива с индексами row, col
          result.arr[row] = result.arr[row] * arr.arr[row][col];
//Ставим в булевый массив в элемент с индексом row true
          result.prov_cols[row] = true;
      }
   }
//Вертаем объект назад
   return result;
}
 
 
 
//Печатает одномерный массив
void PrintArray1(array1D arr){
 
    for(int col = 0; col < arr.cols; col++){
//Если в булевом массиве элемент с индексом col не 0 печатаем элемент из интового массива, если 0 //пишем что произведения нет
      cout<<"proizvedenie B "<<(col+1)<<" stroke: ";
        if(arr.prov_cols[col]) cout<<arr.arr[col]<<endl;
      else cout<<"proizvedenia net"<<endl;
      }
}
 
 
void main(){
//Инициализация объекта двумерного массива
   array2D start_array = InitStartArray();
//Очистка экрана
   clrscr();
//Печать двумерного массива
    PrintArray2(start_array);
   getch();
//Печать массива результатов
   PrintArray1(CalculateSumInRows(start_array));
   getch();
}
Sonn ADK
0 / 0 / 0
Регистрация: 23.12.2010
Сообщений: 11
27.12.2010, 20:04  [ТС]     Прокомментировать #3
а блок-схему можете нарисовать ?
Yandex
Объявления
27.12.2010, 20:04     Прокомментировать
Ответ Создать тему
Опции темы

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