Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

найти минимум среди максимальных элементов столбцов матрицы c++

64K
05 декабря 2010 года
ssovec
3 / / 05.12.2010
дана матрица а[x][y]; найти минимум среди максимальных элементов столбцов
не работает по столбикам вылетает ошибка:confused:
Цитата:
int min = a[0][0];
for(int i = 0; i < n; ++i)
{
int max = a[0][j];
for(int j = 0; j < m; ++j)
if(a[j] > max)
max = a[j];
if(min < max)
min = max;
}
cout<<min;

392
05 декабря 2010 года
cronya
421 / / 03.01.2009
Цитата: ssovec
дана матрица а[x][y]; найти минимум среди максимальных элементов столбцов
не работает по столбикам вылетает ошибка:confused:


Вы написали полный бред:
1)давайте придерживаться общих стандартов

 
Код:
....
for(int i = 0; i < n; [COLOR="Red"]i++[/COLOR])
....
for(int j = 0; j < m; [COLOR="Red"]j++[/COLOR])
...


2)
 
Код:
int max = a[0][COLOR="Red"][j][/COLOR];

Здесь у вас j не определена, поэтому ошибка инициализации переменной
 
Код:
for(int j = 0; j < m;j++)

а здесь уже инициализирована
Код:
....
int max=0;
for(int j = 0; j < m; j++)
{
max = a[0][j];
for(int i = 0; i < n; i++)
{
  if(a[j] > max)
  max = a[j];
  ......
}
....
}

так наверно правильней, тем более, что объявление переменных в циклах не есть хорошо
64K
05 декабря 2010 года
ssovec
3 / / 05.12.2010
вот специально в си перевел выдаёт 5 а должно выдавать 2 с индексом а[2][0] компилятор не ругается
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
clrscr;
printf("nachalo massiva\n");
const x=3,y=3;
int i,j;
int a[x][y];
a[0][0]=1; a[0][1]=-3; a[0][2]=-2;
a[1][0]=0; a[1][1]=5;a[1][2]=4;
a[2][0]=2; a[2][1]=3; a[2][2]=2;
for (i=0;i<x;i++)
{
printf("\n");
for (j=0;j<y;j++)
printf("%i",a[j],"\n"); printf("\n");
}
printf("\end massiv\n");
int min,max;
min=a[0][0];//нахождение минимума среди максимумов в столбах
for (j=0;j<y;j++)
{
max=a[0][j];
for (i=0;i<x;i++)
{
if (a[j]>max)
max=a[j];
if (min<max)
min=max;
}
}
printf("%i",min,");

getch();


}
392
06 декабря 2010 года
cronya
421 / / 03.01.2009
Цитата: ssovec
вот специально в си перевел выдаёт 5 а должно выдавать 2 с индексом а[2][0] компилятор не ругается


Косяк в алгоритме самом, у вас он работает так:
1) 1 столбец максимальный =2, 2>1 минимальный=2
2) 2 столбец максимальный =5, 5>2 минимальный=5
3) 3 столбец максимальный =4, 4>5 минимальный=5
я бы советовал сделать еще 1 массив для максимальных, в нем искать минимальный, я бы сделал так:

Код:
#include<iostream>
#include<ctime>

using namespace std;

int main(int argc, char* argv[])
{
    srand((unsigned)time(NULL));
    int row=rand()%5+2;
    int column=rand()%5+2;
    int **arr=new int*[row];
    for(int idx=0;idx<row;idx++)
        arr[idx]=new int[column];
    for(int idx=0;idx<row;idx++)
        for(int jdx=0;jdx<column;jdx++)
            arr[idx][jdx]=rand()%10;
    cout<<"Matrix:"<<endl;
    for(int idx=0;idx<row;idx++)
    {
        for(int jdx=0;jdx<column;jdx++)
            cout<<arr[idx][jdx]<<"\t";
        cout<<endl;
    }
    int *mas=new int[column];
    int count=0, temp=0;
    cout<<"\nMaximums:"<<endl;
    for(int jdx=0;jdx<column;jdx++)
    {
        temp=arr[0][jdx];
        for(int idx=0;idx<row;idx++)
            if(arr[idx][jdx]>temp)temp=arr[idx][jdx];
        mas[count]=temp;
        count++;
       
    }
    temp=mas[0];
    for(int idx=0;idx<column;idx++)
    {
        cout<<mas[idx]<<"\t";
        if(mas[idx]<temp)temp=mas[idx];
    }
    cout<<"\nMinimum of column maximum = "<<temp;
    for(int idx=0;idx<row;idx++)
        delete arr[idx];
    delete []arr;
    delete []mas;
    cout<<endl;
    system("pause");
    return 0;
}
392
06 декабря 2010 года
cronya
421 / / 03.01.2009
Можно, конечно, и ваш код оптимизировать:
Код:
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>
void main()
{
clrscr;//видимо borland 3.0
printf("nachalo massiva\n");
const [COLOR="Red"]int[/COLOR] x=3,y=3;//тип то указывать надо
[COLOR="Red"]int i=0,j=0;[/COLOR]//желательно чтобы переменные равнялись чему-нибудь
//а можно и лучше так int a[x][y]={1,-3,-2,0,5,4,2,3,2};
int a[x][y];
a[0][0]=1; a[0][1]=-3; a[0][2]=-2;
a[1][0]=0; a[1][1]=5;a[1][2]=4;
a[2][0]=2; a[2][1]=3; a[2][2]=2;
for (i=0;i<x;i++)
{
printf("\n");
for (j=0;j<y;j++)
printf("%i",a[j],"\n"); printf("\n");
}
printf("end massiv\n");
[COLOR="Red"]int min=0,max=0;[/COLOR]
//поменять чуть-чуть и все работает :)
[COLOR="SeaGreen"]for (j=0;j<y;j++)
{
max=a[0][j];
for (i=0;i<x;i++)
if (a[j]>max)max=a[j];
if(j==0)min=max;//если это 1 макс вообще, запоминаем его для сравнения
else if(min>max)min=max;
}[/COLOR]
[COLOR="Red"]printf("%i",min);[/COLOR]//тут ошибка была
getch();
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог