Консультация № 110170
19.11.2007, 15:52
0.00 руб.
0 4 4
Помогите пожалуста с решением задачи ато я совсем непонимаю С++:
Даны вещественные массивы A[3][5],V[3][5].Для каждого массива определить номер столбца с наибольшим количеством положительных элементов.

Обсуждение

Неизвестный
19.11.2007, 21:30
общий
это ответ
Здравствуйте, Hikaru!
вот задача, написана на MVS 2003,если надо, то думаю вам не составит труда, перевести на более поздние с++;
ну если что обращайтесь
удачи!


Приложение:
#include "iostream"using namespace std;void main(void){ int A[3][5]={{-1,3,4,-6,2},{-1,-3,4,-6,1},{1,-3,4,-6,-4}},//Заводим два масива B[3][5]={{1,3,-4,-6,-2},{-1,-3,4,6,-1},{1,3,-4,6,4}};//как заводить не указано //поэтому решил так int ma=0,sa=-1,ca,mb=0,sb=-1,cb; //елементы m - это макс кол-во,s - номер столбца, c= кол-во текущей строки for(int x=0;x<5;x++) { ca=0;cb=0;//в начале обнуляем кол-во текущей строки for(int y=0;y<3;y++) { //считаем кол-во if(A[y][x]>=0)ca++; if(B[y][x]>=0)cb++; } //сравниваем с макс, если больше то записываем в макс кол-во и запоминаем номер стоки if(ca>ma){ma=ca;sa=x;} if(cb>mb){mb=cb;sb=x;} } //выводим результат cout<<"Naib col v col A: "<<ma<<" col# "<<sa<<"\n"; cout<<"Naib col v col B: "<<mb<<" col# "<<sb<<"\n"; cin.get();}
Неизвестный
19.11.2007, 23:20
общий
это ответ
Здравствуйте, Hikaru!

Держите!...

Что не понято - спрашивайте...

Приложение:
#include<iostream.h>#include<conio.h>void main(){float A[3][5],V[3][5];int cnt,max;int A_ind,V_ind;int i,j;clrscr();cout<<"Input elemebts of array A: ";for(i=0;i<3;i++) { for(j=0;j<5;j++) { gotoxy(j*6+1,i+2); cin>>A[i][j]; } }cout<<"Input elemebts of array V: ";for(i=0;i<3;i++) { for(j=0;j<5;j++) { gotoxy(j*6+1,i+6); cin>>V[i][j]; } }max=0;for(j=0;j<5;j++) { cnt=0; for(i=0;i<3;i++) { if(A[i][j]>0) { cnt++; } } if(cnt>max) { max=cnt; A_ind=j; } }max=0;for(j=0;j<5;j++) { cnt=0; for(i=0;i<3;i++) { if(V[i][j]>0) { cnt++; } } if(cnt>max) { max=cnt; V_ind=j; } }cout<<"\nV massive A "<<A_ind<<"-iy stolbec";cout<<"\nV massive V "<<V_ind<<"-iy stolbec";getch();}
Неизвестный
20.11.2007, 03:55
общий
это ответ
Здравствуйте, Hikaru!
Вот STL вариант решения вашей задачи...

Приложение:
#include <stdlib.h>#include <time.h>#include <vector>#include <algorithm>#include <iostream>using namespace std;typedef vector<vector<int> > matrix;int my_rand() { static const int r_limit = 100; return rand()%(r_limit*2) - r_limit;}int row_with_max_positive_elemnts(const matrix& m) { return 0;}int main(int argc, char* argv[]) { const int n = 4; const int m = 6; matrix A; matrix B; A.resize(n); B.resize(n); int i, j; for(i=0; i<n; i++) { A[i].resize(m); B[i].resize(m); } srand((unsigned) time(NULL)); for(i=0; i<n; i++) { generate(A[i].begin(), A[i].end(), my_rand); generate(B[i].begin(), B[i].end(), my_rand); } cout << "Array A:" << endl; for(i=0; i<n; i++) { for(j=0; j<m; j++) cout << A[i][j] << "\t"; cout << endl; } cout << endl << "Array B:" << endl; for(i=0; i<n; i++) { for(j=0; j<m; j++) cout << B[i][j] << "\t"; cout << endl; } vector<int> v; v.resize(m); for(i=0; i<m; i++) { v[i] = 0; for(j=0; j<n; j++) if(A[j][i] > 0) v[i]++; } cout << endl << "In array A column with index " << distance(v.begin(), max_element(v.begin(), v.end())) << " count of positive elements is maximum" << endl; for(i=0; i<m; i++) { v[i] = 0; for(j=0; j<n; j++) if(B[j][i] > 0) v[i]++; } cout << "In array B column with index " << distance(v.begin(), max_element(v.begin(), v.end())) << " count of positive elements is maximum" << endl; return 0;}
Неизвестный
20.11.2007, 06:17
общий
это ответ
Здравствуйте, Hikaru!
Вот программа, которая работает, НО. В связи с УСЛОВИЕМ программы он может работать не корректно, т.к. столбцов в массиве 5, а количество положительных элементов может принимать значения 0, 1, 2, 3 (т.е. 4 варианта), то обязательно должно совпадать количество (не обязательно максимальное). Поэтому выводиться на экран будет номер столбца с наибольшим количеством положительных элементов имеющий наибольший индекс (если будет более одного столбца).

Приложение:
#include <vcl.h>#include <conio.h>#include <stdio.h>#pragma hdrstop//---------------------------------------------------------------------------#pragma argsusedint main(int argc, char* argv[]){ float A[3][5] = {{1,1,-2,2,-4}, {1,-0,-1,-1,0}, {1,-1,-2,-4,5}}, KolA[5]={0}, V[3][5] = {0}, KolV[5]={0}; int MaxKolA=0, MaxKolV = 0, MaxA = 0, MaxV=0; for (int i = 0; i < 5; i++) { for (int k = 0; k < 3; k++) { if (A[k][i]>0) KolA[k] = KolA[k]+1; if (V[k][i]>0) KolV[k] = KolV[k]+1; } } for (int i = 0; i < 5; i++) { if (KolA[i]>MaxA) MaxKolA = i; if (KolV[i]>MaxV) MaxKolV = i; } printf("# столбца с масимальным количеством положительных чисел в массиве\n"); printf("A - %d\n", MaxKolA); printf("V - %d\n", MaxKolV); getch(); return 0;}
Форма ответа