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

В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.72
n_zheka
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
25.05.2010, 16:38     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #1
Добрый день, помогите пожалуйста с таким заданием :
В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.05.2010, 16:38     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы.
Посмотрите здесь:

C++ В целочисленной прямоугольной матрице определить количество строк , не содержащих ни одного элемента
C++ Определить количество столбцов в матрице, не содержащих ни одного нулевого элемента
C++ Определить количество столбцов в матрице, не содержащих ни одного нулевого элемента
C++ Если в матрице нет строк, содержащих только отрицательные элементы, то формируется новая матрица
C++ в прямоугольной матрице определить количество столбцов, содержащих только числа 1-го знака (положительного и отрицательного...
Определить номера столбцов содержащих только отрицательные элементы матрицы C++
C++ В матрице целых чисел заменить все отрицательные элементы нулями.Подсчитать количество замен
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
25.05.2010, 16:42     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #2
Основная часть
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < rowSize; i++)
{
   for (int j = 0; j < columnSize; i++)
   {
      if (mas[i][j] < 0)
      {
         columnCount++;
         break;
      }
   }
}
neske
1425 / 792 / 55
Регистрация: 26.03.2010
Сообщений: 2,726
25.05.2010, 16:51     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #3
kazak, ваш код считает кол-во строчек, содержащих нули.

C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < rowSize; i++)
{
   for (int j = 0; j < columnSize; i++)
   {
      if (mas[j][i] < 0)
      {
         columnCount++;
         break;
      }
   }
}
Так вот)
kazak
25.05.2010, 16:54
  #4

Не по теме:

Бывает

n_zheka
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
26.05.2010, 11:46  [ТС]     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #5
Спасибо огромное, а не могли бы вы адаптировать этот код под существующий код, в существующем задание звучит так:
В прямоугольной матрице найти номера столбцов, содержащих соответственно максимальное и минимальное количество отрицательных элементов, после чего обменять их местами. Учесть частныеслучаи (в матрице нет отрицательных элементов; лишь один столбец матрицы содержит такие элементы; лишь два столбца содержат отрицательные элементы, но их количество одинаково).
А сделать под мое задание В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы.
Образец кода:
помогите в нем убрать лишние строки кода и переменные, ввод оставить такой как в образце, а вывод и задание подогнать под моё
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
#include<stdio.h> /*Модуль функций стандартного ввода-вывода*/
#include<process.h>
#include<bios.h>
#include<alloc.h>/*Модуль функций работы с динамической памятью*/
#include<conio.h> /*Модуль функций расширения ввода-вывода(в Паскале
                    аналогичный модуль CRT)*/
/*Предварительное описание используемых в программе функций*/
 void inputmatr(float x[][20],int *m,int *n,char c);
 void outputmatr(float x[][20],int m,int n);
 float max_el(float *x,int m,int n,int *ng[20]);
 int *num_neg(float x[][20],int m,int n);
/*************************************************************************/
/*Главная программа(функция) включает вызовы функций ввода, вывода и
  обработки матрицы*/
 
 void main()
  {
   float x[20][20];
   int  mx,nx,my,ny;
   /*Матрица Х располагается в стеке, для матрицы А место выделяется
     в куче. Обработка матриц выполняется общими процедурами*/
   clrscr();
   remove("rez.dat");/*удаление файла результатов, если он имеется в текущем
   директории*/
   inputmatr(x,&mx,&nx,'x');
   clrscr();
   printf("Вывод результатов обработки матрицы х\n");
   outputmatr(x,mx,nx);
   printf("\n\n         Для выхода нажмите любую клавишу ");
   getch();/*Ввод символа с клавиатуры без эха на экране. */
  }
 
 
