Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Вопросы по поводу массива


Автор: ravvv 7.3.2009, 16:53
1) 
Дан одномерный массив, состоящий из семи элементов. Элементы создаются случайно из диапазона от 1 до 7. 
Определить максимальный элемент массива и ближайший к максимальному элементу элемент массива.


Код

#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    int mas [7];
    int i;
    int max;
    int a;
 
    srand(time(0));
       for (i=0;i<7;i++)
   {
    mas[i]=rand()%8;   
       cout << mas[i];
       cout << "\n";
}
 
    for (i=0; i<7; i++)
    {   
if (mas [i] > max)
{
max = mas [i];
}
 
}
 
 
cout << "max = " << max; cout <<"\n";
    system("PAUSE");
    return EXIT_SUCCESS;


Вопрос: Как определить ближайший к максимальному элементу элемент массива

2) Дан двумерный массив размером 3 на 3. Элементы создаются случайно из диапазона от 1 до 5 , найти разность элементов главной диагонали и сумму элементов побочной диагонали.
  
Код

#include <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
 
    int i,j;
 
    int sum = 0;
    int sub = 0;
    int sum_count = 0;
    int sub_count = 0;
 
    int mas [3] [3];
    srand(time(0));
 
    for (int i=0; i<3; i++)
    {
    for (int j=0; j<3; j++)
 
{
 mas[i][j]=rand()%6;   
   cout.width(2);
       cout << mas[i][j];
 
}
  cout << "\n";
}
 
//цикл для главной диагонали
    for (int i = 0;i<3;i++)
    {
        for (int j = 0;j<3;j++)
        {
            if (i == j)
            {
                sub -= mas[i][j];
                sub_count --;
            }
        }
    }
 
 
 
 
 
    //цикл для побочной диагонали
 
    for (int i = 0;i<3;i++)
    {
        if(mas[i][3-i] < )
        {
            sum += mas[i][3-i+1];
                sum_count ++;
        }
    }
 
 
 
cout << sub << "\n";
cout << sum << "\n";
 
 
    system("PAUSE");
    return EXIT_SUCCESS;
}


Вопрос: Как найти разность элементов на главной диагонали? И как определить саму побочную диагональ?

Помогите пожалуйста. Заранее благодарю

Автор: zim22 7.3.2009, 17:17
Цитата(ravvv @  7.3.2009,  16:53 Найти цитируемый пост)
Вопрос: Как определить ближайший к максимальному элементу элемент массива

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

Добавлено через 5 минут и 4 секунды
Цитата(ravvv @  7.3.2009,  16:53 Найти цитируемый пост)
Как найти разность элементов на главной диагонали?

необходимо с помощью двойного цикла пройти по всем элементам матрицы. и для тех элементов, у которых индексы по двум размерностям будут совпадать(т.е. элементы массива c индексами [0][0], [1][1], [2][2]) вычислить разность с помощью оператора -

Автор: andrew_121 7.3.2009, 17:37
Вот:
Код

#include <algorithm>
#include <iostream>

int main() {

    const int size = 8;

    int arr1[size] = {0};
    int arr2[size] = {0};
    int* it = NULL;
    srand( (unsigned)time(NULL) );

    std::generate(arr1, arr1+size, rand);
    
    it = std::max_element(arr1, arr1+size);
    
    std::remove_copy(arr1, arr1+size, arr2, *it);
    
    it = std::max_element(arr2, arr2+size);
    
   return 0;
}

std::remove_copy() замени на remove() если не нужно сохранение исходного массива.
Еще можно максимальный элемент переместить в конец массива, и искать в диапазоне не достигая последнего элемента.


Автор: zim22 7.3.2009, 17:43
Цитата(ravvv @  7.3.2009,  16:53 Найти цитируемый пост)
И как определить саму побочную диагональ?


взято из просторов интернета: 
На следующей матрице мы видим, что элементы побочной диагонали равны числу три. Остальные элементы (не принадлежащие побочной диагонали) равны нулю. В данном случае побочной диагонали принадлежат элементы a41, a32, a23 и a14.
0 0 0 3
0 0 3 0
0 3 0 0
3 0 0 0

Побочная диагональ имеет закономерность. Самый первый (верхний) элемент побочной диагонали имеет максимальный индекс по одной размерности массива и минимальный по другой(строка-столбец). В цикле прогоните матрицу, увеличивая на единицу индексацию по размерности, отвечающей за строки матрицы и одновременно уменьшая индекс столбца на единицу. Параллельно заведите себе переменную для накопления сумму этих элементов.

Автор: ravvv 7.3.2009, 18:06
спасибо. Разобрался.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)