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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Макс. Мин. Элмент для каждой 3 строки 
V
    Опции темы
ioManip
Дата 15.9.2013, 05:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Добрый день!
Есть функция для поиска Макс. Мин. элемента матрицы и нахождения их произведения.
Код

void MaxMinElements(int iArray[12][8])
{
    int MaxEl = iArray[0][0];
    int MinEl = iArray[0][0];
    
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            if (iArray[i][j] > MaxEl)
                MaxEl = iArray[i][j];
            
            if (iArray[i][j] < MinEl)
                MinEl = iArray[i][j];
        }
    }
    
    cout << "Максимальный элемент: ";
    cout << MaxEl << endl;
    cout << "Минимальный элемент: ";
    cout << MinEl << endl;
    cout << "Их произведение: " << MaxEl * MinEl << endl;
}


Но мне нужно применить ее, к каждой третьей строке матрицы. Я не понимаю как это сделать!
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
McMan
Дата 15.9.2013, 10:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Код

for (int i = 0; i < 12; i+=3)

ну или
Код

for (int i = 2; i < 12; i+=3)


Это сообщение отредактировал(а) McMan - 15.9.2013, 10:32
PM MAIL   Вверх
ioManip
Дата 15.9.2013, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Гляньте пожалуйста, может чего не вижу, но не работает вроде smile 
Код

void MaxMinElements(int iArray[12][8])
{
    int MaxEl = iArray[0][0];
    int MinEl = iArray[0][0];
    
    for (int i = 0; i < 12; i = i + 3)
    {
        for (int j = 0; j < 8; j++)
        {
            if (iArray[i][j] > MaxEl)
                MaxEl = iArray[i][j];
            
            if (iArray[i][j] < MinEl)
                MinEl = iArray[i][j];
        }
         
    cout << "Максимальный элемент: ";
    cout << MaxEl << endl;
    cout << "Минимальный элемент: ";
    cout << MinEl << endl;
    cout << "Их произведение: " << MaxEl * MinEl << endl;
}
int main()
{     
    int Array[12][8];
    
    srand(time(NULL));
    
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            Array[i][j] = rand() % 10 - 5;
            cout << setw(3) << Array[i][j] << " ";
        }
        cout << endl;
    }
    
    cout << endl;
    
    MaxMinElements(Array);
    
    return 0;
}


Это сообщение отредактировал(а) ioManip - 15.9.2013, 15:07
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
McMan
Дата 16.9.2013, 08:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



У внешнего  цикла скобочку фигурную закрой.

Код

#include <iostream> 
#include <stdlib.h>
#include <iomanip>

using namespace std;

void MaxMinElements(int iArray[12][8])
{
    int MaxEl = iArray[0][0];
    int MinEl = iArray[0][0];
    
    for (int i = 0; i < 12; i = i + 3)
    {
        for (int j = 0; j < 8; j++)
        {
            if (iArray[i][j] > MaxEl)
                MaxEl = iArray[i][j];
            
            if (iArray[i][j] < MinEl)
                MinEl = iArray[i][j];
        }
    }     
    cout << "Максимальный элемент: ";
    cout << MaxEl << endl;
    cout << "Минимальный элемент: ";
    cout << MinEl << endl;
    cout << "Их произведение: "  << MaxEl * MinEl << endl;
}

int main()
{     
    int Array[12][8];
    
    srand(time(NULL));
    
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            Array[i][j] = rand() % 10 - 5;
            cout << setw(3) << Array[i][j] << " ";
        }
        cout << endl;
    }
    
    cout << endl;
    
    MaxMinElements(Array);
    
    return 0;
}



так нормально ?

Это сообщение отредактировал(а) McMan - 16.9.2013, 08:41
PM MAIL   Вверх
ioManip
Дата 16.9.2013, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

 -2   4  -2  -5   0  -5   2  -3 
  4  -1   0   4  -4   4   3  -1 
 -5  -2   2  -4   3   1  -2   2 
 -2   2  -1  -1  -1   4  -2   3 
 -5   3  -5   0  -4   2   4  -5 
 -4   2   4   0   1   4   4   3 
  0   3  -4  -2   0  -1  -2  -5 
 -4   4  -1   1  -5  -5   1  -5 
  3   1   3   4   0   2  -4   1 
 -1  -5  -4  -3  -3  -3  -5   2 
 -4  -1  -3   3   3   0  -5  -5 
 -1  -1   3  -1   1   1   2   0 