/***************************************************************/
/*Функция возврвщает указательна массив, содержащий количество отри-
  цательных элементов для каждого столбца матрицы*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 int *num_neg(float x[][20],int m,int n)
  {
   int *ng=(int*)malloc(n*sizeof(int));/*Выделение динамической памяти
    под массив счетчиков отрицательных элементов*/
   int i,j;
   for(j=0;j<n;j++)/*Цикл по столбцам*/
    {
     ng[j]=0; /*Сброс счетчика*/
     for(i=0;i<m;i++)/*Цикл по строкам*/
      if(x[i][j]<0) /*Если число меньше нуля, то инкрементируем счетчик*/
       ng[j]++;
     }
   return ng;
  }
/*Функция меняет местами столбцы с максимальным и минимальным количеством отрицатель-
ных элементов,  после чего  меняет их местами*/
/*В функцию передается указатель на матрицу, поэтому матрица обрабатывается
  как одномерный массив с использованием индексных выражений*/
 float max_el(float *x,int m,int n,int *ng[20])
  {
   max=min=0;
    else
      if (ng[min]==0&&ng[j]!=0)
    min=j;
 
   }
   if((min!=max)&&(ng[min]!=0)&&(ng[max]!=0))
   {
    for(i=0;i<m;i++)
     {
      t=x[i*20+min];
      x[i*20+min]=x[i*20+max];
      x[i*20+max]=t;
     }
   }   float t;
   int i,j,max,min;
   max=min=0; /*Минимальным и максимальным считаем первый элемент*/
   for(j=1;j<n;j++)/*Цикл поиска минимума и максимума*/
   {
    if (ng[j]>ng[max])/*Если текущий элемент больше элемента с индексом max*/
      max=j; /*В max запоминаем текущую позицию*/
    if (ng[j]<ng[min]&&ng[j]!=0)
      min=j; /*В min запоминаем текущую позицию*/
    else
      if (ng[min]==0&&ng[j]!=0)
      min=j; /*В min запоминаем текущую позицию*/
   }
   if((min!=max)&&(ng[min]!=0)&&(ng[max]!=0)) /*Проверка частных случаев*/
   /*Номера столбцов не совпадают и есть минимальное число элементов и есть максимальное число элементов*/
   {
    for(i=0;i<m;i++)/*Цикл перестановки элементов чеерез 3-ю переменную*/
     {
      t=x[i*20+min];
      x[i*20+min]=x[i*20+max];
      x[i*20+max]=t;
     }
   }
   return max;
  }
