• B правой части каждого сообщения есть стрелки и . Не стесняйтесь оценивать ответы. Чтобы автору вопроса закрыть свой тикет, надо выбрать лучший ответ. Просто нажмите значок в правой части сообщения.

Вещественные массивы

  • Автор темы ilya1989
  • Дата начала
Статус
Закрыто для дальнейших ответов.
I

ilya1989

Вариант 1 Даны вещественные массивы A[3][5], V[3][5]. Для каждого
массива опpеделить номеp столбца с наибольшим
количеством положительных элементов.



C++:
#include <iostream.h>
#include <conio.h>
#define I 3
#define J 5

void InputMas(float [I][J],char);
int RashetMas(float [I][J]);
void PrintMas(float [I][J],char ,int );
void main()
{
float A[I][J],V[I][J];
float num_stolbets_A;
float num_stolbets_V;
InputMas(A,'A');
num_stolbets_A=RashetMas(A);
//InputMas(V,'V');
//num_stolbets_V=RashetMas(V);
PrintMas(A,'A',num_stolbets_A);
//PrintMas(V,'V',num_stolbets_V);
getch();
}

void InputMas(float a[I][J],char name)
{
cout<<"-----------------------------------------------------------------------\n";
int i,j;
for(j=0;j<J;j++)
for(i=0;i<I;i++)
{
cout<<"Vvedite znacheniye s plavaytshey tochkoy v massiv "<<name<<"["<<j<<"]"
"["<<i<<"] = ";
cin>>a[i][j];
}
}

int RashetMas(float a[I][J])//Вот в этой функции вся загвоздка!!!
{
int j,kol[J];
int j_max=0;
for(j=0;j<J;j++)
{
for(int i=0;i<I;i++)
{
if(a[i][j]>0)
{
kol[j]++;
if(kol[j]==1)
{
j_max=j;
}
if(kol[j]>j_max)
{
j_max=j;
}
}
}
}
return j_max;
}