Максимальный элемент: 4
Минимальный элемент: -5
Их произведение: -20
Максимальный элемент: 4
Минимальный элемент: -5
Их произведение: -20
Максимальный элемент: 4
Минимальный элемент: -5
Их произведение: -20
Максимальный элемент: 4
Минимальный элемент: -5
Их произведение: -20


--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
McMan
Дата 16.9.2013, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Почему по всей матрице? в первой строчке есть 4, в седьмой -5...
PM MAIL   Вверх
ioManip
Дата 16.9.2013, 09:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Хммм......либо мы не понили друг друга, либо это я, затупаю. Всего строк 12, получается если нужно применить функцию для каждой третьей строки, то всего она будет применнена 3 раза, т.е. начинаем с 0 1 2 3 4 5 6 7 8 9 10 11(черным обозначано, где она применяется).

Таким образом, если брать пример выше, то должно быть так:
3(4) строчка: -2   2  -1  -1  -1   4  -2   3 max = 2 min = -2
6(7) строчка:  0   3  -4  -2   0  -1  -2  -5 max = 3 min = -5
9(10) строчка:  -1  -5  -4  -3  -3  -3  -5   2 max = 2 min = -5

Разве не так?
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
xvr
Дата 16.9.2013, 10:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(ioManip @  16.9.2013,  09:50 Найти цитируемый пост)
Разве не так? 

Не так. Во первых - 0я строка тоже проверяется. Во вторых - либо вы ищите мин/макс по всем 3м строкам сразу (т.е. на выходе 1 пара мин/макс), либо по каждой строке в отдельности, но тогда начальные значения для MaxEl/MinEl вы должны брать из 0го элемента каждой строки, а не один раз из всей матрицы.

PM MAIL   Вверх
ioManip
Дата 16.9.2013, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



xvr, 
Цитата(xvr @  16.9.2013,  10:40 Найти цитируемый пост)
 0я строка тоже проверяется

То есть первый результат Max/Min берется из 0 - ой строки?
Цитата(xvr @  16.9.2013,  10:40 Найти цитируемый пост)
ибо по каждой строке в отдельности, но тогда начальные значения для MaxEl/MinEl вы должны брать из 0го элемента каждой строки

Да, именно это мне и нужно, так....тогда вот так получается?
Код