/***************************************************************************/
/*Функция обеспечивает вывод результатов программы на экран или в файл*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 void outputmatr(float x[][20],int m,int n)
  {int i,p,j,imax,jmax,*kol_min;
   FILE *f;
   printf("\n Вывод матрицы на экран<s> или в файл<f>?\n\n");
   if(((p=getch())=='f')||(p=='F')||(p=='а')||(p=='А'))
    {
     p='f';/*Переменная запоминает направление вывода*/
     if((f=fopen("rez.dat","at"))==NULL)/*Открытие файла в текстовом режиме
       для записи в конец файла*/
      {
       printf("Невозможно открыть файл для результатов\n"
       " Для выхода в DOS нажмите любую клавишу\n");
       getch();
       exit(0);
      }
    }
     else f=stdout;
   fprintf(f,"\tИсходная матрица x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   kol_min=num_neg(x,m,n);
   fprintf(f,"количество отрицательных элементов в столбцах матрицы\n");
   for(j=0;j<n;j++)
      fprintf(f,"%8d",kol_min[j]);
   fprintf(f,"\n");
   max_el((float *)x,m,n,kol_min);
   fprintf(f,"\tПреобразованная матрица x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   if(p=='f')fclose(f);
  }
/***********************************************************************/
/*Функция вводит исходные данные с клавиатуры или из файла*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 void inputmatr(float x[][20],int *m,int *n,char c)
  {
   float xr;
   int  i,j,pr,ch;
   FILE *f; char p;
   clrscr();
   printf("Ввод размеров и элементов матрицы %c\n",c);
   printf("\n\n      Введите размеры матрицы m,n<=20\n ");
   /*Перед вводом с клавиатуры целесообразно очистить системный
     буфер клавиатуры*/
   /*while ((ch=scanf("%c",ch))!=0);getch()
     {ch=bioskey(0);
      putch(ch);
     }*/
   scanf("%d%d",m,n);
   printf(" Ввод матрицы с клавиатуры<k> или из файла<f>?\n");
   if(((p=getch())=='f')||(p=='F')||(p=='а')||(p=='А'))
    {
     p='f';
     if((f=fopen("matr.dat","rt"))==NULL)
      {
       printf("Исходный файл не найден\n Для выхода в DOS нажмите "
               "любую клавишу");
       getch();
       exit(0);
      }
    }
     else f=stdin;
   if(p!='f')printf("Введите элементы матрицы\n");
   for(i=0;i<*m;i++)
    for(j=0;j<*n;j++)
     {
      pr=fscanf(f,"%f",&xr);
      if(pr<=0)
       {
        if(pr==EOF)
         printf("Обнаружен конец файла\n");
        else
         printf("Ошибка чтения %s \n",(p=='f')?"из файла":"с клавиатуры");
        printf("Для выхода в DOS нажмите любую клавишу");
        getch();
        exit(0);
       }
      else x[i][j]=xr;
     }
   if(p=='f')fclose(f);
  }
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
26.05.2010, 12:10     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #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
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
#include<stdio.h> /*Ìîäóëü ГґГіГ*êöèé Г±ГІГ*Г*Г¤Г*ðòГ*îãî ââîäГ*-âûâîäГ**/
#include<process.h>
#include<bios.h>
#include<alloc.h>/*Ìîäóëü ГґГіГ*êöèé Г°Г*áîòû Г± äèГ*Г*ìè÷åñêîé ГЇГ*ìÿòüþ*/
#include<conio.h> /*Ìîäóëü ГґГіГ*êöèé Г°Г*ñøèðåГ*ГЁГї ââîäГ*-âûâîäГ*(Гў ГЏГ*Г±ГЄГ*ëå
                    Г*Г*Г*ëîãè÷Г*ûé ìîäóëü CRT)*/
/*ÏðåäâГ*ðèòåëüГ*îå îïèñГ*Г*ГЁГҐ èñïîëüçóåìûõ Гў ïðîãðГ*ììå ГґГіГ*êöèé*/
 void inputmatr(float x[][20],int *m,int *n,char c);
 void outputmatr(float x[][20],int m,int n);
 int num_neg(float x[][20],int m,int n);
/*************************************************************************/
/*ГѓГ«Г*ГўГ*Г*Гї ïðîãðГ*ììГ*(ГґГіГ*êöèÿ) âêëþ÷Г*ГҐГІ âûçîâû ГґГіГ*êöèé ââîäГ*, âûâîäГ* ГЁ
  îáðГ*áîòêè Г¬Г*òðèöû*/
 
 void main()
  {
   float x[20][20];
   int  mx, my;
   /*ГЊГ*òðèöГ* Г• Г°Г*ñïîëГ*ГЈГ*ГҐГІГ±Гї Гў Г±ГІГҐГЄГҐ, äëÿ Г¬Г*òðèöû ГЂ ìåñòî âûäåëÿåòñÿ
     Гў ГЄГіГ·ГҐ. ГЋГЎГ°Г*áîòêГ* Г¬Г*òðèö âûïîëГ*ГїГҐГІГ±Гї îáùèìè ïðîöåäóðГ*ìè*/
   clrscr();
   remove("rez.dat");/*ГіГ¤Г*ëåГ*ГЁГҐ ГґГ*éëГ* ðåçóëüòГ*òîâ, åñëè Г®Г* èìååòñÿ Гў ГІГҐГЄГіГ№ГҐГ¬
   Г¤ГЁГ°ГҐГЄГІГ®Г°ГЁГЁ*/
   inputmatr(x,&mx,&my,'x');
   clrscr();
   printf("Âûâîä ðåçóëüòГ*òîâ îáðГ*áîòêè Г¬Г*òðèöû Гµ\n");
   outputmatr(x,mx,my);
   printf("Êîëè÷åñòâî ñòîëáöîâ Г± îòðèöГ*òåëüГ*ûìè ýëåìåГ*ГІГ*ìè %i\n", num_neg(x,mx,my));
   printf("\n\n         Äëÿ âûõîäГ* Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі ");
   getch();/*Ââîä ñèìâîëГ* Г± ГЄГ«Г*ГўГЁГ*òóðû ГЎГҐГ§ ГЅГµГ* Г*Г* ГЅГЄГ°Г*Г*ГҐ. */
  }
 
 
