Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RFpro.ru: Программирование на C / C++


Хостинг портала RFpro.ru:
Московский хостер
Профессиональный платный хостинг на базе Windows 2008

РАССЫЛКИ ПОРТАЛА RFPRO.RU

Чемпионы рейтинга экспертов в этой рассылке

_Ayl_
Статус: Студент
Рейтинг: 1368
∙ повысить рейтинг »
Boriss
Статус: Академик
Рейтинг: 830
∙ повысить рейтинг »
Micren
Статус: Бакалавр
Рейтинг: 829
∙ повысить рейтинг »

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / C/C++

Номер выпуска:1398
Дата выхода:07.10.2009, 19:30
Администратор рассылки:Dr_Andrew, Модератор
Подписчиков / экспертов:639 / 166
Вопросов / ответов:1 / 2
IRC-канал по теме:#C

Вопрос № 172833: Здравствуйте, не могу решить задачу. Надо на С++ Написать программу. Вот задание: Дана прямоугольная матрица А(n,m) Найти сумму элементов строки и столбца , на пересечении которой расположен максимум элементов матрицы А Нахождение ...



Вопрос № 172833:

Здравствуйте, не могу решить задачу. Надо на С++ Написать программу.
Вот задание:

Дана прямоугольная матрица А(n,m) Найти сумму элементов строки и столбца ,
на пересечении которой расположен максимум элементов матрицы А
Нахождение номера строки и столбца на пересечении которых находиться
максимальный элемент матрицы А

Я попробовал сделать так:

Код:

#include <stdlib.h>
#include <conio.h>
#include <stdio.h>

