Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Найти произведение 3-х наибольших элемен, Нужна помощь по решению данного примера 
:(
    Опции темы
necboss
Дата 22.3.2008, 19:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



Нужна помощь по решению данного примера

Найти произведение 3-х наибольших элементов матрицы А

user posted image

начало:

#include <stdio.h>
main()
{
int i,j, a[3][3],

}
PM MAIL   Вверх
korian
Дата 22.3.2008, 19:31 (ссылка) |    (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 1
Всего: 17



продолжение:
Код

int main()
{
    int i,j, a[3][3];
    for (i = 0; i < 3; ++i)
    {
        for (j = 0; j < 3; ++j)
        {
        }
    }
    return 0;
}

PM   Вверх
Optimus
Дата 22.3.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Цитата(korian @  22.3.2008,  19:31 Найти цитируемый пост)
продолжение:
smile 
Думаю что тему всё равно перенесут в Центр помощи,
так что вот код:
Код

int IsMaxValue(double *max, const int SizeOfMax, double value)
{
  for (int i = 0; i < SizeOfMax; ++i)
  {
    if (max[i] < value)
    {
     return 1;
    }
  }

  return 0;
}

void main()
{
  double a[3][3] = {{4.3, 6.4, 8.6},
                               {7.1, 4.3, 2},
                               {5.6, -7.3, 5.6}};
  const int SizeOfMax = 3;
  double max[SizeOfMax];
  int i;
  int j;

  for (j = 0 ; j < 3; ++j)
  {
    max[j] = a[0][0];
  }

  int k = 1;
  for (i = 0; i < 3; ++i)
    for (j = 0; j < 3; ++j)
    {
      if (IsMaxValue(max, 3, a[i][j]))
      {
        max[k] = a[i][j];
        ++k;
        k %= SizeOfMax;
      }
    }

  cout << max[0] << " * "
       << max[1] << " * "
       << max[2] << " = "
       << (max[0] * max[1] * max[2]);
}


Это сообщение отредактировал(а) Optimus - 22.3.2008, 20:30
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
archimed7592
Дата 22.3.2008, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: нет
Всего: 93



Для домашних заданий, курсовых, существует "Центр Помощи".

Тема перенесена! 


--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
necboss
Дата 23.3.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



спасиба
PM MAIL   Вверх
necboss
Дата 23.3.2008, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



Цитата(Optimus @ 22.3.2008,  20:28)
Цитата(korian @  22.3.2008,  19:31 Найти цитируемый пост)
продолжение:
smile 
Думаю что тему всё равно перенесут в Центр помощи,
так что вот код:
Код

int IsMaxValue(double *max, const int SizeOfMax, double value)
{
  for (int i = 0; i < SizeOfMax; ++i)
  {
    if (max[i] < value)
    {
     return 1;
    }
  }

  return 0;
}

void main()
{
  double a[3][3] = {{4.3, 6.4, 8.6},
                               {7.1, 4.3, 2},
                               {5.6, -7.3, 5.6}};
  const int SizeOfMax = 3;
  double max[SizeOfMax];
  int i;
  int j;

  for (j = 0 ; j < 3; ++j)
  {
    max[j] = a[0][0];
  }

  int k = 1;
  for (i = 0; i < 3; ++i)
    for (j = 0; j < 3; ++j)
    {
      if (IsMaxValue(max, 3, a[i][j]))
      {
        max[k] = a[i][j];
        ++k;
        k %= SizeOfMax;
      }
    }

  cout << max[0] << " * "
       << max[1] << " * "
       << max[2] << " = "
       << (max[0] * max[1] * max[2]);
}

выдает ошипку зесь:

cout << max[0] << " * "
PM MAIL   Вверх
Optimus
Дата 23.3.2008, 17:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Цитата(necboss @  23.3.2008,  16:33 Найти цитируемый пост)

выдает ошипку зесь:

cout << max[0] << " * " 

Что пишет ?
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
t_gran
Дата 24.3.2008, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 621
Регистрация: 13.11.2007
Где: г.Усть-Илимск

Репутация: 33
Всего: 37



necboss,  всегда пиши полностью ошибку + название компилятора.


--------------------
Я знаю, что ничего не знаю© Сократ
user posted image
PM MAIL WWW   Вверх
necboss
Дата 29.3.2008, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



user posted image


PM MAIL   Вверх
Optimus
Дата 29.3.2008, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Добавьте первой строкой:
Код

#include <iostream.h>

--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
opjox
Дата 29.3.2008, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 17.1.2008

Репутация: 11
Всего: 14



Замечу, что предложенный Optimus работает правильно на изначально требуемой матрице, но на других далеко не всегда правильно. 

Так если в [0][0] положить максимальный элемент, который больше хотя бы одного из двух других максимальных элементов, то все работает не правильно. Пример такой матрицы: 
Код

7.3  8.6  6.4
5.1  4.3  2
5.6 -7.3  5.6


Также непрвильно обрабатывается:
Код

4.3  8.6  6.4
5.1  4.3  2
5.6 -7.3  5.6


PM MAIL ICQ   Вверх
Optimus
Дата 29.3.2008, 17:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 186
Регистрация: 1.9.2007

Репутация: 9
Всего: 14



Извиняюсь, написал не проверив и без компилятора.
Код

#include <iostream.h>
#include <conio.h>

void TryInsertInMax(double *max, const int SizeOfMax, double value)
{
  for (int i = 0; i < SizeOfMax; ++i)
  {
    if (max[i] < value)
    {
      TryInsertInMax(max, SizeOfMax, max[i]);
      max[i] = value;
      return;
    }
  }
}

void main()
{
  clrscr();
  const int N = 3;
  const int M = 3;
  /*
  double a[N][M] = { {7.3,  8.6,  6.4},
             {5.1,  4.3, 2},
             {5.6, -7.3,  5.6} };
  */
  /*
  double a[N][M] = { {4.3,  8.6,  6.4},
             {5.1,  4.3,  2},
             {5.6, -7.3,  5.6} };
  */
  /*
  double a[N][M] = { {4.3,  8.6,  6.4, 7.9},
             {5.1,  4.3,  2, 3.4},
             {5.6, -7.3,  5.6, 9.7} };
  */
  /*
  double a[N][M] = { {4.7,  8.6},
             {5.1,  4.9} };
  */
  const int SizeOfMax = 3;
  double max[SizeOfMax];
  int i;
  int j;

  if (N * M < SizeOfMax)
  {
    cout << "Количество элементов матрицы 'a' меньше чем кол элем массива 'max'";
    getch();
    return;
  }

  int k = 0;
  for (i = 0; i < N && k < SizeOfMax; ++i)
    for (j = 0 ; j < M && k < SizeOfMax; ++j)
    {
      max[k] = a[i][j];
      ++k;
    }

  --i;
  for (; i < N; ++i)
  {
    for (; j < M; ++j)
    {
      TryInsertInMax(max, SizeOfMax, a[i][j]);
    }
    j = 0;
  }

  double proiz = 1.0;

  for (i = 0; i < SizeOfMax - 1; ++i)
  {
    proiz *= max[i];

    cout << max[i] << " * ";
  }

  proiz *= max[i];
  cout << max[i] << " = " << proiz;

  getch();
}

Теперь должно работать.
Не забудьте поменять N и M, если размерность не [3][3]

Это сообщение отредактировал(а) Optimus - 29.3.2008, 19:02
--------------------
"постановка задачи наполовину решает саму задачу"
PM MAIL   Вверх
necboss
Дата 4.4.2008, 20:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



user posted image
 smile 
PM MAIL   Вверх
opjox
Дата 5.4.2008, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 90
Регистрация: 17.1.2008

Репутация: 11
Всего: 14



У вас матрица А не объявлена. Раскомментируйте одну из кода, предложенного Optimus, не забыв выставить при этом нужные значения констант N и M.
PM MAIL ICQ   Вверх
necboss
Дата 5.4.2008, 19:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 22.3.2008

Репутация: нет
Всего: нет



user posted image

user posted image

 smile 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1202 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.