/***************************************************************/
/*ÔóГ*êöèÿ âîçâðâùГ*ГҐГІ êîëè÷åñòâî ñòîëáöîâ Г¬Г*òðèöû,
               Г±Г®Г¤ГҐГ°Г¦Г*Г№ГЁГҐ îòðèöГ*òåëüГ*ûå ýëåìåГ*ГІГ».*/
/*Г‚ ГґГіГ*êöèþ ïåðåäГ*ГҐГІГ±Гї Г¬Г*òðèöГ* ГЄГ*ГЄ äâóìåðГ*ûé Г¬Г*Г±Г±ГЁГў. ÝëåìåГ*ГІГ» Г¬Г*òðèöû
  îáðГ*ГЎГ*òûâГ*ГѕГІГ±Гї Г± èñïîëüçîâГ*Г*ГЁГҐГ¬ ГЁГ*äåêñГ*ûõ âûðГ*æåГ*ГЁГ©*/
 int num_neg(float x[][20],int m,int n)
  {
   int count = 0;
   int i,j;
 
   for ( j = 0; j < n; i++)
   {
      for (i = 0; i < m; i++)
      {
         if (mas[i][j] < 0)
         {
            count++;
            break;
         }
      }
   }
   return count;
  }
/***************************************************************************/
/*ÔóГ*êöèÿ îáåñïå÷èâГ*ГҐГІ âûâîä ðåçóëüòГ*òîâ ïðîãðГ*ììû Г*Г* ГЅГЄГ°Г*Г* èëè Гў ГґГ*éë*/
/*Г‚ ГґГіГ*êöèþ ïåðåäГ*ГҐГІГ±Гї Г¬Г*òðèöГ* ГЄГ*ГЄ äâóìåðГ*ûé Г¬Г*Г±Г±ГЁГў. ÝëåìåГ*ГІГ» Г¬Г*òðèöû
  îáðГ*ГЎГ*òûâГ*ГѕГІГ±Гї Г± èñïîëüçîâГ*Г*ГЁГҐГ¬ ГЁГ*äåêñГ*ûõ âûðГ*æåГ*ГЁГ©*/
 void outputmatr(float x[][20],int m,int n)
  {int i,p,j,imax,jmax,*kol_min;
   FILE *f;
   printf("\n Âûâîä Г¬Г*òðèöû Г*Г* ГЅГЄГ°Г*Г*<s> èëè Гў ГґГ*éë<f>?\n\n");
   if(((p=getch())=='f')||(p=='F')||(p=='Г*')||(p=='ГЂ'))
    {
     p='f';/*ÏåðåìåГ*Г*Г*Гї Г§Г*ïîìèГ*Г*ГҐГІ Г*Г*ГЇГ°Г*âëåГ*ГЁГҐ âûâîäГ**/
     if((f=fopen("rez.dat","at"))==NULL)/*Îòêðûòèå ГґГ*éëГ* Гў òåêñòîâîì ðåæèìå
       Г¤Г«Гї Г§Г*ГЇГЁГ±ГЁ Гў ГЄГ®Г*ГҐГ¶ ГґГ*éëГ**/
      {
       printf("ÍåâîçìîæГ*Г® îòêðûòü ГґГ*éë äëÿ ðåçóëüòГ*òîâ\n"
           " Äëÿ âûõîäГ* Гў DOS Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі\n");
       getch();
       exit(0);
      }
    }
     else f=stdout;
   fprintf(f,"\tÈñõîäГ*Г*Гї Г¬Г*òðèöГ* x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   kol_min=num_neg(x,m,n);
   fprintf(f,"êîëè÷åñòâî îòðèöГ*òåëüГ*ûõ ýëåìåГ*òîâ Гў ñòîëáöГ*Гµ Г¬Г*òðèöû\n");
   for(j=0;j<n;j++)
      fprintf(f,"%8d",kol_min[j]);
   fprintf(f,"\n");
   max_el((float *)x,m,n,kol_min);
   fprintf(f,"\tÏðåîáðГ*çîâГ*Г*Г*Г*Гї Г¬Г*òðèöГ* x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   if(p=='f')fclose(f);
  }
/***********************************************************************/
/*ÔóГ*êöèÿ ââîäèò èñõîäГ*ûå Г¤Г*Г*Г*ûå Г± ГЄГ«Г*ГўГЁГ*òóðû èëè ГЁГ§ ГґГ*éëГ**/
/*Г‚ ГґГіГ*êöèþ ïåðåäГ*ГҐГІГ±Гї Г¬Г*òðèöГ* ГЄГ*ГЄ äâóìåðГ*ûé Г¬Г*Г±Г±ГЁГў. ÝëåìåГ*ГІГ» Г¬Г*òðèöû
  îáðГ*ГЎГ*òûâГ*ГѕГІГ±Гї Г± èñïîëüçîâГ*Г*ГЁГҐГ¬ ГЁГ*äåêñГ*ûõ âûðГ*æåГ*ГЁГ©*/
 void inputmatr(float x[][20],int *m,int *n,char c)
  {
   float xr;
   int  i,j,pr,ch;
   FILE *f; char p;
   clrscr();
   printf("Ââîä Г°Г*çìåðîâ ГЁ ýëåìåГ*òîâ Г¬Г*òðèöû %c\n",c);
   printf("\n\n      Г‚âåäèòå Г°Г*çìåðû Г¬Г*òðèöû m,n<=20\n ");
   /*Ïåðåä ââîäîì Г± ГЄГ«Г*ГўГЁГ*òóðû öåëåñîîáðГ*Г§Г*Г® î÷èñòèòü Г±ГЁГ±ГІГҐГ¬Г*ûé
     ГЎГіГґГҐГ° ГЄГ«Г*ГўГЁГ*òóðû*/
   /*while ((ch=scanf("%c",ch))!=0);getch()
     {ch=bioskey(0);
      putch(ch);
     }*/
   scanf("%d%d",m,n);
   printf(" Ââîä Г¬Г*òðèöû Г± ГЄГ«Г*ГўГЁГ*òóðû<k> èëè ГЁГ§ ГґГ*éëГ*<f>?\n");
   if(((p=getch())=='f')||(p=='F')||(p=='Г*')||(p=='ГЂ'))
    {
     p='f';
     if((f=fopen("matr.dat","rt"))==NULL)
      {
       printf("ÈñõîäГ*ûé ГґГ*éë Г*ГҐ Г*Г*éäåГ*\n Äëÿ âûõîäГ* Гў DOS Г*Г*æìèòå "
               "ëþáóþ ГЄГ«Г*ГўГЁГёГі");
       getch();
       exit(0);
      }
    }
     else f=stdin;
   if(p!='f')printf("Ââåäèòå ýëåìåГ*ГІГ» Г¬Г*òðèöû\n");
   for(i=0;i<*m;i++)
    for(j=0;j<*n;j++)
     {
      pr=fscanf(f,"%f",&xr);
      if(pr<=0)
       {
        if(pr==EOF)
         printf("ГЋГЎГ*Г*ðóæåГ* ГЄГ®Г*ГҐГ¶ ГґГ*éëГ*\n");
        else
         printf("ГЋГёГЁГЎГЄГ* Г·ГІГҐГ*ГЁГї %s \n",(p=='f')?"ГЁГ§ ГґГ*éëГ*":"Г± ГЄГ«Г*ГўГЁГ*òóðû");
        printf("Äëÿ âûõîäГ* Гў DOS Г*Г*æìèòå ëþáóþ ГЄГ«Г*ГўГЁГёГі");
        getch();
        exit(0);
       }
      else x[i][j]=xr;
     }
   if(p=='f')fclose(f);
  }
n_zheka
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
27.05.2010, 14:46  [ТС]     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #7
При компиляции выдало 3 ошибки
1.
Error: noname00.cpp(48,18):Undefined symbol 'mas'
C
1
if (mas[i][j] < 0)
2.
Error: noname00.cpp(85,12):Cannot convert 'int' to 'int *'
C
1
kol_min=num_neg(x,m,n);
3.
Error: noname00.cpp(90,11):Call to undefined function 'max_el'
C
1
max_el((float *)x,m,n,kol_min);
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
27.05.2010, 16:21     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #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
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#include<stdio.h> /*Модуль функций стандартного ввода-вывода*/
#include<process.h>
#include<bios.h>
#include<alloc.h>/*Модуль функций работы с динамической памятью*/
#include<conio.h> /*Модуль функций расширения ввода-вывода(в Паскале
                    аналогичный модуль CRT)*/
/*Предварительное описание используемых в программе функций*/
 void inputmatr(float x[][20],int *m,int *n,char c);
 void outputmatr(float x[][20],int m,int n);
 int num_neg(float x[][20],int m,int n);
/*************************************************************************/
/*Главная программа(функция) включает вызовы функций ввода, вывода и
  обработки матрицы*/
 
 void main()
  {
   float x[20][20];
   int  mx, my;
   /*Матрица Х располагается в стеке, для матрицы А место выделяется
     в куче. Обработка матриц выполняется общими процедурами*/
   clrscr();
   remove("rez.dat");/*удаление файла результатов, если он имеется в текущем
   директории*/
   inputmatr(x,&mx,&my,'x');
   clrscr();
   printf("Вывод результатов обработки матрицы х\n");
   outputmatr(x,mx,my);
   printf("\n\n         Для выхода нажмите любую клавишу ");
   getch();/*Ввод символа с клавиатуры без эха на экране. */
  }
 
 
/***************************************************************/
/*Функция возврвщает количество столбцов матрицы,
               содержащие отрицательные элементы.*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 int num_neg(float x[][20],int m,int n)
  {
   int count = 0;
   int i,j;
 
   for ( j = 0; j < n; i++)
   {
      for (i = 0; i < m; i++)
      {
         if (x[i][j] < 0)
         {
            count++;
            break;
         }
      }
   }
   return count;
  }
/***************************************************************************/
/*Функция обеспечивает вывод результатов программы на экран или в файл*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 void outputmatr(float x[][20],int m,int n)
  {int i,p,j;
   FILE *f;
   printf("\n Вывод матрицы на экран<s> или в файл<f>?\n\n");
   if(((p=getch())=='f')||(p=='F')||(p=='а')||(p=='А'))
    {
     p='f';/*Переменная запоминает направление вывода*/
     if((f=fopen("rez.dat","at"))==NULL)/*Открытие файла в текстовом режиме
       для записи в конец файла*/
      {
       printf("Невозможно открыть файл для результатов\n"
           " Для выхода в DOS нажмите любую клавишу\n");
       getch();
       exit(0);
      }
    }
     else f=stdout;
   fprintf(f,"\tИсходная матрица x\n");
   for(i=0;i<m;i++)
    {
     for(j=0;j<n;j++)
      fprintf(f,"%8.2f",x[i][j]);
     fprintf(f,"\n");
    }
   fprintf(f,"Количество столбцов с отрицательными элементами %i\n", num_neg(x,m,n));
   if(p=='f')fclose(f);
  }
