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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> нахождение максимального из повторяющихся элем. 
V
    Опции темы
LeD4eG
Дата 5.11.2010, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(mes @  5.11.2010,  15:23 Найти цитируемый пост)
а матрица у Вас из шортов или интов ? а для инта тоже будете в справочник заглядывать ?

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

Цитата(mes @  5.11.2010,  15:50 Найти цитируемый пост)
не совсем.. если flag == false просто ищете парное значение
если труе, то ищете только для тех, что превышают макс. 

вот этого я вообще не понял.

--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
mes
Дата 5.11.2010, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(LeD4eG @  5.11.2010,  15:22 Найти цитируемый пост)
вот этого я вообще не понял.

вот условным кодом для линейного ряда
Код

bool flag = false;
for (size_t i =0; i<size; ++i)
  if (flag && m[i] <= max) continue;
  else 
  for (size_t j=i+1; j<size; ++j)
    if (m[i] == m[j]) 
    {
       flag = true;
       max = m[j]; 
       break;
    }
if (flag)  std::cout << "max is " <<  max;
else       std::cout << "unsolvable";

если ошибок нет, то  нужно только "удвоить" цикл для прохождения матрицы..


 

Это сообщение отредактировал(а) mes - 6.11.2010, 17:26


--------------------
PM MAIL WWW   Вверх
LeD4eG
Дата 5.11.2010, 23:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



mes, я не понял зачем вообще нужен этот флаг в данной задаче?можете по-подробнее пояснить?

и ещё один вопрос: оператор И требует совместной истинности обоих операндов....т.е. и flag ==true и  (m[i]<=max) == true,чтобы выполнилось continue....но в коде нет момента изменения значения flag. эта ветка не будет выполняться...тогда зачем она?
--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
mes
Дата 5.11.2010, 23:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(LeD4eG @  5.11.2010,  22:16 Найти цитируемый пост)
....но в коде нет момента изменения значения flag

 smile, подправил

Цитата(LeD4eG @  5.11.2010,  22:16 Найти цитируемый пост)
 зачем вообще нужен этот флаг

флаг устанавливается если есть хотя бы одна пара..т.е. логиская замена вашему "65536/2"
т.е. вначале ищется значение, которое имеет пару и оно присваивается мах..
а как найдена, то пара ищется среди значений больше max.. 




--------------------
PM MAIL WWW   Вверх
LeD4eG
Дата 6.11.2010, 14:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



всё, я понял. я думаю на этом задачу можно считать решённой. спасибо всем!

Это сообщение отредактировал(а) LeD4eG - 6.11.2010, 14:36
--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
Dov
Дата 6.11.2010, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(LeD4eG @  6.11.2010,  13:36 Найти цитируемый пост)
всё, я понял. я думаю на этом задачу можно считать решённой. спасибо всем!

LeD4eG, ну так покажи свой окончательный вариант.  smile
  Интересно же посмотреть на результаты трёхстраничной дискуссии...  smile 



з.ы. А если, всё-таки, есть какие-то затруднения, так скажи, не стесняйся. Поможем, если что...  smile  


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
LeD4eG
Дата 6.11.2010, 15:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



как-то вот так у меня получилось:
Код

#include<iostream>
#include<iomanip>
#include<windows.h>
using namespace std;
char* Rus(const char* text);
int main(){
    int i,j,nrow,ncol;
    cout<<Rus("Введите количество строк и столбцов: ")<<endl;
    cin>>nrow>>ncol;
    int **a=new int *[nrow];
    for(i=0;i<nrow;i++) a[i]=new int [ncol];
    cout<<Rus("Введите элементы массива: ")<<endl;
    for(i=0;i<nrow;i++)
        for(j=0;j<ncol;j++) cin>>a[i][j];
    cout<<"\n";
    cout<<Rus("Вы ввели: ")<<endl;
    for(i=0;i<nrow;i++){
        for(j=0;j<ncol;j++) cout<<setw(4)<<a[i][j]<<' ';
        cout<<endl;
    }
    cout<<"------------------------\n";
    int max=-32767;
    bool flag_pov=false;
    int imax,jmax;
    for(i=0;i<nrow;i++){
        for(j=0;j<ncol;j++){
            if(flag_pov&&a[i][j]<=max) continue;
            else
                for(int i1=i;i1<nrow;i1++){
                    for(int j1=j;j1<ncol;j1++){
                        if((a[i][j]==a[i1][j1])&&(i!=i1)&&(j!=j1)){
                            flag_pov=true;
                            max=a[i][j];
                            imax=i;
                            jmax=j;
                            break;
                        }
                    }
                }
        }
    }
    if(flag_pov) cout<<Rus("Максимальный  элемент из повторяющихся равен: ")<<a[imax][jmax]<<endl;
    else cout<<Rus("Повторяющихся элементов в массиве нет.")<<endl;
    return 0;
}
char bufRus[256];
char* Rus(const char* text){
    CharToOem(text,bufRus);
    return bufRus;
}