void PrintMas(float a[I][J],char name,int c)
{
cout<<"\nRESULTS\n";
cout<<"----------------------------------------------------------------------\n";
cout<<"Massiv "<<name<<" :\n";
for(int i=0;i<I;i++)
{
cout<<"\n";
for(int j=0;j<J;j++)
{
cout<<a[i][j]<<"\t";
}
cout<<"\n";
}
cout<<"\nNomer stolbtsa s maksimal kollitchestvom elem " <<c<<"\n";
}
Программа неверно выдаёт в конце номер столбца!Всем буду очень признателен!)
Программирование совсем тяжело даётся(
 
A

acorn

C++:
if(kol[j]==1)
{
j_max=j;
}
if(kol[j]>j_max)
{
j_max=j;
}
логика у вас... вот тут проблема у вас, не буду говорить в чём, попробуйте догадаться.

Добавлено: да и не в том месте эта проверка... скопируйте код еще раз, чтоб табуляция сохранилась, а то ниче не понятно.
 
H

hosm

cout<<"Vvedite znacheniye s plavaytshey tochkoy v massiv "<<name<<"["<<j<<"]" "["<<i<<"] = "; cin>>a[j];

выводите подсказку j, i, а считываете в a[j]; - в этом есть смысл?

Добавлено: Acorn
та там вроде вообще kol[j] как массив не надо. хранить просто максимальное кол-во и индекс столбца... Хотя, если несколько столбцов с одинаковым количеством положительных будет - тогда да, надо.
 
H

hosm

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

ilya1989

Acorn,я как бы в кусе,что проблема в этом....спасибо за коментарий....вы ж наверное,понимаете,что я не так просто сюда пришёл....в программировании я начинающий....а обучаюсь я по форме дистанционного обучения,где толком ничему не учат,а лишь указывают на косяки студентов...
 
L

lazybiz

Ну прям завалили парнишку вопросами. Видно что он что-то пытается но у него не выходит...
ilya1989 в твоей копаться не стал, читать невозможно... Вот посмотри:
C++:
/*
** Даны вещественные массивы A[3][5], V[3][5]. Для каждого
** массива опpеделить номеp столбца с наибольшим
** количеством положительных элементов.
*/

#include <iostream.h>

#define		I	3
#define		J	5

void input_array( float a[I][J] )
{
for ( int i = 0; i < I; i++ )
for ( int j = 0; j < J; j++ ) {
cout << "[" << i << "][" << j << "]: ", cin >> a[i][j];
}
}

void find_column( float a[I][J] )
{
int	i, j;
int num = 0;
int max_n = 0;
int max_j = 0;
for ( j = 0; j < J; j++ ) {
for ( i = 0, num = 0; i < I; i++ ) if ( a[i][j] > 0.0f ) num++;
if ( num > max_n ) {
max_n = num;
max_j = j;
}
}

cout << "j = " << max_j << endl;
}

int main()
{
float	A[I][J], V[I][J];

cout << "Input array A:" << endl;
input_array( A );
find_column( A );

//	cout << "Input array V:" << endl;
//	input_array( V );
//	find_column( V );

return 0;
}

Если что непонятно говори.
 
I

ilya1989

Ну прям завалили парнишку вопросами. Видно что он что-то пытается но у него не выходит...
ilya1989 в твоей копаться не стал, читать невозможно... Вот посмотри:
C++:
/*
** Даны вещественные массивы A[3][5], V[3][5]. Для каждого
** массива опpеделить номеp столбца с наибольшим
** количеством положительных элементов.
*/

#include <iostream.h>

#define		I	3
#define		J	5

void input_array( float a[I][J] )
{
for ( int i = 0; i < I; i++ )
for ( int j = 0; j < J; j++ ) {
cout << "[" << i << "][" << j << "]: ", cin >> a[i][j];
}
}

void find_column( float a[I][J] )
{
int	i, j;
int num = 0;
int max_n = 0;
int max_j = 0;
for ( j = 0; j < J; j++ ) {
for ( i = 0, num = 0; i < I; i++ ) if ( a[i][j] > 0.0f ) num++;
if ( num > max_n ) {
max_n = num;
max_j = j;
}
}

cout << "j = " << max_j << endl;
}

int main()
{
float	A[I][J], V[I][J];

cout << "Input array A:" << endl;
input_array( A );
find_column( A );

//	cout << "Input array V:" << endl;
//	input_array( V );
//	find_column( V );

return 0;
}

Если что непонятно говори.


А библиотеку math обязательно использовать?
 
A

acorn

Acorn,я как бы в кусе,что проблема в этом....спасибо за коментарий....вы ж наверное,понимаете,что я не так просто сюда пришёл....в программировании я начинающий....а обучаюсь я по форме дистанционного обучения,где толком ничему не учат,а лишь указывают на косяки студентов...
скопируйте код еще раз, чтоб табуляция сохранилась, а то ниче не понятно.
 
I

ilya1989

А библиотеку math обязательно использовать?


Просто ситуэйшн в том,что если мой препод увидит уже изменённую работу,то поймёт,что писал её не я....
Просто,мой препод,требует написания программ без всяких на то дополнительных библиотек типа math.h
 
I

ilya1989

ой)))извиняюсь)))уже глаза,видать,занимаются кое-чем))))
вопрос:а если ту,что я писал,как-то доработать или что-то добавить))))?
просто,мне б самому понять,как работает программа))))....а то я код написать-то написал,а как он работает,не совсем пойму....
к тому же,если вы обратите внимание,в написанном мною коде 3 функции,причём вторая идёт с возвратом значения...
 
L

lazybiz

Заменяй свои на эти:
C++:
void InputMas( float a[I][J], char name )
{
cout << "-----------------------------------------------------------------------\n";
int i,j;
for(i=0;i<I;i++)
for(j=0;j<J;j++) {
cout<<"Vvedite znacheniye s plavaytshey tochkoy v massiv "<<name<<"["<<i<<"]["<<j<<"] = ";
cin>>a[i][j];
}
}
C++:
int RashetMas( float a[I][J] )
{
int j,kol[J];
int j_max=0;
for(j=0;j<J;j++)
{
kol[j]=0;
for(int i=0;i<I;i++)
{
if(a[i][j]>0)
{
kol[j]++;
}
}
if(kol[j]>j_max)
{
j_max=j;
}
}
return j_max;
}
 
I

ilya1989

Заменяй свои на эти:
C++:
void InputMas( float a[I][J], char name )
{
cout << "-----------------------------------------------------------------------\n";
int i,j;
for(i=0;i<I;i++)
for(j=0;j<J;j++) {
cout<<"Vvedite znacheniye s plavaytshey tochkoy v massiv "<<name<<"["<<i<<"]["<<j<<"] = ";
cin>>a[i][j];
}
}
C++:
int RashetMas( float a[I][J] )
{
int j,kol[J];
int j_max=0;
for(j=0;j<J;j++)
{
kol[j]=0;
for(int i=0;i<I;i++)
{
if(a[i][j]>0)
{
kol[j]++;
}
}
if(kol[j]>j_max)
{
j_max=j;
}
}
return j_max;
}

ооо))))))спасибочки огромное))))вот))))теперь всё работает))))вот и получается,что просто нужно было изменить функцию расчёта))))я так понимаю,что в пинципе,был близок к той теории,которую подсказали мне Вы)))))спасибо Вам))))
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!