/***********************************************************************/
/*Функция вводит исходные данные с клавиатуры или из файла*/
/*В функцию передается матрица как двумерный массив. Элементы матрицы
  обрабатываются с использованием индексных выражений*/
 void inputmatr(float x[][20],int *m,int *n,char c)
  {
   float xr;
   int  i,j,pr,ch;
   FILE *f; char p;
   clrscr();
   printf("Ввод размеров и элементов матрицы %c\n",c);
   printf("\n\n      Введите размеры матрицы m,n<=20\n ");
   /*Перед вводом с клавиатуры целесообразно очистить системный
     буфер клавиатуры*/
   /*while ((ch=scanf("%c",ch))!=0);getch()
     {ch=bioskey(0);
      putch(ch);
     }*/
   scanf("%d%d",m,n);
   printf(" Ввод матрицы с клавиатуры<k> или из файла<f>?\n");
   if(((p=getch())=='f')||(p=='F')||(p=='а')||(p=='А'))
    {
     p='f';
     if((f=fopen("matr.dat","rt"))==NULL)
      {
       printf("Исходный файл не найден\n Для выхода в DOS нажмите "
               "любую клавишу");
       getch();
       exit(0);
      }
    }
     else f=stdin;
   if(p!='f')printf("Введите элементы матрицы\n");
   for(i=0;i<*m;i++)
    for(j=0;j<*n;j++)
     {
      pr=fscanf(f,"%f",&xr);
      if(pr<=0)
       {
        if(pr==EOF)
         printf("Обнаружен конец файла\n");
        else
         printf("Ошибка чтения %s \n",(p=='f')?"из файла":"с клавиатуры");
        printf("Для выхода в DOS нажмите любую клавишу");
        getch();
        exit(0);
       }
      else x[i][j]=xr;
     }
   if(p=='f')fclose(f);
  }
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9382 / 5432 / 916
Регистрация: 25.07.2009
Сообщений: 10,428
27.05.2010, 16:32     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #9
Цитата Сообщение от n_zheka Посмотреть сообщение
C
1
2
3
#include<process.h> 
#include<bios.h> 
#include<alloc.h>
это точно не понадобится...
n_zheka
0 / 0 / 0
Регистрация: 25.05.2010
Сообщений: 19
28.05.2010, 10:28  [ТС]     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #10
kazak,
easybudda
Спасибо, после компиляции ошибок нет, ввод матрицы проходит нормально, а вот в выводе нет:
Количество столбцов с отрицательными элементами и
Для выхода нажмите любую клавишу
Появляется просто исходная матрица, помогите пожалуйста.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.05.2010, 11:22     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы.
Еще ссылки по теме:

C++ Вывести номера столбцов матрицы, содержащих только отрицательные элементы (Pascal -> C++)
C++ Найти количество столбцов, содержащих только отрицательные элементы
C++ В прямоугольной матрице определить количество столбцов, содержащих хотя бы один нулевой элемент
C++ Вывести номера столбцов, содержащих только отрицательные элементы.
Вывести номера столбцов, содержащих только отрицательные элементы C++

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

Или воспользуйтесь поиском по форуму:
kazak
 Аватар для kazak
3029 / 2350 / 155
Регистрация: 11.03.2009
Сообщений: 5,401
28.05.2010, 11:22     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы. #11
43 строка for ( j = 0; j < n; i++) исправить на for ( j = 0; j < n; j++)
Yandex
Объявления
28.05.2010, 11:22     В прямоугольной матрице подсчитать количество столбцов, содержащих отрицательные элементы.
Ответ Создать тему
Опции темы

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