она бесконтрольная вышла.....в код смотришь - всё логично, а вот результаты поражают....программа находит и повторяющиеся и пишет нужное, если таковых не находит, НО! если вводить например 12 12 12 12 9 9 9 9 1 2 3 4 (для матрицы 3х4)...повторяющихся элементов нет...

Это сообщение отредактировал(а) LeD4eG - 6.11.2010, 16:34
--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
Dov
Дата 6.11.2010, 17:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



LeD4eG, попробуй так:
Код
char *    Rus(const char * text);

int main()
{
    srand((unsigned) time(NULL));

    int    i, j, nrow, ncol;
    cout << Rus("Введите количество строк и столбцов: ") << endl;
    //    cin>>nrow>>ncol;
    nrow = rand() % 3 + 2;
    ncol = rand() % 3 + 2;

    int **    a    = new int *[nrow];
    for(i = 0; i < nrow; i++)
    {
        a[i] = new int [ncol];
    }
    cout << Rus("Введите элементы массива:\n");
    //   for(i=0;i<nrow;i++)
    //       for(j=0;j<ncol;j++)
    //           cin>>a[i][j];
    //     cout<<"\n";
    for(int i = 0; i < nrow; i++)
        for(int j = 0; j < ncol; j++)
            a[i][j] = rand() % 20 + 1;

    cout << Rus("Вы ввели:\n");
    for(i = 0; i < nrow; i++)
    {
        for(j = 0; j < ncol; j++)
            cout << setw(4) << a[i][j] << ' ';
        cout << endl;
    }
    cout << "------------------------\n";
    int    max    = INT_MIN;
    bool    flag_pov    = false;

    for(i = 0; i < nrow; i++)
    {
        for(j = 0; j < ncol; j++)
        {
            if(a[i][j] > max)
            {
                int    found    = -1;
                for(int k = 0; k < nrow && (found <= 0); k++)
                    for(int h = 0; h < ncol && (found <= 0); h++)
                        if(a[k][h] == a[i][j])
                            found++;

                if(found > 0)
                {
                    max      = a[i][j];
                    flag_pov = true;
                }
            }
        }
    }
    if(flag_pov)
    {
        cout << Rus("Максимальный  элемент из повторяющихся равен: ") << max << endl;
    }
    else
    {
        cout << Rus("Повторяющихся элементов в массиве нет.") << endl;
    }

    return 0;
}
char    bufRus[256];
char * Rus(const char * text)
{
    CharToOem(text, bufRus);
    return bufRus;
}


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

Это сообщение отредактировал(а) Dov - 6.11.2010, 17:44


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 6.11.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(LeD4eG @  6.11.2010,  14:51 Найти цитируемый пост)
 for(int i1=i;i1<nrow;i1++){
                    for(int j1=j;j1<ncol;j1++){

тут явно не правильно.. 



--------------------
PM MAIL WWW   Вверх
mes
Дата 6.11.2010, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



ловите, тестируйте и допиливайте :
http://liveworkspace.org/code/309dcd1e1636...2910efb2a27cc52

Это сообщение отредактировал(а) mes - 6.11.2010, 22:53


--------------------
PM MAIL WWW   Вверх
Dov
Дата 6.11.2010, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



подредактировал, убрал лишний цикл. 


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
mes
Дата 6.11.2010, 17:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



P.S.
Код

size_t jx=(jy==iy)? (ix+1) : 0

если в том же ряду что и первое значение, то стартуем со следующей после него позиции, иначе с нулевой..


--------------------
PM MAIL WWW   Вверх
LeD4eG
Дата 6.11.2010, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Dov, а, если found будет больше нуля, то эти циклы выполняться не будут ведь. то есть в bool результат преобразуется. я правильно понял?
mes, твой код я тоже проработал, спасибо smile 

Это сообщение отредактировал(а) LeD4eG - 6.11.2010, 23:42
--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
Dov
Дата 7.11.2010, 00:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

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



Цитата(LeD4eG @  6.11.2010,  21:28 Найти цитируемый пост)
я правильно понял?

да.

Добавлено через 1 минуту и 55 секунд
LeD4eG,  тебе ещё нужно память освободить.


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
LeD4eG
Дата 7.11.2010, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



да-да, про память я помню, но в виду того, что она освобождается после окончания программы, а её конец наступает быстро, то, в принципе...но про обязательное освобождение памяти я не забываю smile 
--------------------
Ты не успел стать для кого-то главным, кому-то очень нужным.....
PM MAIL   Вверх
Страницы: (3) Все 1 2 [3] 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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