for (int i = 0; i < 12; i = i + 3)
    {
        int MaxEl = iArray[i][0];
        int MinEl = iArray[i][0];
        
        for (int j = 0; j < 8; j++)
        {
            if (iArray[i][j] > MaxEl)
                MaxEl = iArray[i][j];
            
            if (iArray[i][j] < MinEl)
                MinEl = iArray[i][j];
        }


Это сообщение отредактировал(а) ioManip - 16.9.2013, 13:10
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
feodorv
Дата 16.9.2013, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(ioManip @  16.9.2013,  14:10 Найти цитируемый пост)
тогда вот так получается?

Тогда уж так:
Код

for (int i = 0; i < 12; i = i + 3)
{
        int MaxEl = iArray[i][0];
        int MinEl = iArray[i][0];
        
        for (int j = 0; j < 8; j++)
        {
            if (iArray[i][j] > MaxEl)
                MaxEl = iArray[i][j];
            
            if (iArray[i][j] < MinEl)
                MinEl = iArray[i][j];
        }

        cout << "Строка: " << i << endl;
        cout << "  Максимальный элемент: ";
        cout << MaxEl << endl;
        cout << "  Минимальный элемент: ";
        cout << MinEl << endl;
        cout << "  Их произведение: "  << MaxEl * MinEl << endl;
}



--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
McMan
Дата 16.9.2013, 14:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Тогда уж функцию надо делать для нахождения min, max и произведения в одномерном массиве int[8].
 И вызывать ее для каждой третьей строки.
PM MAIL   Вверх
ioManip
Дата 17.9.2013, 03:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вообщем переработал полностью! Вот так получилось, только одна проблемка!
Код

#include <iostream>
#include <time.h>
#include <stdlib.h>
#include <iomanip>

using namespace std;
   
void MaxMinElements(int iArray[], int size_iArray)
{
    int MaxEl = iArray[0];
    int MinEl = iArray[0];
    
    for (int i = 1; i < size_iArray; i++)
    {
//        if (iArray[i] > MaxEl)
//            MaxEl = iArray[i];
        
        if (*(iArray + i) > *(iArray + MaxEl))
            MaxEl = i;
        
//        if (iArray[i] < MinEl)
//            MinEl = iArray[i];
       
        if (*(iArray + i) < *(iArray + MinEl))
            MinEl = i;
   
    }
    
    cout << "Максимальный элемент: ";
    cout << MaxEl << endl;
    cout << "Минимальный элемент: ";
    cout << MinEl << endl;
    cout << "Их произведение: " << MaxEl * MinEl << endl;
}

int main()
{
    int size_array = 10;
    int Array[size_array];
       
    srand(time(NULL));
    
    for (int i = 0; i < size_array; i++)
    {
        Array[i] = rand() % 100 - 50;
        cout << Array[i] << " ";
    }

    cout << endl;
    MaxMinElements(Array, size_array);
    cout << endl;
    
    int ArrayTwo[12][8];
    
    for (int i = 0; i < 12; i++)
    {
        for (int j = 0; j < 8; j++)
        {
            ArrayTwo[i][j] = rand() % 100 - 50;
            cout << setw(3) << ArrayTwo[i][j] << " ";
        }
        cout << endl;
    }

    for (int i = 3; i < 12; i = i + 3)
    {
        cout << endl;
        cout << "Строка: " << i << endl;
        MaxMinElements(ArrayTwo[i], 8);
    }
     
    return 0;
}

Вот здесь:
Код

 if (*(iArray + i) > *(iArray + MaxEl))
         MaxEl = i;
        
//        if (iArray[i] < MinEl)
//            MinEl = iArray[i];
       
 if (*(iArray + i) < *(iArray + MinEl))
         MinEl = i;

Как получить само значение элемента, а не его индекс?
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
feodorv
Дата 17.9.2013, 06:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

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



Цитата(ioManip @  17.9.2013,  04:48 Найти цитируемый пост)
Вот здесь

Нет, ну это категорически неправильно. Начато с того, что MaxEl и MinEl присваивается значение нулевого элемента массива, а продолжено тем, что MaxEl и MinEl рассматриваются как индексы массива. Что-нибудь одно. А под конец под видом произведения значений выводится произведение то ли индексов, то ли недоиндекснутых значений нулевого элемента массива...


Цитата(ioManip @  17.9.2013,  04:48 Найти цитируемый пост)
Как получить само значение элемента, а не его индекс? 

Так ведь правильно же было написано: iArray[i], почему правильные строчки закомментированы? Что-то не так?


Цитата(ioManip @  17.9.2013,  04:48 Найти цитируемый пост)
    for (int i = 3; i < 12; i = i + 3)

По что нулевая строка обижена?


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
ioManip
Дата 17.9.2013, 08:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



feodorv, 
Цитата(feodorv @  17.9.2013,  06:33 Найти цитируемый пост)
почему правильные строчки закомментированы?

Дело в том, что мне нужно реализовать тело функции 2 способами: обычным(закомменнтированные строчки) и с исп. указателей.
Но с указателями не совсем получается, как видите.

Цитата(feodorv @  17.9.2013,  06:33 Найти цитируемый пост)
По что нулевая строка обижена? 

Ну  я подумал, если мне нужно применить функцию только к каждой третьей строке, то зачем мне проверять нулевую?И как следствие выводить ее результат.
--------------------
Мечты не работают, пока ты не работаешь! 
PM MAIL Skype   Вверх
McMan
Дата 17.9.2013, 09:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата

Вот здесь


Код

 if (*(iArray + i) > MaxEl)
         MaxEl = *(iArray+i);
        
 if (*(iArray + i) < MinEl)
         MinEl = *(iArray+i);


Это сообщение отредактировал(а) McMan - 17.9.2013, 09:08
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

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

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

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

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


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

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


 




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


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

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