void main()
{
int i, j, sum, im, jm;
int s1,s2,s3,s4,s5,s6,s7,s8,s9,s10;
int s11,s12,s13,s14,s15,s16,s17,s18,s19,s20;
int s21,s22,s23,s24,s25,s26,s27,s28,s29,s30;
int s31,s32,s33,s34,s35,s36,s37,s38,s39,s40;
int s41,s42,s43,s44,s45,s46,s47,s48,s49,s50;
int A [5][10];
im=1;
jm=1;
//vvodim matricu
printf("Vvedite matricu 5x10:\n");
scanf("%d",&s1);
scanf("%d",&s2);
scanf("%d",&s3);
scanf("%d",&s4);
scanf("%d",&s5);
scanf("%d",&s6);
scanf("%d",&s7);
scanf("%d",&s8);
scanf("%d",&s9);
scanf("%d",&s10);
printf("\n");
scanf("%d",&s11);
scanf("%d",&s12);
scanf("%d",&s13);
scanf("%d",&s14);
scanf("%d",&s15);
scanf("%d",&s16);
scanf("%d",&s17);
scanf("%d",&s18);
scanf("%d",&s19);
scanf("%d",&s20);
printf("\n");
scanf("%d",&s21);
scanf("%d",&s22);
scanf("%d",&s23);
scanf("%d",&s24);
scanf("%d",&s25);
scanf("%d",&s26);
scanf(& quot;%d",&s27);
scanf("%d",&s28);
scanf("%d",&s29);
scanf("%d",&s30);
printf("\n");
scanf("%d",&s31);
scanf("%d",&s32);
scanf("%d",&s33);
scanf("%d",&s34);
scanf("%d",&s35);
scanf("%d",&s36);
scanf("%d",&s37);
scanf("%d",&s38);
scanf("%d",&s39);
scanf("%d",&s40);
printf("\n");
scanf("%d",&s41);
scanf("%d",&s42);
scanf("%d",&s43);
scanf("%d",&s44);
scanf("%d",&s45);
scanf("%d",&s46);
scanf("%d",&s47);
scanf("%d",&s48);
scanf("%d",&s49);
scanf("%d",&s50);
A[0][0]=s1;
A[0][1]=s2;
A[0][2]=s3;
A[0][3]=s4;
A[0][4]=s5;
A[0][5]=s6;
A[0][6]=s7;
A[0][7]=s8;
A[0][8]=s9;
A[0][9]=s10;
A[1][0]=s11 ;
A[1][1]=s12;
A[1][2]=s13;
A[1][3]=s14;
A[1][4]=s15;
A[1][5]=s16;
A[1][6]=s17;
A[1][7]=s18;
A[1][8]=s19;
A[1][9]=s20;
A[2][0]=s21;
A[2][1]=s22;
A[2][2]=s23;
A[2][3]=s24;
A[2][4]=s25;
A[2][5]=s26;
A[2][6]=s27;
A[2][7]=s28;
A[2][8]=s29;
A[2][9]=s30;
A[3][0]=s31;
A[3][1]=s32;
A[3][2]=s33;
A[3][3]=s34;
A[3][4]=s35;
A[3][5]=s36;
A[3][6]=s37;
A[3][7]=s38;
A[3][8]=s39;
A[3][9]=s40;
A[4][0]=s41;
A[4][1]=s42;
A[4][2]=s43;
A[4][3]=s44;
A[4][4]=s45;
A[4][5]=s46;
A[4][6]=s47;
A[4][7]=s48;
A[4][8]=s49;
A[4][9]=s50;

//Nahodim maximum
for(i=1; j<=4; i++)
{
for(j=1; j<=9; j++)
{
if(A[i][j] > A[im][jm])
{
im=i;
jm=j;
}
}
}

//nahodim summu
sum=0;
for(i=1; i<4; i++)
{
sum=sum+A[i][jm];
}

for(j=1; j<10; j++)
{
sum= sum + A[im][j];
}
printf("MAXIMUM = ");
printf("%d", &A[im][jm]);
printf("SUMMA = ");
pr intf("%d", &sum);
getch();
}

Ничего не получилось программа не считает, выдаёт всегда одно и тоже число. Видимо куча ошибок, а я понять ничего не могу.
Помогите разобраться.

Отправлен: 02.10.2009, 19:19
Вопрос задал: Грибанов Фёдор, Посетитель
Всего ответов: 2
Страница вопроса »


Отвечает Boriss, Академик :
Здравствуйте, Грибанов Фёдор.
Вот посмотрите мой не самый сложный вариант в приложении.
Пример окна программы:
Код:
Введите элементы массива:
Ряд 1: Введите 5 чисел через пробел и нажмите ENTER:
1 2 3 4 5
Ряд 2: Введите 5 чисел через пробел и нажмите ENTER:
2 45 2 -3 7
Ряд 3: Введите 5 чисел через пробел и нажмите ENTER:
4 5 6 7 8
Ряд 4: Введите 5 чисел через пробел и нажмите ENTER:
12 3 4 5 6
Ряд 5: Введите 5 чисел через пробел и нажмите ENTER:
1 2 3 4 5
Массив
1 2 3 4 5
2 45 2 -3 7
4 5 6 7 8
12 3 4 5 6
1 2 3 4 5
Максимальный элемент находится в 2 строке и в 2 колонке
Сумма элементов 65.

Нажмите любую клавишу...

Приложение:

-----
Вывод - то место в тексте, где вы устали думать

Ответ отправил: Boriss, Академик
Ответ отправлен: 02.10.2009, 21:10

Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254936 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!
    Отвечает Micren, Бакалавр :
    Здравствуйте, Грибанов Фёдор.
    Программа. MS VS 2008.

    Код:

    #include <limits>
    #include <iostream>
    #include <iomanip>
    #include <valarray>
    #include <string>

    using namespace std;

    typedef double itemTy;
    typedef valarray<valarray<itemTy> > matrixTy;

    template<class T>
    T input(const string& msg)
    {
    while(true)
    {
    T res;
    cout<<msg;
    cin>>res;
    if(cin.fail())
    {
    cin.clear();
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
    cout<<"Ошибка!"<<endl;
    }
    else
    {
    cin.ignore(numeric_limits<streamsize>::max(),'\n');
    return res;
    }
    }
    }

    // Ввод матрицы
    void inputMatrix(matrixTy& matrix)
    {
    cout<<"Вводите элементы матрицы:"<<endl;
    for(size_t i=0;i<matrix.size();++i)
    {
    valarray<itemTy>& row=matrix[i];
    for(size_t j=0;j<row.size();++j)
    {
    cout<<'['<<i<<"]["<<j<<"]:";
    row[j]=input<itemTy>("");
    }
    }
    }

    // Решение задачи
    itemTy solve(const matrixTy& matrix,size_t& max_row,size_t& max_col)
    {
    // Поиск позиции максимального элемента
    max_row=max_col=0;
    itemTy max=matrix[0][0];
    for(size_t i=0;i<matrix.size();++i)
    {
    valarray<itemTy>& row=matrix[i];
    for(size_t j=0;j<row.size();++j)
    {
    if(row[j]>max)
    {
    max=row[j];
    max_row=i;
    max_col=j;
    }
    }
    }
    // Суммирование
    itemTy sum=-max;
    for(size_t i=0;i<matrix.size();++i)
    {
    sum+=matrix [i][max_col];
    }
    valarray<itemTy>& row=matrix[max_row];
    for(size_t i=0;i<row.size();++i)
    {
    sum+=row[i];
    }
    return sum;
    }

    ostream& operator<<(ostream& stream,const matrixTy& matrix)
    {
    for(size_t i=0;i<matrix.size();++i)
    {
    valarray<itemTy>& row=matrix[i];
    for(size_t j=0;j<row.size();++j)
    {
    cout<<setw(7)<<row[j]<<' ';
    }
    cout<<endl;
    }

    return stream;
    }

    int main()
    {
    setlocale(LC_ALL,"russian");
    // Ввод размерностей матрицы
    size_t rows=input<size_t>("Введите количество строк матрицы:");
    size_t cols=input<size_t>("Введите количество столбцов матрицы:");
    // Матрица
    matrixTy matrix(valarray<itemTy>(cols),rows);
    // Ввод матрицы
    inputMatrix(matrix);
    // Распечатаем ее
    cout<<"Исходная матрица:"<<endl<<matrix<< ;endl;
    // Решение задачи
    size_t max_row,max_col;
    itemTy result=solve(matrix,max_row,max_col);
    // Вывод результата
    cout<<"Максимальный элемент matrix["<<max_row<<"]["<<max_col<<"]="<<matrix[max_row][max_col]<<endl
    <<"Сумма: "<<result<<endl;
    system("PAUSE");
    return 0;
    }

    Пример работы:
    Код:

    Введите количество строк матрицы:3
    Введите количество столбцов матрицы:4
    Вводите элементы матрицы:
    [0][0]:2
    [0][1]:3
    [0][2]:5
    [0][3]:3
    [1][0]:7
    [1][1]:3
    [1][2]:2
    [1][3]:5
    [2][0]:9
    [2][1]:3
    [2][2]:2
    [2][3]:4
    Исходная матрица:
    2 3 5 3
    7 3 2 5
    9 3 2 4

    Максимальный элемент matrix[2][0]=9
    Сумма: 27

    Ответ отправил: Micren, Бакалавр
    Ответ отправлен: 02.10.2009, 23:01

    Как сказать этому эксперту "спасибо"?
  • Отправить SMS #thank 254938 на номер 1151 (Россия) | Еще номера »
  • Отправить WebMoney:
  • Вам помогли? Пожалуйста, поблагодарите эксперта за это!


    Оценить выпуск »
    Нам очень важно Ваше мнение об этом выпуске рассылки!

    Задать вопрос экспертам этой рассылки »

    Скажите "спасибо" эксперту, который помог Вам!

    Отправьте СМС-сообщение с тестом #thank НОМЕР_ОТВЕТА
    на короткий номер 1151 (Россия)

    Номер ответа и конкретный текст СМС указан внизу каждого ответа.

    Полный список номеров »

    * Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи. (полный список тарифов)
    ** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
    *** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.


    © 2001-2009, Портал RFpro.ru, Россия
    Авторское право: ООО "Мастер-Эксперт Про"
    Автор: Калашников О.А. | Программирование: Гладенюк А.Г.
    Хостинг: Компания "Московский хостер"
    Версия системы: 2009.6.9 от 25.09.2009

    В избранное